76 lines
1.9 KiB
JavaScript
76 lines
1.9 KiB
JavaScript
import CreatureProperties from '/imports/api/creature/creatureProperties/CreatureProperties.js';
|
|
|
|
export default function recomputeInactiveProperties(ancestorId){
|
|
let disabledFilter = {
|
|
'ancestors.id': ancestorId,
|
|
$or: [
|
|
{disabled: true}, // Everything can be disabled
|
|
{type: 'buff', applied: false}, // Buffs can be applied
|
|
{type: 'item', equipped: {$ne: true}},
|
|
{type: 'spell', prepared: {$ne: true}, alwaysPrepared: {$ne: true}},
|
|
],
|
|
};
|
|
let disabledIds = CreatureProperties.find(disabledFilter, {
|
|
fields: {_id: 1},
|
|
}).map(prop => prop._id);
|
|
|
|
// Deactivate relevant properties
|
|
// Inactive properties
|
|
CreatureProperties.update({
|
|
'ancestors.id': ancestorId,
|
|
'_id': {$in: disabledIds},
|
|
$or: [
|
|
{inactive: {$ne: true}},
|
|
{deactivatedBySelf: {$ne: true}},
|
|
{deactivatedByAncestor: true},
|
|
],
|
|
}, {
|
|
$set: {
|
|
inactive: true,
|
|
deactivatedBySelf: true,
|
|
},
|
|
$unset: {deactivatedByAncestor: 1},
|
|
}, {
|
|
multi: true,
|
|
selector: {type: 'any'},
|
|
});
|
|
// Decendants of inactive properties
|
|
CreatureProperties.update({
|
|
'ancestors.id': {$eq: ancestorId, $in: disabledIds},
|
|
$or: [
|
|
{inactive: {$ne: true}},
|
|
{deactivatedByAncestor: {$ne: true}},
|
|
],
|
|
}, {
|
|
$set: {
|
|
inactive: true,
|
|
deactivatedByAncestor: true,
|
|
},
|
|
}, {
|
|
multi: true,
|
|
selector: {type: 'any'},
|
|
});
|
|
|
|
// Remove inactive from all the properties that are inactive but shouldn't be
|
|
CreatureProperties.update({
|
|
'ancestors.id': {$eq: ancestorId, $nin: disabledIds},
|
|
'_id': {$nin: disabledIds},
|
|
// if it was a toggle responsible, we leave it alone
|
|
deactivatedByToggle: {$ne: true},
|
|
$or: [
|
|
{inactive: true},
|
|
{deactivatedByAncestor: true},
|
|
{deactivatedBySelf: true}
|
|
],
|
|
}, {
|
|
$unset: {
|
|
inactive: 1,
|
|
deactivatedByAncestor: 1,
|
|
deactivatedBySelf: 1,
|
|
},
|
|
}, {
|
|
multi: true,
|
|
selector: {type: 'any'},
|
|
});
|
|
}
|