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

View File

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

View File

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