Compare commits

..

6 Commits

Author SHA1 Message Date
f07ef0b01d Fix release 2026-03-01 10:19:24 +01:00
301cc830bc Sync to latest WFRP release 2026-02-26 21:54:28 +01:00
786afeab74 Sync to latest WFRP release 2026-02-26 21:53:55 +01:00
e0383def30 Fix Horned Rat 2026-01-29 20:31:30 +01:00
7dc51444f0 Fix Horned Rat 2026-01-29 20:30:51 +01:00
752a6701c0 Fix scripts ! 2026-01-29 11:43:28 +01:00
554 changed files with 4326 additions and 197 deletions

View File

@@ -5,9 +5,6 @@
},
{
"path": "../WFRP4e-FoundryVTT"
},
{
"path": "../WarhammerLibrary-FVTT"
}
],
"settings": {}

View File

@@ -1192,6 +1192,10 @@
"CHAT.ExpReceivedNoReason":"Vous avez reçu <b>{amount}</b> points d'expérience",
"CHAT.CriticalDeflection":"Déviation de Critique",
"CHAT.DamageToArmour":"1 Dommages appliqués à {item} ({type})",
"CHAT.CastSpell":"Incanter {spell}",
"CHAT.Dispel":"Dissiper {spell}",
"CHAT.DissolutionTable":"Lancer sur la Table de Dissolution du Corps et de l'Esprit pour votre Espèce:<br>@Table[corruption]",
"CHAT.InvokePrayer":"Invoquer {prayer}",
"Error.SpeciesSkills" : "Impossible d'ajouter des compétences pour les races",
"Error.SpeciesTalents" : "Impossible d'ajouter des talents pour les races",
@@ -2348,6 +2352,8 @@
"EFFECT.AffectTheSourceOfFearName":"Tests qui affectent {name}",
"EFFECT.DeletingEffectItems":"Suppression des items d'effets: {items}",
"EFFECT.BlackpowderShock":"Contre-coup de Poudre Noire",
"EFFECT.BonusModifier":"Modificateur de Bonus",
"EFFECT.CharacteristicsBonus":"Caractéristiques (Modificateur de Bonus)",
"GRIEVANCE.Warning1":"Attention",
"GRIEVANCE.Warning2":": Cette information est envoyé sur l'espace Github, qui est un espace publique, donc le Tag Discord est préférable. Sinon, contactez moi (MooMan) directement. Si vous avez l'impression que le bug concerne le module FR, contactez LeRatierBretonnier (Discord Foundry FR)",

View File

@@ -8,7 +8,7 @@
}
],
"url": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr",
"version": "9.3.5",
"version": "9.4.1",
"esmodules": [
"wh4_fr.js",
"modules/babele-register.js",
@@ -120,7 +120,7 @@
}
],
"manifest": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/raw/v10/module.json",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-9-3-5.zip",
"download": "https://www.uberwald.me/gitea/public/foundryvtt-wh4-lang-fr-fr/archive/foundryvtt-wh4-lang-fr-9-4-1.zip",
"id": "wh4-fr-translation",
"compatibility": {
"minimum": "13",

View File

@@ -248,16 +248,16 @@ Hooks.once('init', () => {
let translw = translItem?.name || undefined
if (translw && translw != s1) {
let res2 = re.exec(translw);
transl = res2[1] + "(" + subword + ")";
transl = res2[1].trim() + " (" + subword + ")";
} else {
s1 = res[1].trim() + " ( )";
translItem = game.babele.translate(compData.metadata.id, { name: s1, type: "skill" }, true)
translw = translItem?.name || undefined
if(translw) {
let res2 = re.exec(translw);
transl = res2[1] + "(" + subword + ")";
transl = res2[1].trim() + " (" + subword + ")";
} else {
transl = res[1] + " (" + subword + ")";
transl = res[1].trim() + " (" + subword + ")";
}
}
}
@@ -366,7 +366,7 @@ Hooks.once('init', () => {
translItem = game.babele.translate(compData.metadata.id, { name: s1 }, true)
let translw = translItem?.name || undefined
if (translw && translw != s1) {
transl = translw + " (" + subword + ")";
transl = translw.trim() + " (" + subword + ")";
}
}
}
@@ -424,8 +424,10 @@ Hooks.once('init', () => {
if (trait_fr?.name && trait_fr?.name != name_en) {
trait_fr.name = trait_fr.name || trait_en.name
trait_en.name = nbt + trait_fr.name + special;
trait_en.system.description.value = trait_fr.system.description.value;
if (trait_en.system?.specification && isNaN(trait_en.system.specification.value)) { // This is a string, so translate it
if ( trait_en.system?.description?.value && trait_fr.system?.description?.value) {
trait_en.system.description.value = trait_fr.system.description.value;
}
if (trait_en?.system?.specification && isNaN(trait_en.system.specification?.value)) { // This is a string, so translate it
//console.log("Translating : ", trait_en.system.specification.value);
trait_en.system.specification.value = game.i18n.localize(trait_en.system.specification.value.trim());
}

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
MANIFEST-001259
MANIFEST-001295

View File

@@ -1,7 +1,7 @@
2026/01/07-15:26:43.527176 7f93eaffd6c0 Recovering log #1257
2026/01/07-15:26:43.536993 7f93eaffd6c0 Delete type=3 #1255
2026/01/07-15:26:43.537037 7f93eaffd6c0 Delete type=0 #1257
2026/01/07-15:53:28.412551 7f93e9ffb6c0 Level-0 table #1262: started
2026/01/07-15:53:28.412580 7f93e9ffb6c0 Level-0 table #1262: 0 bytes OK
2026/01/07-15:53:28.419118 7f93e9ffb6c0 Delete type=0 #1260
2026/01/07-15:53:28.432727 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end)
2026/02/26-22:04:24.137615 7f63f7fff6c0 Recovering log #1293
2026/02/26-22:04:24.149067 7f63f7fff6c0 Delete type=3 #1291
2026/02/26-22:04:24.149129 7f63f7fff6c0 Delete type=0 #1293
2026/02/26-22:04:46.481770 7f61f6fff6c0 Level-0 table #1298: started
2026/02/26-22:04:46.481795 7f61f6fff6c0 Level-0 table #1298: 0 bytes OK
2026/02/26-22:04:46.488240 7f61f6fff6c0 Delete type=0 #1296
2026/02/26-22:04:46.495528 7f61f6fff6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/01/07-15:09:19.276373 7f93eaffd6c0 Recovering log #1253
2026/01/07-15:09:19.291800 7f93eaffd6c0 Delete type=3 #1251
2026/01/07-15:09:19.291847 7f93eaffd6c0 Delete type=0 #1253
2026/01/07-15:13:49.642315 7f93e9ffb6c0 Level-0 table #1258: started
2026/01/07-15:13:49.642358 7f93e9ffb6c0 Level-0 table #1258: 0 bytes OK
2026/01/07-15:13:49.649460 7f93e9ffb6c0 Delete type=0 #1256
2026/01/07-15:13:49.662442 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end)
2026/02/26-22:02:13.939121 7f640dbff6c0 Recovering log #1289
2026/02/26-22:02:13.988348 7f640dbff6c0 Delete type=3 #1287
2026/02/26-22:02:13.988418 7f640dbff6c0 Delete type=0 #1289
2026/02/26-22:03:13.280219 7f61f6fff6c0 Level-0 table #1294: started
2026/02/26-22:03:13.280273 7f61f6fff6c0 Level-0 table #1294: 0 bytes OK
2026/02/26-22:03:13.287523 7f61f6fff6c0 Delete type=0 #1292
2026/02/26-22:03:13.287733 7f61f6fff6c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal.pages!suuYN87Al1ZZWtQQ.jhgNnhWhrkOpKs1B' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001261
MANIFEST-001297

View File

@@ -1,7 +1,7 @@
2026/01/07-15:26:43.539401 7f93ebfff6c0 Recovering log #1259
2026/01/07-15:26:43.549699 7f93ebfff6c0 Delete type=3 #1257
2026/01/07-15:26:43.549758 7f93ebfff6c0 Delete type=0 #1259
2026/01/07-15:53:28.419273 7f93e9ffb6c0 Level-0 table #1264: started
2026/01/07-15:53:28.419304 7f93e9ffb6c0 Level-0 table #1264: 0 bytes OK
2026/01/07-15:53:28.426268 7f93e9ffb6c0 Delete type=0 #1262
2026/01/07-15:53:28.440100 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)
2026/02/26-22:04:24.151462 7f640d3fe6c0 Recovering log #1295
2026/02/26-22:04:24.164087 7f640d3fe6c0 Delete type=3 #1293
2026/02/26-22:04:24.164148 7f640d3fe6c0 Delete type=0 #1295
2026/02/26-22:04:46.511516 7f61f6fff6c0 Level-0 table #1300: started
2026/02/26-22:04:46.511542 7f61f6fff6c0 Level-0 table #1300: 0 bytes OK
2026/02/26-22:04:46.518083 7f61f6fff6c0 Delete type=0 #1298
2026/02/26-22:04:46.532552 7f61f6fff6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/01/07-15:09:19.293766 7f93ea7fc6c0 Recovering log #1255
2026/01/07-15:09:19.310998 7f93ea7fc6c0 Delete type=3 #1253
2026/01/07-15:09:19.311072 7f93ea7fc6c0 Delete type=0 #1255
2026/01/07-15:13:49.675722 7f93e9ffb6c0 Level-0 table #1260: started
2026/01/07-15:13:49.675750 7f93e9ffb6c0 Level-0 table #1260: 0 bytes OK
2026/01/07-15:13:49.682225 7f93e9ffb6c0 Delete type=0 #1258
2026/01/07-15:13:49.688884 7f93e9ffb6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)
2026/02/26-22:02:13.990565 7f640d3fe6c0 Recovering log #1291
2026/02/26-22:02:14.041205 7f640d3fe6c0 Delete type=3 #1289
2026/02/26-22:02:14.041341 7f640d3fe6c0 Delete type=0 #1291
2026/02/26-22:03:13.287859 7f61f6fff6c0 Level-0 table #1296: started
2026/02/26-22:03:13.287883 7f61f6fff6c0 Level-0 table #1296: 0 bytes OK
2026/02/26-22:03:13.294100 7f61f6fff6c0 Delete type=0 #1294
2026/02/26-22:03:13.315154 7f61f6fff6c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001259
MANIFEST-001295

View File

@@ -1,7 +1,7 @@
2026/01/07-15:26:43.564495 7f93eb7fe6c0 Recovering log #1257
2026/01/07-15:26:43.574446 7f93eb7fe6c0 Delete type=3 #1255
2026/01/07-15:26:43.574512 7f93eb7fe6c0 Delete type=0 #1257
2026/01/07-15:53:28.432738 7f93e9ffb6c0 Level-0 table #1262: started
2026/01/07-15:53:28.432770 7f93e9ffb6c0 Level-0 table #1262: 0 bytes OK
2026/01/07-15:53:28.439930 7f93e9ffb6c0 Delete type=0 #1260
2026/01/07-15:53:28.446625 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end)
2026/02/26-22:04:24.183291 7f640dbff6c0 Recovering log #1293
2026/02/26-22:04:24.198373 7f640dbff6c0 Delete type=3 #1291
2026/02/26-22:04:24.198448 7f640dbff6c0 Delete type=0 #1293
2026/02/26-22:04:46.518228 7f61f6fff6c0 Level-0 table #1298: started
2026/02/26-22:04:46.518251 7f61f6fff6c0 Level-0 table #1298: 0 bytes OK
2026/02/26-22:04:46.524767 7f61f6fff6c0 Delete type=0 #1296
2026/02/26-22:04:46.532566 7f61f6fff6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/01/07-15:09:19.333002 7f93ea7fc6c0 Recovering log #1253
2026/01/07-15:09:19.348597 7f93ea7fc6c0 Delete type=3 #1251
2026/01/07-15:09:19.348662 7f93ea7fc6c0 Delete type=0 #1253
2026/01/07-15:13:49.682345 7f93e9ffb6c0 Level-0 table #1258: started
2026/01/07-15:13:49.682371 7f93e9ffb6c0 Level-0 table #1258: 0 bytes OK
2026/01/07-15:13:49.688691 7f93e9ffb6c0 Delete type=0 #1256
2026/01/07-15:13:49.688891 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end)
2026/02/26-22:02:14.115468 7f640cbfd6c0 Recovering log #1289
2026/02/26-22:02:14.169882 7f640cbfd6c0 Delete type=3 #1287
2026/02/26-22:02:14.169955 7f640cbfd6c0 Delete type=0 #1289
2026/02/26-22:03:13.301545 7f61f6fff6c0 Level-0 table #1294: started
2026/02/26-22:03:13.301610 7f61f6fff6c0 Level-0 table #1294: 0 bytes OK
2026/02/26-22:03:13.307921 7f61f6fff6c0 Delete type=0 #1292
2026/02/26-22:03:13.315187 7f61f6fff6c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal.pages!cZtNgayIw2QFhC9u.ts265H1XkisLgdow' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001259
MANIFEST-001295

View File

@@ -1,7 +1,7 @@
2026/01/07-15:26:43.514726 7f93ea7fc6c0 Recovering log #1257
2026/01/07-15:26:43.524436 7f93ea7fc6c0 Delete type=3 #1255
2026/01/07-15:26:43.524498 7f93ea7fc6c0 Delete type=0 #1257
2026/01/07-15:53:28.406072 7f93e9ffb6c0 Level-0 table #1262: started
2026/01/07-15:53:28.406116 7f93e9ffb6c0 Level-0 table #1262: 0 bytes OK
2026/01/07-15:53:28.412401 7f93e9ffb6c0 Delete type=0 #1260
2026/01/07-15:53:28.419261 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end)
2026/02/26-22:04:24.123515 7f640d3fe6c0 Recovering log #1293
2026/02/26-22:04:24.135202 7f640d3fe6c0 Delete type=3 #1291
2026/02/26-22:04:24.135283 7f640d3fe6c0 Delete type=0 #1293
2026/02/26-22:04:46.488408 7f61f6fff6c0 Level-0 table #1298: started
2026/02/26-22:04:46.488442 7f61f6fff6c0 Level-0 table #1298: 0 bytes OK
2026/02/26-22:04:46.495308 7f61f6fff6c0 Delete type=0 #1296
2026/02/26-22:04:46.495540 7f61f6fff6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/01/07-15:09:19.258501 7f93eb7fe6c0 Recovering log #1253
2026/01/07-15:09:19.274117 7f93eb7fe6c0 Delete type=3 #1251
2026/01/07-15:09:19.274190 7f93eb7fe6c0 Delete type=0 #1253
2026/01/07-15:13:49.656004 7f93e9ffb6c0 Level-0 table #1258: started
2026/01/07-15:13:49.656029 7f93e9ffb6c0 Level-0 table #1258: 0 bytes OK
2026/01/07-15:13:49.662317 7f93e9ffb6c0 Delete type=0 #1256
2026/01/07-15:13:49.662464 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end)
2026/02/26-22:02:13.889590 7f63f7fff6c0 Recovering log #1289
2026/02/26-22:02:13.936962 7f63f7fff6c0 Delete type=3 #1287
2026/02/26-22:02:13.937017 7f63f7fff6c0 Delete type=0 #1289
2026/02/26-22:03:13.273521 7f61f6fff6c0 Level-0 table #1294: started
2026/02/26-22:03:13.273553 7f61f6fff6c0 Level-0 table #1294: 0 bytes OK
2026/02/26-22:03:13.280005 7f61f6fff6c0 Delete type=0 #1292
2026/02/26-22:03:13.287724 7f61f6fff6c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal.pages!yzw9I0r3hCK7PJnz.sPNCYj2nR3Cp3jHd' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-001259
MANIFEST-001295

View File

@@ -1,7 +1,7 @@
2026/01/07-15:26:43.501310 7f93eb7fe6c0 Recovering log #1257
2026/01/07-15:26:43.512173 7f93eb7fe6c0 Delete type=3 #1255
2026/01/07-15:26:43.512224 7f93eb7fe6c0 Delete type=0 #1257
2026/01/07-15:53:28.398067 7f93e9ffb6c0 Level-0 table #1262: started
2026/01/07-15:53:28.398117 7f93e9ffb6c0 Level-0 table #1262: 0 bytes OK
2026/01/07-15:53:28.405830 7f93e9ffb6c0 Delete type=0 #1260
2026/01/07-15:53:28.412533 7f93e9ffb6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)
2026/02/26-22:04:24.106231 7f640dbff6c0 Recovering log #1293
2026/02/26-22:04:24.120853 7f640dbff6c0 Delete type=3 #1291
2026/02/26-22:04:24.120905 7f640dbff6c0 Delete type=0 #1293
2026/02/26-22:04:46.475371 7f61f6fff6c0 Level-0 table #1298: started
2026/02/26-22:04:46.475399 7f61f6fff6c0 Level-0 table #1298: 0 bytes OK
2026/02/26-22:04:46.481643 7f61f6fff6c0 Delete type=0 #1296
2026/02/26-22:04:46.495513 7f61f6fff6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/01/07-15:09:19.238733 7f93ebfff6c0 Recovering log #1253
2026/01/07-15:09:19.256250 7f93ebfff6c0 Delete type=3 #1251
2026/01/07-15:09:19.256331 7f93ebfff6c0 Delete type=0 #1253
2026/01/07-15:13:49.649560 7f93e9ffb6c0 Level-0 table #1258: started
2026/01/07-15:13:49.649585 7f93e9ffb6c0 Level-0 table #1258: 0 bytes OK
2026/01/07-15:13:49.655885 7f93e9ffb6c0 Delete type=0 #1256
2026/01/07-15:13:49.662454 7f93e9ffb6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)
2026/02/26-22:02:13.830812 7f640d3fe6c0 Recovering log #1289
2026/02/26-22:02:13.887231 7f640d3fe6c0 Delete type=3 #1287
2026/02/26-22:02:13.887289 7f640d3fe6c0 Delete type=0 #1289
2026/02/26-22:03:13.266764 7f61f6fff6c0 Level-0 table #1294: started
2026/02/26-22:03:13.266813 7f61f6fff6c0 Level-0 table #1294: 0 bytes OK
2026/02/26-22:03:13.273358 7f61f6fff6c0 Delete type=0 #1292
2026/02/26-22:03:13.287711 7f61f6fff6c0 Manual compaction at level-0 from '!tables!4l60Lxv8cpsyy2Cg' @ 72057594037927935 : 1 .. '!tables.results!tfaYKDZqu7kgZvRG.yvbwKursaixh2dby' @ 0 : 0; will stop at (end)

View File

@@ -1 +1 @@
MANIFEST-000902
MANIFEST-000938

View File

@@ -1,7 +1,7 @@
2026/01/07-15:26:43.552530 7f93eaffd6c0 Recovering log #900
2026/01/07-15:26:43.562158 7f93eaffd6c0 Delete type=3 #898
2026/01/07-15:26:43.562231 7f93eaffd6c0 Delete type=0 #900
2026/01/07-15:53:28.426399 7f93e9ffb6c0 Level-0 table #905: started
2026/01/07-15:53:28.426431 7f93e9ffb6c0 Level-0 table #905: 0 bytes OK
2026/01/07-15:53:28.432585 7f93e9ffb6c0 Delete type=0 #903
2026/01/07-15:53:28.440113 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end)
2026/02/26-22:04:24.166725 7f63f7fff6c0 Recovering log #936
2026/02/26-22:04:24.181007 7f63f7fff6c0 Delete type=3 #934
2026/02/26-22:04:24.181079 7f63f7fff6c0 Delete type=0 #936
2026/02/26-22:04:46.525121 7f61f6fff6c0 Level-0 table #941: started
2026/02/26-22:04:46.525166 7f61f6fff6c0 Level-0 table #941: 0 bytes OK
2026/02/26-22:04:46.532271 7f61f6fff6c0 Delete type=0 #939
2026/02/26-22:04:46.532577 7f61f6fff6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end)

View File

@@ -1,7 +1,7 @@
2026/01/07-15:09:19.313936 7f93eaffd6c0 Recovering log #896
2026/01/07-15:09:19.330494 7f93eaffd6c0 Delete type=3 #894
2026/01/07-15:09:19.330571 7f93eaffd6c0 Delete type=0 #896
2026/01/07-15:13:49.669421 7f93e9ffb6c0 Level-0 table #901: started
2026/01/07-15:13:49.669459 7f93e9ffb6c0 Level-0 table #901: 0 bytes OK
2026/01/07-15:13:49.675608 7f93e9ffb6c0 Delete type=0 #899
2026/01/07-15:13:49.688874 7f93e9ffb6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end)
2026/02/26-22:02:14.050871 7f640dbff6c0 Recovering log #932
2026/02/26-22:02:14.109358 7f640dbff6c0 Delete type=3 #930
2026/02/26-22:02:14.109436 7f640dbff6c0 Delete type=0 #932
2026/02/26-22:03:13.308043 7f61f6fff6c0 Level-0 table #937: started
2026/02/26-22:03:13.308070 7f61f6fff6c0 Level-0 table #937: 0 bytes OK
2026/02/26-22:03:13.315010 7f61f6fff6c0 Delete type=0 #935
2026/02/26-22:03:13.315204 7f61f6fff6c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal.pages!yfZxl4I7XAuUF6r3.apXmOlZRmGT4GreB' @ 0 : 0; will stop at (end)

View File

@@ -0,0 +1 @@
return !args.skill?.name.includes(game.i18n.localize("NAME.Row")) && !args.skill?.name.includes(game.i18n.localize("NAME.Sail"));

View File

@@ -0,0 +1,4 @@
if (!this.item.system.properties.qualities.fast)
this.item.system.qualities.value.push({name : 'fast'});
if (!this.item.system.properties.qualities.magical)
this.item.system.qualities.value.push({name : 'magical'});

View File

@@ -16,6 +16,6 @@ if (location)
let roll = await new Roll("max(1, 1d10 - @system.characteristics.t.bonus)", this.actor).roll()
roll.toMessage(this.script.getChatData({flavor : `${this.effet.name} (Durée)`}));
roll.toMessage(this.script.getChatData({flavor : `${this.effect.name} (Durée)`}));
this.effet.updateSource({"duration.rounds" : roll.total})
this.effect.updateSource({"duration.rounds" : roll.total})

View File

@@ -0,0 +1,9 @@
if (args.skill?.name != game.i18n.localize("NAME.Gossip"))
{
return true;
}
else
{
args.data.reversal = {allowed : true, if: "success"}; // Kind of a kludge here, the talent Tests has a specific condition, but the description simply says "any gossip test can be reversed" so check it here instead of submission
}

View File

@@ -0,0 +1,7 @@
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {
await test.roll()
if (test.failed)
{
this.actor.addCondition("stunned")
}
})

View File

@@ -0,0 +1,18 @@
const balanced = game.i18n.localize("WFRP4E.YenluiBalanced");
const light = game.i18n.localize("WFRP4E.YenluiLight");
const dark = game.i18n.localize("WFRP4E.YenluiDark");
let newName, newDescription;
if (this.effect.name === game.i18n.localize("WFRP4E.YenluiDark")) {
newName = game.i18n.localize("WFRP4E.YenluiBalanced");
newDescription = game.i18n.localize("WFRP4E.YenluiBalancedDesc");
} else if (this.effect.name === game.i18n.localize("WFRP4E.YenluiBalanced")) {
newName = game.i18n.localize("WFRP4E.YenluiLight");
newDescription = game.i18n.localize("WFRP4E.YenluiLightDesc");
}
if (newName) {
await this.effect.update({name: newName});
await this.item.update({name: newName, "system.description.value": newDescription});
}

View File

@@ -1,6 +1,6 @@
if (!this.item.name.includes("(") || this.item.system.Tests.value.includes("Terrain") || this.item.system.Tests.value.toLowerCase().includes("(any)"))
if (!this.item.name.includes("(") || this.item.system.tests.value.includes("Terrain") || this.item.system.tests.value.toLowerCase().includes("(any)"))
{
let Tests = this.item.system.Tests.value
let Tests = this.item.system.tests.value
let name = this.item.name
// If name already specifies, make sure Tests value reflects that
@@ -26,6 +26,6 @@ if (!this.item.name.includes("(") || this.item.system.Tests.value.includes("Terr
}
}
this.effet.updateSource({name})
this.effect.updateSource({name})
this.item.updateSource({name, "system.tests.value" : tests})
}

View File

@@ -0,0 +1 @@
return !args.skill?.name.includes(game.i18n.localize("NAME.Language"));

View File

@@ -83,7 +83,7 @@ for (let trapping of trappings)
}
}
updateObj.name = updateObj.name += " " + this.effet.name
updateObj.name = updateObj.name += " " + this.effect.name
await this.actor.update(updateObj)
this.actor.createEmbeddedDocuments("Item", items);

View File

@@ -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")})`

View File

@@ -0,0 +1,3 @@
const qualities = foundry.utils.deepClone(args.item.system.qualities.value);
qualities.push({name:"fine", value: 1});
args.item?.update({"system.qualities.value": qualities});

View File

@@ -1,4 +1,4 @@
let test = await args.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : " - " + this.effet.name, context : {failure: "Gain de 1 état Sonné"}})
let test = await args.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : " - " + this.effect.name, context : {failure: "Gain de 1 état Sonné"}})
await Test.roll();
if (Test.Échoué)
{

View File

@@ -0,0 +1,19 @@
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : " - " + this.effect.name})
await test.roll();
if (!test.succeeded)
{
let item = await fromUuid("Compendium.wfrp4e-core.items.ZhMADOqoo0y8Q9bx")
let data = item.toObject();
if (this.item.system.location.key == "rLeg")
{
data.system.location.value = "Orteil Droit"
data.system.location.key = "rToe";
}
else if (this.item.system.location.key == "lLeg")
{
data.system.location.value = "Orteil Gauche"
data.system.location.key = "lToe";
}
this.actor.createEmbeddedDocuments("Item", [data])
}
this.effect.delete();

View File

@@ -0,0 +1,7 @@
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`}).then(async test => {
await test.roll();
if (test.failed)
{
this.actor.addCondition("stunned", 3)
}
})

View File

@@ -0,0 +1 @@
return !args.skill?.name?.includes(game.i18n.localize("NAME.Sail"))

View File

@@ -0,0 +1 @@
return args.type != "channelling" && !args.skill?.name.includes(game.i18n.localize("NAME.Channelling"))

View File

@@ -0,0 +1,5 @@
if (args.item.range && args.item.range.bands)
{
args.item.range.bands[game.i18n.localize("Long Range")].modifier = 0
args.item.range.bands[game.i18n.localize("Extreme")].modifier /= 2
}

View File

@@ -0,0 +1,6 @@
if (args.test.result.castOutcome == "success" && args.test.spell.system.lore.value.includes("high"))
{
this.effect.update({name: this.effect.setSpecifier(parseInt(this.effect.specifier - 1))})
this.script.message("La valeur de Protection est maintenant de " + (this.effect.specifier - 1), {flavor: this.effect.sourceItem.name})
}

View File

@@ -0,0 +1 @@
return args.skill?.name == game.i18n.localize("NAME.Bribery") || args.skill?.name.includes(game.i18n.localize("NAME.Stealth"));

View File

@@ -0,0 +1 @@
return args.item?.name != game.i18n.localize("NAME.Navigation")

View File

@@ -0,0 +1,9 @@
if (args.totalWoundLoss > 0)
{
let test = await args.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})
await test.roll();
if (test.failed && parseInt(args.sourceTest?.result.SL) > 0)
{
args.actor.addCondition("stunned", parseInt(args.sourceTest?.attackerTest.result.SL))
}
}

View File

@@ -0,0 +1,19 @@
let skill = `${game.i18n.localize("NAME.Trade")} (${this.item.parenthesesText})`
let currentCareer = this.actor.system.currentCareer;
let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);
if (!currentCareer) return
let inCurrentCareer = currentCareer.system.skills.concat(currentCareer.system.addedSkills).includes(skill);
let craftsmanAdded = this.actor.getFlag("wfrp4e", "craftsmanAdded") || {};
if (existingSkill && inCurrentCareer && !craftsmanAdded[existingSkill.name])
{
existingSkill.system.advances.costModifier = -5;
}
else
{
craftsmanAdded[skill] = true;
currentCareer.system.addedSkills.push(skill);
foundry.utils.setProperty(this.actor, "flags.wfrp4e.craftsmanAdded", craftsmanAdded)
}

View File

@@ -0,0 +1,4 @@
let item = await fromUuid("Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS")
let data = item.toObject();
data.name = data.name += ` (${game.i18n.localize("SPEC.Hearing")})`
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id})

View File

@@ -0,0 +1 @@
return args.skill?.name.includes(game.i18n.localize("NAME.Lore"));

View File

@@ -0,0 +1,20 @@
if (!["Goblin", "Orc"].includes(this.actor.system.details.species.value)) {
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), { appendTitle: ` - ${this.effect.name}` })
await test.roll();
if (test.failed) {
let infection = await fromUuid("Compendium.wfrp4e-core.items.Item.1hQuVFZt9QnnbWzg")
this.actor.createEmbeddedDocuments("Item", [infection])
}
}
// Since wounds change when the effect is deleted, need to wait until after
// the max wounds have been recalculated to apply damage
warhammer.utility.sleep(1000).then(async () => {
let roll = await new Roll("1d10").roll({allowInteractive : false});
roll.toMessage(this.script.getChatData());
this.script.message(await this.actor.applyBasicDamage(roll.total, { damageType: game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, suppressMsg: true }))
})

View File

@@ -0,0 +1,18 @@
let currentCareer = this.actor.system.currentCareer;
if (!currentCareer)
{
return;
}
let talents = [game.i18n.localize("NAME.AA"),
`${game.i18n.localize("NAME.ArcaneMagic")} (${game.i18n.localize("SPEC.Any")})`,
game.i18n.localize("NAME.ChaosMagic") + " " + "(Tzeentch)",
game.i18n.localize("NAME.FastHands"),
game.i18n.localize("NAME.ID"),
game.i18n.localize("NAME.MagicalSense"),
game.i18n.localize("NAME.PettyMagic"),
game.i18n.localize("NAME.SecondSight"),
game.i18n.localize("NAME.WarWizard"),
game.i18n.localize("NAME.Witch")].filter(t => !currentCareer.system.talents.includes(t))
currentCareer.system.talents = currentCareer.system.talents.concat(talents)

View File

@@ -0,0 +1,3 @@
const qualities = foundry.utils.deepClone(args.item.system.qualities.value);
qualities.push({name:"lightweight"});
args.item?.update({"system.qualities.value": qualities});

View File

@@ -0,0 +1,3 @@
return !args.actor?.has(game.i18n.localize("NAME.Swarm")) ||
![game.wfrp4e.config.actorSizeNums.tiny, game.wfrp4e.config.actorSizeNums.ltl]
.includes(args.actor?.sizeNum)

View File

@@ -0,0 +1,14 @@
if (Number(this.actor.system.details.age.value) > 870) {
if (["t", "wp", "fel"].includes(args.characteristic))
args.fields.slBonus -= 3;
if (["ag", "dex", "int"].includes(args.characteristic))
args.fields.slBonus -= 2;
} else if (Number(this.actor.system.details.age.value) > 350) {
if (["t", "wp"].includes(args.characteristic))
args.fields.slBonus -= 2;
if (["fel"].includes(args.characteristic))
args.fields.slBonus -= 1;
} else {
if (["t", "wp"].includes(args.characteristic))
args.fields.slBonus -= 1;
}

View File

@@ -0,0 +1 @@
this.effect.updateSource({name: this.effect.setSpecifier("9")});

View File

@@ -0,0 +1,44 @@
let choice = await ItemDialog.create(ItemDialog.objectToArray(game.wfrp4e.config.locations, this.effect.img), 1, "Choose Location");
if (choice[0])
{
this.effect.updateSource({name : `${this.effect.name} (${choice[0].name})`})
this.effect.updateSource({"flags.wfrp4e.location" : choice[0].id})
}
let location = choice[0].id;
if (["lArm", "rArm"].includes(location))
{
let dropped = this.actor.itemTypes.weapon.filter(i => i.isEquipped & i.system.usesHands.includes(location));
if (dropped.length)
{
this.script.notification(`Dropped ${dropped.map(i => i.name).join(", ")}!`)
for(let weapon of dropped)
{
await weapon.system.toggleEquip();
}
}
}
if (location == "body")
{
await this.actor.addCondition("fatigued");
test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields : {difficulty : "hard"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})
await test.roll();
if (test.failed)
{
this.actor.addCondition("prone");
}
}
if (location == "head")
{
await this.actor.addCondition("stunned");
test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields : {difficulty : "average"}, skipTargets: true, appendTitle : ` - ${this.effect.name}`})
await test.roll();
if (test.failed)
{
this.actor.addCondition("unconscious");
}
}

View File

@@ -0,0 +1,2 @@
args.abort = true;
this.script.notification("Impossible d'attaquer cette cible !");

View File

@@ -0,0 +1 @@
return args.skill?.name != game.i18n.localize("NAME.CharmAnimal") && !args.skill?.name.includes(game.i18n.localize("NAME.AnimalTraining"));

View File

@@ -0,0 +1 @@
return !["NAME.Evaluate", "NAME.Gamble"].map(i => game.i18n.localize(i)).includes(args.skill?.name)

View File

@@ -0,0 +1,4 @@
if (this.actor.hasCondition("surprised"))
{
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {fields : {difficulty : "average"}, skipTargets: true, appendTitle : " - " + this.effect.name}).then(test => test.roll())
}

View File

@@ -0,0 +1 @@
return this.effect.name !== game.i18n.localize("WFRP4E.YenluiLight")

View File

@@ -0,0 +1 @@
return args.skill?.name == game.i18n.localize("NAME.ConsumeAlcohol");

View File

@@ -0,0 +1 @@
return args.item?.system.isRanged;

View File

@@ -0,0 +1 @@
return args.skill?.name != game.i18n.localize("NAME.Research") && !args.skill?.name?.includes(game.i18n.localize("NAME.Language"));

View File

@@ -69,7 +69,7 @@ for (let trapping of trappings)
}
}
updateObj.name = updateObj.name += " " + this.effet.name
updateObj.name = updateObj.name += " " + this.effect.name
await this.actor.update(updateObj)
this.actor.createEmbeddedDocuments("Item", items);

View File

@@ -0,0 +1 @@
this.actor.addEffectItems("Compendium.wfrp4e-core.items.Item.EO05HX7jql0g605A", this.effect, {"system.specification.value": this.actor.system.characteristics.ag.value});

View File

@@ -0,0 +1 @@
return args.skill?.name !== game.i18n.localize("NAME.Endurance");

View File

@@ -0,0 +1,10 @@
this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty : "average"}}).then(async test =>
{
await test.roll()
if (test.failed)
{
let char = Math.ceil(CONFIG.Dice.randomUniform() * 2) == 2 ? "s" : "t";
this.script.message(`<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})
}
})

View File

@@ -44,7 +44,7 @@ for (let trait of traits)
updateObj.name = updateObj.name += " " + this.effet.name
updateObj.name = updateObj.name += " " + this.effect.name
await this.actor.update(updateObj)
this.actor.createEmbeddedDocuments("Item", items);

View File

@@ -0,0 +1 @@
return args.skill?.name?.includes(game.i18n.localize("NAME.Language")) || args.type == "cast"

View File

@@ -0,0 +1,7 @@
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields : {difficulty : "average"}, context : {failure: "1 Corruption Point Gained"}})
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.message("Gain de 1 point de Corruption", {whisper : ChatMessage.getWhisperRecipients("GM")})
}

View File

@@ -1,4 +1,4 @@
let test = await this.actor.setupCharacteristic("ag", {skipTargets: true, appendTitle : ` - ${this.effet.name}`});
let test = await this.actor.setupCharacteristic("ag", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});
await Test.roll();
if (Test.Échoué)
{

View File

@@ -0,0 +1,10 @@
if (args.totalWoundLoss > 0)
{
let test = await args.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : " - " + this.effect.name})
await test.roll();
if (test.failed)
{
args.totalWoundLoss += 5;
args.modifiers.other.push({label : this.effect.name, value : 5})
}
}

View File

@@ -106,7 +106,7 @@ if (ride)
items = items.concat({name : "Chaos Steed", type: "trapping", "system.trappingType.value" : "misc"}, skill)
}
updateObj.name = updateObj.name += " " + this.effet.name
updateObj.name = updateObj.name += " " + this.effect.name
await this.actor.update(updateObj)
this.actor.createEmbeddedDocuments("Item", items);

View File

@@ -0,0 +1 @@
return args.skill?.name != game.i18n.localize("NAME.Research");

View File

@@ -0,0 +1 @@
return args.skill?.name.includes(game.i18n.localize("NAME.Channelling")) || args.type == "channelling" || args.skill?.name == game.i18n.localize("NAME.Charm") || args.skill?.name.includes(`${game.i18n.localize("NAME.Language")} (${game.i18n.localize("SPEC.Magick")})`) || args.type == "cast"

View File

@@ -69,7 +69,7 @@ for (let trapping of trappings)
}
}
updateObj.name = updateObj.name += " " + this.effet.name
updateObj.name = updateObj.name += " " + this.effect.name
await this.actor.update(updateObj)
this.actor.createEmbeddedDocuments("Item", items);

View File

@@ -0,0 +1 @@
await this.effect.update({duration:{rounds: this.actor.system.characteristics.ws.bonus}});

View File

@@ -0,0 +1,9 @@
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields: {difficulty : "average"}, appendTitle : " - Wounded"})
await test.roll();
if (test.failed)
{
fromUuid("Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb").then(disease => {
this.actor.createEmbeddedDocuments("Item", [disease.toObject()])
this.script.scriptNotification("Gain de " + disease.name)
})
}

View File

@@ -69,7 +69,7 @@ for (let trapping of trappings)
}
}
updateObj.name = updateObj.name += " " + this.effet.name
updateObj.name = updateObj.name += " " + this.effect.name
await this.actor.update(updateObj)
this.actor.createEmbeddedDocuments("Item", items);

View File

@@ -0,0 +1 @@
return !args.item?.name.includes(game.i18n.localize("NAME.Stealth"))

View File

@@ -0,0 +1,2 @@
const traits = this.actor.itemTypes.trait.filter(t => ["bestial", "skittish"].includes(s.name.toLowerCase()));
trait.system.disabled = true;

View File

@@ -0,0 +1 @@
return !([game.i18n.localize("NAME.AnimalCare"), game.i18n.localize("NAME.CharmAnimal")].includes(args.item?.name) || args.item?.name.includes(game.i18n.localize("NAME.Ride")) || args.item?.name.includes(game.i18n.localize("NAME.AnimalTraining")));

View File

@@ -0,0 +1,8 @@
let bite = await fromUuid("Compendium.wfrp4e-core.items.pLW9SVX0TVTYPiPv")
let sense = await fromUuid("Compendium.wfrp4e-core.items.9h82z72XGo9tfgQS")
let biteData = bite.toObject();
let senseData = sense.toObject();
biteData.system.specification.value = 6 - this.actor.characteristics.s.bonus;
senseData.name = senseData.name += game.i18n.localize("SPEC.Smell")
this.actor.createEmbeddedDocuments("Item", [biteData, senseData], {fromEffect : this.effect.id})

View File

@@ -0,0 +1,6 @@
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`})
await test.roll();
if (test.failed)
{
this.actor.addCondition("prone");
}

View File

@@ -0,0 +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.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)
}

View File

@@ -0,0 +1,6 @@
const deduct = this.effect.setFlag("wfrp4e", "failed");
if (!deduct) return;
this.actor.system.characteristics.ws.modifier -= 20;
this.actor.system.characteristics.bs.modifier -= 20;

View File

@@ -1,4 +1,4 @@
let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : " - " + this.effet.name, context : {failure: "GAin d'1 état Sonné"}})
let test = await this.actor.setupCharacteristic("wp", {skipTargets: true, appendTitle : " - " + this.effect.name, context : {failure: "GAin d'1 état Sonné"}})
await Test.roll();
if (Test.Échoué)
{

View File

@@ -0,0 +1,6 @@
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {skipTargets: true, appendTitle : ` - ${this.effect.name}`, fields: {difficulty: "average"}});
await test.roll();
if (test.failed)
{
this.actor.addCondition("prone")
}

View File

@@ -17,7 +17,7 @@ if (actor.itemTypes.skill.find(s => s.name === "Savoir (Océans)")) {
}
let Test = await actor.setupSkill('Calme', {
appendTitle: ` ${this.effet.name}`,
appendTitle: ` ${this.effect.name}`,
skipTargets: true,
fields: {difficulty: 'easy'},
characteristic: 'wp',

Some files were not shown because too many files have changed in this diff Show More