From 2c5ff158309e86836fe1b53d5f1a8576844a7b8d Mon Sep 17 00:00:00 2001
From: LeRatierBretonnien
Date: Thu, 6 Jun 2024 22:07:28 +0200
Subject: [PATCH] Sync to v7.2.0
---
packs/aides-de-jeu-fr/000762.log | 0
packs/aides-de-jeu-fr/MANIFEST-000760 | Bin 0 -> 226 bytes
packs/antidotes-and-remedes/000764.log | 0
packs/antidotes-and-remedes/MANIFEST-000762 | Bin 0 -> 178 bytes
packs/apothicarium/000762.log | 0
packs/apothicarium/MANIFEST-000760 | Bin 0 -> 226 bytes
packs/dons-de-rhya/000762.log | 0
packs/dons-de-rhya/MANIFEST-000760 | Bin 0 -> 226 bytes
packs/plats-dauberges/000762.log | 0
packs/plats-dauberges/MANIFEST-000760 | Bin 0 -> 229 bytes
packs/tables-des-traductions/000405.log | 0
packs/tables-des-traductions/MANIFEST-000403 | Bin 0 -> 226 bytes
scripts/18MeEQ0As3JvER71.js | 7 ++
scripts/1LDSzXeO5CzXgTOc.js | 1 +
scripts/1jQq9v8fXK8zuEBU.js | 20 +++++
scripts/2QB0LjueuJcIaHaC.js | 8 ++
scripts/3CdYFcInQVCIBUiE.js | 3 +
scripts/3nTSOcCmNZpQWK8b.js | 1 +
scripts/4cumLUlcuJ7m8C6t.js | 4 +
scripts/4drWKXjMgasxY7Jy.js | 1 +
scripts/4otpLq2TnDdgzpvc.js | 1 +
scripts/4uAUUZmLgxBKSmXA.js | 2 +
scripts/5ScjIdRUOxblHdWS.js | 53 +++++++++++++
scripts/5sYpJkT2WXIe0gIZ.js | 19 +++++
scripts/6Ws3ieQ7pG5poUyT.js | 8 ++
scripts/6gRixT3zIOAberJb.js | 5 ++
scripts/6jp8slPU33oBQe1V.js | 1 +
scripts/6oSs8qKFNFz2lSmh.js | 2 +
scripts/6qJP0hpShEM43ohx.js | 31 ++++++++
scripts/6ubojp9zwbfJnosT.js | 1 +
scripts/7w7QA7GBhzZ98OS0.js | 32 ++++++++
scripts/86ivOsBQAuu0UmFg.js | 6 ++
scripts/8xqYrBIf1Zhlwizg.js | 53 +++++++++++++
scripts/9HWEDsnNxSykqbF5.js | 3 +
scripts/AFiB20FaOBmBv2Kz.js | 2 +
scripts/AaPPmnv7AtxsRVUs.js | 1 +
scripts/BVNKF9omCppWPLys.js | 28 +++++++
scripts/BZETMpgrI5k1ol5b.js | 11 +++
scripts/C69xngEMghfwUx13.js | 3 +
scripts/CD4RnDpXZ9hnqVPQ.js | 2 +
scripts/CS6O7UUjQcUJoOUP.js | 9 +++
scripts/Dzi2CKpYapRGwNVr.js | 3 +
scripts/E3om295BMQojnM2F.js | 6 ++
scripts/EBNrA6FNX4d05EUx.js | 1 +
scripts/EC8cZmqrE095cDc2.js | 31 ++++++++
scripts/EDAMEOzdBfkoKHxP.js | 1 +
scripts/F2u4L4o0r1LTWeWK.js | 8 ++
scripts/FPYNcxm21678boLT.js | 18 +++++
scripts/FtZf56VI6Qsspu0D.js | 53 +++++++++++++
scripts/Fwk8WA8NfRivLFWJ.js | 1 +
scripts/GsAyB5xnK3ASeoah.js | 53 +++++++++++++
scripts/H85k4L3yICm7cfIk.js | 53 +++++++++++++
scripts/HUKzssLxeQo1wbx9.js | 9 +++
scripts/HYrl5aNMm8BAdqH7.js | 7 ++
scripts/IOroJBqTsWvoakJN.js | 2 +
scripts/IrkWq7IiFS65bTvC.js | 7 ++
scripts/JBoKPBr27C3PMoSD.js | 1 +
scripts/JXBUE0XuJOJNG7zE.js | 18 +++++
scripts/JhbZWZhOJ23yOBmG.js | 53 +++++++++++++
scripts/LjfScVGBf0Egr70E.js | 9 +++
scripts/MIhYSuJ6MI9B65UT.js | 4 +
scripts/MMv2B8TH7jxNCtdl.js | 44 +++++++++++
scripts/MMx8f5uJ15XOgJGg.js | 1 +
scripts/Me1wS5XdqUEy7OGt.js | 5 ++
scripts/NI3ZzIAlpQfVSjvf.js | 8 ++
scripts/O45vpR4jDbQQnmvJ.js | 13 ++++
scripts/OsLXutfXyQCAkhAf.js | 53 +++++++++++++
scripts/Pn5fekTbkwlr61XU.js | 53 +++++++++++++
scripts/PsO7aTdELJt35eHP.js | 10 +++
scripts/Q5gh5Y9dCdclcwsD.js | 1 +
scripts/Q7eULXQ9AfDRmUGO.js | 53 +++++++++++++
scripts/QHQ7XmFOjT9wXgw1.js | 4 +
scripts/QNxmImpLTou6WdMQ.js | 3 +
scripts/QfTBRGXVfwQSghmd.js | 18 +++++
scripts/R8FBHZaaARA3z9pB.js | 53 +++++++++++++
scripts/R8ecKGRzOr4ThvVa.js | 53 +++++++++++++
scripts/RPqgRUkiLY5thVbC.js | 53 +++++++++++++
scripts/RlhOAKfN0ghrrooR.js | 7 ++
scripts/Rnpw6UQdJifLeuna.js | 1 +
scripts/RsWXCcYHONf3ANlD.js | 1 +
scripts/RwMw848y13Jq2L4f.js | 23 ++++++
scripts/SefcrhXsdYGFcCW6.js | 3 +
scripts/Ssn21dxoMQiqD1y4.js | 1 +
scripts/T3RfSt3VMEat3iDD.js | 1 +
scripts/UDPsaymtZf39UsMk.js | 6 ++
scripts/UXdlnmwVgjc1QpF2.js | 2 +
scripts/UlRSaZG4ZUU6fMND.js | 53 +++++++++++++
scripts/UtqUthabeQ4rHDLQ.js | 2 +
scripts/VINX6TBAJQznhVcN.js | 53 +++++++++++++
scripts/VLdF2HPnCrNIgp7a.js | 13 ++++
scripts/VTS4RzbmReI87K9a.js | 1 +
scripts/VlHuDIAvPr8JM1P5.js | 1 +
scripts/Vns6WrafVq8NjX7t.js | 1 +
scripts/WJkwIrdj4NceOYe8.js | 1 +
scripts/WR0Kqn8CF5iwToak.js | 53 +++++++++++++
scripts/WeTlTniskT3Ej6vg.js | 1 +
scripts/X08401eOhKJrhNf1.js | 9 +++
scripts/X3vpmNUj9SL2CDnF.js | 2 +
scripts/XCAfy460IotarQek.js | 1 +
scripts/YySjPfSAPdMAfjsh.js | 11 +++
scripts/Z41L3MwOpJdAjVaj.js | 2 +
scripts/ZCBcwbVFHFTFRntb.js | 53 +++++++++++++
scripts/ZLspFT2I3ZdWWr2H.js | 1 +
scripts/ZOgtDW3mkTfeyc5M.js | 1 +
scripts/ZRoG7GiMDQWso6gN.js | 53 +++++++++++++
scripts/ZuoIVv3nmlGhhdx0.js | 4 +
scripts/araS9qYWOAVrV8F7.js | 2 +
scripts/b8G4cjfn3RG2tEYX.js | 1 +
scripts/bL98Sr1TRLMPEdlk.js | 4 +
scripts/bRiFHPC1StKxqNIC.js | 6 ++
scripts/cTYNaKbepMwqYsZ8.js | 14 ++++
scripts/ckKbPfaTiQ2qBZdR.js | 1 +
scripts/dULCkRxtisuzQyuK.js | 2 +
scripts/dWr3tkFoIzsAgelu.js | 11 +++
scripts/dbHv7dAXgB2Oy1Fg.js | 3 +
scripts/dh5mAlaOOLCBC0YQ.js | 1 +
scripts/dsXGavzXLerXR8Xg.js | 1 +
scripts/dxxDFXNNqUsuMyUD.js | 1 +
scripts/e4HotRnEiyXR0pIu.js | 1 +
scripts/f29Pv6TQtgILxt1h.js | 11 +++
scripts/fFi9JD4uCY9DPC5B.js | 4 +
scripts/fTw3mpSUOlkqVVUC.js | 1 +
scripts/gMIenSmLklAkB2Zm.js | 8 ++
scripts/gOm8utR3HLQBT5hA.js | 6 ++
scripts/goz8yTlMozlsz3uY.js | 53 +++++++++++++
scripts/groEX1wJ9l00PkDF.js | 75 +++++++++++++++++++
scripts/gxuBeGHwjZ7WfPeu.js | 2 +
scripts/hOgha3ir8K9TVphO.js | 1 +
scripts/hSImyYjL0CENTvXf.js | 23 ++++++
scripts/hWWvkPbgIN3lxz1u.js | 1 +
scripts/hYNWp75ggWSTht55.js | 7 ++
scripts/hj7tI212neKIu9dh.js | 1 +
scripts/ht7csu1KImHzpzL5.js | 1 +
scripts/huJcVpVn6Q7sQkFC.js | 2 +
scripts/iO2hCDwyQ7v4qrOI.js | 10 +++
scripts/iqUvV1Vu81M3WyZ4.js | 4 +
scripts/jOm7RxGFm1y6mCpN.js | 1 +
scripts/jXbrIGxznqf1SNxZ.js | 3 +
scripts/k0AkkBLtE8oZhBwn.js | 6 ++
scripts/kbXDGAmWWD4CZJHB.js | 5 ++
scripts/kvnZz8yqdTZbErkr.js | 3 +
scripts/lOIHiAIDtj91kllN.js | 6 ++
scripts/lZuavewrJzOehrJQ.js | 14 ++++
scripts/ljGX2w8hCTyLAjRp.js | 2 +
scripts/mGHKBkDp4omSaBlD.js | 12 +++
scripts/mT7PDcjF3cJTDbjR.js | 2 +
scripts/mlulnXQo8XU8vKLD.js | 8 ++
scripts/nIOeK0BrtdZeZW8X.js | 17 +++++
scripts/nkSmu7v9WiAaK4vq.js | 53 +++++++++++++
scripts/nlQA0shW8FCXjY7u.js | 1 +
scripts/pVSnn4Zw6y1EBDhv.js | 2 +
scripts/pkKpxVqRHIzywerL.js | 6 ++
scripts/pvk5OhTNdVgwXoUa.js | 1 +
scripts/q8lOAWr2970sZeTw.js | 53 +++++++++++++
scripts/qTcK1TSjLTi0jNQK.js | 8 ++
scripts/qnJu82zgnfOsnqZV.js | 12 +++
scripts/qzGPJflVW7c2Ciim.js | 1 +
scripts/rBAoyhzeU3Q8MVSk.js | 53 +++++++++++++
scripts/rVRDoxiWILo7d8FF.js | 4 +
scripts/rX8FTinyTMj9WJri.js | 37 +++++++++
scripts/rlTvhnDpj4lzfusf.js | 1 +
scripts/rly9iBUy8EX7NhQT.js | 27 +++++++
scripts/rqTT8yOyK4bUwbdm.js | 15 ++++
scripts/sHVLKIdPbzLVItCa.js | 2 +
scripts/sQDh3g11pWchxpW9.js | 1 +
scripts/tuIsytv3jl2yAIb2.js | 1 +
scripts/uhCq5NwjQ2a2idPn.js | 53 +++++++++++++
scripts/v18mmwUmuKiVfwzQ.js | 6 ++
scripts/vTebTUzXortx1Qut.js | 4 +
scripts/vUpMQlbwDiYfMCNS.js | 1 +
scripts/w4RuGIfseGoxXA3k.js | 53 +++++++++++++
scripts/wRxgpGmlUpe7nwzJ.js | 12 +++
scripts/xVYVegD692CCv8Yl.js | 12 +++
scripts/xWPgIZOQLba5nZ23.js | 14 ++++
scripts/xihniGjgqOhuaKWc.js | 7 ++
scripts/z14Tb2YKCjiE5ZTU.js | 12 +++
scripts/zL7ECmBBMAqf5Esn.js | 30 ++++++++
scripts/zdGAvfL7zJ7wpYxG.js | 53 +++++++++++++
scripts/zkc1gIPLj0VoAONT.js | 8 ++
scripts/ztIkD5Zt6ko9D4Ca.js | 1 +
180 files changed, 2323 insertions(+)
create mode 100644 packs/aides-de-jeu-fr/000762.log
create mode 100644 packs/aides-de-jeu-fr/MANIFEST-000760
create mode 100644 packs/antidotes-and-remedes/000764.log
create mode 100644 packs/antidotes-and-remedes/MANIFEST-000762
create mode 100644 packs/apothicarium/000762.log
create mode 100644 packs/apothicarium/MANIFEST-000760
create mode 100644 packs/dons-de-rhya/000762.log
create mode 100644 packs/dons-de-rhya/MANIFEST-000760
create mode 100644 packs/plats-dauberges/000762.log
create mode 100644 packs/plats-dauberges/MANIFEST-000760
create mode 100644 packs/tables-des-traductions/000405.log
create mode 100644 packs/tables-des-traductions/MANIFEST-000403
create mode 100644 scripts/18MeEQ0As3JvER71.js
create mode 100644 scripts/1LDSzXeO5CzXgTOc.js
create mode 100644 scripts/1jQq9v8fXK8zuEBU.js
create mode 100644 scripts/2QB0LjueuJcIaHaC.js
create mode 100644 scripts/3CdYFcInQVCIBUiE.js
create mode 100644 scripts/3nTSOcCmNZpQWK8b.js
create mode 100644 scripts/4cumLUlcuJ7m8C6t.js
create mode 100644 scripts/4drWKXjMgasxY7Jy.js
create mode 100644 scripts/4otpLq2TnDdgzpvc.js
create mode 100644 scripts/4uAUUZmLgxBKSmXA.js
create mode 100644 scripts/5ScjIdRUOxblHdWS.js
create mode 100644 scripts/5sYpJkT2WXIe0gIZ.js
create mode 100644 scripts/6Ws3ieQ7pG5poUyT.js
create mode 100644 scripts/6gRixT3zIOAberJb.js
create mode 100644 scripts/6jp8slPU33oBQe1V.js
create mode 100644 scripts/6oSs8qKFNFz2lSmh.js
create mode 100644 scripts/6qJP0hpShEM43ohx.js
create mode 100644 scripts/6ubojp9zwbfJnosT.js
create mode 100644 scripts/7w7QA7GBhzZ98OS0.js
create mode 100644 scripts/86ivOsBQAuu0UmFg.js
create mode 100644 scripts/8xqYrBIf1Zhlwizg.js
create mode 100644 scripts/9HWEDsnNxSykqbF5.js
create mode 100644 scripts/AFiB20FaOBmBv2Kz.js
create mode 100644 scripts/AaPPmnv7AtxsRVUs.js
create mode 100644 scripts/BVNKF9omCppWPLys.js
create mode 100644 scripts/BZETMpgrI5k1ol5b.js
create mode 100644 scripts/C69xngEMghfwUx13.js
create mode 100644 scripts/CD4RnDpXZ9hnqVPQ.js
create mode 100644 scripts/CS6O7UUjQcUJoOUP.js
create mode 100644 scripts/Dzi2CKpYapRGwNVr.js
create mode 100644 scripts/E3om295BMQojnM2F.js
create mode 100644 scripts/EBNrA6FNX4d05EUx.js
create mode 100644 scripts/EC8cZmqrE095cDc2.js
create mode 100644 scripts/EDAMEOzdBfkoKHxP.js
create mode 100644 scripts/F2u4L4o0r1LTWeWK.js
create mode 100644 scripts/FPYNcxm21678boLT.js
create mode 100644 scripts/FtZf56VI6Qsspu0D.js
create mode 100644 scripts/Fwk8WA8NfRivLFWJ.js
create mode 100644 scripts/GsAyB5xnK3ASeoah.js
create mode 100644 scripts/H85k4L3yICm7cfIk.js
create mode 100644 scripts/HUKzssLxeQo1wbx9.js
create mode 100644 scripts/HYrl5aNMm8BAdqH7.js
create mode 100644 scripts/IOroJBqTsWvoakJN.js
create mode 100644 scripts/IrkWq7IiFS65bTvC.js
create mode 100644 scripts/JBoKPBr27C3PMoSD.js
create mode 100644 scripts/JXBUE0XuJOJNG7zE.js
create mode 100644 scripts/JhbZWZhOJ23yOBmG.js
create mode 100644 scripts/LjfScVGBf0Egr70E.js
create mode 100644 scripts/MIhYSuJ6MI9B65UT.js
create mode 100644 scripts/MMv2B8TH7jxNCtdl.js
create mode 100644 scripts/MMx8f5uJ15XOgJGg.js
create mode 100644 scripts/Me1wS5XdqUEy7OGt.js
create mode 100644 scripts/NI3ZzIAlpQfVSjvf.js
create mode 100644 scripts/O45vpR4jDbQQnmvJ.js
create mode 100644 scripts/OsLXutfXyQCAkhAf.js
create mode 100644 scripts/Pn5fekTbkwlr61XU.js
create mode 100644 scripts/PsO7aTdELJt35eHP.js
create mode 100644 scripts/Q5gh5Y9dCdclcwsD.js
create mode 100644 scripts/Q7eULXQ9AfDRmUGO.js
create mode 100644 scripts/QHQ7XmFOjT9wXgw1.js
create mode 100644 scripts/QNxmImpLTou6WdMQ.js
create mode 100644 scripts/QfTBRGXVfwQSghmd.js
create mode 100644 scripts/R8FBHZaaARA3z9pB.js
create mode 100644 scripts/R8ecKGRzOr4ThvVa.js
create mode 100644 scripts/RPqgRUkiLY5thVbC.js
create mode 100644 scripts/RlhOAKfN0ghrrooR.js
create mode 100644 scripts/Rnpw6UQdJifLeuna.js
create mode 100644 scripts/RsWXCcYHONf3ANlD.js
create mode 100644 scripts/RwMw848y13Jq2L4f.js
create mode 100644 scripts/SefcrhXsdYGFcCW6.js
create mode 100644 scripts/Ssn21dxoMQiqD1y4.js
create mode 100644 scripts/T3RfSt3VMEat3iDD.js
create mode 100644 scripts/UDPsaymtZf39UsMk.js
create mode 100644 scripts/UXdlnmwVgjc1QpF2.js
create mode 100644 scripts/UlRSaZG4ZUU6fMND.js
create mode 100644 scripts/UtqUthabeQ4rHDLQ.js
create mode 100644 scripts/VINX6TBAJQznhVcN.js
create mode 100644 scripts/VLdF2HPnCrNIgp7a.js
create mode 100644 scripts/VTS4RzbmReI87K9a.js
create mode 100644 scripts/VlHuDIAvPr8JM1P5.js
create mode 100644 scripts/Vns6WrafVq8NjX7t.js
create mode 100644 scripts/WJkwIrdj4NceOYe8.js
create mode 100644 scripts/WR0Kqn8CF5iwToak.js
create mode 100644 scripts/WeTlTniskT3Ej6vg.js
create mode 100644 scripts/X08401eOhKJrhNf1.js
create mode 100644 scripts/X3vpmNUj9SL2CDnF.js
create mode 100644 scripts/XCAfy460IotarQek.js
create mode 100644 scripts/YySjPfSAPdMAfjsh.js
create mode 100644 scripts/Z41L3MwOpJdAjVaj.js
create mode 100644 scripts/ZCBcwbVFHFTFRntb.js
create mode 100644 scripts/ZLspFT2I3ZdWWr2H.js
create mode 100644 scripts/ZOgtDW3mkTfeyc5M.js
create mode 100644 scripts/ZRoG7GiMDQWso6gN.js
create mode 100644 scripts/ZuoIVv3nmlGhhdx0.js
create mode 100644 scripts/araS9qYWOAVrV8F7.js
create mode 100644 scripts/b8G4cjfn3RG2tEYX.js
create mode 100644 scripts/bL98Sr1TRLMPEdlk.js
create mode 100644 scripts/bRiFHPC1StKxqNIC.js
create mode 100644 scripts/cTYNaKbepMwqYsZ8.js
create mode 100644 scripts/ckKbPfaTiQ2qBZdR.js
create mode 100644 scripts/dULCkRxtisuzQyuK.js
create mode 100644 scripts/dWr3tkFoIzsAgelu.js
create mode 100644 scripts/dbHv7dAXgB2Oy1Fg.js
create mode 100644 scripts/dh5mAlaOOLCBC0YQ.js
create mode 100644 scripts/dsXGavzXLerXR8Xg.js
create mode 100644 scripts/dxxDFXNNqUsuMyUD.js
create mode 100644 scripts/e4HotRnEiyXR0pIu.js
create mode 100644 scripts/f29Pv6TQtgILxt1h.js
create mode 100644 scripts/fFi9JD4uCY9DPC5B.js
create mode 100644 scripts/fTw3mpSUOlkqVVUC.js
create mode 100644 scripts/gMIenSmLklAkB2Zm.js
create mode 100644 scripts/gOm8utR3HLQBT5hA.js
create mode 100644 scripts/goz8yTlMozlsz3uY.js
create mode 100644 scripts/groEX1wJ9l00PkDF.js
create mode 100644 scripts/gxuBeGHwjZ7WfPeu.js
create mode 100644 scripts/hOgha3ir8K9TVphO.js
create mode 100644 scripts/hSImyYjL0CENTvXf.js
create mode 100644 scripts/hWWvkPbgIN3lxz1u.js
create mode 100644 scripts/hYNWp75ggWSTht55.js
create mode 100644 scripts/hj7tI212neKIu9dh.js
create mode 100644 scripts/ht7csu1KImHzpzL5.js
create mode 100644 scripts/huJcVpVn6Q7sQkFC.js
create mode 100644 scripts/iO2hCDwyQ7v4qrOI.js
create mode 100644 scripts/iqUvV1Vu81M3WyZ4.js
create mode 100644 scripts/jOm7RxGFm1y6mCpN.js
create mode 100644 scripts/jXbrIGxznqf1SNxZ.js
create mode 100644 scripts/k0AkkBLtE8oZhBwn.js
create mode 100644 scripts/kbXDGAmWWD4CZJHB.js
create mode 100644 scripts/kvnZz8yqdTZbErkr.js
create mode 100644 scripts/lOIHiAIDtj91kllN.js
create mode 100644 scripts/lZuavewrJzOehrJQ.js
create mode 100644 scripts/ljGX2w8hCTyLAjRp.js
create mode 100644 scripts/mGHKBkDp4omSaBlD.js
create mode 100644 scripts/mT7PDcjF3cJTDbjR.js
create mode 100644 scripts/mlulnXQo8XU8vKLD.js
create mode 100644 scripts/nIOeK0BrtdZeZW8X.js
create mode 100644 scripts/nkSmu7v9WiAaK4vq.js
create mode 100644 scripts/nlQA0shW8FCXjY7u.js
create mode 100644 scripts/pVSnn4Zw6y1EBDhv.js
create mode 100644 scripts/pkKpxVqRHIzywerL.js
create mode 100644 scripts/pvk5OhTNdVgwXoUa.js
create mode 100644 scripts/q8lOAWr2970sZeTw.js
create mode 100644 scripts/qTcK1TSjLTi0jNQK.js
create mode 100644 scripts/qnJu82zgnfOsnqZV.js
create mode 100644 scripts/qzGPJflVW7c2Ciim.js
create mode 100644 scripts/rBAoyhzeU3Q8MVSk.js
create mode 100644 scripts/rVRDoxiWILo7d8FF.js
create mode 100644 scripts/rX8FTinyTMj9WJri.js
create mode 100644 scripts/rlTvhnDpj4lzfusf.js
create mode 100644 scripts/rly9iBUy8EX7NhQT.js
create mode 100644 scripts/rqTT8yOyK4bUwbdm.js
create mode 100644 scripts/sHVLKIdPbzLVItCa.js
create mode 100644 scripts/sQDh3g11pWchxpW9.js
create mode 100644 scripts/tuIsytv3jl2yAIb2.js
create mode 100644 scripts/uhCq5NwjQ2a2idPn.js
create mode 100644 scripts/v18mmwUmuKiVfwzQ.js
create mode 100644 scripts/vTebTUzXortx1Qut.js
create mode 100644 scripts/vUpMQlbwDiYfMCNS.js
create mode 100644 scripts/w4RuGIfseGoxXA3k.js
create mode 100644 scripts/wRxgpGmlUpe7nwzJ.js
create mode 100644 scripts/xVYVegD692CCv8Yl.js
create mode 100644 scripts/xWPgIZOQLba5nZ23.js
create mode 100644 scripts/xihniGjgqOhuaKWc.js
create mode 100644 scripts/z14Tb2YKCjiE5ZTU.js
create mode 100644 scripts/zL7ECmBBMAqf5Esn.js
create mode 100644 scripts/zdGAvfL7zJ7wpYxG.js
create mode 100644 scripts/zkc1gIPLj0VoAONT.js
create mode 100644 scripts/ztIkD5Zt6ko9D4Ca.js
diff --git a/packs/aides-de-jeu-fr/000762.log b/packs/aides-de-jeu-fr/000762.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/aides-de-jeu-fr/MANIFEST-000760 b/packs/aides-de-jeu-fr/MANIFEST-000760
new file mode 100644
index 0000000000000000000000000000000000000000..28cccc690fc38c438d4309dad581cb4243417846
GIT binary patch
literal 226
zcmbO>uOMqD10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei18!g<@8IX;EHcj$T1x
zdTOy^acOC!pM|+&j$u?(cu8QOURFlBUtUIdMp3qZfp@W?6QckF7_c)wWj)i(tO(Pu
zXzZDun^{m)<>O@LQ=Xca%*X*zNVW}j-}O?t7#Nv;vT`yo|6*kk>RL2!0Z8B%NZ=1p
F003E*L;U~%
literal 0
HcmV?d00001
diff --git a/packs/antidotes-and-remedes/000764.log b/packs/antidotes-and-remedes/000764.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/antidotes-and-remedes/MANIFEST-000762 b/packs/antidotes-and-remedes/MANIFEST-000762
new file mode 100644
index 0000000000000000000000000000000000000000..3048157323b8b98e57987f2acd642dd40b7610ba
GIT binary patch
literal 178
zcmXpx@?cLp10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei18!ykcfaYHqP&WsX}$
zwt235lz*P1S4e0Gqdg-72(U9gXFc4^uBe!npOcbWRIF%RT38zCVQySf;+&H2Vc^Lq
n16D`apihGJ+zgCNzgamMnE$Y{>}M+d(=QJa`2!O92ND4QM8Pt+
literal 0
HcmV?d00001
diff --git a/packs/apothicarium/000762.log b/packs/apothicarium/000762.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/apothicarium/MANIFEST-000760 b/packs/apothicarium/MANIFEST-000760
new file mode 100644
index 0000000000000000000000000000000000000000..ad1079493e375deb50a829e1f3448a7eb40fcb3a
GIT binary patch
literal 226
zcmWe;KX-B`10$nUPHI_dPD+xVQ)NkNd1i5{bAE0?Vo_pAei18!g<@8IX;EHcj$T1x
zdTOy^a#V?5dSaz#xly27hO=d`pgoS$2eSd>_jU&P8_p_r9lT9lWVqgRla
zo?5I}SygW7X;5UG;p}Z5;FVXUR~+Ey9GPX57i8>QV4UTV!sx;P2JDPaS>Ik}R)pzS
zG&Lx-2y@Iz$;~gTEHcQbV3dR?B-@6GpW+j_7#Nv;vT`yo|6*lvbzS~e1tjnbB=83)
F006;^Ludd1
literal 0
HcmV?d00001
diff --git a/packs/plats-dauberges/000762.log b/packs/plats-dauberges/000762.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/plats-dauberges/MANIFEST-000760 b/packs/plats-dauberges/MANIFEST-000760
new file mode 100644
index 0000000000000000000000000000000000000000..b03ebe7890dc31002d52a1b7cfae5fc59b17d4b8
GIT binary patch
literal 229
zcmZ3sZ*FPsJDAzs2#JwohiBXvW4A_|(nE&^)D8lqB
z8km}S`uO=3`D6wZ8oOs2Gx9+cl5K-i_35u%42(=um^m4kr!upsZ2TA#4HB3N5||DY
F003^kK`H 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 += ` (ignore ${metalAP} PA de métal sur ${game.wfrp4e.config.locations[loc]})`
+this.script.scriptMessage(msg)
+
+let test = await this.actor.setupSkill("Résistance", {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/scripts/2QB0LjueuJcIaHaC.js b/scripts/2QB0LjueuJcIaHaC.js
new file mode 100644
index 0000000..88b5805
--- /dev/null
+++ b/scripts/2QB0LjueuJcIaHaC.js
@@ -0,0 +1,8 @@
+if (isNaN(parseInt(this.item.system.specification.value)))
+{
+ let value = await ValueDialog.create("Entrer la valeur d'Armure", this.effect.name);
+ if (value)
+ {
+ this.item.updateSource({"system.specification.value" : value});
+ }
+}
\ No newline at end of file
diff --git a/scripts/3CdYFcInQVCIBUiE.js b/scripts/3CdYFcInQVCIBUiE.js
new file mode 100644
index 0000000..69af1ae
--- /dev/null
+++ b/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/scripts/3nTSOcCmNZpQWK8b.js b/scripts/3nTSOcCmNZpQWK8b.js
new file mode 100644
index 0000000..49dd61a
--- /dev/null
+++ b/scripts/3nTSOcCmNZpQWK8b.js
@@ -0,0 +1 @@
+this.actor.addCondition("blinded", 3);
\ No newline at end of file
diff --git a/scripts/4cumLUlcuJ7m8C6t.js b/scripts/4cumLUlcuJ7m8C6t.js
new file mode 100644
index 0000000..ce8df65
--- /dev/null
+++ b/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/scripts/4drWKXjMgasxY7Jy.js b/scripts/4drWKXjMgasxY7Jy.js
new file mode 100644
index 0000000..313f7b5
--- /dev/null
+++ b/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/scripts/4otpLq2TnDdgzpvc.js b/scripts/4otpLq2TnDdgzpvc.js
new file mode 100644
index 0000000..ce5c7f0
--- /dev/null
+++ b/scripts/4otpLq2TnDdgzpvc.js
@@ -0,0 +1 @@
+args.actor.system.details.man -= 3;
\ No newline at end of file
diff --git a/scripts/4uAUUZmLgxBKSmXA.js b/scripts/4uAUUZmLgxBKSmXA.js
new file mode 100644
index 0000000..42f8c77
--- /dev/null
+++ b/scripts/4uAUUZmLgxBKSmXA.js
@@ -0,0 +1,2 @@
+if (args.totalWoundLoss > 0)
+ this.effect.delete();
\ No newline at end of file
diff --git a/scripts/5ScjIdRUOxblHdWS.js b/scripts/5ScjIdRUOxblHdWS.js
new file mode 100644
index 0000000..ca84c4b
--- /dev/null
+++ b/scripts/5ScjIdRUOxblHdWS.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Métier (Charpentier)';
+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/scripts/5sYpJkT2WXIe0gIZ.js b/scripts/5sYpJkT2WXIe0gIZ.js
new file mode 100644
index 0000000..c5b5bc6
--- /dev/null
+++ b/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/scripts/6Ws3ieQ7pG5poUyT.js b/scripts/6Ws3ieQ7pG5poUyT.js
new file mode 100644
index 0000000..0d1dea8
--- /dev/null
+++ b/scripts/6Ws3ieQ7pG5poUyT.js
@@ -0,0 +1,8 @@
+if (isNaN(parseInt(this.item.system.specification.value)))
+{
+ let value = await ValueDialog.create("Saisir lde Savoir de lancer de sort", 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/scripts/6gRixT3zIOAberJb.js b/scripts/6gRixT3zIOAberJb.js
new file mode 100644
index 0000000..09172e0
--- /dev/null
+++ b/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/scripts/6jp8slPU33oBQe1V.js b/scripts/6jp8slPU33oBQe1V.js
new file mode 100644
index 0000000..e38825c
--- /dev/null
+++ b/scripts/6jp8slPU33oBQe1V.js
@@ -0,0 +1 @@
+return args.options.crewTest?.system.handling !== true;
\ No newline at end of file
diff --git a/scripts/6oSs8qKFNFz2lSmh.js b/scripts/6oSs8qKFNFz2lSmh.js
new file mode 100644
index 0000000..a96cb59
--- /dev/null
+++ b/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/scripts/6qJP0hpShEM43ohx.js b/scripts/6qJP0hpShEM43ohx.js
new file mode 100644
index 0000000..3b9591f
--- /dev/null
+++ b/scripts/6qJP0hpShEM43ohx.js
@@ -0,0 +1,31 @@
+const actor = args.actor;
+
+if (actor.itemTypes.skill.find(s => s.name === "Savoir (Océans)")) {
+ const loreTest = await actor.setupSkill('Savoir (Océans)', {
+ appendTitle: ` – ${this.effect.name}`,
+ skipTargets: true,
+ fields: {difficulty: 'hard'},
+ characteristic: 'int',
+ });
+ await loreTest.roll();
+
+ if (loreTest.succeeded) {
+ loreTest.result.other.push(`${actor.name} reconnaît l'attrait du Léviathan.`);
+ loreTest.renderRollCard();
+ return;
+ }
+}
+
+let test = await actor.setupSkill('Calme', {
+ appendTitle: ` – ${this.effect.name}`,
+ skipTargets: true,
+ fields: {difficulty: 'easy'},
+ characteristic: 'wp',
+});
+await test.roll();
+
+if (!test.succeeded) {
+ test.result.other.push(`${actor.name} devien @Condition[Assommé] par cette vision.`);
+ test.renderRollCard();
+ actor.addCondition("stunned");
+}
\ No newline at end of file
diff --git a/scripts/6ubojp9zwbfJnosT.js b/scripts/6ubojp9zwbfJnosT.js
new file mode 100644
index 0000000..0620aad
--- /dev/null
+++ b/scripts/6ubojp9zwbfJnosT.js
@@ -0,0 +1 @@
+args.actor.system.details.move.value += 1;
\ No newline at end of file
diff --git a/scripts/7w7QA7GBhzZ98OS0.js b/scripts/7w7QA7GBhzZ98OS0.js
new file mode 100644
index 0000000..2227fc2
--- /dev/null
+++ b/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/scripts/86ivOsBQAuu0UmFg.js b/scripts/86ivOsBQAuu0UmFg.js
new file mode 100644
index 0000000..e440e5a
--- /dev/null
+++ b/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/scripts/8xqYrBIf1Zhlwizg.js b/scripts/8xqYrBIf1Zhlwizg.js
new file mode 100644
index 0000000..1643b88
--- /dev/null
+++ b/scripts/8xqYrBIf1Zhlwizg.js
@@ -0,0 +1,53 @@
+const repaired_message = `Fini de passer l'ancre.
`;
+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: `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/scripts/9HWEDsnNxSykqbF5.js b/scripts/9HWEDsnNxSykqbF5.js
new file mode 100644
index 0000000..0ca9acf
--- /dev/null
+++ b/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/scripts/AFiB20FaOBmBv2Kz.js b/scripts/AFiB20FaOBmBv2Kz.js
new file mode 100644
index 0000000..9a000d5
--- /dev/null
+++ b/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/scripts/AaPPmnv7AtxsRVUs.js b/scripts/AaPPmnv7AtxsRVUs.js
new file mode 100644
index 0000000..18f4b61
--- /dev/null
+++ b/scripts/AaPPmnv7AtxsRVUs.js
@@ -0,0 +1 @@
+args.actor.details.move.value = 1;
\ No newline at end of file
diff --git a/scripts/BVNKF9omCppWPLys.js b/scripts/BVNKF9omCppWPLys.js
new file mode 100644
index 0000000..be61da0
--- /dev/null
+++ b/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("Vous devez contrôler un Acteur capable de réaliser un Test de Force");
+
+let test = await actor.setupCharacteristic("s", {
+ skipTargets: true,
+ appendTitle: " - Renflouement",
+ 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/scripts/BZETMpgrI5k1ol5b.js b/scripts/BZETMpgrI5k1ol5b.js
new file mode 100644
index 0000000..5934888
--- /dev/null
+++ b/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/scripts/C69xngEMghfwUx13.js b/scripts/C69xngEMghfwUx13.js
new file mode 100644
index 0000000..65f9299
--- /dev/null
+++ b/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/scripts/CD4RnDpXZ9hnqVPQ.js b/scripts/CD4RnDpXZ9hnqVPQ.js
new file mode 100644
index 0000000..d733e08
--- /dev/null
+++ b/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/scripts/CS6O7UUjQcUJoOUP.js b/scripts/CS6O7UUjQcUJoOUP.js
new file mode 100644
index 0000000..1a8a772
--- /dev/null
+++ b/scripts/CS6O7UUjQcUJoOUP.js
@@ -0,0 +1,9 @@
+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 + " doit réaliser un Test de Force Mentale s.name === "Savoir (Savoir)")) {
+ const loreTest = await actor.setupSkill('Savoir (Savoir)', {
+ appendTitle: ` – ${this.effect.name}`,
+ skipTargets: true,
+ fields: {difficulty: 'hard'},
+ characteristic: 'int',
+ });
+ await loreTest.roll();
+
+ if (loreTest.succeeded) {
+ loreTest.result.other.push(`${actor.name} reconnaît les leurres de Lurkerfis.`);
+ loreTest.renderRollCard();
+ return;
+ }
+}
+
+let test = await actor.setupSkill('Calme', {
+ appendTitle: ` – ${this.effect.name}`,
+ skipTargets: true,
+ fields: {difficulty: 'easy'},
+ characteristic: 'wp',
+});
+await test.roll();
+
+if (!test.succeeded) {
+ test.result.other.push(`${actor.name} est devenu séduit par la vue et incapable d'effectuer aucune action sauf se diriger vers la lumière`);
+ test.renderRollCard();
+ actor.addCondition("unconscious");
+}
\ No newline at end of file
diff --git a/scripts/EDAMEOzdBfkoKHxP.js b/scripts/EDAMEOzdBfkoKHxP.js
new file mode 100644
index 0000000..6b1f28e
--- /dev/null
+++ b/scripts/EDAMEOzdBfkoKHxP.js
@@ -0,0 +1 @@
+return args.skill?.name !== game.i18n.localize("NAME.Navigation");
\ No newline at end of file
diff --git a/scripts/F2u4L4o0r1LTWeWK.js b/scripts/F2u4L4o0r1LTWeWK.js
new file mode 100644
index 0000000..6151da2
--- /dev/null
+++ b/scripts/F2u4L4o0r1LTWeWK.js
@@ -0,0 +1,8 @@
+if (isNaN(parseInt(this.item.system.specification.value)))
+{
+ let value = await ValueDialog.create("Saisir la valeur de Terreur", this.effect.name);
+ if (value)
+ {
+ this.item.updateSource({"system.specification.value" : value});
+ }
+}
\ No newline at end of file
diff --git a/scripts/FPYNcxm21678boLT.js b/scripts/FPYNcxm21678boLT.js
new file mode 100644
index 0000000..ccdea9e
--- /dev/null
+++ b/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} a été obligé de lâcher çà ${target.name}.`);
+ return await this.effect.delete();
+}
+
+if (SL > 0) {
+ args.opposedTest.data.opposeResult.other.push(`${args.defenderTest.actor.name} a été empêché de presser ${target.name} pour un tour.`);
+ let turns = this.effect.getFlag("wfrp4e", "turns");
+ this.effect.setFlag("wfrp4e", "turns", turns + 1);
+}
\ No newline at end of file
diff --git a/scripts/FtZf56VI6Qsspu0D.js b/scripts/FtZf56VI6Qsspu0D.js
new file mode 100644
index 0000000..b12fa81
--- /dev/null
+++ b/scripts/FtZf56VI6Qsspu0D.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Métier (Charpentier)';
+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: `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/scripts/Fwk8WA8NfRivLFWJ.js b/scripts/Fwk8WA8NfRivLFWJ.js
new file mode 100644
index 0000000..4aa2968
--- /dev/null
+++ b/scripts/Fwk8WA8NfRivLFWJ.js
@@ -0,0 +1 @@
+return args.skill?.name === "Divertissement (Chant)";
\ No newline at end of file
diff --git a/scripts/GsAyB5xnK3ASeoah.js b/scripts/GsAyB5xnK3ASeoah.js
new file mode 100644
index 0000000..f6b69c0
--- /dev/null
+++ b/scripts/GsAyB5xnK3ASeoah.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Métier (Charpentier)';
+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: `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/scripts/H85k4L3yICm7cfIk.js b/scripts/H85k4L3yICm7cfIk.js
new file mode 100644
index 0000000..62a436f
--- /dev/null
+++ b/scripts/H85k4L3yICm7cfIk.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de${this.item.name}.
`;
+const test = 'Voile';
+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: `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/scripts/HUKzssLxeQo1wbx9.js b/scripts/HUKzssLxeQo1wbx9.js
new file mode 100644
index 0000000..e1129c3
--- /dev/null
+++ b/scripts/HUKzssLxeQo1wbx9.js
@@ -0,0 +1,9 @@
+
+let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), { fields: { difficulty: "average" }, appendTitle: " - - Blessé" })
+await test.roll();
+if (test.failed) {
+ fromUuid("Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb").then(disease => {
+ this.actor.createEmbeddedDocuments("Item", [disease.toObject()])
+ this.script.scriptNotification("Gain de " + disease.name)
+ })
+}
diff --git a/scripts/HYrl5aNMm8BAdqH7.js b/scripts/HYrl5aNMm8BAdqH7.js
new file mode 100644
index 0000000..2a4f990
--- /dev/null
+++ b/scripts/HYrl5aNMm8BAdqH7.js
@@ -0,0 +1,7 @@
+
+let modifier = 0
+if (this.effect.name.includes("Moderate"))
+ modifier = -20
+else
+ modifier = -10
+args.fields.modifier += modifier
diff --git a/scripts/IOroJBqTsWvoakJN.js b/scripts/IOroJBqTsWvoakJN.js
new file mode 100644
index 0000000..504fa5a
--- /dev/null
+++ b/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/scripts/IrkWq7IiFS65bTvC.js b/scripts/IrkWq7IiFS65bTvC.js
new file mode 100644
index 0000000..0b5a84a
--- /dev/null
+++ b/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} tombe lourdements dans l'eau. A moins que la cargaison soit étanche, elle perd [[d10]]% de sa valeur.
`);
+
+this.actor.flags.holed.reminded = true;
\ No newline at end of file
diff --git a/scripts/JBoKPBr27C3PMoSD.js b/scripts/JBoKPBr27C3PMoSD.js
new file mode 100644
index 0000000..c1ae1c1
--- /dev/null
+++ b/scripts/JBoKPBr27C3PMoSD.js
@@ -0,0 +1 @@
+return args.skill?.name === game.i18n.localize("NAME.Navigation");
\ No newline at end of file
diff --git a/scripts/JXBUE0XuJOJNG7zE.js b/scripts/JXBUE0XuJOJNG7zE.js
new file mode 100644
index 0000000..ffd727d
--- /dev/null
+++ b/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('Calme', 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} perd ${args.totalWoundLoss} Blessures de l'attaque, ce qui l'a amené à lâcher prise ${target.name}.`);
+}
\ No newline at end of file
diff --git a/scripts/JhbZWZhOJ23yOBmG.js b/scripts/JhbZWZhOJ23yOBmG.js
new file mode 100644
index 0000000..bef0044
--- /dev/null
+++ b/scripts/JhbZWZhOJ23yOBmG.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Métier (Charpente)';
+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: `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/scripts/LjfScVGBf0Egr70E.js b/scripts/LjfScVGBf0Egr70E.js
new file mode 100644
index 0000000..07e1a29
--- /dev/null
+++ b/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/scripts/MIhYSuJ6MI9B65UT.js b/scripts/MIhYSuJ6MI9B65UT.js
new file mode 100644
index 0000000..a1d2254
--- /dev/null
+++ b/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/scripts/MMv2B8TH7jxNCtdl.js b/scripts/MMv2B8TH7jxNCtdl.js
new file mode 100644
index 0000000..1bdc6d1
--- /dev/null
+++ b/scripts/MMv2B8TH7jxNCtdl.js
@@ -0,0 +1,44 @@
+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)
+}
diff --git a/scripts/MMx8f5uJ15XOgJGg.js b/scripts/MMx8f5uJ15XOgJGg.js
new file mode 100644
index 0000000..8146820
--- /dev/null
+++ b/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/scripts/Me1wS5XdqUEy7OGt.js b/scripts/Me1wS5XdqUEy7OGt.js
new file mode 100644
index 0000000..ff366cb
--- /dev/null
+++ b/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} subit un ${crit} (localisation : ${loc}). Ne pas appliquer d'Hemmoragie ou de Blessures additionnelles.`);
\ No newline at end of file
diff --git a/scripts/NI3ZzIAlpQfVSjvf.js b/scripts/NI3ZzIAlpQfVSjvf.js
new file mode 100644
index 0000000..fa88808
--- /dev/null
+++ b/scripts/NI3ZzIAlpQfVSjvf.js
@@ -0,0 +1,8 @@
+if (isNaN(parseInt(this.item.system.specification.value)))
+{
+ let value = await ValueDialog.create("Saisir la valeur de Peur", this.item.name);
+ if (value)
+ {
+ this.item.updateSource({"system.specification.value" : value});
+ }
+}
\ No newline at end of file
diff --git a/scripts/O45vpR4jDbQQnmvJ.js b/scripts/O45vpR4jDbQQnmvJ.js
new file mode 100644
index 0000000..9d1a9c1
--- /dev/null
+++ b/scripts/O45vpR4jDbQQnmvJ.js
@@ -0,0 +1,13 @@
+let items = [];
+
+let etiquette = (await fromUuid("Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP")).toObject();
+etiquette.name += " (Suivants de Khorne)";
+
+items.push(etiquette);
+
+let animosity = (await fromUuid("Compendium.wfrp4e-core.items.Item.Q2MCUrG2HppMcvN0")).toObject();
+animosity.name = animosity.name.replace("(Cible)", "(Suivants de Slaanesh)");
+
+items.push(animosity);
+
+await this.actor.createEmbeddedDocuments("Item", items, {fromEffect : this.effect.id});
diff --git a/scripts/OsLXutfXyQCAkhAf.js b/scripts/OsLXutfXyQCAkhAf.js
new file mode 100644
index 0000000..99e5a25
--- /dev/null
+++ b/scripts/OsLXutfXyQCAkhAf.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de${this.item.name}.
`;
+const test = 'Voile';
+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: `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/scripts/Pn5fekTbkwlr61XU.js b/scripts/Pn5fekTbkwlr61XU.js
new file mode 100644
index 0000000..4a98f12
--- /dev/null
+++ b/scripts/Pn5fekTbkwlr61XU.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Métier (Ingénieur)';
+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: `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/scripts/PsO7aTdELJt35eHP.js b/scripts/PsO7aTdELJt35eHP.js
new file mode 100644
index 0000000..08dcbea
--- /dev/null
+++ b/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/scripts/Q5gh5Y9dCdclcwsD.js b/scripts/Q5gh5Y9dCdclcwsD.js
new file mode 100644
index 0000000..50f5352
--- /dev/null
+++ b/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/scripts/Q7eULXQ9AfDRmUGO.js b/scripts/Q7eULXQ9AfDRmUGO.js
new file mode 100644
index 0000000..6b8e034
--- /dev/null
+++ b/scripts/Q7eULXQ9AfDRmUGO.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Métier (Charpentier)';
+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: `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/scripts/QHQ7XmFOjT9wXgw1.js b/scripts/QHQ7XmFOjT9wXgw1.js
new file mode 100644
index 0000000..3a516b8
--- /dev/null
+++ b/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/scripts/QNxmImpLTou6WdMQ.js b/scripts/QNxmImpLTou6WdMQ.js
new file mode 100644
index 0000000..ee0cb1b
--- /dev/null
+++ b/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("Peut faire un Test de Force Mentale Difficile (-10) pour éviter l'Incantation Imparfaite")
\ No newline at end of file
diff --git a/scripts/QfTBRGXVfwQSghmd.js b/scripts/QfTBRGXVfwQSghmd.js
new file mode 100644
index 0000000..180052e
--- /dev/null
+++ b/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} regagne ${healed} Blessures`, speaker: { alias: this.effect.name } })
+ } else {
+ ui.notifications.warn("L'Acteur ciblé n'a pas le Trait Bestial")
+ }
+ }
+})
+
diff --git a/scripts/R8FBHZaaARA3z9pB.js b/scripts/R8FBHZaaARA3z9pB.js
new file mode 100644
index 0000000..d22c67d
--- /dev/null
+++ b/scripts/R8FBHZaaARA3z9pB.js
@@ -0,0 +1,53 @@
+const repaired_message = `Répération finie de ${this.item.name}.
`;
+const test = 'Métier (Charpentier)';
+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: `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/scripts/R8ecKGRzOr4ThvVa.js b/scripts/R8ecKGRzOr4ThvVa.js
new file mode 100644
index 0000000..e44abdb
--- /dev/null
+++ b/scripts/R8ecKGRzOr4ThvVa.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Test de Maintenance Equipage';
+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: `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/scripts/RPqgRUkiLY5thVbC.js b/scripts/RPqgRUkiLY5thVbC.js
new file mode 100644
index 0000000..cc3928e
--- /dev/null
+++ b/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/scripts/RlhOAKfN0ghrrooR.js b/scripts/RlhOAKfN0ghrrooR.js
new file mode 100644
index 0000000..b0e5aae
--- /dev/null
+++ b/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/scripts/Rnpw6UQdJifLeuna.js b/scripts/Rnpw6UQdJifLeuna.js
new file mode 100644
index 0000000..b9fc369
--- /dev/null
+++ b/scripts/Rnpw6UQdJifLeuna.js
@@ -0,0 +1 @@
+this.effect.updateSource({"flags.wfrp4e.applicationData.type" : "crew"})
\ No newline at end of file
diff --git a/scripts/RsWXCcYHONf3ANlD.js b/scripts/RsWXCcYHONf3ANlD.js
new file mode 100644
index 0000000..8924600
--- /dev/null
+++ b/scripts/RsWXCcYHONf3ANlD.js
@@ -0,0 +1 @@
+this.actor.addCondition("stunned", 1);
diff --git a/scripts/RwMw848y13Jq2L4f.js b/scripts/RwMw848y13Jq2L4f.js
new file mode 100644
index 0000000..6ca32d3
--- /dev/null
+++ b/scripts/RwMw848y13Jq2L4f.js
@@ -0,0 +1,23 @@
+let test = await this.actor.setupSkill("Résistance", {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} PA divisé par 2
`
+}
+if (msg)
+{
+ this.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});
+}
\ No newline at end of file
diff --git a/scripts/SefcrhXsdYGFcCW6.js b/scripts/SefcrhXsdYGFcCW6.js
new file mode 100644
index 0000000..13bf563
--- /dev/null
+++ b/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/scripts/Ssn21dxoMQiqD1y4.js b/scripts/Ssn21dxoMQiqD1y4.js
new file mode 100644
index 0000000..6767d5a
--- /dev/null
+++ b/scripts/Ssn21dxoMQiqD1y4.js
@@ -0,0 +1 @@
+return args.type == "cast" && args.item.lore.value == "fire"
\ No newline at end of file
diff --git a/scripts/T3RfSt3VMEat3iDD.js b/scripts/T3RfSt3VMEat3iDD.js
new file mode 100644
index 0000000..747d789
--- /dev/null
+++ b/scripts/T3RfSt3VMEat3iDD.js
@@ -0,0 +1 @@
+return args.skill?.name !== game.i18n.localize("NAME.Perception");
\ No newline at end of file
diff --git a/scripts/UDPsaymtZf39UsMk.js b/scripts/UDPsaymtZf39UsMk.js
new file mode 100644
index 0000000..f8fd2d9
--- /dev/null
+++ b/scripts/UDPsaymtZf39UsMk.js
@@ -0,0 +1,6 @@
+
+let fatigued = this.actor.hasCondition("fatigued")
+if (!fatigued) {
+ this.actor.addCondition("fatigued")
+ ui.notifications.notify("Fatigue ajouté à " + this.actor.name + " qui ne peut être supprimé tant que le symptôme Malaise est présent.")
+}
\ No newline at end of file
diff --git a/scripts/UXdlnmwVgjc1QpF2.js b/scripts/UXdlnmwVgjc1QpF2.js
new file mode 100644
index 0000000..999ec85
--- /dev/null
+++ b/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/scripts/UlRSaZG4ZUU6fMND.js b/scripts/UlRSaZG4ZUU6fMND.js
new file mode 100644
index 0000000..7e0b3e6
--- /dev/null
+++ b/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/scripts/UtqUthabeQ4rHDLQ.js b/scripts/UtqUthabeQ4rHDLQ.js
new file mode 100644
index 0000000..291bca4
--- /dev/null
+++ b/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/scripts/VINX6TBAJQznhVcN.js b/scripts/VINX6TBAJQznhVcN.js
new file mode 100644
index 0000000..87ceb4a
--- /dev/null
+++ b/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/scripts/VLdF2HPnCrNIgp7a.js b/scripts/VLdF2HPnCrNIgp7a.js
new file mode 100644
index 0000000..387201b
--- /dev/null
+++ b/scripts/VLdF2HPnCrNIgp7a.js
@@ -0,0 +1,13 @@
+let items = [];
+
+let etiquette = (await fromUuid("Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP")).toObject();
+etiquette.name += " (Suivants de Khorne)";
+
+items.push(etiquette);
+
+let animosity = (await fromUuid("Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f")).toObject();
+ animosity.system.specification.value = "Suivants de Slaanesh";
+
+items.push(animosity);
+
+await this.actor.createEmbeddedDocuments("Item", items, {fromEffect : this.effect.id});
diff --git a/scripts/VTS4RzbmReI87K9a.js b/scripts/VTS4RzbmReI87K9a.js
new file mode 100644
index 0000000..7281d15
--- /dev/null
+++ b/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/scripts/VlHuDIAvPr8JM1P5.js b/scripts/VlHuDIAvPr8JM1P5.js
new file mode 100644
index 0000000..3f2a904
--- /dev/null
+++ b/scripts/VlHuDIAvPr8JM1P5.js
@@ -0,0 +1 @@
+return args.skill?.name !== game.i18n.localize("NAME.Row");
\ No newline at end of file
diff --git a/scripts/Vns6WrafVq8NjX7t.js b/scripts/Vns6WrafVq8NjX7t.js
new file mode 100644
index 0000000..3b16346
--- /dev/null
+++ b/scripts/Vns6WrafVq8NjX7t.js
@@ -0,0 +1 @@
+return args.skill?.name != game.i18n.localize("NAME.Heal")
\ No newline at end of file
diff --git a/scripts/WJkwIrdj4NceOYe8.js b/scripts/WJkwIrdj4NceOYe8.js
new file mode 100644
index 0000000..47fd0a7
--- /dev/null
+++ b/scripts/WJkwIrdj4NceOYe8.js
@@ -0,0 +1 @@
+return args.characteristic !== 'fel';
\ No newline at end of file
diff --git a/scripts/WR0Kqn8CF5iwToak.js b/scripts/WR0Kqn8CF5iwToak.js
new file mode 100644
index 0000000..60fd32e
--- /dev/null
+++ b/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/scripts/WeTlTniskT3Ej6vg.js b/scripts/WeTlTniskT3Ej6vg.js
new file mode 100644
index 0000000..5ae3d41
--- /dev/null
+++ b/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/scripts/X08401eOhKJrhNf1.js b/scripts/X08401eOhKJrhNf1.js
new file mode 100644
index 0000000..cb65e67
--- /dev/null
+++ b/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/scripts/X3vpmNUj9SL2CDnF.js b/scripts/X3vpmNUj9SL2CDnF.js
new file mode 100644
index 0000000..2be4884
--- /dev/null
+++ b/scripts/X3vpmNUj9SL2CDnF.js
@@ -0,0 +1,2 @@
+let item = args.actor.items.find(i => i.name.includes("Flying Jib"));
+item.name += ` (Désactivé par ${this.item.name})`;
\ No newline at end of file
diff --git a/scripts/XCAfy460IotarQek.js b/scripts/XCAfy460IotarQek.js
new file mode 100644
index 0000000..92b4e92
--- /dev/null
+++ b/scripts/XCAfy460IotarQek.js
@@ -0,0 +1 @@
+return false;
\ No newline at end of file
diff --git a/scripts/YySjPfSAPdMAfjsh.js b/scripts/YySjPfSAPdMAfjsh.js
new file mode 100644
index 0000000..d23d05f
--- /dev/null
+++ b/scripts/YySjPfSAPdMAfjsh.js
@@ -0,0 +1,11 @@
+let talents = ["Charge Berserk", "Vigilance", "Combat Instinctif", "Assaut féroce", "Endurci", "Résistance à la Magie", "Résistant (Magie)", "Déterminé", "Coup puissant", "Guerrier né"];
+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/scripts/Z41L3MwOpJdAjVaj.js b/scripts/Z41L3MwOpJdAjVaj.js
new file mode 100644
index 0000000..e772071
--- /dev/null
+++ b/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/scripts/ZCBcwbVFHFTFRntb.js b/scripts/ZCBcwbVFHFTFRntb.js
new file mode 100644
index 0000000..da61c9c
--- /dev/null
+++ b/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/scripts/ZLspFT2I3ZdWWr2H.js b/scripts/ZLspFT2I3ZdWWr2H.js
new file mode 100644
index 0000000..a3fa949
--- /dev/null
+++ b/scripts/ZLspFT2I3ZdWWr2H.js
@@ -0,0 +1 @@
+return args.skill?.name !== game.i18n.localize("NAME.Leadership");
\ No newline at end of file
diff --git a/scripts/ZOgtDW3mkTfeyc5M.js b/scripts/ZOgtDW3mkTfeyc5M.js
new file mode 100644
index 0000000..5e590a8
--- /dev/null
+++ b/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/scripts/ZRoG7GiMDQWso6gN.js b/scripts/ZRoG7GiMDQWso6gN.js
new file mode 100644
index 0000000..b4ed82d
--- /dev/null
+++ b/scripts/ZRoG7GiMDQWso6gN.js
@@ -0,0 +1,53 @@
+const repaired_message = `Répération finie de ${this.item.name}.
`;
+const test = 'Métier (Charpentier)';
+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: `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/scripts/ZuoIVv3nmlGhhdx0.js b/scripts/ZuoIVv3nmlGhhdx0.js
new file mode 100644
index 0000000..3c729c7
--- /dev/null
+++ b/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/scripts/araS9qYWOAVrV8F7.js b/scripts/araS9qYWOAVrV8F7.js
new file mode 100644
index 0000000..7415a12
--- /dev/null
+++ b/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/scripts/b8G4cjfn3RG2tEYX.js b/scripts/b8G4cjfn3RG2tEYX.js
new file mode 100644
index 0000000..692d5e5
--- /dev/null
+++ b/scripts/b8G4cjfn3RG2tEYX.js
@@ -0,0 +1 @@
+this.actor.addCondition("ablaze", 3);
\ No newline at end of file
diff --git a/scripts/bL98Sr1TRLMPEdlk.js b/scripts/bL98Sr1TRLMPEdlk.js
new file mode 100644
index 0000000..7f837ba
--- /dev/null
+++ b/scripts/bL98Sr1TRLMPEdlk.js
@@ -0,0 +1,4 @@
+if (args.test.failed)
+{
+ this.actor.addCondition("fatigued");
+}
\ No newline at end of file
diff --git a/scripts/bRiFHPC1StKxqNIC.js b/scripts/bRiFHPC1StKxqNIC.js
new file mode 100644
index 0000000..01b1acd
--- /dev/null
+++ b/scripts/bRiFHPC1StKxqNIC.js
@@ -0,0 +1,6 @@
+if (isNaN(parseInt(this.item.system.specification.value))) {
+ let value = await ValueDialog.create("Valeur de Robustesse", "Saisir la valeur de robustesse");
+ if (value) {
+ this.item.updateSource({"system.specification.value" : value});
+ }
+}
\ No newline at end of file
diff --git a/scripts/cTYNaKbepMwqYsZ8.js b/scripts/cTYNaKbepMwqYsZ8.js
new file mode 100644
index 0000000..2ad2d51
--- /dev/null
+++ b/scripts/cTYNaKbepMwqYsZ8.js
@@ -0,0 +1,14 @@
+
+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 + " meurt du Fléau" }, fields: { difficulty }, appendTitle: " - Blight" })
+await test.roll();
+if (test.failed) {
+ this.actor.addCondition("dead");
+}
diff --git a/scripts/ckKbPfaTiQ2qBZdR.js b/scripts/ckKbPfaTiQ2qBZdR.js
new file mode 100644
index 0000000..39c15b2
--- /dev/null
+++ b/scripts/ckKbPfaTiQ2qBZdR.js
@@ -0,0 +1 @@
+console.log("DAMAGE", this)
\ No newline at end of file
diff --git a/scripts/dULCkRxtisuzQyuK.js b/scripts/dULCkRxtisuzQyuK.js
new file mode 100644
index 0000000..aa8b036
--- /dev/null
+++ b/scripts/dULCkRxtisuzQyuK.js
@@ -0,0 +1,2 @@
+if (args.options.condition)
+ this.effect.delete();
\ No newline at end of file
diff --git a/scripts/dWr3tkFoIzsAgelu.js b/scripts/dWr3tkFoIzsAgelu.js
new file mode 100644
index 0000000..ee54da3
--- /dev/null
+++ b/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 = "Blessures réduites à "+newDays+" (-" + roll.total + ") au lieu de "+days
+ this.script.scriptMessage(message)
+}
diff --git a/scripts/dbHv7dAXgB2Oy1Fg.js b/scripts/dbHv7dAXgB2Oy1Fg.js
new file mode 100644
index 0000000..bb1fa09
--- /dev/null
+++ b/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/scripts/dh5mAlaOOLCBC0YQ.js b/scripts/dh5mAlaOOLCBC0YQ.js
new file mode 100644
index 0000000..9dae7e4
--- /dev/null
+++ b/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/scripts/dsXGavzXLerXR8Xg.js b/scripts/dsXGavzXLerXR8Xg.js
new file mode 100644
index 0000000..fb7fc0e
--- /dev/null
+++ b/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/scripts/dxxDFXNNqUsuMyUD.js b/scripts/dxxDFXNNqUsuMyUD.js
new file mode 100644
index 0000000..b0dbc02
--- /dev/null
+++ b/scripts/dxxDFXNNqUsuMyUD.js
@@ -0,0 +1 @@
+args.fields.slBonus += 1
\ No newline at end of file
diff --git a/scripts/e4HotRnEiyXR0pIu.js b/scripts/e4HotRnEiyXR0pIu.js
new file mode 100644
index 0000000..94eae28
--- /dev/null
+++ b/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/scripts/f29Pv6TQtgILxt1h.js b/scripts/f29Pv6TQtgILxt1h.js
new file mode 100644
index 0000000..036a985
--- /dev/null
+++ b/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} soigne ${wounds} Blessures du patient.`)
+ }
+ else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)
+ args.test.result.other.push(`Le patient contracte un @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)
+}
\ No newline at end of file
diff --git a/scripts/fFi9JD4uCY9DPC5B.js b/scripts/fFi9JD4uCY9DPC5B.js
new file mode 100644
index 0000000..c8fc681
--- /dev/null
+++ b/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/scripts/fTw3mpSUOlkqVVUC.js b/scripts/fTw3mpSUOlkqVVUC.js
new file mode 100644
index 0000000..861c31d
--- /dev/null
+++ b/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/scripts/gMIenSmLklAkB2Zm.js b/scripts/gMIenSmLklAkB2Zm.js
new file mode 100644
index 0000000..f22fc7e
--- /dev/null
+++ b/scripts/gMIenSmLklAkB2Zm.js
@@ -0,0 +1,8 @@
+if (isNaN(parseInt(this.item.system.specification.value)))
+{
+ let value = await ValueDialog.create("Saisir la force du Venin", 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/scripts/gOm8utR3HLQBT5hA.js b/scripts/gOm8utR3HLQBT5hA.js
new file mode 100644
index 0000000..d8929cd
--- /dev/null
+++ b/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/scripts/goz8yTlMozlsz3uY.js b/scripts/goz8yTlMozlsz3uY.js
new file mode 100644
index 0000000..ce2d140
--- /dev/null
+++ b/scripts/goz8yTlMozlsz3uY.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Force';
+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: `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/scripts/groEX1wJ9l00PkDF.js b/scripts/groEX1wJ9l00PkDF.js
new file mode 100644
index 0000000..29d3364
--- /dev/null
+++ b/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} continue de s'enrouler autour de ${target.name}. Il pourra commencer à lui faire des dommages dans ${turns} turns.
`);
+}
+
+if (this.actor.items.find(i => i.type === "extendedTest" && i.name === this.effect.name)) {
+ this.script.scriptMessage(`${speaker.alias} peut reprendre l'écrasementcan sur ${target.name} avec un Test Etendu.
`);
+
+ 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: 'Force'
+ },
+ 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} a fini de s'enrouler aytour de ${target.name}. Il peut maintenant l'écraser via le Test Etendu @UUID[${extendedTest.uuid}].
`);
+
+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} écrase ${target.name}. Le bateau se brise, réduit à une masse d'épaves.
\`);
+ await effect.delete();
+ `,
+ trigger: "deleteEffect"
+ }
+ ]
+ }
+ }
+}
+
+await extendedTests[0].createEmbeddedDocuments("ActiveEffect", [effect]);
\ No newline at end of file
diff --git a/scripts/gxuBeGHwjZ7WfPeu.js b/scripts/gxuBeGHwjZ7WfPeu.js
new file mode 100644
index 0000000..027009f
--- /dev/null
+++ b/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/scripts/hOgha3ir8K9TVphO.js b/scripts/hOgha3ir8K9TVphO.js
new file mode 100644
index 0000000..c573099
--- /dev/null
+++ b/scripts/hOgha3ir8K9TVphO.js
@@ -0,0 +1 @@
+return args.characteristic !== "fel";
\ No newline at end of file
diff --git a/scripts/hSImyYjL0CENTvXf.js b/scripts/hSImyYjL0CENTvXf.js
new file mode 100644
index 0000000..e7f7433
--- /dev/null
+++ b/scripts/hSImyYjL0CENTvXf.js
@@ -0,0 +1,23 @@
+let test = await this.actor.setupSkill("Résistance", {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} PA divisé par 2
`
+}
+if (msg)
+{
+ this.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});
+}
\ No newline at end of file
diff --git a/scripts/hWWvkPbgIN3lxz1u.js b/scripts/hWWvkPbgIN3lxz1u.js
new file mode 100644
index 0000000..f135bff
--- /dev/null
+++ b/scripts/hWWvkPbgIN3lxz1u.js
@@ -0,0 +1 @@
+return args.item?.system?.attackType !== "melee";
\ No newline at end of file
diff --git a/scripts/hYNWp75ggWSTht55.js b/scripts/hYNWp75ggWSTht55.js
new file mode 100644
index 0000000..0fc323a
--- /dev/null
+++ b/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("Peut effectuer un jet sur the @Table[crithead]{Coups Critiques à la Tête} au lieu de la localisation normale")
+
+ })
+}
\ No newline at end of file
diff --git a/scripts/hj7tI212neKIu9dh.js b/scripts/hj7tI212neKIu9dh.js
new file mode 100644
index 0000000..c400384
--- /dev/null
+++ b/scripts/hj7tI212neKIu9dh.js
@@ -0,0 +1 @@
+this.actor.system.status.ward.value = 7;
\ No newline at end of file
diff --git a/scripts/ht7csu1KImHzpzL5.js b/scripts/ht7csu1KImHzpzL5.js
new file mode 100644
index 0000000..132862f
--- /dev/null
+++ b/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/scripts/huJcVpVn6Q7sQkFC.js b/scripts/huJcVpVn6Q7sQkFC.js
new file mode 100644
index 0000000..abfc1b0
--- /dev/null
+++ b/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/scripts/iO2hCDwyQ7v4qrOI.js b/scripts/iO2hCDwyQ7v4qrOI.js
new file mode 100644
index 0000000..9de633f
--- /dev/null
+++ b/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} supprime ${staunch} Etats Hémorragiques du patient.`)
+ }
+ else if (this.actor.characteristics.int.bonus + args.test.result.SL < 0)
+ args.test.result.other.push(`Le patient contracte une @UUID[Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg]{Infection Mineure}.`)
+}
\ No newline at end of file
diff --git a/scripts/iqUvV1Vu81M3WyZ4.js b/scripts/iqUvV1Vu81M3WyZ4.js
new file mode 100644
index 0000000..3688a7d
--- /dev/null
+++ b/scripts/iqUvV1Vu81M3WyZ4.js
@@ -0,0 +1,4 @@
+let SL = Number(this.effect.sourceTest.result.SL);
+for (let i=0; i${speaker.alias} est immergé dans la Elémentair de Mer et subit la @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.WCivInLZrqEtZzF4#drowning-and-suffocation]{Suffocation}
Il peut essayer de s'échapperen s"évadant de l'Etat @Condition[Entravé} comme si il était @UUID[Compendium.wfrp4e-core.journals.JournalEntry.NS3YGlJQxwTggjRX.JournalEntryPage.wmA76Q2zJJ9HrkvA#grappling]{Grappled} par l'Elémentaire de Mer, en réalisant un Test Opposé de Force contre une Force de 59.
`);
\ No newline at end of file
diff --git a/scripts/k0AkkBLtE8oZhBwn.js b/scripts/k0AkkBLtE8oZhBwn.js
new file mode 100644
index 0000000..8951892
--- /dev/null
+++ b/scripts/k0AkkBLtE8oZhBwn.js
@@ -0,0 +1,6 @@
+if (isNaN(parseInt(this.item.system.specification.value))) {
+ let value = await ValueDialog.create("Valeur d'armure", "Saisir la valeur d'Armure");
+ if (value) {
+ this.item.updateSource({"system.specification.value" : value});
+ }
+}
\ No newline at end of file
diff --git a/scripts/kbXDGAmWWD4CZJHB.js b/scripts/kbXDGAmWWD4CZJHB.js
new file mode 100644
index 0000000..46569c0
--- /dev/null
+++ b/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/scripts/kvnZz8yqdTZbErkr.js b/scripts/kvnZz8yqdTZbErkr.js
new file mode 100644
index 0000000..e35746a
--- /dev/null
+++ b/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/scripts/lOIHiAIDtj91kllN.js b/scripts/lOIHiAIDtj91kllN.js
new file mode 100644
index 0000000..35b81b2
--- /dev/null
+++ b/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/scripts/lZuavewrJzOehrJQ.js b/scripts/lZuavewrJzOehrJQ.js
new file mode 100644
index 0000000..2cbb278
--- /dev/null
+++ b/scripts/lZuavewrJzOehrJQ.js
@@ -0,0 +1,14 @@
+let test = await this.actor.setupSkill('Résistance', {
+ 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/scripts/ljGX2w8hCTyLAjRp.js b/scripts/ljGX2w8hCTyLAjRp.js
new file mode 100644
index 0000000..2371ff4
--- /dev/null
+++ b/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/scripts/mGHKBkDp4omSaBlD.js b/scripts/mGHKBkDp4omSaBlD.js
new file mode 100644
index 0000000..36c1d60
--- /dev/null
+++ b/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/scripts/mT7PDcjF3cJTDbjR.js b/scripts/mT7PDcjF3cJTDbjR.js
new file mode 100644
index 0000000..6995528
--- /dev/null
+++ b/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/scripts/mlulnXQo8XU8vKLD.js b/scripts/mlulnXQo8XU8vKLD.js
new file mode 100644
index 0000000..7b2da8e
--- /dev/null
+++ b/scripts/mlulnXQo8XU8vKLD.js
@@ -0,0 +1,8 @@
+if (isNaN(parseInt(this.item.system.specification.value)))
+{
+ let value = await ValueDialog.create("Saisir le valeur de Grim", this.effect.name);
+ if (value)
+ {
+ this.item.updateSource({"system.specification.value" : value});
+ }
+}
\ No newline at end of file
diff --git a/scripts/nIOeK0BrtdZeZW8X.js b/scripts/nIOeK0BrtdZeZW8X.js
new file mode 100644
index 0000000..8e85711
--- /dev/null
+++ b/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/scripts/nkSmu7v9WiAaK4vq.js b/scripts/nkSmu7v9WiAaK4vq.js
new file mode 100644
index 0000000..823720e
--- /dev/null
+++ b/scripts/nkSmu7v9WiAaK4vq.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Métier (Tailleur)';
+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: `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/scripts/nlQA0shW8FCXjY7u.js b/scripts/nlQA0shW8FCXjY7u.js
new file mode 100644
index 0000000..179770d
--- /dev/null
+++ b/scripts/nlQA0shW8FCXjY7u.js
@@ -0,0 +1 @@
+return args.type != "cast" || args.item.lore.value != "fire"
\ No newline at end of file
diff --git a/scripts/pVSnn4Zw6y1EBDhv.js b/scripts/pVSnn4Zw6y1EBDhv.js
new file mode 100644
index 0000000..bbb77c7
--- /dev/null
+++ b/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/scripts/pkKpxVqRHIzywerL.js b/scripts/pkKpxVqRHIzywerL.js
new file mode 100644
index 0000000..208a37c
--- /dev/null
+++ b/scripts/pkKpxVqRHIzywerL.js
@@ -0,0 +1,6 @@
+const ablaze = this.actor.hasCondition("ablaze");
+
+if (ablaze) {
+ ablaze.delete();
+ this.script.scriptNotification("Résiste à En Flammes");
+}
\ No newline at end of file
diff --git a/scripts/pvk5OhTNdVgwXoUa.js b/scripts/pvk5OhTNdVgwXoUa.js
new file mode 100644
index 0000000..29ff2f6
--- /dev/null
+++ b/scripts/pvk5OhTNdVgwXoUa.js
@@ -0,0 +1 @@
+args.fields.successBonus += 2;
\ No newline at end of file
diff --git a/scripts/q8lOAWr2970sZeTw.js b/scripts/q8lOAWr2970sZeTw.js
new file mode 100644
index 0000000..ae65012
--- /dev/null
+++ b/scripts/q8lOAWr2970sZeTw.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Métier (Charpentier)';
+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: `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/scripts/qTcK1TSjLTi0jNQK.js b/scripts/qTcK1TSjLTi0jNQK.js
new file mode 100644
index 0000000..b894a45
--- /dev/null
+++ b/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/scripts/qnJu82zgnfOsnqZV.js b/scripts/qnJu82zgnfOsnqZV.js
new file mode 100644
index 0000000..3f9a440
--- /dev/null
+++ b/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 = "Ouvert";
+} else {
+ scriptData[0].label = "Fermé";
+}
+
+await this.effect.update({"flags.wfrp4e.scriptData": scriptData});
\ No newline at end of file
diff --git a/scripts/qzGPJflVW7c2Ciim.js b/scripts/qzGPJflVW7c2Ciim.js
new file mode 100644
index 0000000..cb29090
--- /dev/null
+++ b/scripts/qzGPJflVW7c2Ciim.js
@@ -0,0 +1 @@
+return args.skill?.name !== game.i18n.localize("NAME.Cool");
\ No newline at end of file
diff --git a/scripts/rBAoyhzeU3Q8MVSk.js b/scripts/rBAoyhzeU3Q8MVSk.js
new file mode 100644
index 0000000..0ebc1e8
--- /dev/null
+++ b/scripts/rBAoyhzeU3Q8MVSk.js
@@ -0,0 +1,53 @@
+const repaired_message = `Réparation finie de ${this.item.name}.
`;
+const test = 'Métier (Charpentier)';
+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: `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/scripts/rVRDoxiWILo7d8FF.js b/scripts/rVRDoxiWILo7d8FF.js
new file mode 100644
index 0000000..a75ce6f
--- /dev/null
+++ b/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/scripts/rX8FTinyTMj9WJri.js b/scripts/rX8FTinyTMj9WJri.js
new file mode 100644
index 0000000..d0c393f
--- /dev/null
+++ b/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/scripts/rlTvhnDpj4lzfusf.js b/scripts/rlTvhnDpj4lzfusf.js
new file mode 100644
index 0000000..2a8b74f
--- /dev/null
+++ b/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/scripts/rly9iBUy8EX7NhQT.js b/scripts/rly9iBUy8EX7NhQT.js
new file mode 100644
index 0000000..c6e64e8
--- /dev/null
+++ b/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/scripts/rqTT8yOyK4bUwbdm.js b/scripts/rqTT8yOyK4bUwbdm.js
new file mode 100644
index 0000000..024c9a6
--- /dev/null
+++ b/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/scripts/sHVLKIdPbzLVItCa.js b/scripts/sHVLKIdPbzLVItCa.js
new file mode 100644
index 0000000..d0c491a
--- /dev/null
+++ b/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/scripts/sQDh3g11pWchxpW9.js b/scripts/sQDh3g11pWchxpW9.js
new file mode 100644
index 0000000..2a92563
--- /dev/null
+++ b/scripts/sQDh3g11pWchxpW9.js
@@ -0,0 +1 @@
+return true
\ No newline at end of file
diff --git a/scripts/tuIsytv3jl2yAIb2.js b/scripts/tuIsytv3jl2yAIb2.js
new file mode 100644
index 0000000..cf810e0
--- /dev/null
+++ b/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/scripts/uhCq5NwjQ2a2idPn.js b/scripts/uhCq5NwjQ2a2idPn.js
new file mode 100644
index 0000000..c8158a4
--- /dev/null
+++ b/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/scripts/v18mmwUmuKiVfwzQ.js b/scripts/v18mmwUmuKiVfwzQ.js
new file mode 100644
index 0000000..518055f
--- /dev/null
+++ b/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/scripts/vTebTUzXortx1Qut.js b/scripts/vTebTUzXortx1Qut.js
new file mode 100644
index 0000000..d65570d
--- /dev/null
+++ b/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/scripts/vUpMQlbwDiYfMCNS.js b/scripts/vUpMQlbwDiYfMCNS.js
new file mode 100644
index 0000000..a1b5b3f
--- /dev/null
+++ b/scripts/vUpMQlbwDiYfMCNS.js
@@ -0,0 +1 @@
+this.actor.addCondition("ablaze");
\ No newline at end of file
diff --git a/scripts/w4RuGIfseGoxXA3k.js b/scripts/w4RuGIfseGoxXA3k.js
new file mode 100644
index 0000000..55abc51
--- /dev/null
+++ b/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/scripts/wRxgpGmlUpe7nwzJ.js b/scripts/wRxgpGmlUpe7nwzJ.js
new file mode 100644
index 0000000..45b97af
--- /dev/null
+++ b/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/scripts/xVYVegD692CCv8Yl.js b/scripts/xVYVegD692CCv8Yl.js
new file mode 100644
index 0000000..54e7927
--- /dev/null
+++ b/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("Voleur du Destin a été appliqué à " + duration + " days");
+}
\ No newline at end of file
diff --git a/scripts/xWPgIZOQLba5nZ23.js b/scripts/xWPgIZOQLba5nZ23.js
new file mode 100644
index 0000000..0e0672c
--- /dev/null
+++ b/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 + "a résisté !")
+}
+else if (test.failed)
+{
+ this.actor.addCondition("unconscious", 1);
+}
\ No newline at end of file
diff --git a/scripts/xihniGjgqOhuaKWc.js b/scripts/xihniGjgqOhuaKWc.js
new file mode 100644
index 0000000..823e685
--- /dev/null
+++ b/scripts/xihniGjgqOhuaKWc.js
@@ -0,0 +1,7 @@
+
+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/scripts/z14Tb2YKCjiE5ZTU.js b/scripts/z14Tb2YKCjiE5ZTU.js
new file mode 100644
index 0000000..927f0b6
--- /dev/null
+++ b/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/scripts/zL7ECmBBMAqf5Esn.js b/scripts/zL7ECmBBMAqf5Esn.js
new file mode 100644
index 0000000..b205bb2
--- /dev/null
+++ b/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!
`)
\ No newline at end of file
diff --git a/scripts/zdGAvfL7zJ7wpYxG.js b/scripts/zdGAvfL7zJ7wpYxG.js
new file mode 100644
index 0000000..8865d25
--- /dev/null
+++ b/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/scripts/zkc1gIPLj0VoAONT.js b/scripts/zkc1gIPLj0VoAONT.js
new file mode 100644
index 0000000..1a86fae
--- /dev/null
+++ b/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/scripts/ztIkD5Zt6ko9D4Ca.js b/scripts/ztIkD5Zt6ko9D4Ca.js
new file mode 100644
index 0000000..22d98fa
--- /dev/null
+++ b/scripts/ztIkD5Zt6ko9D4Ca.js
@@ -0,0 +1 @@
+args.fields.modifier -= 10
\ No newline at end of file