@@ -9793,7 +9793,7 @@ process.chdir = function (dir) {
|
||||
|
||||
}).call(this,typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {})
|
||||
},{}],5:[function(require,module,exports){
|
||||
var api, classes, diminishingReturns, events, gear, gearTypes, i18n, moment, mystery, repeat, t, _;
|
||||
var api, classes, diminishingReturns, events, gear, gearTypes, i18n, moment, repeat, t, _;
|
||||
|
||||
_ = require('lodash');
|
||||
|
||||
@@ -9856,46 +9856,66 @@ events = {
|
||||
}
|
||||
};
|
||||
|
||||
mystery = {
|
||||
api.mystery = {
|
||||
201402: {
|
||||
start: '2014-02-22',
|
||||
end: '2014-02-28'
|
||||
end: '2014-02-28',
|
||||
text: 'Winged Messenger Set'
|
||||
},
|
||||
201403: {
|
||||
start: '2014-03-24',
|
||||
end: '2014-04-02'
|
||||
end: '2014-04-02',
|
||||
text: 'Forest Walker Set'
|
||||
},
|
||||
201404: {
|
||||
start: '2014-04-24',
|
||||
end: '2014-05-02'
|
||||
end: '2014-05-02',
|
||||
text: 'Twilight Butterfly Set'
|
||||
},
|
||||
201405: {
|
||||
start: '2014-05-21',
|
||||
end: '2014-06-02'
|
||||
end: '2014-06-02',
|
||||
text: 'Flame Wielder Set'
|
||||
},
|
||||
201406: {
|
||||
start: '2014-06-23',
|
||||
end: '2014-07-02'
|
||||
end: '2014-07-02',
|
||||
text: 'Octomage Set'
|
||||
},
|
||||
201407: {
|
||||
start: '2014-07-23',
|
||||
end: '2014-08-02'
|
||||
end: '2014-08-02',
|
||||
text: 'Undersea Explorer Set'
|
||||
},
|
||||
201408: {
|
||||
start: '2014-08-23',
|
||||
end: '2014-09-02'
|
||||
end: '2014-09-02',
|
||||
text: 'Sun Sorcerer Set'
|
||||
},
|
||||
201409: {
|
||||
start: '2014-09-24',
|
||||
end: '2014-10-02'
|
||||
end: '2014-10-02',
|
||||
text: 'Autumn Strider Item Set'
|
||||
},
|
||||
201410: {
|
||||
start: '2014-10-24',
|
||||
end: '2014-11-02'
|
||||
end: '2014-11-02',
|
||||
text: 'Winged Goblin Set'
|
||||
},
|
||||
201411: {
|
||||
start: '2014-11-24',
|
||||
end: '2014-12-02'
|
||||
end: '2014-12-02',
|
||||
text: 'Feast and Fun Set'
|
||||
},
|
||||
301404: {
|
||||
start: '3014-03-24',
|
||||
end: '3014-04-02',
|
||||
text: 'Steampunk Standard Set'
|
||||
},
|
||||
301405: {
|
||||
start: '3014-04-24',
|
||||
end: '3014-05-02',
|
||||
text: 'Steampunk Accessories Set'
|
||||
},
|
||||
wondercon: {
|
||||
start: '2014-03-24',
|
||||
@@ -9903,6 +9923,10 @@ mystery = {
|
||||
}
|
||||
};
|
||||
|
||||
_.each(api.mystery, function(v, k) {
|
||||
return v.key = k;
|
||||
});
|
||||
|
||||
gear = {
|
||||
weapon: {
|
||||
base: {
|
||||
@@ -10401,7 +10425,13 @@ gear = {
|
||||
201411: {
|
||||
text: t('weaponMystery201411Text'),
|
||||
notes: t('weaponMystery201411Notes'),
|
||||
mystery: mystery['201411'],
|
||||
mystery: '201411',
|
||||
value: 0
|
||||
},
|
||||
301404: {
|
||||
text: t('weaponMystery301404Text'),
|
||||
notes: t('weaponMystery301404Notes'),
|
||||
mystery: '301404',
|
||||
value: 0
|
||||
}
|
||||
}
|
||||
@@ -10804,49 +10834,55 @@ gear = {
|
||||
201402: {
|
||||
text: t('armorMystery201402Text'),
|
||||
notes: t('armorMystery201402Notes'),
|
||||
mystery: mystery['201402'],
|
||||
mystery: '201402',
|
||||
value: 0
|
||||
},
|
||||
201403: {
|
||||
text: t('armorMystery201403Text'),
|
||||
notes: t('armorMystery201403Notes'),
|
||||
mystery: mystery['201403'],
|
||||
mystery: '201403',
|
||||
value: 0
|
||||
},
|
||||
201405: {
|
||||
text: t('armorMystery201405Text'),
|
||||
notes: t('armorMystery201405Notes'),
|
||||
mystery: mystery['201405'],
|
||||
mystery: '201405',
|
||||
value: 0
|
||||
},
|
||||
201406: {
|
||||
text: t('armorMystery201406Text'),
|
||||
notes: t('armorMystery201406Notes'),
|
||||
mystery: mystery['201406'],
|
||||
mystery: '201406',
|
||||
value: 0
|
||||
},
|
||||
201407: {
|
||||
text: t('armorMystery201407Text'),
|
||||
notes: t('armorMystery201407Notes'),
|
||||
mystery: mystery['201407'],
|
||||
mystery: '201407',
|
||||
value: 0
|
||||
},
|
||||
201408: {
|
||||
text: t('armorMystery201408Text'),
|
||||
notes: t('armorMystery201408Notes'),
|
||||
mystery: mystery['201408'],
|
||||
mystery: '201408',
|
||||
value: 0
|
||||
},
|
||||
201409: {
|
||||
text: t('armorMystery201409Text'),
|
||||
notes: t('armorMystery201409Notes'),
|
||||
mystery: mystery['201409'],
|
||||
mystery: '201409',
|
||||
value: 0
|
||||
},
|
||||
201410: {
|
||||
text: t('armorMystery201410Text'),
|
||||
notes: t('armorMystery201410Notes'),
|
||||
mystery: mystery['201410'],
|
||||
mystery: '201410',
|
||||
value: 0
|
||||
},
|
||||
301404: {
|
||||
text: t('armorMystery301404Text'),
|
||||
notes: t('armorMystery301404Notes'),
|
||||
mystery: '301404',
|
||||
value: 0
|
||||
}
|
||||
}
|
||||
@@ -11249,37 +11285,49 @@ gear = {
|
||||
201402: {
|
||||
text: t('headMystery201402Text'),
|
||||
notes: t('headMystery201402Notes'),
|
||||
mystery: mystery['201402'],
|
||||
mystery: '201402',
|
||||
value: 0
|
||||
},
|
||||
201405: {
|
||||
text: t('headMystery201405Text'),
|
||||
notes: t('headMystery201405Notes'),
|
||||
mystery: mystery['201405'],
|
||||
mystery: '201405',
|
||||
value: 0
|
||||
},
|
||||
201406: {
|
||||
text: t('headMystery201406Text'),
|
||||
notes: t('headMystery201406Notes'),
|
||||
mystery: mystery['201406'],
|
||||
mystery: '201406',
|
||||
value: 0
|
||||
},
|
||||
201407: {
|
||||
text: t('headMystery201407Text'),
|
||||
notes: t('headMystery201407Notes'),
|
||||
mystery: mystery['201407'],
|
||||
mystery: '201407',
|
||||
value: 0
|
||||
},
|
||||
201408: {
|
||||
text: t('headMystery201408Text'),
|
||||
notes: t('headMystery201408Notes'),
|
||||
mystery: mystery['201408'],
|
||||
mystery: '201408',
|
||||
value: 0
|
||||
},
|
||||
201411: {
|
||||
text: t('headMystery201411Text'),
|
||||
notes: t('headMystery201411Notes'),
|
||||
mystery: mystery['201411'],
|
||||
mystery: '201411',
|
||||
value: 0
|
||||
},
|
||||
301404: {
|
||||
text: t('headMystery301404Text'),
|
||||
notes: t('headMystery301404Notes'),
|
||||
mystery: '301404',
|
||||
value: 0
|
||||
},
|
||||
301405: {
|
||||
text: t('headMystery301405Text'),
|
||||
notes: t('headMystery301405Notes'),
|
||||
mystery: '301405',
|
||||
value: 0
|
||||
}
|
||||
}
|
||||
@@ -11596,6 +11644,14 @@ gear = {
|
||||
value: 70,
|
||||
con: 9
|
||||
}
|
||||
},
|
||||
mystery: {
|
||||
301405: {
|
||||
text: t('shieldMystery301405Text'),
|
||||
notes: t('shieldMystery301405Notes'),
|
||||
mystery: '301405',
|
||||
value: 0
|
||||
}
|
||||
}
|
||||
},
|
||||
back: {
|
||||
@@ -11610,19 +11666,19 @@ gear = {
|
||||
201402: {
|
||||
text: t('backMystery201402Text'),
|
||||
notes: t('backMystery201402Notes'),
|
||||
mystery: mystery['201402'],
|
||||
mystery: '201402',
|
||||
value: 0
|
||||
},
|
||||
201404: {
|
||||
text: t('backMystery201404Text'),
|
||||
notes: t('backMystery201404Notes'),
|
||||
mystery: mystery['201404'],
|
||||
mystery: '201404',
|
||||
value: 0
|
||||
},
|
||||
201410: {
|
||||
text: t('backMystery201410Text'),
|
||||
notes: t('backMystery201410Notes'),
|
||||
mystery: mystery['201410'],
|
||||
mystery: '201410',
|
||||
value: 0
|
||||
}
|
||||
},
|
||||
@@ -11631,13 +11687,13 @@ gear = {
|
||||
text: t('backSpecialWonderconRedText'),
|
||||
notes: t('backSpecialWonderconRedNotes'),
|
||||
value: 0,
|
||||
mystery: mystery.wondercon
|
||||
mystery: 'wondercon'
|
||||
},
|
||||
wondercon_black: {
|
||||
text: t('backSpecialWonderconBlackText'),
|
||||
notes: t('backSpecialWonderconBlackNotes'),
|
||||
value: 0,
|
||||
mystery: mystery.wondercon
|
||||
mystery: 'wondercon'
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -11654,19 +11710,19 @@ gear = {
|
||||
text: t('bodySpecialWonderconRedText'),
|
||||
notes: t('bodySpecialWonderconRedNotes'),
|
||||
value: 0,
|
||||
mystery: mystery.wondercon
|
||||
mystery: 'wondercon'
|
||||
},
|
||||
wondercon_gold: {
|
||||
text: t('bodySpecialWonderconGoldText'),
|
||||
notes: t('bodySpecialWonderconGoldNotes'),
|
||||
value: 0,
|
||||
mystery: mystery.wondercon
|
||||
mystery: 'wondercon'
|
||||
},
|
||||
wondercon_black: {
|
||||
text: t('bodySpecialWonderconBlackText'),
|
||||
notes: t('bodySpecialWonderconBlackNotes'),
|
||||
value: 0,
|
||||
mystery: mystery.wondercon
|
||||
mystery: 'wondercon'
|
||||
},
|
||||
summerHealer: {
|
||||
event: events.summer,
|
||||
@@ -11727,19 +11783,25 @@ gear = {
|
||||
201403: {
|
||||
text: t('headAccessoryMystery201403Text'),
|
||||
notes: t('headAccessoryMystery201403Notes'),
|
||||
mystery: mystery['201403'],
|
||||
mystery: '201403',
|
||||
value: 0
|
||||
},
|
||||
201404: {
|
||||
text: t('headAccessoryMystery201404Text'),
|
||||
notes: t('headAccessoryMystery201404Notes'),
|
||||
mystery: mystery['201404'],
|
||||
mystery: '201404',
|
||||
value: 0
|
||||
},
|
||||
201409: {
|
||||
text: t('headAccessoryMystery201409Text'),
|
||||
notes: t('headAccessoryMystery201409Notes'),
|
||||
mystery: mystery['201409'],
|
||||
mystery: '201409',
|
||||
value: 0
|
||||
},
|
||||
301405: {
|
||||
text: t('headAccessoryMystery301405Text'),
|
||||
notes: t('headAccessoryMystery301405Notes'),
|
||||
mystery: '301405',
|
||||
value: 0
|
||||
}
|
||||
}
|
||||
@@ -11758,13 +11820,13 @@ gear = {
|
||||
text: t('eyewearSpecialWonderconRedText'),
|
||||
notes: t('eyewearSpecialWonderconRedNotes'),
|
||||
value: 0,
|
||||
mystery: mystery.wondercon
|
||||
mystery: 'wondercon'
|
||||
},
|
||||
wondercon_black: {
|
||||
text: t('eyewearSpecialWonderconBlackText'),
|
||||
notes: t('eyewearSpecialWonderconBlackNotes'),
|
||||
value: 0,
|
||||
mystery: mystery.wondercon
|
||||
mystery: 'wondercon'
|
||||
},
|
||||
summerRogue: {
|
||||
event: events.summer,
|
||||
@@ -11780,6 +11842,20 @@ gear = {
|
||||
notes: t('eyewearSpecialSummerWarriorNotes'),
|
||||
value: 20
|
||||
}
|
||||
},
|
||||
mystery: {
|
||||
301404: {
|
||||
text: t('eyewearMystery301404Text'),
|
||||
notes: t('eyewearMystery301404Notes'),
|
||||
mystery: '301404',
|
||||
value: 0
|
||||
},
|
||||
301405: {
|
||||
text: t('eyewearMystery301405Text'),
|
||||
notes: t('eyewearMystery301405Notes'),
|
||||
mystery: '301405',
|
||||
value: 0
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -11829,6 +11905,29 @@ _.each(gearTypes, function(type) {
|
||||
});
|
||||
|
||||
|
||||
/*
|
||||
Time Traveler Store, mystery sets need their items mapped in
|
||||
*/
|
||||
|
||||
_.each(api.mystery, function(v, k) {
|
||||
return v.items = _.where(api.gear.flat, {
|
||||
mystery: k
|
||||
});
|
||||
});
|
||||
|
||||
api.timeTravelerStore = function(owned) {
|
||||
var ownedKeys;
|
||||
ownedKeys = _.keys((typeof owned.toObject === "function" ? owned.toObject() : void 0) || owned);
|
||||
return _.reduce(api.mystery, function(m, v, k) {
|
||||
if (k === 'wondercon' || ~ownedKeys.indexOf(v.items[0].key)) {
|
||||
return m;
|
||||
}
|
||||
m[k] = v;
|
||||
return m;
|
||||
}, {});
|
||||
};
|
||||
|
||||
|
||||
/*
|
||||
---------------------------------------------------------------
|
||||
Potion
|
||||
@@ -13621,6 +13720,43 @@ api.backgrounds = {
|
||||
text: t('backgroundStarrySkiesText'),
|
||||
notes: t('backgroundStarrySkiesNotes')
|
||||
}
|
||||
},
|
||||
backgrounds122014: {
|
||||
iceberg: {
|
||||
text: t('backgroundIcebergText'),
|
||||
notes: t('backgroundIcebergNotes')
|
||||
},
|
||||
twinkly_lights: {
|
||||
text: t('backgroundTwinklyLightsText'),
|
||||
notes: t('backgroundTwinklyLightsNotes')
|
||||
},
|
||||
south_pole: {
|
||||
text: t('backgroundSouthPoleText'),
|
||||
notes: t('backgroundSouthPoleNotes')
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
api.subscriptionBlocks = {
|
||||
"1": {
|
||||
months: 1,
|
||||
price: 5,
|
||||
key: 'basic_earned'
|
||||
},
|
||||
"3": {
|
||||
months: 3,
|
||||
price: 15,
|
||||
key: 'basic_3mo'
|
||||
},
|
||||
"6": {
|
||||
months: 6,
|
||||
price: 30,
|
||||
key: 'basic_6mo'
|
||||
},
|
||||
"12": {
|
||||
months: 12,
|
||||
price: 48,
|
||||
key: 'basic_12mo'
|
||||
}
|
||||
};
|
||||
|
||||
@@ -14926,11 +15062,12 @@ api.wrap = function(user, main) {
|
||||
return typeof cb === "function" ? cb(null, _.pick(user, $w('items stats'))) : void 0;
|
||||
},
|
||||
purchase: function(req, cb, ga) {
|
||||
var convCap, convRate, item, key, type, _ref, _ref1, _ref2, _ref3;
|
||||
var convCap, convRate, item, key, type, _ref, _ref1, _ref2;
|
||||
_ref = req.params, type = _ref.type, key = _ref.key;
|
||||
if (type === 'gems' && key === 'gem') {
|
||||
_ref1 = api.planGemLimits, convRate = _ref1.convRate, convCap = _ref1.convCap;
|
||||
if (!((_ref2 = user.purchased) != null ? (_ref3 = _ref2.plan) != null ? _ref3.planId : void 0 : void 0)) {
|
||||
convRate = api.planGemLimits.convRate;
|
||||
convCap = api.planGemLimits + user.purchased.plan.consecutive.gemCapExtra;
|
||||
if (!((_ref1 = user.purchased) != null ? (_ref2 = _ref1.plan) != null ? _ref2.planId : void 0 : void 0)) {
|
||||
return typeof cb === "function" ? cb({
|
||||
code: 401,
|
||||
message: "Must subscribe to purchase gems with GP"
|
||||
@@ -15073,6 +15210,33 @@ api.wrap = function(user, main) {
|
||||
message: message
|
||||
}, _.pick(user, $w('items achievements stats'))) : void 0;
|
||||
},
|
||||
buyMysterySet: function(req, cb) {
|
||||
var mysterySet, _ref;
|
||||
if (!(user.purchased.plan.consecutive.trinkets > 0)) {
|
||||
return typeof cb === "function" ? cb({
|
||||
code: 401,
|
||||
message: "You don't have enough Mystic Hourglasses"
|
||||
}) : void 0;
|
||||
}
|
||||
mysterySet = (_ref = content.timeTravelerStore(user.items.gear.owned)) != null ? _ref[req.params.key] : void 0;
|
||||
if ((typeof window !== "undefined" && window !== null ? window.confirm : void 0) != null) {
|
||||
if (!window.confirm("Buy this full set of items for 1 Mystic Hourglass?")) {
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (!mysterySet) {
|
||||
return typeof cb === "function" ? cb({
|
||||
code: 404,
|
||||
message: "Mystery set not found, or set already owned"
|
||||
}) : void 0;
|
||||
}
|
||||
_.each(mysterySet.items, function(i) {
|
||||
return user.items.gear.owned[i.key] = true;
|
||||
});
|
||||
console.log(user.items.gear.owned);
|
||||
user.purchased.plan.consecutive.trinkets--;
|
||||
return typeof cb === "function" ? cb(null, _.pick(user, $w('items purchased.plan.consecutive'))) : void 0;
|
||||
},
|
||||
sell: function(req, cb) {
|
||||
var key, type, _ref;
|
||||
_ref = req.params, key = _ref.key, type = _ref.type;
|
||||
@@ -15822,7 +15986,7 @@ api.wrap = function(user, main) {
|
||||
{user}
|
||||
*/
|
||||
cron: function(options) {
|
||||
var clearBuffs, daysMissed, expTally, lvl, lvlDiv2, now, perfect, plan, progress, todoTally, _base, _base1, _base2, _base3, _progress, _ref, _ref1, _ref2, _ref3, _ref4;
|
||||
var clearBuffs, daysMissed, expTally, lvl, lvlDiv2, now, perfect, plan, progress, todoTally, _base, _base1, _base2, _base3, _progress, _ref, _ref1, _ref2;
|
||||
if (options == null) {
|
||||
options = {};
|
||||
}
|
||||
@@ -15838,12 +16002,6 @@ api.wrap = function(user, main) {
|
||||
if (user.items.lastDrop.count > 0) {
|
||||
user.items.lastDrop.count = 0;
|
||||
}
|
||||
if ((_ref = user.purchased) != null ? (_ref1 = _ref.plan) != null ? _ref1.customerId : void 0 : void 0) {
|
||||
if (moment(user.purchased.plan.dateUpdated).format('MMYYYY') !== moment().format('MMYYYY')) {
|
||||
user.purchased.plan.gemsBought = 0;
|
||||
user.purchased.plan.dateUpdated = new Date();
|
||||
}
|
||||
}
|
||||
perfect = true;
|
||||
clearBuffs = {
|
||||
str: 0,
|
||||
@@ -15942,7 +16100,7 @@ api.wrap = function(user, main) {
|
||||
date: now,
|
||||
value: expTally
|
||||
});
|
||||
if (!((_ref2 = user.purchased) != null ? (_ref3 = _ref2.plan) != null ? _ref3.customerId : void 0 : void 0)) {
|
||||
if (!((_ref = user.purchased) != null ? (_ref1 = _ref.plan) != null ? _ref1.customerId : void 0 : void 0)) {
|
||||
user.fns.preenUserHistory();
|
||||
if (typeof user.markModified === "function") {
|
||||
user.markModified('history');
|
||||
@@ -15963,14 +16121,37 @@ api.wrap = function(user, main) {
|
||||
if (user.stats.mp > user._statsComputed.maxMP) {
|
||||
user.stats.mp = user._statsComputed.maxMP;
|
||||
}
|
||||
plan = (_ref4 = user.purchased) != null ? _ref4.plan : void 0;
|
||||
if (plan && plan.customerId && plan.dateTerminated && moment(plan.dateTerminated).isBefore(+(new Date))) {
|
||||
_.merge(user.purchased.plan, {
|
||||
planId: null,
|
||||
customerId: null,
|
||||
paymentMethod: null
|
||||
});
|
||||
user.markModified('purchased.plan');
|
||||
plan = (_ref2 = user.purchased) != null ? _ref2.plan : void 0;
|
||||
if (plan != null ? plan.customerId : void 0) {
|
||||
if (moment(plan.dateUpdated).format('MMYYYY') !== moment().format('MMYYYY')) {
|
||||
plan.gemsBought = 0;
|
||||
plan.dateUpdated = new Date();
|
||||
plan.consecutive.count++;
|
||||
if (plan.consecutive.offset > 0) {
|
||||
plan.consecutive.offset--;
|
||||
} else if (plan.consecutive.count % 3 === 0) {
|
||||
plan.consecutive.trinkets++;
|
||||
plan.consecutive.gemCapExtra += 5;
|
||||
if (plan.consecutive.gemCapExtra > 25) {
|
||||
plan.consecutive.gemCapExtra = 25;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (plan.dateTerminated && moment(plan.dateTerminated).isBefore(+(new Date))) {
|
||||
_.merge(plan, {
|
||||
planId: null,
|
||||
customerId: null,
|
||||
paymentMethod: null
|
||||
});
|
||||
_.merge(plan.consecutive, {
|
||||
count: 0,
|
||||
offset: 0,
|
||||
gemCapExtra: 0
|
||||
});
|
||||
if (typeof user.markModified === "function") {
|
||||
user.markModified('purchased.plan');
|
||||
}
|
||||
}
|
||||
}
|
||||
progress = user.party.quest.progress;
|
||||
_progress = _.cloneDeep(progress);
|
||||
|
||||
@@ -1464,25 +1464,25 @@
|
||||
}
|
||||
.hair_mustache_1_porange {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -706px -296px;
|
||||
background-position: -637px -1138px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_mustache_1_porange {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -731px -311px;
|
||||
background-position: -662px -1153px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_mustache_1_ppink {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -728px -1138px;
|
||||
background-position: -706px -296px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_mustache_1_ppink {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -753px -1153px;
|
||||
background-position: -731px -311px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
@@ -2892,323 +2892,359 @@
|
||||
}
|
||||
.hair_bangs_3_pyellow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -637px -1138px;
|
||||
background-position: -546px -1502px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_bangs_3_pyellow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -662px -1153px;
|
||||
background-position: -571px -1517px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_bangs_3_rainbow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -91px -592px;
|
||||
background-position: -637px -1502px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_bangs_3_rainbow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -116px -607px;
|
||||
background-position: -662px -1517px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_bangs_3_red {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: 0px -592px;
|
||||
background-position: -728px -1502px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_bangs_3_red {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -25px -607px;
|
||||
background-position: -753px -1517px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_bangs_3_white {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -565px -444px;
|
||||
background-position: -728px -1138px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_bangs_3_white {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -590px -459px;
|
||||
background-position: -753px -1153px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_bangs_3_winternight {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -706px -478px;
|
||||
background-position: -91px -592px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_bangs_3_winternight {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -731px -493px;
|
||||
background-position: -116px -607px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_bangs_3_yellow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -706px -387px;
|
||||
background-position: 0px -592px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_bangs_3_yellow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -731px -402px;
|
||||
background-position: -25px -607px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_bangs_3_zombie {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -848px -364px;
|
||||
background-position: -565px -444px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_bangs_3_zombie {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -873px -379px;
|
||||
background-position: -590px -459px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_TRUred {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -848px -273px;
|
||||
background-position: -706px -478px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_TRUred {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -873px -288px;
|
||||
background-position: -731px -493px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_black {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -848px -182px;
|
||||
background-position: -706px -387px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_black {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -873px -197px;
|
||||
background-position: -731px -402px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_blond {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -848px -91px;
|
||||
background-position: -848px -364px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_blond {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -873px -106px;
|
||||
background-position: -873px -379px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_blue {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -848px 0px;
|
||||
background-position: -848px -273px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_blue {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -873px -15px;
|
||||
background-position: -873px -288px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_brown {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -728px -683px;
|
||||
background-position: -848px -182px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_brown {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -753px -698px;
|
||||
background-position: -873px -197px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_candycane {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -637px -683px;
|
||||
background-position: -848px -91px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_candycane {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -662px -698px;
|
||||
background-position: -873px -106px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_candycorn {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -546px -683px;
|
||||
background-position: -848px 0px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_candycorn {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -571px -698px;
|
||||
background-position: -873px -15px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_frost {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -455px -683px;
|
||||
background-position: -728px -683px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_frost {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -480px -698px;
|
||||
background-position: -753px -698px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_ghostwhite {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -364px -683px;
|
||||
background-position: -637px -683px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_ghostwhite {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -389px -698px;
|
||||
background-position: -662px -698px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_green {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -273px -683px;
|
||||
background-position: -546px -683px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_green {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -298px -698px;
|
||||
background-position: -571px -698px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_halloween {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -182px -683px;
|
||||
background-position: -455px -683px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_halloween {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -207px -698px;
|
||||
background-position: -480px -698px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_holly {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -91px -683px;
|
||||
background-position: -364px -683px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_holly {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -116px -698px;
|
||||
background-position: -389px -698px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_midnight {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: 0px -683px;
|
||||
background-position: -273px -683px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_midnight {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -25px -698px;
|
||||
background-position: -298px -698px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_pblue {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -728px -592px;
|
||||
background-position: -182px -683px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_pblue {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -753px -607px;
|
||||
background-position: -207px -698px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_pgreen {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -637px -592px;
|
||||
background-position: -91px -683px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_pgreen {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -662px -607px;
|
||||
background-position: -116px -698px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_porange {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -546px -592px;
|
||||
background-position: 0px -683px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_porange {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -571px -607px;
|
||||
background-position: -25px -698px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_ppink {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -455px -592px;
|
||||
background-position: -728px -592px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_ppink {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -480px -607px;
|
||||
background-position: -753px -607px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_ppurple {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -364px -592px;
|
||||
background-position: -637px -592px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_ppurple {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -389px -607px;
|
||||
background-position: -662px -607px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_pumpkin {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -273px -592px;
|
||||
background-position: -546px -592px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_pumpkin {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -298px -607px;
|
||||
background-position: -571px -607px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_purple {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -182px -592px;
|
||||
background-position: -455px -592px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_purple {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -480px -607px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_pyellow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -364px -592px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_pyellow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -389px -607px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_rainbow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -273px -592px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_rainbow {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -298px -607px;
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
}
|
||||
.hair_base_1_red {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -182px -592px;
|
||||
width: 90px;
|
||||
height: 90px;
|
||||
}
|
||||
.customize-option.hair_base_1_red {
|
||||
background-image: url(spritesmith0.png);
|
||||
background-position: -207px -607px;
|
||||
width: 60px;
|
||||
|
||||
|
Before Width: | Height: | Size: 180 KiB After Width: | Height: | Size: 150 KiB |
|
Before Width: | Height: | Size: 109 KiB After Width: | Height: | Size: 87 KiB |
|
Before Width: | Height: | Size: 133 KiB After Width: | Height: | Size: 104 KiB |
|
Before Width: | Height: | Size: 330 KiB After Width: | Height: | Size: 272 KiB |
|
Before Width: | Height: | Size: 264 KiB After Width: | Height: | Size: 210 KiB |
|
Before Width: | Height: | Size: 218 KiB After Width: | Height: | Size: 178 KiB |
|
After Width: | Height: | Size: 3.2 KiB |
|
After Width: | Height: | Size: 378 B |
|
After Width: | Height: | Size: 450 B |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 3.0 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 371 B |
|
After Width: | Height: | Size: 335 B |
|
After Width: | Height: | Size: 292 B |
|
After Width: | Height: | Size: 319 B |
|
After Width: | Height: | Size: 491 B |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 3.1 KiB |
|
After Width: | Height: | Size: 505 B |
|
After Width: | Height: | Size: 5.4 KiB |
|
After Width: | Height: | Size: 5.8 KiB |
@@ -111,6 +111,8 @@
|
||||
|
||||
"weaponMystery201411Text": "Pitchfork of Feasting",
|
||||
"weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.",
|
||||
"weaponMystery301404Text": "Steampunk Cane",
|
||||
"weaponMystery301404Notes": "Excellent for taking a turn about town. March 3015 Subscriber Item. Confers no benefit.",
|
||||
|
||||
"armorBase0Text": "Plain Clothing",
|
||||
"armorBase0Notes": "Ordinary clothing. Confers no benefit.",
|
||||
@@ -223,6 +225,8 @@
|
||||
"armorMystery201409Notes": "A leaf-covered vest that camouflages the wearer. Confers no benefit. September 2014 Subscriber Item.",
|
||||
"armorMystery201410Text": "Goblin Gear",
|
||||
"armorMystery201410Notes": "Scaly, slimy, and strong! Confers no benefit. October 2014 Subscriber Item.",
|
||||
"armorMystery301404Text": "Steampunk Suit",
|
||||
"armorMystery301404Notes": "Dapper and dashing, wot! February 3015 Subscriber Item. Confers no benefit.",
|
||||
|
||||
"headBase0Text": "No Helm",
|
||||
"headBase0Notes": "No headgear.",
|
||||
@@ -321,7 +325,6 @@
|
||||
|
||||
"headMystery201402Text": "Winged Helm",
|
||||
"headMystery201402Notes": "This winged circlet imbues the wearer with the speed of the wind! Confers no benefit. February 2014 Subscriber Item.",
|
||||
|
||||
"headMystery201405Text": "Flame of Mind",
|
||||
"headMystery201405Notes": "Burn away the procrastination! Confers no benefit. May 2014 Subscriber Item.",
|
||||
"headMystery201406Text": "Crown of Tentacles",
|
||||
@@ -332,6 +335,10 @@
|
||||
"headMystery201408Notes": "This blazing crown gives its wearer great strength of will. Confers no benefit. August 2014 Subscriber Item.",
|
||||
"headMystery201411Text": "Steel Helm of Sporting",
|
||||
"headMystery201411Notes": "This is the traditional helmet worn in the beloved Habitican sport of Balance Ball, which consists of covering yourself with heavy protective gear and then committing to a healthy work-life balance..... WHILE PURSUED BY HIPPOGRIFFS. Confers no benefit. November 2014 Subscriber Item.",
|
||||
"headMystery301404Text": "Fancy Top Hat",
|
||||
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
|
||||
"headMystery301405Text": "Basic Top Hat",
|
||||
"headMystery301405Notes": "A basic top hat, just begging to be paired with some fancy head accessories. May 3015 Subscriber Item. Confers no benefit.",
|
||||
|
||||
"shieldBase0Text": "No Off-Hand Equipment",
|
||||
"shieldBase0Notes": "No shield or second weapon.",
|
||||
@@ -392,6 +399,9 @@
|
||||
"shieldSpecialFallHealerText": "Jeweled Shield",
|
||||
"shieldSpecialFallHealerNotes": "This glittery shield was found in an ancient tomb. Increases Constitution by <%= con %>. Limited Edition 2014 Autumn Gear.",
|
||||
|
||||
"shieldMystery301405Text": "Clock Shield",
|
||||
"shieldMystery301405Notes": "Time is on your side with this towering clock shield! June 3015 Subscriber Item. Confers no benefit.",
|
||||
|
||||
"backBase0Text": "No Back Accessory",
|
||||
"backBase0Notes": "No Back Accessory.",
|
||||
|
||||
@@ -438,10 +448,11 @@
|
||||
"headAccessoryMystery201403Notes": "These antlers shimmer with moss and lichen. Confers no benefit. March 2014 Subscriber Item.",
|
||||
"headAccessoryMystery201404Text": "Twilight Butterfly Antennae",
|
||||
"headAccessoryMystery201404Notes": "These antennae help the wearer sense dangerous distractions!",
|
||||
|
||||
"headAccessoryMystery201404Notes": "These antennae help the wearer sense dangerous distractions! Confers no benefit. April 2014 Subscriber Item.",
|
||||
"headAccessoryMystery201409Text": "Autumn Antlers",
|
||||
"headAccessoryMystery201409Notes": "These powerful antlers change colors with the leaves. Confers no benefit. September 2014 Subscriber Item.",
|
||||
"headAccessoryMystery301405Text": "Headwear Goggles",
|
||||
"headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! August 3015 Subscriber Item. Confers no benefit.",
|
||||
|
||||
"eyewearBase0Text": "No Eyewear",
|
||||
"eyewearBase0Notes": "No Eyewear.",
|
||||
@@ -454,5 +465,10 @@
|
||||
"eyewearSpecialWonderconRedText": "Mighty Mask",
|
||||
"eyewearSpecialWonderconRedNotes": "What a powerful face accessory! Confers no benefit. Special Edition Convention Item.",
|
||||
"eyewearSpecialWonderconBlackText": "Sneaky Mask",
|
||||
"eyewearSpecialWonderconBlackNotes": "Your motives are definitely legitimate. Confers no benefit. Special Edition Convention Item."
|
||||
"eyewearSpecialWonderconBlackNotes": "Your motives are definitely legitimate. Confers no benefit. Special Edition Convention Item.",
|
||||
|
||||
"eyewearMystery301404Text": "Eyewear Goggles",
|
||||
"eyewearMystery301404Notes": "No eyewear could be fancier than a pair of goggles - except, perhaps, for a monocle. April 3015 Subscriber Item. Confers no benefit.",
|
||||
"eyewearMystery301405Text": "Monocle",
|
||||
"eyewearMystery301405Notes": "No eyewear could be fancier than a monocle - except, perhaps, for a pair of goggles. July 3015 Subscriber Item. Confers no benefit."
|
||||
}
|
||||
|
||||
@@ -27,18 +27,21 @@ events =
|
||||
gaymerx: {start:'2014-07-02',end:'2014-08-01'}
|
||||
fall: {start:'2014-09-21',end:'2014-11-01'}
|
||||
|
||||
mystery =
|
||||
201402: {start:'2014-02-22',end:'2014-02-28'}
|
||||
201403: {start:'2014-03-24',end:'2014-04-02'}
|
||||
201404: {start:'2014-04-24',end:'2014-05-02'}
|
||||
201405: {start:'2014-05-21',end:'2014-06-02'}
|
||||
201406: {start:'2014-06-23',end:'2014-07-02'}
|
||||
201407: {start:'2014-07-23',end:'2014-08-02'}
|
||||
201408: {start:'2014-08-23',end:'2014-09-02'}
|
||||
201409: {start:'2014-09-24',end:'2014-10-02'}
|
||||
201410: {start:'2014-10-24',end:'2014-11-02'}
|
||||
201411: {start:'2014-11-24',end:'2014-12-02'}
|
||||
api.mystery =
|
||||
201402: {start:'2014-02-22',end:'2014-02-28', text:'Winged Messenger Set'}
|
||||
201403: {start:'2014-03-24',end:'2014-04-02', text:'Forest Walker Set'}
|
||||
201404: {start:'2014-04-24',end:'2014-05-02', text:'Twilight Butterfly Set'}
|
||||
201405: {start:'2014-05-21',end:'2014-06-02', text:'Flame Wielder Set'}
|
||||
201406: {start:'2014-06-23',end:'2014-07-02', text:'Octomage Set'}
|
||||
201407: {start:'2014-07-23',end:'2014-08-02', text:'Undersea Explorer Set'}
|
||||
201408: {start:'2014-08-23',end:'2014-09-02', text:'Sun Sorcerer Set'}
|
||||
201409: {start:'2014-09-24',end:'2014-10-02', text:'Autumn Strider Item Set'}
|
||||
201410: {start:'2014-10-24',end:'2014-11-02', text:'Winged Goblin Set'}
|
||||
201411: {start:'2014-11-24',end:'2014-12-02', text:'Feast and Fun Set'}
|
||||
301404: {start:'3014-03-24',end:'3014-04-02', text:'Steampunk Standard Set'}
|
||||
301405: {start:'3014-04-24',end:'3014-05-02', text:'Steampunk Accessories Set'}
|
||||
wondercon: {start:'2014-03-24',end:'2014-04-01'} # not really, but the mechanic works
|
||||
_.each api.mystery, (v,k)->v.key = k
|
||||
|
||||
gear =
|
||||
weapon:
|
||||
@@ -112,7 +115,8 @@ gear =
|
||||
fallMage: event: events.fall, specialClass: 'wizard', twoHanded:true, text: t('weaponSpecialFallMageText'), notes: t('weaponSpecialFallMageNotes', {int: 15, per: 7}), value: 160, int:15, per:7
|
||||
fallHealer: event: events.fall, specialClass: 'healer', text: t('weaponSpecialFallHealerText'), notes: t('weaponSpecialFallHealerNotes', {int: 9}), value: 90, int: 9
|
||||
mystery:
|
||||
201411: text: t('weaponMystery201411Text'), notes: t('weaponMystery201411Notes'), mystery:mystery['201411'], value: 0
|
||||
201411: text: t('weaponMystery201411Text'), notes: t('weaponMystery201411Notes'), mystery:'201411', value: 0
|
||||
301404: text: t('weaponMystery301404Text'), notes: t('weaponMystery301404Notes'), mystery:'301404', value: 0
|
||||
|
||||
armor:
|
||||
base:
|
||||
@@ -173,14 +177,15 @@ gear =
|
||||
# Other
|
||||
gaymerx: event: events.gaymerx, text: t('armorSpecialGaymerxText'), notes: t('armorSpecialGaymerxNotes'), value: 0
|
||||
mystery:
|
||||
201402: text: t('armorMystery201402Text'), notes: t('armorMystery201402Notes'), mystery:mystery['201402'], value: 0
|
||||
201403: text: t('armorMystery201403Text'), notes: t('armorMystery201403Notes'), mystery:mystery['201403'], value: 0
|
||||
201405: text: t('armorMystery201405Text'), notes: t('armorMystery201405Notes'), mystery:mystery['201405'], value: 0
|
||||
201406: text: t('armorMystery201406Text'), notes: t('armorMystery201406Notes'), mystery:mystery['201406'], value: 0
|
||||
201407: text: t('armorMystery201407Text'), notes: t('armorMystery201407Notes'), mystery:mystery['201407'], value: 0
|
||||
201408: text: t('armorMystery201408Text'), notes: t('armorMystery201408Notes'), mystery:mystery['201408'], value: 0
|
||||
201409: text: t('armorMystery201409Text'), notes: t('armorMystery201409Notes'), mystery:mystery['201409'], value: 0
|
||||
201410: text: t('armorMystery201410Text'), notes: t('armorMystery201410Notes'), mystery:mystery['201410'], value: 0
|
||||
201402: text: t('armorMystery201402Text'), notes: t('armorMystery201402Notes'), mystery:'201402', value: 0
|
||||
201403: text: t('armorMystery201403Text'), notes: t('armorMystery201403Notes'), mystery:'201403', value: 0
|
||||
201405: text: t('armorMystery201405Text'), notes: t('armorMystery201405Notes'), mystery:'201405', value: 0
|
||||
201406: text: t('armorMystery201406Text'), notes: t('armorMystery201406Notes'), mystery:'201406', value: 0
|
||||
201407: text: t('armorMystery201407Text'), notes: t('armorMystery201407Notes'), mystery:'201407', value: 0
|
||||
201408: text: t('armorMystery201408Text'), notes: t('armorMystery201408Notes'), mystery:'201408', value: 0
|
||||
201409: text: t('armorMystery201409Text'), notes: t('armorMystery201409Notes'), mystery:'201409', value: 0
|
||||
201410: text: t('armorMystery201410Text'), notes: t('armorMystery201410Notes'), mystery:'201410', value: 0
|
||||
301404: text: t('armorMystery301404Text'), notes: t('armorMystery301404Notes'), mystery:'301404', value: 0
|
||||
|
||||
head:
|
||||
base:
|
||||
@@ -241,12 +246,14 @@ gear =
|
||||
# Other
|
||||
gaymerx: event: events.gaymerx, text: t('headSpecialGaymerxText'), notes: t('headSpecialGaymerxNotes'), value: 0
|
||||
mystery:
|
||||
201402: text: t('headMystery201402Text'), notes: t('headMystery201402Notes'), mystery:mystery['201402'], value: 0
|
||||
201405: text: t('headMystery201405Text'), notes: t('headMystery201405Notes'), mystery:mystery['201405'], value: 0
|
||||
201406: text: t('headMystery201406Text'), notes: t('headMystery201406Notes'), mystery:mystery['201406'], value: 0
|
||||
201407: text: t('headMystery201407Text'), notes: t('headMystery201407Notes'), mystery:mystery['201407'], value: 0
|
||||
201408: text: t('headMystery201408Text'), notes: t('headMystery201408Notes'), mystery:mystery['201408'], value: 0
|
||||
201411: text: t('headMystery201411Text'), notes: t('headMystery201411Notes'), mystery:mystery['201411'], value: 0
|
||||
201402: text: t('headMystery201402Text'), notes: t('headMystery201402Notes'), mystery:'201402', value: 0
|
||||
201405: text: t('headMystery201405Text'), notes: t('headMystery201405Notes'), mystery:'201405', value: 0
|
||||
201406: text: t('headMystery201406Text'), notes: t('headMystery201406Notes'), mystery:'201406', value: 0
|
||||
201407: text: t('headMystery201407Text'), notes: t('headMystery201407Notes'), mystery:'201407', value: 0
|
||||
201408: text: t('headMystery201408Text'), notes: t('headMystery201408Notes'), mystery:'201408', value: 0
|
||||
201411: text: t('headMystery201411Text'), notes: t('headMystery201411Notes'), mystery:'201411', value: 0
|
||||
301404: text: t('headMystery301404Text'), notes: t('headMystery301404Notes'), mystery:'301404', value: 0
|
||||
301405: text: t('headMystery301405Text'), notes: t('headMystery301405Notes'), mystery:'301405', value: 0
|
||||
|
||||
shield:
|
||||
base:
|
||||
@@ -296,25 +303,27 @@ gear =
|
||||
fallRogue: event: events.fall, specialClass: 'rogue', text: t('shieldSpecialFallRogueText'), notes: t('shieldSpecialFallRogueNotes', {str: 8}), value: 80, str: 8
|
||||
fallWarrior: event: events.fall, specialClass: 'warrior', text: t('shieldSpecialFallWarriorText'), notes: t('shieldSpecialFallWarriorNotes', {con: 7}), value: 70, con: 7
|
||||
fallHealer: event: events.fall, specialClass: 'healer', text: t('shieldSpecialFallHealerText'), notes: t('shieldSpecialFallHealerNotes', {con: 9}), value: 70, con: 9
|
||||
mystery:
|
||||
301405: text: t('shieldMystery301405Text'), notes: t('shieldMystery301405Notes'), mystery:'301405', value: 0
|
||||
|
||||
back:
|
||||
base:
|
||||
0: text: t('backBase0Text'), notes: t('backBase0Notes'), value:0
|
||||
mystery:
|
||||
201402: text: t('backMystery201402Text'), notes: t('backMystery201402Notes'), mystery:mystery['201402'], value: 0
|
||||
201404: text: t('backMystery201404Text'), notes: t('backMystery201404Notes'), mystery:mystery['201404'], value: 0
|
||||
201410: text: t('backMystery201410Text'), notes: t('backMystery201410Notes'), mystery:mystery['201410'], value: 0
|
||||
201402: text: t('backMystery201402Text'), notes: t('backMystery201402Notes'), mystery:'201402', value: 0
|
||||
201404: text: t('backMystery201404Text'), notes: t('backMystery201404Notes'), mystery:'201404', value: 0
|
||||
201410: text: t('backMystery201410Text'), notes: t('backMystery201410Notes'), mystery:'201410', value: 0
|
||||
special:
|
||||
wondercon_red: text: t('backSpecialWonderconRedText'), notes: t('backSpecialWonderconRedNotes'), value: 0, mystery:mystery.wondercon
|
||||
wondercon_black: text: t('backSpecialWonderconBlackText'), notes: t('backSpecialWonderconBlackNotes'), value: 0, mystery:mystery.wondercon
|
||||
wondercon_red: text: t('backSpecialWonderconRedText'), notes: t('backSpecialWonderconRedNotes'), value: 0, mystery:'wondercon'
|
||||
wondercon_black: text: t('backSpecialWonderconBlackText'), notes: t('backSpecialWonderconBlackNotes'), value: 0, mystery:'wondercon'
|
||||
|
||||
body:
|
||||
base:
|
||||
0: text: t('bodyBase0Text'), notes:t('bodyBase0Notes'), value:0
|
||||
special:
|
||||
wondercon_red: text: t('bodySpecialWonderconRedText'), notes: t('bodySpecialWonderconRedNotes'), value: 0, mystery:mystery.wondercon
|
||||
wondercon_gold: text: t('bodySpecialWonderconGoldText'), notes: t('bodySpecialWonderconGoldNotes'), value: 0, mystery:mystery.wondercon
|
||||
wondercon_black: text: t('bodySpecialWonderconBlackText'), notes: t('bodySpecialWonderconBlackNotes'), value: 0, mystery:mystery.wondercon
|
||||
wondercon_red: text: t('bodySpecialWonderconRedText'), notes: t('bodySpecialWonderconRedNotes'), value: 0, mystery:'wondercon'
|
||||
wondercon_gold: text: t('bodySpecialWonderconGoldText'), notes: t('bodySpecialWonderconGoldNotes'), value: 0, mystery:'wondercon'
|
||||
wondercon_black: text: t('bodySpecialWonderconBlackText'), notes: t('bodySpecialWonderconBlackNotes'), value: 0, mystery:'wondercon'
|
||||
# Summer
|
||||
summerHealer: event: events.summer, specialClass: 'healer', text: t('bodySpecialSummerHealerText'), notes: t('bodySpecialSummerHealerNotes'), value: 20
|
||||
summerMage: event: events.summer, specialClass: 'wizard', text: t('bodySpecialSummerMageText'), notes: t('bodySpecialSummerMageNotes'), value: 20
|
||||
@@ -330,19 +339,23 @@ gear =
|
||||
springHealer: event: events.spring, specialClass: 'healer', text: t('headAccessorySpecialSpringHealerText'), notes: t('headAccessorySpecialSpringHealerNotes'), value: 20
|
||||
|
||||
mystery:
|
||||
201403: text: t('headAccessoryMystery201403Text'), notes: t('headAccessoryMystery201403Notes'), mystery:mystery['201403'], value: 0
|
||||
201404: text: t('headAccessoryMystery201404Text'), notes: t('headAccessoryMystery201404Notes'), mystery:mystery['201404'], value: 0
|
||||
201409: text: t('headAccessoryMystery201409Text'), notes: t('headAccessoryMystery201409Notes'), mystery:mystery['201409'], value: 0
|
||||
201403: text: t('headAccessoryMystery201403Text'), notes: t('headAccessoryMystery201403Notes'), mystery:'201403', value: 0
|
||||
201404: text: t('headAccessoryMystery201404Text'), notes: t('headAccessoryMystery201404Notes'), mystery:'201404', value: 0
|
||||
201409: text: t('headAccessoryMystery201409Text'), notes: t('headAccessoryMystery201409Notes'), mystery:'201409', value: 0
|
||||
301405: text: t('headAccessoryMystery301405Text'), notes: t('headAccessoryMystery301405Notes'), mystery:'301405', value: 0
|
||||
|
||||
eyewear:
|
||||
base:
|
||||
0: text: t('eyewearBase0Text'), notes: t('eyewearBase0Notes'), value: 0, last: true
|
||||
special:
|
||||
wondercon_red: text: t('eyewearSpecialWonderconRedText'), notes: t('eyewearSpecialWonderconRedNotes'), value: 0, mystery:mystery.wondercon
|
||||
wondercon_black: text: t('eyewearSpecialWonderconBlackText'), notes: t('eyewearSpecialWonderconBlackNotes'), value: 0, mystery:mystery.wondercon
|
||||
wondercon_red: text: t('eyewearSpecialWonderconRedText'), notes: t('eyewearSpecialWonderconRedNotes'), value: 0, mystery:'wondercon'
|
||||
wondercon_black: text: t('eyewearSpecialWonderconBlackText'), notes: t('eyewearSpecialWonderconBlackNotes'), value: 0, mystery:'wondercon'
|
||||
#Summer
|
||||
summerRogue: event: events.summer, specialClass: 'rogue', text: t('eyewearSpecialSummerRogueText'), notes: t('eyewearSpecialSummerRogueNotes'), value: 20
|
||||
summerWarrior: event: events.summer, specialClass: 'warrior', text: t('eyewearSpecialSummerWarriorText'), notes: t('eyewearSpecialSummerWarriorNotes'), value: 20
|
||||
mystery:
|
||||
301404: text: t('eyewearMystery301404Text'), notes: t('eyewearMystery301404Notes'), mystery:'301404', value: 0
|
||||
301405: text: t('eyewearMystery301405Text'), notes: t('eyewearMystery301405Notes'), mystery:'301405', value: 0
|
||||
|
||||
###
|
||||
The gear is exported as a tree (defined above), and a flat list (eg, {weapon_healer_1: .., shield_special_0: ...}) since
|
||||
@@ -373,6 +386,17 @@ _.each gearTypes, (type) ->
|
||||
|
||||
api.gear.flat[key] = item
|
||||
|
||||
###
|
||||
Time Traveler Store, mystery sets need their items mapped in
|
||||
###
|
||||
_.each api.mystery, (v,k)-> v.items = _.where api.gear.flat, {mystery:k}
|
||||
api.timeTravelerStore = (owned) ->
|
||||
ownedKeys = _.keys owned.toObject?() or owned # mongoose workaround
|
||||
_.reduce api.mystery, (m,v,k)->
|
||||
return m if k=='wondercon' or ~ownedKeys.indexOf(v.items[0].key) # skip wondercon and already-owned sets
|
||||
m[k] = v;m
|
||||
, {}
|
||||
|
||||
###
|
||||
---------------------------------------------------------------
|
||||
Potion
|
||||
@@ -1371,6 +1395,12 @@ api.backgrounds =
|
||||
text: t('backgroundSouthPoleText')
|
||||
notes: t('backgroundSouthPoleNotes')
|
||||
|
||||
api.subscriptionBlocks =
|
||||
"1": months:1, price:5, key: 'basic_earned'
|
||||
"3": months:3, price:15, key: 'basic_3mo'
|
||||
"6": months:6, price:30, key: 'basic_6mo'
|
||||
"12": months:12, price:48, key: 'basic_12mo'
|
||||
|
||||
repeat = {m:true,t:true,w:true,th:true,f:true,s:true,su:true}
|
||||
api.userDefaults =
|
||||
habits: [
|
||||
|
||||
@@ -694,7 +694,8 @@ api.wrap = (user, main=true) ->
|
||||
{type,key} = req.params
|
||||
|
||||
if type is 'gems' and key is 'gem'
|
||||
{convRate,convCap} = api.planGemLimits
|
||||
{convRate} = api.planGemLimits
|
||||
convCap = api.planGemLimits + user.purchased.plan.consecutive.gemCapExtra
|
||||
return cb?({code:401,message:"Must subscribe to purchase gems with GP"},req) unless user.purchased?.plan?.planId
|
||||
return cb?({code:401,message:"Not enough Gold"}) unless user.stats.gp >= convRate
|
||||
return cb?({code:401,message:"You've reached the Gold=>Gem conversion cap (#{convCap}) for this month. We have this to prevent abuse / farming. The cap will reset within the first three days of next month."}) if user.purchased.plan.gemsBought >= convCap
|
||||
@@ -762,6 +763,18 @@ api.wrap = (user, main=true) ->
|
||||
user.stats.gp -= item.value
|
||||
cb? {code:200, message}, _.pick(user,$w 'items achievements stats')
|
||||
|
||||
buyMysterySet: (req, cb)->
|
||||
return cb?({code:401, message:"You don't have enough Mystic Hourglasses"}) unless user.purchased.plan.consecutive.trinkets>0
|
||||
mysterySet = content.timeTravelerStore(user.items.gear.owned)?[req.params.key]
|
||||
# console.log {mysterySet, key:req.params.key, store:content.timeTravelerStore(user.items.gear.owned), mysteryItems:content.mystery}
|
||||
if window?.confirm?
|
||||
return unless window.confirm("Buy this full set of items for 1 Mystic Hourglass?")
|
||||
return cb?({code:404, message:"Mystery set not found, or set already owned"}) unless mysterySet
|
||||
_.each mysterySet.items, (i)->user.items.gear.owned[i.key]=true
|
||||
console.log(user.items.gear.owned)
|
||||
user.purchased.plan.consecutive.trinkets--
|
||||
cb? null, _.pick(user,$w 'items purchased.plan.consecutive')
|
||||
|
||||
sell: (req, cb) ->
|
||||
{key, type} = req.params
|
||||
return cb?({code:404,message:":type not found. Must bes in [eggs, hatchingPotions, food]"}) unless type in ['eggs','hatchingPotions', 'food']
|
||||
@@ -1377,13 +1390,6 @@ api.wrap = (user, main=true) ->
|
||||
if user.items.lastDrop.count > 0
|
||||
user.items.lastDrop.count = 0
|
||||
|
||||
# Reset caps for subscribers
|
||||
if user.purchased?.plan?.customerId
|
||||
if moment(user.purchased.plan.dateUpdated).format('MMYYYY') != moment().format('MMYYYY')
|
||||
#+moment().format('D') >= +moment(user.purchased.plan.dateCreated).format('D') and
|
||||
user.purchased.plan.gemsBought = 0
|
||||
user.purchased.plan.dateUpdated = new Date()
|
||||
|
||||
# "Perfect Day" achievement for perfect-days
|
||||
perfect = true
|
||||
clearBuffs = {str:0,int:0,per:0,con:0,stealth:0,streaks:false}
|
||||
@@ -1466,16 +1472,30 @@ api.wrap = (user, main=true) ->
|
||||
else clearBuffs
|
||||
|
||||
# Add 10 MP, or 10% of max MP if that'd be more. Perform this after Perfect Day for maximum benefit
|
||||
|
||||
user.stats.mp += _.max([10,.1 * user._statsComputed.maxMP])
|
||||
user.stats.mp = user._statsComputed.maxMP if user.stats.mp > user._statsComputed.maxMP
|
||||
|
||||
|
||||
# If user cancelled subscription, we give them until 30day's end until it terminates
|
||||
# end-of-month perks for subscribers
|
||||
plan = user.purchased?.plan
|
||||
if plan && plan.customerId && plan.dateTerminated && moment(plan.dateTerminated).isBefore(+new Date)
|
||||
_.merge user.purchased.plan, {planId:null, customerId:null, paymentMethod:null}
|
||||
user.markModified 'purchased.plan'
|
||||
if plan?.customerId
|
||||
if moment(plan.dateUpdated).format('MMYYYY') != moment().format('MMYYYY')
|
||||
plan.gemsBought = 0 # reset gem-cap
|
||||
plan.dateUpdated = new Date()
|
||||
# For every month, inc their "consecutive months" counter. Give perks based on consecutive blocks
|
||||
# If they already got perks for those blocks (eg, 6mo subscription, subscription gifts, etc) - then dec the offset until it hits 0
|
||||
# TODO use month diff instead of ++ / --?
|
||||
plan.consecutive.count++
|
||||
if plan.consecutive.offset > 0
|
||||
plan.consecutive.offset--
|
||||
else if plan.consecutive.count%3==0 # every 3 months
|
||||
plan.consecutive.trinkets++
|
||||
plan.consecutive.gemCapExtra+=5
|
||||
plan.consecutive.gemCapExtra=25 if plan.consecutive.gemCapExtra>25 # cap it at 50 (hard 25 limit + extra 25)
|
||||
# If user cancelled subscription, we give them until 30day's end until it terminates
|
||||
if plan.dateTerminated && moment(plan.dateTerminated).isBefore(+new Date)
|
||||
_.merge plan, {planId:null, customerId:null, paymentMethod:null}
|
||||
_.merge plan.consecutive, {count:0, offset:0, gemCapExtra:0}
|
||||
user.markModified? 'purchased.plan'
|
||||
|
||||
# After all is said and done, progress up user's effect on quest, return those values & reset the user's
|
||||
progress = user.party.quest.progress; _progress = _.cloneDeep progress
|
||||
|
||||