Compare commits

...

13 Commits

Author SHA1 Message Date
Stefan Zermatten
b578dd5fb0 Merge branch 'feature-carry-capacity-modifier' 2015-09-03 14:09:51 +02:00
Stefan Zermatten
5d6f934d88 Bumped version 2015-09-03 14:09:23 +02:00
Stefan Zermatten
337f0bfa8a Made sure migration touches every character 2015-09-03 14:09:17 +02:00
Stefan Zermatten
c62784894b Made sure encumbered conditions respect carry capacity 2015-09-03 13:53:00 +02:00
Stefan Zermatten
75fff43d7d Gave an effect menu option for carry capacity 2015-09-03 13:52:40 +02:00
Stefan Zermatten
a9eeeac0df Fixed carry capacity bar 2015-09-03 13:52:22 +02:00
Stefan Zermatten
c8af0ff0a9 Fixed carry capacity table 2015-09-03 13:52:06 +02:00
Stefan Zermatten
9e200db7b9 Made carry capacity an attribute, migrations need testing 2015-08-31 15:51:52 +02:00
Stefan Zermatten
c08cf83096 Bumped version 2015-08-27 12:21:23 +02:00
Stefan Zermatten
d9368b06d0 Merge branch 'bugfix-0.6.8' 2015-08-27 12:07:42 +02:00
Stefan Zermatten
2703367681 Proficiencies now get disabled when their features are disabled 2015-08-27 12:05:56 +02:00
Stefan Zermatten
d419442549 Fixed share dialog not finding usernames or email addresses 2015-08-27 11:59:38 +02:00
Stefan Zermatten
99df01c950 Prevented negative temporary hitpoints being added 2015-08-27 11:43:34 +02:00
13 changed files with 108 additions and 24 deletions

View File

@@ -33,6 +33,7 @@ Schemas.Character = new SimpleSchema({
age: {type: Schemas.Attribute}, age: {type: Schemas.Attribute},
ageRate: {type: Schemas.Attribute}, ageRate: {type: Schemas.Attribute},
armor: {type: Schemas.Attribute}, armor: {type: Schemas.Attribute},
carryMultiplier: {type: Schemas.Attribute},
//resources //resources
level1SpellSlots: {type: Schemas.Attribute}, level1SpellSlots: {type: Schemas.Attribute},

View File

@@ -107,6 +107,18 @@ if (Meteor.isServer) Characters.after.insert(function(userId, char) {
group: "Inate", group: "Inate",
}, },
}); });
Effects.insert({
charId: char._id,
name: "Natural Carrying Capacity",
stat: "carryMultiplier",
operation: "base",
value: "1",
parent: {
id: char._id,
collection: "Characters",
group: "Inate",
},
});
}); });
Effects.attachBehaviour("softRemovable"); Effects.attachBehaviour("softRemovable");

View File

@@ -30,7 +30,7 @@ Schemas.Proficiency = new SimpleSchema({
Proficiencies.attachSchema(Schemas.Proficiency); Proficiencies.attachSchema(Schemas.Proficiency);
Proficiencies.attachBehaviour("softRemovable"); Proficiencies.attachBehaviour("softRemovable");
makeChild(Proficiencies); makeChild(Proficiencies, ["enabled"]);
Proficiencies.allow(CHARACTER_SUBSCHEMA_ALLOW); Proficiencies.allow(CHARACTER_SUBSCHEMA_ALLOW);
Proficiencies.deny(CHARACTER_SUBSCHEMA_DENY); Proficiencies.deny(CHARACTER_SUBSCHEMA_DENY);

View File

@@ -3,8 +3,8 @@ TemporaryHitPoints = new Mongo.Collection("temporaryHitPoints");
Schemas.TemporaryHitPoints = new SimpleSchema({ Schemas.TemporaryHitPoints = new SimpleSchema({
charId: {type: String, regEx: SimpleSchema.RegEx.Id}, charId: {type: String, regEx: SimpleSchema.RegEx.Id},
name: {type: String, optional: true}, name: {type: String, optional: true},
maximum: {type: Number, defaultValue: 0}, maximum: {type: Number, defaultValue: 0, min: 0, max: 500},
used: {type: Number, defaultValue: 0}, used: {type: Number, defaultValue: 0, min: 0, max: 500},
deleteOnZero:{type: Boolean, defaultValue: false}, deleteOnZero:{type: Boolean, defaultValue: false},
dateAdded: { dateAdded: {
type: Date, type: Date,

View File

@@ -42,6 +42,7 @@ var stats = [
{stat: "rageDamage", name: "Rage Damage", group: "Stats"}, {stat: "rageDamage", name: "Rage Damage", group: "Stats"},
{stat: "expertiseDice", name: "Expertise Dice", group: "Stats"}, {stat: "expertiseDice", name: "Expertise Dice", group: "Stats"},
{stat: "superiorityDice", name: "Superiority Dice", group: "Stats"}, {stat: "superiorityDice", name: "Superiority Dice", group: "Stats"},
{stat: "carryMultiplier", name: "Carry Capacity Multiplier", group: "Stats"},
{stat: "level1SpellSlots", name: "level 1", group: "Spell Slots"}, {stat: "level1SpellSlots", name: "level 1", group: "Spell Slots"},
{stat: "level2SpellSlots", name: "level 2", group: "Spell Slots"}, {stat: "level2SpellSlots", name: "level 2", group: "Spell Slots"},
{stat: "level3SpellSlots", name: "level 3", group: "Spell Slots"}, {stat: "level3SpellSlots", name: "level 3", group: "Spell Slots"},

View File

@@ -14,7 +14,9 @@ var getFractionCarried = function(char) {
}); });
//get strength //get strength
var strength = Characters.calculate.attributeValue(char._id, "strength"); var strength = Characters.calculate.attributeValue(char._id, "strength");
var capacity = strength * 15; var carryMultiplier = Characters.calculate
.attributeValue(char._id, "carryMultiplier");
var capacity = strength * 15 * carryMultiplier;
return weight / capacity; return weight / capacity;
}; };

View File

@@ -1,9 +1,11 @@
Template.addTHPDialog.events({ Template.addTHPDialog.events({
"tap #addButton": function(event, instance){ "tap #addButton": function(event, instance){
var max = +instance.find("#quantityInput").value;
if (!max || max < 0) max = 0;
TemporaryHitPoints.insert({ TemporaryHitPoints.insert({
charId: this.charId, charId: this.charId,
name: instance.find("#nameInput").value, name: instance.find("#nameInput").value,
maximum: +instance.find("#quantityInput").value, maximum: max,
deleteOnZero: !!instance.find("#deleteWhenZeroCheckbox").checked, deleteOnZero: !!instance.find("#deleteWhenZeroCheckbox").checked,
}); });
} }

View File

@@ -2,26 +2,26 @@
<table class="carryCapacityTable strengthTable"> <table class="carryCapacityTable strengthTable">
<tr> <tr>
<td>Encumbered</td> <td>Encumbered</td>
<td>&gt;{{evaluate charId "strength * 5"}}lbs</td> <td>&gt;{{evaluate charId "strength * 5 * carryMultiplier"}}lbs</td>
<td class="caption">Variant rule, encumbered characters move 10 feet slower</td> <td class="caption">Variant rule, encumbered characters move 10 feet slower</td>
</tr> </tr>
<tr> <tr>
<td>Heavily encumbered</td> <td>Heavily encumbered</td>
<td>&gt;{{evaluate charId "strength * 10"}}lbs</td> <td>&gt;{{evaluate charId "strength * 10 * carryMultiplier"}}lbs</td>
<td class="caption"> <td class="caption">
Variant rule, heavily encumbered characters move 20 feet slower and have disadvantage on ability checks, attack rolls, and saving thows that use Strength, Dexterity, or Constitution Variant rule, heavily encumbered characters move 20 feet slower and have disadvantage on ability checks, attack rolls, and saving thows that use Strength, Dexterity, or Constitution
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Over Encumbered</td> <td>Over Encumbered</td>
<td>&gt;{{evaluate charId "strength * 15"}}lbs</td> <td>&gt;{{evaluate charId "strength * 15 * carryMultiplier"}}lbs</td>
<td class="caption"> <td class="caption">
Characters that can only just lift, push or drag their current load can only move at 5 feet. Characters that can only just lift, push or drag their current load can only move at 5 feet.
</td> </td>
</tr> </tr>
<tr> <tr>
<td>Push, drag or lift maximum</td> <td>Push, drag or lift maximum</td>
<td>{{evaluate charId "strength * 30"}}lbs</td> <td>{{evaluate charId "strength * 30 * carryMultiplier"}}lbs</td>
<td class="caption"></td> <td class="caption"></td>
</tr> </tr>
</table> </table>

View File

@@ -33,9 +33,9 @@
role="slider" role="slider"
flex flex
></paper-diff-slider> ></paper-diff-slider>
{{#unless left}}{{#unless deleteOnZero}} {{#unless left}}
<paper-icon-button class="deleteTHP" icon="delete"></paper-icon-button> <paper-icon-button class="deleteTHP" icon="delete"></paper-icon-button>
{{/unless}}{{/unless}} {{/unless}}
</div> </div>
</div> </div>
{{/each}} {{/each}}

View File

@@ -1,8 +1,13 @@
Meteor.methods({ Meteor.methods({
"getUserId": function(username){ "getUserId": function(username){
if (!username) return; if (!username) return;
regex = new RegExp("^" + username + "$", "i")
var user = Meteor.users.findOne( var user = Meteor.users.findOne(
{$or: [{username: username}, {"emails.address": username}]} {$or: [
{username: username},
{"emails.address": regex},
{"services.google.email": regex},
]}
); );
return user && user._id; return user && user._id;
} }

View File

@@ -101,6 +101,8 @@ trackEncumbranceConditions = function(charId, templateInstance) {
{fields: {"settings": 1}} {fields: {"settings": 1}}
); );
var strength = Characters.calculate.attributeValue(charId, "strength"); var strength = Characters.calculate.attributeValue(charId, "strength");
var carryMultiplier = Characters.calculate
.attributeValue(charId, "carryMultiplier");
var give = function(condition) { var give = function(condition) {
Meteor.call("giveCondition", charId, condition); Meteor.call("giveCondition", charId, condition);
}; };
@@ -108,11 +110,11 @@ trackEncumbranceConditions = function(charId, templateInstance) {
Meteor.call("removeCondition", charId, condition); Meteor.call("removeCondition", charId, condition);
}; };
//variant encumbrance rules //variant encumbrance rules
if (weight > strength * 10 && if (weight > strength * 10 * carryMultiplier &&
character.settings.useVariantEncumbrance) { character.settings.useVariantEncumbrance) {
give("encumbered2"); give("encumbered2");
remove("encumbered"); remove("encumbered");
} else if (weight > strength * 5 && } else if (weight > strength * 5 * carryMultiplier &&
character.settings.useVariantEncumbrance){ character.settings.useVariantEncumbrance){
give("encumbered"); give("encumbered");
remove("encumbered2"); remove("encumbered2");
@@ -121,11 +123,11 @@ trackEncumbranceConditions = function(charId, templateInstance) {
remove("encumbered2"); remove("encumbered2");
} }
//normal encumbrance rules //normal encumbrance rules
if (weight > strength * 30 && if (weight > strength * 30 * carryMultiplier &&
character.settings.useStandardEncumbrance){ character.settings.useStandardEncumbrance){
give("encumbered4"); give("encumbered4");
remove("encumbered3"); remove("encumbered3");
} else if (weight > strength * 15 && } else if (weight > strength * 15 * carryMultiplier &&
character.settings.useStandardEncumbrance) { character.settings.useStandardEncumbrance) {
give("encumbered3"); give("encumbered3");
remove("encumbered4"); remove("encumbered4");

View File

@@ -243,3 +243,20 @@ ChangeLogs.insert({
"Added basic analytics", "Added basic analytics",
], ],
}); });
ChangeLogs.insert({
version: "0.6.8",
changes: [
"Fixed share dialog not finding user names",
"Fixed temporary hitpoint sliders allowing negative values",
"Fixed proficiencies not being disabled with their features",
],
});
ChangeLogs.insert({
version: "0.7.0",
changes: [
"Added carry capacity multiplier as a stat with a default value of 1",
"Improved loading times by vulcanizing polymer imports",
],
});

View File

@@ -108,3 +108,45 @@ Migrations.add({
); );
}, },
}); });
Migrations.add({
version: 4,
name: "Adds an effect to give characters a base carry capacity",
up: function() {
//update characters
Characters.find({}).forEach(function(char){
Characters.update(char._id, {
$set: {
carryMultiplier: {
adjustment: 0,
reset: "longRest",
}
}
});
var effect = Effects.findOne({
charId: char._id, name: "Natural Carrying Capacity"
});
if (effect) return;
Effects.insert({
charId: char._id,
name: "Natural Carrying Capacity",
stat: "carryMultiplier",
operation: "base",
value: "1",
parent: {
id: char._id,
collection: "Characters",
group: "Inate",
},
});
effect = Effects.findOne({
charId: char._id, name: "Natural Carrying Capacity"
});
if (!effect) throw "Carry capacity effect should be set by now."
});
},
down: function(){
return;
},
});