Add all systems effects scripts + translations

This commit is contained in:
LeRatierBretonnien 2024-05-17 09:19:48 +02:00
parent 7b97578bd7
commit 039df5c10a
119 changed files with 255 additions and 232 deletions

View File

@ -1 +1 @@
MANIFEST-000689 MANIFEST-000697

View File

@ -1,3 +1,7 @@
2024/05/17-00:32:51.990246 7fe5356006c0 Recovering log #687 2024/05/17-09:18:35.938297 7fe534c006c0 Recovering log #695
2024/05/17-00:32:52.000905 7fe5356006c0 Delete type=3 #685 2024/05/17-09:18:35.991443 7fe534c006c0 Delete type=3 #693
2024/05/17-00:32:52.001011 7fe5356006c0 Delete type=0 #687 2024/05/17-09:18:35.991560 7fe534c006c0 Delete type=0 #695
2024/05/17-09:19:36.697860 7fe52e2006c0 Level-0 table #700: started
2024/05/17-09:19:36.697941 7fe52e2006c0 Level-0 table #700: 0 bytes OK
2024/05/17-09:19:36.704693 7fe52e2006c0 Delete type=0 #698
2024/05/17-09:19:36.718677 7fe52e2006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/05/16-23:31:09.265904 7fe5356006c0 Recovering log #683 2024/05/17-08:21:24.883877 7fe5360006c0 Recovering log #691
2024/05/16-23:31:09.275748 7fe5356006c0 Delete type=3 #681 2024/05/17-08:21:24.937952 7fe5360006c0 Delete type=3 #689
2024/05/16-23:31:09.275914 7fe5356006c0 Delete type=0 #683 2024/05/17-08:21:24.938049 7fe5360006c0 Delete type=0 #691
2024/05/16-23:31:47.713351 7fe52e2006c0 Level-0 table #688: started 2024/05/17-09:04:58.970123 7fe52e2006c0 Level-0 table #696: started
2024/05/16-23:31:47.713384 7fe52e2006c0 Level-0 table #688: 0 bytes OK 2024/05/17-09:04:58.970194 7fe52e2006c0 Level-0 table #696: 0 bytes OK
2024/05/16-23:31:47.720374 7fe52e2006c0 Delete type=0 #686 2024/05/17-09:04:58.976736 7fe52e2006c0 Delete type=0 #694
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) 2024/05/17-09:04:58.984265 7fe52e2006c0 Manual compaction at level-0 from '!journal!3IgmiprzLB6Lwenc' @ 72057594037927935 : 1 .. '!journal!suuYN87Al1ZZWtQQ' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000691 MANIFEST-000699

View File

@ -1,3 +1,7 @@
2024/05/17-00:32:52.003117 7fe536a006c0 Recovering log #689 2024/05/17-09:18:35.994766 7fe5360006c0 Recovering log #697
2024/05/17-00:32:52.013524 7fe536a006c0 Delete type=3 #687 2024/05/17-09:18:36.058245 7fe5360006c0 Delete type=3 #695
2024/05/17-00:32:52.013746 7fe536a006c0 Delete type=0 #689 2024/05/17-09:18:36.058349 7fe5360006c0 Delete type=0 #697
2024/05/17-09:19:36.690166 7fe52e2006c0 Level-0 table #702: started
2024/05/17-09:19:36.690204 7fe52e2006c0 Level-0 table #702: 0 bytes OK
2024/05/17-09:19:36.697272 7fe52e2006c0 Delete type=0 #700
2024/05/17-09:19:36.697681 7fe52e2006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/05/16-23:31:09.278348 7fe536a006c0 Recovering log #685 2024/05/17-08:21:24.940735 7fe536a006c0 Recovering log #693
2024/05/16-23:31:09.288721 7fe536a006c0 Delete type=3 #683 2024/05/17-08:21:25.000891 7fe536a006c0 Delete type=3 #691
2024/05/16-23:31:09.288781 7fe536a006c0 Delete type=0 #685 2024/05/17-08:21:25.001036 7fe536a006c0 Delete type=0 #693
2024/05/16-23:31:47.726632 7fe52e2006c0 Level-0 table #690: started 2024/05/17-09:04:58.954314 7fe52e2006c0 Level-0 table #698: started
2024/05/16-23:31:47.726653 7fe52e2006c0 Level-0 table #690: 0 bytes OK 2024/05/17-09:04:58.954354 7fe52e2006c0 Level-0 table #698: 0 bytes OK
2024/05/16-23:31:47.733317 7fe52e2006c0 Delete type=0 #688 2024/05/17-09:04:58.961425 7fe52e2006c0 Delete type=0 #696
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) 2024/05/17-09:04:58.970001 7fe52e2006c0 Manual compaction at level-0 from '!folders!3uquYH73ttCdoH0I' @ 72057594037927935 : 1 .. '!items!ylFhk7mGZOnAJTUT' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000689 MANIFEST-000697

View File

@ -1,3 +1,7 @@
2024/05/17-00:32:52.030367 7fe536a006c0 Recovering log #687 2024/05/17-09:18:36.119253 7fe5360006c0 Recovering log #695
2024/05/17-00:32:52.040956 7fe536a006c0 Delete type=3 #685 2024/05/17-09:18:36.181358 7fe5360006c0 Delete type=3 #693
2024/05/17-00:32:52.041025 7fe536a006c0 Delete type=0 #687 2024/05/17-09:18:36.181531 7fe5360006c0 Delete type=0 #695
2024/05/17-09:19:36.704879 7fe52e2006c0 Level-0 table #700: started
2024/05/17-09:19:36.704925 7fe52e2006c0 Level-0 table #700: 0 bytes OK
2024/05/17-09:19:36.711528 7fe52e2006c0 Delete type=0 #698
2024/05/17-09:19:36.718713 7fe52e2006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/05/16-23:31:09.306312 7fe536a006c0 Recovering log #683 2024/05/17-08:21:25.076083 7fe536a006c0 Recovering log #691
2024/05/16-23:31:09.315802 7fe536a006c0 Delete type=3 #681 2024/05/17-08:21:25.129785 7fe536a006c0 Delete type=3 #689
2024/05/16-23:31:09.315852 7fe536a006c0 Delete type=0 #683 2024/05/17-08:21:25.129920 7fe536a006c0 Delete type=0 #691
2024/05/16-23:31:47.740329 7fe52e2006c0 Level-0 table #688: started 2024/05/17-09:04:58.977091 7fe52e2006c0 Level-0 table #696: started
2024/05/16-23:31:47.740348 7fe52e2006c0 Level-0 table #688: 0 bytes OK 2024/05/17-09:04:58.977182 7fe52e2006c0 Level-0 table #696: 0 bytes OK
2024/05/16-23:31:47.746309 7fe52e2006c0 Delete type=0 #686 2024/05/17-09:04:58.984079 7fe52e2006c0 Delete type=0 #694
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) 2024/05/17-09:04:58.984296 7fe52e2006c0 Manual compaction at level-0 from '!journal!cZtNgayIw2QFhC9u' @ 72057594037927935 : 1 .. '!journal!cZtNgayIw2QFhC9u' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000689 MANIFEST-000697

View File

@ -1,3 +1,7 @@
2024/05/17-00:32:51.977571 7fe536a006c0 Recovering log #687 2024/05/17-09:18:35.865103 7fe5360006c0 Recovering log #695
2024/05/17-00:32:51.987927 7fe536a006c0 Delete type=3 #685 2024/05/17-09:18:35.934830 7fe5360006c0 Delete type=3 #693
2024/05/17-00:32:51.987985 7fe536a006c0 Delete type=0 #687 2024/05/17-09:18:35.934985 7fe5360006c0 Delete type=0 #695
2024/05/17-09:19:36.676671 7fe52e2006c0 Level-0 table #700: started
2024/05/17-09:19:36.676749 7fe52e2006c0 Level-0 table #700: 0 bytes OK
2024/05/17-09:19:36.683586 7fe52e2006c0 Delete type=0 #698
2024/05/17-09:19:36.697623 7fe52e2006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end)

View File

@ -1,7 +1,7 @@
2024/05/16-23:31:09.251603 7fe536a006c0 Recovering log #683 2024/05/17-08:21:24.818854 7fe536a006c0 Recovering log #691
2024/05/16-23:31:09.263101 7fe536a006c0 Delete type=3 #681 2024/05/17-08:21:24.880933 7fe536a006c0 Delete type=3 #689
2024/05/16-23:31:09.263306 7fe536a006c0 Delete type=0 #683 2024/05/17-08:21:24.881044 7fe536a006c0 Delete type=0 #691
2024/05/16-23:31:47.720499 7fe52e2006c0 Level-0 table #688: started 2024/05/17-09:04:58.940179 7fe52e2006c0 Level-0 table #696: started
2024/05/16-23:31:47.720525 7fe52e2006c0 Level-0 table #688: 0 bytes OK 2024/05/17-09:04:58.940238 7fe52e2006c0 Level-0 table #696: 0 bytes OK
2024/05/16-23:31:47.726531 7fe52e2006c0 Delete type=0 #686 2024/05/17-09:04:58.947190 7fe52e2006c0 Delete type=0 #694
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) 2024/05/17-09:04:58.969926 7fe52e2006c0 Manual compaction at level-0 from '!journal!50u8VAjdmovyr0hx' @ 72057594037927935 : 1 .. '!journal!yzw9I0r3hCK7PJnz' @ 0 : 0; will stop at (end)

View File

@ -1 +1 @@
MANIFEST-000689 MANIFEST-000697

View File

@ -1,3 +1,7 @@
2024/05/17-00:32:51.964446 7fe5356006c0 Recovering log #687 2024/05/17-09:18:35.800961 7fe534c006c0 Recovering log #695
2024/05/17-00:32:51.974644 7fe5356006c0 Delete type=3 #685 2024/05/17-09:18:35.861612 7fe534c006c0 Delete type=3 #693
2024/05/17-00:32:51.974702 7fe5356006c0 Delete type=0 #687 2024/05/17-09:18:35.861767 7fe534c006c0 Delete type=0 #695
2024/05/17-09:19:36.683771 7fe52e2006c0 Level-0 table #700: started
2024/05/17-09:19:36.683809 7fe52e2006c0 Level-0 table #700: 0 bytes OK
2024/05/17-09:19:36.690012 7fe52e2006c0 Delete type=0 #698
2024/05/17-09:19:36.697655 7fe52e2006c0 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 @@
2024/05/16-23:31:09.239221 7fe5356006c0 Recovering log #683 2024/05/17-08:21:24.759453 7fe5360006c0 Recovering log #691
2024/05/16-23:31:09.249489 7fe5356006c0 Delete type=3 #681 2024/05/17-08:21:24.814916 7fe5360006c0 Delete type=3 #689
2024/05/16-23:31:09.249541 7fe5356006c0 Delete type=0 #683 2024/05/17-08:21:24.815076 7fe5360006c0 Delete type=0 #691
2024/05/16-23:31:47.706801 7fe52e2006c0 Level-0 table #688: started 2024/05/17-09:04:58.947462 7fe52e2006c0 Level-0 table #696: started
2024/05/16-23:31:47.706831 7fe52e2006c0 Level-0 table #688: 0 bytes OK 2024/05/17-09:04:58.947511 7fe52e2006c0 Level-0 table #696: 0 bytes OK
2024/05/16-23:31:47.713069 7fe52e2006c0 Delete type=0 #686 2024/05/17-09:04:58.954096 7fe52e2006c0 Delete type=0 #694
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) 2024/05/17-09:04:58.969969 7fe52e2006c0 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-000332 MANIFEST-000340

View File

@ -1,3 +1,8 @@
2024/05/17-00:32:52.016354 7fe5356006c0 Recovering log #330 2024/05/17-09:18:36.061831 7fe534c006c0 Recovering log #338
2024/05/17-00:32:52.027826 7fe5356006c0 Delete type=3 #328 2024/05/17-09:18:36.115673 7fe534c006c0 Delete type=3 #336
2024/05/17-00:32:52.027974 7fe5356006c0 Delete type=0 #330 2024/05/17-09:18:36.115838 7fe534c006c0 Delete type=0 #338
2024/05/17-09:19:36.711754 7fe52e2006c0 Level-0 table #343: started
2024/05/17-09:19:36.711813 7fe52e2006c0 Level-0 table #343: 0 bytes OK
2024/05/17-09:19:36.718459 7fe52e2006c0 Delete type=0 #341
2024/05/17-09:19:36.718736 7fe52e2006c0 Manual compaction at level-0 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)
2024/05/17-09:19:36.718776 7fe52e2006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)

View File

@ -1,8 +1,8 @@
2024/05/16-23:31:09.291953 7fe5356006c0 Recovering log #326 2024/05/17-08:21:25.004562 7fe5360006c0 Recovering log #334
2024/05/16-23:31:09.303368 7fe5356006c0 Delete type=3 #324 2024/05/17-08:21:25.072829 7fe5360006c0 Delete type=3 #332
2024/05/16-23:31:09.303512 7fe5356006c0 Delete type=0 #326 2024/05/17-08:21:25.072953 7fe5360006c0 Delete type=0 #334
2024/05/16-23:31:47.733464 7fe52e2006c0 Level-0 table #331: started 2024/05/17-09:04:58.961703 7fe52e2006c0 Level-0 table #339: started
2024/05/16-23:31:47.733512 7fe52e2006c0 Level-0 table #331: 0 bytes OK 2024/05/17-09:04:58.961771 7fe52e2006c0 Level-0 table #339: 0 bytes OK
2024/05/16-23:31:47.740033 7fe52e2006c0 Delete type=0 #329 2024/05/17-09:04:58.969548 7fe52e2006c0 Delete type=0 #337
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/17-09:04:58.970030 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) 2024/05/17-09:04:58.970097 7fe52e2006c0 Manual compaction at level-1 from '!journal!056ILNNrLiPq3Gi3' @ 72057594037927935 : 1 .. '!journal!yfZxl4I7XAuUF6r3' @ 0 : 0; will stop at (end)

Binary file not shown.

View File

@ -1,5 +1,5 @@
let choices = await Promise.all([game.wfrp4e.utility.findItemId("PzimjNx9Ojq4g6mV"), game.wfrp4e.utility.findItemId("rOPmyLWa37e7s9v6")]) let choices = await Promise.all([game.wfrp4e.utility.findItemId("PzimjNx9Ojq4g6mV"), game.wfrp4e.utility.findItemId("rOPmyLWa37e7s9v6")])
let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, "Choose a Skill") let items = await game.wfrp4e.apps.ItemDialog.create(choices, 1, "Choisir une compétence")
items = items.map(i => i.toObject()) items = items.map(i => i.toObject())
items.forEach(i => i.system.advances.value = 20) items.forEach(i => i.system.advances.value = 20)

View File

@ -12,16 +12,16 @@ let index = game.packs
return i return i
}) })
let choice = await ItemDialog.create(index, 1, "Choose a Lore") let choice = await ItemDialog.create(index, 1, "Choisir un Savoir")
let text; let text;
if (!choice[0]) if (!choice[0])
{ {
let custom = await Dialog.wait({ let custom = await Dialog.wait({
title : "Enter Lore", title : "Saisir le savoir",
content : "<input type='text'>", content : "<input type='text'>",
buttons : { buttons : {
confirm : { confirm : {
label : game.i18n.localize("Confirm"), label : game.i18n.localize("Confirmer"),
callback : (dlg) => { callback : (dlg) => {
return dlg.find("input")[0].value return dlg.find("input")[0].value
} }

View File

@ -1,5 +1,5 @@
if (args.opposedTest.result.hitloc.value == "body" && args.totalWoundLoss > 0) if (args.opposedTest.result.hitloc.value == "body" && args.totalWoundLoss > 0)
{ {
args.actor.addCondition("bleeding", 2) args.actor.addCondition("bleeding", 2)
this.script.scriptNotification("Added Bleeding") this.script.scriptNotification("Ajout Hémorragique")
} }

View File

@ -1 +1 @@
ChatMessage.create({content : "<em>Speak and be known to me</em>", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true}) ChatMessage.create({content : "<em>Parle et fais toi connaître</em>", speaker : ChatMessage.getSpeaker({token: this.actor.getActiveTokens()[0]?.document, actor: this.actor})}, {chatBubble : true})

View File

@ -1,4 +1,4 @@
let skill = `Entertain (Singing)` let skill = `Divertissement (Chant)`
let currentCareer = this.actor.system.currentCareer; let currentCareer = this.actor.system.currentCareer;
let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill); let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);

View File

@ -1,6 +1,6 @@
if (["cast", "channelling", "pray"].includes(args.type)) if (["cast", "channelling", "pray"].includes(args.type))
{ {
args.abort = true; args.abort = true;
this.script.scriptNotification("Cannot cast Spells or use Prayers"); this.script.scriptNotification("Impossible d'incanter un Sort ou d'utiliser un Prière");
} }
else return true; else return true;

View File

@ -3,6 +3,6 @@ if (args.test.characteristicKey == "wp")
if (args.test.failed) if (args.test.failed)
{ {
this.actor.addSystemEffect("convulsions") this.actor.addSystemEffect("convulsions")
this.script.scriptMessage(`Willpower Test failed, <b>${this.actor.prototypeToken.name}</b> gains @Symptom[Convulsions] for [[1d10]] hours`) this.script.scriptMessage(`Test de Force Mentale échoué, <b>${this.actor.prototypeToken.name}</b> subit des @Symptom[Convulsions] pour [[1d10]] heures`)
} }
} }

View File

@ -1,4 +1,4 @@
let test = await this.actor.setupSkill("Dodge", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}); let test = await this.actor.setupSkill("Esquive", {skipTargets: true, appendTitle : ` - ${this.effect.name}`});
await test.roll(); await test.roll();
if (test.failed) if (test.failed)

View File

@ -5,8 +5,8 @@ let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fi
await test.roll() await test.roll()
if (test.failed) if (test.failed)
{ {
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> notices nothing amiss save that they become tired a little earlier than usual. At this point it is still possible to save the victim via a powerful antidote or magical means.</p> this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> Jo ne remarque rien d'anormal si ce n'est qu'ils se fatiguent un peu plus tôt que d'habitude. À ce stade, il est encore possible de sauver la victime via un antidote puissant ou des moyens magiques.</p>
<p>Once they fall asleep however, it is almost impossible. At this point the victim must make a <strong>Hard (-20) Endurance</strong> Test. If they fail, they never awaken.</p>`, <p>Cependant, une fois quils sendorment, cest presque impossible. À ce stade, la victime doit effectuer un test d'Endurance <strong>difficile (-20)</strong>. S'il échoue, il ne se réveille jamais.</p>`,
{ {
whisper: ChatMessage.getWhisperRecipients("GM"), whisper: ChatMessage.getWhisperRecipients("GM"),
blind: true blind: true

View File

@ -1,5 +1,5 @@
if (this.actor.hasCondition("broken")) if (this.actor.hasCondition("broken"))
{ {
this.actor.removeCondition("broken") this.actor.removeCondition("broken")
this.script.scriptNotification(`Cannot have Broken`); this.script.scriptNotification(`Impossible de supprimer l'état Brisé`);
} }

View File

@ -3,21 +3,21 @@ if (this.actor.type != "character")
return; return;
} }
let god = await ValueDialog.create("Enter a Deity", "Blessed") let god = await ValueDialog.create("Saisir une Déité", "Béni")
if (god) if (god)
{ {
let prayers = await game.wfrp4e.utility.findAll("prayer", "Loading Prayers") let prayers = await game.wfrp4e.utility.findAll("prayer", "Chargement des Prières")
let blessings = prayers.filter(p => p.system.god.value.split(",").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == "blessing") let blessings = prayers.filter(p => p.system.god.value.split(",").map(i => i.trim().toLowerCase()).includes(god.toLowerCase()) && p.system.type.value == "blessing")
if (blessings.length) if (blessings.length)
{ {
this.script.scriptNotification("Adding " + blessings.map(i => i.name).join(", ")) this.script.scriptNotification("Ajout de " + blessings.map(i => i.name).join(", "))
await this.actor.createEmbeddedDocuments("Item", blessings, {fromEffect : this.effect.id}) await this.actor.createEmbeddedDocuments("Item", blessings, {fromEffect : this.effect.id})
} }
else else
{ {
this.script.scriptNotification(`Could not find any Blessings associated with ${god}.`) this.script.scriptNotification(`Impossible de trouver des Bénédictions associées avec ${god}.`)
} }
this.item.updateSource({name : this.item.name.replace("Any", god)}) this.item.updateSource({name : this.item.name.replace("Savoir divin", god)})
await this.actor.update({"system.details.god.value": god}) await this.actor.update({"system.details.god.value": god})
} }

View File

@ -1 +1 @@
return args.skill?.name == "Entertain (Sing)" || args.skill?.name == "Entertain (Singing)" || (args.skill?.name.includes("Language") && (args.skill?.name.includes("Magick") || args.skill?.name.includes("Elthárin") || args.skill?.name.includes("Cathayan"))) return args.skill?.name == "Divertissement (Chant)" || args.skill?.name == "Divertissement (Chanter)" || (args.skill?.name.includes("Langue") && (args.skill?.name.includes("Magick") || args.skill?.name.includes("Elthárin") || args.skill?.name.includes("Cathayan")))

View File

@ -3,8 +3,8 @@ if (caster)
{ {
let healed= caster.system.characteristics.wp.bonus + caster.system.characteristics.int.bonus let healed= caster.system.characteristics.wp.bonus + caster.system.characteristics.int.bonus
await this.actor.modifyWounds(healed); await 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> guéri ${healed} Blessures`)
} }
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields : {difficulty : "vhard"}, context : {success : "1 Corruption point that was gained within the last hour is removed.", failure: "Nothing happens"}}) let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields : {difficulty : "vhard"}, context : {success : "1 Point de Corruption gagné durant la dernière heure doit être supprimé.", failure: "Rien ne se passe"}})
await test.roll(); await test.roll();

View File

@ -1,6 +1,6 @@
this.script.scriptMessage(await this.actor.applyBasicDamage(8 + parseInt(this.effect.sourceTest.result.SL), {suppressMsg : true})) this.script.scriptMessage(await this.actor.applyBasicDamage(8 + parseInt(this.effect.sourceTest.result.SL), {suppressMsg : true}))
let test = await this.actor.setupSkill("Athletics", {skipTargets: true, appendTitle : ` - ${this.effect.name}`}) let test = await this.actor.setupSkill("Athlétisme", {skipTargets: true, appendTitle : ` - ${this.effect.name}`})
await test.roll(); await test.roll();
if (test.failed) if (test.failed)
{ {

View File

@ -6,7 +6,7 @@ if (location)
if (dropped.length) 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) for(let weapon of dropped)
{ {
await weapon.system.toggleEquip(); await weapon.system.toggleEquip();
@ -16,6 +16,6 @@ if (location)
let roll = await new Roll("1d10").roll() 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}) this.effect.updateSource({"duration.rounds" : roll.total})

View File

@ -1 +1 @@
return !["Language (Magick)", "Channelling (Hysh)"].includes(args.skill?.name) return !["Langue (Magick)", "Focalisation (Hysh)"].includes(args.skill?.name)

View File

@ -1,5 +1,5 @@
if (this.actor.hasCondition("surprised")) if (this.actor.hasCondition("surprised"))
{ {
this.actor.removeCondition("surprised") this.actor.removeCondition("surprised")
this.script.scriptMessage(`Cannot be Surprised`); this.script.scriptMessage(`Ne peut être surpris`);
} }

View File

@ -1,3 +1,3 @@
this.script.scriptNotification(`${args.actor.prototypeToken.name} must pass an <b>Average (+20) Willpower</b> Test to attack this target!`) this.script.scriptNotification(`${args.actor.prototypeToken.name} doit réussir un Test <b>Accessible (+20) de Force Mentale</b> pour attaquer cette cible!`)
return true; // No need to show this in the dialog return true; // No need to show this in the dialog

View File

@ -1,19 +1,19 @@
let specification = this.item.system.specification.value; let specification = this.item.system.specification.value;
let choice = []; let choice = [];
if (!specification || specification == "Trained Skills") if (!specification || specification == "Compétences entraînées")
{ {
choice = await ItemDialog.create(ItemDialog.objectToArray({ choice = await ItemDialog.create(ItemDialog.objectToArray({
broken: "Broken", broken: "Dompté",
drive: "Drive", drive: "Trait",
entertain: "Entertain", entertain: "Divertir",
fetch: "Fetch", fetch: "Rapporter",
guard: "Guard", guard: "Garder",
home: "Home", home: "Revenir à la maison",
magic: "Magic", magic: "Magie",
mount: "Mount", mount: "Monture",
war: "War" war: "Guerre"
}, this.effect.img), "unlimited", "Choose Training"); }, this.effect.img), "unlimited", "Choisissez un Dressage");
} }
else else
{ {

View File

@ -1,7 +1,7 @@
let table = game.wfrp4e.tables.findTable("mutatemental"); let table = game.wfrp4e.tables.findTable("mutatemental");
if (!table) if (!table)
{ {
ui.notifications.error("Cannot find table with key: mutatemental") ui.notifications.error("Impossible de trouver la table des Mutations Mentales")
} }
let result = (await table.roll()).results[0]; let result = (await table.roll()).results[0];
let uuid = `Compendium.${result.documentCollection}.${result.documentId}` let uuid = `Compendium.${result.documentCollection}.${result.documentId}`
@ -14,5 +14,5 @@ if (item)
} }
else else
{ {
ui.notifications.error("Item could not be found: " + uuid) ui.notifications.error("Impossible de trouver l'item: " + uuid)
} }

View File

@ -5,7 +5,7 @@
{ {
fromUuid("Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb").then(disease => { fromUuid("Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb").then(disease => {
this.actor.createEmbeddedDocuments("Item", [disease.toObject()]) this.actor.createEmbeddedDocuments("Item", [disease.toObject()])
this.script.scriptNotification("Gained " + disease.name) this.script.scriptNotification("Gain de " + disease.name)
}) })
} }

View File

@ -1,2 +1,2 @@
const talents = await Promise.all(["Schemer", "Second Sight"].map(game.wfrp4e.utility.findTalent)) const talents = await Promise.all(["Intrigant", "Seconde Vue"].map(game.wfrp4e.utility.findTalent))
this.actor.createEmbeddedDocuments("Item", talents, {fromEffect : this.effect.id}) this.actor.createEmbeddedDocuments("Item", talents, {fromEffect : this.effect.id})

View File

@ -1,4 +1,4 @@
let item = await fromUuid("Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv"); let item = await fromUuid("Compendium.wfrp4e-core.items.Item.vMYEkrWj0ip6ZOdv");
let data = item.toObject(); let data = item.toObject();
data.name += ` (Disease)`; data.name += ` (Maladie)`;
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id}) this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id})

View File

@ -10,10 +10,10 @@ if (this.item.system.quantity.value)
} }
else else
{ {
this.script.scriptNotification("Heal Test failed!", "error") this.script.scriptNotification("Test de Guérison échoué!", "error")
} }
} }
else else
{ {
this.script.scriptNotification("None left!", "error") this.script.scriptNotification("Quantité insuffisante!", "error")
} }

View File

@ -1,11 +1,11 @@
if (this.actor.Species.toLowerCase() != "skaven") { if (this.actor.Species.toLowerCase() != "skaven") {
this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - Used ${this.effect.name}`, fields: { difficulty: "difficult" } }).then(async test => { this.actor.setupCharacteristic("t", {skipTargets: true, appendTitle : ` - Utilise ${this.effect.name}`, fields: { difficulty: "difficult" } }).then(async test => {
await test.roll() await test.roll()
if (test.failed) if (test.failed)
{ {
let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10) let toughnessLost = Math.ceil(CONFIG.Dice.randomUniform() * 10)
this.actor.update({ "system.characteristics.t.initial": this.actor.characteristics.t.initial - toughnessLost }) this.actor.update({ "system.characteristics.t.initial": this.actor.characteristics.t.initial - toughnessLost })
this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> lost ${toughnessLost} Toughness`) this.script.scriptMessage(`<b>${this.actor.prototypeToken.name}</b> perd ${toughnessLost} points d'Endurance`)
} }
}) })
} }

View File

@ -1,4 +1,4 @@
if (args.totalWoundLoss > 0) if (args.totalWoundLoss > 0)
{ {
this.script.scriptMessage(`<b>${args.actor.name}</b> must pass an <b>Easy (+40) Endurance</b> Test or gain a @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Festering Wound}`, {whisper: ChatMessage.getWhisperRecipients("GM")}) this.script.scriptMessage(`<b>${args.actor.name}</b> doit réussir un Test <b>Facile (+40) d'Endurance</b> ou subir une @UUID[Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb]{Blessure Purulente}`, {whisper: ChatMessage.getWhisperRecipients("GM")})
} }

View File

@ -5,5 +5,5 @@ if (caster)
let bonus = caster.system.characteristics.wp.bonus let bonus = caster.system.characteristics.wp.bonus
this.actor.modifyWounds(bonus) this.actor.modifyWounds(bonus)
this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> regains ${bonus} Wounds`) this.script.scriptMessage(`<strong>${this.actor.prototypeToken.name}</strong> récupère ${bonus} Blessures`)
} }

View File

@ -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"

View File

@ -2,7 +2,7 @@ if (args.test.spell?.getFlag("wfrp4e", "boonOfTzeentch"))
{ {
if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis) if (args.test.result.minormis || args.test.result.majormis || args.test.result.catastrophicmis)
{ {
this.script.scriptMessage(`<strong>${this.effect.name}</strong> quits your mind in disgust and erases itself from your grimoire!`) this.script.scriptMessage(`<strong>${this.effect.name}</strong> s'efface de votre esprit et s'efface de votre grimoire !`)
this.effect.sourceItem.delete(); this.effect.sourceItem.delete();
} }
} }

View File

@ -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)

View File

@ -1,5 +1,5 @@
if (this.actor.hasCondition("ablaze")) if (this.actor.hasCondition("ablaze"))
{ {
this.script.scriptNotification("Immune to Ablaze") this.script.scriptNotification("Immunisé à En Flammes")
await this.actor.hasCondition("ablaze")?.delete() await this.actor.hasCondition("ablaze")?.delete()
} }

View File

@ -1 +1 @@
return args.skill?.name == "Lore (Apothecary)" return args.skill?.name == "Savoir (Apothicaire)"

View File

@ -2,9 +2,9 @@
if (args.equipped) { if (args.equipped) {
this.actor.createEmbeddedDocuments("ActiveEffect", [this.item.effects.contents[1]?.convertToApplied()]) this.actor.createEmbeddedDocuments("ActiveEffect", [this.item.effects.contents[1]?.convertToApplied()])
this.script.scriptMessage(`${this.actor.name} dons the <strong>${this.item.name}</strong>. <br> this.script.scriptMessage(`${this.actor.name} porte <strong>${this.item.name}</strong>. <br>
They cannot cast Spells or pray for Blessings and Miracles.<br> Il ne peut plus lancer de Sorts ni effectuer de Prières ni Miracles.<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}. S'il porte le masque pendant plus d'1 heure ou bénéficie de l'un de ses effets, il est exposé à un @Corruption[moderate]{Corruption Modérée}.
`, `,
{whisper: ChatMessage.getWhisperRecipients("GM")}) {whisper: ChatMessage.getWhisperRecipients("GM")})
} }
@ -14,7 +14,7 @@ else if (!args.equipped)
{ {
await this.item.effects.contents[0].delete(); await this.item.effects.contents[0].delete();
await this.item.update({name : this.item.name += " (Used)"}) 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.`, this.script.scriptMessage(`<strong>${this.item.name}</strong> sur ${this.actor.name} a été enlevé et à perdu ses propriétés. Cependant, les effets perdurent pendant [[1d10+4]] jours, après quoi ils devront être supprimés manuellement.`,
{whisper: ChatMessage.getWhisperRecipients("GM")} {whisper: ChatMessage.getWhisperRecipients("GM")}
) )

View File

@ -4,5 +4,5 @@ let attackerSize = game.wfrp4e.config.actorSizeNums[args.attacker.details.size.v
if (attackerSize > actorSize) if (attackerSize > actorSize)
{ {
args.actor.addCondition("prone") args.actor.addCondition("prone")
this.script.scriptMessage(`<strong>Tail Attack</strong>: ${args.actor.prototypeToken.name} is now <strong>Prone</strong>`) this.script.scriptMessage(`<strong>Attaque Caudale</strong>: ${args.actor.prototypeToken.name} est désormais <strong>A Terre</strong>`)
} }

View File

@ -3,11 +3,11 @@ let attackerSize = game.wfrp4e.config.actorSizeNums[args.attacker.details.size.v
if (attackerSize > actorSize) if (attackerSize > actorSize)
{ {
let msg = `<b>Tongue Attack</b>: ${args.actor.prototypeToken.name} is now @Condition[Entangled]`; let msg = `<b>Attaque de Langue préhensile</b>: ${args.actor.prototypeToken.name} est désormais @Condition[Empêtré]`;
await args.actor.addCondition("entangled"); await args.actor.addCondition("entangled");
if (actorSize <= 2) if (actorSize <= 2)
{ {
msg += `and @Condition[Engaged]` msg += `et @Condition[Engagé]`
} }
this.script.scriptMessage(msg, {speaker : {alias: args.attacker.prototypeToken.name}}) this.script.scriptMessage(msg, {speaker : {alias: args.attacker.prototypeToken.name}})
} }

View File

@ -4,11 +4,11 @@ if (test.failed && (test.result.roll % 11 == 0 || test.result.roll == 100))
let points = await new Roll("1d10").roll(); let points = await new Roll("1d10").roll();
game.dice3d?.showForRoll(points) game.dice3d?.showForRoll(points)
this.actor.update({"system.status.corruption.value" : this.actor.system.status.corruption.value + points.total}) this.actor.update({"system.status.corruption.value" : this.actor.system.status.corruption.value + points.total})
this.script.scriptMessage(`Gains ${points.total} Corruption`) this.script.scriptMessage(`Reçoit ${points.total} Point de Corruption`)
} }
else else
{ {
let points = this.effect.sourceTest.result.overcast.usage.other.current; let points = this.effect.sourceTest.result.overcast.usage.other.current;
this.actor.update({"system.status.corruption.value" : this.actor.system.status.corruption.value - points}) this.actor.update({"system.status.corruption.value" : this.actor.system.status.corruption.value - points})
this.script.scriptMessage(`Loses ${points} Corruption`) this.script.scriptMessage(`Perd ${points} Point de Corruption`)
} }

View File

@ -1,4 +1,4 @@
let item = await fromUuid("Compendium.wfrp4e-core.items.klCJX0mNpXYH5AIx") let item = await fromUuid("Compendium.wfrp4e-core.items.klCJX0mNpXYH5AIx")
let data = item.toObject(); let data = item.toObject();
data.name = data.name.replace("Target", "Strangers"); data.name = data.name.replace("Cible", "Strangers");
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id}); this.actor.createEmbeddedDocuments("Item", [data], {fromEffect : this.effect.id});

View File

@ -1,2 +1,2 @@
let test = await this.actor.setupCharacteristic("dex", {context : {failure : "Drops the item"}}) let test = await this.actor.setupCharacteristic("dex", {context : {failure : "Lâche l'objet"}})
await test.roll(); await test.roll();

View File

@ -10,10 +10,10 @@ let characteristics = {
"wp" : 15, "wp" : 15,
"fel" : 0 "fel" : 0
} }
let skills = ["Channelling", "Cool", "Dodge", "Entertain (Storytelling)", "Intuition", "Language (Magick)", "Lore (Magic)", "Perception"] let skills = ["Focalisation", "Calme", "Esquive", "Divertissement (Narration)", "Intuition", "Langue (Magick)", "Savoir (Magie)", "Perception"]
let skillAdvancements = [5, 15, 10, 10, 15, 10, 10, 20] let skillAdvancements = [5, 15, 10, 10, 15, 10, 10, 20]
let talents = ["Arcane Magic", "Petty Magic", "Second Sight"] let talents = ["Magie des Arcanes", "Magie Mineure", "Seconde Vue"]
let trappings = ["Hand Weapon", "Quarterstaff", "Ritual Dress incorporating many ingredients and fetishes"] let trappings = ["Arme simple", "(2M) Bâton de combat", "Robe de rituel incorporant des ingrédients et des fétiches"]
let items = []; let items = [];
let updateObj = this.actor.toObject(); let updateObj = this.actor.toObject();
@ -48,7 +48,7 @@ for (let talent of talents)
} }
else else
{ {
ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})
} }
} }

View File

@ -7,7 +7,7 @@ tongue = tongue.toObject();
let roll = await new Roll("1d10").roll(); let roll = await new Roll("1d10").roll();
roll.toMessage(this.script.getChatData({flavor : "Teeth Lost"})) roll.toMessage(this.script.getChatData({flavor : "Dents perdues"}))
teeth.system.location.value = `${roll.total} ${teeth.system.location.value}` teeth.system.location.value = `${roll.total} ${teeth.system.location.value}`
brokenbone.system.location.value = "Jaw" brokenbone.system.location.value = "Jaw"

View File

@ -4,5 +4,5 @@ let acutesense = await fromUuid("Compendium.wfrp4e-core.items.Item.9h82z72XGo9tf
fear = fear.toObject(); fear = fear.toObject();
fear.system.specification.value = 1; fear.system.specification.value = 1;
acutesense = acutesense.toObject(); acutesense = acutesense.toObject();
acutesense.name += " (Smell)"; acutesense.name += " (Odorat)";
this.actor.createEmbeddedDocuments("Item", [darkvision, fear, acutesense], {fromEffect : this.effect.id}) this.actor.createEmbeddedDocuments("Item", [darkvision, fear, acutesense], {fromEffect : this.effect.id})

View File

@ -1,4 +1,4 @@
if (this.actor.has("Magic Resistance", "talent")) if (this.actor.has("Résistance à la Magie", "talent"))
return return
let item = await fromUuid("Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV") let item = await fromUuid("Compendium.wfrp4e-core.items.Item.eowbsW6oHGSNJmxV")

View File

@ -9,7 +9,7 @@ let filters = [
} }
] ]
let petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, "Choose 3 Petty Spells") let petty = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, "Choisir 3 sorts de Magie Mineure")
filters = [ filters = [
@ -23,7 +23,7 @@ filters = [
} }
] ]
let arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, "Choose 3 Arcane Spells") let arcane = await game.wfrp4e.apps.ItemDialog.createFromFilters(filters, 3, "Choisir 3 sorts d'Arcane")
let items = petty.concat(arcane).map(i => i.toObject()) let items = petty.concat(arcane).map(i => i.toObject())

View File

@ -1,5 +1,5 @@
if (this.actor.hasCondition("stunned") || this.actor.hasCondition("unconscious")) if (this.actor.hasCondition("stunned") || this.actor.hasCondition("unconscious"))
{ {
this.script.scriptNotification("Disabled!"); this.script.scriptNotification("Désactivé!");
await this.effect.update({"disabled" : true}) await this.effect.update({"disabled" : true})
} }

View File

@ -9,7 +9,7 @@ if (this.item.system.protects[args.opposedTest.result.hitloc.value])
await test.roll(); await test.roll();
if (test.failed) if (test.failed)
{ {
this.script.scriptMessage(`${this.actor.name} must break from combat and flee until they pass a <strong>Challenging (+0) Willpower</strong> Test`); this.script.scriptMessage(`${this.actor.name} doit cesser le combat et fuir à moins de réussir un jet <strong>Intermédiaire (+0) de Force Mentale</strong>`);
this.item.setFlag("wfrp4e", "failedCool", true); this.item.setFlag("wfrp4e", "failedCool", true);
} }
}) })

View File

@ -1 +1 @@
return args.skill?.name == "Language (Magick)" return args.skill?.name == "Langue (Magick)"

View File

@ -1,7 +1,7 @@
let msg = `<b>${this.actor.prototypeToken.name}</b> loses 1 Wound.<br>` let msg = `<b>${this.actor.prototypeToken.name}</b> perd 1 Blessure.<br>`
if (this.actor.status.wounds.value <= 1) if (this.actor.status.wounds.value <= 1)
{ {
msg += `<b>${this.actor.prototypeToken.name}</b> goes unconscious.<br>` msg += `<b>${this.actor.prototypeToken.name}</b> tombe Inconscient.<br>`
await this.actor.addCondition("unconscious") await this.actor.addCondition("unconscious")
} }
this.script.scriptMessage(msg) this.script.scriptMessage(msg)

View File

@ -1 +1 @@
this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {appendTitle: ` - ${this.effect.name}`, context: { failure : "May not flee Combat"}}).then(test => test.roll()) this.actor.setupSkill(game.i18n.localize("NAME.Cool"), {appendTitle: ` - ${this.effect.name}`, context: { failure : "Ne peut fuir les combats"}}).then(test => test.roll())

View File

@ -1,7 +1,7 @@
let choice1 = [ let choice1 = [
{ {
type : "skill", type : "skill",
name : "Melee (Basic)", name : "Corps à corps (Base)",
diff : { diff : {
system : { system : {
advances : { advances : {
@ -14,7 +14,7 @@ let choice1 = [
let choice2 = [ let choice2 = [
{ {
type : "skill", type : "skill",
name : "Melee (Polearm)", name : "Corps à corps (Armes d'hast)",
diff : { diff : {
system : { system : {
advances : { advances : {
@ -28,7 +28,7 @@ let choice2 = [
let choice3 = [ let choice3 = [
{ {
type : "skill", type : "skill",
name : "Melee (Two-Handed)", name : "Corps à corps (A deux mains)",
diff : { diff : {
system : { system : {
advances : { advances : {
@ -43,29 +43,29 @@ let choice = await Dialog.wait({
title : "Choice", title : "Choice",
content : content :
`<p> `<p>
Select your choice Faites un choix
</p> </p>
<ol> <ol>
<li>Melee (Basic)</li> <li>Corps à corps (Base)</li>
<li>Melee (Polearm)</li> <li>Corps à corps (Armes d'hast)</li>
<li>Melee (Two-Handed)</li> <li>Corps à corps (A deux mains)</li>
</ol> </ol>
`, `,
buttons : { buttons : {
1 : { 1 : {
label : "Basic", label : "Base",
callback : () => { callback : () => {
return choice1 return choice1
} }
}, },
2 : { 2 : {
label : "Polearm", label : "Armes d'hast",
callback : () => { callback : () => {
return choice2 return choice2
} }
}, },
3 : { 3 : {
label : "Two-Handed", label : "A deux mains",
callback : () => { callback : () => {
return choice3 return choice3
} }
@ -97,7 +97,7 @@ for (let c of choice)
items.push(mergeObject(item, (c.diff || {}))) items.push(mergeObject(item, (c.diff || {})))
} }
else else
ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})
} }
} }

View File

@ -1,7 +1,7 @@
if (args.applyAP && args.modifiers.ap.metal) if (args.applyAP && args.modifiers.ap.metal)
{ {
args.modifiers.ap.ignored += args.modifiers.ap.metal args.modifiers.ap.ignored += args.modifiers.ap.metal
args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : "Add Metal AP to Damage" }) args.modifiers.other.push({value : args.modifiers.ap.metal, label : this.effect.name, details : "Ajout les PA Métalliques aux Dommages" })
args.modifiers.ap.details.push("<strong>" + this.effect.name + "</strong>: Ignore Metal (" + 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 args.modifiers.ap.metal = 0
} }

View File

@ -1 +1 @@
return !["Pick Lock", "Sleight of Hand", "Channelling (Ulgu)"].includes(args.skill?.name) return !["Crochetage", "Escamotage", "Focalisation (Ulgu)"].includes(args.skill?.name)

View File

@ -1,5 +1,5 @@
let healed = args.totalWoundLoss let healed = args.totalWoundLoss
this.script.scriptMessage(`<b>this.actor.prototypeToken.name</b> healed ${healed} Wounds`); this.script.scriptMessage(`<b>this.actor.prototypeToken.name</b> Guérison de ${healed} Blessures`);
this.actor.modifyWounds(healed) this.actor.modifyWounds(healed)

View File

@ -10,7 +10,7 @@ if (opposedResult?.winner == "attacker")
if (spells.length) if (spells.length)
{ {
let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)] let chosen = spells[Math.floor(CONFIG.Dice.randomUniform() * spells.length)]
this.script.scriptMessage(`Loses access to <strong>${chosen.name}</strong>`) this.script.scriptMessage(`Ne se rappelle plus du sort <strong>${chosen.name}</strong>`)
chosen.update({name : chosen.name += " (LOST)"}) chosen.update({name : chosen.name += " (LOST)"})
} }
} }

View File

@ -1,6 +1,6 @@
if (args.extendedTest?.getFlag("wfrp4e", "fear")) if (args.extendedTest?.getFlag("wfrp4e", "fear"))
{ {
this.script.scriptNotification("Immune to Fear"); this.script.scriptNotification("Immunisé à la Peur");
args.extendedTest.delete(); args.extendedTest.delete();
args.abort = true; args.abort = true;
} }

View File

@ -11,7 +11,7 @@ await this.actor.removeSystemEffect("stinkingdrunk1")
await this.actor.addCondition("fatigued") await this.actor.addCondition("fatigued")
const duration = 10 - parseInt(this.actor.system.characteristics.t.bonus) const duration = 10 - parseInt(this.actor.system.characteristics.t.bonus)
this.effect.updateSource({"duration.rounds" : duration}); this.effect.updateSource({"duration.rounds" : duration});
this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> has lost all alcohol related penalties and gains the Fatigued Condition for ${duration} hours.</p>`, this.script.scriptMessage(`<p><strong>${this.actor.prototypeToken.name}</strong> ne souffre des pénalités dues à l'alcool et reçoit 1 état Fatigué pour ${duration} heures.</p>`,
{ {
whisper: ChatMessage.getWhisperRecipients("GM"), whisper: ChatMessage.getWhisperRecipients("GM"),
blind: true blind: true

View File

@ -1,4 +1,4 @@
if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == "Arcane Magic (Fire)")) if (args.test.result.fumble && !this.actor.itemTypes.talent.find(i => i.name == "Magie des Arcanes (Feu)"))
{ {
this.actor.addCondition("ablaze"); this.actor.addCondition("ablaze");
} }

View File

@ -1,7 +1,7 @@
let spells = await game.wfrp4e.utility.findAll("spell", "Loading Spells"); let spells = await game.wfrp4e.utility.findAll("spell", "Chargement des sorts");
spells = spells.filter(s => ["fire", "heavens", "beasts", "shadow", "light", "life", "death", "metal"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1) spells = spells.filter(s => ["feu", "cieux", "bêtes", "ombres", "lumière", "vie", "mort", "métal"].includes(s.system.lore.value)).sort((a, b) => a.system.lore.value > b.system.lore.value ? 1 : -1)
let choice = await ItemDialog.create(spells, 1, "Choose Spell"); let choice = await ItemDialog.create(spells, 1, "Choisir un sort");
if (choice[0]) if (choice[0])
{ {
this.actor.createEmbeddedDocuments("Item", choice, {fromEffect: this.effect.id}) this.actor.createEmbeddedDocuments("Item", choice, {fromEffect: this.effect.id})

View File

@ -1,12 +1,12 @@
if (args.totalWoundLoss > 0) if (args.totalWoundLoss > 0)
{ {
args.opposedTest.result.other.push( args.opposedTest.result.other.push(
`@Corruption[minor]{Minor Exposure to Corruption}` `@Corruption[minor]{Exposition Mineure à la Corruption}`
) )
this.script.scriptMessage( this.script.scriptMessage(
`<strong>${this.effect.name}</strong>: `<strong>${this.effect.name}</strong>:
@Corruption[minor]{Minor Exposure to Corruption} <br/> @Corruption[minor]{Exposition Mineure à la Corruption} <br/>
<strong>${args.actor.prototypeToken.name}</strong> must take an <strong>${args.actor.prototypeToken.name}</strong> doit réaliser un Test
<strong>Average (+20%) Corruption (Minor) Test</strong>`, <strong>Accessible (+20%) de Corruption (Mineur)</strong>`,
{whisper: ChatMessage.getWhisperRecipients("GM")}) {whisper: ChatMessage.getWhisperRecipients("GM")})
} }

View File

@ -6,4 +6,4 @@ args.attacker.update({"system.status.wounds.value" : args.attacker.system.status
args.actor.addCondition("fatigued") args.actor.addCondition("fatigued")
args.attacker.hasCondition("fatigued")?.delete(); args.attacker.hasCondition("fatigued")?.delete();
this.script.scriptMessage(`<b>${args.attacker.prototypeToken.name}</b> gains ${woundsGained} Wounds`); this.script.scriptMessage(`<b>${args.attacker.prototypeToken.name}</b> guéri de ${woundsGained} Blessures`);

View File

@ -5,5 +5,5 @@ if (broken && !broken.getFlag("wfrp4e", "blasted-mind") && !this.actor.has(item.
{ {
await broken.delete(); await broken.delete();
this.actor.createEmbeddedDocuments("Item", [item], {fromEffect: this.effect.id}) this.actor.createEmbeddedDocuments("Item", [item], {fromEffect: this.effect.id})
this.script.scriptNotification(`Removed ${broken.name}, added ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`) this.script.scriptNotification(`Suppression de ${broken.name}, ajout de ${item.name} (${Math.ceil(CONFIG.Dice.randomUniform() * 10)} Rounds)`)
} }

View File

@ -1,7 +1,7 @@
let spells = await game.wfrp4e.utility.findAll("spell", "Loading Spells"); let spells = await game.wfrp4e.utility.findAll("spell", "Chargement des sorts");
spells = spells.filter(s => ["slaanesh"].includes(s.system.lore.value)) spells = spells.filter(s => ["slaanesh"].includes(s.system.lore.value))
let choice = await ItemDialog.create(spells, 1, "Choose Spell"); let choice = await ItemDialog.create(spells, 1, "Choisir un sort");
if (choice[0]) if (choice[0])
{ {
this.item.updateSource({name : this.item.name + ` (${choice[0].name})`}) this.item.updateSource({name : this.item.name + ` (${choice[0].name})`})

View File

@ -1,2 +1,2 @@
if (!args.opposedTest.attackerTest.item?.system?.isMagical) if (!args.opposedTest.attackerTest.item?.system?.isMagical)
args.abort = `<strong>${this.effect.name}</strong>: Ignored` args.abort = `<strong>${this.effect.name}</strong>: Ignoré`

View File

@ -1,5 +1,5 @@
if (["orc", "ork", "goblin", "hobgoblin", "snotling", "greenskin"].includes(args.opposedTest.defender.details.species.value.toLowerCase())) if (["orc", "ork", "goblin", "hobgoblin", "snotling", "greenskin"].includes(args.opposedTest.defender.details.species.value.toLowerCase()))
{ {
args.addImpact = true args.addImpact = true
args.opposedTest.result.other.push("<b>Rune of Goblin Bane</b>: Impact Added") args.opposedTest.result.other.push("<b>Rune de Banissement de Gobelin</b>: Ajout d'Impact")
} }

View File

@ -8,7 +8,7 @@ if (type == "cold")
if (type == "corrosion") if (type == "corrosion")
{ {
let damageItems = await Dialog.confirm({title : this.item.name, content : `<p>Damage all Items carried?</p>`}) let damageItems = await Dialog.confirm({title : this.item.name, content : `<p>Endommager tout les objets portés?</p>`})
if (damageItems) if (damageItems)
{ {
let msg = `` let msg = ``
@ -25,17 +25,17 @@ if (type == "corrosion")
{ {
await item.system.damageItem(1); await item.system.damageItem(1);
} }
msg += `<p><strong>${item.name}</strong> damage by 1</p>` msg += `<p><strong>${item.name}</strong> endommagé de 1</p>`
} }
for(let item of armour) for(let item of armour)
{ {
await item.system.damageItem(1); await item.system.damageItem(1);
msg += `<p><strong>${item.name}</strong> damage by 1</p>` msg += `<p><strong>${item.name}</strong> endommagé de 1</p>`
} }
for(let item of trappings) for(let item of trappings)
{ {
await item.system.damageItem(1); await item.system.damageItem(1);
msg += `<p><strong>${item.name}</strong> damage by 1</p>` msg += `<p><strong>${item.name}</strong> endommagé de 1</p>`
} }
if (msg) if (msg)
{ {

View File

@ -14,5 +14,5 @@ if (tokenImg)
} }
else else
{ {
this.script.scriptNotification("No Token Image path configured. The image path should be set in the first line of this script.", "error"); this.script.scriptNotification("Aucune image de Token configurée. Le chemin du token doit être configuré dans la première ligne de ce script.", "error");
} }

View File

@ -1,4 +1,4 @@
if (args.item.type == "skill" && args.item.name == "Ranged (Bow)") if (args.item.type == "skill" && args.item.name == "Projectiles (Arc)")
{ {
args.item.system.modifier.value += 20; args.item.system.modifier.value += 20;
} }

View File

@ -2,6 +2,6 @@ teeth = await fromUuid("Compendium.wfrp4e-core.items.fBcZhOBn8IpoVqQ1")
teeth = teeth.toObject(); teeth = teeth.toObject();
let roll = await new Roll("1d10").roll(); let roll = await new Roll("1d10").roll();
roll.toMessage(this.script.getChatData({flavor : "Teeth Lost"})) roll.toMessage(this.script.getChatData({flavor : "Dents perdues"}))
teeth.system.location.value = `${roll.total} ${teeth.system.location.value}` teeth.system.location.value = `${roll.total} ${teeth.system.location.value}`
this.actor.createEmbeddedDocuments("Item", [teeth]) this.actor.createEmbeddedDocuments("Item", [teeth])

View File

@ -1,6 +1,6 @@
let poisoned = this.actor.hasCondition("poisoned") let poisoned = this.actor.hasCondition("poisoned")
if (poisoned) if (poisoned)
{ {
this.script.scriptMessage("Immune to Poisoned") this.script.scriptMessage("Immunisé aux Poisons")
poisoned.delete() poisoned.delete()
} }

View File

@ -10,13 +10,13 @@ let characteristics = {
"wp" : 10, "wp" : 10,
"fel" : 15 "fel" : 15
} }
let skills = ["Channelling", "Charm", "Perform (Dancing)"] let skills = ["Focalisation", "Charme", "Représentation (Danser)"]
let skillAdvancements = [0, 6, 3] let skillAdvancements = [0, 6, 3]
let talents = ["Attractive", "Distract", "Mimic"] let talents = ["Attirant", "Distraire", "Imitation"]
let traits = ["Distracting", "Flight (6)", "Spellcaster (Petty)"] let traits = ["Perturbant", "Vol (6)", "Lanceur de Sorts (Magie Mineure)"]
let trappings = [] let trappings = []
let items = []; let items = [];
let spells = ["Marsh Lights", "Sleep"]; let spells = ["Feux follets", "Sommeil"];
let updateObj = this.actor.toObject(); let updateObj = this.actor.toObject();
@ -50,7 +50,7 @@ for (let talent of talents)
} }
else else
{ {
ui.notifications.warn(`Could not find ${talent}`, {permanent : true}) ui.notifications.warn(`Impossible de trouver ${talent}`, {permanent : true})
} }
} }
@ -68,13 +68,13 @@ for (let trait of traits)
} }
catch { } catch { }
if (!traitItem) { if (!traitItem) {
ui.notifications.warn(`Could not find ${trait}`, {permanent : true}) ui.notifications.warn(`Impossible de trouver ${trait}`, {permanent : true})
} }
traitItem = traitItem.toObject() traitItem = traitItem.toObject()
if (Number.isNumeric(traitVal)) if (Number.isNumeric(traitVal))
{ {
traitItem.system.specification.value = traitName.includes('Weapon','Horns','Tail','Tentacles','Bite') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal; traitItem.system.specification.value = traitName.includes('Arme','Cornes','Queue','Tentacules','Morsure') ? traitVal - parseInt(characteristicValues[3]/10) : traitVal;
traitItem.name = (traitItem.name + ` ${traitSpec ? "("+ traitSpec + ")" : ""}`).trim() traitItem.name = (traitItem.name + ` ${traitSpec ? "("+ traitSpec + ")" : ""}`).trim()
} }
else else
@ -112,7 +112,7 @@ for (let spell of spells)
} }
else else
{ {
ui.notifications.warn(`Could not find ${spell}`, {permanent : true}) ui.notifications.warn(`Impossible de trouver ${spell}`, {permanent : true})
} }
} }

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