77 lines
2.1 KiB
JavaScript
77 lines
2.1 KiB
JavaScript
import evaluateString from '/imports/api/creature/computation/afterComputation/evaluateString.js';
|
|
import CreaturesProperties from '/imports/api/creature/creatureProperties/CreatureProperties.js';
|
|
import roll from '/imports/parser/roll.js';
|
|
|
|
export default function applySave({
|
|
prop,
|
|
creature,
|
|
actionContext,
|
|
log,
|
|
}){
|
|
let scope = {
|
|
...creature.variables,
|
|
...actionContext,
|
|
};
|
|
try {
|
|
// Calculate the DC
|
|
var {result} = evaluateString({
|
|
string: prop.dc,
|
|
scope,
|
|
fn: 'reduce'
|
|
});
|
|
let dc = result.value;
|
|
log.content.push({
|
|
name: prop.name,
|
|
value: ' DC ' + result.toString(),
|
|
});
|
|
if (prop.target === 'self'){
|
|
let save = CreaturesProperties.findOne({
|
|
'ancestors.id': creature._id,
|
|
type: 'skill',
|
|
skillType: 'save',
|
|
variableName: prop.stat,
|
|
removed: {$ne: true},
|
|
inactive: {$ne: true},
|
|
});
|
|
if (!save){
|
|
log.content.push({
|
|
name: 'Saving throw error',
|
|
value: 'No saving throw found: ' + prop.stat,
|
|
});
|
|
return;
|
|
}
|
|
let value, values, resultPrefix;
|
|
if (save.advantage === 1){
|
|
values = roll(2, 20).sort().reverse();
|
|
value = values[0];
|
|
resultPrefix = `Advantage: 1d20 [${values[0]},~~${values[1]}~~] + ${save.value} = `
|
|
} else if (save.advantage === -1){
|
|
values = roll(2, 20).sort();
|
|
value = values[0];
|
|
resultPrefix = `Disadvantage: 1d20 [${values[0]},~~${values[1]}~~] + ${save.value} = `
|
|
} else {
|
|
values = roll(1, 20);
|
|
value = values[0];
|
|
resultPrefix = `1d20 [${value}] + ${save.value} = `
|
|
}
|
|
actionContext.savingThrowRoll = {value};
|
|
let result = value + save.value;
|
|
actionContext.savingThrow = {value: result};
|
|
let saveSuccess = result >= dc;
|
|
log.content.push({
|
|
name: 'Save',
|
|
value: resultPrefix + result + (saveSuccess ? 'Passed' : 'Failed')
|
|
});
|
|
return !saveSuccess;
|
|
} else {
|
|
// TODO
|
|
return true;
|
|
}
|
|
} catch (e){
|
|
log.content.push({
|
|
name: 'Save error',
|
|
value: e.toString(),
|
|
});
|
|
}
|
|
}
|