Add all systems effects scripts + translations
This commit is contained in:
parent
0b286ac994
commit
7b97578bd7
@ -1,4 +1,5 @@
|
||||
/************************************************************************************/
|
||||
import loadScripts from "./loadScripts.js";
|
||||
import statParserFR from "./modules/import-stat-2.js";
|
||||
|
||||
/************************************************************************************/
|
||||
@ -117,6 +118,8 @@ Hooks.once('init', () => {
|
||||
return statParserFR(statString, type);
|
||||
}
|
||||
|
||||
loadScripts();
|
||||
|
||||
/*---------------------------------------------------------------------*/
|
||||
/* DEPRECATED : game.wfrp4e.entities.ItemWfrp4e.prototype.computeSpellDamage = function (formula, isMagicMissile) {
|
||||
try {
|
||||
|
2
fr.json
2
fr.json
@ -1684,7 +1684,7 @@
|
||||
"NAME.TraitWeapon": "Arme",
|
||||
"NAME.TraitRanged": "A Distance",
|
||||
"NAME.TraitArmour": "Armure",
|
||||
"NAME.MeleeBrawling": "Corps à coprs (Bagarre)",
|
||||
"NAME.MeleeBrawling": "Corps à corps (Bagarre)",
|
||||
"NAME.AcuteSense":"Sens aiguisé",
|
||||
"NAME.AnimalCare":"Soins des animaux",
|
||||
"NAME.AnimalTraining":"Dressage",
|
||||
|
6
loadScripts.js
Normal file
6
loadScripts.js
Normal file
File diff suppressed because one or more lines are too long
@ -12,7 +12,8 @@
|
||||
"esmodules": [
|
||||
"babele-register.js",
|
||||
"addon-register.js",
|
||||
"modules/import-stat-2.js"
|
||||
"modules/import-stat-2.js",
|
||||
"./loadScripts.js"
|
||||
],
|
||||
"styles": [
|
||||
"patch-styles.css"
|
||||
|
17
package.json
Normal file
17
package.json
Normal file
@ -0,0 +1,17 @@
|
||||
{
|
||||
"name": "foundryvtt-wh4-lang-fr-fr",
|
||||
"version": "1.0.0",
|
||||
"description": "WH4 Translation",
|
||||
"main": "babele-register.js",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"build": "node scriptPacker.js",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr.git"
|
||||
},
|
||||
"author": "LeRatierBretonnien",
|
||||
"license": "ISC"
|
||||
}
|
@ -1 +1 @@
|
||||
MANIFEST-000673
|
||||
MANIFEST-000689
|
||||
|
@ -1,7 +1,3 @@
|
||||
2024/05/14-23:48:30.544546 7f505e0006c0 Recovering log #671
|
||||
2024/05/14-23:48:30.556244 7f505e0006c0 Delete type=3 #669
|
||||
2024/05/14-23:48:30.556333 7f505e0006c0 Delete type=0 #671
|
||||
2024/05/14-23:52:38.338843 7f50574006c0 Level-0 table #676: started
|
||||
2024/05/14-23:52:38.338863 7f50574006c0 Level-0 table #676: 0 bytes OK
|
||||
2024/05/14-23:52:38.344995 7f50574006c0 Delete type=0 #674
|
||||
2024/05/14-23:52:38.345156 7f50574006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end)
|
||||
2024/05/17-00:32:51.990246 7fe5356006c0 Recovering log #687
|
||||
2024/05/17-00:32:52.000905 7fe5356006c0 Delete type=3 #685
|
||||
2024/05/17-00:32:52.001011 7fe5356006c0 Delete type=0 #687
|
||||
|
@ -1,7 +1,7 @@
|
||||
2024/05/12-19:57:00.248099 7f003e0006c0 Recovering log #667
|
||||
2024/05/12-19:57:00.258537 7f003e0006c0 Delete type=3 #665
|
||||
2024/05/12-19:57:00.258601 7f003e0006c0 Delete type=0 #667
|
||||
2024/05/12-20:49:52.183624 7f00374006c0 Level-0 table #672: started
|
||||
2024/05/12-20:49:52.183681 7f00374006c0 Level-0 table #672: 0 bytes OK
|
||||
2024/05/12-20:49:52.190384 7f00374006c0 Delete type=0 #670
|
||||
2024/05/12-20:49:52.197399 7f00374006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end)
|
||||
2024/05/16-23:31:09.265904 7fe5356006c0 Recovering log #683
|
||||
2024/05/16-23:31:09.275748 7fe5356006c0 Delete type=3 #681
|
||||
2024/05/16-23:31:09.275914 7fe5356006c0 Delete type=0 #683
|
||||
2024/05/16-23:31:47.713351 7fe52e2006c0 Level-0 table #688: started
|
||||
2024/05/16-23:31:47.713384 7fe52e2006c0 Level-0 table #688: 0 bytes OK
|
||||
2024/05/16-23:31:47.720374 7fe52e2006c0 Delete type=0 #686
|
||||
2024/05/16-23:31:47.740138 7fe52e2006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000675
|
||||
MANIFEST-000691
|
||||
|
@ -1,7 +1,3 @@
|
||||
2024/05/14-23:48:30.559289 7f505fe006c0 Recovering log #673
|
||||
2024/05/14-23:48:30.569004 7f505fe006c0 Delete type=3 #671
|
||||
2024/05/14-23:48:30.569056 7f505fe006c0 Delete type=0 #673
|
||||
2024/05/14-23:52:38.318581 7f50574006c0 Level-0 table #678: started
|
||||
2024/05/14-23:52:38.318638 7f50574006c0 Level-0 table #678: 0 bytes OK
|
||||
2024/05/14-23:52:38.325513 7f50574006c0 Delete type=0 #676
|
||||
2024/05/14-23:52:38.325810 7f50574006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)
|
||||
2024/05/17-00:32:52.003117 7fe536a006c0 Recovering log #689
|
||||
2024/05/17-00:32:52.013524 7fe536a006c0 Delete type=3 #687
|
||||
2024/05/17-00:32:52.013746 7fe536a006c0 Delete type=0 #689
|
||||
|
@ -1,7 +1,7 @@
|
||||
2024/05/12-19:57:00.261517 7f003f4006c0 Recovering log #669
|
||||
2024/05/12-19:57:00.271873 7f003f4006c0 Delete type=3 #667
|
||||
2024/05/12-19:57:00.271979 7f003f4006c0 Delete type=0 #669
|
||||
2024/05/12-20:49:52.155346 7f00374006c0 Level-0 table #674: started
|
||||
2024/05/12-20:49:52.155386 7f00374006c0 Level-0 table #674: 0 bytes OK
|
||||
2024/05/12-20:49:52.162269 7f00374006c0 Delete type=0 #672
|
||||
2024/05/12-20:49:52.176604 7f00374006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)
|
||||
2024/05/16-23:31:09.278348 7fe536a006c0 Recovering log #685
|
||||
2024/05/16-23:31:09.288721 7fe536a006c0 Delete type=3 #683
|
||||
2024/05/16-23:31:09.288781 7fe536a006c0 Delete type=0 #685
|
||||
2024/05/16-23:31:47.726632 7fe52e2006c0 Level-0 table #690: started
|
||||
2024/05/16-23:31:47.726653 7fe52e2006c0 Level-0 table #690: 0 bytes OK
|
||||
2024/05/16-23:31:47.733317 7fe52e2006c0 Delete type=0 #688
|
||||
2024/05/16-23:31:47.740158 7fe52e2006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000673
|
||||
MANIFEST-000689
|
||||
|
@ -1,7 +1,3 @@
|
||||
2024/05/14-23:48:30.588953 7f505fe006c0 Recovering log #671
|
||||
2024/05/14-23:48:30.598904 7f505fe006c0 Delete type=3 #669
|
||||
2024/05/14-23:48:30.598970 7f505fe006c0 Delete type=0 #671
|
||||
2024/05/14-23:52:38.332297 7f50574006c0 Level-0 table #676: started
|
||||
2024/05/14-23:52:38.332334 7f50574006c0 Level-0 table #676: 0 bytes OK
|
||||
2024/05/14-23:52:38.338769 7f50574006c0 Delete type=0 #674
|
||||
2024/05/14-23:52:38.345148 7f50574006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end)
|
||||
2024/05/17-00:32:52.030367 7fe536a006c0 Recovering log #687
|
||||
2024/05/17-00:32:52.040956 7fe536a006c0 Delete type=3 #685
|
||||
2024/05/17-00:32:52.041025 7fe536a006c0 Delete type=0 #687
|
||||
|
@ -1,7 +1,7 @@
|
||||
2024/05/12-19:57:00.287738 7f003f4006c0 Recovering log #667
|
||||
2024/05/12-19:57:00.298489 7f003f4006c0 Delete type=3 #665
|
||||
2024/05/12-19:57:00.298560 7f003f4006c0 Delete type=0 #667
|
||||
2024/05/12-20:49:52.177056 7f00374006c0 Level-0 table #672: started
|
||||
2024/05/12-20:49:52.177114 7f00374006c0 Level-0 table #672: 0 bytes OK
|
||||
2024/05/12-20:49:52.183382 7f00374006c0 Delete type=0 #670
|
||||
2024/05/12-20:49:52.197375 7f00374006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end)
|
||||
2024/05/16-23:31:09.306312 7fe536a006c0 Recovering log #683
|
||||
2024/05/16-23:31:09.315802 7fe536a006c0 Delete type=3 #681
|
||||
2024/05/16-23:31:09.315852 7fe536a006c0 Delete type=0 #683
|
||||
2024/05/16-23:31:47.740329 7fe52e2006c0 Level-0 table #688: started
|
||||
2024/05/16-23:31:47.740348 7fe52e2006c0 Level-0 table #688: 0 bytes OK
|
||||
2024/05/16-23:31:47.746309 7fe52e2006c0 Delete type=0 #686
|
||||
2024/05/16-23:31:47.746432 7fe52e2006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000673
|
||||
MANIFEST-000689
|
||||
|
@ -1,7 +1,3 @@
|
||||
2024/05/14-23:48:30.530779 7f505fe006c0 Recovering log #671
|
||||
2024/05/14-23:48:30.541409 7f505fe006c0 Delete type=3 #669
|
||||
2024/05/14-23:48:30.541472 7f505fe006c0 Delete type=0 #671
|
||||
2024/05/14-23:52:38.311751 7f50574006c0 Level-0 table #676: started
|
||||
2024/05/14-23:52:38.311798 7f50574006c0 Level-0 table #676: 0 bytes OK
|
||||
2024/05/14-23:52:38.318370 7f50574006c0 Delete type=0 #674
|
||||
2024/05/14-23:52:38.325791 7f50574006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end)
|
||||
2024/05/17-00:32:51.977571 7fe536a006c0 Recovering log #687
|
||||
2024/05/17-00:32:51.987927 7fe536a006c0 Delete type=3 #685
|
||||
2024/05/17-00:32:51.987985 7fe536a006c0 Delete type=0 #687
|
||||
|
@ -1,7 +1,7 @@
|
||||
2024/05/12-19:57:00.235722 7f003f4006c0 Recovering log #667
|
||||
2024/05/12-19:57:00.245590 7f003f4006c0 Delete type=3 #665
|
||||
2024/05/12-19:57:00.245724 7f003f4006c0 Delete type=0 #667
|
||||
2024/05/12-20:49:52.132991 7f00374006c0 Level-0 table #672: started
|
||||
2024/05/12-20:49:52.133062 7f00374006c0 Level-0 table #672: 0 bytes OK
|
||||
2024/05/12-20:49:52.140350 7f00374006c0 Delete type=0 #670
|
||||
2024/05/12-20:49:52.148293 7f00374006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end)
|
||||
2024/05/16-23:31:09.251603 7fe536a006c0 Recovering log #683
|
||||
2024/05/16-23:31:09.263101 7fe536a006c0 Delete type=3 #681
|
||||
2024/05/16-23:31:09.263306 7fe536a006c0 Delete type=0 #683
|
||||
2024/05/16-23:31:47.720499 7fe52e2006c0 Level-0 table #688: started
|
||||
2024/05/16-23:31:47.720525 7fe52e2006c0 Level-0 table #688: 0 bytes OK
|
||||
2024/05/16-23:31:47.726531 7fe52e2006c0 Delete type=0 #686
|
||||
2024/05/16-23:31:47.740148 7fe52e2006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000673
|
||||
MANIFEST-000689
|
||||
|
@ -1,7 +1,3 @@
|
||||
2024/05/14-23:48:30.517212 7f505e0006c0 Recovering log #671
|
||||
2024/05/14-23:48:30.526840 7f505e0006c0 Delete type=3 #669
|
||||
2024/05/14-23:48:30.526888 7f505e0006c0 Delete type=0 #671
|
||||
2024/05/14-23:52:38.305306 7f50574006c0 Level-0 table #676: started
|
||||
2024/05/14-23:52:38.305336 7f50574006c0 Level-0 table #676: 0 bytes OK
|
||||
2024/05/14-23:52:38.311573 7f50574006c0 Delete type=0 #674
|
||||
2024/05/14-23:52:38.325771 7f50574006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)
|
||||
2024/05/17-00:32:51.964446 7fe5356006c0 Recovering log #687
|
||||
2024/05/17-00:32:51.974644 7fe5356006c0 Delete type=3 #685
|
||||
2024/05/17-00:32:51.974702 7fe5356006c0 Delete type=0 #687
|
||||
|
@ -1,7 +1,7 @@
|
||||
2024/05/12-19:57:00.221253 7f003e0006c0 Recovering log #667
|
||||
2024/05/12-19:57:00.232421 7f003e0006c0 Delete type=3 #665
|
||||
2024/05/12-19:57:00.232556 7f003e0006c0 Delete type=0 #667
|
||||
2024/05/12-20:49:52.140566 7f00374006c0 Level-0 table #672: started
|
||||
2024/05/12-20:49:52.140628 7f00374006c0 Level-0 table #672: 0 bytes OK
|
||||
2024/05/12-20:49:52.147897 7f00374006c0 Delete type=0 #670
|
||||
2024/05/12-20:49:52.148331 7f00374006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)
|
||||
2024/05/16-23:31:09.239221 7fe5356006c0 Recovering log #683
|
||||
2024/05/16-23:31:09.249489 7fe5356006c0 Delete type=3 #681
|
||||
2024/05/16-23:31:09.249541 7fe5356006c0 Delete type=0 #683
|
||||
2024/05/16-23:31:47.706801 7fe52e2006c0 Level-0 table #688: started
|
||||
2024/05/16-23:31:47.706831 7fe52e2006c0 Level-0 table #688: 0 bytes OK
|
||||
2024/05/16-23:31:47.713069 7fe52e2006c0 Delete type=0 #686
|
||||
2024/05/16-23:31:47.713228 7fe52e2006c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
@ -1 +1 @@
|
||||
MANIFEST-000316
|
||||
MANIFEST-000332
|
||||
|
@ -1,8 +1,3 @@
|
||||
2024/05/14-23:48:30.572338 7f505e0006c0 Recovering log #314
|
||||
2024/05/14-23:48:30.582605 7f505e0006c0 Delete type=3 #312
|
||||
2024/05/14-23:48:30.582656 7f505e0006c0 Delete type=0 #314
|
||||
2024/05/14-23:52:38.325971 7f50574006c0 Level-0 table #319: started
|
||||
2024/05/14-23:52:38.326024 7f50574006c0 Level-0 table #319: 0 bytes OK
|
||||
2024/05/14-23:52:38.332122 7f50574006c0 Delete type=0 #317
|
||||
2024/05/14-23:52:38.345133 7f50574006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
|
||||
2024/05/14-23:52:38.345174 7f50574006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
|
||||
2024/05/17-00:32:52.016354 7fe5356006c0 Recovering log #330
|
||||
2024/05/17-00:32:52.027826 7fe5356006c0 Delete type=3 #328
|
||||
2024/05/17-00:32:52.027974 7fe5356006c0 Delete type=0 #330
|
||||
|
@ -1,8 +1,8 @@
|
||||
2024/05/12-19:57:00.275118 7f003e0006c0 Recovering log #310
|
||||
2024/05/12-19:57:00.285010 7f003e0006c0 Delete type=3 #308
|
||||
2024/05/12-19:57:00.285145 7f003e0006c0 Delete type=0 #310
|
||||
2024/05/12-20:49:52.162355 7f00374006c0 Level-0 table #315: started
|
||||
2024/05/12-20:49:52.162382 7f00374006c0 Level-0 table #315: 0 bytes OK
|
||||
2024/05/12-20:49:52.168680 7f00374006c0 Delete type=0 #313
|
||||
2024/05/12-20:49:52.176626 7f00374006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
|
||||
2024/05/12-20:49:52.176865 7f00374006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
|
||||
2024/05/16-23:31:09.291953 7fe5356006c0 Recovering log #326
|
||||
2024/05/16-23:31:09.303368 7fe5356006c0 Delete type=3 #324
|
||||
2024/05/16-23:31:09.303512 7fe5356006c0 Delete type=0 #326
|
||||
2024/05/16-23:31:47.733464 7fe52e2006c0 Level-0 table #331: started
|
||||
2024/05/16-23:31:47.733512 7fe52e2006c0 Level-0 table #331: 0 bytes OK
|
||||
2024/05/16-23:31:47.740033 7fe52e2006c0 Delete type=0 #329
|
||||
2024/05/16-23:31:47.740167 7fe52e2006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
|
||||
2024/05/16-23:31:47.740190 7fe52e2006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
|
||||
|
Binary file not shown.
BIN
packs/tables-des-traductions/MANIFEST-000332
Normal file
BIN
packs/tables-des-traductions/MANIFEST-000332
Normal file
Binary file not shown.
@ -13,10 +13,7 @@ for(let file of scripts)
|
||||
|
||||
let scriptLoader = `export default function()
|
||||
{
|
||||
Hooks.on("init", () =>
|
||||
{
|
||||
mergeObject(game.wfrp4e.config.effectScripts, ${JSON.stringify(scriptObj)});
|
||||
});
|
||||
|
||||
}`
|
||||
|
||||
|
@ -6,7 +6,7 @@ await this.actor.addCondition("poisoned", 3)
|
||||
await this.actor.modifyWounds(this.actor.system.characteristics.t.bonus)
|
||||
|
||||
// and acquires the Regenerate Creature Trait.
|
||||
const hasRegenerate = this.actor.has("Regenerate")
|
||||
const hasRegenerate = this.actor.has("Régénération")
|
||||
if (hasRegenerate === undefined) {
|
||||
fromUuid("Compendium.wfrp4e-core.items.SfUUdOGjdYpr3KSR").then(trait => {
|
||||
let traitItem = trait.toObject()
|
||||
@ -14,12 +14,12 @@ if (hasRegenerate === undefined) {
|
||||
})
|
||||
}
|
||||
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> has
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> :
|
||||
<ul>
|
||||
<li>gained 3 Poisoned Conditions that cannot be resisted at first</li>
|
||||
<li>recovered ${this.actor.system.characteristics.t.bonus} Wounds</li>
|
||||
<li>acquired the Regenerate Creature Trait.</li>
|
||||
<li>Reçoit 3 états Empoisonnés, sans Test de Résistance possible</li>
|
||||
<li>Récupère ${this.actor.system.characteristics.t.bonus} Blessures</li>
|
||||
<li>Acuiert le Trait de Creature Régénération.</li>
|
||||
</ul>
|
||||
It’s up to Ranald if their regenerating can outpace their poisoning.</p>
|
||||
<p>When all Poisoned Conditions are lost, so too is Regenerate.</p>`,
|
||||
C'est à Ranaldde choisir si la régénératin peut guérir de l'empoisonnement.</p>
|
||||
<p>Lorsque tout les états Empoisonnés sont terminés, le Trait Régénération est perdu également.</p>`,
|
||||
{ whisper: ChatMessage.getWhisperRecipients("GM"), blind: true })
|
||||
|
@ -1,6 +1,6 @@
|
||||
if (args.applyAP && args.modifiers.ap.metal)
|
||||
{
|
||||
args.modifiers.ap.ignored += args.modifiers.ap.metal
|
||||
args.modifiers.ap.details.push("<strong>" + this.effect.name + "</strong>: Ignore le Métal (" + args.modifiers.ap.metal + ")");
|
||||
args.modifiers.ap.details.push("<strong>" + this.effect.name + "</strong>: Ignore le métal (" + args.modifiers.ap.metal + ")");
|
||||
args.modifiers.ap.metal = 0
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
let type = this.item.getFlag("wfrp4e", "breath");
|
||||
|
||||
if (["fire", "electricity", "poison"].includes(type))
|
||||
if (["feu", "electricité", "poison"].includes(type))
|
||||
{
|
||||
args.applyAP = false;
|
||||
}
|
@ -7,22 +7,22 @@ if (!this.item.name.includes("(") || this.item.system.tests.value.includes("Terr
|
||||
if (name.includes("("))
|
||||
{
|
||||
let terrain = name.split("(")[1].split(")")[0]
|
||||
tests = tests.replace("the Terrain", terrain)
|
||||
tests = tests.replace("Terrain", terrain)
|
||||
}
|
||||
else // If no sense specified, provide dialog choice
|
||||
{
|
||||
let choice = await ItemDialog.create(ItemDialog.objectToArray({
|
||||
coastal : "Coastal",
|
||||
deserts : "Deserts",
|
||||
marshes : "Marshes",
|
||||
rocky : "Rocky",
|
||||
coastal : "Côtes",
|
||||
deserts : "Déserts",
|
||||
marshes : "Marches",
|
||||
rocky : "Rocailles",
|
||||
tundra : "Tundra",
|
||||
woodlands : "Woodlands"
|
||||
}, this.item.img), 1, "Choose Terrain");
|
||||
woodlands : "Forêts"
|
||||
}, this.item.img), 1, "Choisir le Terrain");
|
||||
if (choice[0])
|
||||
{
|
||||
name = `${name.split("(")[0].trim()} (${choice[0].name})`
|
||||
tests = tests.replace("the Terrain", choice[0].name + " Terrain")
|
||||
tests = tests.replace("Terrain", "Terrain " + choice[0].name )
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.eWPN3CV2Eddwz8aM")
|
||||
let data = item.toObject();
|
||||
data.system.location.value = "Back"
|
||||
data.system.location.value = "Dos"
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id})
|
@ -1,4 +1,4 @@
|
||||
let skill = `Trade (${this.item.parenthesesText})`
|
||||
let skill = `Métier (${this.item.parenthesesText})`
|
||||
let currentCareer = this.actor.system.currentCareer;
|
||||
let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS")
|
||||
let data = item.toObject();
|
||||
data.name = data.name += " (Hearing)"
|
||||
data.name = data.name += " (Ouïe)"
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})
|
@ -4,15 +4,15 @@ if (!currentCareer)
|
||||
return;
|
||||
}
|
||||
|
||||
let talents = ["Aethyric Attunement",
|
||||
"Arcane Magic (Any)",
|
||||
"Chaos Magic (Tzeentch)",
|
||||
"Fast Hands",
|
||||
"Instinctive Diction",
|
||||
"Magical Sense",
|
||||
"Petty Magic",
|
||||
"Second Sight",
|
||||
"War Wizard",
|
||||
"Witch!"].filter(t => !currentCareer.system.talents.includes(t))
|
||||
let talents = ["Harmonisation Aethyrique",
|
||||
"Magie des Arcanes (Domaine)",
|
||||
"Magie du Chaos (Tzeentch)",
|
||||
"Mains agiles",
|
||||
"Diction Instinctive",
|
||||
"Sens de la Magie",
|
||||
"Magie Mineure",
|
||||
"Seconde Vue",
|
||||
"Mage de guerre",
|
||||
"Sorcier!"].filter(t => !currentCareer.system.talents.includes(t))
|
||||
|
||||
currentCareer.system.talents = currentCareer.system.talents.concat(talents)
|
@ -1,6 +1,6 @@
|
||||
let wounds = this.actor.system.status.wounds
|
||||
if (wounds.value == 0)
|
||||
return this.script.scriptNotification("No effect at 0 Wounds", "error")
|
||||
return this.script.scriptNotification("Aucun effet à 0 Blessures", "error")
|
||||
|
||||
this.script.scriptNotification(`Healed ${this.actor.characteristics.t.bonus} Wounds`)
|
||||
this.script.scriptNotification(`Soin de ${this.actor.characteristics.t.bonus} Blessures`)
|
||||
await this.actor.modifyWounds(this.actor.characteristics.t.bonus)
|
@ -5,5 +5,5 @@ let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll /
|
||||
let ones = Number(args.test.result.roll.toString().split("").pop())
|
||||
|
||||
if (ones > SL)
|
||||
args.test.result.other.push(`<span class="hide-option"><b>${this.effect.name}</b>: ${ones + args.test.successBonus + args.test.slBonus} SL</span>`)
|
||||
args.test.result.other.push(`<span class="hide-option"><b>${this.effect.name}</b>: ${ones + args.test.successBonus + args.test.slBonus} DR</span>`)
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
let fatigue = this.actor.hasCondition("fatigued")
|
||||
if (fatigue)
|
||||
{
|
||||
this.script.scriptNotification("Removing Fatigued Condition, disabled effect")
|
||||
this.script.scriptNotification("Suppression de l'état Fatigué, effet désactivé.")
|
||||
this.effect.update({disabled : true})
|
||||
await this.actor.removeCondition("fatigued")
|
||||
}
|
@ -13,7 +13,7 @@ if (["lArm", "rArm"].includes(location))
|
||||
|
||||
if (dropped.length)
|
||||
{
|
||||
this.script.scriptNotification(`Dropped ${dropped.map(i => i.name).join(", ")}!`)
|
||||
this.script.scriptNotification(`Lache ${dropped.map(i => i.name).join(", ")}!`)
|
||||
for(let weapon of dropped)
|
||||
{
|
||||
await weapon.system.toggleEquip();
|
||||
|
@ -10,10 +10,13 @@ let characteristics = {
|
||||
"wp" : 25,
|
||||
"fel" : 10
|
||||
}
|
||||
let skills = ["Cool", "Dodge", "Intimidate", "Intuition", "Leadership", "Lore (Warfare)", "Perception"]
|
||||
//let skills = ["Cool", "Dodge", "Intimidate", "Intuition", "Leadership", "Lore (Warfare)", "Perception"]
|
||||
let skills = ["Calme", "Equive", "Intimidation", "Intuition", "Commandement", "Savoir (Guerre)", "Perception"]
|
||||
|
||||
let skillAdvancements = [15, 15, 15, 15, 15, 10, 10]
|
||||
let talents = ["Combat Aware", "Combat Reflexes", "Feint", "Inspiring", "Resolute", "War Leader"]
|
||||
let trappings = ["Hand Weapon", "Shield"]
|
||||
let talents = ["Vigilance", "Combat Instinctif", "Feinte", "Exaltant", "Déterminé", "Seigneur de guerre"]
|
||||
// TODO
|
||||
let trappings = ["Arme simple", "Bouclier"]
|
||||
let items = [];
|
||||
|
||||
let updateObj = this.actor.toObject();
|
||||
@ -48,7 +51,7 @@ for (let talent of talents)
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.notifications.warn(`Could not find ${talent}`, {permanent : true})
|
||||
ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,7 +68,7 @@ for (let trapping of trappings)
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})
|
||||
ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4,7 +4,7 @@ this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true,
|
||||
if (test.failed)
|
||||
{
|
||||
let char = Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? "s" : "t";
|
||||
this.script.scriptMessage(`<strong>${this.actor.name}</strong> lost 1 point of ${game.wfrp4e.config.characteristics[char]}`)
|
||||
this.script.scriptMessage(`<strong>${this.actor.name}</strong> perd 1 point de ${game.wfrp4e.config.characteristics[char]}`)
|
||||
this.actor.update({[`system.characteristics.${char}.initial`] : this.actor.system.characteristics[char].initial - 1})
|
||||
}
|
||||
})
|
@ -3,5 +3,5 @@ await test.roll();
|
||||
if (test.failed && this.actor.type == "character")
|
||||
{
|
||||
this.actor.update({"system.status.corruption.value" : parseInt(this.actor.status.corruption.value) + 1})
|
||||
this.script.scriptMessage("Gained a Corruption point", {whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
this.script.scriptMessage("Gain d'un Point de Corruption", {whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
let sourceActor = this.effect.sourceActor;
|
||||
let damage = args.totalWoundLoss;
|
||||
let tb = sourceActor.system.characteristics.t.bonus
|
||||
args.abort = `<strong>${this.effect.name}</strong>: Damage applied to ${sourceActor.name}`;
|
||||
args.abort = `<strong>${this.effect.name}</strong>: Dommages appliqués à ${sourceActor.name}`;
|
||||
|
||||
let message = await sourceActor.applyBasicDamage(damage - tb, {damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_AP, suppressMsg : true})
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == "attacker")
|
||||
{
|
||||
this.actor.update({"system.status.fortune.value" : Math.max(0, (this.actor.system.status.fortune?.value - 1) || 0)})
|
||||
this.script.scriptMessage(`Fortune point stolen from <strong>${this.actor.name}</strong>`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
|
||||
this.script.scriptMessage(`1 Point de Fortune volé à <strong>${this.actor.name}</strong>`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
@ -1 +1 @@
|
||||
return args.skill?.name.includes("Channelling") || args.type == "channelling" || args.skill?.name == game.i18n.localize("NAME.Charm") || args.skill?.name.includes("Language (Magick)") || args.type == "cast"
|
||||
return args.skill?.name.includes("Focalisation") || args.type == "channelling" || args.skill?.name == game.i18n.localize("NAME.Charm") || args.skill?.name.includes("Langue (Magick)") || args.type == "cast"
|
@ -10,7 +10,7 @@ let characteristics = {
|
||||
"wp" : 5,
|
||||
"fel" : 0
|
||||
}
|
||||
let skills = ["Dodge", "Perception"]
|
||||
let skills = ["Esquive", "Perception"]
|
||||
let skillAdvancements = [10, 10]
|
||||
let talents = ["Flee!", "Marksman"]
|
||||
let trappings = ["Hand Weapon"]
|
||||
|
@ -10,10 +10,11 @@ let characteristics = {
|
||||
"wp" : 15,
|
||||
"fel" : 0
|
||||
}
|
||||
let skills = ["Cool", "Dodge", "Intimidate", "Leadership"]
|
||||
//let skills = ["Cool", "Dodge", "Intimidate", "Leadership"]
|
||||
let skills = ["Calme", "Esquive", "Intimidation", "Commandement"]
|
||||
let skillAdvancements = [15, 15, 10, 5]
|
||||
let talents = ["Combat Aware", "Combat Reflexes", "Feint", "Resolute"]
|
||||
let trappings = ["Mail Coat", "Mail Chausses", "Mail Coif", "Hand Weapon", "Shield"]
|
||||
let talents = ["Vigilance", "Combat Instinctif", "Feinte", "Déterminé"]
|
||||
let trappings = ["Cotte de Mailles", "Chausses de Mailles", "Coiffe de Mailles", "Arme simple", "Bouclier"]
|
||||
let items = [];
|
||||
|
||||
let updateObj = this.actor.toObject();
|
||||
@ -48,7 +49,7 @@ for (let talent of talents)
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.notifications.warn(`Could not find ${talent}`, {permanent : true})
|
||||
ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})
|
||||
}
|
||||
}
|
||||
|
||||
@ -65,7 +66,7 @@ for (let trapping of trappings)
|
||||
}
|
||||
else
|
||||
{
|
||||
ui.notifications.warn(`Could not find ${trapping}`, {permanent : true})
|
||||
ui.notifications.warn(`Impossible de trouver ${trapping}`, {permanent : true})
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,15 +1,15 @@
|
||||
let etiquette = (await fromUuid("Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP")).toObject();
|
||||
etiquette.name += ` (Followers of Tzeentch)`;
|
||||
etiquette.name += ` (Suivants de Tzeentch)`;
|
||||
|
||||
let animosity = (await fromUuid("Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f")).toObject();
|
||||
animosity.system.specification.value = "Followers of Nurgle";
|
||||
animosity.system.specification.value = "Suivants de Nurgle";
|
||||
|
||||
let roll = await new Roll("ceil(1d10 / 3)").roll();
|
||||
|
||||
roll.toMessage(this.script.getChatData());
|
||||
|
||||
let mutations = [];
|
||||
let msg = `<p><strong>Mutations Gained</strong></p>`
|
||||
let msg = `<p><strong>Mutations acquises</strong></p>`
|
||||
for(let i = 0; i < roll.total; i++)
|
||||
{
|
||||
let item;
|
||||
|
@ -1 +1 @@
|
||||
return !(["Animal Care", "Charm Animal"].includes(args.item?.name) || args.item?.name.includes("Ride") || args.item?.name.includes("Animal Training"))
|
||||
return !(["Soin aux animaux", "Emprise sur les animaux"].includes(args.item?.name) || args.item?.name.includes("Chevaucher") || args.item?.name.includes("Dressage"))
|
@ -5,5 +5,5 @@ let SL = Math.floor(args.test.target / 10) - Math.floor(args.test.result.roll /
|
||||
let ones = Number(args.test.result.roll.toString().split("").pop())
|
||||
|
||||
if (ones > SL)
|
||||
args.test.result.other.push(`<span class="hide-option"><b>${this.effect.name}</b>: ${ones + args.test.successBonus + args.test.slBonus} SL</span>`)
|
||||
args.test.result.other.push(`<span class="hide-option"><b>${this.effect.name}</b>: ${ones + args.test.successBonus + args.test.slBonus} DR</span>`)
|
||||
}
|
@ -1,12 +1,12 @@
|
||||
// Imbibing this substance grants the user the Painless Creature Trait.
|
||||
const hasColdBlooded = this.actor.has("Cold Blooded")
|
||||
const hasColdBlooded = this.actor.has("A Sang Froid")
|
||||
if (hasColdBlooded === undefined)
|
||||
{
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.mCh1KK9jomwFZcLB")
|
||||
let data = item.toObject()
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id})
|
||||
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> has gained the Cold Blooded Creature Trait and may reverse any failed Willpower based Tests.</p>
|
||||
<p>If they gain a Surprised Condition, this Condition is not lost the first time it should be (which is typically at the end of the Round or if they victim is attacked).</p>`,
|
||||
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> reçoit le Trait de Créatuer A Sang Froid et peut inverser n'importe quel test de Force Mentale échoué.</p>
|
||||
<p>Si il reçoit un état Surpris, cet état n'est pas perdu la première fois (typiquement à la fin du Round ou si il est attaqué).</p>`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM"), blind: true })
|
||||
}
|
@ -2,8 +2,8 @@
|
||||
|
||||
if (args.equipped) {
|
||||
this.actor.createEmbeddedDocuments("ActiveEffect", [this.item.effects.contents[1]?.convertToApplied()])
|
||||
this.script.scriptMessage(`${this.actor.name} dons the <strong>${this.item.name}</strong>. <br>
|
||||
They gain +1 Corruption point if an exposure Test is failed, which will need to be manually applied.<br>If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}
|
||||
this.script.scriptMessage(`${this.actor.name} porte le <strong>${this.item.name}</strong>. <br>
|
||||
Il gagne +1 Point de Corruption point si un Test de Corruption est échoué, à appliquer manuellement.<br>Si le personnage porte le masque pendant plus d'une heure ou utilise les effets du masque, il est exposé à une @Corruption[moderate]{Corruption Modérée}
|
||||
`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
||||
@ -12,8 +12,8 @@ if (args.equipped) {
|
||||
else if (!args.equipped)
|
||||
{
|
||||
await this.item.effects.contents[0].delete();
|
||||
await this.item.update({name : this.item.name += " (Used)"})
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`,
|
||||
await this.item.update({name : this.item.name += " (Utilisé)"})
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> de ${this.actor.name} a été enlevé et a perdu ses propriétés. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils devront être manuellement supprimés.`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM")}
|
||||
)
|
||||
|
||||
|
@ -1,2 +1,2 @@
|
||||
if (args.totalWoundLoss > 0)
|
||||
this.script.scriptMessage(`<b>Blade of Nurglitch: ${args.actor.name}</b> must pass an <b>Difficult (-10) Endurance</b> Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients("GM") })
|
||||
this.script.scriptMessage(`<b>Lame de Nurglitch: ${args.actor.name}</b> doit réussir un <b>Test d'Endurance Difficile (-10) </b> ou recevoir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients("GM") })
|
@ -4,5 +4,5 @@ let biteData = bite.toObject();
|
||||
let senseData = sense.toObject();
|
||||
|
||||
biteData.system.specification.value = 6 - this.actor.characteristics.s.bonus;
|
||||
senseData.name = senseData.name += " (Smell)"
|
||||
senseData.name = senseData.name += " (Odorat)"
|
||||
this.actor.createEmbeddedDocuments("Item", [biteData, senseData], {fromEffect : this.effect.id})
|
@ -1,4 +1,4 @@
|
||||
let regenerate = this.actor.items.getName('Regenerate')
|
||||
let regenerate = this.actor.items.getName('Régénération')
|
||||
|
||||
if (regenerate)
|
||||
{
|
||||
|
@ -1,11 +1,11 @@
|
||||
let roll = Math.ceil(CONFIG.Dice.randomUniform() * 10)
|
||||
if (args.test.isFumble && roll == 1 && !args.test.result.misfire)
|
||||
{
|
||||
args.test.result.misfire = game.i18n.localize("Misfire") + " (Rolled 1)"
|
||||
args.test.result.misfire = game.i18n.localize("Misfire") + " (Résultat 1)"
|
||||
args.test.result.misfireDamage = eval(parseInt(args.test.result.roll.toString().split('').pop()) + args.test.item.Damage)
|
||||
}
|
||||
else if (args.test.isFumble && roll != 1)
|
||||
{
|
||||
args.test.result.other.push("Misfire Roll: " + roll)
|
||||
args.test.result.other.push("Résultat du Raté: " + roll)
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.Q2MCUrG2HppMcvN0")
|
||||
item = item.toObject()
|
||||
let species = args.actor.Species || " of your species"
|
||||
item.name = `Animosity (all not ${species})`
|
||||
let species = args.actor.Species || " de votre espèce"
|
||||
item.name = `Animosité (tous sauf ${species})`
|
||||
this.actor.createEmbeddedDocuments("Item", [item], {fromEffect : this.effect.id})
|
@ -1,2 +1,2 @@
|
||||
args.abort = true;
|
||||
this.script.scriptNotification(`Cannot use ${game.wfrp4e.config.locations[this.effect.getFlag("wfrp4e", "location")]}!`, "error")
|
||||
this.script.scriptNotification(`Impossible d'utiliser ${game.wfrp4e.config.locations[this.effect.getFlag("wfrp4e", "location")]}!`, "error")
|
@ -1,6 +1,6 @@
|
||||
let useWard = await Dialog.wait({
|
||||
title : this.effect.name,
|
||||
content : `<p>Use Ward provided by <strong>${this.effect.name}</strong>?`,
|
||||
content : `<p>Utiliser Ward fourni par <strong>${this.effect.name}</strong>?`,
|
||||
buttons : {
|
||||
yes : {
|
||||
label : "Yes",
|
||||
|
@ -1,11 +1,11 @@
|
||||
if (this.actor.system.status.advantage.value >= 2)
|
||||
{
|
||||
await this.actor.modifyAdvantage(-2);
|
||||
this.script.scriptNotification("Advantage Subtracted")
|
||||
this.script.scriptNotification("Avvantage soustrait")
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.script.scriptNotification("Not enough Advantage!", "error")
|
||||
return this.script.scriptNotification("Pas assez d'Avantages!", "error")
|
||||
}
|
||||
|
||||
let test = await this.actor.setupTrait(this.item)
|
||||
|
@ -2,7 +2,7 @@ let item = await fromUuid("Compendium.wfrp4e-core.items.uqGxFOEqeurwkAO3")
|
||||
item = item.toObject()
|
||||
|
||||
item.system.specification.value = 10;
|
||||
item.name += " (Fire)"
|
||||
item.name += " (Feu)"
|
||||
setProperty(item, "flags.wfrp4e.breath", "fire")
|
||||
|
||||
Item.create(item, {parent : this.actor, fromEffect: this.effect.id})
|
@ -1,5 +1,5 @@
|
||||
if (getProperty(args.data, "system.status.fortune.value"))
|
||||
{
|
||||
this.script.scriptNotification("Cannot update Fortune");
|
||||
this.script.scriptNotification("Impossible de mettre à jour la Fortune");
|
||||
delete args.data.system.status.wounds.value;
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
if (args.item.type == "skill" && args.item.name == "Melee (Basic)")
|
||||
if (args.item.type == "skill" && args.item.name == "Corps à corps (Base)")
|
||||
{
|
||||
args.item.system.modifier.value += 20;
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
if (args.test.result.castOutcome == "failure")
|
||||
{
|
||||
ValueDialog.create("Enter Wounds Lost to gain SL", this.effect.name, "0").then(async value => {
|
||||
ValueDialog.create("Sasir le nombre de Blessures perdues en échange de DR", this.effect.name, "0").then(async value => {
|
||||
value = Math.clamped(value, 0, 3)
|
||||
if (value == 0)
|
||||
{
|
||||
@ -8,11 +8,11 @@ if (args.test.result.castOutcome == "failure")
|
||||
}
|
||||
else if (Number.isNumeric(value))
|
||||
{
|
||||
this.script.scriptNotification(`Lost ${value} Wounds`)
|
||||
this.script.scriptNotification(`Perte de ${value} Blessures`)
|
||||
this.actor.modifyWounds(-1 * value)
|
||||
await this.item.system.toggleEquip();
|
||||
args.test.addSL(value);
|
||||
args.test.preData.other.push(`<strong>${this.effect.name}</strong>: +${value} SL`)
|
||||
args.test.preData.other.push(`<strong>${this.effect.name}</strong>: +${value} DR`)
|
||||
}
|
||||
})
|
||||
}
|
@ -3,8 +3,8 @@
|
||||
if (args.equipped)
|
||||
{
|
||||
this.actor.createEmbeddedDocuments("ActiveEffect", [this.item.effects.contents[1]?.convertToApplied()])
|
||||
this.script.scriptMessage(`${this.actor.name} dons the <strong>${this.item.name}</strong>. <br>
|
||||
If they wear the mask for more than an hour or benefit from any of its effects, they are exposed to @Corruption[moderate]{Moderate Corruption}.
|
||||
this.script.scriptMessage(`${this.actor.name} porte le <strong>${this.item.name}</strong>. <br>
|
||||
Si le personnage porte le masque pendant plus d'une heure ou bénéficie de ses effets, il s'espose à une @Corruption[moderate]{Corruption Modérée}.
|
||||
`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
||||
@ -13,8 +13,8 @@ if (args.equipped)
|
||||
else if (!args.equipped)
|
||||
{
|
||||
await this.item.effects.contents[0].delete();
|
||||
await this.item.update({name : this.item.name += " (Used)"})
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> on ${this.actor.name} has been taken off and loses its properties. However, the effects last for [[1d10+4]] days, after which they should be manually removed.`,
|
||||
await this.item.update({name : this.item.name += " (Utilisé)"})
|
||||
this.script.scriptMessage(`<strong>${this.item.name}</strong> porté par ${this.actor.name} a été enlevé et a perdu ses capacités. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils doivent être retirés manuellement.`,
|
||||
{whisper: ChatMessage.getWhisperRecipients("GM")}
|
||||
)
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
let poisoned = args.actor.hasCondition("poisoned")
|
||||
if (poisoned)
|
||||
{
|
||||
this.script.scriptNotification(`Removed ${poisoned.conditionValue} Poisoned Conditions`)
|
||||
this.script.scriptNotification(`Suppression de ${poisoned.conditionValue} états Empoisonné`)
|
||||
poisoned.delete();
|
||||
}
|
||||
else
|
||||
this.script.scriptNotification(`No Poisoned Conditions`)
|
||||
this.script.scriptNotification(`Aucun état Empoisonné`)
|
@ -1 +1 @@
|
||||
this.script.scriptMessage(`Claimed <strong>${this.effect.name}</strong> Bonus`);
|
||||
this.script.scriptMessage(`Revendiquer le Bonus de <strong>${this.effect.name}</strong> `);
|
@ -1 +1 @@
|
||||
return args.skill?.name == "Melee (Brawling)" || args.item?.weaponGroup?.value == "brawling"
|
||||
return args.skill?.name == "Corps à corps (Bagarre)" || args.item?.weaponGroup?.value == "brawling"
|
@ -1,5 +1,5 @@
|
||||
// Imbibing this substance grants the user the Painless Creature Trait.
|
||||
const hasPainless = this.actor.has("Painless");
|
||||
const hasPainless = this.actor.has("Insensible à la douleur");
|
||||
if (hasPainless === undefined)
|
||||
{
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.wMwSRDmgiF2IdCJr");
|
||||
@ -7,11 +7,7 @@ if (hasPainless === undefined)
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id})
|
||||
|
||||
this.script.scriptMessage(
|
||||
`<p><strong>${this.actor.prototypeToken.name}</strong> has gained the Painless Creature Trait. This
|
||||
effect lasts for one hour, after which it dissipates and the full effect
|
||||
of all the imbiber's wounds come crashing down at once.</p>
|
||||
<p>Note that this does not prevent the user from acquiring a Critical
|
||||
Wound or dying from one. It merely allows them to ignore most
|
||||
of their effects.</p>`,
|
||||
`<p><strong>${this.actor.prototypeToken.name}</strong> gagne le Trait de Creature Insensible à la Douleur. Cet effet dure 1 heure, après quoi il disparait et le total des Blessures encaissés par le buveur sont encaissés d'un coup.</p>
|
||||
<p>Notez que cela n'empêche pas le buveur de recevoir une Blessure Critique ou de mourrir. Cela permet par contre d'éviter la majorité de leur effets.</p>`,
|
||||
{ whisper: ChatMessage.getWhisperRecipients("GM"), blind: true})
|
||||
}
|
@ -1 +1 @@
|
||||
return (["Animal Care", "Charm Animal"].includes(args.item?.name) || args.item?.name.includes("Ride") || args.item?.name.includes("Animal Training"))
|
||||
return (["Soin aux animaux", "Emprise sur les animaux"].includes(args.item?.name) || args.item?.name.includes("Chevaucher") || args.item?.name.includes("Dressage"))
|
@ -1,9 +1,9 @@
|
||||
let strLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)
|
||||
let tghLoss = Math.ceil(CONFIG.Dice.randomUniform() * 10)
|
||||
|
||||
if (!this.actor.has("Undead") && !this.actor.has("Daemonic"))
|
||||
if (!this.actor.has("Mort-vivant") && !this.actor.has("Démoniaque"))
|
||||
{
|
||||
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), { appendTitle: " - " + this.effect.name, fields: { difficulty: "average" }, context: { failure: `Lost ${strLoss} Strength and ${tghLoss} Toughness` } }).then(async test => {
|
||||
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), { appendTitle: " - " + this.effect.name, fields: { difficulty: "average" }, context: { failure: `Pert de ${strLoss} en Force et ${tghLoss} en Endurance` } }).then(async test => {
|
||||
await test.roll();
|
||||
if (test.failed) {
|
||||
this.actor.update({ "system.characteristics.s.initial": this.actor.system.characteristics.s.initial - strLoss, "system.characteristics.t.initial": this.actor.system.characteristics.t.initial - tghLoss })
|
||||
@ -12,5 +12,5 @@ if (!this.actor.has("Undead") && !this.actor.has("Daemonic"))
|
||||
|
||||
}
|
||||
else {
|
||||
this.script.scriptNotification(`<strong>${this.actor.name}</strong> is immune to ${this.effect.name}`)
|
||||
this.script.scriptNotification(`<strong>${this.actor.name}</strong> est immunisé à ${this.effect.name}`)
|
||||
}
|
||||
|
@ -1,17 +1,17 @@
|
||||
let type = this.item.getFlag("wfrp4e", "breath")
|
||||
let types = {
|
||||
none : "None",
|
||||
cold : "Cold",
|
||||
none : "Aucun",
|
||||
cold : "Froid",
|
||||
corrosion : "Corrosion",
|
||||
fire : "Fire",
|
||||
electricity : "Electricity",
|
||||
fire : "Feu",
|
||||
electricity : "Electricité",
|
||||
poison : "Poison",
|
||||
smoke : "Smoke",
|
||||
various : "Various"
|
||||
smoke : "Fumée",
|
||||
various : "Divers"
|
||||
}
|
||||
if (!type)
|
||||
{
|
||||
type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, "Choose Breath"))[0]?.id;
|
||||
type = (await ItemDialog.create(ItemDialog.objectToArray(types, this.item.img), 1, "Choisir le Souffle"))[0]?.id;
|
||||
this.item.updateSource({"flags.wfrp4e.breath" : type})
|
||||
}
|
||||
|
||||
|
@ -3,5 +3,5 @@ let APIgnored = args.AP.layers.reduce((prev, current) => prev + ((current.weakpo
|
||||
if (APIgnored)
|
||||
{
|
||||
args.modifiers.ap.ignored += APIgnored
|
||||
args.modifiers.ap.details.push(`<strong>${this.effect.name}</strong>: Ignore AP with Weakpoints (${APIgnored})`)
|
||||
args.modifiers.ap.details.push(`<strong>${this.effect.name}</strong>: Ignorer les PA avec des Points Faibles (${APIgnored})`)
|
||||
}
|
@ -3,5 +3,5 @@ if (caster)
|
||||
{
|
||||
let healed= caster.characteristics.wp.bonus
|
||||
this.actor.modifyWounds(healed);
|
||||
this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> regains ${healed} Wounds`)
|
||||
this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> regagne ${healed} Blessures`)
|
||||
}
|
@ -3,5 +3,5 @@ let weakpointsAP = args.AP.layers.filter(i => !i.ignored && i.weakpoints).reduce
|
||||
if (weakpointsAP > 0)
|
||||
{
|
||||
args.modifiers.ap.ignored += weakpointsAP;
|
||||
args.modifiers.ap.details.push(`${this.effect.name} - Ignore Weakpoints (${weakpointsAP})`);
|
||||
args.modifiers.ap.details.push(`${this.effect.name} - Ignore les Points Faibles (${weakpointsAP})`);
|
||||
}
|
@ -9,7 +9,7 @@ let filters = [
|
||||
}
|
||||
]
|
||||
|
||||
let petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 6, "Choose 6 Petty Spells")
|
||||
let petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 6, "Choisir 6 sorts de Magie Mineure")
|
||||
|
||||
|
||||
filters = [
|
||||
@ -23,7 +23,7 @@ filters = [
|
||||
}
|
||||
]
|
||||
|
||||
let arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 9, "Choose 9 Arcane Spells")
|
||||
let arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 9, "Choisir 9 Sorts d'Arcane")
|
||||
|
||||
let items = petty.concat(arcane).map(i => i.toObject())
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
fromUuid("Compendium.wfrp4e-core.items.5QcrpLQWWrsbKR79").then(item => {
|
||||
let data = item.toObject();
|
||||
data.system.tests.value = data.system.tests.value.replace("coins", "metal objects");
|
||||
data.system.description.value += "<p>This Talent also extends to any metal object because of <strong>Metallic Affinity</strong></p>"
|
||||
data.system.description.value += "<p>Ce Talent s'applique également à tout objet métallique à cause de <strong>l'Affinité Metallique</strong></p>"
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})
|
||||
})
|
@ -1,4 +1,4 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS")
|
||||
let data = item.toObject();
|
||||
data.name += ` (Smell)`
|
||||
data.name += ` (Odorat)`
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})
|
@ -1,4 +1,4 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.AtpAudHA4ybXVlWM")
|
||||
let data = item.toObject();
|
||||
data.name += ` (When Charging)`
|
||||
data.name += ` (Si Charge)`
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})
|
@ -3,5 +3,5 @@ let sourceItem = this.effect.sourceItem;
|
||||
if (sourceItem)
|
||||
{
|
||||
this.actor.applyEffect({effectUuids : [sourceItem.effects.contents[2].uuid]})
|
||||
this.script.scriptNotification("Applied after effects");
|
||||
this.script.scriptNotification("Applique après les effets");
|
||||
}
|
@ -1,6 +1,6 @@
|
||||
if (this.item.getFlag("wfrp4e", "failedCool"))
|
||||
{
|
||||
this.item.name += " (No AP)"
|
||||
this.item.name += " (Aucun PA)"
|
||||
this.item.system.AP = {
|
||||
"head": 0,
|
||||
"lArm": 0,
|
||||
|
@ -2,11 +2,11 @@ let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {sk
|
||||
await test.roll();
|
||||
if (test.failed)
|
||||
{
|
||||
this.script.scriptNotification("Gained a <strong>Festering Wound</strong>")
|
||||
this.script.scriptNotification("Subi une <strong>Blessure Purulente</strong>")
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb")
|
||||
this.actor.createEmbeddedDocuments("Item", [item.toObject()])
|
||||
}
|
||||
else
|
||||
{
|
||||
this.script.scriptNotification("Avoided a <strong>Festering Wound</strong>")
|
||||
this.script.scriptNotification("Evite une <strong>Blessure Purulente</strong>")
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
if (args.test.result.SL < 0)
|
||||
{
|
||||
this.script.scriptMessage(`Gained ${Math.abs(args.test.result.SL)} Corruption points`, {whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
this.script.scriptMessage(`Reçoit ${Math.abs(args.test.result.SL)} Points de Corruption`, {whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
if (args.test.failed && this.actor.type == "character")
|
||||
{
|
||||
this.actor.update({"system.status.corruption.value" : parseInt(this.actor.status.corruption.value) + Math.abs(args.test.result.SL)})
|
||||
|
@ -1,7 +1,7 @@
|
||||
let choice1 = [
|
||||
{
|
||||
type : "skill",
|
||||
name : "Melee (Basic)",
|
||||
name : "Corps à corps (Base)",
|
||||
diff : {
|
||||
system : {
|
||||
advances : {
|
||||
@ -14,7 +14,7 @@ let choice1 = [
|
||||
let choice2 = [
|
||||
{
|
||||
type : "skill",
|
||||
name : "Melee (Polearm)",
|
||||
name : "Corps à corps (Armes d'hast)",
|
||||
diff : {
|
||||
system : {
|
||||
advances : {
|
||||
@ -26,14 +26,14 @@ let choice2 = [
|
||||
]
|
||||
|
||||
let choice = await Dialog.wait({
|
||||
title : "Choice",
|
||||
title : "Choix",
|
||||
content :
|
||||
`<p>
|
||||
Select your choice
|
||||
Choisissez une option
|
||||
</p>
|
||||
<ol>
|
||||
<li>Melee (Basic)</li>
|
||||
<li>Melee (Polearm)</li>
|
||||
<li>Corps à corps (Base)</li>
|
||||
<li>Corps à corps (Armes d'hast)</li>
|
||||
</ol>
|
||||
`,
|
||||
buttons : {
|
||||
@ -44,7 +44,7 @@ let choice = await Dialog.wait({
|
||||
}
|
||||
},
|
||||
2 : {
|
||||
label : "Polearm",
|
||||
label : "Armes d'hast",
|
||||
callback : () => {
|
||||
return choice2;
|
||||
}
|
||||
@ -76,7 +76,7 @@ for (let c of choice)
|
||||
items.push(mergeObject(item, (c.diff || {})))
|
||||
}
|
||||
else
|
||||
ui.notifications.warn(`Could not find ${talent}`, {permanent : true})
|
||||
ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
let roll = await new Roll("1d10").roll()
|
||||
|
||||
roll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Duration)`}));
|
||||
roll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));
|
||||
|
||||
this.effect.updateSource({"duration.rounds" : roll.total})
|
@ -1 +1 @@
|
||||
return !args.skill?.name.includes("Channelling") && args.type != "channelling"
|
||||
return !args.skill?.name.includes("Focalisation") && args.type != "channelling"
|
@ -1,7 +1,7 @@
|
||||
let halve;
|
||||
if (args.opposedTest.attackerTest.item?.type != "spell")
|
||||
{
|
||||
halve = await Dialog.confirm({title : this.effect.name, content : "Halve Damage? (Halves all damage other than fire, cold, and magic)"})
|
||||
halve = await Dialog.confirm({title : this.effect.name, content : "Diviser les dommages? (Divise par 2 tout les dommages autre que ceux causés par le feu, le froid et magiques)"})
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -11,5 +11,5 @@ else
|
||||
if (halve)
|
||||
{
|
||||
args.totalWoundLoss /= 2;
|
||||
args.modifiers.other.push({label : this.effect.name, details : "Halved", value : "× 0.5"})
|
||||
args.modifiers.other.push({label : this.effect.name, details : "Divisé par 2", value : "× 0.5"})
|
||||
}
|
@ -1 +1 @@
|
||||
return args.type != "cast" || !["death", "necromancy", "life", "light", "heavens"].includes(args.spell?.system.lore.value)
|
||||
return args.type != "cast" || !["mort", "nécromancie", "vie", "lumière", "cieux"].includes(args.spell?.system.lore.value)
|
@ -1,4 +1,4 @@
|
||||
if (args.opposedTest.result.differenceSL >= 0 && args.opposedTest.result.differenceSL <= 2 && args.opposedTest.result.winner == "attacker")
|
||||
{
|
||||
this.script.scriptMessage(`Emits a cloud of foul-smelling blackpowder. Enable the <strong>Fellowship Penalty</strong> Active Effect on @UUID[${this.actor.uuid}].`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
this.script.scriptMessage(`Émet un nuage de poudre noire nauséabonde. Active l'effet <strong>Fellowship Penalty</strong> sur @UUID[${this.actor.uuid}].`, {blind : true, whisper : ChatMessage.getWhisperRecipients("GM")})
|
||||
}
|
@ -1 +1 @@
|
||||
return args.skill?.name == "Ranged (Blackpowder)"
|
||||
return args.skill?.name == "Projectiles (Poudre noire)"
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user