57 lines
1.6 KiB
JavaScript
57 lines
1.6 KiB
JavaScript
import evaluateString from '/imports/api/creature/computation/afterComputation/evaluateString.js';
|
|
import {insertCreatureLog} from '/imports/api/creature/log/CreatureLogs.js';
|
|
import { damagePropertiesByName } from '/imports/api/creature/CreatureProperties.js';
|
|
|
|
export default function applyAdjustment({
|
|
prop,
|
|
creature,
|
|
targets,
|
|
actionContext
|
|
}){
|
|
let damageTargets = prop.target === 'self' ? [creature] : targets;
|
|
let scope = {
|
|
...creature.variables,
|
|
...actionContext,
|
|
};
|
|
try {
|
|
var {result, errors} = evaluateString(prop.amount, scope, 'reduce');
|
|
if (typeof result !== 'number') {
|
|
return insertCreatureLog.call({ log: {
|
|
text: errors.join(', ') || 'Something went wrong',
|
|
creatureId: creature._id,
|
|
}});
|
|
}
|
|
} catch (e){
|
|
return insertCreatureLog.call({ log: {
|
|
text: e.toString(),
|
|
creatureId: creature._id,
|
|
}});
|
|
}
|
|
if (damageTargets) {
|
|
damageTargets.forEach(target => {
|
|
if (prop.target === 'each'){
|
|
result = evaluateString(prop.amount, scope, 'reduce');
|
|
}
|
|
damagePropertiesByName.call({
|
|
creatureId: target._id,
|
|
variableName: prop.stat,
|
|
operation: prop.operation || 'increment',
|
|
value: result
|
|
});
|
|
insertCreatureLog.call({
|
|
log: {
|
|
text: `${prop.stat} ${prop.operation === 'set' ? 'set to' : ''} ${-result}`,
|
|
creatureId: target._id,
|
|
}
|
|
});
|
|
});
|
|
} else {
|
|
insertCreatureLog.call({
|
|
log: {
|
|
text: `${prop.stat} ${prop.operation === 'set' ? 'set to' : ''} ${-result}`,
|
|
creatureId: creature._id,
|
|
}
|
|
});
|
|
}
|
|
}
|