99 lines
2.6 KiB
JavaScript
99 lines
2.6 KiB
JavaScript
|
|
function writeCreature(char) {
|
|
//TODO these functions don't filter the stats before trying to write
|
|
writeAttributes(char);
|
|
writeSkills(char);
|
|
writeDamageMultipliers(char);
|
|
writeEffects(char);
|
|
}
|
|
|
|
/*
|
|
* Write all the attributes from the in-memory char object to the Attirbute docs
|
|
*/
|
|
function writeAttributes(char) {
|
|
let bulkWriteOps = _.map(char.atts, (att, variableName) => {
|
|
let op = {
|
|
updateMany: {
|
|
filter: {'ancestors.id': char.id, variableName},
|
|
update: {'$set': {
|
|
value: att.result,
|
|
rollBonuses: skill.rollBonus,
|
|
}},
|
|
}
|
|
};
|
|
if (typeof att.mod === 'number'){
|
|
op.updateMany.update.$set.mod = att.mod;
|
|
} else {
|
|
op.updateMany.update.$unset = {mod: 1};
|
|
}
|
|
return op;
|
|
});
|
|
bulkWriteProperties({bulkWriteOps, selectorType: 'attribute'});
|
|
}
|
|
|
|
function writeSkills(char) {
|
|
let bulkWriteOps = _.map(char.skills, (skill, variableName) => {
|
|
let op = {
|
|
updateMany: {
|
|
filter: {'ancestors.id': char.id, variableName},
|
|
update: {$set: {
|
|
value: skill.result,
|
|
abilityMod: skill.abilityMod,
|
|
advantage: skill.advantage,
|
|
passiveBonus: skill.passiveAdd,
|
|
proficiency: skill.proficiency,
|
|
conditionalBenefits: skill.conditional,
|
|
rollBonuses: skill.rollBonus,
|
|
fail: skill.fail,
|
|
}},
|
|
}
|
|
};
|
|
return op;
|
|
});
|
|
bulkWriteProperties({bulkWriteOps, selectorType: 'skill'});
|
|
}
|
|
|
|
function writeDamageMultipliers(char) {
|
|
let bulkWriteOps = _.map(char.dms, (dm, variableName) => {
|
|
let op = {
|
|
updateMany: {
|
|
filter: {'ancestors.id': char.id, variableName},
|
|
update: {$set: {
|
|
value: dm.result,
|
|
}},
|
|
}
|
|
};
|
|
return op;
|
|
});
|
|
bulkWriteProperties({bulkWriteOps, selectorType: 'damageMultiplier'});
|
|
}
|
|
|
|
function writeEffects(char){
|
|
let bulkWriteOps = _.map(char.computedEffects, effect => ({
|
|
updateOne: {
|
|
filter: {_id: effect._id},
|
|
update: {$set: {
|
|
result: effect.result,
|
|
}},
|
|
},
|
|
}));
|
|
if (!bulkWriteOps.length) return;
|
|
bulkWriteProperties({bulkWriteOps, selectorType: 'effect'});
|
|
}
|
|
|
|
function bulkWriteProperties({bulkWriteOps, selectorType}){
|
|
if (!bulkWriteOps.length) return;
|
|
if (Meteor.isServer){
|
|
CreatureProperties.rawCollection().bulkWrite(bulkWriteOps, {ordered : false}, function(e){
|
|
if (e) console.error(e);
|
|
});
|
|
} else {
|
|
_.each(bulkWriteOps, op => {
|
|
CreatureProperties.update(op.updateMany.filter, op.updateMany.update, {
|
|
multi: true,
|
|
selector: {type: selectorType}
|
|
});
|
|
});
|
|
}
|
|
}
|