Sync to v7.2.0
This commit is contained in:
7
reference_scripts/18MeEQ0As3JvER71.js
Normal file
7
reference_scripts/18MeEQ0As3JvER71.js
Normal file
@ -0,0 +1,7 @@
|
||||
let state = !this.effect.disabled;
|
||||
this.effect.update({"disabled": state});
|
||||
|
||||
if (state)
|
||||
return ui.notifications.info("EFFECT.CreatureBackInWater", {localize: true})
|
||||
|
||||
return ui.notifications.info("EFFECT.CreatureOutOfWater", {localize: true});
|
1
reference_scripts/1LDSzXeO5CzXgTOc.js
Normal file
1
reference_scripts/1LDSzXeO5CzXgTOc.js
Normal 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")})`
|
20
reference_scripts/1jQq9v8fXK8zuEBU.js
Normal file
20
reference_scripts/1jQq9v8fXK8zuEBU.js
Normal file
@ -0,0 +1,20 @@
|
||||
let damage = this.effect.sourceActor.hasCondition("fatigued") ? 6 : 10;
|
||||
|
||||
let loc = "body"
|
||||
|
||||
let APatLoc = this.actor.system.status.armour[loc];
|
||||
|
||||
let metalAP = APatLoc.layers.reduce((metal, layer) => metal += ((layer.metal && !layer.magical) ? layer.value : 0), 0)
|
||||
|
||||
let APused = Math.max(0, APatLoc.value - metalAP); // remove metal AP at location;
|
||||
|
||||
damage -= (APused + this.actor.system.characteristics.t.bonus)
|
||||
|
||||
let msg = await this.actor.applyBasicDamage(damage, {suppressMsg : true, damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL});
|
||||
msg += ` (ignored ${metalAP} metal AP on ${game.wfrp4e.config.locations[loc]})`
|
||||
this.script.scriptMessage(msg)
|
||||
|
||||
let test = await this.actor.setupSkill("Endurance", {fields : {difficulty : "difficult"}, appendTitle : ` - ${this.effect.name}`});
|
||||
await test.roll();
|
||||
if (test.failed)
|
||||
this.actor.addCondition("stunned");
|
8
reference_scripts/2QB0LjueuJcIaHaC.js
Normal file
8
reference_scripts/2QB0LjueuJcIaHaC.js
Normal file
@ -0,0 +1,8 @@
|
||||
if (isNaN(parseInt(this.item.system.specification.value)))
|
||||
{
|
||||
let value = await ValueDialog.create("Enter Armour value", this.effect.name);
|
||||
if (value)
|
||||
{
|
||||
this.item.updateSource({"system.specification.value" : value});
|
||||
}
|
||||
}
|
@ -6,13 +6,14 @@ if (!currentCareer) return
|
||||
|
||||
|
||||
let inCurrentCareer = currentCareer.system.skills.includes(skill);
|
||||
if (existingSkill && inCurrentCareer)
|
||||
let craftsmanAdded = this.actor.getFlag("wfrp4e", "craftsmanAdded") || {};
|
||||
if (existingSkill && inCurrentCareer && !craftsmanAdded[existingSkill.name])
|
||||
{
|
||||
existingSkill.system.advances.costModifier = -5;
|
||||
}
|
||||
else
|
||||
{
|
||||
craftsmanAdded[skill] = true;
|
||||
currentCareer.system.skills.push(skill);
|
||||
}
|
||||
|
||||
|
||||
setProperty(this.actor, "flags.wfrp4e.craftsmanAdded", craftsmanAdded)
|
||||
}
|
3
reference_scripts/3CdYFcInQVCIBUiE.js
Normal file
3
reference_scripts/3CdYFcInQVCIBUiE.js
Normal file
@ -0,0 +1,3 @@
|
||||
args.actor.system.details.move.value += 2;
|
||||
args.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.5);
|
||||
args.actor.system.details.price.gc *= 1.1;
|
1
reference_scripts/3nTSOcCmNZpQWK8b.js
Normal file
1
reference_scripts/3nTSOcCmNZpQWK8b.js
Normal file
@ -0,0 +1 @@
|
||||
this.actor.addCondition("blinded", 3);
|
4
reference_scripts/4cumLUlcuJ7m8C6t.js
Normal file
4
reference_scripts/4cumLUlcuJ7m8C6t.js
Normal file
@ -0,0 +1,4 @@
|
||||
let item = args.actor.items.find(i => i.name.includes("Smoothing"));
|
||||
let smoothing = item?.effects.find(e => e.name === "Smoothing");
|
||||
if (smoothing)
|
||||
smoothing.disabled = true;
|
1
reference_scripts/4drWKXjMgasxY7Jy.js
Normal file
1
reference_scripts/4drWKXjMgasxY7Jy.js
Normal file
@ -0,0 +1 @@
|
||||
args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.1);
|
1
reference_scripts/4otpLq2TnDdgzpvc.js
Normal file
1
reference_scripts/4otpLq2TnDdgzpvc.js
Normal file
@ -0,0 +1 @@
|
||||
args.actor.system.details.man -= 3;
|
2
reference_scripts/4uAUUZmLgxBKSmXA.js
Normal file
2
reference_scripts/4uAUUZmLgxBKSmXA.js
Normal file
@ -0,0 +1,2 @@
|
||||
if (args.totalWoundLoss > 0)
|
||||
this.effect.delete();
|
53
reference_scripts/5ScjIdRUOxblHdWS.js
Normal file
53
reference_scripts/5ScjIdRUOxblHdWS.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Carpenter)';
|
||||
const difficulty = 'challenging';
|
||||
const target = 40;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
19
reference_scripts/5sYpJkT2WXIe0gIZ.js
Normal file
19
reference_scripts/5sYpJkT2WXIe0gIZ.js
Normal file
@ -0,0 +1,19 @@
|
||||
const rating = parseInt(this.effect.name.match(/\d+/)?.[0]) || 1;
|
||||
|
||||
let crewList = foundry.utils.duplicate(this.actor.system.passengers.list);
|
||||
let selectedCrew = [];
|
||||
|
||||
while (selectedCrew.length < rating && crewList.length) {
|
||||
selectedCrew.push(crewList.splice(crewList.length * Math.random() | 0, 1)[0]);
|
||||
}
|
||||
|
||||
for (let member of selectedCrew) {
|
||||
let actor = game.actors.get(member.id);
|
||||
actor.applyBasicDamage(9, {
|
||||
damageType: game.wfrp4e.config.DAMAGE_TYPE.NORMAL,
|
||||
minimumOne: true,
|
||||
loc: "roll",
|
||||
suppressMsg: false,
|
||||
hideDSN: false
|
||||
});
|
||||
}
|
8
reference_scripts/6Ws3ieQ7pG5poUyT.js
Normal file
8
reference_scripts/6Ws3ieQ7pG5poUyT.js
Normal file
@ -0,0 +1,8 @@
|
||||
if (isNaN(parseInt(this.item.system.specification.value)))
|
||||
{
|
||||
let value = await ValueDialog.create("Enter Spellcasting Lore", this.effect.name, "", Object.values(game.wfrp4e.config.magicLores));
|
||||
if (value)
|
||||
{
|
||||
this.item.updateSource({"system.specification.value" : value});
|
||||
}
|
||||
}
|
5
reference_scripts/6gRixT3zIOAberJb.js
Normal file
5
reference_scripts/6gRixT3zIOAberJb.js
Normal file
@ -0,0 +1,5 @@
|
||||
const disease = await fromUuid("Compendium.wfrp4e-soc.items.Item.8Q9JYtR1y3B5J6UH");
|
||||
const data = disease.toObject();
|
||||
data.system.incubation.value = 0;
|
||||
data.system.duration.active = true;
|
||||
this.actor.createEmbeddedDocuments("Item", [data], {fromEffect: this.effect.id});
|
1
reference_scripts/6jp8slPU33oBQe1V.js
Normal file
1
reference_scripts/6jp8slPU33oBQe1V.js
Normal file
@ -0,0 +1 @@
|
||||
return args.options.crewTest?.system.handling !== true;
|
2
reference_scripts/6oSs8qKFNFz2lSmh.js
Normal file
2
reference_scripts/6oSs8qKFNFz2lSmh.js
Normal file
@ -0,0 +1,2 @@
|
||||
if (args.actorsystem.details.move.sail.value > 0)
|
||||
args.actor.system.details.move.sail.value = 0;
|
31
reference_scripts/6qJP0hpShEM43ohx.js
Normal file
31
reference_scripts/6qJP0hpShEM43ohx.js
Normal file
@ -0,0 +1,31 @@
|
||||
const actor = args.actor;
|
||||
|
||||
if (actor.itemTypes.skill.find(s => s.name === "Lore (Oceans)")) {
|
||||
const loreTest = await actor.setupSkill('Lore (Oceans)', {
|
||||
appendTitle: ` – ${this.effect.name}`,
|
||||
skipTargets: true,
|
||||
fields: {difficulty: 'hard'},
|
||||
characteristic: 'int',
|
||||
});
|
||||
await loreTest.roll();
|
||||
|
||||
if (loreTest.succeeded) {
|
||||
loreTest.result.other.push(`<b>${actor.name}</b> recognizes lure of the Leviathan.`);
|
||||
loreTest.renderRollCard();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
let test = await actor.setupSkill('Cool', {
|
||||
appendTitle: ` – ${this.effect.name}`,
|
||||
skipTargets: true,
|
||||
fields: {difficulty: 'easy'},
|
||||
characteristic: 'wp',
|
||||
});
|
||||
await test.roll();
|
||||
|
||||
if (!test.succeeded) {
|
||||
test.result.other.push(`<b>${actor.name}</b> became @Condition[Stunned] by the sight.`);
|
||||
test.renderRollCard();
|
||||
actor.addCondition("stunned");
|
||||
}
|
1
reference_scripts/6ubojp9zwbfJnosT.js
Normal file
1
reference_scripts/6ubojp9zwbfJnosT.js
Normal file
@ -0,0 +1 @@
|
||||
args.actor.system.details.move.value += 1;
|
32
reference_scripts/7w7QA7GBhzZ98OS0.js
Normal file
32
reference_scripts/7w7QA7GBhzZ98OS0.js
Normal file
@ -0,0 +1,32 @@
|
||||
const sin = this.effect.sourceActor.system.status.sin.value;
|
||||
const result = await WFRP_Tables.rollTable("manann-mood-made-meaningless", sin);
|
||||
let match = result.text.match(/b>([^<]+)/i);
|
||||
let key = match[1];
|
||||
let roll = new Roll("5d10");
|
||||
let value = undefined;
|
||||
|
||||
await this.script.scriptMessage(result.text, {flavor: result.title});
|
||||
|
||||
switch (key) {
|
||||
case 'Stromfels Triumphant!':
|
||||
value = 0;
|
||||
break;
|
||||
case 'Stromfels Ascends!':
|
||||
await roll.evaluate();
|
||||
if (this.actor.system.status.mood.value > 0)
|
||||
value = -roll.total;
|
||||
else if (this.actor.system.status.mood.value < 0)
|
||||
value = roll.total;
|
||||
break;
|
||||
case 'No effect.':
|
||||
break;
|
||||
case 'Manann Provoked!':
|
||||
await roll.evaluate();
|
||||
value = -roll.total;
|
||||
break;
|
||||
}
|
||||
|
||||
if (roll._evaluated)
|
||||
await roll.toMessage();
|
||||
|
||||
await this.effect.setFlag("wfrp4e-soc", "m4result", {result: key, value});
|
6
reference_scripts/86ivOsBQAuu0UmFg.js
Normal file
6
reference_scripts/86ivOsBQAuu0UmFg.js
Normal file
@ -0,0 +1,6 @@
|
||||
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields : {difficulty : "hard"}, appendTitle : ` - ${this.effect.name}`, skipTargets: true});
|
||||
await test.roll();
|
||||
if (test.failed)
|
||||
{
|
||||
this.actor.addCondition("poisoned");
|
||||
}
|
53
reference_scripts/8xqYrBIf1Zhlwizg.js
Normal file
53
reference_scripts/8xqYrBIf1Zhlwizg.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished raisint <em>the anchor</em>.</p>`;
|
||||
const test = 'Strength';
|
||||
const difficulty = 'vhard';
|
||||
const target = 20;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
3
reference_scripts/9HWEDsnNxSykqbF5.js
Normal file
3
reference_scripts/9HWEDsnNxSykqbF5.js
Normal file
@ -0,0 +1,3 @@
|
||||
args.actor.system.details.move.value += 3;
|
||||
args.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.25);
|
||||
args.actor.system.details.price.gc *= 1.1;
|
2
reference_scripts/AFiB20FaOBmBv2Kz.js
Normal file
2
reference_scripts/AFiB20FaOBmBv2Kz.js
Normal file
@ -0,0 +1,2 @@
|
||||
if (args.actorsystem.details.move.sail.value > 0)
|
||||
args.actor.system.details.move.sail.value = Math.floor(args.actor.system.details.move.sail.value * .5);
|
1
reference_scripts/AaPPmnv7AtxsRVUs.js
Normal file
1
reference_scripts/AaPPmnv7AtxsRVUs.js
Normal file
@ -0,0 +1 @@
|
||||
args.actor.details.move.value = 1;
|
28
reference_scripts/BVNKF9omCppWPLys.js
Normal file
28
reference_scripts/BVNKF9omCppWPLys.js
Normal file
@ -0,0 +1,28 @@
|
||||
let actor = game.user.character ?? canvas.tokens.controlled[0]?.actor;
|
||||
if (!actor || !(actor.system instanceof StandardActorModel))
|
||||
return ui.notifications.warn("You must control an Actor capable of performing a Strength Test");
|
||||
|
||||
let test = await actor.setupCharacteristic("s", {
|
||||
skipTargets: true,
|
||||
appendTitle: " - Bailing Out",
|
||||
fields: {
|
||||
difficulty: "challenging"
|
||||
},
|
||||
context: {
|
||||
success: "Reduced the Holed rating!"
|
||||
}
|
||||
});
|
||||
|
||||
await test.roll();
|
||||
if (test.succeeded) {
|
||||
let SL = parseInt(test.result.SL);
|
||||
let name = this.effect.name.replace(/\d+/, rating => parseInt(rating) - SL);
|
||||
await this.effect.update({name});
|
||||
}
|
||||
|
||||
let rating = parseInt(this.effect.name.match(/\d+/)?.[0]);
|
||||
if (rating <= 1) {
|
||||
const scriptData = this.effect.flags.wfrp4e.scriptData;
|
||||
scriptData[2].trigger = '';
|
||||
await this.effect.update({disabled: true, "flags.wfrp4e.scriptData": scriptData});
|
||||
}
|
11
reference_scripts/BZETMpgrI5k1ol5b.js
Normal file
11
reference_scripts/BZETMpgrI5k1ol5b.js
Normal file
@ -0,0 +1,11 @@
|
||||
// If the creature currently has a Surprised, Unconscious, or Entangled Condition, it does not gain this Advantage.
|
||||
const surprised = this.actor.hasCondition("surprised")
|
||||
const unconscious = this.actor.hasCondition("unconscious")
|
||||
const entangled = this.actor.hasCondition("entangled")
|
||||
if (entangled || unconscious || surprised) return
|
||||
|
||||
// If, at the beginning of its turn, this creature does not have at least Rating Advantage points, its Advantage pool immediately increases to Rating.
|
||||
const grimRating = parseInt(this.item.specification.value) || 1
|
||||
if (grimRating > this.actor.status.advantage.value) {
|
||||
this.actor.setAdvantage(grimRating)
|
||||
}
|
3
reference_scripts/C69xngEMghfwUx13.js
Normal file
3
reference_scripts/C69xngEMghfwUx13.js
Normal file
@ -0,0 +1,3 @@
|
||||
let easier = ['challenging', 'average', 'easy', 'veasy'];
|
||||
if (easier.includes(args.fields.difficulty))
|
||||
args.fields.difficulty = "difficult";
|
2
reference_scripts/CD4RnDpXZ9hnqVPQ.js
Normal file
2
reference_scripts/CD4RnDpXZ9hnqVPQ.js
Normal file
@ -0,0 +1,2 @@
|
||||
if (!this.actor.hasCondition("entangled"))
|
||||
this.actor.addCondition("entangled");
|
10
reference_scripts/CS6O7UUjQcUJoOUP.js
Normal file
10
reference_scripts/CS6O7UUjQcUJoOUP.js
Normal file
@ -0,0 +1,10 @@
|
||||
if (args.test.failed)
|
||||
{
|
||||
let SL = Number(args.test.result.SL)
|
||||
if (SL <= -2 && SL > -4)
|
||||
this.actor.addCondition("stunned")
|
||||
else if (SL <= -4 && SL > -6)
|
||||
this.script.scriptMessage(this.actor.prototypeToken.name + " must make a <b>Willpower</b> Test or fall @Condition[Prone].")
|
||||
else if (SL <= -6)
|
||||
this.actor.addCondition("unconscious")
|
||||
}
|
3
reference_scripts/Dzi2CKpYapRGwNVr.js
Normal file
3
reference_scripts/Dzi2CKpYapRGwNVr.js
Normal file
@ -0,0 +1,3 @@
|
||||
if (args.actor.system instanceof StandardActorModel) {
|
||||
args.actor.addCondition("unconscious");
|
||||
}
|
6
reference_scripts/E3om295BMQojnM2F.js
Normal file
6
reference_scripts/E3om295BMQojnM2F.js
Normal file
@ -0,0 +1,6 @@
|
||||
let fatigued = this.actor.hasCondition("fatigued")
|
||||
if (fatigued)
|
||||
{
|
||||
fatigued.delete();
|
||||
this.script.scriptNotification("Removed Fatigued")
|
||||
}
|
1
reference_scripts/EBNrA6FNX4d05EUx.js
Normal file
1
reference_scripts/EBNrA6FNX4d05EUx.js
Normal file
@ -0,0 +1 @@
|
||||
return !args.options.crewTest;
|
31
reference_scripts/EC8cZmqrE095cDc2.js
Normal file
31
reference_scripts/EC8cZmqrE095cDc2.js
Normal file
@ -0,0 +1,31 @@
|
||||
const actor = args.actor;
|
||||
|
||||
if (actor.itemTypes.skill.find(s => s.name === "Lore (Riverways)")) {
|
||||
const loreTest = await actor.setupSkill('Lore (Riverways)', {
|
||||
appendTitle: ` – ${this.effect.name}`,
|
||||
skipTargets: true,
|
||||
fields: {difficulty: 'hard'},
|
||||
characteristic: 'int',
|
||||
});
|
||||
await loreTest.roll();
|
||||
|
||||
if (loreTest.succeeded) {
|
||||
loreTest.result.other.push(`<b>${actor.name}</b> recognizes lures of Lurkerfish.`);
|
||||
loreTest.renderRollCard();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
let test = await actor.setupSkill('Cool', {
|
||||
appendTitle: ` – ${this.effect.name}`,
|
||||
skipTargets: true,
|
||||
fields: {difficulty: 'easy'},
|
||||
characteristic: 'wp',
|
||||
});
|
||||
await test.roll();
|
||||
|
||||
if (!test.succeeded) {
|
||||
test.result.other.push(`<b>${actor.name}</b> became beguiled by the sight and unable to perform any action except moving towards the light.`);
|
||||
test.renderRollCard();
|
||||
actor.addCondition("unconscious");
|
||||
}
|
1
reference_scripts/EDAMEOzdBfkoKHxP.js
Normal file
1
reference_scripts/EDAMEOzdBfkoKHxP.js
Normal file
@ -0,0 +1 @@
|
||||
return args.skill?.name !== game.i18n.localize("NAME.Navigation");
|
8
reference_scripts/F2u4L4o0r1LTWeWK.js
Normal file
8
reference_scripts/F2u4L4o0r1LTWeWK.js
Normal file
@ -0,0 +1,8 @@
|
||||
if (isNaN(parseInt(this.item.system.specification.value)))
|
||||
{
|
||||
let value = await ValueDialog.create("Enter Terror value", this.effect.name);
|
||||
if (value)
|
||||
{
|
||||
this.item.updateSource({"system.specification.value" : value});
|
||||
}
|
||||
}
|
18
reference_scripts/FPYNcxm21678boLT.js
Normal file
18
reference_scripts/FPYNcxm21678boLT.js
Normal file
@ -0,0 +1,18 @@
|
||||
if (args.attackerTest.data.preData.rollClass !== "CharacteristicTest") return;
|
||||
if (args.attackerTest.data.preData.characteristic !== "s") return;
|
||||
|
||||
const SL = args.opposedTest.data.opposeResult.differenceSL;
|
||||
|
||||
const targetId = this.effect.getFlag("wfrp4e", "target");
|
||||
const target = canvas.scene.tokens.get(targetId);
|
||||
|
||||
if (SL > 4) {
|
||||
args.opposedTest.data.opposeResult.other.push(`<b>${args.defenderTest.actor.name}</b> was forced to let go of <b>${target.name}</b>.`);
|
||||
return await this.effect.delete();
|
||||
}
|
||||
|
||||
if (SL > 0) {
|
||||
args.opposedTest.data.opposeResult.other.push(`<b>${args.defenderTest.actor.name}</b> was prevented from squeezing <b>${target.name}</b> for one turn.`);
|
||||
let turns = this.effect.getFlag("wfrp4e", "turns");
|
||||
this.effect.setFlag("wfrp4e", "turns", turns + 1);
|
||||
}
|
53
reference_scripts/FtZf56VI6Qsspu0D.js
Normal file
53
reference_scripts/FtZf56VI6Qsspu0D.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Carpenter)';
|
||||
const difficulty = 'difficult';
|
||||
const target = 20;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
1
reference_scripts/Fwk8WA8NfRivLFWJ.js
Normal file
1
reference_scripts/Fwk8WA8NfRivLFWJ.js
Normal file
@ -0,0 +1 @@
|
||||
return args.skill?.name === "Entertain (Singing)";
|
53
reference_scripts/GsAyB5xnK3ASeoah.js
Normal file
53
reference_scripts/GsAyB5xnK3ASeoah.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Carpentry)';
|
||||
const difficulty = 'easy';
|
||||
const target = 20;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
53
reference_scripts/H85k4L3yICm7cfIk.js
Normal file
53
reference_scripts/H85k4L3yICm7cfIk.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Sail';
|
||||
const difficulty = 'easy';
|
||||
const target = 10;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
11
reference_scripts/HUKzssLxeQo1wbx9.js
Normal file
11
reference_scripts/HUKzssLxeQo1wbx9.js
Normal file
@ -0,0 +1,11 @@
|
||||
|
||||
let test = await this.actor.setupSkill(game.i18n.localize("NAME.Endurance"), {fields: {difficulty : "average"}, appendTitle : " - Wounded"})
|
||||
await test.roll();
|
||||
if (test.failed)
|
||||
{
|
||||
fromUuid("Compendium.wfrp4e-core.items.kKccDTGzWzSXCBOb").then(disease => {
|
||||
this.actor.createEmbeddedDocuments("Item", [disease.toObject()])
|
||||
this.script.scriptNotification("Gained " + disease.name)
|
||||
})
|
||||
}
|
||||
|
8
reference_scripts/HYrl5aNMm8BAdqH7.js
Normal file
8
reference_scripts/HYrl5aNMm8BAdqH7.js
Normal file
@ -0,0 +1,8 @@
|
||||
|
||||
let modifier = 0
|
||||
if (this.effect.name.includes("Moderate"))
|
||||
modifier = -20
|
||||
else
|
||||
modifier = -10
|
||||
args.fields.modifier += modifier
|
||||
|
@ -6,13 +6,16 @@ if (!currentCareer) return
|
||||
|
||||
|
||||
let inCurrentCareer = currentCareer.system.skills.includes(skill);
|
||||
if (existingSkill && inCurrentCareer)
|
||||
let perfectPitchAdded = this.actor.getFlag("wfrp4e", "perfectPitchAdded") || {};
|
||||
if (existingSkill && inCurrentCareer && !perfectPitchAdded[existingSkill.name])
|
||||
{
|
||||
existingSkill.system.advances.costModifier = -5;
|
||||
}
|
||||
else
|
||||
{
|
||||
perfectPitchAdded[skill] = true;
|
||||
currentCareer.system.skills.push(skill);
|
||||
setProperty(this.actor, "flags.wfrp4e.perfectPitchAdded", perfectPitchAdded)
|
||||
}
|
||||
|
||||
|
||||
|
2
reference_scripts/IOroJBqTsWvoakJN.js
Normal file
2
reference_scripts/IOroJBqTsWvoakJN.js
Normal file
@ -0,0 +1,2 @@
|
||||
if (args.actorsystem.details.move.oars.value > 0)
|
||||
args.actor.system.details.move.oars.value -= 2;
|
7
reference_scripts/IrkWq7IiFS65bTvC.js
Normal file
7
reference_scripts/IrkWq7IiFS65bTvC.js
Normal file
@ -0,0 +1,7 @@
|
||||
if (this.actor.flags.holed.half !== true) return;
|
||||
if (this.actor.flags.holed.reminded === true) return;
|
||||
|
||||
const speaker = ChatMessage.getSpeaker({actor: this.actor});
|
||||
this.script.scriptMessage(`<p><b>${speaker.alias}</b> sits heavily in the water. Unless the cargo is waterproof, it loses [[d10]]% of its value.</p>`);
|
||||
|
||||
this.actor.flags.holed.reminded = true;
|
19
reference_scripts/IzoOmDywGLqLNljN.js
Normal file
19
reference_scripts/IzoOmDywGLqLNljN.js
Normal file
@ -0,0 +1,19 @@
|
||||
let skill = `Language (Magick)`
|
||||
let currentCareer = this.actor.system.currentCareer;
|
||||
let existingSkill = this.actor.itemTypes.skill.find(i => i.name == skill);
|
||||
|
||||
if (!currentCareer) return
|
||||
|
||||
|
||||
let inCurrentCareer = currentCareer.system.skills.includes(skill);
|
||||
let witchAdded = actor.getFlag("wfrp4e", "witchAdded") || {};
|
||||
if (existingSkill && inCurrentCareer && !witchAdded[existingSkill.name])
|
||||
{
|
||||
existingSkill.system.advances.costModifier = -5;
|
||||
}
|
||||
else
|
||||
{
|
||||
witchAdded[skill] = true;
|
||||
currentCareer.system.skills.push(skill);
|
||||
setProperty(this.actor, "flags.wfrp4e.witchAdded", witchAdded)
|
||||
}
|
1
reference_scripts/JBoKPBr27C3PMoSD.js
Normal file
1
reference_scripts/JBoKPBr27C3PMoSD.js
Normal file
@ -0,0 +1 @@
|
||||
return args.skill?.name === game.i18n.localize("NAME.Navigation");
|
18
reference_scripts/JXBUE0XuJOJNG7zE.js
Normal file
18
reference_scripts/JXBUE0XuJOJNG7zE.js
Normal file
@ -0,0 +1,18 @@
|
||||
if (args.totalWoundLoss <= 7) return;
|
||||
|
||||
let options = {
|
||||
appendTitle : " – " + this.effect.name,
|
||||
skipTargets: true,
|
||||
fields: {difficulty: 'average'},
|
||||
characteristic: 'wp',
|
||||
}
|
||||
|
||||
let test = await args.actor.setupSkill('Cool', options);
|
||||
await test.roll();
|
||||
|
||||
if (!test.succeeded) {
|
||||
const targetId = this.effect.getFlag("wfrp4e", "target");
|
||||
const target = canvas.scene.tokens.get(targetId);
|
||||
await this.effect.delete();
|
||||
args.extraMessages.push(`<b>${args.actor.name}</b> lost ${args.totalWoundLoss} Wounds to an attack, which caused it to let go of <b>${target.name}</b>.`);
|
||||
}
|
53
reference_scripts/JhbZWZhOJ23yOBmG.js
Normal file
53
reference_scripts/JhbZWZhOJ23yOBmG.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Carpentry)';
|
||||
const difficulty = 'hard';
|
||||
const target = 30;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
9
reference_scripts/LjfScVGBf0Egr70E.js
Normal file
9
reference_scripts/LjfScVGBf0Egr70E.js
Normal file
@ -0,0 +1,9 @@
|
||||
let animalCare = this.actor.itemTypes.skill.find(s => s.name === game.i18n.localize("NAME.AnimalCare"));
|
||||
let animalTrainings = this.actor.itemTypes.skill.filter(s => s.name.includes(game.i18n.localize("NAME.AnimalTraining")));
|
||||
|
||||
if (animalCare)
|
||||
animalCare.system.modifier.value += 20;
|
||||
|
||||
for (let training of animalTrainings) {
|
||||
training.system.modifier.value += 30;
|
||||
}
|
4
reference_scripts/MIhYSuJ6MI9B65UT.js
Normal file
4
reference_scripts/MIhYSuJ6MI9B65UT.js
Normal file
@ -0,0 +1,4 @@
|
||||
let specification = Number(this.item.specification.value) || 1;
|
||||
args.actor.system.status.wounds.max += Math.floor(args.actor.system.status.wounds.max * 0.3 * specification);
|
||||
args.actor.system.status.carries.max -= Math.floor(args.actor.system.status.carries.max * 0.1 * specification);
|
||||
args.actor.system.details.price.gc += Math.floor(args.actor.system.details.price.gc * 0.2 * specification);
|
52
reference_scripts/MMv2B8TH7jxNCtdl.js
Normal file
52
reference_scripts/MMv2B8TH7jxNCtdl.js
Normal file
@ -0,0 +1,52 @@
|
||||
let actor = this.actor;
|
||||
let effect = this.effect;
|
||||
let bleedingAmt;
|
||||
let bleedingRoll;
|
||||
let msg = ""
|
||||
|
||||
let damage = effect.conditionValue;
|
||||
let scriptArgs = {msg, damage};
|
||||
await Promise.all(actor.runScripts("preApplyCondition", {effect, data : scriptArgs}))
|
||||
msg = scriptArgs.msg;
|
||||
damage = scriptArgs.damage;
|
||||
msg += await actor.applyBasicDamage(damage, {damageType : game.wfrp4e.config.DAMAGE_TYPE.IGNORE_ALL, minimumOne : false, suppressMsg : true})
|
||||
|
||||
if (actor.status.wounds.value == 0 && !actor.hasCondition("unconscious"))
|
||||
{
|
||||
await actor.addCondition("unconscious")
|
||||
msg += "<br>" + game.i18n.format("BleedUnc", {name: actor.prototypeToken.name })
|
||||
}
|
||||
|
||||
if (actor.hasCondition("unconscious"))
|
||||
{
|
||||
bleedingAmt = effect.conditionValue;
|
||||
bleedingRoll = (await new Roll("1d100").roll()).total;
|
||||
if (bleedingRoll <= bleedingAmt * 10)
|
||||
{
|
||||
msg += "<br>" + game.i18n.format("BleedFail", {name: actor.prototypeToken.name}) + " (" + game.i18n.localize("Rolled") + " " + bleedingRoll + ")";
|
||||
await actor.addCondition("dead")
|
||||
}
|
||||
else if (bleedingRoll % 11 == 0)
|
||||
{
|
||||
msg += "<br>" + game.i18n.format("BleedCrit", { name: actor.prototypeToken.name } ) + " (" + game.i18n.localize("Rolled") + bleedingRoll + ")"
|
||||
await actor.removeCondition("bleeding")
|
||||
}
|
||||
else
|
||||
{
|
||||
msg += "<br>" + game.i18n.localize("BleedRoll") + ": " + bleedingRoll;
|
||||
}
|
||||
}
|
||||
|
||||
await Promise.all(actor.runScripts("applyCondition", {effect, data : {bleedingRoll}}))
|
||||
if (args.suppressMessage)
|
||||
{
|
||||
let messageData = game.wfrp4e.utility.chatDataSetup(msg);
|
||||
messageData.speaker = {alias: this.effect.name}
|
||||
messageData.flavor = this.effect.name;
|
||||
return messageData
|
||||
}
|
||||
else
|
||||
{
|
||||
return this.script.scriptMessage(msg)
|
||||
}
|
||||
|
1
reference_scripts/MMx8f5uJ15XOgJGg.js
Normal file
1
reference_scripts/MMx8f5uJ15XOgJGg.js
Normal file
@ -0,0 +1 @@
|
||||
return args.skill?.name !== game.i18n.localize("NAME.Row") && args.skill?.name !== game.i18n.localize("NAME.Swim") && !args.skill?.name.includes(game.i18n.localize("NAME.Sail"));
|
5
reference_scripts/Me1wS5XdqUEy7OGt.js
Normal file
5
reference_scripts/Me1wS5XdqUEy7OGt.js
Normal file
@ -0,0 +1,5 @@
|
||||
let loc = (await game.wfrp4e.tables.rollTable("hitloc")).result;
|
||||
let critTable = `crit${this.generalizeTable(loc)`;
|
||||
let crit = (await game.wfrp4e.tables.rollTable(critTable)).result;
|
||||
|
||||
this.script.scriptMessage(`{this.actor.name} suffers a ${crit} (location : ${loc}). Do not apply bleeding or any additonnal wounds.`);
|
8
reference_scripts/NI3ZzIAlpQfVSjvf.js
Normal file
8
reference_scripts/NI3ZzIAlpQfVSjvf.js
Normal file
@ -0,0 +1,8 @@
|
||||
if (isNaN(parseInt(this.item.system.specification.value)))
|
||||
{
|
||||
let value = await ValueDialog.create("Enter Fear value", this.item.name);
|
||||
if (value)
|
||||
{
|
||||
this.item.updateSource({"system.specification.value" : value});
|
||||
}
|
||||
}
|
13
reference_scripts/O45vpR4jDbQQnmvJ.js
Normal file
13
reference_scripts/O45vpR4jDbQQnmvJ.js
Normal file
@ -0,0 +1,13 @@
|
||||
let items = [];
|
||||
|
||||
let etiquette = (await fromUuid("Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP")).toObject();
|
||||
etiquette.name += " (Followers of Khorne)";
|
||||
|
||||
items.push(etiquette);
|
||||
|
||||
let animosity = (await fromUuid("Compendium.wfrp4e-core.items.Item.Q2MCUrG2HppMcvN0")).toObject();
|
||||
animosity.name = animosity.name.replace("(Target)", "(Followers of Slaanesh)");
|
||||
|
||||
items.push(animosity);
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", items, {fromEffect : this.effect.id});
|
53
reference_scripts/OsLXutfXyQCAkhAf.js
Normal file
53
reference_scripts/OsLXutfXyQCAkhAf.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Sail';
|
||||
const difficulty = 'average';
|
||||
const target = 30;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
53
reference_scripts/Pn5fekTbkwlr61XU.js
Normal file
53
reference_scripts/Pn5fekTbkwlr61XU.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Engineer)';
|
||||
const difficulty = 'easy';
|
||||
const target = 10;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
10
reference_scripts/PsO7aTdELJt35eHP.js
Normal file
10
reference_scripts/PsO7aTdELJt35eHP.js
Normal file
@ -0,0 +1,10 @@
|
||||
let morale = await new Roll("-1d10").roll();
|
||||
let mood = await new Roll("-2d10").roll();
|
||||
|
||||
morale.toMessage(this.script.getChatData({flavor : "Morale"}));
|
||||
mood.toMessage(this.script.getChatData({flavor : "Manann's Mood"}));
|
||||
|
||||
await this.actor.system.status.morale.addEntry("Albatross Died", morale.total)
|
||||
await this.actor.system.status.mood.addEntry("Albatross Died", mood.total);
|
||||
|
||||
this.effect.delete();
|
1
reference_scripts/Q5gh5Y9dCdclcwsD.js
Normal file
1
reference_scripts/Q5gh5Y9dCdclcwsD.js
Normal 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")})`
|
53
reference_scripts/Q7eULXQ9AfDRmUGO.js
Normal file
53
reference_scripts/Q7eULXQ9AfDRmUGO.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Carpenter)';
|
||||
const difficulty = 'difficult';
|
||||
const target = 40;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
4
reference_scripts/QHQ7XmFOjT9wXgw1.js
Normal file
4
reference_scripts/QHQ7XmFOjT9wXgw1.js
Normal file
@ -0,0 +1,4 @@
|
||||
if (args.actorsystem.details.move.oars.value > 0)
|
||||
args.actor.system.details.move.oars.value -= 1;
|
||||
|
||||
args.actor.system.details.man -= 2;
|
3
reference_scripts/QNxmImpLTou6WdMQ.js
Normal file
3
reference_scripts/QNxmImpLTou6WdMQ.js
Normal file
@ -0,0 +1,3 @@
|
||||
let test = args.test
|
||||
if (test.result.minormis || test.result.majormis || test.result.catastrophicmis)
|
||||
test.result.other.push("Can make a <b>Difficult (-10) Willpower</b> Test to prevent the Miscast")
|
18
reference_scripts/QfTBRGXVfwQSghmd.js
Normal file
18
reference_scripts/QfTBRGXVfwQSghmd.js
Normal file
@ -0,0 +1,18 @@
|
||||
fromUuid(this.effect.origin).then(caster => {
|
||||
if (caster) {
|
||||
if (actor.items.find(it => it.name == game.i18n.localize("Bestial"))) {
|
||||
let healed = caster.characteristics.wp.bonus
|
||||
let wounds = duplicate(args.actor.status.wounds)
|
||||
wounds.value += healed
|
||||
|
||||
if (wounds.value > wounds.max)
|
||||
wounds.value = wounds.max
|
||||
|
||||
args.actor.update({ "system.status.wounds": wounds })
|
||||
ChatMessage.create({ content: `${this.actor.prototypeToken.name} regains ${healed} Wounds`, speaker: { alias: this.effect.name } })
|
||||
} else {
|
||||
ui.notifications.warn("Target actor has no Bestial trait")
|
||||
}
|
||||
}
|
||||
})
|
||||
|
53
reference_scripts/R8FBHZaaARA3z9pB.js
Normal file
53
reference_scripts/R8FBHZaaARA3z9pB.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Carpenter)';
|
||||
const difficulty = 'hard';
|
||||
const target = 40;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
53
reference_scripts/R8ecKGRzOr4ThvVa.js
Normal file
53
reference_scripts/R8ecKGRzOr4ThvVa.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Maintenance Crew Test';
|
||||
const difficulty = 'hard';
|
||||
const target = 80;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
53
reference_scripts/RPqgRUkiLY5thVbC.js
Normal file
53
reference_scripts/RPqgRUkiLY5thVbC.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Strength';
|
||||
const difficulty = 'average';
|
||||
const target = 10;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
7
reference_scripts/RlhOAKfN0ghrrooR.js
Normal file
7
reference_scripts/RlhOAKfN0ghrrooR.js
Normal file
@ -0,0 +1,7 @@
|
||||
let holed = this.actor.appliedEffects.filter(e => e.name.includes("Holed"));
|
||||
|
||||
for (let effect of holed) {
|
||||
await effect.update({name: effect.name.replace(/\d+/, rating => parseInt(rating) * 2)});
|
||||
}
|
||||
|
||||
this.script.scriptNotification(`Holed Ratings of ${this.actor.name} have been doubled.`);
|
1
reference_scripts/Rnpw6UQdJifLeuna.js
Normal file
1
reference_scripts/Rnpw6UQdJifLeuna.js
Normal file
@ -0,0 +1 @@
|
||||
this.effect.updateSource({"flags.wfrp4e.applicationData.type" : "crew"})
|
1
reference_scripts/RsWXCcYHONf3ANlD.js
Normal file
1
reference_scripts/RsWXCcYHONf3ANlD.js
Normal file
@ -0,0 +1 @@
|
||||
this.actor.addCondition("stunned", 1);
|
23
reference_scripts/RwMw848y13Jq2L4f.js
Normal file
23
reference_scripts/RwMw848y13Jq2L4f.js
Normal file
@ -0,0 +1,23 @@
|
||||
let test = await this.actor.setupSkill("Endurance", {fields : {difficulty : "difficult"}, appendTitle : ` - ${this.effect.name}`});
|
||||
await test.roll();
|
||||
if (test.failed)
|
||||
{
|
||||
await this.actor.addCondition("blinded");
|
||||
}
|
||||
|
||||
let msg = ``
|
||||
let armour = args.actor.itemTypes.armour.filter(i => i.system.isMetal && i.system.isEquipped);
|
||||
for(let item of armour)
|
||||
{
|
||||
for(let key in item.system.AP)
|
||||
{
|
||||
let AP = item.system.AP[key]
|
||||
let damage = Math.floor(AP / 2);
|
||||
await item.system.damageItem(damage, [key]);
|
||||
}
|
||||
msg += `<p><strong>${item.name}</strong> AP reduced by half</p>`
|
||||
}
|
||||
if (msg)
|
||||
{
|
||||
this.script.scriptMessage(msg, {speaker : {alias : args.actor.name}});
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
if (args.test.result.hitloc.result == "head")
|
||||
if (args.test.result.hitloc.result == "head" && args.test.result.critical)
|
||||
{
|
||||
args.test.result.critModifier = args.test.result.critModifier ? args.test.result.critModifier + 40 : 40
|
||||
|
||||
|
3
reference_scripts/SefcrhXsdYGFcCW6.js
Normal file
3
reference_scripts/SefcrhXsdYGFcCW6.js
Normal file
@ -0,0 +1,3 @@
|
||||
args.actor.system.details.move.value -= 3;
|
||||
args.actor.system.details.man -= 2;
|
||||
args.actor.system.status.carries.max *= 2;
|
1
reference_scripts/Ssn21dxoMQiqD1y4.js
Normal file
1
reference_scripts/Ssn21dxoMQiqD1y4.js
Normal file
@ -0,0 +1 @@
|
||||
return args.type == "cast" && args.item.lore.value == "fire"
|
1
reference_scripts/T3RfSt3VMEat3iDD.js
Normal file
1
reference_scripts/T3RfSt3VMEat3iDD.js
Normal file
@ -0,0 +1 @@
|
||||
return args.skill?.name !== game.i18n.localize("NAME.Perception");
|
7
reference_scripts/UDPsaymtZf39UsMk.js
Normal file
7
reference_scripts/UDPsaymtZf39UsMk.js
Normal file
@ -0,0 +1,7 @@
|
||||
|
||||
let fatigued = this.actor.hasCondition("fatigued")
|
||||
if (!fatigued)
|
||||
{
|
||||
this.actor.addCondition("fatigued")
|
||||
ui.notifications.notify("Fatigued added to " + this.actor.name + " which cannot be removed until the Malaise symptom is gone.")
|
||||
}
|
2
reference_scripts/UXdlnmwVgjc1QpF2.js
Normal file
2
reference_scripts/UXdlnmwVgjc1QpF2.js
Normal file
@ -0,0 +1,2 @@
|
||||
args.actor.system.details.move.value += 1;
|
||||
args.actor.system.status.carries.max = Math.floor(args.actor.system.status.carries.max * 0.75);
|
53
reference_scripts/UlRSaZG4ZUU6fMND.js
Normal file
53
reference_scripts/UlRSaZG4ZUU6fMND.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Carpenter)';
|
||||
const difficulty = 'challenging';
|
||||
const target = 10;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
2
reference_scripts/UtqUthabeQ4rHDLQ.js
Normal file
2
reference_scripts/UtqUthabeQ4rHDLQ.js
Normal file
@ -0,0 +1,2 @@
|
||||
let item = await fromUuid("Compendium.wfrp4e-core.items.Item.tNWrJUOArwfWXsPw");
|
||||
this.actor.createEmbeddedDocuments("Item", [item], {fromEffect: this.effect.id});
|
5
reference_scripts/Uvk1X7sEhvv77YkD.js
Normal file
5
reference_scripts/Uvk1X7sEhvv77YkD.js
Normal file
@ -0,0 +1,5 @@
|
||||
if (!args.flags.distractingApplied)
|
||||
{
|
||||
args.fields.modifier -= 20;
|
||||
args.flags.distractingApplied = true;
|
||||
}
|
53
reference_scripts/VINX6TBAJQznhVcN.js
Normal file
53
reference_scripts/VINX6TBAJQznhVcN.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished replacing <em>${this.item.name}</em> with a makeshift one.</p>`;
|
||||
const test = 'Maintenance Crew Test';
|
||||
const difficulty = 'hard';
|
||||
const target = 80;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
13
reference_scripts/VLdF2HPnCrNIgp7a.js
Normal file
13
reference_scripts/VLdF2HPnCrNIgp7a.js
Normal file
@ -0,0 +1,13 @@
|
||||
let items = [];
|
||||
|
||||
let etiquette = (await fromUuid("Compendium.wfrp4e-core.items.Item.sYbgpSnRqSZWgwFP")).toObject();
|
||||
etiquette.name += " (Followers of Khorne)";
|
||||
|
||||
items.push(etiquette);
|
||||
|
||||
let animosity = (await fromUuid("Compendium.wfrp4e-core.items.Item.0VpT5yubw4UL7j6f")).toObject();
|
||||
animosity.system.specification.value = "Followers of Slaanesh";
|
||||
|
||||
items.push(animosity);
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", items, {fromEffect : this.effect.id});
|
1
reference_scripts/VTS4RzbmReI87K9a.js
Normal file
1
reference_scripts/VTS4RzbmReI87K9a.js
Normal file
@ -0,0 +1 @@
|
||||
args.fields.slBonus = Math.floor(this.item.system.total.value * 0.1);
|
1
reference_scripts/VlHuDIAvPr8JM1P5.js
Normal file
1
reference_scripts/VlHuDIAvPr8JM1P5.js
Normal file
@ -0,0 +1 @@
|
||||
return args.skill?.name !== game.i18n.localize("NAME.Row");
|
1
reference_scripts/Vns6WrafVq8NjX7t.js
Normal file
1
reference_scripts/Vns6WrafVq8NjX7t.js
Normal file
@ -0,0 +1 @@
|
||||
return args.skill?.name != game.i18n.localize("NAME.Heal")
|
1
reference_scripts/WJkwIrdj4NceOYe8.js
Normal file
1
reference_scripts/WJkwIrdj4NceOYe8.js
Normal file
@ -0,0 +1 @@
|
||||
return args.characteristic !== 'fel';
|
53
reference_scripts/WR0Kqn8CF5iwToak.js
Normal file
53
reference_scripts/WR0Kqn8CF5iwToak.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Tailor)';
|
||||
const difficulty = 'difficult';
|
||||
const target = 40;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
1
reference_scripts/WeTlTniskT3Ej6vg.js
Normal file
1
reference_scripts/WeTlTniskT3Ej6vg.js
Normal file
@ -0,0 +1 @@
|
||||
args.modifiers.other.push({label : this.effect.name, value : 2})
|
9
reference_scripts/X08401eOhKJrhNf1.js
Normal file
9
reference_scripts/X08401eOhKJrhNf1.js
Normal file
@ -0,0 +1,9 @@
|
||||
const grim = this.actor.items.find(i => i.type === "trait" && i.name.includes("Grim"));
|
||||
|
||||
if (args.options?.deltaAdv > 0 && this.actor.hasCondition("engaged") && grim.specification.value !== 4) {
|
||||
grim.update({"system.specification.value": 4});
|
||||
}
|
||||
|
||||
if (!this.actor.hasCondition("engaged") && grim.specification.value !== 2) {
|
||||
grim.update({"system.specification.value": 2});
|
||||
}
|
2
reference_scripts/X3vpmNUj9SL2CDnF.js
Normal file
2
reference_scripts/X3vpmNUj9SL2CDnF.js
Normal file
@ -0,0 +1,2 @@
|
||||
let item = args.actor.items.find(i => i.name.includes("Flying Jib"));
|
||||
item.name += ` (Disabled by ${this.item.name})`;
|
1
reference_scripts/XCAfy460IotarQek.js
Normal file
1
reference_scripts/XCAfy460IotarQek.js
Normal file
@ -0,0 +1 @@
|
||||
return false;
|
11
reference_scripts/YySjPfSAPdMAfjsh.js
Normal file
11
reference_scripts/YySjPfSAPdMAfjsh.js
Normal file
@ -0,0 +1,11 @@
|
||||
let talents = ["Berserk Charge", "Combat Aware", "Combat Reflexes", "Furious Assault", "Implacable", "Magic Resistance", "Resistance (Magic)", "Resolute", "Strike Mighty Blow", "Warrior Born"];
|
||||
let currentCareer = this.actor.system.currentCareer;
|
||||
|
||||
if (!currentCareer) return;
|
||||
|
||||
for (let talent of talents) {
|
||||
if (currentCareer.system.talents.includes(talent))
|
||||
continue;
|
||||
currentCareer.system.talents.push(talent);
|
||||
}
|
||||
|
2
reference_scripts/Z41L3MwOpJdAjVaj.js
Normal file
2
reference_scripts/Z41L3MwOpJdAjVaj.js
Normal file
@ -0,0 +1,2 @@
|
||||
if (args.actorsystem.details.move.sail.value > 0)
|
||||
args.actor.system.details.move.sail.value -= 2;
|
53
reference_scripts/ZCBcwbVFHFTFRntb.js
Normal file
53
reference_scripts/ZCBcwbVFHFTFRntb.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Carpentry)';
|
||||
const difficulty = 'easy';
|
||||
const target = 10;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
1
reference_scripts/ZLspFT2I3ZdWWr2H.js
Normal file
1
reference_scripts/ZLspFT2I3ZdWWr2H.js
Normal file
@ -0,0 +1 @@
|
||||
return args.skill?.name !== game.i18n.localize("NAME.Leadership");
|
1
reference_scripts/ZOgtDW3mkTfeyc5M.js
Normal file
1
reference_scripts/ZOgtDW3mkTfeyc5M.js
Normal file
@ -0,0 +1 @@
|
||||
args.actor.system.details.price.gc += args.actor.system.details.price.gc * 0.1;
|
53
reference_scripts/ZRoG7GiMDQWso6gN.js
Normal file
53
reference_scripts/ZRoG7GiMDQWso6gN.js
Normal file
@ -0,0 +1,53 @@
|
||||
const repaired_message = `<p>Finished repairing <em>${this.item.name}</em>.</p>`;
|
||||
const test = 'Trade (Carpentry)';
|
||||
const difficulty = 'difficult';
|
||||
const target = 30;
|
||||
|
||||
const extendedTestData = {
|
||||
name: this.item.name,
|
||||
type: "extendedTest",
|
||||
img: this.item.img,
|
||||
system: {
|
||||
SL: {
|
||||
current: 0,
|
||||
target: target
|
||||
},
|
||||
test: {
|
||||
value: test
|
||||
},
|
||||
completion: {
|
||||
value: "remove"
|
||||
},
|
||||
difficulty: {
|
||||
value: difficulty
|
||||
}
|
||||
},
|
||||
effects: [
|
||||
{
|
||||
name: `Repair the ${this.item.name}`,
|
||||
icon: this.item.img,
|
||||
flags: {
|
||||
wfrp4e: {
|
||||
applicationData: {
|
||||
type: "document",
|
||||
documentType: "Item"
|
||||
},
|
||||
scriptData: [
|
||||
{
|
||||
label: this.item.name,
|
||||
script: `
|
||||
let id = this.item.flags.wfrp4e.fromEffect;
|
||||
let effect = this.actor.appliedEffects.find(e => e.id === id);
|
||||
this.script.scriptMessage("${repaired_message}");
|
||||
await effect.item.delete();
|
||||
`,
|
||||
trigger: "deleteEffect"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
await this.actor.createEmbeddedDocuments("Item", [extendedTestData], {fromEffect: this.effect.id});
|
4
reference_scripts/ZuoIVv3nmlGhhdx0.js
Normal file
4
reference_scripts/ZuoIVv3nmlGhhdx0.js
Normal file
@ -0,0 +1,4 @@
|
||||
let rating = parseInt(this.effect.name.match(/\d+/)?.[0]) || 1;
|
||||
let holed = this.actor.flags.holed || {holed: 0};
|
||||
holed.holed += rating;
|
||||
this.actor.flags.holed = holed;
|
2
reference_scripts/araS9qYWOAVrV8F7.js
Normal file
2
reference_scripts/araS9qYWOAVrV8F7.js
Normal file
@ -0,0 +1,2 @@
|
||||
args.actor.system.details.man -= 3;
|
||||
args.actor.system.details.move.value -= 2;
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user