damage tags to ignore multipliers

This commit is contained in:
Stefan Zermatten
2022-09-13 17:34:30 +02:00
parent b051d764f8
commit adaa31d76c
3 changed files with 22 additions and 19 deletions

View File

@@ -1,4 +1,4 @@
import { some, intersection, difference, remove } from 'lodash';
import { some, intersection, difference, remove, includes } from 'lodash';
import applyProperty from '../applyProperty.js';
import {insertCreatureLog} from '/imports/api/creature/log/CreatureLogs.js';
import resolve, { Context, toString } from '/imports/parser/resolve.js';
@@ -147,21 +147,21 @@ function applyDamageMultipliers({target, damage, damageProp, logValue}){
if (
multiplier.immunity &&
some(multiplier.immunities, multiplierAppliesTo(damageProp))
some(multiplier.immunities, multiplierAppliesTo(damageProp, 'immunity'))
){
logValue.push(`Immune to ${damageTypeText}`);
return 0;
} else {
if (
multiplier.resistance &&
some(multiplier.resistances, multiplierAppliesTo(damageProp))
some(multiplier.resistances, multiplierAppliesTo(damageProp, 'resistance'))
){
logValue.push(`Resistant to ${damageTypeText}`);
damage = Math.floor(damage / 2);
}
if (
multiplier.vulnerability &&
some(multiplier.vulnerabilities, multiplierAppliesTo(damageProp))
some(multiplier.vulnerabilities, multiplierAppliesTo(damageProp, 'vulnerability'))
){
logValue.push(`Vulnerable to ${damageTypeText}`);
damage = Math.floor(damage * 2);
@@ -170,8 +170,11 @@ function applyDamageMultipliers({target, damage, damageProp, logValue}){
return damage;
}
function multiplierAppliesTo(damageProp){
function multiplierAppliesTo(damageProp, multiplierType){
return multiplier => {
// Apply the default 'ignore x' tags
if (includes(damageProp.tags, `ignore ${multiplierType}`)) return false;
const hasRequiredTags = difference(
multiplier.includeTags, damageProp.tags
).length === 0;

View File

@@ -7,19 +7,19 @@ import getAggregatorResult from './getAggregatorResult.js';
export default function computeImplicitVariable(node){
const prop = {};
// Combine damage multipliers
if (node.data.immunity){
prop.immunity = node.data.immunity;
prop.immunities = node.data.immunities;
}
if (node.data.resistance){
prop.resistance = node.data.resistance;
prop.resistances = node.data.resistances;
}
if (node.data.vulnerability){
prop.vulnerability = node.data.vulnerability;
prop.vulnerabilities = node.data.vulnerabilities;
}
// Combine damage multipliers
if (node.data.immunity){
prop.immunity = node.data.immunity;
prop.immunities = node.data.immunities;
}
if (node.data.resistance){
prop.resistance = node.data.resistance;
prop.resistances = node.data.resistances;
}
if (node.data.vulnerability){
prop.vulnerability = node.data.vulnerability;
prop.vulnerabilities = node.data.vulnerabilities;
}
const result = getAggregatorResult(node);
if (result !== undefined){

View File

@@ -48,7 +48,7 @@
chips
deletable-chips
hint=""
:items="['magical', 'silvered']"
:items="['magical', 'silvered', 'ignore resistance', 'ignore vulnerability', 'ignore immunity']"
:value="model.tags"
:error-messages="errors.tags"
@change="change('tags', ...arguments)"