diff --git a/.eslintignore b/.eslintignore
index 7b618cca64..d2db8508cf 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -10,12 +10,5 @@ apidoc_build/
content_cache/
node_modules/
-# Not linted
-website/client-old/
-test/client-old/spec/**/*
-
-# Temporarilly disabled. These should be removed when the linting errors are fixed TODO
-migrations/*
-scripts/*
-website/common/browserify.js
-Gruntfile.js
+# Old migrations, disabled
+migrations/archive/*
\ No newline at end of file
diff --git a/.travis.yml b/.travis.yml
index d27fcdee9a..537e118839 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -6,6 +6,8 @@ services:
cache:
directories:
- 'node_modules'
+addons:
+ chrome: stable
before_install:
- npm install -g npm@5
before_script:
@@ -25,4 +27,5 @@ env:
- TEST="test:sanity"
- TEST="test:content" COVERAGE=true
- TEST="test:common" COVERAGE=true
+ - TEST="client:unit" COVERAGE=true
- TEST="apidoc"
diff --git a/Dockerfile-Production b/Dockerfile-Production
index cfc38b6454..6f5edd1e4d 100644
--- a/Dockerfile-Production
+++ b/Dockerfile-Production
@@ -20,7 +20,7 @@ RUN npm install -g gulp-cli mocha
# Clone Habitica repo and install dependencies
RUN mkdir -p /usr/src/habitrpg
WORKDIR /usr/src/habitrpg
-RUN git clone --branch v4.27.0 https://github.com/HabitRPG/habitica.git /usr/src/habitrpg
+RUN git clone --branch v4.27.4 https://github.com/HabitRPG/habitica.git /usr/src/habitrpg
RUN npm install
RUN gulp build:prod --force
diff --git a/README.md b/README.md
index 85dc8c0edb..22b1589b9b 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,8 @@
-Habitica [](https://travis-ci.org/HabitRPG/habitica) [](https://codeclimate.com/github/HabitRPG/habitrpg) [](https://coveralls.io/github/HabitRPG/habitica?branch=develop) [](https://www.bountysource.com/trackers/68393-habitrpg?utm_source=68393&utm_medium=shield&utm_campaign=TRACKER_BADGE)
+Habitica [](https://travis-ci.org/HabitRPG/habitica) [](https://codeclimate.com/github/HabitRPG/habitrpg) [](https://coveralls.io/github/HabitRPG/habitica?branch=develop) [](https://www.bountysource.com/trackers/68393-habitrpg?utm_source=68393&utm_medium=shield&utm_campaign=TRACKER_BADGE) [](https://www.codetriage.com/habitrpg/habitica)
===============
+[](https://greenkeeper.io/)
+
[Habitica](https://habitica.com) is an open source habit building program which treats your life like a Role Playing Game. Level up as you succeed, lose HP as you fail, earn money to buy weapons and armor.
We need more programmers! Your assistance will be greatly appreciated.
diff --git a/migrations/.eslintrc b/migrations/.eslintrc
new file mode 100644
index 0000000000..6509e9ee6b
--- /dev/null
+++ b/migrations/.eslintrc
@@ -0,0 +1,7 @@
+{
+ "root": false,
+ "rules": {
+ "no-console": 0,
+ "no-use-before-define": ["error", { "functions": false }]
+ }
+}
diff --git a/migrations/20130128_add_missing_crons.js b/migrations/20130128_add_missing_crons.js
deleted file mode 100644
index 1a4c919cc2..0000000000
--- a/migrations/20130128_add_missing_crons.js
+++ /dev/null
@@ -1,5 +0,0 @@
-db.users.update(
- { lastCron: { $exists: false} },
- { $set: { lastCron: +new Date } },
- { multi: true }
-);
\ No newline at end of file
diff --git a/migrations/20130128_merge_completed_todo_ids.js b/migrations/20130128_merge_completed_todo_ids.js
deleted file mode 100644
index d362a4b771..0000000000
--- a/migrations/20130128_merge_completed_todo_ids.js
+++ /dev/null
@@ -1,15 +0,0 @@
-db.users.find({ completedIds: { $exists: true } }).forEach(function(user) {
- var newTodoIds = user.todoIds;
- user.completedIds.forEach(function(value) {
- if (newTodoIds.indexOf(value) === -1) {
- newTodoIds.push(value)
- }
- });
- db.users.update(
- { _id: user._id },
- {
- $set: { todoIds: newTodoIds },
- $unset: { completedIds: 1 }
- }
- );
-});
\ No newline at end of file
diff --git a/migrations/20130129_add_missing_preferences.js b/migrations/20130129_add_missing_preferences.js
deleted file mode 100644
index f4e7b55762..0000000000
--- a/migrations/20130129_add_missing_preferences.js
+++ /dev/null
@@ -1,5 +0,0 @@
-db.users.update(
- {preferences:{$exists:false}},
- {$set:{preferences:{gender: 'm', armorSet: 'v1'}}},
- {multi:true}
-)
diff --git a/migrations/20130204_user_public_private_paths.js b/migrations/20130204_user_public_private_paths.js
deleted file mode 100644
index 7f43148350..0000000000
--- a/migrations/20130204_user_public_private_paths.js
+++ /dev/null
@@ -1,102 +0,0 @@
-// %mongo server:27017/dbname underscore.js my_commands.js
-// %mongo server:27017/dbname underscore.js --shell
-
-//db.users.find({'auth.facebook.email': 'tylerrenelle@gmail.com'}).forEach(function(user){
-db.users.find().forEach(function(user){
-
- if (!user._id) {
- print("User has null _id");
- return; // need to figure out how to delete these buggers if they don't have an id to delete from
- }
-
- if (!!user.idLists) {
- print("User " + user._id + " has already been migrated")
- return
- }
-
- if (user._id.indexOf("$") === 0) {
- print("User id starts with $ (" + user._id + ")")
- return;
- }
-
- // even though we're clobbering user later, sometimes these are undefined and crash the script
- // this saves us some ternaries
- user.stats = user.stats || {};
- user.items = user.items || {};
- user.preferences = user.preferences || {};
- user.notifications = user.notifications || {};
- user.flags = user.flags || {};
- user.habitIds = user.habitIds || [];
- user.dailyIds = user.dailyIds || [];
- user.todoIds = user.todoIds || [];
- user.rewardIds = user.rewardIds|| [];
-
- _.each(user.tasks, function(task, key){
- if (!task.type) {
- delete user.tasks[key];
- // idList will take care of itself on page-load
- return
- }
- if (key == '$spec') {
- print("$spec was found: " + user._id);
- return
- }
- if (key.indexOf("$_") === 0) {
- var newKey = key.replace("$_", ''),
- index = user[task.type + "Ids"].indexOf(key)
- user[task.type + "Ids"][index] = newKey;
- task.id = newKey
- user.tasks[newKey] = task
- // TODO make sure this is ok, that we're not deleting the original
- // Otherwise use lodash.cloneDeep
- delete user.tasks[key]
- }
- });
-
- // New user schema has public and private paths, so we can setup proper access control with racer
- // Note 'public' and 'private' are reserved words
- var newUser = {
- auth: user.auth, // we need this top-level due to derby-auth
- apiToken: user.preferences.api_token || null, // set on update, we need derby.uuid()
- preferences: {
- armorSet: user.preferences.armorSet || 'v1',
- gender: user.preferences.gender || 'm'
- },
- balance: user.balance || 2,
- lastCron: user.lastCron || +new Date,
- history: user.history || [],
- stats: {
- gp: user.stats.money || 0,
- hp: user.stats.hp || 50,
- exp: user.stats.exp || 0,
- lvl: user.stats.lvl || 1
- },
- items: {
- armor: user.items.armor || 0,
- weapon: user.items.weapon || 0
- },
- tasks: user.tasks || {},
- idLists: {
- habit: user.habitIds || [],
- daily: user.dailyIds || [],
- todo: user.todoIds || [],
- reward: user.rewardIds || []
- },
- flags: {
- partyEnabled: false,
- itemsEnabled: user.items.itemsEnabled || false,
- kickstarter: user.notifications.kickstarter || 'show',
- ads: user.flags.ads || null // null because it's set on registration
- },
- party: {
- current: null,
- invitation: null
- }
- };
-
- try {
- db.users.update({_id:user._id}, newUser);
- } catch(e) {
- print(e);
- }
-})
\ No newline at end of file
diff --git a/migrations/20130208_idLists_to_typeIds.js b/migrations/20130208_idLists_to_typeIds.js
deleted file mode 100644
index f22dc25be7..0000000000
--- a/migrations/20130208_idLists_to_typeIds.js
+++ /dev/null
@@ -1,19 +0,0 @@
-// move idList back to root-level, is what's causing the sort bug - see https://github.com/codeparty/racer/pull/73
-
-// We could just delete user.idLists, since it's re-created on refresh. However, users's first refresh will scare them
-// since everything will dissappear - second refresh will bring everything back.
-db.users.find().forEach(function(user){
- if (!user.idLists) return;
- db.users.update(
- {_id:user._id},
- {
- $set:{
- 'habitIds':user.idLists.habit,
- 'dailyIds':user.idLists.daily,
- 'todoIds':user.idLists.todo,
- 'rewardIds':user.idLists.reward
- }
- //$unset:{idLists:true} // run this after the code has been pushed
- }
- )
-})
\ No newline at end of file
diff --git a/migrations/20130208_user_customizations.js b/migrations/20130208_user_customizations.js
deleted file mode 100644
index 07b1dfb08f..0000000000
--- a/migrations/20130208_user_customizations.js
+++ /dev/null
@@ -1,20 +0,0 @@
-db.users.update(
- {items:{$exists:0}},
- {$set:{items:{weapon: 0, armor: 0, head: 0, shield: 0 }}},
- {multi:true}
-);
-
-db.users.find().forEach(function(user){
-
- var updates = {
- // I'm not racist, these were just the defaults before ;)
- 'preferences.skin': 'white',
- 'preferences.hair': 'blond',
-
- 'items.head': user.items.armor,
- 'items.shield': user.items.armor,
- }
-
- db.users.update({_id:user._id}, {$set:updates});
-
-})
\ No newline at end of file
diff --git a/migrations/20130307_exp_overflow.js b/migrations/20130307_exp_overflow.js
deleted file mode 100644
index 44fb2904b4..0000000000
--- a/migrations/20130307_exp_overflow.js
+++ /dev/null
@@ -1,39 +0,0 @@
-// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130307_normalize_algo_values.js
-
-/**
- * Make sure people aren't overflowing their exp with the new system
- */
-db.users.find().forEach(function(user){
- function oldTnl(level) {
- return (Math.pow(level,2)*10)+(level*10)+80
- }
-
- function newTnl(level) {
- var value = 0;
- if (level >= 100) {
- value = 0
- } else {
- value = Math.round(((Math.pow(level,2)*0.25)+(10 * level) + 139.75)/10)*10; // round to nearest 10
- }
- return value
- }
-
- var newTnl = newTnl(user.stats.lvl);
- if (user.stats.exp > newTnl) {
- var percent = user.stats.exp / oldTnl(user.stats.lvl);
- percent = (percent>1) ? 1 : percent;
- user.stats.exp = newTnl * percent;
-
- try {
- db.users.update(
- {_id:user._id},
- {$set: {'stats.exp': user.stats.exp}},
- {multi:true}
- );
- } catch(e) {
- print(e);
- }
-
- }
-
-})
\ No newline at end of file
diff --git a/migrations/20130307_normalize_algo_values.js b/migrations/20130307_normalize_algo_values.js
deleted file mode 100644
index e42faded43..0000000000
--- a/migrations/20130307_normalize_algo_values.js
+++ /dev/null
@@ -1,47 +0,0 @@
-// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130307_normalize_algo_values.js
-
-/**
- * Users were experiencing a lot of extreme Exp multiplication (https://github.com/lefnire/habitrpg/issues/594).
- * This sets things straight, and in preparation for another algorithm overhaul
- */
-db.users.find().forEach(function(user){
- if (user.stats.exp >= 3580) {
- user.stats.exp = 0;
- }
-
- if (user.stats.lvl > 100) {
- user.stats.lvl = 100;
- }
-
- _.each(user.tasks, function(task, key){
- // remove corrupt tasks
- if (!task) {
- delete user.tasks[key];
- return;
- }
-
- // Fix busted values
- if (task.value > 21.27) {
- task.value = 21.27;
- }
- else if (task.value < -47.27) {
- task.value = -47.27;
- }
- });
-
- try {
- db.users.update(
- {_id:user._id},
- {$set:
- {
- 'stats.lvl': user.stats.lvl,
- 'stats.exp': user.stats.exp,
- 'tasks' : user.tasks
- }
- },
- {multi:true}
- );
- } catch(e) {
- print(e);
- }
-})
\ No newline at end of file
diff --git a/migrations/20130307_remove_duff_histories.js b/migrations/20130307_remove_duff_histories.js
deleted file mode 100644
index 6211693a1f..0000000000
--- a/migrations/20130307_remove_duff_histories.js
+++ /dev/null
@@ -1,28 +0,0 @@
-/**
- * Remove duff histories for dailies
- */
-// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130307_remove_duff_histories.js
-db.users.find().forEach(function(user){
-
-
- _.each(user.tasks, function(task, key){
- if (task.type === "daily") {
- // remove busted history entries
- task.history = _.filter(task.history, function(h){return !!h.value})
- }
- });
-
- try {
- db.users.update(
- {_id:user._id},
- {$set:
- {
- 'tasks' : user.tasks
- }
- },
- {multi:true}
- );
- } catch(e) {
- print(e);
- }
-})
\ No newline at end of file
diff --git a/migrations/20130326_migrate_pets.js b/migrations/20130326_migrate_pets.js
deleted file mode 100644
index 2e0f0a395b..0000000000
--- a/migrations/20130326_migrate_pets.js
+++ /dev/null
@@ -1,98 +0,0 @@
-/**
- * Migrate old pets to new system
- */
-// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130326_migrate_pets.js
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var mapping = {
- bearcub: {name:'BearCub', modifier: 'Base'},
- cactus: {name:'Cactus', modifier:'Base'},
- dragon: {name:'Dragon', modifier:'Base'},
- flyingpig: {name:'FlyingPig', modifier:'Base'},
- fox: {name:'Fox', modifier:'Base'},
- lioncub: {name:'LionCub', modifier:'Base'},
- pandacub: {name:'PandaCub', modifier:'Base'},
- tigercub: {name:'TigerCub', modifier:'Base'},
- wolfBorder: {name:'Wolf', modifier:'Base'},
- wolfDesert: {name:'Wolf', modifier:'Desert'},
- wolfGolden: {name:'Wolf', modifier:'Golden'},
- wolfRed: {name:'Wolf', modifier:'Red'},
- wolfShade: {name:'Wolf', modifier:'Shade'},
- wolfSkeleton: {name:'Wolf', modifier:'Skeleton'},
- wolfVeteran: {name:'Wolf', modifier:'Veteran'},
- wolfWhite: {name:'Wolf', modifier:'White'},
- wolfZombie: {name:'Wolf', modifier:'Zombie'}
-}
-
-/**
- == Old Style ==
- pet: Object
- icon: "Pet-Wolf-White.png"
- index: 14
- name: "wolfWhite"
- text: "White Wolf"
- value: 3
- pets: Object
- bearcub: true
- cactus: true
-
- == New Style ==
- currentPet: Object
- modifier: "Red"
- name: "Wolf"
- notes: "Find some Hatching Powder to sprinkle on this egg, and one day it will hatch into a loyal pet."
- str: "Wolf-Red"
- text: "Wolf"
- value: 3
- pets: Array
- 0: "PandaCub-Base"
- 1: "Wolf-Base"
- */
-
-
-db.users.find().forEach(function(user){
- if (!user.items || (!user.items.pets && !user.items.pet)) return;
-
- // migrate items.pet to items.currentPet
- if (!!user.items.pet) {
- var mapped = mapping[user.items.pet.name];
- delete user.items.pet;
- user.items.currentPet = {
- modifier: mapped.modifier,
- name: mapped.name,
- str: mapped.name + "-" + mapped.modifier,
- text: '' // FIXME?
- }
- }
-
- // migrate items.pets
- if (!!user.items.pets) {
- var newPets = [];
- _.each(user.items.pets, function(val, key){
- if (_.isNumber(key)) {
- newPets.push(val)
- //FIXME why is this happening? seems the user gets migrated already...
- //throw "Error: User appears already migrated, this shouldn't be happening!"
- } else {
- newPets.push(mapping[key].name + "-" + mapping[key].modifier);
- }
- });
- user.items.pets = newPets;
- }
-
- try {
- db.users.update(
- {_id:user._id},
- {$set:
- { 'items' : user.items }
- }
- );
- } catch(e) {
- print(e);
- }
-})
\ No newline at end of file
diff --git a/migrations/20130327_apply_tokens.js b/migrations/20130327_apply_tokens.js
deleted file mode 100644
index e277db38fd..0000000000
--- a/migrations/20130327_apply_tokens.js
+++ /dev/null
@@ -1,110 +0,0 @@
-/**
- * Applies backer tokens & items (this file will be updated periodically
- */
-
-// mongo habitrpg ./node_modules/underscore/underscore.js migrations/20130327_apply_tokens.js
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var mapping = [
- {
- tier: 1,
- tokens: 0,
- users: []
- },
- {
- tier: 5,
- tokens: 20,
- users: []
- },
- {
- tier: 10,
- tokens: 50,
- users: []
- },
- {
- tier: 15,
- tokens: 100,
- users: []
- },
- {
- tier: 30,
- tokens: 150,
- users: []
- },
- {
- tier: 45,
- tokens: 170,
- users: []
- },
- {
- tier: 60,
- tokens: 200,
- users: []
- },
- {
- tier: 70,
- tokens: 240,
- users: []
- },
- {
- tier: 80,
- tokens: 240,
- users: []
- },
- {
- tier: 90,
- tokens: 280,
- users: []
- },
- {
- tier: 300,
- tokens: 500,
- users: []
- },
- {
- tier: 800,
- tokens: 500,
- users: []
- }
-];
-
-db.users.find().forEach(function(user){
- if (!user._id) return;
-
- var possibleUserIds = [user._id];
- if (!!user.local) {
- if (!!user.local.username) possibleUserIds.push(user.local.username);
- if (!!user.local.email) possibleUserIds.push(user.local.email);
- }
-
- _.each(mapping, function(tier){
- var userInTier = !_.isEmpty(_.intersection(tier.users, possibleUserIds));
- if (userInTier) {
- var tokenInc = 0,
- backer = user.backer || {};
- if (!backer.tokensApplied) {
- tokenInc = tier.tokens;
- backer.tokensApplied = true;
- }
- backer.tier = tier.tier;
-
- try {
- db.users.update(
- {_id:user._id},
- {
- $set: { backer: backer, 'flags.ads': 'hide' },
- $inc: { balance: (tokenInc/4) }
- }
- );
- } catch(e) {
- print(e);
- }
- }
- })
-
-})
\ No newline at end of file
diff --git a/migrations/20130503_max_gear_achievement.js b/migrations/20130503_max_gear_achievement.js
deleted file mode 100644
index d6be25558a..0000000000
--- a/migrations/20130503_max_gear_achievement.js
+++ /dev/null
@@ -1,22 +0,0 @@
-/**
- * For users who already have max gear, they earned the achievement
- */
-// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130503_max_gear_achievement.js
-db.users.find().forEach(function(user){
- var items = user.items;
- if (!items) { return; }
- if ( parseInt(items.armor) == 5 &&
- parseInt(items.head) == 5 &&
- parseInt(items.shield) == 5 &&
- parseInt(items.weapon) == 6) {
-
- try {
- db.users.update(
- {_id:user._id},
- {$set: {'achievements.ultimateGear':true}}
- );
- } catch(e) {
- print(e);
- }
- }
-})
\ No newline at end of file
diff --git a/migrations/20130508_add_backer_pets.js b/migrations/20130508_add_backer_pets.js
deleted file mode 100644
index 2a9744af2a..0000000000
--- a/migrations/20130508_add_backer_pets.js
+++ /dev/null
@@ -1 +0,0 @@
-db.users.update({'backer.tier':{$gte:80}}, {$push:{'items.pets':'Wolf-Cerberus'}}, {multi:true});
\ No newline at end of file
diff --git a/migrations/20130602_survey_rewards.js b/migrations/20130602_survey_rewards.js
deleted file mode 100644
index 98ae8106c2..0000000000
--- a/migrations/20130602_survey_rewards.js
+++ /dev/null
@@ -1,31 +0,0 @@
-//mongo habitrpg ./node_modules/lodash/lodash.js migrations/20130602_survey_rewards.js
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var members = []
-members = _.uniq(members);
-
-var query = {
- _id: {$exists:1},
- $or:[
- {_id: {$in: members}},
- //{'profile.name': {$in: members}},
- {'auth.facebook.name': {$in: members}},
- {'auth.local.username': {$in: members}},
- {'auth.local.email': {$in: members}}
- ]
-};
-
-print(db.users.count(query));
-
-db.users.update(query,
- {
- $set: { 'achievements.helpedHabit': true },
- $inc: { balance: 2.5 }
- },
- {multi:true}
-)
\ No newline at end of file
diff --git a/migrations/20130612_survey_rewards_individual.js b/migrations/20130612_survey_rewards_individual.js
deleted file mode 100644
index 1d3fbf3317..0000000000
--- a/migrations/20130612_survey_rewards_individual.js
+++ /dev/null
@@ -1,9 +0,0 @@
-//mongo habitrpg migrations/20130612_survey_rewards_individual.js
-
-var query = {_id: ""};
-
-db.users.update(query,
- {
- $set: { 'achievements.helpedHabit': true },
- $inc: { balance: 2.5 }
- })
\ No newline at end of file
diff --git a/migrations/20130615_add_extra_indexes.js b/migrations/20130615_add_extra_indexes.js
deleted file mode 100644
index 2673568184..0000000000
--- a/migrations/20130615_add_extra_indexes.js
+++ /dev/null
@@ -1,4 +0,0 @@
-db.users.ensureIndex( { _id: 1, apiToken: 1 }, {background: true} )
-db.groups.ensureIndex( { members: 1 }, {background: true} )
-db.groups.ensureIndex( { type: 1 }, {background: true} )
-db.groups.ensureIndex( { type: 1, privacy: 1 }, {background: true} )
\ No newline at end of file
diff --git a/migrations/20130908_cleanup_corrupt_tags.js b/migrations/20130908_cleanup_corrupt_tags.js
deleted file mode 100644
index 2dce073bbc..0000000000
--- a/migrations/20130908_cleanup_corrupt_tags.js
+++ /dev/null
@@ -1,16 +0,0 @@
-//mongo habitrpg ./node_modules/lodash/lodash.js migrations/20130908_cleanup_corrupt_tags.js
-
-// Racer was notorious for adding duplicates, randomly deleting documents, etc. Once we pull the plug on old.habit,
-// run this migration to cleanup all the corruption
-
-db.users.find().forEach(function(user){
- user.tags = _.filter(user.tags, (function(t) {
- return !!t ? t.id : false;
- }));
-
- try {
- db.users.update({_id:user._id}, {$set:{tags:user.tags}});
- } catch(e) {
- print(e);
- }
-})
diff --git a/migrations/20131022_purchased_and_newStuff.js b/migrations/20131022_purchased_and_newStuff.js
deleted file mode 100644
index 862d9e107f..0000000000
--- a/migrations/20131022_purchased_and_newStuff.js
+++ /dev/null
@@ -1,5 +0,0 @@
-db.users.find().forEach(function(user){
- if (!user.purchased) user.purchased = {hair: {}, skin: {}};
- user.purchased.ads = user.flags && !!user.flags.ads;
- db.users.update({_id:user._id}, {$set:{'purchased': user.purchased, 'flags.newStuff': true}, $unset: {'flags.ads':1}});
-});
\ No newline at end of file
diff --git a/migrations/20131022_restore_ads.js b/migrations/20131022_restore_ads.js
deleted file mode 100644
index 6261990664..0000000000
--- a/migrations/20131022_restore_ads.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// node .migrations/20131022_restore_ads.js
-var mongo = require('mongoskin');
-var _ = require('lodash');
-var dbBackup = mongo.db('localhost:27017/habitrpg?auto_reconnect');
-var dbLive = mongo.db('localhost:27017/habitrpg2?auto_reconnect');
-var count = 89474;
-dbBackup.collection('users').findEach({$or: [{'flags.ads':'show'}, {'flags.ads': null}]}, {batchSize:10}, function(err, item) {
- if (err) return console.error({err:err});
- if (!item || !item._id) return console.error('blank user');
- dbLive.collection('users').update({_id:item._id}, {$set:{'purchased.ads':false}, $unset: {'flags.ads': 1}});
- if (--count <= 0) console.log("DONE!");
-});
\ No newline at end of file
diff --git a/migrations/20131102_restore_task_ids.js b/migrations/20131102_restore_task_ids.js
deleted file mode 100644
index 260675fbf5..0000000000
--- a/migrations/20131102_restore_task_ids.js
+++ /dev/null
@@ -1,25 +0,0 @@
-// mongo habitrpg ./node_modules/lodash/lodash.js ./migrations/20131028_task_subdocs_tags_invites.js
-
-db.challenges.find().forEach(function(chal){
- _.each(chal.habits.concat(chal.dailys).concat(chal.todos).concat(chal.rewards), function(task){
- task.id = task.id || task._id;
- })
- try {
- db.challenges.update({_id:chal._id}, chal);
- db.groups.update({_id:chal.group}, {$addToSet:{challenges:chal._id}})
- } catch(e) {
- print(e);
- }
-});
-
-db.users.find().forEach(function(user){
- _.each(user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards), function(task){
- task.id = task.id || task._id;
- })
- try {
- db.users.update({_id:user._id}, user);
- } catch(e) {
- print(e);
- }
-});
-
diff --git a/migrations/20131104_remove_invalid_dues.js b/migrations/20131104_remove_invalid_dues.js
deleted file mode 100644
index 8ebf89afaf..0000000000
--- a/migrations/20131104_remove_invalid_dues.js
+++ /dev/null
@@ -1,7 +0,0 @@
-db.users.find({},{todos:1}).forEach(function(user){
- _.each(user.todos, function(task){
- if (moment(task.date).toDate() == 'Invalid Date')
- task.date = moment().format('MM/DD/YYYY');
- })
- db.users.update({_id:user._id}, {$set:{todos: user.todos}});
-});
\ No newline at end of file
diff --git a/migrations/20131105_remove_history_ids.js b/migrations/20131105_remove_history_ids.js
deleted file mode 100644
index 9ddbff620e..0000000000
--- a/migrations/20131105_remove_history_ids.js
+++ /dev/null
@@ -1,21 +0,0 @@
-function deleteId(h){
- delete h._id;
-}
-
-db.users.find({},{habits:1,dailys:1,history:1}).forEach(function(user){
- if (user.history) {
- _.each(['todos','exp'], function(type){
- if (user.history[type]) {
- _.each(user.history.exp, deleteId);
- }
- })
- } else {
- user.history = {exp:[],todos:[]};
- }
-
- _.each(['habits', 'dailys'], function(type){
- _.each(user[type].history, deleteId);
- });
-
- db.users.update({_id:user._id}, {$set:{history: user.history, habits: user.habits, dailys: user.dailys}});
-});
\ No newline at end of file
diff --git a/migrations/20131108_add_gems_for_contribs.js b/migrations/20131108_add_gems_for_contribs.js
deleted file mode 100644
index 03ff44e721..0000000000
--- a/migrations/20131108_add_gems_for_contribs.js
+++ /dev/null
@@ -1,4 +0,0 @@
-// Increase everyone's gems per their contribution level
-db.users.find({'contributor.level':{$gt:0}},{contributor:1, balance:1}).forEach(function(user){
- db.users.update({_id:user._id}, {$inc: {balance: (user.contributor.level * .5)} });
-});
\ No newline at end of file
diff --git a/migrations/20131111_task_NaN.js b/migrations/20131111_task_NaN.js
deleted file mode 100644
index 16e6788003..0000000000
--- a/migrations/20131111_task_NaN.js
+++ /dev/null
@@ -1,15 +0,0 @@
-// This migration has already been run in the past. It's vital to fix these users presently, but we need to find
-// out why task values are ever getting in as NaN. My guess is API PUT /tasks/:tid routes
-db.users.find({},{habits:1,dailys:1,todos:1,rewards:1}).forEach(function(user){
- _.each(['habits','dailys','todos','rewards'], function(type){
- _.each(user[type], function(task){
- task.value = +task.value;
- if (_.isNaN(task.value)) {
- task.value = 0;
- print(user._id);
- }
- })
- })
-
- db.users.update({_id:user._id}, {$set:{habits: user.habits, dailys: user.dailys, todos: user.todos, rewards: user.rewards}});
-});
\ No newline at end of file
diff --git a/migrations/20131114_migrate_websites_to_blurb.js b/migrations/20131114_migrate_websites_to_blurb.js
deleted file mode 100644
index e2bbdd9fcb..0000000000
--- a/migrations/20131114_migrate_websites_to_blurb.js
+++ /dev/null
@@ -1,14 +0,0 @@
-// Migrate all users websites to the profile blurb field
-db.users.find({'profile.websites':{$exists: true}}).forEach(function(user){
- db.users.update({_id: user._id}, {
- $set: {"profile.blurb": user.profile.blurb + '\n * ' + user.profile.websites.join('\n * ')},
- $unset: {'profile.websites': 1}
- })
-})
-
-db.groups.find({'websites.0':{$exists: true}}).forEach(function(group){
- db.groups.update({_id: group._id}, {
- $set: {"description": group.description + '\n * ' + group.websites.join('\n * ')},
- $unset: {websites: 1}
- })
-})
diff --git a/migrations/20131115_update_gear_preferences.js b/migrations/20131115_update_gear_preferences.js
deleted file mode 100644
index 9ec1264b2f..0000000000
--- a/migrations/20131115_update_gear_preferences.js
+++ /dev/null
@@ -1,10 +0,0 @@
-//Add defaults to show gears in all users
-db.users.update(
- {},
- {$set:{
- 'preferences.showWeapon': true,
- 'preferences.showShield': true,
- 'preferences.showArmor': true,
- }},
- {multi:true}
-)
diff --git a/migrations/20131117_fix_task_types.js b/migrations/20131117_fix_task_types.js
deleted file mode 100644
index 14d86cb55f..0000000000
--- a/migrations/20131117_fix_task_types.js
+++ /dev/null
@@ -1,18 +0,0 @@
-// TODO figure out why this is happening in the first place
-
-db.users.find({},{habits:1, dailys:1, todos:1, rewards:1}).forEach(function(user){
- _.each(user.habits, function(task){
- task.type = 'habit';
- })
- _.each(user.dailys, function(task){
- task.type = 'daily';
- })
- _.each(user.todos, function(task){
- task.type = 'todo';
- })
- _.each(user.rewards, function(task){
- task.type = 'reward';
- })
-
- db.users.update({_id:user._id}, {$set:{habits: user.habits, dailys: user.dailys, todos: user.todos, rewards: user.rewards}});
-});
diff --git a/migrations/20131117_remove_undefined_pets.js b/migrations/20131117_remove_undefined_pets.js
deleted file mode 100644
index f908621a75..0000000000
--- a/migrations/20131117_remove_undefined_pets.js
+++ /dev/null
@@ -1,12 +0,0 @@
-// once and for all!
-
-db.users.find({'items.pets':{$exists:1}},{'items.pets':1}).forEach(function(user){
- _.reduce(user.items.pets, function(m,v,k){
- if (!k.indexOf('undefined')) m.push(k);
- return m;
- }, []).forEach(function(key){
- delete user.items.pets[key];
- })
-
- db.users.update({_id:user._id}, { $set:{'items.pets':user.items.pets} });
-});
diff --git a/migrations/20131122_deleted_tags.js b/migrations/20131122_deleted_tags.js
deleted file mode 100644
index e915390041..0000000000
--- a/migrations/20131122_deleted_tags.js
+++ /dev/null
@@ -1,13 +0,0 @@
-// Cleanup broken tags
-// -------------------------
-db.users.find().forEach(function(user){
- var tasks = user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards);
-
- _.each(tasks, function(task){
- _.each(task.tags, function(value, key){ //value is true, key is tag.id
- if (!_.find(user.tags,{id:key})) delete task.tags[key];
- });
- });
-
- db.users.update({_id:user._id}, user);
-});
\ No newline at end of file
diff --git a/migrations/20131123_set_default_party_order.js b/migrations/20131123_set_default_party_order.js
deleted file mode 100644
index 970e37e05b..0000000000
--- a/migrations/20131123_set_default_party_order.js
+++ /dev/null
@@ -1,8 +0,0 @@
-//Add default to randomize party members list
-db.users.update(
- {},
- {$set:{
- 'party.order': 'random',
- }},
- {multi:true}
-)
diff --git a/migrations/20131126_clean_dayStart.js b/migrations/20131126_clean_dayStart.js
deleted file mode 100644
index b2001ec7c2..0000000000
--- a/migrations/20131126_clean_dayStart.js
+++ /dev/null
@@ -1,5 +0,0 @@
-db.users.find({'preferences.dayStart':{$exists:1}},{'preferences.dayStart':1}).forEach(function(user){
- var dayStart = +user.preferences.dayStart;
- dayStart = (_.isNaN(dayStart) || dayStart < 0 || dayStart > 24) ? 0 : dayStart;
- db.users.update({_id:user._id}, {$set:{'preferences.dayStart':dayStart}});
-});
diff --git a/migrations/20131126_turkey_pet.js b/migrations/20131126_turkey_pet.js
deleted file mode 100644
index 568e38b237..0000000000
--- a/migrations/20131126_turkey_pet.js
+++ /dev/null
@@ -1 +0,0 @@
-db.users.update({},{$set:{'items.pets.Turkey-Base':5, 'flags.newStuff':true}}, {multi:true});
\ No newline at end of file
diff --git a/migrations/20131127_restore_dayStart.js b/migrations/20131127_restore_dayStart.js
deleted file mode 100644
index fd9aba3618..0000000000
--- a/migrations/20131127_restore_dayStart.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// node .migrations/20131127_restore_dayStart.js
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var backupUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users');
-var liveUsers = mongo.db('localhost:27017/habitrpg_new?auto_reconnect').collection('users');
-
-var query = {'preferences.dayStart':{$exists:1,$ne:0}};
-var select = {'preferences.dayStart': 1};
-
-backupUsers.count(query, function(err, count){
- if (err) return console.error(err);
- backupUsers.findEach(query, select, {batchSize:20}, function(err, before){
- if (err) return console.error(err);
- if (!before) { count--; return console.log('!before'); }
- liveUsers.findById(before._id, function(err, after){
- if (err) return console.error(err);
- if (!after) { count--; return console.log(before._id + ' deleted?'); }
-
- var dayStart = +before.preferences.dayStart;
- if (after.preferences.dayStart == 0 && dayStart != 0){
- dayStart = (_.isNaN(dayStart) || dayStart < 0 || dayStart > 24) ? 0 : dayStart;
- } else {
- dayStart = after.preferences.dayStart;
- }
-
- liveUsers.update({_id:after._id}, {$inc:{_v:1}, $set:{'preferences.dayStart':dayStart}});
- if (--count <= 0) console.log("DONE!");
- })
- });
-});
\ No newline at end of file
diff --git a/migrations/20131221_restore_NaN_history.js b/migrations/20131221_restore_NaN_history.js
deleted file mode 100644
index f0d6d90093..0000000000
--- a/migrations/20131221_restore_NaN_history.js
+++ /dev/null
@@ -1,51 +0,0 @@
-// node .migrations/20131221_restore_NaN_history.js
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-/**
- * After the classes migration, users lost some history entries
- */
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var backupUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users');
-var liveUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users');
-
-function filterNaNs(h) {
- return h && _.isNumber(+h.value) && !_.isNaN(+h.value);
-}
-
-var fields = {history:1,habits:1,dailys:1,migration:1};
-var count = 0;
-liveUsers.findEach({migration: {$ne:'20131221_restore_NaN_history'}}, fields, {batchSize:500}, function(err, after){
- if (!after) err = '!after';
- if (err) {count++;return console.error(err);}
-
- backupUsers.findById(after._id, fields, function(err, before){
- if (err) {count++;return console.error(err);}
-
- _.each(['todos','exp'],function(type){
- if (!_.isEmpty(after.history[type]))
- after.history[type] = _.filter(after.history[type], filterNaNs);
- if (before && !_.isEmpty(before.history[type]))
- after.history[type] = before.history[type].concat(after.history[type]);
- })
-
- _.each(['habits','dailys'], function(type){
- _.each(after[type], function(t){
- t.history = _.filter(t.history, filterNaNs);
- var found = before && _.find(before[type],{id:t.id});
- if (found && found.history) t.history = found.history.concat(t.history);
- })
- })
-
- liveUsers.update({_id:after._id}, {$set:{history:after.history, dailys:after.dailys, habits:after.habits, migration:'20131221_restore_NaN_history'}, $inc:{_v:1}});
- //if (--count <= 0) console.log("DONE! " + after._id);
- if (++count%1000 == 0) console.log(count);
- if (after._id == '9') console.log('lefnire processed');
- })
-});
\ No newline at end of file
diff --git a/migrations/20131225_restore_streaks.js b/migrations/20131225_restore_streaks.js
deleted file mode 100644
index c07a3828f3..0000000000
--- a/migrations/20131225_restore_streaks.js
+++ /dev/null
@@ -1,38 +0,0 @@
-// node .migrations/20131225_restore_streaks.js
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-/**
- * After the classes migration, users lost some history entries
- */
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var backupUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users');
-var liveUsers = mongo.db('lefnire:mAdn3s5s@charlotte.mongohq.com:10015/habitrpg_large?auto_reconnect').collection('users');
-
-var fields = {dailys:1,migration:1};
-var count = 0;
-liveUsers.findEach({migration: {$ne:'20131225_restore_streaks'}}, fields, {batchSize:250}, function(err, after){
- if (!after) err = '!after';
- if (err) {count++;return console.error(err);}
-
- backupUsers.findById(after._id, fields, function(err, before){
- if (!before) err = '!before';
- if (err) {count++;return console.error(err);}
-
- _.each(before.dailys,function(d){
- var found = _.find(after.dailys,{id: d.id});
- if (found && !found.streak) found.streak = d.streak;
- })
-
- liveUsers.update({_id:after._id}, {$set:{dailys:after.dailys, migration:'20131225_restore_streaks'}, $inc:{_v:1}});
- //if (--count <= 0) console.log("DONE! " + after._id);
- if (++count%1000 == 0) console.log(count);
- if (after._id == '9') console.log('lefnire processed');
- })
-});
\ No newline at end of file
diff --git a/migrations/20140119_task_creation_completion_dates.js b/migrations/20140119_task_creation_completion_dates.js
deleted file mode 100644
index 9176b744ac..0000000000
--- a/migrations/20140119_task_creation_completion_dates.js
+++ /dev/null
@@ -1,8 +0,0 @@
-db.users.find({},{todos:1,dailys:1,rewards:1,habits:1}).forEach(function(user){
- _.each(user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards), function(t){
- t.dateCreated = t.created || new Date;
- delete t.created;
- if (t.type == 'todo' && t.completed) t.dateCompleted = new Date;
- })
- db.users.update({_id:user._id}, {$set:{habits:user.habits,dailys:user.dailys,todos:user.todos,rewards:user.rewards}});
-});
diff --git a/migrations/20140130_birthdayEnd.js b/migrations/20140130_birthdayEnd.js
deleted file mode 100644
index a9a8eb93bc..0000000000
--- a/migrations/20140130_birthdayEnd.js
+++ /dev/null
@@ -1 +0,0 @@
-db.users.update({},{$set:{'achievements.habitBirthday':true}},{multi:1})
diff --git a/migrations/20140130_birthdayStart.js b/migrations/20140130_birthdayStart.js
deleted file mode 100644
index f022168bcd..0000000000
--- a/migrations/20140130_birthdayStart.js
+++ /dev/null
@@ -1,12 +0,0 @@
-db.users.update({},{$set:{
- 'items.food.Cake_Skeleton':1,
- 'items.food.Cake_Base':1,
- 'items.food.Cake_CottonCandyBlue':1,
- 'items.food.Cake_CottonCandyPink':1,
- 'items.food.Cake_Shade':1,
- 'items.food.Cake_White':1,
- 'items.food.Cake_Golden':1,
- 'items.food.Cake_Zombie':1,
- 'items.food.Cake_Desert':1,
- 'items.food.Cake_Red':1
-}},{multi:1})
diff --git a/migrations/20140220_challenge_memberCount.js b/migrations/20140220_challenge_memberCount.js
deleted file mode 100644
index 1b83408943..0000000000
--- a/migrations/20140220_challenge_memberCount.js
+++ /dev/null
@@ -1,3 +0,0 @@
-db.challenges.find({},{members:1}).forEach(function(chal){
- db.challenges.update({_id:chal._id}, {$set:{memberCount:chal.members.length}});
-});
diff --git a/migrations/20140301_missing_mysteries.js b/migrations/20140301_missing_mysteries.js
deleted file mode 100644
index a244e3f3db..0000000000
--- a/migrations/20140301_missing_mysteries.js
+++ /dev/null
@@ -1,14 +0,0 @@
-db.users.update(
- {
- 'purchased.plan.dateCreated':{$gte:new Date('2014-02-22'),$lt:new Date('2014-02-29')},
- 'items.gear.owned.armor_mystery_201402':null,
- 'items.gear.owned.head_mystery_201402': null,
- 'items.gear.owned.back_mystery_201402': null,
- 'purchased.plan.mysteryItems':{$nin:['armor_mystery_201402','head_mystery_201402','back_mystery_201402']}
- },
- //{_id:1,'purchased.plan':1,'items.gear.owned':1}
- {$push: {'purchased.plan.mysteryItems':{$each:['armor_mystery_201402','head_mystery_201402','back_mystery_201402']}}},
- {multi:true}
-)/*.forEach(function(user){
- printjson(user);
- });*/
diff --git a/migrations/20140610_missing_backer_mount.js b/migrations/20140610_missing_backer_mount.js
deleted file mode 100644
index 5dd28af9da..0000000000
--- a/migrations/20140610_missing_backer_mount.js
+++ /dev/null
@@ -1 +0,0 @@
-db.users.update({'backer.tier':{$gt:69}},{$set:{'items.mounts.LionCub-Ethereal':true}},{multi:1})
\ No newline at end of file
diff --git a/migrations/20140712_wiped_quest_membership.js b/migrations/20140712_wiped_quest_membership.js
deleted file mode 100644
index f8985e7c77..0000000000
--- a/migrations/20140712_wiped_quest_membership.js
+++ /dev/null
@@ -1,11 +0,0 @@
-//mongo habitrpg node_modules/lodash/lodash.js ./migrations/20140712_wiped_quest_membership.js
-db.groups.find({type:'party','quest.key':{$ne:null},'quest.active':true},{quest:1}).forEach(function(group){
- var activeMembers = _.reduce(group.quest.members, function(m,v,k){
- if (v===true) m.push(k); return m;
- },[]);
- db.users.update(
- {_id:{$in: activeMembers}},
- {$set:{'party.quest.key':group.quest.key,'party.quest.completed':null}},
- {multi:true}
- );
-});
diff --git a/migrations/20140803_remove_undefined_notifications.js b/migrations/20140803_remove_undefined_notifications.js
deleted file mode 100644
index fe0d143a56..0000000000
--- a/migrations/20140803_remove_undefined_notifications.js
+++ /dev/null
@@ -1,13 +0,0 @@
-var _ = require('lodash');
-
-db.users.find({}).forEach(function(user){
- var newNewMessages = {};
-
- _.each(user.newMessages, function(val, key){
- if(key != "undefined"){
- newNewMessages[key] = val;
- };
- });
-
- db.users.update({_id: user._id}, {$set: {'newMessages': newNewMessages}});
-});
diff --git a/migrations/20140829_change_headAccessory_to_eyewear.js b/migrations/20140829_change_headAccessory_to_eyewear.js
deleted file mode 100644
index 9940fb5013..0000000000
--- a/migrations/20140829_change_headAccessory_to_eyewear.js
+++ /dev/null
@@ -1,81 +0,0 @@
-// node .migrations/20140829_change_headAccessory_to_eyewear.js
-
-var migrationName = '20140829_change_headAccessory_to_eyewear';
-var authorName = 'Alys'; // in case script author needs to know when their ...
-var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-/**
- * https://github.com/HabitRPG/habitrpg/issues/3645
- */
-var mongo = require('mongoskin');
-var _ = require('lodash');
-var liveUsers = mongo.db('localhost:27017/habitrpg2?auto_reconnect').collection('users');
-
-var fields = {'migration':1,
- 'items.gear.costume.headAccessory':1,
- 'items.gear.equipped.headAccessory':1,
- 'items.gear.owned.headAccessory_special_wondercon_black':1,
- 'items.gear.owned.headAccessory_special_wondercon_red':1,
- 'items.gear.owned.headAccessory_special_summerRogue':1,
- 'items.gear.owned.headAccessory_special_summerWarrior':1
- };
-
-var progressCount = 1000;
-var count = 0;
-liveUsers.findEach({ $and: [
- { migration: {$ne:migrationName} },
- { $or: [
- {'items.gear.owned.headAccessory_special_summerRogue': {'$exists':true}},
- {'items.gear.owned.headAccessory_special_summerWarrior':{'$exists':true}},
- {'items.gear.owned.headAccessory_special_wondercon_red':{'$exists':true}},
- {'items.gear.owned.headAccessory_special_wondercon_black':{'$exists':true}}
- ]}
-]}, fields, {batchSize:250}, function(err, user){
- count++;
- if (!user) err = '!user';
- if (err) {return console.error(err);}
-
- var set = {'migration': migrationName};
- var unset = {};
-
- var oldToNew = {
- 'headAccessory_special_summerRogue': 'eyewear_special_summerRogue',
- 'headAccessory_special_summerWarrior': 'eyewear_special_summerWarrior',
- 'headAccessory_special_wondercon_red': 'eyewear_special_wondercon_red',
- 'headAccessory_special_wondercon_black':'eyewear_special_wondercon_black'
- };
-
- // items.gear.costume, items.gear.equipped:
- _.each(['costume','equipped'],function(type){
- _.each(oldToNew,function(newName,oldName){
- if (user.items.gear[type].headAccessory === oldName) {
- unset['items.gear.'+type+'.headAccessory'] = "";
- set['items.gear.'+type+'.eyewear'] = newName;
- }
- });
- });
-
- // items.gear.owned:
- _.each(oldToNew,function(newName,oldName){
- if (oldName in user.items.gear.owned) {
- unset['items.gear.owned.'+oldName] = "";
- set['items.gear.owned.'+newName] = user.items.gear.owned[oldName];
- }
- });
-
- //console.log(JSON.stringify(user, null, " "));
- //console.log("set: " + JSON.stringify(set, null, " "));
- //console.log("unset: " + JSON.stringify(unset, null, " "));
-
- liveUsers.update({_id:user._id}, {$set:set, $unset:unset, $inc:{_v:1}});
-
- if (count%progressCount == 0) console.log(count + ' ' + user._id);
- if (user._id == '9') console.log('lefnire processed');
- if (user._id == authorUuid) console.log(authorName + ' processed');
-});
diff --git a/migrations/20140831_increase_gems_for_previous_contributions.js b/migrations/20140831_increase_gems_for_previous_contributions.js
deleted file mode 100644
index 164dda444b..0000000000
--- a/migrations/20140831_increase_gems_for_previous_contributions.js
+++ /dev/null
@@ -1,131 +0,0 @@
-// IMPORTANT:
-//
-// run like this to capture all output:
-//
-// node 20140831_increase_gems_for_previous_contributions.js > 20140831_increase_gems_for_previous_contributions_output.txt
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var migrationName = '20140831_increase_gems_for_previous_contributions';
-
-/**
- * https://github.com/HabitRPG/habitrpg/issues/3933
- * Increase Number of Gems for Contributors
- * author: Alys (d904bd62-da08-416b-a816-ba797c9ee265)
- *
- * Increase everyone's gems per their contribution level.
- * Originally they were given 2 gems per tier.
- * Now they are given 3 gems per tier for tiers 1,2,3
- * and 4 gems per tier for tiers 4,5,6,7
- * So that means an EXTRA 1 for tier 1,
- * 2 for tier 2,
- * 3 for tier 3,
- * 5 for tier 4,
- * 7 for tier 5,
- * 9 for tier 6,
- * 11 for tier 7,
- * 11 for tier 8 (moderators = tier 7 + admin privileges),
- * none for tier 9 (staff)
- */
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-
-var dbUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users');
-
-
-var query = {
- 'contributor.level': {$gt: 0, $lt: 9},
- 'migration': {$ne: migrationName}
-};
-
-var fields = {
- 'migration':1,
- 'contributor.level':1,
- 'balance':1
-};
-
-var userResults = {}; // each key is a UUID, each value is a string
- // describing what changed for that user
-
-console.warn('Updating users...');
-var progressCount = 50;
-var count = 0;
-dbUsers.findEach(query, fields, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All users found. Fetching final balances...');
- return fetchFinalBalances();
- }
- count++;
-
- var set = {'migration': migrationName};
-
- var tier = user.contributor.level;
- var extraGems = tier; // tiers 1,2,3
- if (tier > 3) { extraGems = 3 + (tier - 3) * 2; }
- if (tier == 8) { extraGems = 11; }
- var extraBalance = extraGems / 4;
- set['balance'] = user.balance + extraBalance;
-
- // Capture current state of user:
- userResults[user._id] =
- user._id + ' ' + ':\n' +
- ' contrib tier : ' + tier + '\n' +
- ' balance before : ' + user.balance + '\n' +
- ' balance (gems) added : ' + extraBalance + ' (' +
- extraGems + ')' + '\n' +
- ' expected balance after: ' + (user.balance + extraBalance) + '\n';
-
- // Update user:
- dbUsers.update({_id:user._id}, {$set:set, $inc:{_v:1}});
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
-});
-
-
-function fetchFinalBalances() {
- var query = {_id: {$in: Object.keys(userResults)}};
- var fields = {
- 'balance':1,
- };
-
- var count1 = 0;
- dbUsers.findEach(query, fields, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All final balances found.');
- return displayData();
- }
- count1++;
- userResults[user._id] = userResults[user._id] +
- user._id + ' ' + ':\n' +
- ' actual balance after : ' + user.balance + '\n';
- if (count1%progressCount == 0) console.warn(count1 + ' ' + user._id);
- });
-}
-
-
-function displayData() {
- _.each(userResults, function(text, uuid) {
- console.log(text); // text contains uuid
- });
- console.log('\n' + count +
- ' users processed (should be roughly 335 according to the Hall)\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20140914_upgrade_admin_contrib_tiers.js b/migrations/20140914_upgrade_admin_contrib_tiers.js
deleted file mode 100644
index 7962b7dfde..0000000000
--- a/migrations/20140914_upgrade_admin_contrib_tiers.js
+++ /dev/null
@@ -1,79 +0,0 @@
-var migrationName = '20140914_upgrade_admin_contrib_tiers';
-var authorName = 'Alys'; // in case script author needs to know when their ...
-var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
-
-/**
- * https://github.com/HabitRPG/habitrpg/issues/3801
- * Convert Tier 8 contributors to Tier 9 (staff) (all current Tier 8s are admins).
- * Convert Tier 7 contributors with admin flag to Tier 8 (moderators).
- */
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users');
-
-var query =
- { 'contributor.level':{$gte:7}, 'contributor.admin':true, 'migration': {$ne: migrationName} };
-
-var fields = {'migration':1,
- 'contributor.admin':1,
- 'contributor.level':1,
- 'auth.local.username':1,
- 'profile.name':1,
- };
-
-var userResults = {}; // each key is a UUID, each value is a username;
- // contains only the users changed
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- var set = {'migration': migrationName};
- var inc = {'contributor.level':1, _v:1};
-
- userResults[user._id] = user.profile.name;
-
- dbUsers.update({_id:user._id}, {$set:set, $inc:inc});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
- if (user._id == '9' ) console.warn('lefnire' + ' processed');
-});
-
-
-function displayData() {
- console.log('users modified:');
- _.each(userResults, function(name, uuid) {
- console.log(name);
- });
- console.warn('\n' + count +
- ' users processed (should be 11 according to the Hall)\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20140922_free_candy.js b/migrations/20140922_free_candy.js
deleted file mode 100644
index 77cc221462..0000000000
--- a/migrations/20140922_free_candy.js
+++ /dev/null
@@ -1,18 +0,0 @@
-db.users.update(
- {},
- {
- $inc: {
- 'items.food.Candy_Base':1,
- 'items.food.Candy_CottonCandyBlue':1,
- 'items.food.Candy_CottonCandyPink':1,
- 'items.food.Candy_Desert':1,
- 'items.food.Candy_Golden':1,
- 'items.food.Candy_Red':1,
- 'items.food.Candy_Shade':1,
- 'items.food.Candy_Skeleton':1,
- 'items.food.Candy_White':1,
- 'items.food.Candy_Zombie':1
- }
- },
- {multi:1}
-);
\ No newline at end of file
diff --git a/migrations/20141006_jackolantern_pet.js b/migrations/20141006_jackolantern_pet.js
deleted file mode 100644
index f09c38d9f3..0000000000
--- a/migrations/20141006_jackolantern_pet.js
+++ /dev/null
@@ -1 +0,0 @@
-db.users.update({_id:'9'},{$set:{'items.pets.JackOLantern-Base':5, 'flags.newStuff':true}}, {multi:true});
\ No newline at end of file
diff --git a/migrations/20141126_turkey_mounts.js b/migrations/20141126_turkey_mounts.js
deleted file mode 100644
index 1270390c06..0000000000
--- a/migrations/20141126_turkey_mounts.js
+++ /dev/null
@@ -1,11 +0,0 @@
-db.users.update(
- {'items.pets.Turkey-Base':{$ne:null}},
- {$set:{'items.mounts.Turkey-Base':true}},
- {multi:1}
-)
-
-db.users.update(
- {'items.pets.Turkey-Base':null},
- {$set:{'items.pets.Turkey-Base':5}},
- {multi:1}
-)
\ No newline at end of file
diff --git a/migrations/20141211_NaN_consecutives.js b/migrations/20141211_NaN_consecutives.js
deleted file mode 100644
index 2822df0267..0000000000
--- a/migrations/20141211_NaN_consecutives.js
+++ /dev/null
@@ -1,4 +0,0 @@
-db.users.update({'purchased.plan.consecutive.count':NaN}, {$set:{'purchased.plan.consecutive.count':0}}, {multi:1});
-db.users.update({'purchased.plan.consecutive.offset':NaN}, {$set:{'purchased.plan.consecutive.offset':0}}, {multi:1});
-db.users.update({'purchased.plan.consecutive.gemCapExtra':NaN}, {$set:{'purchased.plan.consecutive.gemCapExtra':0}}, {multi:1});
-db.users.update({'purchased.plan.consecutive.trinkets':NaN}, {$set:{'purchased.plan.consecutive.trinkets':0}}, {multi:1});
\ No newline at end of file
diff --git a/migrations/20141230_new_years_hats.js b/migrations/20141230_new_years_hats.js
deleted file mode 100644
index 595027be0a..0000000000
--- a/migrations/20141230_new_years_hats.js
+++ /dev/null
@@ -1,11 +0,0 @@
-db.users.update(
- {'items.gear.owned.head_special_nye':{$ne:null}},
- {$set:{'items.gear.owned.head_special_nye2014':false}},
- {multi:1}
-)
-
-db.users.update(
- {'items.gear.owned.head_special_nye':null},
- {$set:{'items.gear.owned.head_special_nye':false}},
- {multi:1}
-)
diff --git a/migrations/20150107_plan_dateUpdated_null.js b/migrations/20150107_plan_dateUpdated_null.js
deleted file mode 100644
index 6e03b41a55..0000000000
--- a/migrations/20150107_plan_dateUpdated_null.js
+++ /dev/null
@@ -1,8 +0,0 @@
-db.users.update(
- {'purchased.plan.customerId':{$ne:null}, 'purchased.plan.dateUpdated':null},
- {
- $set: {'purchased.plan.dateUpdated': new Date('12/01/2014')},
- $unset: {'purchased.plan.datedUpdated':''}
- },
- {multi:true}
-);
diff --git a/migrations/20150124_mountmaster_fix.js b/migrations/20150124_mountmaster_fix.js
deleted file mode 100644
index 874faea22c..0000000000
--- a/migrations/20150124_mountmaster_fix.js
+++ /dev/null
@@ -1,88 +0,0 @@
-var migrationName = '20150124_mountmaster_fix.js';
-var authorName = 'Alys'; // in case script author needs to know when their ...
-var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
-
-/**
- * https://github.com/HabitRPG/habitrpg/pull/4374#issuecomment-71038795
- * Convert false to null for mounts that used to be owned.
- */
-
-var dbserver = 'localhost:27017' // CHANGE THIS FOR PRODUCTION DATABASE
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/habitrpg?auto_reconnect').collection('users');
-
-var query = {
- 'items.mounts':{$exists:true}
- };
-
-var fields = {
- 'items.mounts':1
- };
-
-var animals = [ "Wolf-Base", "Wolf-White", "Wolf-Desert", "Wolf-Red", "Wolf-Shade", "Wolf-Skeleton", "Wolf-Zombie", "Wolf-CottonCandyPink", "Wolf-CottonCandyBlue", "Wolf-Golden", "TigerCub-Base", "TigerCub-White", "TigerCub-Desert", "TigerCub-Red", "TigerCub-Shade", "TigerCub-Skeleton", "TigerCub-Zombie", "TigerCub-CottonCandyPink", "TigerCub-CottonCandyBlue", "TigerCub-Golden", "PandaCub-Base", "PandaCub-White", "PandaCub-Desert", "PandaCub-Red", "PandaCub-Shade", "PandaCub-Skeleton", "PandaCub-Zombie", "PandaCub-CottonCandyPink", "PandaCub-CottonCandyBlue", "PandaCub-Golden", "LionCub-Base", "LionCub-White", "LionCub-Desert", "LionCub-Red", "LionCub-Shade", "LionCub-Skeleton", "LionCub-Zombie", "LionCub-CottonCandyPink", "LionCub-CottonCandyBlue", "LionCub-Golden", "Fox-Base", "Fox-White", "Fox-Desert", "Fox-Red", "Fox-Shade", "Fox-Skeleton", "Fox-Zombie", "Fox-CottonCandyPink", "Fox-CottonCandyBlue", "Fox-Golden", "FlyingPig-Base", "FlyingPig-White", "FlyingPig-Desert", "FlyingPig-Red", "FlyingPig-Shade", "FlyingPig-Skeleton", "FlyingPig-Zombie", "FlyingPig-CottonCandyPink", "FlyingPig-CottonCandyBlue", "FlyingPig-Golden", "Dragon-Base", "Dragon-White", "Dragon-Desert", "Dragon-Red", "Dragon-Shade", "Dragon-Skeleton", "Dragon-Zombie", "Dragon-CottonCandyPink", "Dragon-CottonCandyBlue", "Dragon-Golden", "Cactus-Base", "Cactus-White", "Cactus-Desert", "Cactus-Red", "Cactus-Shade", "Cactus-Skeleton", "Cactus-Zombie", "Cactus-CottonCandyPink", "Cactus-CottonCandyBlue", "Cactus-Golden", "BearCub-Base", "BearCub-White", "BearCub-Desert", "BearCub-Red", "BearCub-Shade", "BearCub-Skeleton", "BearCub-Zombie", "BearCub-CottonCandyPink", "BearCub-CottonCandyBlue", "BearCub-Golden" ]; // all Gen1 mounts
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- var mounts = user.items.mounts;
- var changed = false;
- for(var a in animals) {
- if(mounts[animals[a]] == false) {
- mounts[animals[a]] = null;
- changed = true;
- }
- }
-
- if (changed) {
- dbUsers.update(
- { _id: user._id},
- {
- $set: { "migration": migrationName,
- "items.mounts" : mounts
- }
- }
- );
- }
-
- // var set = {'migration': migrationName};
- // var inc = {'xyz':1, _v:1};
- // dbUsers.update({_id:user._id}, {$set:set, $inc:inc});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
- if (user._id == '9' ) console.warn('lefnire' + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20150130_birthday_goodies.js b/migrations/20150130_birthday_goodies.js
deleted file mode 100644
index 6c7c2e08c5..0000000000
--- a/migrations/20150130_birthday_goodies.js
+++ /dev/null
@@ -1,36 +0,0 @@
-db.users.update(
- {'items.gear.owned.armor_special_birthday':{$ne:null}},
- {$set:{'items.gear.owned.armor_special_birthday2015':false}},
- {multi:1}
-)
-
-db.users.update(
- {'items.gear.owned.armor_special_birthday':null},
- {$set:{'items.gear.owned.armor_special_birthday':false}},
- {multi:1}
-)
-
-db.users.update({},{$inc:{
- 'items.food.Cake_Skeleton':1,
- 'items.food.Cake_Base':1,
- 'items.food.Cake_CottonCandyBlue':1,
- 'items.food.Cake_CottonCandyPink':1,
- 'items.food.Cake_Shade':1,
- 'items.food.Cake_White':1,
- 'items.food.Cake_Golden':1,
- 'items.food.Cake_Zombie':1,
- 'items.food.Cake_Desert':1,
- 'items.food.Cake_Red':1
-}},{multi:1})
-
-db.users.update(
- {'achievements.habitBirthday':true},
- {$set:{'achievements.habitBirthdays':1}},
- {multi:1}
-)
-
-db.users.update(
- {},
- {$inc:{'achievements.habitBirthdays':1}},
- {multi:1}
-)
\ No newline at end of file
diff --git a/migrations/20150131_birthday_goodies_fix_remove_robe.js b/migrations/20150131_birthday_goodies_fix_remove_robe.js
deleted file mode 100644
index 54b39030ba..0000000000
--- a/migrations/20150131_birthday_goodies_fix_remove_robe.js
+++ /dev/null
@@ -1,78 +0,0 @@
-var migrationName = '20150131_birthday_goodies_fix__one_birthday__1';
-var authorName = 'Alys'; // in case script author needs to know when their ...
-var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
-
-/*
- * remove new birthday robes and second achievement from people who shouldn't have them
- */
-
-var dbserver = 'localhost:27017' // CHANGE THIS FOR PRODUCTION DATABASE
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/habitrpg?auto_reconnect').collection('users');
-
- // 'auth.timestamps.created':{$gt:new Date('2014-02-01')},
-var query = {
- 'achievements.habitBirthdays':1,
- 'auth.timestamps.loggedin':{$gt:new Date('2014-12-20')}
- };
-
- // '_id': 'c03e41bd-501f-438c-9553-a7afdf52a08c',
- // 'achievements.habitBirthday':{$exists:false},
- // 'items.gear.owned.armor_special_birthday2015':1
-
-var fields = {
- // 'auth.timestamps.created':1,
- // 'achievements.habitBirthday':1,
- // 'achievements.habitBirthdays':1,
- 'items.gear.owned.armor_special_birthday2015':1,
- // 'items.gear.owned.armor_special':1
- };
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- var unset = {'items.gear.owned.armor_special_birthday2015': 1};
- // var set = {'migration':migrationName, 'achievements.habitBirthdays':1 };
- // var inc = {'xyz':1, _v:1};
- dbUsers.update({_id:user._id}, {$unset:unset}); // , $inc:inc});
- // dbUsers.update({_id:user._id}, {$unset:unset, $set:set});
- // console.warn(user.auth.timestamps.created);
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
- if (user._id == '9' ) console.warn('lefnire' + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20150201_convert_creation_date_from_string_to_object.js b/migrations/20150201_convert_creation_date_from_string_to_object.js
deleted file mode 100644
index 72a31e8020..0000000000
--- a/migrations/20150201_convert_creation_date_from_string_to_object.js
+++ /dev/null
@@ -1,112 +0,0 @@
-var migrationName = '20150201_convert_creation_date_from_string_to_object__no_date_recent_signup';
-//// var migrationName = '20150201_convert_creation_date_from_string_to_object';
-
-var authorName = 'Alys'; // in case script author needs to know when their ...
-var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
-
-/*
- * For users that have no value for auth.timestamps.created, assign them
- * a recent value.
- *
- * NOTE:
- * Before this script was used as described above, it was first used to
- * find all users that have a auth.timestamps.created field that is a string
- * rather than a date object and set it to be a date object. The code used
- * for this has been commented out with four slashes: ////
- *
- * https://github.com/HabitRPG/habitrpg/issues/4601#issuecomment-72339846
- */
-
-var dbserver = 'localhost:27017' // CHANGE THIS FOR PRODUCTION DATABASE
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-var moment = require('moment');
-
-var dbUsers = mongo.db(dbserver + '/habitrpg?auto_reconnect').collection('users');
-
-var uuidArrayRecent=[ // recent users with no creation dates
-'1a0d4b75-73ed-4937-974d-d504d6398884',
-'1c7ebe27-1250-4f95-ba10-965580adbfd7',
-'5f972121-4a6d-411c-95e9-7093d3e89b66',
-'ae85818a-e336-4ccd-945e-c15cef975102',
-'ba273976-d9fc-466c-975f-38559d34a824',
-];
-
-var query = {
- '_id':{$in: uuidArrayRecent}
- //// 'auth':{$exists:true},
- //// 'auth.timestamps':{$exists:true},
- //// 'auth.timestamps.created':{$not: {$lt:new Date('2018-01-01')}}
- };
-
-var fields = {
- '_id':1,
- 'auth.timestamps.created':1
- };
- // 'achievements.habitBirthdays':1
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- //// var oldDate = user.auth.timestamps.created;
- //// var newDate = moment(oldDate).toDate();
- var oldDate = 'none';
- var newDate = moment('2015-01-11').toDate();
- console.warn(user._id + ' == ' + oldDate + ' == ' + newDate);
-
- //// var set = { 'migration': migrationName,
- //// 'auth.timestamps.created': newDate,
- //// 'achievements.habitBirthdays': 2,
- //// 'items.gear.owned.head_special_nye':true,
- //// 'items.gear.owned.head_special_nye2014':true,
- //// 'items.gear.owned.armor_special_birthday':true,
- //// 'items.gear.owned.armor_special_birthday2015':true,
- //// };
-
- var set = { 'migration': migrationName,
- 'auth.timestamps.created': newDate,
- 'achievements.habitBirthdays': 1,
- 'items.gear.owned.armor_special_birthday':true,
- };
-
- // var unset = {'items.gear.owned.armor_special_birthday2015': 1};
- // var inc = {'xyz':1, _v:1};
- dbUsers.update({_id:user._id}, {$set:set});
- // dbUsers.update({_id:user._id}, {$unset:unset, $set:set, $inc:inc});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
- if (user._id == '9' ) console.warn('lefnire' + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20150201_recapture_emails_phase_update.js b/migrations/20150201_recapture_emails_phase_update.js
deleted file mode 100644
index 51fd73a6fa..0000000000
--- a/migrations/20150201_recapture_emails_phase_update.js
+++ /dev/null
@@ -1,7 +0,0 @@
-db.users.update({
- 'flags.recaptureEmailsPhase': {
- $gt: 0
- }
-},{$inc:{
- 'flags.recaptureEmailsPhase':1
-}},{multi:1})
\ No newline at end of file
diff --git a/migrations/20150218_interactive_tour.js b/migrations/20150218_interactive_tour.js
deleted file mode 100644
index 91769742ed..0000000000
--- a/migrations/20150218_interactive_tour.js
+++ /dev/null
@@ -1,10 +0,0 @@
-db.users.update({},{$set:{
- 'flags.tour.intro':-2,
- //'flags.tour.classes':-2,
- 'flags.tour.stats':-2,
- 'flags.tour.tavern':-2,
- 'flags.tour.party':-2,
- 'flags.tour.guilds':-2,
- 'flags.tour.challenges':-2,
- 'flags.tour.market':-2
-}},{multi:1})
\ No newline at end of file
diff --git a/migrations/20150224_force_resting_in_inn.js b/migrations/20150224_force_resting_in_inn.js
deleted file mode 100644
index 1b704fb411..0000000000
--- a/migrations/20150224_force_resting_in_inn.js
+++ /dev/null
@@ -1,64 +0,0 @@
-var migrationName = '20150224_force_resting_in_inn';
-var authorName = 'Alys'; // in case script author needs to know when their ...
-var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
-
-/*
- * force all active players to rest in the inn due to massive server fail
- */
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var dbserver = 'localhost:27017' // CHANGE THIS FOR PRODUCTION DATABASE
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/habitrpg?auto_reconnect').collection('users');
-
-var query = {
- 'auth.timestamps.loggedin':{$gt:new Date('2015-02-22')}
- };
-
-var fields = {
- 'preferences.sleep':1,
- };
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- var set = {'migration':migrationName, 'preferences.sleep':1 };
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
- if (user._id == '9' ) console.warn('lefnire' + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20150310_survey_achievements.js b/migrations/20150310_survey_achievements.js
deleted file mode 100644
index 9678b6c3c4..0000000000
--- a/migrations/20150310_survey_achievements.js
+++ /dev/null
@@ -1,5 +0,0 @@
-db.users.update(
- {'achievements.helpedHabit':true},
- {$set:{'achievements.habitSurveys':1}},
- {multi:1}
-)
\ No newline at end of file
diff --git a/migrations/20150604_ultimateGearSets.js b/migrations/20150604_ultimateGearSets.js
deleted file mode 100644
index 64ff0142d3..0000000000
--- a/migrations/20150604_ultimateGearSets.js
+++ /dev/null
@@ -1,138 +0,0 @@
-// var migrationName = '20150604_ultimateGearSets';
-// var authorName = 'Sabe'; // in case script author needs to know when their ...
-// var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-var migrationName = '20150620_ultimateGearSets';
-var authorName = 'Alys'; // in case script author needs to know when their ...
-var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
-
-/*
- * grant the new ultimateGearSets achievement for existing users' collected equipment
- *
- *
- * Changed by Alys on 20150620 to assign false values to
- * 'achievements.ultimateGearSets' when true values are not appropriate,
- * because of https://github.com/HabitRPG/habitrpg/issues/5427
- *
- * Minimal changes were made so the code isn't as efficient or clean
- * as it could be, but it's (hopefully) one-use-only and minimal changes
- * means minimal new testing.
- */
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var dbserver = 'localhost:27017' // FOR TEST DATABASE
-// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379' // FOR PRODUCTION DATABASE
-var dbname = 'habitrpg';
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
-
-var fields = {
- 'achievements.ultimateGearSets':1,
- 'items.gear.owned':1
-};
-
-
-// Changes 20150620: All users have to be processed now (non-achievers need
-// false values).
-var query = {
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- var achievements = {};
- var changeUser = false;
- // Changes 20150620: 'changeUser' now indicates that the user must have the
- // Enchanted Armoire unlocked.
- if ( (typeof user.items.gear.owned.weapon_wizard_6 !== 'undefined')
- && (typeof user.items.gear.owned.armor_wizard_5 !== 'undefined')
- && (typeof user.items.gear.owned.head_wizard_5 !== 'undefined')
- ) {
- achievements['wizard'] = true;
- changeUser = true;
- }
- else {
- // Changes 20150620: false added for all classes (here and below)
- achievements['wizard'] = false;
- }
-
- if ( (typeof user.items.gear.owned.weapon_warrior_6 !== 'undefined')
- && (typeof user.items.gear.owned.armor_warrior_5 !== 'undefined')
- && (typeof user.items.gear.owned.head_warrior_5 !== 'undefined')
- && (typeof user.items.gear.owned.shield_warrior_5 !== 'undefined')
- ) {
- achievements['warrior'] = true;
- changeUser = true;
- }
- else {
- achievements['warrior'] = false;
- }
-
- if ( (typeof user.items.gear.owned.weapon_healer_6 !== 'undefined')
- && (typeof user.items.gear.owned.armor_healer_5 !== 'undefined')
- && (typeof user.items.gear.owned.head_healer_5 !== 'undefined')
- && (typeof user.items.gear.owned.shield_healer_5 !== 'undefined')
- ) {
- achievements['healer'] = true;
- changeUser = true;
- }
- else {
- achievements['healer'] = false;
- }
-
- if ( (typeof user.items.gear.owned.weapon_rogue_6 !== 'undefined')
- && (typeof user.items.gear.owned.armor_rogue_5 !== 'undefined')
- && (typeof user.items.gear.owned.head_rogue_5 !== 'undefined')
- && (typeof user.items.gear.owned.shield_rogue_6 !== 'undefined')
- ) {
- achievements['rogue'] = true;
- changeUser = true;
- }
- else {
- achievements['rogue'] = false;
- }
-
- // Changes 20150620: $set is now run for all users.
- var set = {'migration':migrationName, 'achievements.ultimateGearSets':achievements};
- if (changeUser) { // user has at least one Ultimate Gear achievement
- set['flags.armoireEnabled'] = true;
- }
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
- if (user._id == '9' ) console.warn('lefnire' + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20150731_purple_gryphon.js b/migrations/20150731_purple_gryphon.js
deleted file mode 100644
index 8e44361ae0..0000000000
--- a/migrations/20150731_purple_gryphon.js
+++ /dev/null
@@ -1,5 +0,0 @@
-db.users.update(
- {},
- {$set:{'items.mounts.Gryphon-RoyalPurple':true}},
- {multi:true}
-);
diff --git a/migrations/20150731_veteran_tiger.js b/migrations/20150731_veteran_tiger.js
deleted file mode 100644
index 55e46fb1af..0000000000
--- a/migrations/20150731_veteran_tiger.js
+++ /dev/null
@@ -1,5 +0,0 @@
-db.users.update(
- {'items.pets.Wolf-Veteran':{$ne:null}},
- {$set:{'items.pets.Tiger-Veteran':5}},
- {multi:true}
-);
diff --git a/migrations/20150731_veteran_wolf.js b/migrations/20150731_veteran_wolf.js
deleted file mode 100644
index 9d31d4591d..0000000000
--- a/migrations/20150731_veteran_wolf.js
+++ /dev/null
@@ -1,7 +0,0 @@
-// Run after the Veteran Tiger script, not before!
-
-db.users.update(
- {'items.pets.Wolf-Veteran':{$exists:false}},
- {$set:{'items.pets.Wolf-Veteran':5}},
- {multi:true}
-);
diff --git a/migrations/20150906_groups_fix_leaders.js b/migrations/20150906_groups_fix_leaders.js
deleted file mode 100644
index 0a1a226c91..0000000000
--- a/migrations/20150906_groups_fix_leaders.js
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Make sure leaders are existing users
- */
-
-var mongo = require('mongoskin');
-var async = require('async');
-
-var dbserver = 'url';
-var dbname = 'dbname';
-var countGroups = 0;
-var countUsers = 0;
-
-var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect');
-var dbUsers = db.collection('users');
-var dbGroups = db.collection('groups');
-
-console.log('Begins work on db');
-
-function findGroups(gt){
- var query = {};
- if(gt) query._id = {$gt: gt};
-
- console.log(query)
-
- dbGroups.find(query, {
- fields: {_id: 1, members: 1, leader: 1},
- limit: 10000,
- sort: {
- _id: 1
- }
- }).toArray(function(err, groups){
- if(err) throw err;
-
- var lastGroup = null;
- if(groups.length === 10000){
- lastGroup = groups[groups.length - 1];
- }
-
- async.eachLimit(groups, 30, function(group, cb1){
- countGroups++;
- console.log('Group: ', countGroups, group._id);
-
- var members = group.members;
-
- dbUsers.findOne({_id: group.leader}, {fields: {_id: 1}}, function(err, user){
- if(err) return cb1(err);
-
- // If leader has deleted account
- if(!user && (group._id !== 'habitrpg') && members && members[0]) {
- dbGroups.update({
- _id: group._id
- }, {
- $set: {
- // Set first user as new leader
- leader: members[0]
- }
- }, {
- multi: false
- }, function(err, res){
- if(err) return cb1(err);
-
- console.log('Updated: ', res);
- return cb1();
- });
- }else{
- return cb1();
- }
- });
- }, function(err){
- if(err) throw err;
-
- if(lastGroup && lastGroup._id){
- findGroups(lastGroup._id);
- }
- });
- });
-};
-
-findGroups();
\ No newline at end of file
diff --git a/migrations/20150906_groups_remove_deleted_users.js b/migrations/20150906_groups_remove_deleted_users.js
deleted file mode 100644
index 96146a8c0e..0000000000
--- a/migrations/20150906_groups_remove_deleted_users.js
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Remove deleted accounts from groups
- */
-
-var mongo = require('mongoskin');
-var async = require('async');
-
-var dbserver = 'url';
-var dbname = 'dbname';
-var countGroups = 0;
-var countUsers = 0;
-
-var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect');
-var dbUsers = db.collection('users');
-var dbGroups = db.collection('groups');
-
-console.log('Begins work on db');
-
-function findGroups(gt){
- var query = {};
- if(gt) query._id = {$gt: gt};
-
- console.log(query)
-
- dbGroups.find(query, {
- fields: {_id: 1, members: 1},
- limit: 10000,
- sort: {
- _id: 1
- }
- }).toArray(function(err, groups){
- if(err) throw err;
-
- var lastGroup = null;
- if(groups.length === 10000){
- lastGroup = groups[groups.length - 1];
- }
-
- async.eachLimit(groups, 3, function(group, cb1){
- countGroups++;
- console.log('Group: ', countGroups, group._id);
-
- var members = group.members;
-
- // Remove users who deleted their account
- async.eachLimit(members, 15, function(member, cb2){
- dbUsers.findOne({_id: member}, {fields: {_id: 1}}, function(err, user){
- if(err) return cb2(err);
-
- if(!user){
- countUsers++;
- console.log('User removed n. ', countUsers, 'user id ', member, 'group id ', group._id);
-
- dbGroups.update({
- _id: group._id
- }, {
- $pull: {members: member},
- $inc: {memberCount: -1}
- }, {
- multi: false
- }, function(err, res){
- if(err) return cb2(err);
-
- console.log('Updated: ', res);
- return cb2();
- });
- }else{
- cb2();
- }
- });
- }, function(err){
- if(err) return cb1(err);
-
- cb1();
- });
-
- }, function(err){
- if(err) throw err;
-
- if(lastGroup && lastGroup._id){
- findGroups(lastGroup._id);
- }
- });
- });
-};
-
-findGroups();
\ No newline at end of file
diff --git a/migrations/20150906_groups_remove_empty.js b/migrations/20150906_groups_remove_empty.js
deleted file mode 100644
index 44da0b600c..0000000000
--- a/migrations/20150906_groups_remove_empty.js
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * Remove empty private groups
- */
-
-var mongo = require('mongoskin');
-
-var dbserver = 'url';
-var dbname = 'name';
-
-var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect');
-var dbGroups = db.collection('groups');
-
-console.log('Begins work on db');
-
-dbGroups.findEach({
- memberCount: 0,
-}, {_id: 1}, function(err, res){
- if(err) throw err;
-
- console.log(res);
-});
\ No newline at end of file
diff --git a/migrations/20150906_sync_groups_with_firebase.js b/migrations/20150906_sync_groups_with_firebase.js
deleted file mode 100644
index d7b4f12174..0000000000
--- a/migrations/20150906_sync_groups_with_firebase.js
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Sync groups with Firebase
- */
-
-var mongo = require('mongoskin');
-var Firebase = require('Firebase');
-
-var dbserver = 'mongodb://url';
-var dbname = 'db';
-
-var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect');
-var dbGroups = db.collection('groups');
-var countGroups = 0;
-
-var firebaseRef = new Firebase('https://' + 'firebase-app' + '.firebaseio.com');
-
-// TODO handle sync errors with firebase?
-firebaseRef.authWithCustomToken('firebase-secret', function(err, authData){
- if(err) throw new Error('Impossible to authenticate Firebase');
-
- console.log('Firebase connected, begins work on db');
-
- dbGroups.findEach({}, {_id: 1, members: 1}, {batchSize: 100}, function(err, group){
- if(err) throw err;
- if(group._id !== 'habitrpg') return;
-
- countGroups++;
- console.log('Group: ', countGroups);
-
- firebaseRef.child('rooms/' + group._id)
- .set({
- name: group.name
- });
-
- group.members.forEach(function(member){
- firebaseRef.child('members/' + group._id + '/' + userId)
- .set(true);
-
- firebaseRef.child('users/' + member + '/rooms/' + group._id)
- .set(true);
- });
- });
-});
\ No newline at end of file
diff --git a/migrations/20151013_jackolanterns.js b/migrations/20151013_jackolanterns.js
deleted file mode 100644
index 67ff0ac9a2..0000000000
--- a/migrations/20151013_jackolanterns.js
+++ /dev/null
@@ -1,67 +0,0 @@
-var migrationName = '20151013_jackolanterns.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Jack-O'-Lantern mounts to users who already have the pet version, award pet if they don't
- */
-
-var dbserver = 'localhost:27017'; // FOR TEST DATABASE
-// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
-var dbname = 'habitrpg';
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'items.pets.JackOLantern-Base':1
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- // specify user data to change:
- var set = {};
- if (user.items.pets['JackOLantern-Base']) {
- set = {'migration':migrationName, 'items.mounts.JackOLantern-Base':true};
- } else {
- set = {'migration':migrationName, 'items.pets.JackOLantern-Base':5};
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20151021_usernames_emails_lowercase.js b/migrations/20151021_usernames_emails_lowercase.js
deleted file mode 100644
index b40aaad9d7..0000000000
--- a/migrations/20151021_usernames_emails_lowercase.js
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Migrate email to lowerCase version and add auth.local.lowerCaseUsername email
- */
-
-var mongo = require('mongoskin');
-var async = require('async');
-
-var dbserver = 'url';
-var dbname = 'dbname';
-var countUsers = 0;
-
-var db = mongo.db(dbserver + '/' + dbname + '?auto_reconnect');
-var dbUsers = db.collection('users');
-
-console.log('Begins work on db');
-
-function findUsers(gt){
- var query = {};
- if(gt) query._id = {$gt: gt};
-
- console.log(query)
-
- dbUsers.find(query, {
- fields: {_id: 1, auth: 1},
- limit: 10000,
- sort: {
- _id: 1
- }
- }).toArray(function(err, users){
- if(err) throw err;
-
- var lastUser = null;
- if(users.length === 10000){
- lastUser = users[users.length - 1];
- }
-
- async.eachLimit(users, 20, function(user, cb){
- countUsers++;
- console.log('User: ', countUsers, user._id);
-
- var update = {
- $set: {}
- };
-
- if(user.auth && user.auth.local) {
- if(user.auth.local.username) update['$set']['auth.local.lowerCaseUsername'] = user.auth.local.username.toLowerCase();
- if(user.auth.local.email) update['$set']['auth.local.email'] = user.auth.local.email.toLowerCase();
- }
-
- dbUsers.update({
- _id: user._id
- }, update, cb);
- }, function(err){
- if(err) throw err;
-
- if(lastUser && lastUser._id){
- findUsers(lastUser._id);
- }
- });
- });
-};
-
-findUsers();
diff --git a/migrations/20151105_tutorial_flags.js b/migrations/20151105_tutorial_flags.js
deleted file mode 100644
index 6af069965c..0000000000
--- a/migrations/20151105_tutorial_flags.js
+++ /dev/null
@@ -1,63 +0,0 @@
-var migrationName = '20151105_tutorial_flags_v1';
-var authorName = 'Alys'; // in case script author needs to know when their ...
-var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
-
-/*
- * set flags.tutorial.ios and flags.tutorial.main flags to true in preparation
- * for the release of a new iOS tutorial
- *
- */
-
-// var dbserver = 'localhost:27017' // FOR TEST DATABASE
-var dbserver = 'alys:@ds031379-a0.mongolab.com:31379' // FOR PRODUCTION DATABASE
-var dbname = 'habitrpg';
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
-
-var fields = {
-};
-
-
-var query = {
- 'auth.timestamps.loggedin':{$gt:new Date('2015-10-20')}
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- // var set = {'migration':migrationName, 'flags.tutorial.ios':true, 'flags.tutorial.main':true };
- var set = {'migration':migrationName, 'flags.tutorial.ios':{} };
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20151116_costume_contest_award.js b/migrations/20151116_costume_contest_award.js
deleted file mode 100644
index 25891f9215..0000000000
--- a/migrations/20151116_costume_contest_award.js
+++ /dev/null
@@ -1,102 +0,0 @@
-var migrationName = '20151116_costume_contest.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Costume Contest achievement to 2015 winners
- */
-
-var dbserver = 'localhost:27017'; // FOR TEST DATABASE
-// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
-var dbname = 'habitrpg';
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- _id: {
- $in: [
- 'e411dab3-a4ca-414d-bdbd-b6940b3bdeb3',
- '35ced5cc-c33a-45c8-93dc-16000ee66fde',
- 'ab3f0549-7247-4fd5-975b-efcff98c79c3',
- 'b1261fd2-eb25-46b4-97a9-ae7a0dc8a131',
- '1f27893f-3808-4724-9725-f46dab93faca',
- '216a0c23-6afd-4a5e-b434-d386a10862a2',
- '2d6ef231-50b4-4a22-90e7-45eb97147a2c',
- '98b8cf4f-89bd-4b0a-988d-02629a217232',
- 'c5183dfa-c741-43ce-935e-c6d89b41a030',
- '262a7afb-6b57-4d81-88e0-80d2e9f6cbdc',
- '33991e0a-de55-4986-ac81-af78491a84de',
- '7adf6ada-3c05-4054-b5df-fa7d49d3b9eb',
- '235a1cbd-48c5-41b1-afb4-59d2f8645c57',
- 'b7617a61-188b-4332-bf4d-32268fa77f2b',
- '672c1ce0-9f47-44f0-a3f3-8cc3c6c5a9cb',
- 'd0a3217a-7b92-48d6-b39a-b1b1be96702e',
- '5ef910dc-1d22-47d9-aa38-a60132c60679',
- '370a44c8-e94a-4a2c-91f2-33166926db1f',
- '1b0b3ef3-28bd-4046-a49b-e1c83e281baf',
- '75b93321-66b9-49bd-9076-052499c1d2bf',
- 'd97516e4-81d0-4f60-bf03-95f7330925ab',
- '3e13cc79-de38-420d-822e-9e9da309ce6b',
- '0e471dc1-ecb0-4388-a891-b873a237d2cf',
- 'ca3da398-4f73-4304-b838-af3669ed4cbb',
- '44cdf105-8bda-4197-9d1a-1bcb83b4dc84',
- '5419830c-b837-4573-ae82-4718ab95b7f1',
- 'ac6fbe37-b0dc-40d8-ba14-77dde66fbfa8',
- '8789ba18-a498-46b9-b367-3b929a0acb94',
- '52fce1a9-9b0a-4e26-95dc-adc12f52e752',
- '21bf71ac-399c-470b-abe0-cc49a03b6a8b',
- 'f1618ce2-552e-4f23-bc76-e73d63ebedd0',
- '4cc0c749-d943-4090-b529-42bc665b7244',
- 'e259682e-cb5c-4d94-b472-ceedc66d7484',
- 'fa197a4b-e065-4551-803a-c8a5b9970f9d'
- ]
- }
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- // specify user data to change:
- var set = {'migration':migrationName};
- var inc = {'achievements.costumeContests':1};
-
- dbUsers.update({_id:user._id}, {$set:set});
- dbUsers.update({_id:user._id}, {$inc:inc});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20151116_costume_contest_to_number.js b/migrations/20151116_costume_contest_to_number.js
deleted file mode 100644
index 7121e9bc31..0000000000
--- a/migrations/20151116_costume_contest_to_number.js
+++ /dev/null
@@ -1,64 +0,0 @@
-var migrationName = '20151116_costume_contest_to_number.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Change Costume Contest achievement from Boolean to Number, so people can win repeatedly
- */
-
-var dbserver = 'localhost:27017'; // FOR TEST DATABASE
-// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
-var dbname = 'habitrpg';
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'achievements.costumeContest':true
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'achievements.costumeContest':1
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- // specify user data to change:
- var set = {'achievements.costumeContests':1};
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20151125_turkey_ladder.js b/migrations/20151125_turkey_ladder.js
deleted file mode 100644
index e028b4f882..0000000000
--- a/migrations/20151125_turkey_ladder.js
+++ /dev/null
@@ -1,71 +0,0 @@
-var migrationName = '20151125_turkey_ladder.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Gilded Turkey pet to Turkey mount owners, Turkey Mount if they only have Turkey Pet,
- * and Turkey Pet otherwise
- */
-
-var dbserver = 'localhost:27017'; // FOR TEST DATABASE
-// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
-var dbname = 'habitrpg';
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'items.pets.Turkey-Base': 1,
- 'items.mounts.Turkey-Base': 1
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- // specify user data to change:
- var set = {};
- if (user.items.mounts['Turkey-Base']) {
- set = {'migration':migrationName, 'items.pets.Turkey-Gilded':5};
- } else if (user.items.pets['Turkey-Base']) {
- set = {'migration':migrationName, 'items.mounts.Turkey-Base':true};
- } else {
- set = {'migration':migrationName, 'items.pets.Turkey-Base':5};
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20151229_new_years_hats.js b/migrations/20151229_new_years_hats.js
deleted file mode 100644
index 895e545dd0..0000000000
--- a/migrations/20151229_new_years_hats.js
+++ /dev/null
@@ -1,70 +0,0 @@
-var migrationName = '20151229_new_years_hats.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award 2015 party hat if user has 2014 hat, 2014 hat if they have the 2013 hat,
- * and 2013 hat otherwise
- */
-
-var dbserver = 'localhost:27017'; // FOR TEST DATABASE
-// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
-var dbname = 'habitrpg';
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'items.gear.owned': 1,
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- // specify user data to change:
- var set = {};
- if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('head_special_nye2014')) {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye2015':false};
- } else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('head_special_nye')) {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye2014':false};
- } else {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye':false};
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20160521_veteran_ladder.js b/migrations/20160521_veteran_ladder.js
deleted file mode 100644
index 0cc19e4514..0000000000
--- a/migrations/20160521_veteran_ladder.js
+++ /dev/null
@@ -1,82 +0,0 @@
-var migrationName = '20160521_veteran_ladder.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Gilded Turkey pet to Turkey mount owners, Turkey Mount if they only have Turkey Pet,
- * and Turkey Pet otherwise
- */
-
-var dbserver = 'localhost:27017'; // FOR TEST DATABASE
-// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
-var dbname = 'habitrpg';
-
-var mongo = require('mongoskin');
-var _ = require('lodash');
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'auth.timestamps.loggedin':{$gt:new Date('2016-05-01')} // remove when running migration a second time
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'migration': 1,
- 'items.pets.Wolf-Veteran': 1,
- 'items.pets.Tiger-Veteran': 1
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- return displayData();
- }
- count++;
-
- // specify user data to change:
- var set = {};
- if (user.migration !== migrationName) {
- if (user.items.pets['Tiger-Veteran']) {
- set = {'migration':migrationName, 'items.pets.Lion-Veteran':5};
- } else if (user.items.pets['Wolf-Veteran']) {
- set = {'migration':migrationName, 'items.pets.Tiger-Veteran':5};
- } else {
- set = {'migration':migrationName, 'items.pets.Wolf-Veteran':5};
- }
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20160527_fix_empty_checklist_id.js b/migrations/20160527_fix_empty_checklist_id.js
deleted file mode 100644
index 0276d3241e..0000000000
--- a/migrations/20160527_fix_empty_checklist_id.js
+++ /dev/null
@@ -1,84 +0,0 @@
-var uuid = require('uuid').v4;
-var mongo = require('mongodb').MongoClient;
-var _ = require('lodash');
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-var taskIds = require('checklists-no-id.json').map(function (obj) {
- return obj._id;
-});
-
-// Fix empty task.checklistt.id
-
-var progressCount = 100;
-var count = 0;
-
-function displayData() {
- console.warn('\n' + count + ' tasks processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
-
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
-}
-
-mongo.connect('db url')
-.then(function (db) {
- var dbTasks = db.collection('tasks');
-
- // specify a query to limit the affected tasks (empty for all tasks):
- var query = {
- '_id':{ $in: taskIds },
- };
-
- // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
- var fields = {
- 'checklist': 1,
- };
-
- console.warn('Updating tasks...');
-
- dbTasks.find(query, fields, {batchSize: 250}).toArray(function(err, tasks) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
-
- tasks.forEach(function (task) {
- var checklist = task.checklist || [];
- checklist.forEach(function (item) {
- if (!item.id || item.id === "") {
- item.id = uuid();
- }
- });
-
- // specify user data to change:
- var set = {
- checklist: checklist,
- };
- //console.log(set);
-
- dbTasks.update({_id: task._id}, {$set: set}, function (err, res) {
- if (err) console.error('Error while updating', err);
- });
-
- count++;
- if (count % progressCount == 0) console.warn(count + ' ' + task._id);
- });
-
- if (count === tasks.length) {
- console.warn('All appropriate tasks found and modified.');
- return displayData();
- }
- });
-})
-.catch(function (err) {
- throw err;
-});
\ No newline at end of file
diff --git a/migrations/20160731_naming_day.js b/migrations/20160731_naming_day.js
deleted file mode 100644
index 601798d14c..0000000000
--- a/migrations/20160731_naming_day.js
+++ /dev/null
@@ -1,82 +0,0 @@
-var migrationName = '20160731_naming_day.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Royal Purple Gryphon pet to Royal Purple Gryphon mount owners, mount to everyone else
- */
-
-var mongo = require('mongoskin');
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-
-var dbUsers = mongo.db(connectionString).collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'migration':{$ne:migrationName},
- 'auth.timestamps.loggedin':{$gt:new Date('2016-07-30')} // Extend timeframe each run of migration
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'items.mounts': 1
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- setTimeout(displayData, 300000);
- return;
- }
- count++;
-
- // specify user data to change:
- var set = {};
- var inc = {};
- inc = {
- 'achievements.habiticaDays': 1,
- 'items.food.Cake_Skeleton': 1,
- 'items.food.Cake_Base': 1,
- 'items.food.Cake_CottonCandyBlue': 1,
- 'items.food.Cake_CottonCandyPink': 1,
- 'items.food.Cake_Shade': 1,
- 'items.food.Cake_White': 1,
- 'items.food.Cake_Golden': 1,
- 'items.food.Cake_Zombie': 1,
- 'items.food.Cake_Desert': 1,
- 'items.food.Cake_Red': 1
- };
- if (user.items.mounts['Gryphon-RoyalPurple']) {
- set = {'migration':migrationName, 'items.pets.Gryphon-RoyalPurple':5};
- } else {
- set = {'migration':migrationName, 'items.mounts.Gryphon-RoyalPurple':true};
- }
-
- dbUsers.update({_id:user._id}, {$set:set, $inc:inc});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20160731_takeThis.js b/migrations/20160731_takeThis.js
deleted file mode 100644
index b08700a4bd..0000000000
--- a/migrations/20160731_takeThis.js
+++ /dev/null
@@ -1,71 +0,0 @@
-var migrationName = '20160731_takeThis.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Take This Sword to Take This challenge participants who already own the Shield
- * and Take This Shield to the rest of the list
- */
-
-var mongo = require('mongoskin');
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-
-var dbUsers = mongo.db(connectionString).collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'migration':{$ne:migrationName},
- 'auth.timestamps.loggedin':{$gt:new Date('2016-07-30')}, // Extend timeframe each run of migration
- 'challenges':{$in:['da8859b2-5c6e-4aa5-b8b2-8db93d5de9fc']}
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'items.gear.owned': 1
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- setTimeout(displayData, 300000);
- return;
- }
- count++;
-
- // specify user data to change:
- var set = {};
-
- if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.weapon_special_takeThis':false};
- } else {
- set = {'migration':migrationName, 'items.gear.owned.shield_special_takeThis':false};
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20160831_takeThis.js b/migrations/20160831_takeThis.js
deleted file mode 100644
index 853ade4044..0000000000
--- a/migrations/20160831_takeThis.js
+++ /dev/null
@@ -1,72 +0,0 @@
-var migrationName = '20160831_takeThis.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Take This Sword to Take This challenge participants who already own the Shield
- * and Take This Shield to the rest of the list
- */
-
-var mongo = require('mongoskin');
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-
-var dbUsers = mongo.db(connectionString).collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'migration':{$ne:migrationName},
- 'challenges':{$in:['ee2b3c87-13f0-422a-af3c-309102d4f7e6']}
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'items.gear.owned': 1
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- setTimeout(displayData, 300000);
- return;
- }
- count++;
-
- // specify user data to change:
- var set = {};
-
- if (typeof user.items.gear.owned.weapon_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.armor_special_takeThis':false};
- } else if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.weapon_special_takeThis':false};
- } else {
- set = {'migration':migrationName, 'items.gear.owned.shield_special_takeThis':false};
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20161002_takeThis.js b/migrations/20161002_takeThis.js
deleted file mode 100644
index a3dafa3042..0000000000
--- a/migrations/20161002_takeThis.js
+++ /dev/null
@@ -1,73 +0,0 @@
-var migrationName = '20161002_takeThis.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Take This ladder items to participants in this month's challenge
- */
-
-var mongo = require('mongoskin');
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-
-var dbUsers = mongo.db(connectionString).collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'migration':{$ne:migrationName},
- 'challenges':{$in:['4bbf63b5-10bc-49f9-8e95-5bd2ac99cd1c']}
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'items.gear.owned': 1
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- setTimeout(displayData, 300000);
- return;
- }
- count++;
-
- // specify user data to change:
- var set = {};
-
- if (typeof user.items.gear.owned.armor_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_takeThis':false};
- } else if (typeof user.items.gear.owned.weapon_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.armor_special_takeThis':false};
- } else if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.weapon_special_takeThis':false};
- } else {
- set = {'migration':migrationName, 'items.gear.owned.shield_special_takeThis':false};
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20161030-jackolanterns.js b/migrations/20161030-jackolanterns.js
deleted file mode 100644
index bbea4d3455..0000000000
--- a/migrations/20161030-jackolanterns.js
+++ /dev/null
@@ -1,86 +0,0 @@
-var migrationName = '20161030-jackolanterns.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * set the newStuff flag in all user accounts so they see a Bailey message
- */
-
-var mongo = require('mongoskin');
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-
-var dbUsers = mongo.db(connectionString).collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'auth.timestamps.loggedin':{$gt:new Date('2016-10-01')} // remove when running migration a second time
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'migration': 1,
- 'items.pets.JackOLantern-Base': 1,
- 'items.mounts.JackOLantern-Base': 1,
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- setTimeout(displayData, 300000);
- return;
- }
- count++;
-
- // specify user data to change:
- var set = {};
- var inc = {};
- if (user.migration !== migrationName) {
- if (user.items.mounts['JackOLantern-Base']) {
- set = {'migration':migrationName, 'items.pets.JackOLantern-Ghost':5};
- } else if (user.items.pets['JackOLantern-Base']) {
- set = {'migration':migrationName, 'items.mounts.JackOLantern-Base':true};
- } else {
- set = {'migration':migrationName, 'items.pets.JackOLantern-Base':5};
- }
- inc = {
- 'items.food.Candy_Base': 1,
- 'items.food.Candy_CottonCandyBlue': 1,
- 'items.food.Candy_CottonCandyPink': 1,
- 'items.food.Candy_Desert': 1,
- 'items.food.Candy_Golden': 1,
- 'items.food.Candy_Red': 1,
- 'items.food.Candy_Shade': 1,
- 'items.food.Candy_Skeleton': 1,
- 'items.food.Candy_White': 1,
- 'items.food.Candy_Zombie': 1,
- }
- }
-
- dbUsers.update({_id:user._id}, {$set:set, $inc:inc});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20161102_takeThis.js b/migrations/20161102_takeThis.js
deleted file mode 100644
index d13d180ccf..0000000000
--- a/migrations/20161102_takeThis.js
+++ /dev/null
@@ -1,75 +0,0 @@
-var migrationName = '20161102_takeThis.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Take This ladder items to participants in this month's challenge
- */
-
-var mongo = require('mongoskin');
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-
-var dbUsers = mongo.db(connectionString).collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'migration':{$ne:migrationName},
- 'challenges':{$in:['d1be0965-e909-4d30-82fa-9a0011f885b2']}
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'items.gear.owned': 1
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- setTimeout(displayData, 300000);
- return;
- }
- count++;
-
- // specify user data to change:
- var set = {};
-
- if (typeof user.items.gear.owned.head_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.body_special_takeThis':false};
- } else if (typeof user.items.gear.owned.armor_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_takeThis':false};
- } else if (typeof user.items.gear.owned.weapon_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.armor_special_takeThis':false};
- } else if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.weapon_special_takeThis':false};
- } else {
- set = {'migration':migrationName, 'items.gear.owned.shield_special_takeThis':false};
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20161122_turkey_ladder.js b/migrations/20161122_turkey_ladder.js
deleted file mode 100644
index 4992ed272f..0000000000
--- a/migrations/20161122_turkey_ladder.js
+++ /dev/null
@@ -1,74 +0,0 @@
-var migrationName = '20161122_turkey_ladder.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Yearly Turkey Day award. Turkey pet, Turkey mount, Gilded Turkey pet, Gilded Turkey mount
- */
-
-var mongo = require('mongoskin');
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-
-var dbUsers = mongo.db(connectionString).collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'migration':{$ne:migrationName},
- 'auth.timestamps.loggedin':{$gt:new Date('2016-10-31')} // Extend timeframe each run of migration
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'migration': 1,
- 'items.mounts': 1,
- 'items.pets': 1,
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- setTimeout(displayData, 300000);
- return;
- }
- count++;
-
- // specify user data to change:
- var set = {};
-
- if (user.items.pets['Turkey-Gilded']) {
- set = {'migration':migrationName, 'items.mounts.Turkey-Gilded':true};
- } else if (user.items.mounts['Turkey-Base']) {
- set = {'migration':migrationName, 'items.pets.Turkey-Gilded':5};
- } else if (user.items.pets['Turkey-Base']) {
- set = {'migration':migrationName, 'items.mounts.Turkey-Base':true};
- } else {
- set = {'migration':migrationName, 'items.pets.Turkey-Base':5};
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
diff --git a/migrations/20161230_nye_hats.js b/migrations/20161230_nye_hats.js
deleted file mode 100644
index 7eeb8dd7da..0000000000
--- a/migrations/20161230_nye_hats.js
+++ /dev/null
@@ -1,73 +0,0 @@
-var migrationName = '20161230_nye_hats.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Yearly New Year's party hat award
- */
-
-var mongo = require('mongoskin');
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-
-var dbUsers = mongo.db(connectionString).collection('users');
-
-// specify a query to limit the affected users (empty for all users):
-var query = {
- 'migration':{$ne:migrationName},
- 'auth.timestamps.loggedin':{$gt:new Date('2016-11-30')} // Remove after first run
-};
-
-// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
- 'items.gear.owned': 1,
-};
-
-console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
- if (!user) {
- console.warn('All appropriate users found and modified.');
- setTimeout(displayData, 300000);
- return;
- }
- count++;
-
- // specify user data to change:
- var set = {};
-
- if (typeof user.items.gear.owned.head_special_nye2015 !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye2016':false};
- } else if (typeof user.items.gear.owned.head_special_nye2014 !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye2015':false};
- } else if (typeof user.items.gear.owned.head_special_nye !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye2014':false};
- } else {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye':false};
- }
-
- dbUsers.update({_id:user._id}, {$set:set});
-
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-});
-
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
diff --git a/migrations/20170120_missing_incentive.js b/migrations/20170120_missing_incentive.js
deleted file mode 100644
index 8ee3c82c1b..0000000000
--- a/migrations/20170120_missing_incentive.js
+++ /dev/null
@@ -1,113 +0,0 @@
-var migrationName = '20170120_missing_incentive.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award missing Royal Purple Hatching Potion to users with 55+ check-ins
- * Reduce users with impossible check-in counts to a reasonable number
- */
-
-import monk from 'monk';
-import common from '../website/common';
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
-
-function processUsers(lastId) {
- // specify a query to limit the affected users (empty for all users):
- var query = {
- 'loginIncentives': {$gt:54},
- 'migration': {$ne: migrationName},
- };
-
- if (lastId) {
- query._id = {
- $gt: lastId
- }
- }
-
- dbUsers.find(query, {
- sort: {_id: 1},
- limit: 250,
- fields: [] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
- })
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
-}
-
-var progressCount = 1000;
-var count = 0;
-
-function updateUsers (users) {
- if (!users || users.length === 0) {
- console.warn('All appropriate users found and modified.');
- displayData();
- return;
- }
-
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
-
- return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
-}
-
-function updateUser (user) {
- count++;
-
- var language = user.preferences.language || 'en';
- var set = {'migration': migrationName};
- var inc = {'items.hatchingPotions.RoyalPurple': 1};
- if (user.loginIncentives > 58) {
- set = {'migration': migrationName, 'loginIncentives': 58};
- }
- var push = {
- 'notifications': {
- 'type': 'LOGIN_INCENTIVE',
- 'data': {
- 'nextRewardAt': 60,
- 'rewardKey': [
- 'Pet_HatchingPotion_Purple',
- ],
- 'rewardText': common.i18n.t('potion', {potionType: common.i18n.t('hatchingPotionRoyalPurple', language)}, language),
- 'reward': [
- {
- 'premium': true,
- 'key': 'RoyalPurple',
- 'limited': true,
- 'value': 2,
- }
- ],
- 'message': common.i18n.t('unlockedCheckInReward', language),
- },
- 'id': common.uuid(),
- }
- };
-
- dbUsers.update({_id: user._id}, {$set:set, $push:push, $inc:inc});
-
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-}
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
-module.exports = processUsers;
diff --git a/migrations/20170131_habit_birthday.js b/migrations/20170131_habit_birthday.js
deleted file mode 100644
index bb1571c71b..0000000000
--- a/migrations/20170131_habit_birthday.js
+++ /dev/null
@@ -1,109 +0,0 @@
-var migrationName = '20170131_habit_birthday.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award 2017 party robes if user has 2016 robes, 2016 robes if they have the 2015 robes,
- * 2015 robes if they have the 2014 robes, and 2014 robes otherwise. Also cake!
- */
-
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
-
-function processUsers(lastId) {
- // specify a query to limit the affected users (empty for all users):
- var query = {
- 'migration':{$ne:migrationName},
- 'auth.timestamps.loggedin':{$gt:new Date('2017-01-24')}, // remove after first run to cover remaining users
- };
-
- if (lastId) {
- query._id = {
- $gt: lastId
- }
- }
-
- dbUsers.find(query, {
- sort: {_id: 1},
- limit: 250,
- fields: [ // specify fields we are interested in to limit retrieved data (empty if we're not reading data)
- 'items.gear.owned'
- ],
- })
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
-}
-
-var progressCount = 1000;
-var count = 0;
-
-function updateUsers (users) {
- if (!users || users.length === 0) {
- console.warn('All appropriate users found and modified.');
- displayData();
- return;
- }
-
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
-
- return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
-}
-
-function updateUser (user) {
- count++;
-
- var set = {'migration':migrationName};
- if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday2016')) {
- set['items.gear.owned.armor_special_birthday2017'] = false;
- } else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday2015')) {
- set['items.gear.owned.armor_special_birthday2016'] = false;
- } else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday')) {
- set['items.gear.owned.armor_special_birthday2015'] = false;
- } else {
- set['items.gear.owned.armor_special_birthday'] = false;
- }
-
- var inc = {
- 'items.food.Cake_Skeleton':1,
- 'items.food.Cake_Base':1,
- 'items.food.Cake_CottonCandyBlue':1,
- 'items.food.Cake_CottonCandyPink':1,
- 'items.food.Cake_Shade':1,
- 'items.food.Cake_White':1,
- 'items.food.Cake_Golden':1,
- 'items.food.Cake_Zombie':1,
- 'items.food.Cake_Desert':1,
- 'items.food.Cake_Red':1,
- 'achievements.habitBirthdays':1
- };
-
- dbUsers.update({_id: user._id}, {$set:set, $inc:inc});
-
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-}
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
-module.exports = processUsers;
diff --git a/migrations/20170418_subscriber_jackalopes.js b/migrations/20170418_subscriber_jackalopes.js
deleted file mode 100644
index d32867de98..0000000000
--- a/migrations/20170418_subscriber_jackalopes.js
+++ /dev/null
@@ -1,88 +0,0 @@
-var migrationName = '20170418_subscriber_jackalopes.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Royal Purple Jackalope pet to all current subscribers
- */
-
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
-var now = new Date();
-
-function processUsers(lastId) {
- // specify a query to limit the affected users (empty for all users):
- var query = {
- 'purchased.plan.customerId': {$type: 2},
- $or: [
- {'purchased.plan.dateTerminated': null},
- {'purchased.plan.dateTerminated': {$exists: false}},
- {'purchased.plan.dateTerminated': {$gt: now}},
- ]
- };
-
- if (lastId) {
- query._id = {
- $gt: lastId
- }
- }
-
- dbUsers.find(query, {
- sort: {_id: 1},
- limit: 250,
- fields: [] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
- })
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
-}
-
-var progressCount = 1000;
-var count = 0;
-
-function updateUsers (users) {
- if (!users || users.length === 0) {
- console.warn('All appropriate users found and modified.');
- displayData();
- return;
- }
-
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
-
- return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
-}
-
-function updateUser (user) {
- count++;
-
- var set = {'items.pets.Jackalope-RoyalPurple': 5};
-
- dbUsers.update({_id: user._id}, {$set:set});
-
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-}
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
-module.exports = processUsers;
diff --git a/migrations/20170711_orcas.js b/migrations/20170711_orcas.js
deleted file mode 100644
index fbecd0cecd..0000000000
--- a/migrations/20170711_orcas.js
+++ /dev/null
@@ -1,90 +0,0 @@
-var migrationName = '20170711_orcas.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Orca pets to owners of Orca mount, and Orca mount to everyone else
- */
-
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
-
-function processUsers(lastId) {
- // specify a query to limit the affected users (empty for all users):
- var query = {
- 'migration':{$ne:migrationName},
- };
-
- if (lastId) {
- query._id = {
- $gt: lastId
- }
- }
-
- dbUsers.find(query, {
- sort: {_id: 1},
- limit: 250,
- fields: [
- 'items.mounts',
- ] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
- })
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
-}
-
-var progressCount = 1000;
-var count = 0;
-
-function updateUsers (users) {
- if (!users || users.length === 0) {
- console.warn('All appropriate users found and modified.');
- displayData();
- return;
- }
-
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
-
- return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
-}
-
-function updateUser (user) {
- count++;
-
- var set = {};
-
- if (user.items.mounts['Orca-Base']) {
- set = {'migration':migrationName, 'items.pets.Orca-Base': 5};
- } else {
- set = {'migration':migrationName, 'items.mounts.Orca-Base': true};
- }
-
- dbUsers.update({_id: user._id}, {$set:set});
-
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-}
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
-module.exports = processUsers;
diff --git a/migrations/20170731_naming_day.js b/migrations/20170731_naming_day.js
deleted file mode 100644
index a87ff6cb5a..0000000000
--- a/migrations/20170731_naming_day.js
+++ /dev/null
@@ -1,109 +0,0 @@
-var migrationName = '20170731_naming_day.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award Royal Purple Gryphon Helm to Royal Purple Gryphon pet owners,
- * award Royal Purple Gryphon pet to Royal Purple Gryphon mount owners,
- * award Royal Purple Gryphon mount to everyone else
- */
-
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
-
-function processUsers(lastId) {
- // specify a query to limit the affected users (empty for all users):
- var query = {
- 'migration':{$ne:migrationName},
- 'auth.timestamps.loggedin': {$gt: new Date('2017-01-01')},
- };
-
- if (lastId) {
- query._id = {
- $gt: lastId
- }
- }
-
- dbUsers.find(query, {
- sort: {_id: 1},
- limit: 250,
- fields: [
- 'items.mounts',
- 'items.pets',
- ] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
- })
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
-}
-
-var progressCount = 1000;
-var count = 0;
-
-function updateUsers (users) {
- if (!users || users.length === 0) {
- console.warn('All appropriate users found and modified.');
- displayData();
- return;
- }
-
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
-
- return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
-}
-
-function updateUser (user) {
- count++;
-
- var set = {};
- var inc = {
- 'achievements.habiticaDays': 1,
- 'items.food.Cake_Skeleton': 1,
- 'items.food.Cake_Base': 1,
- 'items.food.Cake_CottonCandyBlue': 1,
- 'items.food.Cake_CottonCandyPink': 1,
- 'items.food.Cake_Shade': 1,
- 'items.food.Cake_White': 1,
- 'items.food.Cake_Golden': 1,
- 'items.food.Cake_Zombie': 1,
- 'items.food.Cake_Desert': 1,
- 'items.food.Cake_Red': 1
- };
-
- if (user.items.pets['Gryphon-RoyalPurple']) {
- set = {'migration':migrationName, 'items.gear.owned.head_special_namingDay2017': false};
- } else if (user.items.mounts['Gryphon-RoyalPurple']) {
- set = {'migration':migrationName, 'items.pets.Gryphon-RoyalPurple': 5};
- } else {
- set = {'migration':migrationName, 'items.mounts.Gryphon-RoyalPurple': true};
- }
-
- dbUsers.update({_id: user._id}, {$set: set, $inc: inc});
-
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-}
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
-module.exports = processUsers;
diff --git a/migrations/20170928_redesign_guilds.js b/migrations/20170928_redesign_guilds.js
deleted file mode 100644
index 62d68d4ac4..0000000000
--- a/migrations/20170928_redesign_guilds.js
+++ /dev/null
@@ -1,97 +0,0 @@
-var migrationName = '20170928_redesign_guilds.js';
-
-/*
- * Copy Guild Leader messages to end of Guild descriptions
- * Copy Guild logos to beginning of Guild descriptions
- */
-
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbGroups = monk(connectionString).get('groups', { castIds: false });
-
-function processGroups(lastId) {
- // specify a query to limit the affected groups (empty for all groups):
- var query = {
- };
-
- var fields = {
- 'description': 1,
- 'logo': 1,
- 'leaderMessage': 1,
- }
-
- if (lastId) {
- query._id = {
- $gt: lastId
- }
- }
-
- return dbGroups.find(query, {
- fields: fields,
- sort: {_id: 1},
- limit: 250,
- })
- .then(updateGroups)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
-}
-
-var progressCount = 1000;
-var count = 0;
-
-function updateGroups (groups) {
- if (!groups || groups.length === 0) {
- console.warn('All appropriate groups found and modified.');
- displayData();
- return;
- }
-
- var groupPromises = groups.map(updateGroup);
- var lastGroup = groups[groups.length - 1];
-
- return Promise.all(groupPromises)
- .then(function () {
- processGroups(lastGroup._id);
- });
-}
-
-function updateGroup (group) {
- count++;
-
- var description = group.description;
-
- if (group.logo) {
- description = '\n\n \n\n' + description;
- }
-
- if (group.leaderMessage) {
- description = description + '\n\n \n\n' + group.leaderMessage;
- }
-
- var set = {
- description: description,
- };
-
- if (count % progressCount == 0) console.warn(count + ' ' + group._id);
-
- return dbGroups.update({_id: group._id}, {$set:set});
-}
-
-function displayData() {
- console.warn('\n' + count + ' groups processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
-module.exports = processGroups;
diff --git a/migrations/20171030_jackolanterns.js b/migrations/20171030_jackolanterns.js
deleted file mode 100644
index 63be6de265..0000000000
--- a/migrations/20171030_jackolanterns.js
+++ /dev/null
@@ -1,111 +0,0 @@
-var migrationName = '20171030_jackolanterns.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award the Jack-O'-Lantern ladder:
- * Ghost Jack-O-Lantern Mount to owners of Ghost Jack-O-Lantern Pet
- * Ghost Jack-O-Lantern Pet to owners of Jack-O-Lantern Mount
- * Jack-O-Lantern Mount to owners of Jack-O-Lantern Pet
- * Jack-O-Lantern Pet to everyone else
- */
-
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
-
-function processUsers(lastId) {
- // specify a query to limit the affected users (empty for all users):
- var query = {
- 'migration':{$ne:migrationName},
- };
-
- if (lastId) {
- query._id = {
- $gt: lastId
- }
- }
-
- dbUsers.find(query, {
- sort: {_id: 1},
- limit: 250,
- fields: [
- 'items.pets',
- 'items.mounts',
- ] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
- })
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
-}
-
-var progressCount = 1000;
-var count = 0;
-
-function updateUsers (users) {
- if (!users || users.length === 0) {
- console.warn('All appropriate users found and modified.');
- displayData();
- return;
- }
-
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
-
- return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
-}
-
-function updateUser (user) {
- count++;
-
- var set = {};
- var inc = {
- 'items.food.Candy_Skeleton': 1,
- 'items.food.Candy_Base': 1,
- 'items.food.Candy_CottonCandyBlue': 1,
- 'items.food.Candy_CottonCandyPink': 1,
- 'items.food.Candy_Shade': 1,
- 'items.food.Candy_White': 1,
- 'items.food.Candy_Golden': 1,
- 'items.food.Candy_Zombie': 1,
- 'items.food.Candy_Desert': 1,
- 'items.food.Candy_Red': 1,
- };
-
- if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Ghost']) {
- set = {'migration':migrationName, 'items.mounts.JackOLantern-Ghost': true};
- } else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Base']) {
- set = {'migration':migrationName, 'items.pets.JackOLantern-Ghost': 5};
- } else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Base']) {
- set = {'migration':migrationName, 'items.mounts.JackOLantern-Base': true};
- } else {
- set = {'migration':migrationName, 'items.pets.JackOLantern-Base': 5};
- }
-
- dbUsers.update({_id: user._id}, {$set:set, $inc:inc});
-
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-}
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
-module.exports = processUsers;
diff --git a/migrations/20171230_nye_hats.js b/migrations/20171230_nye_hats.js
deleted file mode 100644
index 08db9a4158..0000000000
--- a/migrations/20171230_nye_hats.js
+++ /dev/null
@@ -1,103 +0,0 @@
-var migrationName = '20171230_nye_hats.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
-
-/*
- * Award New Year's Eve party hats to users in sequence
- */
-
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
-
-function processUsers(lastId) {
- // specify a query to limit the affected users (empty for all users):
- var query = {
- 'migration': {$ne:migrationName},
- 'auth.timestamps.loggedin': {$gt:new Date('2017-11-30')},
- };
-
- if (lastId) {
- query._id = {
- $gt: lastId
- }
- }
-
- dbUsers.find(query, {
- sort: {_id: 1},
- limit: 250,
- fields: [
- 'items.gear.owned',
- ] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
- })
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
-}
-
-var progressCount = 1000;
-var count = 0;
-
-function updateUsers (users) {
- if (!users || users.length === 0) {
- console.warn('All appropriate users found and modified.');
- displayData();
- return;
- }
-
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
-
- return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
-}
-
-function updateUser (user) {
- count++;
-
- var set = {};
- var push = {};
-
- if (typeof user.items.gear.owned.head_special_nye2016 !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye2017':false};
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye2017', '_id': monk.id()}};
- } else if (typeof user.items.gear.owned.head_special_nye2015 !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye2016':false};
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye2016', '_id': monk.id()}};
- } else if (typeof user.items.gear.owned.head_special_nye2014 !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye2015':false};
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye2015', '_id': monk.id()}};
- } else if (typeof user.items.gear.owned.head_special_nye !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye2014':false};
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye2014', '_id': monk.id()}};
- } else {
- set = {'migration':migrationName, 'items.gear.owned.head_special_nye':false};
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye', '_id': monk.id()}};
- }
-
- dbUsers.update({_id: user._id}, {$set: set, $push: push});
-
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
-}
-
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
-module.exports = processUsers;
diff --git a/migrations/api_v3/challenges.js b/migrations/api_v3/challenges.js
deleted file mode 100644
index 94adbed6e5..0000000000
--- a/migrations/api_v3/challenges.js
+++ /dev/null
@@ -1,218 +0,0 @@
-// Migrate challenges collection to new schema (except for members)
-
-// The console-stamp module must be installed (not included in package.json)
-
-// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
-
-// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
-// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-console.log('Starting migrations/api_v3/challenges.js.');
-
-require('babel-register');
-require('babel-polyfill');
-
-var Bluebird = require('bluebird');
-var MongoDB = require('mongodb');
-var nconf = require('nconf');
-var mongoose = require('mongoose');
-var _ = require('lodash');
-var uuid = require('uuid');
-var consoleStamp = require('console-stamp');
-var fs = require('fs');
-
-// Add timestamps to console messages
-consoleStamp(console);
-
-// Initialize configuration
-require('../../website/server/libs/api-v3/setupNconf')();
-
-var MONGODB_OLD = nconf.get('MONGODB_OLD');
-var MONGODB_NEW = nconf.get('MONGODB_NEW');
-
-var MongoClient = MongoDB.MongoClient;
-
-mongoose.Promise = Bluebird; // otherwise mongoose models won't work
-
-// Load new models
-var NewChallenge = require('../../website/server/models/challenge').model;
-var Tasks = require('../../website/server/models/task');
-
-// To be defined later when MongoClient connects
-var mongoDbOldInstance;
-var oldChallengeCollection;
-
-var mongoDbNewInstance;
-var newChallengeCollection;
-var newTaskCollection;
-
-var BATCH_SIZE = 1000;
-
-var processedChallenges = 0;
-var totoalProcessedTasks = 0;
-
-var newTasksIds = {}; // a map of old id -> [new id, challengeId]
-
-// Only process challenges that fall in a interval ie -> up to 0000-4000-0000-0000
-var AFTER_CHALLENGE_ID = nconf.get('AFTER_CHALLENGE_ID');
-var BEFORE_CHALLENGE_ID = nconf.get('BEFORE_CHALLENGE_ID');
-
-function processChallenges (afterId) {
- var processedTasks = 0;
- var lastChallenge = null;
- var oldChallenges;
-
- var query = {};
-
- if (BEFORE_CHALLENGE_ID) {
- query._id = {$lte: BEFORE_CHALLENGE_ID};
- }
-
- if ((afterId || AFTER_CHALLENGE_ID) && !query._id) {
- query._id = {};
- }
-
- if (afterId) {
- query._id.$gt = afterId;
- } else if (AFTER_CHALLENGE_ID) {
- query._id.$gt = AFTER_CHALLENGE_ID;
- }
-
- var batchInsertTasks = newTaskCollection.initializeUnorderedBulkOp();
- var batchInsertChallenges = newChallengeCollection.initializeUnorderedBulkOp();
-
- console.log(`Executing challenges query.\nMatching challenges after ${afterId ? afterId : AFTER_CHALLENGE_ID} and before ${BEFORE_CHALLENGE_ID} (included).`);
-
- return oldChallengeCollection
- .find(query)
- .sort({_id: 1})
- .limit(BATCH_SIZE)
- .toArray()
- .then(function (oldChallengesR) {
- oldChallenges = oldChallengesR;
-
- console.log(`Processing ${oldChallenges.length} challenges. Already processed ${processedChallenges} challenges and ${totoalProcessedTasks} tasks.`);
-
- if (oldChallenges.length === BATCH_SIZE) {
- lastChallenge = oldChallenges[oldChallenges.length - 1]._id;
- }
-
- oldChallenges.forEach(function (oldChallenge) {
- var oldTasks = oldChallenge.habits.concat(oldChallenge.dailys).concat(oldChallenge.rewards).concat(oldChallenge.todos);
- delete oldChallenge.habits;
- delete oldChallenge.dailys;
- delete oldChallenge.rewards;
- delete oldChallenge.todos;
-
- var createdAt = oldChallenge.timestamp;
-
- oldChallenge.memberCount = oldChallenge.members.length;
- if (oldChallenge.prize <= 0) oldChallenge.prize = 0;
- if (!oldChallenge.name) oldChallenge.name = 'challenge name';
- if (!oldChallenge.shortName) oldChallenge.name = 'challenge-name';
-
- if (!oldChallenge.group) throw new Error('challenge.group is required');
- if (!oldChallenge.leader) throw new Error('challenge.leader is required');
-
-
- if (oldChallenge.leader === '9') {
- oldChallenge.leader = '00000000-0000-4000-9000-000000000000';
- }
-
- if (oldChallenge.group === 'habitrpg') {
- oldChallenge.group = '00000000-0000-4000-A000-000000000000';
- }
-
- delete oldChallenge.id;
-
- var newChallenge = new NewChallenge(oldChallenge);
-
- newChallenge.createdAt = createdAt;
-
- oldTasks.forEach(function (oldTask) {
- oldTask._id = uuid.v4();
- oldTask._legacyId = oldTask.id; // store the old task id
- delete oldTask.id;
-
- oldTask.challenge = oldTask.challenge || {};
- oldTask.challenge.id = newChallenge._id;
-
- if (newTasksIds[oldTask._legacyId + '-' + newChallenge._id]) {
- throw new Error('duplicate :(');
- } else {
- newTasksIds[oldTask._legacyId + '-' + newChallenge._id] = oldTask._id;
- }
-
- oldTask.tags = _.map(oldTask.tags || {}, function (tagPresent, tagId) {
- return tagPresent && tagId;
- }).filter(function (tag) {
- return tag !== false;
- });
-
- if (!oldTask.text) oldTask.text = 'task text'; // required
-
- oldTask.createdAt = oldTask.dateCreated;
-
- newChallenge.tasksOrder[`${oldTask.type}s`].push(oldTask._id);
- if (oldTask.completed) oldTask.completed = false;
-
- var newTask = new Tasks[oldTask.type](oldTask);
-
- batchInsertTasks.insert(newTask.toObject());
- processedTasks++;
- });
-
- batchInsertChallenges.insert(newChallenge.toObject());
- });
-
- console.log(`Saving ${oldChallenges.length} challenges and ${processedTasks} tasks.`);
-
- return Bluebird.all([
- batchInsertChallenges.execute(),
- batchInsertTasks.execute(),
- ]);
- })
- .then(function () {
- totoalProcessedTasks += processedTasks;
- processedChallenges += oldChallenges.length;
-
- console.log(`Saved ${oldChallenges.length} challenges and their tasks.`);
-
- if (lastChallenge) {
- return processChallenges(lastChallenge);
- } else {
- console.log('Writing newTasksIds.json...')
- fs.writeFileSync('newTasksIds.json', JSON.stringify(newTasksIds, null, 4), 'utf8');
- return console.log('Done!');
- }
- });
-}
-
-// Connect to the databases
-Bluebird.all([
- MongoClient.connect(MONGODB_OLD),
- MongoClient.connect(MONGODB_NEW),
-])
-.then(function (result) {
- var oldInstance = result[0];
- var newInstance = result[1];
-
- mongoDbOldInstance = oldInstance;
- oldChallengeCollection = mongoDbOldInstance.collection('challenges');
-
- mongoDbNewInstance = newInstance;
- newChallengeCollection = mongoDbNewInstance.collection('challenges');
- newTaskCollection = mongoDbNewInstance.collection('tasks');
-
- console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
-
- return processChallenges();
-})
-.catch(function (err) {
- console.error(err.stack || err);
-});
diff --git a/migrations/api_v3/challengesMembers.js b/migrations/api_v3/challengesMembers.js
deleted file mode 100644
index 349abde57b..0000000000
--- a/migrations/api_v3/challengesMembers.js
+++ /dev/null
@@ -1,149 +0,0 @@
-// Migrate challenges members
-// Run AFTER users migration
-
-// The console-stamp module must be installed (not included in package.json)
-
-// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
-
-// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
-// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
-console.log('Starting migrations/api_v3/challengesMembers.js.');
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-require('babel-register');
-require('babel-polyfill');
-
-var Bluebird = require('bluebird');
-var MongoDB = require('mongodb');
-var nconf = require('nconf');
-var mongoose = require('mongoose');
-var _ = require('lodash');
-var uuid = require('uuid');
-var consoleStamp = require('console-stamp');
-
-// Add timestamps to console messages
-consoleStamp(console);
-
-// Initialize configuration
-require('../../website/server/libs/api-v3/setupNconf')();
-
-var MONGODB_OLD = nconf.get('MONGODB_OLD');
-var MONGODB_NEW = nconf.get('MONGODB_NEW');
-
-var MongoClient = MongoDB.MongoClient;
-
-mongoose.Promise = Bluebird; // otherwise mongoose models won't work
-
-// To be defined later when MongoClient connects
-var mongoDbOldInstance;
-var oldChallengeCollection;
-
-var mongoDbNewInstance;
-var newUserCollection;
-
-var BATCH_SIZE = 1000;
-
-var processedChallenges = 0;
-
-// Only process challenges that fall in a interval ie -> up to 0000-4000-0000-0000
-var AFTER_CHALLENGE_ID = nconf.get('AFTER_CHALLENGE_ID');
-var BEFORE_CHALLENGE_ID = nconf.get('BEFORE_CHALLENGE_ID');
-
-function processChallenges (afterId) {
- var processedTasks = 0;
- var lastChallenge = null;
- var oldChallenges;
-
- var query = {};
-
- if (BEFORE_CHALLENGE_ID) {
- query._id = {$lte: BEFORE_CHALLENGE_ID};
- }
-
- if ((afterId || AFTER_CHALLENGE_ID) && !query._id) {
- query._id = {};
- }
-
- if (afterId) {
- query._id.$gt = afterId;
- } else if (AFTER_CHALLENGE_ID) {
- query._id.$gt = AFTER_CHALLENGE_ID;
- }
-
- console.log(`Executing challenges query.\nMatching challenges after ${afterId ? afterId : AFTER_CHALLENGE_ID} and before ${BEFORE_CHALLENGE_ID} (included).`);
-
- return oldChallengeCollection
- .find(query)
- .sort({_id: 1})
- .limit(BATCH_SIZE)
- .toArray()
- .then(function (oldChallengesR) {
- oldChallenges = oldChallengesR;
-
- var promises = [];
-
- console.log(`Processing ${oldChallenges.length} challenges. Already processed ${processedChallenges} challenges.`);
-
- if (oldChallenges.length === BATCH_SIZE) {
- lastChallenge = oldChallenges[oldChallenges.length - 1]._id;
- }
-
- oldChallenges.forEach(function (oldChallenge) {
- // Tyler Renelle
- oldChallenge.members.forEach(function (id, index) {
- if (id === '9') {
- oldChallenge.members[index] = '00000000-0000-4000-9000-000000000000';
- }
- });
-
- promises.push(newUserCollection.updateMany({
- _id: {$in: oldChallenge.members || []},
- }, {
- $push: {challenges: oldChallenge._id},
- }, {multi: true}));
- });
-
- console.log(`Migrating members of ${oldChallenges.length} challenges.`);
-
- return Bluebird.all(promises);
- })
- .then(function () {
- processedChallenges += oldChallenges.length;
-
- console.log(`Migrated members of ${oldChallenges.length} challenges.`);
-
- if (lastChallenge) {
- return processChallenges(lastChallenge);
- } else {
- return console.log('Done!');
- }
- });
-}
-
-// Connect to the databases
-Bluebird.all([
- MongoClient.connect(MONGODB_OLD),
- MongoClient.connect(MONGODB_NEW),
-])
-.then(function (result) {
- var oldInstance = result[0];
- var newInstance = result[1];
-
- mongoDbOldInstance = oldInstance;
- oldChallengeCollection = mongoDbOldInstance.collection('challenges');
-
- mongoDbNewInstance = newInstance;
- newUserCollection = mongoDbNewInstance.collection('users');
-
- console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
-
- return processChallenges();
-})
-.catch(function (err) {
- console.error(err.stack || err);
-});
diff --git a/migrations/api_v3/coupons.js b/migrations/api_v3/coupons.js
deleted file mode 100644
index 8b79deba8d..0000000000
--- a/migrations/api_v3/coupons.js
+++ /dev/null
@@ -1,142 +0,0 @@
-// Migrate coupons collection to new schema
-
-// The console-stamp module must be installed (not included in package.json)
-
-// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
-
-// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
-// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
-console.log('Starting migrations/api_v3/coupons.js.');
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-require('babel-register');
-require('babel-polyfill');
-
-var Bluebird = require('bluebird');
-var MongoDB = require('mongodb');
-var nconf = require('nconf');
-var mongoose = require('mongoose');
-var _ = require('lodash');
-var uuid = require('uuid');
-var consoleStamp = require('console-stamp');
-
-// Add timestamps to console messages
-consoleStamp(console);
-
-// Initialize configuration
-require('../../website/server/libs/api-v3/setupNconf')();
-
-var MONGODB_OLD = nconf.get('MONGODB_OLD');
-var MONGODB_NEW = nconf.get('MONGODB_NEW');
-
-var MongoClient = MongoDB.MongoClient;
-
-mongoose.Promise = Bluebird; // otherwise mongoose models won't work
-
-// Load new models
-var Coupon = require('../../website/server/models/coupon').model;
-
-// To be defined later when MongoClient connects
-var mongoDbOldInstance;
-var oldCouponCollection;
-
-var mongoDbNewInstance;
-var newCouponCollection;
-
-var BATCH_SIZE = 1000;
-
-var processedCoupons = 0;
-
-// Only process coupons that fall in a interval ie -> up to 0000-4000-0000-0000
-var AFTER_COUPON_ID = nconf.get('AFTER_COUPON_ID');
-var BEFORE_COUPON_ID = nconf.get('BEFORE_COUPON_ID');
-
-function processCoupons (afterId) {
- var processedTasks = 0;
- var lastCoupon = null;
- var oldCoupons;
-
- var query = {};
-
- if (BEFORE_COUPON_ID) {
- query._id = {$lte: BEFORE_COUPON_ID};
- }
-
- if ((afterId || AFTER_COUPON_ID) && !query._id) {
- query._id = {};
- }
-
- if (afterId) {
- query._id.$gt = afterId;
- } else if (AFTER_COUPON_ID) {
- query._id.$gt = AFTER_COUPON_ID;
- }
-
- var batchInsertCoupons = newCouponCollection.initializeUnorderedBulkOp();
-
- console.log(`Executing coupons query.\nMatching coupons after ${afterId ? afterId : AFTER_COUPON_ID} and before ${BEFORE_COUPON_ID} (included).`);
-
- return oldCouponCollection
- .find(query)
- .sort({_id: 1})
- .limit(BATCH_SIZE)
- .toArray()
- .then(function (oldCouponsR) {
- oldCoupons = oldCouponsR;
-
- console.log(`Processing ${oldCoupons.length} coupons. Already processed ${processedCoupons} coupons.`);
-
- if (oldCoupons.length === BATCH_SIZE) {
- lastCoupon = oldCoupons[oldCoupons.length - 1]._id;
- }
-
- oldCoupons.forEach(function (oldCoupon) {
- var newCoupon = new Coupon(oldCoupon);
-
- batchInsertCoupons.insert(newCoupon.toObject());
- });
-
- console.log(`Saving ${oldCoupons.length} coupons.`);
-
- return batchInsertCoupons.execute();
- })
- .then(function () {
- processedCoupons += oldCoupons.length;
-
- console.log(`Saved ${oldCoupons.length} coupons.`);
-
- if (lastCoupon) {
- return processCoupons(lastCoupon);
- } else {
- return console.log('Done!');
- }
- });
-}
-
-// Connect to the databases
-Bluebird.all([
- MongoClient.connect(MONGODB_OLD),
- MongoClient.connect(MONGODB_NEW),
-])
-.then(function (result) {
- var oldInstance = result[0];
- var newInstance = result[1];
-
- mongoDbOldInstance = oldInstance;
- oldCouponCollection = mongoDbOldInstance.collection('coupons');
-
- mongoDbNewInstance = newInstance;
- newCouponCollection = mongoDbNewInstance.collection('coupons');
-
- console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
-
- return processCoupons();
-})
-.catch(function (err) {
- console.error(err.stack || err);
-});
diff --git a/migrations/api_v3/emailUnsubscriptions.js b/migrations/api_v3/emailUnsubscriptions.js
deleted file mode 100644
index 3e1629563e..0000000000
--- a/migrations/api_v3/emailUnsubscriptions.js
+++ /dev/null
@@ -1,143 +0,0 @@
-// Migrate unsubscriptions collection to new schema
-
-// The console-stamp module must be installed (not included in package.json)
-
-// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
-
-// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
-// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
-console.log('Starting migrations/api_v3/unsubscriptions.js.');
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-require('babel-register');
-require('babel-polyfill');
-
-var Bluebird = require('bluebird');
-var MongoDB = require('mongodb');
-var nconf = require('nconf');
-var mongoose = require('mongoose');
-var _ = require('lodash');
-var uuid = require('uuid');
-var consoleStamp = require('console-stamp');
-
-// Add timestamps to console messages
-consoleStamp(console);
-
-// Initialize configuration
-require('../../website/server/libs/api-v3/setupNconf')();
-
-var MONGODB_OLD = nconf.get('MONGODB_OLD');
-var MONGODB_NEW = nconf.get('MONGODB_NEW');
-
-var MongoClient = MongoDB.MongoClient;
-
-mongoose.Promise = Bluebird; // otherwise mongoose models won't work
-
-// Load new models
-var EmailUnsubscription = require('../../website/server/models/emailUnsubscription').model;
-
-// To be defined later when MongoClient connects
-var mongoDbOldInstance;
-var oldUnsubscriptionCollection;
-
-var mongoDbNewInstance;
-var newUnsubscriptionCollection;
-
-var BATCH_SIZE = 1000;
-
-var processedUnsubscriptions = 0;
-
-// Only process unsubscriptions that fall in a interval ie -> up to 0000-4000-0000-0000
-var AFTER_UNSUBSCRIPTION_ID = nconf.get('AFTER_UNSUBSCRIPTION_ID');
-var BEFORE_UNSUBSCRIPTION_ID = nconf.get('BEFORE_UNSUBSCRIPTION_ID');
-
-function processUnsubscriptions (afterId) {
- var processedTasks = 0;
- var lastUnsubscription = null;
- var oldUnsubscriptions;
-
- var query = {};
-
- if (BEFORE_UNSUBSCRIPTION_ID) {
- query._id = {$lte: BEFORE_UNSUBSCRIPTION_ID};
- }
-
- if ((afterId || AFTER_UNSUBSCRIPTION_ID) && !query._id) {
- query._id = {};
- }
-
- if (afterId) {
- query._id.$gt = afterId;
- } else if (AFTER_UNSUBSCRIPTION_ID) {
- query._id.$gt = AFTER_UNSUBSCRIPTION_ID;
- }
-
- var batchInsertUnsubscriptions = newUnsubscriptionCollection.initializeUnorderedBulkOp();
-
- console.log(`Executing unsubscriptions query.\nMatching unsubscriptions after ${afterId ? afterId : AFTER_UNSUBSCRIPTION_ID} and before ${BEFORE_UNSUBSCRIPTION_ID} (included).`);
-
- return oldUnsubscriptionCollection
- .find(query)
- .sort({_id: 1})
- .limit(BATCH_SIZE)
- .toArray()
- .then(function (oldUnsubscriptionsR) {
- oldUnsubscriptions = oldUnsubscriptionsR;
-
- console.log(`Processing ${oldUnsubscriptions.length} unsubscriptions. Already processed ${processedUnsubscriptions} unsubscriptions.`);
-
- if (oldUnsubscriptions.length === BATCH_SIZE) {
- lastUnsubscription = oldUnsubscriptions[oldUnsubscriptions.length - 1]._id;
- }
-
- oldUnsubscriptions.forEach(function (oldUnsubscription) {
- oldUnsubscription.email = oldUnsubscription.email.toLowerCase();
- var newUnsubscription = new EmailUnsubscription(oldUnsubscription);
-
- batchInsertUnsubscriptions.insert(newUnsubscription.toObject());
- });
-
- console.log(`Saving ${oldUnsubscriptions.length} unsubscriptions.`);
-
- return batchInsertUnsubscriptions.execute();
- })
- .then(function () {
- processedUnsubscriptions += oldUnsubscriptions.length;
-
- console.log(`Saved ${oldUnsubscriptions.length} unsubscriptions.`);
-
- if (lastUnsubscription) {
- return processUnsubscriptions(lastUnsubscription);
- } else {
- return console.log('Done!');
- }
- });
-}
-
-// Connect to the databases
-Bluebird.all([
- MongoClient.connect(MONGODB_OLD),
- MongoClient.connect(MONGODB_NEW),
-])
-.then(function (result) {
- var oldInstance = result[0];
- var newInstance = result[1];
-
- mongoDbOldInstance = oldInstance;
- oldUnsubscriptionCollection = mongoDbOldInstance.collection('emailunsubscriptions');
-
- mongoDbNewInstance = newInstance;
- newUnsubscriptionCollection = mongoDbNewInstance.collection('emailunsubscriptions');
-
- console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
-
- return processUnsubscriptions();
-})
-.catch(function (err) {
- console.error(err.stack || err);
-});
diff --git a/migrations/api_v3/groups.js b/migrations/api_v3/groups.js
deleted file mode 100644
index e623b9d062..0000000000
--- a/migrations/api_v3/groups.js
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- members are not stored anymore
- invites are not stored anymore
-
- tavern id and leader must be updated
-*/
-
-// Migrate groups collection to new schema
-// Run AFTER users migration
-
-// The console-stamp module must be installed (not included in package.json)
-
-// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
-
-// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
-// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
-console.log('Starting migrations/api_v3/groups.js.');
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-require('babel-register');
-require('babel-polyfill');
-
-var Bluebird = require('bluebird');
-var MongoDB = require('mongodb');
-var nconf = require('nconf');
-var mongoose = require('mongoose');
-var _ = require('lodash');
-var uuid = require('uuid');
-var consoleStamp = require('console-stamp');
-
-// Add timestamps to console messages
-consoleStamp(console);
-
-// Initialize configuration
-require('../../website/server/libs/api-v3/setupNconf')();
-
-var MONGODB_OLD = nconf.get('MONGODB_OLD');
-var MONGODB_NEW = nconf.get('MONGODB_NEW');
-
-var MongoClient = MongoDB.MongoClient;
-
-mongoose.Promise = Bluebird; // otherwise mongoose models won't work
-
-// Load new models
-var NewGroup = require('../../website/server/models/group').model;
-
-var TAVERN_ID = require('../../website/server/models/group').TAVERN_ID;
-
-// To be defined later when MongoClient connects
-var mongoDbOldInstance;
-var oldGroupCollection;
-
-var mongoDbNewInstance;
-var newGroupCollection;
-var newUserCollection;
-
-var BATCH_SIZE = 1000;
-
-var processedGroups = 0;
-
-// Only process groups that fall in a interval ie -> up to 0000-4000-0000-0000
-var AFTER_GROUP_ID = nconf.get('AFTER_GROUP_ID');
-var BEFORE_GROUP_ID = nconf.get('BEFORE_GROUP_ID');
-
-function processGroups (afterId) {
- var processedTasks = 0;
- var lastGroup = null;
- var oldGroups;
-
- var query = {};
-
- if (BEFORE_GROUP_ID) {
- query._id = {$lte: BEFORE_GROUP_ID};
- }
-
- if ((afterId || AFTER_GROUP_ID) && !query._id) {
- query._id = {};
- }
-
- if (afterId) {
- query._id.$gt = afterId;
- } else if (AFTER_GROUP_ID) {
- query._id.$gt = AFTER_GROUP_ID;
- }
-
- var batchInsertGroups = newGroupCollection.initializeUnorderedBulkOp();
-
- console.log(`Executing groups query.\nMatching groups after ${afterId ? afterId : AFTER_GROUP_ID} and before ${BEFORE_GROUP_ID} (included).`);
-
- return oldGroupCollection
- .find(query)
- .sort({_id: 1})
- .limit(BATCH_SIZE)
- .toArray()
- .then(function (oldGroupsR) {
- oldGroups = oldGroupsR;
-
- var promises = [];
-
- console.log(`Processing ${oldGroups.length} groups. Already processed ${processedGroups} groups.`);
-
- if (oldGroups.length === BATCH_SIZE) {
- lastGroup = oldGroups[oldGroups.length - 1]._id;
- }
-
- oldGroups.forEach(function (oldGroup) {
- if ((!oldGroup.privacy || oldGroup.privacy === 'private') && (!oldGroup.members || oldGroup.members.length === 0)) return; // delete empty private groups TODO must also delete challenges or this won't work
-
- oldGroup.members = oldGroup.members || [];
- oldGroup.memberCount = oldGroup.members ? oldGroup.members.length : 0;
- oldGroup.challengeCount = oldGroup.challenges ? oldGroup.challenges.length : 0;
-
- if (oldGroup.balance <= 0) oldGroup.balance = 0;
- if (!oldGroup.name) oldGroup.name = 'group name';
- if (!oldGroup.leaderOnly) oldGroup.leaderOnly = {};
- if (!oldGroup.leaderOnly.challenges) oldGroup.leaderOnly.challenges = false;
-
- // Tavern
- if (oldGroup._id === 'habitrpg') {
- oldGroup._id = TAVERN_ID;
- oldGroup.leader = '7bde7864-ebc5-4ee2-a4b7-1070d464cdb0'; // Siena Leslie
- }
-
- if (!oldGroup.type) {
- // throw new Error('group.type is required');
- oldGroup.type = 'guild';
- }
-
- if (!oldGroup.leader) {
- if (oldGroup.members && oldGroup.members.length > 0) {
- oldGroup.leader = oldGroup.members[0];
- } else {
- throw new Error('group.leader is required and no member available!');
- }
- }
-
- if (!oldGroup.privacy) {
- // throw new Error('group.privacy is required');
- oldGroup.privacy = 'private';
- }
-
- var updateMembers = {};
-
- if (oldGroup.type === 'guild') {
- updateMembers.$push = {guilds: oldGroup._id};
- } else if (oldGroup.type === 'party') {
- updateMembers.$set = {'party._id': oldGroup._id};
- }
-
- if (oldGroup.members) {
- // Tyler Renelle
- oldGroup.members.forEach(function (id, index) {
- if (id === '9') {
- oldGroup.members[index] = '00000000-0000-4000-9000-000000000000';
- }
- });
-
- promises.push(newUserCollection.updateMany({
- _id: {$in: oldGroup.members},
- }, updateMembers, {multi: true}));
- }
-
- var newGroup = new NewGroup(oldGroup);
-
- batchInsertGroups.insert(newGroup.toObject());
- });
-
- console.log(`Saving ${oldGroups.length} groups and migrating members to users collection.`);
-
- promises.push(batchInsertGroups.execute());
- return Bluebird.all(promises);
- })
- .then(function () {
- processedGroups += oldGroups.length;
-
- console.log(`Saved ${oldGroups.length} groups and migrated their members to the user collection.`);
-
- if (lastGroup) {
- return processGroups(lastGroup);
- } else {
- return console.log('Done!');
- }
- });
-}
-
-// Connect to the databases
-Bluebird.all([
- MongoClient.connect(MONGODB_OLD),
- MongoClient.connect(MONGODB_NEW),
-])
-.then(function (result) {
- var oldInstance = result[0];
- var newInstance = result[1];
-
- mongoDbOldInstance = oldInstance;
- oldGroupCollection = mongoDbOldInstance.collection('groups');
-
- mongoDbNewInstance = newInstance;
- newGroupCollection = mongoDbNewInstance.collection('groups');
- newUserCollection = mongoDbNewInstance.collection('users');
-
- console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
-
- // First delete the tavern group created by having required the group model
- return newGroupCollection.deleteOne({_id: TAVERN_ID});
-})
-.then(function () {
- return processGroups();
-})
-.catch(function (err) {
- console.error(err.stack || err);
-});
diff --git a/migrations/api_v3/users.js b/migrations/api_v3/users.js
deleted file mode 100644
index f2c8e2f52f..0000000000
--- a/migrations/api_v3/users.js
+++ /dev/null
@@ -1,268 +0,0 @@
-// Migrate users collection to new schema
-// This should run AFTER challenges migration
-
-// The console-stamp module must be installed (not included in package.json)
-
-// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
-
-// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
-// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
-console.log('Starting migrations/api_v3/users.js.');
-
-// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
-// We've now upgraded to lodash v4 but the code used in this migration has not been
-// adapted to work with it. Before this migration is used again any lodash method should
-// be checked for compatibility against the v4 changelog and changed if necessary.
-// https://github.com/lodash/lodash/wiki/Changelog#v400
-
-require('babel-register');
-require('babel-polyfill');
-
-var Bluebird = require('bluebird');
-var MongoDB = require('mongodb');
-var nconf = require('nconf');
-var mongoose = require('mongoose');
-var _ = require('lodash');
-var uuid = require('uuid');
-var consoleStamp = require('console-stamp');
-var common = require('../../common');
-var moment = require('moment');
-
-// Add timestamps to console messages
-consoleStamp(console);
-
-// Initialize configuration
-require('../../website/server/libs/api-v3/setupNconf')();
-
-var MONGODB_OLD = nconf.get('MONGODB_OLD');
-var MONGODB_NEW = nconf.get('MONGODB_NEW');
-
-var taskDefaults = common.taskDefaults;
-var MongoClient = MongoDB.MongoClient;
-
-mongoose.Promise = Bluebird; // otherwise mongoose models won't work
-
-// Load new models
-var NewUser = require('../../website/server/models/user').model;
-var NewTasks = require('../../website/server/models/task');
-
-// To be defined later when MongoClient connects
-var mongoDbOldInstance;
-var oldUserCollection;
-
-var mongoDbNewInstance;
-var newUserCollection;
-var newTaskCollection;
-
-var BATCH_SIZE = 1000;
-
-var processedUsers = 0;
-var totoalProcessedTasks = 0;
-
-var challengeTaskWithMatchingId = 0;
-var challengeTaskNoMatchingId = 0;
-
-// Load the new tasks ids for challenges tasks
-var newTasksIds = require('./newTasksIds.json');
-
-// Only process users that fall in a interval ie up to -> 0000-4000-0000-0000
-var AFTER_USER_ID = nconf.get('AFTER_USER_ID');
-var BEFORE_USER_ID = nconf.get('BEFORE_USER_ID');
-
-function processUsers (afterId) {
- var processedTasks = 0;
- var lastUser = null;
- var oldUsers;
-
- var now = new Date();
-
- var query = {};
-
- if (BEFORE_USER_ID) {
- query._id = {$lte: BEFORE_USER_ID};
- }
-
- if ((afterId || AFTER_USER_ID) && !query._id) {
- query._id = {};
- }
-
- if (afterId) {
- query._id.$gt = afterId;
- } else if (AFTER_USER_ID) {
- query._id.$gt = AFTER_USER_ID;
- }
-
- var batchInsertTasks = newTaskCollection.initializeUnorderedBulkOp();
- var batchInsertUsers = newUserCollection.initializeUnorderedBulkOp();
-
- console.log(`Executing users query.\nMatching users after ${afterId ? afterId : AFTER_USER_ID} and before ${BEFORE_USER_ID} (included).`);
-
- return oldUserCollection
- .find(query)
- .sort({_id: 1})
- .limit(BATCH_SIZE)
- .toArray()
- .then(function (oldUsersR) {
- oldUsers = oldUsersR;
-
- console.log(`Processing ${oldUsers.length} users. Already processed ${processedUsers} users and ${totoalProcessedTasks} tasks.`);
-
- if (oldUsers.length === BATCH_SIZE) {
- lastUser = oldUsers[oldUsers.length - 1]._id;
- }
-
- oldUsers.forEach(function (oldUser) {
- var oldTasks = oldUser.habits.concat(oldUser.dailys).concat(oldUser.rewards).concat(oldUser.todos);
- delete oldUser.habits;
- delete oldUser.dailys;
- delete oldUser.rewards;
- delete oldUser.todos;
-
- delete oldUser.id;
-
- // spookDust -> spookySparkles
-
- if (oldUser.achievements && oldUser.achievements.spookDust) {
- oldUser.achievements.spookySparkles = oldUser.achievements.spookDust;
- delete oldUser.achievements.spookDust;
- }
-
- if (oldUser.items && oldUser.items.special && oldUser.items.special.spookDust) {
- oldUser.items.special.spookySparkles = oldUser.items.special.spookDust;
- delete oldUser.items.special.spookDust;
- }
-
- if (oldUser.stats && oldUser.stats.buffs && oldUser.stats.buffs.spookySparkles) {
- oldUser.stats.buffs.spookySparkles = oldUser.stats.buffs.spookDust;
- delete oldUser.stats.buffs.spookDust;
- }
-
- // end spookDust -> spookySparkles
-
- oldUser.tags = oldUser.tags.map(function (tag) {
- return {
- id: tag.id,
- name: tag.name || 'tag name',
- challenge: tag.challenge,
- };
- });
-
- if (oldUser._id === '9') { // Tyler Renelle
- oldUser._id = '00000000-0000-4000-9000-000000000000';
- }
-
- var newUser = new NewUser(oldUser);
- var isSubscribed = newUser.isSubscribed();
-
- oldTasks.forEach(function (oldTask) {
- oldTask._id = uuid.v4(); // create a new unique uuid
- oldTask.userId = newUser._id;
- oldTask._legacyId = oldTask.id; // store the old task id
- delete oldTask.id;
-
- oldTask.challenge = oldTask.challenge || {};
- if (oldTask.challenge.id) {
- if (oldTask.challenge.broken) {
- oldTask.challenge.taskId = oldTask._legacyId;
- } else {
- var newId = newTasksIds[oldTask._legacyId + '-' + oldTask.challenge.id];
-
- // Challenges' tasks ids changed
- if (!newId && !oldTask.challenge.broken) {
- challengeTaskNoMatchingId++;
- oldTask.challenge.taskId = oldTask._legacyId;
- oldTask.challenge.broken = 'CHALLENGE_TASK_NOT_FOUND';
- } else {
- challengeTaskWithMatchingId++;
- oldTask.challenge.taskId = newId;
- }
- }
- }
-
- // Delete old completed todos
- if (oldTask.type === 'todo' && oldTask.completed && (!oldTask.challenge.id || oldTask.challenge.broken)) {
- if (moment(now).subtract(isSubscribed ? 90 : 30, 'days').toDate() > moment(oldTask.dateCompleted).toDate()) {
- return;
- }
- }
-
- oldTask.createdAt = oldTask.dateCreated;
-
- if (!oldTask.text) oldTask.text = 'task text'; // required
- oldTask.tags = _.map(oldTask.tags, function (tagPresent, tagId) {
- return tagPresent && tagId;
- }).filter(function (tag) {
- return tag !== false;
- });
-
- if (oldTask.type !== 'todo' || (oldTask.type === 'todo' && !oldTask.completed)) {
- newUser.tasksOrder[`${oldTask.type}s`].push(oldTask._id);
- }
-
- var allTasksFields = ['_id', 'type', 'text', 'notes', 'tags', 'value', 'priority', 'attribute', 'challenge', 'reminders', 'userId', '_legacyId', 'createdAt'];
- // using mongoose models is too slow
- if (oldTask.type === 'habit') {
- oldTask = _.pick(oldTask, allTasksFields.concat(['history', 'up', 'down']));
- } else if (oldTask.type === 'daily') {
- oldTask = _.pick(oldTask, allTasksFields.concat(['completed', 'collapseChecklist', 'checklist', 'history', 'frequency', 'everyX', 'startDate', 'repeat', 'streak']));
- } else if (oldTask.type === 'todo') {
- oldTask = _.pick(oldTask, allTasksFields.concat(['completed', 'collapseChecklist', 'checklist', 'date', 'dateCompleted']));
- } else if (oldTask.type === 'reward') {
- oldTask = _.pick(oldTask, allTasksFields);
- } else {
- throw new Error('Task with no or invalid type!');
- }
-
- batchInsertTasks.insert(taskDefaults(oldTask));
- processedTasks++;
- });
-
- batchInsertUsers.insert(newUser.toObject());
- });
-
- console.log(`Saving ${oldUsers.length} users and ${processedTasks} tasks.`);
-
- return Bluebird.all([
- batchInsertUsers.execute(),
- batchInsertTasks.execute(),
- ]);
- })
- .then(function () {
- totoalProcessedTasks += processedTasks;
- processedUsers += oldUsers.length;
-
- console.log(`Saved ${oldUsers.length} users and their tasks.`);
- console.log('Challenges\' tasks no matching id: ', challengeTaskNoMatchingId);
- console.log('Challenges\' tasks with matching id: ', challengeTaskWithMatchingId);
-
- if (lastUser) {
- return processUsers(lastUser);
- } else {
- return console.log('Done!');
- }
- });
-}
-
-// Connect to the databases
-Bluebird.all([
- MongoClient.connect(MONGODB_OLD),
- MongoClient.connect(MONGODB_NEW),
-])
-.then(function (result) {
- var oldInstance = result[0];
- var newInstance = result[1];
-
- mongoDbOldInstance = oldInstance;
- oldUserCollection = mongoDbOldInstance.collection('users');
-
- mongoDbNewInstance = newInstance;
- newUserCollection = mongoDbNewInstance.collection('users');
- newTaskCollection = mongoDbNewInstance.collection('tasks');
-
- console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
-
- return processUsers();
-})
-.catch(function (err) {
- console.error(err.stack || err);
-});
diff --git a/migrations/apology_gems.js b/migrations/apology_gems.js
deleted file mode 100644
index e22a428047..0000000000
--- a/migrations/apology_gems.js
+++ /dev/null
@@ -1 +0,0 @@
-db.users.update({_id:{$in:['']}},{$inc:{balance:0.5}},{multi:true});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130128_add_missing_crons.js b/migrations/archive/2013/20130128_add_missing_crons.js
new file mode 100644
index 0000000000..5a28b83e69
--- /dev/null
+++ b/migrations/archive/2013/20130128_add_missing_crons.js
@@ -0,0 +1,5 @@
+db.users.update(
+ { lastCron: { $exists: false} },
+ { $set: { lastCron: Number(new Date()) } },
+ { multi: true }
+);
\ No newline at end of file
diff --git a/migrations/archive/2013/20130128_merge_completed_todo_ids.js b/migrations/archive/2013/20130128_merge_completed_todo_ids.js
new file mode 100644
index 0000000000..6b3f3d39af
--- /dev/null
+++ b/migrations/archive/2013/20130128_merge_completed_todo_ids.js
@@ -0,0 +1,15 @@
+db.users.find({ completedIds: { $exists: true } }).forEach(function (user) {
+ let newTodoIds = user.todoIds;
+ user.completedIds.forEach(function (value) {
+ if (newTodoIds.indexOf(value) === -1) {
+ newTodoIds.push(value);
+ }
+ });
+ db.users.update(
+ { _id: user._id },
+ {
+ $set: { todoIds: newTodoIds },
+ $unset: { completedIds: 1 },
+ }
+ );
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130129_add_missing_preferences.js b/migrations/archive/2013/20130129_add_missing_preferences.js
new file mode 100644
index 0000000000..d2710a5dbf
--- /dev/null
+++ b/migrations/archive/2013/20130129_add_missing_preferences.js
@@ -0,0 +1,5 @@
+db.users.update(
+ {preferences: {$exists: false}},
+ {$set: {preferences: {gender: 'm', armorSet: 'v1'}}},
+ {multi: true}
+);
diff --git a/migrations/20130204_count_habits.js b/migrations/archive/2013/20130204_count_habits.js
similarity index 55%
rename from migrations/20130204_count_habits.js
rename to migrations/archive/2013/20130204_count_habits.js
index 172bee9e60..b5e3b50d6c 100644
--- a/migrations/20130204_count_habits.js
+++ b/migrations/archive/2013/20130204_count_habits.js
@@ -7,14 +7,14 @@
// be checked for compatibility against the v4 changelog and changed if necessary.
// https://github.com/lodash/lodash/wiki/Changelog#v400
-var habits = 0,
- dailies = 0,
- todos = 0,
- registered = { $or: [ { 'auth.local': { $exists: true } }, { 'auth.facebook': { $exists: true} } ]};
+let habits = 0,
+ dailies = 0,
+ todos = 0,
+ registered = { $or: [{ 'auth.local': { $exists: true } }, { 'auth.facebook': { $exists: true} }]};
-db.user.find(registered).forEach(function(u){
- //TODO this isn't working??
- habits += _.where(u.tasks, {type:'habit'}).length;
- dailies += _.where(u.tasks, {type:'daily'}).length;
- todos += _.where(u.tasks, {type:'todo'}).length;
-})
+db.user.find(registered).forEach(function (u) {
+ // TODO this isn't working??
+ habits += _.where(u.tasks, {type: 'habit'}).length;
+ dailies += _.where(u.tasks, {type: 'daily'}).length;
+ todos += _.where(u.tasks, {type: 'todo'}).length;
+});
diff --git a/migrations/archive/2013/20130204_user_public_private_paths.js b/migrations/archive/2013/20130204_user_public_private_paths.js
new file mode 100644
index 0000000000..698187985c
--- /dev/null
+++ b/migrations/archive/2013/20130204_user_public_private_paths.js
@@ -0,0 +1,101 @@
+// %mongo server:27017/dbname underscore.js my_commands.js
+// %mongo server:27017/dbname underscore.js --shell
+
+// db.users.find({'auth.facebook.email': 'tylerrenelle@gmail.com'}).forEach(function(user){
+db.users.find().forEach(function (user) {
+ if (!user._id) {
+ print('User has null _id');
+ return; // need to figure out how to delete these buggers if they don't have an id to delete from
+ }
+
+ if (user.idLists) {
+ print(`User ${ user._id } has already been migrated`);
+ return;
+ }
+
+ if (user._id.indexOf('$') === 0) {
+ print(`User id starts with $ (${ user._id })`);
+ return;
+ }
+
+ // even though we're clobbering user later, sometimes these are undefined and crash the script
+ // this saves us some ternaries
+ user.stats = user.stats || {};
+ user.items = user.items || {};
+ user.preferences = user.preferences || {};
+ user.notifications = user.notifications || {};
+ user.flags = user.flags || {};
+ user.habitIds = user.habitIds || [];
+ user.dailyIds = user.dailyIds || [];
+ user.todoIds = user.todoIds || [];
+ user.rewardIds = user.rewardIds || [];
+
+ _.each(user.tasks, function (task, key) {
+ if (!task.type) {
+ delete user.tasks[key];
+ // idList will take care of itself on page-load
+ return;
+ }
+ if (key === '$spec') {
+ print(`$spec was found: ${ user._id}`);
+ return;
+ }
+ if (key.indexOf('$_') === 0) {
+ let newKey = key.replace('$_', ''),
+ index = user[`${task.type }Ids`].indexOf(key);
+ user[`${task.type }Ids`][index] = newKey;
+ task.id = newKey;
+ user.tasks[newKey] = task;
+ // TODO make sure this is ok, that we're not deleting the original
+ // Otherwise use lodash.cloneDeep
+ delete user.tasks[key];
+ }
+ });
+
+ // New user schema has public and private paths, so we can setup proper access control with racer
+ // Note 'public' and 'private' are reserved words
+ let newUser = {
+ auth: user.auth, // we need this top-level due to derby-auth
+ apiToken: user.preferences.api_token || null, // set on update, we need derby.uuid()
+ preferences: {
+ armorSet: user.preferences.armorSet || 'v1',
+ gender: user.preferences.gender || 'm',
+ },
+ balance: user.balance || 2,
+ lastCron: user.lastCron || Number(new Date()),
+ history: user.history || [],
+ stats: {
+ gp: user.stats.money || 0,
+ hp: user.stats.hp || 50,
+ exp: user.stats.exp || 0,
+ lvl: user.stats.lvl || 1,
+ },
+ items: {
+ armor: user.items.armor || 0,
+ weapon: user.items.weapon || 0,
+ },
+ tasks: user.tasks || {},
+ idLists: {
+ habit: user.habitIds || [],
+ daily: user.dailyIds || [],
+ todo: user.todoIds || [],
+ reward: user.rewardIds || [],
+ },
+ flags: {
+ partyEnabled: false,
+ itemsEnabled: user.items.itemsEnabled || false,
+ kickstarter: user.notifications.kickstarter || 'show',
+ ads: user.flags.ads || null, // null because it's set on registration
+ },
+ party: {
+ current: null,
+ invitation: null,
+ },
+ };
+
+ try {
+ db.users.update({_id: user._id}, newUser);
+ } catch (e) {
+ print(e);
+ }
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130208_idLists_to_typeIds.js b/migrations/archive/2013/20130208_idLists_to_typeIds.js
new file mode 100644
index 0000000000..ecf13fb341
--- /dev/null
+++ b/migrations/archive/2013/20130208_idLists_to_typeIds.js
@@ -0,0 +1,19 @@
+// move idList back to root-level, is what's causing the sort bug - see https://github.com/codeparty/racer/pull/73
+
+// We could just delete user.idLists, since it's re-created on refresh. However, users's first refresh will scare them
+// since everything will dissappear - second refresh will bring everything back.
+db.users.find().forEach(function (user) {
+ if (!user.idLists) return;
+ db.users.update(
+ {_id: user._id},
+ {
+ $set: {
+ habitIds: user.idLists.habit,
+ dailyIds: user.idLists.daily,
+ todoIds: user.idLists.todo,
+ rewardIds: user.idLists.reward,
+ },
+ // $unset:{idLists:true} // run this after the code has been pushed
+ }
+ );
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130208_user_customizations.js b/migrations/archive/2013/20130208_user_customizations.js
new file mode 100644
index 0000000000..93dee7aaf2
--- /dev/null
+++ b/migrations/archive/2013/20130208_user_customizations.js
@@ -0,0 +1,18 @@
+db.users.update(
+ {items: {$exists: 0}},
+ {$set: {items: {weapon: 0, armor: 0, head: 0, shield: 0 }}},
+ {multi: true}
+);
+
+db.users.find().forEach(function (user) {
+ let updates = {
+ // I'm not racist, these were just the defaults before ;)
+ 'preferences.skin': 'white',
+ 'preferences.hair': 'blond',
+
+ 'items.head': user.items.armor,
+ 'items.shield': user.items.armor,
+ };
+
+ db.users.update({_id: user._id}, {$set: updates});
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130307_exp_overflow.js b/migrations/archive/2013/20130307_exp_overflow.js
new file mode 100644
index 0000000000..113a8989b2
--- /dev/null
+++ b/migrations/archive/2013/20130307_exp_overflow.js
@@ -0,0 +1,37 @@
+// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130307_normalize_algo_values.js
+
+/**
+ * Make sure people aren't overflowing their exp with the new system
+ */
+db.users.find().forEach(function (user) {
+ function oldTnl (level) {
+ return Math.pow(level, 2) * 10 + level * 10 + 80;
+ }
+
+ function newTnl (level) {
+ let value = 0;
+ if (level >= 100) {
+ value = 0;
+ } else {
+ value = Math.round((Math.pow(level, 2) * 0.25 + 10 * level + 139.75) / 10) * 10; // round to nearest 10
+ }
+ return value;
+ }
+
+ var newTnl = newTnl(user.stats.lvl);
+ if (user.stats.exp > newTnl) {
+ let percent = user.stats.exp / oldTnl(user.stats.lvl);
+ percent = percent > 1 ? 1 : percent;
+ user.stats.exp = newTnl * percent;
+
+ try {
+ db.users.update(
+ {_id: user._id},
+ {$set: {'stats.exp': user.stats.exp}},
+ {multi: true}
+ );
+ } catch (e) {
+ print(e);
+ }
+ }
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130307_normalize_algo_values.js b/migrations/archive/2013/20130307_normalize_algo_values.js
new file mode 100644
index 0000000000..a6f96754cc
--- /dev/null
+++ b/migrations/archive/2013/20130307_normalize_algo_values.js
@@ -0,0 +1,46 @@
+// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130307_normalize_algo_values.js
+
+/**
+ * Users were experiencing a lot of extreme Exp multiplication (https://github.com/lefnire/habitrpg/issues/594).
+ * This sets things straight, and in preparation for another algorithm overhaul
+ */
+db.users.find().forEach(function (user) {
+ if (user.stats.exp >= 3580) {
+ user.stats.exp = 0;
+ }
+
+ if (user.stats.lvl > 100) {
+ user.stats.lvl = 100;
+ }
+
+ _.each(user.tasks, function (task, key) {
+ // remove corrupt tasks
+ if (!task) {
+ delete user.tasks[key];
+ return;
+ }
+
+ // Fix busted values
+ if (task.value > 21.27) {
+ task.value = 21.27;
+ } else if (task.value < -47.27) {
+ task.value = -47.27;
+ }
+ });
+
+ try {
+ db.users.update(
+ {_id: user._id},
+ {$set:
+ {
+ 'stats.lvl': user.stats.lvl,
+ 'stats.exp': user.stats.exp,
+ tasks: user.tasks,
+ },
+ },
+ {multi: true}
+ );
+ } catch (e) {
+ print(e);
+ }
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130307_remove_duff_histories.js b/migrations/archive/2013/20130307_remove_duff_histories.js
new file mode 100644
index 0000000000..c2971df4ae
--- /dev/null
+++ b/migrations/archive/2013/20130307_remove_duff_histories.js
@@ -0,0 +1,28 @@
+/**
+ * Remove duff histories for dailies
+ */
+// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130307_remove_duff_histories.js
+db.users.find().forEach(function (user) {
+ _.each(user.tasks, function (task, key) {
+ if (task.type === 'daily') {
+ // remove busted history entries
+ task.history = _.filter(task.history, function (h) {
+ return Boolean(h.value);
+ });
+ }
+ });
+
+ try {
+ db.users.update(
+ {_id: user._id},
+ {$set:
+ {
+ tasks: user.tasks,
+ },
+ },
+ {multi: true}
+ );
+ } catch (e) {
+ print(e);
+ }
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130326_migrate_pets.js b/migrations/archive/2013/20130326_migrate_pets.js
new file mode 100644
index 0000000000..57c6ad7534
--- /dev/null
+++ b/migrations/archive/2013/20130326_migrate_pets.js
@@ -0,0 +1,98 @@
+/**
+ * Migrate old pets to new system
+ */
+// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130326_migrate_pets.js
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let mapping = {
+ bearcub: {name: 'BearCub', modifier: 'Base'},
+ cactus: {name: 'Cactus', modifier: 'Base'},
+ dragon: {name: 'Dragon', modifier: 'Base'},
+ flyingpig: {name: 'FlyingPig', modifier: 'Base'},
+ fox: {name: 'Fox', modifier: 'Base'},
+ lioncub: {name: 'LionCub', modifier: 'Base'},
+ pandacub: {name: 'PandaCub', modifier: 'Base'},
+ tigercub: {name: 'TigerCub', modifier: 'Base'},
+ wolfBorder: {name: 'Wolf', modifier: 'Base'},
+ wolfDesert: {name: 'Wolf', modifier: 'Desert'},
+ wolfGolden: {name: 'Wolf', modifier: 'Golden'},
+ wolfRed: {name: 'Wolf', modifier: 'Red'},
+ wolfShade: {name: 'Wolf', modifier: 'Shade'},
+ wolfSkeleton: {name: 'Wolf', modifier: 'Skeleton'},
+ wolfVeteran: {name: 'Wolf', modifier: 'Veteran'},
+ wolfWhite: {name: 'Wolf', modifier: 'White'},
+ wolfZombie: {name: 'Wolf', modifier: 'Zombie'},
+};
+
+/**
+ === Old Style ==
+ pet: Object
+ icon: "Pet-Wolf-White.png"
+ index: 14
+ name: "wolfWhite"
+ text: "White Wolf"
+ value: 3
+ pets: Object
+ bearcub: true
+ cactus: true
+
+ === New Style ==
+ currentPet: Object
+ modifier: "Red"
+ name: "Wolf"
+ notes: "Find some Hatching Powder to sprinkle on this egg, and one day it will hatch into a loyal pet."
+ str: "Wolf-Red"
+ text: "Wolf"
+ value: 3
+ pets: Array
+ 0: "PandaCub-Base"
+ 1: "Wolf-Base"
+ */
+
+
+db.users.find().forEach(function (user) {
+ if (!user.items || !user.items.pets && !user.items.pet) return;
+
+ // migrate items.pet to items.currentPet
+ if (user.items.pet) {
+ let mapped = mapping[user.items.pet.name];
+ delete user.items.pet;
+ user.items.currentPet = {
+ modifier: mapped.modifier,
+ name: mapped.name,
+ str: `${mapped.name }-${ mapped.modifier}`,
+ text: '', // FIXME?
+ };
+ }
+
+ // migrate items.pets
+ if (user.items.pets) {
+ let newPets = [];
+ _.each(user.items.pets, function (val, key) {
+ if (_.isNumber(key)) {
+ newPets.push(val);
+ // FIXME why is this happening? seems the user gets migrated already...
+ // throw "Error: User appears already migrated, this shouldn't be happening!"
+ } else {
+ newPets.push(`${mapping[key].name }-${ mapping[key].modifier}`);
+ }
+ });
+ user.items.pets = newPets;
+ }
+
+ try {
+ db.users.update(
+ {_id: user._id},
+ {$set:
+ { items: user.items },
+ }
+ );
+ } catch (e) {
+ print(e);
+ }
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130327_apply_tokens.js b/migrations/archive/2013/20130327_apply_tokens.js
new file mode 100644
index 0000000000..5a6a519b28
--- /dev/null
+++ b/migrations/archive/2013/20130327_apply_tokens.js
@@ -0,0 +1,109 @@
+/**
+ * Applies backer tokens & items (this file will be updated periodically
+ */
+
+// mongo habitrpg ./node_modules/underscore/underscore.js migrations/20130327_apply_tokens.js
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let mapping = [
+ {
+ tier: 1,
+ tokens: 0,
+ users: [],
+ },
+ {
+ tier: 5,
+ tokens: 20,
+ users: [],
+ },
+ {
+ tier: 10,
+ tokens: 50,
+ users: [],
+ },
+ {
+ tier: 15,
+ tokens: 100,
+ users: [],
+ },
+ {
+ tier: 30,
+ tokens: 150,
+ users: [],
+ },
+ {
+ tier: 45,
+ tokens: 170,
+ users: [],
+ },
+ {
+ tier: 60,
+ tokens: 200,
+ users: [],
+ },
+ {
+ tier: 70,
+ tokens: 240,
+ users: [],
+ },
+ {
+ tier: 80,
+ tokens: 240,
+ users: [],
+ },
+ {
+ tier: 90,
+ tokens: 280,
+ users: [],
+ },
+ {
+ tier: 300,
+ tokens: 500,
+ users: [],
+ },
+ {
+ tier: 800,
+ tokens: 500,
+ users: [],
+ },
+];
+
+db.users.find().forEach(function (user) {
+ if (!user._id) return;
+
+ let possibleUserIds = [user._id];
+ if (user.local) {
+ if (user.local.username) possibleUserIds.push(user.local.username);
+ if (user.local.email) possibleUserIds.push(user.local.email);
+ }
+
+ _.each(mapping, function (tier) {
+ let userInTier = !_.isEmpty(_.intersection(tier.users, possibleUserIds));
+ if (userInTier) {
+ let tokenInc = 0,
+ backer = user.backer || {};
+ if (!backer.tokensApplied) {
+ tokenInc = tier.tokens;
+ backer.tokensApplied = true;
+ }
+ backer.tier = tier.tier;
+
+ try {
+ db.users.update(
+ {_id: user._id},
+ {
+ $set: { backer, 'flags.ads': 'hide' },
+ $inc: { balance: tokenInc / 4 },
+ }
+ );
+ } catch (e) {
+ print(e);
+ }
+ }
+ });
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130503_max_gear_achievement.js b/migrations/archive/2013/20130503_max_gear_achievement.js
new file mode 100644
index 0000000000..44cfe0a877
--- /dev/null
+++ b/migrations/archive/2013/20130503_max_gear_achievement.js
@@ -0,0 +1,23 @@
+/**
+ * For users who already have max gear, they earned the achievement
+ */
+// mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130503_max_gear_achievement.js
+db.users.find().forEach(function (user) {
+ let items = user.items;
+ if (!items) {
+ return;
+ }
+ if (parseInt(items.armor) === 5 &&
+ parseInt(items.head) === 5 &&
+ parseInt(items.shield) === 5 &&
+ parseInt(items.weapon) === 6) {
+ try {
+ db.users.update(
+ {_id: user._id},
+ {$set: {'achievements.ultimateGear': true}}
+ );
+ } catch (e) {
+ print(e);
+ }
+ }
+});
\ No newline at end of file
diff --git a/migrations/20130507_fix_broken_tags.js b/migrations/archive/2013/20130507_fix_broken_tags.js
similarity index 58%
rename from migrations/20130507_fix_broken_tags.js
rename to migrations/archive/2013/20130507_fix_broken_tags.js
index 1818442acd..9005a12dc4 100644
--- a/migrations/20130507_fix_broken_tags.js
+++ b/migrations/archive/2013/20130507_fix_broken_tags.js
@@ -4,9 +4,8 @@
* mongo habitrpg ./node_modules/underscore/underscore.js ./migrations/20130507_fix_broken_tags.js
*/
-db.users.find().forEach(function(user){
- if(!_.isArray(user.tags)) {
- db.users.update({_id:user._id}, {$set:{tags:[]}});
- }
-
-})
\ No newline at end of file
+db.users.find().forEach(function (user) {
+ if (!_.isArray(user.tags)) {
+ db.users.update({_id: user._id}, {$set: {tags: []}});
+ }
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130508_add_backer_pets.js b/migrations/archive/2013/20130508_add_backer_pets.js
new file mode 100644
index 0000000000..c6541580e7
--- /dev/null
+++ b/migrations/archive/2013/20130508_add_backer_pets.js
@@ -0,0 +1 @@
+db.users.update({'backer.tier': {$gte: 80}}, {$push: {'items.pets': 'Wolf-Cerberus'}}, {multi: true});
\ No newline at end of file
diff --git a/migrations/20130508_fix_duff_party_subscriptions.js b/migrations/archive/2013/20130508_fix_duff_party_subscriptions.js
similarity index 51%
rename from migrations/20130508_fix_duff_party_subscriptions.js
rename to migrations/archive/2013/20130508_fix_duff_party_subscriptions.js
index 918e323e42..c6c53a3e79 100644
--- a/migrations/20130508_fix_duff_party_subscriptions.js
+++ b/migrations/archive/2013/20130508_fix_duff_party_subscriptions.js
@@ -13,29 +13,28 @@
// https://github.com/lodash/lodash/wiki/Changelog#v400
// since our primary subscription will first hit parties now, we *definitely* need an index there
-db.parties.ensureIndex( { 'members': 1}, {background: true} );
+db.parties.ensureIndex({ members: 1}, {background: true});
-db.parties.find().forEach(function(party){
+db.parties.find().forEach(function (party) {
+ if (!party.members) {
+ return db.parties.remove({_id: party._id});
+ }
- if(!party.members) {
- return db.parties.remove({_id:party._id});
+ // Find all members
+ db.users.find({_id: {$in: party.members} }, {_id: 1, party: 1}).forEach(function (user) {
+ // user somehow is subscribed to this party in the background, but they're it's not their primary party
+ if (user.party && user.party.current !== party._id) {
+ let i = party.members.indexOf(user._id);
+ party.members.splice(i, 1);
}
- // Find all members
- db.users.find( {_id: {$in:party.members} }, {_id:1,party:1} ).forEach(function(user){
- // user somehow is subscribed to this party in the background, but they're it's not their primary party
- if (user.party && user.party.current !== party._id) {
- var i = party.members.indexOf(user._id);
- party.members.splice(i, 1);
- }
+ // if after we remove the user, the party is empty - delete this party
+ if (_.isEmpty(party.members)) {
+ db.parties.remove({_id: party._id});
- // if after we remove the user, the party is empty - delete this party
- if (_.isEmpty(party.members)) {
- db.parties.remove({_id:party._id});
-
- // else just set it
- } else {
- db.parties.update({_id:party._id}, {$set:{members:party.members}});
- }
- })
-})
+ // else just set it
+ } else {
+ db.parties.update({_id: party._id}, {$set: {members: party.members}});
+ }
+ });
+});
diff --git a/migrations/20130518_setup_groups.js b/migrations/archive/2013/20130518_setup_groups.js
similarity index 54%
rename from migrations/20130518_setup_groups.js
rename to migrations/archive/2013/20130518_setup_groups.js
index 0e04bfa1b9..3240c1f809 100644
--- a/migrations/20130518_setup_groups.js
+++ b/migrations/archive/2013/20130518_setup_groups.js
@@ -15,34 +15,34 @@
* 5) subscribe everyone to habitrpg (be sure to set that for default user too!)
*/
-db.parties.renameCollection('groups',true);
-//db.parties.dropCollection(); // doesn't seem to do this step during rename...
-//db.parties.ensureIndex( { 'members': 1, 'background': 1} );
+db.parties.renameCollection('groups', true);
+// db.parties.dropCollection(); // doesn't seem to do this step during rename...
+// db.parties.ensureIndex( { 'members': 1, 'background': 1} );
-db.groups.update({}, {$set:{type:'party'}}, {multi:true});
+db.groups.update({}, {$set: {type: 'party'}}, {multi: true});
-//migrate invitation mechanisms
+// migrate invitation mechanisms
db.users.update(
- {},
- {
- $remove:{party:1},
- $set:{invitations:{party:null,guilds:[]}}
- },
- {multi:1}
+ {},
+ {
+ $remove: {party: 1},
+ $set: {invitations: {party: null, guilds: []}},
+ },
+ {multi: 1}
);
tavern = db.tavern.findOne();
db.tavern.drop();
-//TODO make as a callback of previous, or make sure group.type is still 'guild' for habitrpg in the end
+// TODO make as a callback of previous, or make sure group.type is still 'guild' for habitrpg in the end
db.groups.insert({
- _id: "habitrpg",
- leader: '9',
- type: 'guild',
- name: "HabitRPG",
- chat: tavern.messages,
- info: {
- blurb: '',
- websites: []
- }
+ _id: 'habitrpg',
+ leader: '9',
+ type: 'guild',
+ name: 'HabitRPG',
+ chat: tavern.messages,
+ info: {
+ blurb: '',
+ websites: [],
+ },
});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130602_survey_rewards.js b/migrations/archive/2013/20130602_survey_rewards.js
new file mode 100644
index 0000000000..4c819c6e2e
--- /dev/null
+++ b/migrations/archive/2013/20130602_survey_rewards.js
@@ -0,0 +1,31 @@
+// mongo habitrpg ./node_modules/lodash/lodash.js migrations/20130602_survey_rewards.js
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let members = [];
+members = _.uniq(members);
+
+let query = {
+ _id: {$exists: 1},
+ $or: [
+ {_id: {$in: members}},
+ // {'profile.name': {$in: members}},
+ {'auth.facebook.name': {$in: members}},
+ {'auth.local.username': {$in: members}},
+ {'auth.local.email': {$in: members}},
+ ],
+};
+
+print(db.users.count(query));
+
+db.users.update(query,
+ {
+ $set: { 'achievements.helpedHabit': true },
+ $inc: { balance: 2.5 },
+ },
+ {multi: true}
+);
\ No newline at end of file
diff --git a/migrations/archive/2013/20130612_survey_rewards_individual.js b/migrations/archive/2013/20130612_survey_rewards_individual.js
new file mode 100644
index 0000000000..3a2e1fbed4
--- /dev/null
+++ b/migrations/archive/2013/20130612_survey_rewards_individual.js
@@ -0,0 +1,9 @@
+// mongo habitrpg migrations/20130612_survey_rewards_individual.js
+
+let query = {_id: ''};
+
+db.users.update(query,
+ {
+ $set: { 'achievements.helpedHabit': true },
+ $inc: { balance: 2.5 },
+ });
\ No newline at end of file
diff --git a/migrations/archive/2013/20130615_add_extra_indexes.js b/migrations/archive/2013/20130615_add_extra_indexes.js
new file mode 100644
index 0000000000..233f266835
--- /dev/null
+++ b/migrations/archive/2013/20130615_add_extra_indexes.js
@@ -0,0 +1,4 @@
+db.users.ensureIndex({ _id: 1, apiToken: 1 }, {background: true});
+db.groups.ensureIndex({ members: 1 }, {background: true});
+db.groups.ensureIndex({ type: 1 }, {background: true});
+db.groups.ensureIndex({ type: 1, privacy: 1 }, {background: true});
\ No newline at end of file
diff --git a/migrations/archive/2013/20130908_cleanup_corrupt_tags.js b/migrations/archive/2013/20130908_cleanup_corrupt_tags.js
new file mode 100644
index 0000000000..8fdb6f9f54
--- /dev/null
+++ b/migrations/archive/2013/20130908_cleanup_corrupt_tags.js
@@ -0,0 +1,16 @@
+// mongo habitrpg ./node_modules/lodash/lodash.js migrations/20130908_cleanup_corrupt_tags.js
+
+// Racer was notorious for adding duplicates, randomly deleting documents, etc. Once we pull the plug on old.habit,
+// run this migration to cleanup all the corruption
+
+db.users.find().forEach(function (user) {
+ user.tags = _.filter(user.tags, function (t) {
+ return t ? t.id : false;
+ });
+
+ try {
+ db.users.update({_id: user._id}, {$set: {tags: user.tags}});
+ } catch (e) {
+ print(e);
+ }
+});
diff --git a/migrations/20130908_cleanup_derby_corruption.js b/migrations/archive/2013/20130908_cleanup_derby_corruption.js
similarity index 61%
rename from migrations/20130908_cleanup_derby_corruption.js
rename to migrations/archive/2013/20130908_cleanup_derby_corruption.js
index 6cac534587..d25eea6de9 100644
--- a/migrations/20130908_cleanup_derby_corruption.js
+++ b/migrations/archive/2013/20130908_cleanup_derby_corruption.js
@@ -1,4 +1,4 @@
-//mongo habitrpg ./node_modules/lodash/lodash.js migrations/20130908_cleanup_derby_corruption.js
+// mongo habitrpg ./node_modules/lodash/lodash.js migrations/20130908_cleanup_derby_corruption.js
// Racer was notorious for adding duplicates, randomly deleting documents, etc. Once we pull the plug on old.habit,
// run this migration to cleanup all the corruption
@@ -9,49 +9,48 @@
// be checked for compatibility against the v4 changelog and changed if necessary.
// https://github.com/lodash/lodash/wiki/Changelog#v400
-db.users.find().forEach(function(user){
-
+db.users.find().forEach(function (user) {
// remove corrupt tasks, which will either be null-value or no id
- user.tasks = _.reduce(user.tasks, function(m,task,k) {
+ user.tasks = _.reduce(user.tasks, function (m, task, k) {
if (!task || !task.id) return m;
- if (isNaN(+task.value)) task.value = 0;
+ if (isNaN(Number(task.value))) task.value = 0;
m[k] = task;
return m;
}, {});
// fix NaN stats
- _.each(user.stats, function(v,k) {
- if (!v || isNaN(+v)) user.stats[k] = 0;
+ _.each(user.stats, function (v, k) {
+ if (!v || isNaN(Number(v))) user.stats[k] = 0;
return true;
});
// remove duplicates, restore ghost tasks
- ['habit', 'daily', 'todo', 'reward'].forEach(function(type) {
- var idList = user[type + "Ids"];
- var taskIds = _.pluck(_.where(user.tasks, {type: type}), 'id');
- var union = _.union(idList, taskIds);
- var preened = _.filter(union, function(id) {
+ ['habit', 'daily', 'todo', 'reward'].forEach(function (type) {
+ let idList = user[`${type }Ids`];
+ let taskIds = _.pluck(_.where(user.tasks, {type}), 'id');
+ let union = _.union(idList, taskIds);
+ let preened = _.filter(union, function (id) {
return id && _.contains(taskIds, id);
});
if (!_.isEqual(idList, preened)) {
- user[type + "Ids"] = preened;
+ user[`${type }Ids`] = preened;
}
});
// temporarily remove broken eggs. we'll need to write a migration script to grant gems for and remove these instead
if (user.items && user.items.eggs) {
- user.items.eggs = _.filter(user.items.eggs,function(egg){
+ user.items.eggs = _.filter(user.items.eggs, function (egg) {
if (_.isString(egg)) {
user.balance += 0.75; // give them 3 gems for each broken egg
} else {
return true;
}
- })
+ });
}
try {
- db.users.update({_id:user._id}, user);
- } catch(e) {
+ db.users.update({_id: user._id}, user);
+ } catch (e) {
print(e);
}
-})
+});
diff --git a/migrations/20130908_remove_staged_users.js b/migrations/archive/2013/20130908_remove_staged_users.js
similarity index 86%
rename from migrations/20130908_remove_staged_users.js
rename to migrations/archive/2013/20130908_remove_staged_users.js
index 7bf75c0096..a9b575c5dd 100644
--- a/migrations/20130908_remove_staged_users.js
+++ b/migrations/archive/2013/20130908_remove_staged_users.js
@@ -8,7 +8,7 @@
* If we experience any troubles with removed staging users, come back to a snapshot and restore accounts. This will
* give a peak into possible conflict accounts:
*/
-/*db.users.count({
+/* db.users.count({
"auth.local": {$exists: false},
"auth.facebook": {$exists: false},
"history.exp.5": {$exists: 1},
@@ -22,9 +22,9 @@
* in we'll be using localStorage anyway instead of creating a new database record
*/
db.users.remove({
- // Un-registered users
- "auth.local": {$exists: false},
- "auth.facebook": {$exists: false}
+ // Un-registered users
+ 'auth.local': {$exists: false},
+ 'auth.facebook': {$exists: false},
});
/**
@@ -32,6 +32,6 @@ db.users.remove({
* Another vestige of Racer. Empty parties shouldn't be being created anymore in the new site
*/
db.groups.remove({
- 'type': 'party',
- $where: "return this.members.length === 0"
+ type: 'party',
+ $where: 'return this.members.length === 0',
});
\ No newline at end of file
diff --git a/migrations/archive/2013/20131022_purchased_and_newStuff.js b/migrations/archive/2013/20131022_purchased_and_newStuff.js
new file mode 100644
index 0000000000..0de25a7fe1
--- /dev/null
+++ b/migrations/archive/2013/20131022_purchased_and_newStuff.js
@@ -0,0 +1,5 @@
+db.users.find().forEach(function (user) {
+ if (!user.purchased) user.purchased = {hair: {}, skin: {}};
+ user.purchased.ads = user.flags && Boolean(user.flags.ads);
+ db.users.update({_id: user._id}, {$set: {purchased: user.purchased, 'flags.newStuff': true}, $unset: {'flags.ads': 1}});
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20131022_restore_ads.js b/migrations/archive/2013/20131022_restore_ads.js
new file mode 100644
index 0000000000..141d6ea1cd
--- /dev/null
+++ b/migrations/archive/2013/20131022_restore_ads.js
@@ -0,0 +1,12 @@
+// node .migrations/20131022_restore_ads.js
+let mongo = require('mongoskin');
+let _ = require('lodash');
+let dbBackup = mongo.db('localhost:27017/habitrpg?auto_reconnect');
+let dbLive = mongo.db('localhost:27017/habitrpg2?auto_reconnect');
+let count = 89474;
+dbBackup.collection('users').findEach({$or: [{'flags.ads': 'show'}, {'flags.ads': null}]}, {batchSize: 10}, function (err, item) {
+ if (err) return console.error({err});
+ if (!item || !item._id) return console.error('blank user');
+ dbLive.collection('users').update({_id: item._id}, {$set: {'purchased.ads': false}, $unset: {'flags.ads': 1}});
+ if (--count <= 0) console.log('DONE!');
+});
\ No newline at end of file
diff --git a/migrations/20131028_task_subdocs_tags_invites.js b/migrations/archive/2013/20131028_task_subdocs_tags_invites.js
similarity index 51%
rename from migrations/20131028_task_subdocs_tags_invites.js
rename to migrations/archive/2013/20131028_task_subdocs_tags_invites.js
index f4a8b720c2..7e4c38b286 100644
--- a/migrations/20131028_task_subdocs_tags_invites.js
+++ b/migrations/archive/2013/20131028_task_subdocs_tags_invites.js
@@ -3,7 +3,7 @@
// TODO it might be better we just find() and save() all user objects using mongoose, and rely on our defined pre('save')
// and default values to "migrate" users. This way we can make sure those parts are working properly too
// @see http://stackoverflow.com/questions/14867697/mongoose-full-collection-scan
-//Also, what do we think of a Mongoose Migration module? something like https://github.com/madhums/mongoose-migrate
+// Also, what do we think of a Mongoose Migration module? something like https://github.com/madhums/mongoose-migrate
// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
// We've now upgraded to lodash v4 but the code used in this migration has not been
@@ -11,28 +11,27 @@
// be checked for compatibility against the v4 changelog and changed if necessary.
// https://github.com/lodash/lodash/wiki/Changelog#v400
-db.users.find().forEach(function(user){
-
+db.users.find().forEach(function (user) {
// Add invites to groups
// -------------------------
- if(user.invitations){
- if(user.invitations.party){
- db.groups.update({_id: user.invitations.party.id}, {$addToSet:{invites:user._id}});
+ if (user.invitations) {
+ if (user.invitations.party) {
+ db.groups.update({_id: user.invitations.party.id}, {$addToSet: {invites: user._id}});
}
- if(user.invitations.guilds){
- _.each(user.invitations.guilds, function(guild){
- db.groups.update({_id: guild.id}, {$addToSet:{invites:user._id}});
+ if (user.invitations.guilds) {
+ _.each(user.invitations.guilds, function (guild) {
+ db.groups.update({_id: guild.id}, {$addToSet: {invites: user._id}});
});
}
}
// Cleanup broken tags
// -------------------------
- _.each(user.tasks, function(task){
- _.each(task.tags, function(val, key){
- _.each(user.tags, function(tag){
- if(key == tag.id) delete task.tags[key];
+ _.each(user.tasks, function (task) {
+ _.each(task.tags, function (val, key) {
+ _.each(user.tags, function (tag) {
+ if (key === tag.id) delete task.tags[key];
});
});
});
@@ -40,25 +39,25 @@ db.users.find().forEach(function(user){
// Fix corrupt dates
// -------------------------
user.lastCron = new Date(user.lastCron);
- if (user.lastCron == 'Invalid Date') user.lastCron = new Date();
+ if (user.lastCron === 'Invalid Date') user.lastCron = new Date();
if (user.auth) { // what to do with !auth?
- _.defaults(user.auth, {timestamps: {created:undefined, loggedin: undefined}});
+ _.defaults(user.auth, {timestamps: {created: undefined, loggedin: undefined}});
_.defaults(user.auth.timestamps, {created: new Date(user.lastCron), loggedin: new Date(user.lastCron)});
}
// Fix missing history
// -------------------------
- _.defaults(user, {history:{}});
- _.defaults(user.history,{exp:[], todos:[]});
+ _.defaults(user, {history: {}});
+ _.defaults(user.history, {exp: [], todos: []});
// Add username
// -------------------------
- if (!user.profile) user.profile = {name:undefined};
+ if (!user.profile) user.profile = {name: undefined};
if (_.isEmpty(user.profile.name) && user.auth) {
- var fb = user.auth.facebook;
+ let fb = user.auth.facebook;
user.profile.name =
- (user.auth.local && user.auth.local.username) ||
- (fb && (fb.displayName || fb.name || fb.username || (fb.first_name && fb.first_name + ' ' + fb.last_name))) ||
+ user.auth.local && user.auth.local.username ||
+ fb && (fb.displayName || fb.name || fb.username || fb.first_name && `${fb.first_name } ${ fb.last_name}`) ||
'Anonymous';
}
@@ -71,62 +70,62 @@ db.users.find().forEach(function(user){
print(user._id);
}
} else {
- _.each(['habit', 'daily', 'todo', 'reward'], function(type) {
+ _.each(['habit', 'daily', 'todo', 'reward'], function (type) {
// we use _.transform instead of a simple _.where in order to maintain sort-order
- user[type + "s"] = _.reduce(user[type + "Ids"], function(m, tid) {
- var task = user.tasks[tid],
+ user[`${type }s`] = _.reduce(user[`${type }Ids`], function (m, tid) {
+ let task = user.tasks[tid],
newTask = {};
if (!task) return m; // remove null tasks
// Cleanup tasks for TaskSchema
newTask._id = newTask.id = task.id;
- newTask.text = (_.isString(task.text)) ? task.text : '';
+ newTask.text = _.isString(task.text) ? task.text : '';
if (_.isString(task.notes)) newTask.notes = task.notes;
- newTask.tags = (_.isObject(task.tags)) ? task.tags : {};
- newTask.type = (_.isString(task.type)) ? task.type : 'habit';
- newTask.value = (_.isNumber(task.value)) ? task.value : 0;
- newTask.priority = (_.isString(task.priority)) ? task.priority : '!';
+ newTask.tags = _.isObject(task.tags) ? task.tags : {};
+ newTask.type = _.isString(task.type) ? task.type : 'habit';
+ newTask.value = _.isNumber(task.value) ? task.value : 0;
+ newTask.priority = _.isString(task.priority) ? task.priority : '!';
switch (newTask.type) {
case 'habit':
- newTask.up = (_.isBoolean(task.up)) ? task.up : true;
- newTask.down = (_.isBoolean(task.down)) ? task.down : true;
- newTask.history = (_.isArray(task.history)) ? task.history : [];
+ newTask.up = _.isBoolean(task.up) ? task.up : true;
+ newTask.down = _.isBoolean(task.down) ? task.down : true;
+ newTask.history = _.isArray(task.history) ? task.history : [];
break;
case 'daily':
- newTask.repeat = (_.isObject(task.repeat)) ? task.repeat : {m:1, t:1, w:1, th:1, f:1, s:1, su:1};
- newTask.streak = (_.isNumber(task.streak)) ? task.streak : 0;
- newTask.completed = (_.isBoolean(task.completed)) ? task.completed : false;
- newTask.history = (_.isArray(task.history)) ? task.history : [];
+ newTask.repeat = _.isObject(task.repeat) ? task.repeat : {m: 1, t: 1, w: 1, th: 1, f: 1, s: 1, su: 1};
+ newTask.streak = _.isNumber(task.streak) ? task.streak : 0;
+ newTask.completed = _.isBoolean(task.completed) ? task.completed : false;
+ newTask.history = _.isArray(task.history) ? task.history : [];
break;
case 'todo':
- newTask.completed = (_.isBoolean(task.completed)) ? task.completed : false;
+ newTask.completed = _.isBoolean(task.completed) ? task.completed : false;
break;
}
m.push(newTask);
return m;
}, []);
- delete user[type + 'Ids'];
+ delete user[`${type }Ids`];
});
delete user.tasks;
}
try {
- db.users.update({_id:user._id}, user);
- } catch(e) {
+ db.users.update({_id: user._id}, user);
+ } catch (e) {
print(e);
}
});
// Remove old groups.*.challenges, they're not compatible with the new system, set member counts
// -------------------------
-db.groups.find().forEach(function(group){
- db.groups.update({_id:group._id}, {
- $set:{memberCount: _.size(group.members)},
- $pull:{challenges:1}
- })
+db.groups.find().forEach(function (group) {
+ db.groups.update({_id: group._id}, {
+ $set: {memberCount: _.size(group.members)},
+ $pull: {challenges: 1},
+ });
});
// HabitRPG => Tavern
// -------------------------
-db.groups.update({_id:'habitrpg'}, {$set:{name:'Tavern'}});
\ No newline at end of file
+db.groups.update({_id: 'habitrpg'}, {$set: {name: 'Tavern'}});
\ No newline at end of file
diff --git a/migrations/archive/2013/20131102_restore_task_ids.js b/migrations/archive/2013/20131102_restore_task_ids.js
new file mode 100644
index 0000000000..89361a4777
--- /dev/null
+++ b/migrations/archive/2013/20131102_restore_task_ids.js
@@ -0,0 +1,25 @@
+// mongo habitrpg ./node_modules/lodash/lodash.js ./migrations/20131028_task_subdocs_tags_invites.js
+
+db.challenges.find().forEach(function (chal) {
+ _.each(chal.habits.concat(chal.dailys).concat(chal.todos).concat(chal.rewards), function (task) {
+ task.id = task.id || task._id;
+ });
+ try {
+ db.challenges.update({_id: chal._id}, chal);
+ db.groups.update({_id: chal.group}, {$addToSet: {challenges: chal._id}});
+ } catch (e) {
+ print(e);
+ }
+});
+
+db.users.find().forEach(function (user) {
+ _.each(user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards), function (task) {
+ task.id = task.id || task._id;
+ });
+ try {
+ db.users.update({_id: user._id}, user);
+ } catch (e) {
+ print(e);
+ }
+});
+
diff --git a/migrations/archive/2013/20131104_remove_invalid_dues.js b/migrations/archive/2013/20131104_remove_invalid_dues.js
new file mode 100644
index 0000000000..696a18004e
--- /dev/null
+++ b/migrations/archive/2013/20131104_remove_invalid_dues.js
@@ -0,0 +1,7 @@
+db.users.find({}, {todos: 1}).forEach(function (user) {
+ _.each(user.todos, function (task) {
+ if (moment(task.date).toDate() === 'Invalid Date')
+ task.date = moment().format('MM/DD/YYYY');
+ });
+ db.users.update({_id: user._id}, {$set: {todos: user.todos}});
+});
\ No newline at end of file
diff --git a/migrations/20131104_restore_lost_task_data.js b/migrations/archive/2013/20131104_restore_lost_task_data.js
similarity index 55%
rename from migrations/20131104_restore_lost_task_data.js
rename to migrations/archive/2013/20131104_restore_lost_task_data.js
index e77f57de3f..26b8692401 100644
--- a/migrations/20131104_restore_lost_task_data.js
+++ b/migrations/archive/2013/20131104_restore_lost_task_data.js
@@ -5,8 +5,8 @@
* schemas became more strict. See conversation at https://github.com/HabitRPG/habitrpg/issues/1712 ,
* this restores task tags, streaks, due-dates, values
*/
-var mongo = require('mongoskin');
-var _ = require('lodash');
+let mongo = require('mongoskin');
+let _ = require('lodash');
// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
// We've now upgraded to lodash v4 but the code used in this migration has not been
@@ -14,47 +14,47 @@ var _ = require('lodash');
// be checked for compatibility against the v4 changelog and changed if necessary.
// https://github.com/lodash/lodash/wiki/Changelog#v400
-var backupUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users');
-var liveUsers = mongo.db('localhost:27017/habitrpg_new?auto_reconnect').collection('users');
+let backupUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users');
+let liveUsers = mongo.db('localhost:27017/habitrpg_new?auto_reconnect').collection('users');
-backupUsers.count(function(err, count){
+backupUsers.count(function (err, count) {
if (err) return console.error(err);
- backupUsers.findEach({}, {batchSize:250}, function(err, before){
+ backupUsers.findEach({}, {batchSize: 250}, function (err, before) {
if (err) return console.error(err);
if (!before) return console.log('!before');
- liveUsers.findById(before._id, function(err, after){
+ liveUsers.findOne({_id: before._id}, function (err, after) {
if (err) return console.error(err);
if (!after) {
count--;
- return console.log(before._id + ' deleted?');
+ return console.log(`${before._id } deleted?`);
}
- if (before._id == '9') console.log('lefnire processed');
- _.each(before.tasks, function(tBefore){
- var tAfter = _.find(after[tBefore.type+'s'], {id:tBefore.id});
+ if (before._id === '9') console.log('lefnire processed');
+ _.each(before.tasks, function (tBefore) {
+ let tAfter = _.find(after[`${tBefore.type}s`], {id: tBefore.id});
if (!tAfter) return; // task has been deleted since launch
// Restore deleted tags
if (!_.isEmpty(tBefore.tags) && _.isEmpty(tAfter.tags))
tAfter.tags = tBefore.tags;
// Except tags which are no longer available on the updated user
- _.each(tAfter.tags, function(v,k){ //value is true, key is tag.id
- if (!_.find(after.tags,{id:k})) delete tAfter.tags[k];
- })
+ _.each(tAfter.tags, function (v, k) { // value is true, key is tag.id
+ if (!_.find(after.tags, {id: k})) delete tAfter.tags[k];
+ });
// Restore deleted streaks
- if (+tBefore.streak > tAfter.streak)
- tAfter.streak = +tBefore.streak;
+ if (Number(tBefore.streak) > tAfter.streak)
+ tAfter.streak = Number(tBefore.streak);
- if (!!tBefore.date && !tAfter.date)
+ if (Boolean(tBefore.date) && !tAfter.date)
tAfter.date = tBefore.date;
// Restore deleted values
- if (+tBefore.value != 0 && tAfter.value == 0)
- tAfter.value = +tBefore.value;
- })
+ if (Number(tBefore.value) != 0 && tAfter.value === 0)
+ tAfter.value = Number(tBefore.value);
+ });
after._v++;
- liveUsers.update({_id:after._id}, after);
- if (--count <= 0) console.log("DONE!");
- })
+ liveUsers.update({_id: after._id}, after);
+ if (--count <= 0) console.log('DONE!');
+ });
});
});
\ No newline at end of file
diff --git a/migrations/archive/2013/20131105_remove_history_ids.js b/migrations/archive/2013/20131105_remove_history_ids.js
new file mode 100644
index 0000000000..c7e09a334a
--- /dev/null
+++ b/migrations/archive/2013/20131105_remove_history_ids.js
@@ -0,0 +1,21 @@
+function deleteId (h) {
+ delete h._id;
+}
+
+db.users.find({}, {habits: 1, dailys: 1, history: 1}).forEach(function (user) {
+ if (user.history) {
+ _.each(['todos', 'exp'], function (type) {
+ if (user.history[type]) {
+ _.each(user.history.exp, deleteId);
+ }
+ });
+ } else {
+ user.history = {exp: [], todos: []};
+ }
+
+ _.each(['habits', 'dailys'], function (type) {
+ _.each(user[type].history, deleteId);
+ });
+
+ db.users.update({_id: user._id}, {$set: {history: user.history, habits: user.habits, dailys: user.dailys}});
+});
\ No newline at end of file
diff --git a/migrations/20131107_from_backer_to_contributor.js b/migrations/archive/2013/20131107_from_backer_to_contributor.js
similarity index 63%
rename from migrations/20131107_from_backer_to_contributor.js
rename to migrations/archive/2013/20131107_from_backer_to_contributor.js
index d5a4ee851b..1c083ad6ff 100644
--- a/migrations/20131107_from_backer_to_contributor.js
+++ b/migrations/archive/2013/20131107_from_backer_to_contributor.js
@@ -1,9 +1,9 @@
db.users.find({
$or: [
- {'backer.admin':{$exists:1}},
- {'backer.contributor':{$exists:1}}
- ]
-},{backer:1}).forEach(function(user){
+ {'backer.admin': {$exists: 1}},
+ {'backer.contributor': {$exists: 1}},
+ ],
+}, {backer: 1}).forEach(function (user) {
user.contributor = {};
user.contributor.admin = user.backer.admin;
delete user.backer.admin;
@@ -14,5 +14,5 @@ db.users.find({
delete user.backer.contributor;
}
- db.users.update({_id:user._id}, {$set:{backer:user.backer, contributor:user.contributor}});
+ db.users.update({_id: user._id}, {$set: {backer: user.backer, contributor: user.contributor}});
});
\ No newline at end of file
diff --git a/migrations/archive/2013/20131108_add_gems_for_contribs.js b/migrations/archive/2013/20131108_add_gems_for_contribs.js
new file mode 100644
index 0000000000..c05c88c4ec
--- /dev/null
+++ b/migrations/archive/2013/20131108_add_gems_for_contribs.js
@@ -0,0 +1,4 @@
+// Increase everyone's gems per their contribution level
+db.users.find({'contributor.level': {$gt: 0}}, {contributor: 1, balance: 1}).forEach(function (user) {
+ db.users.update({_id: user._id}, {$inc: {balance: user.contributor.level * 0.5} });
+});
\ No newline at end of file
diff --git a/migrations/20131109_refactor_pets.js b/migrations/archive/2013/20131109_refactor_pets.js
similarity index 61%
rename from migrations/20131109_refactor_pets.js
rename to migrations/archive/2013/20131109_refactor_pets.js
index f5d9f7d567..2d73442077 100644
--- a/migrations/20131109_refactor_pets.js
+++ b/migrations/archive/2013/20131109_refactor_pets.js
@@ -1,10 +1,11 @@
db.users.find(
- {$where: "Array.isArray(this.items.pets) || Array.isArray(this.items.eggs) || Array.isArray(this.items.hatchingPotions)"},
- {backer: 1, items:1}
-).forEach(function(user){
-
+ {$where: 'Array.isArray(this.items.pets) || Array.isArray(this.items.eggs) || Array.isArray(this.items.hatchingPotions)'},
+ {backer: 1, items: 1}
+).forEach(function (user) {
if (_.isArray(user.items.pets)) {
- user.items.pets = _.reduce(user.items.pets, function(m,v){ m[v] = 5; return m;}, {});
+ user.items.pets = _.reduce(user.items.pets, function (m, v) {
+ m[v] = 5; return m;
+ }, {});
}
if (!_.isString(user.items.currentPet)) {
@@ -12,7 +13,7 @@ db.users.find(
}
if (_.isArray(user.items.eggs)) {
- user.items.eggs = _.reduce(user.items.eggs, function(m,v){
+ user.items.eggs = _.reduce(user.items.eggs, function (m, v) {
if (!m[v.name]) m[v.name] = 0;
m[v.name]++;
return m;
@@ -20,7 +21,7 @@ db.users.find(
}
if (_.isArray(user.items.hatchingPotions)) {
- user.items.hatchingPotions = _.reduce(user.items.hatchingPotions, function(m,v){
+ user.items.hatchingPotions = _.reduce(user.items.hatchingPotions, function (m, v) {
if (!m[v]) m[v] = 0;
m[v]++;
return m;
@@ -35,5 +36,5 @@ db.users.find(
user.items.mounts['LionCub-Ethereal'] = true;
}
- db.users.update({_id:user._id}, {$set:{items:user.items}});
+ db.users.update({_id: user._id}, {$set: {items: user.items}});
});
diff --git a/migrations/archive/2013/20131111_task_NaN.js b/migrations/archive/2013/20131111_task_NaN.js
new file mode 100644
index 0000000000..e4df7c5ca6
--- /dev/null
+++ b/migrations/archive/2013/20131111_task_NaN.js
@@ -0,0 +1,15 @@
+// This migration has already been run in the past. It's vital to fix these users presently, but we need to find
+// out why task values are ever getting in as NaN. My guess is API PUT /tasks/:tid routes
+db.users.find({}, {habits: 1, dailys: 1, todos: 1, rewards: 1}).forEach(function (user) {
+ _.each(['habits', 'dailys', 'todos', 'rewards'], function (type) {
+ _.each(user[type], function (task) {
+ task.value = Number(task.value);
+ if (_.isNaN(task.value)) {
+ task.value = 0;
+ print(user._id);
+ }
+ });
+ });
+
+ db.users.update({_id: user._id}, {$set: {habits: user.habits, dailys: user.dailys, todos: user.todos, rewards: user.rewards}});
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20131114_migrate_websites_to_blurb.js b/migrations/archive/2013/20131114_migrate_websites_to_blurb.js
new file mode 100644
index 0000000000..f398be79a2
--- /dev/null
+++ b/migrations/archive/2013/20131114_migrate_websites_to_blurb.js
@@ -0,0 +1,14 @@
+// Migrate all users websites to the profile blurb field
+db.users.find({'profile.websites': {$exists: true}}).forEach(function (user) {
+ db.users.update({_id: user._id}, {
+ $set: {'profile.blurb': `${user.profile.blurb }\n * ${ user.profile.websites.join('\n * ')}`},
+ $unset: {'profile.websites': 1},
+ });
+});
+
+db.groups.find({'websites.0': {$exists: true}}).forEach(function (group) {
+ db.groups.update({_id: group._id}, {
+ $set: {description: `${group.description }\n * ${ group.websites.join('\n * ')}`},
+ $unset: {websites: 1},
+ });
+});
diff --git a/migrations/archive/2013/20131115_update_gear_preferences.js b/migrations/archive/2013/20131115_update_gear_preferences.js
new file mode 100644
index 0000000000..d6bb363762
--- /dev/null
+++ b/migrations/archive/2013/20131115_update_gear_preferences.js
@@ -0,0 +1,10 @@
+// Add defaults to show gears in all users
+db.users.update(
+ {},
+ {$set: {
+ 'preferences.showWeapon': true,
+ 'preferences.showShield': true,
+ 'preferences.showArmor': true,
+ }},
+ {multi: true}
+);
diff --git a/migrations/archive/2013/20131117_fix_task_types.js b/migrations/archive/2013/20131117_fix_task_types.js
new file mode 100644
index 0000000000..570f315bb1
--- /dev/null
+++ b/migrations/archive/2013/20131117_fix_task_types.js
@@ -0,0 +1,18 @@
+// TODO figure out why this is happening in the first place
+
+db.users.find({}, {habits: 1, dailys: 1, todos: 1, rewards: 1}).forEach(function (user) {
+ _.each(user.habits, function (task) {
+ task.type = 'habit';
+ });
+ _.each(user.dailys, function (task) {
+ task.type = 'daily';
+ });
+ _.each(user.todos, function (task) {
+ task.type = 'todo';
+ });
+ _.each(user.rewards, function (task) {
+ task.type = 'reward';
+ });
+
+ db.users.update({_id: user._id}, {$set: {habits: user.habits, dailys: user.dailys, todos: user.todos, rewards: user.rewards}});
+});
diff --git a/migrations/archive/2013/20131117_remove_undefined_pets.js b/migrations/archive/2013/20131117_remove_undefined_pets.js
new file mode 100644
index 0000000000..bcfbe3d216
--- /dev/null
+++ b/migrations/archive/2013/20131117_remove_undefined_pets.js
@@ -0,0 +1,12 @@
+// once and for all!
+
+db.users.find({'items.pets': {$exists: 1}}, {'items.pets': 1}).forEach(function (user) {
+ _.reduce(user.items.pets, function (m, v, k) {
+ if (!k.indexOf('undefined')) m.push(k);
+ return m;
+ }, []).forEach(function (key) {
+ delete user.items.pets[key];
+ });
+
+ db.users.update({_id: user._id}, { $set: {'items.pets': user.items.pets} });
+});
diff --git a/migrations/archive/2013/20131122_deleted_tags.js b/migrations/archive/2013/20131122_deleted_tags.js
new file mode 100644
index 0000000000..0ca01616dc
--- /dev/null
+++ b/migrations/archive/2013/20131122_deleted_tags.js
@@ -0,0 +1,13 @@
+// Cleanup broken tags
+// -------------------------
+db.users.find().forEach(function (user) {
+ let tasks = user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards);
+
+ _.each(tasks, function (task) {
+ _.each(task.tags, function (value, key) { // value is true, key is tag.id
+ if (!_.find(user.tags, {id: key})) delete task.tags[key];
+ });
+ });
+
+ db.users.update({_id: user._id}, user);
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20131123_set_default_party_order.js b/migrations/archive/2013/20131123_set_default_party_order.js
new file mode 100644
index 0000000000..07a222035b
--- /dev/null
+++ b/migrations/archive/2013/20131123_set_default_party_order.js
@@ -0,0 +1,8 @@
+// Add default to randomize party members list
+db.users.update(
+ {},
+ {$set: {
+ 'party.order': 'random',
+ }},
+ {multi: true}
+);
diff --git a/migrations/archive/2013/20131126_clean_dayStart.js b/migrations/archive/2013/20131126_clean_dayStart.js
new file mode 100644
index 0000000000..12a0eb0b8f
--- /dev/null
+++ b/migrations/archive/2013/20131126_clean_dayStart.js
@@ -0,0 +1,5 @@
+db.users.find({'preferences.dayStart': {$exists: 1}}, {'preferences.dayStart': 1}).forEach(function (user) {
+ let dayStart = Number(user.preferences.dayStart);
+ dayStart = _.isNaN(dayStart) || dayStart < 0 || dayStart > 24 ? 0 : dayStart;
+ db.users.update({_id: user._id}, {$set: {'preferences.dayStart': dayStart}});
+});
diff --git a/migrations/archive/2013/20131126_turkey_pet.js b/migrations/archive/2013/20131126_turkey_pet.js
new file mode 100644
index 0000000000..f93848e926
--- /dev/null
+++ b/migrations/archive/2013/20131126_turkey_pet.js
@@ -0,0 +1 @@
+db.users.update({}, {$set: {'items.pets.Turkey-Base': 5, 'flags.newStuff': true}}, {multi: true});
\ No newline at end of file
diff --git a/migrations/archive/2013/20131127_restore_dayStart.js b/migrations/archive/2013/20131127_restore_dayStart.js
new file mode 100644
index 0000000000..e23bc00b59
--- /dev/null
+++ b/migrations/archive/2013/20131127_restore_dayStart.js
@@ -0,0 +1,42 @@
+// node .migrations/20131127_restore_dayStart.js
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let backupUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users');
+let liveUsers = mongo.db('localhost:27017/habitrpg_new?auto_reconnect').collection('users');
+
+let query = {'preferences.dayStart': {$exists: 1, $ne: 0}};
+let select = {'preferences.dayStart': 1};
+
+backupUsers.count(query, function (err, count) {
+ if (err) return console.error(err);
+ backupUsers.findEach(query, select, {batchSize: 20}, function (err, before) {
+ if (err) return console.error(err);
+ if (!before) {
+ count--; return console.log('!before');
+ }
+ liveUsers.findOne({_id: before._id}, function (err, after) {
+ if (err) return console.error(err);
+ if (!after) {
+ count--; return console.log(`${before._id } deleted?`);
+ }
+
+ let dayStart = Number(before.preferences.dayStart);
+ if (after.preferences.dayStart === 0 && dayStart != 0) {
+ dayStart = _.isNaN(dayStart) || dayStart < 0 || dayStart > 24 ? 0 : dayStart;
+ } else {
+ dayStart = after.preferences.dayStart;
+ }
+
+ liveUsers.update({_id: after._id}, {$inc: {_v: 1}, $set: {'preferences.dayStart': dayStart}});
+ if (--count <= 0) console.log('DONE!');
+ });
+ });
+});
\ No newline at end of file
diff --git a/migrations/20131214_classes.coffee b/migrations/archive/2013/20131214_classes.coffee
similarity index 100%
rename from migrations/20131214_classes.coffee
rename to migrations/archive/2013/20131214_classes.coffee
diff --git a/migrations/20131217_unearned_backer_gear.js b/migrations/archive/2013/20131217_unearned_backer_gear.js
similarity index 51%
rename from migrations/20131217_unearned_backer_gear.js
rename to migrations/archive/2013/20131217_unearned_backer_gear.js
index 2c1baf9dc7..dd010912e5 100644
--- a/migrations/20131217_unearned_backer_gear.js
+++ b/migrations/archive/2013/20131217_unearned_backer_gear.js
@@ -1,20 +1,20 @@
-var query = {
- '$or': [
+let query = {
+ $or: [
{'items.gear.owned.weapon_special_0': true},
{'items.gear.owned.armor_special_0': true},
{'items.gear.owned.head_special_0': true},
- {'items.gear.owned.shield_special_0': true}
- ]
+ {'items.gear.owned.shield_special_0': true},
+ ],
};
-db.users.find(query, {'items.gear.owned':1,backer:1}).forEach(function(user){
- var owned = user.items.gear.owned;
- var tier = (user.backer && user.backer.tier) || 0;
+db.users.find(query, {'items.gear.owned': 1, backer: 1}).forEach(function (user) {
+ let owned = user.items.gear.owned;
+ let tier = user.backer && user.backer.tier || 0;
if (tier < 70) delete owned.weapon_special_0;
if (tier < 45) delete owned.armor_special_0;
if (tier < 45) delete owned.head_special_0;
if (tier < 45) delete owned.shield_special_0;
- db.users.update({_id:user._id}, {$set:{'items.gear.owned':owned}});
+ db.users.update({_id: user._id}, {$set: {'items.gear.owned': owned}});
});
diff --git a/migrations/archive/2013/20131221_restore_NaN_history.js b/migrations/archive/2013/20131221_restore_NaN_history.js
new file mode 100644
index 0000000000..babb7c3a9e
--- /dev/null
+++ b/migrations/archive/2013/20131221_restore_NaN_history.js
@@ -0,0 +1,55 @@
+// node .migrations/20131221_restore_NaN_history.js
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+/**
+ * After the classes migration, users lost some history entries
+ */
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let backupUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users');
+let liveUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users');
+
+function filterNaNs (h) {
+ return h && _.isNumber(Number(h.value)) && !_.isNaN(Number(h.value));
+}
+
+let fields = {history: 1, habits: 1, dailys: 1, migration: 1};
+let count = 0;
+liveUsers.findEach({migration: {$ne: '20131221_restore_NaN_history'}}, fields, {batchSize: 500}, function (err, after) {
+ if (!after) err = '!after';
+ if (err) {
+ count++; return console.error(err);
+ }
+
+ backupUsers.findOne({_id: after._id}, fields, function (err, before) {
+ if (err) {
+ count++; return console.error(err);
+ }
+
+ _.each(['todos', 'exp'], function (type) {
+ if (!_.isEmpty(after.history[type]))
+ after.history[type] = _.filter(after.history[type], filterNaNs);
+ if (before && !_.isEmpty(before.history[type]))
+ after.history[type] = before.history[type].concat(after.history[type]);
+ });
+
+ _.each(['habits', 'dailys'], function (type) {
+ _.each(after[type], function (t) {
+ t.history = _.filter(t.history, filterNaNs);
+ let found = before && _.find(before[type], {id: t.id});
+ if (found && found.history) t.history = found.history.concat(t.history);
+ });
+ });
+
+ liveUsers.update({_id: after._id}, {$set: {history: after.history, dailys: after.dailys, habits: after.habits, migration: '20131221_restore_NaN_history'}, $inc: {_v: 1}});
+ // if (--count <= 0) console.log("DONE! " + after._id);
+ if (++count % 1000 === 0) console.log(count);
+ if (after._id === '9') console.log('lefnire processed');
+ });
+});
\ No newline at end of file
diff --git a/migrations/archive/2013/20131225_restore_streaks.js b/migrations/archive/2013/20131225_restore_streaks.js
new file mode 100644
index 0000000000..e161ee1c91
--- /dev/null
+++ b/migrations/archive/2013/20131225_restore_streaks.js
@@ -0,0 +1,42 @@
+// node .migrations/20131225_restore_streaks.js
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+/**
+ * After the classes migration, users lost some history entries
+ */
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let backupUsers = mongo.db('localhost:27017/habitrpg_old?auto_reconnect').collection('users');
+let liveUsers = mongo.db('lefnire:mAdn3s5s@charlotte.mongohq.com:10015/habitrpg_large?auto_reconnect').collection('users');
+
+let fields = {dailys: 1, migration: 1};
+let count = 0;
+liveUsers.findEach({migration: {$ne: '20131225_restore_streaks'}}, fields, {batchSize: 250}, function (err, after) {
+ if (!after) err = '!after';
+ if (err) {
+ count++; return console.error(err);
+ }
+
+ backupUsers.findOne({_id: after._id}, fields, function (err, before) {
+ if (!before) err = '!before';
+ if (err) {
+ count++; return console.error(err);
+ }
+
+ _.each(before.dailys, function (d) {
+ let found = _.find(after.dailys, {id: d.id});
+ if (found && !found.streak) found.streak = d.streak;
+ });
+
+ liveUsers.update({_id: after._id}, {$set: {dailys: after.dailys, migration: '20131225_restore_streaks'}, $inc: {_v: 1}});
+ // if (--count <= 0) console.log("DONE! " + after._id);
+ if (++count % 1000 === 0) console.log(count);
+ if (after._id === '9') console.log('lefnire processed');
+ });
+});
\ No newline at end of file
diff --git a/migrations/archive/2014/20140119_task_creation_completion_dates.js b/migrations/archive/2014/20140119_task_creation_completion_dates.js
new file mode 100644
index 0000000000..9414117cd8
--- /dev/null
+++ b/migrations/archive/2014/20140119_task_creation_completion_dates.js
@@ -0,0 +1,8 @@
+db.users.find({}, {todos: 1, dailys: 1, rewards: 1, habits: 1}).forEach(function (user) {
+ _.each(user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards), function (t) {
+ t.dateCreated = t.created || new Date();
+ delete t.created;
+ if (t.type === 'todo' && t.completed) t.dateCompleted = new Date();
+ });
+ db.users.update({_id: user._id}, {$set: {habits: user.habits, dailys: user.dailys, todos: user.todos, rewards: user.rewards}});
+});
diff --git a/migrations/archive/2014/20140130_birthdayEnd.js b/migrations/archive/2014/20140130_birthdayEnd.js
new file mode 100644
index 0000000000..4c235d52eb
--- /dev/null
+++ b/migrations/archive/2014/20140130_birthdayEnd.js
@@ -0,0 +1 @@
+db.users.update({}, {$set: {'achievements.habitBirthday': true}}, {multi: 1});
diff --git a/migrations/archive/2014/20140130_birthdayStart.js b/migrations/archive/2014/20140130_birthdayStart.js
new file mode 100644
index 0000000000..93283c720b
--- /dev/null
+++ b/migrations/archive/2014/20140130_birthdayStart.js
@@ -0,0 +1,12 @@
+db.users.update({}, {$set: {
+ 'items.food.Cake_Skeleton': 1,
+ 'items.food.Cake_Base': 1,
+ 'items.food.Cake_CottonCandyBlue': 1,
+ 'items.food.Cake_CottonCandyPink': 1,
+ 'items.food.Cake_Shade': 1,
+ 'items.food.Cake_White': 1,
+ 'items.food.Cake_Golden': 1,
+ 'items.food.Cake_Zombie': 1,
+ 'items.food.Cake_Desert': 1,
+ 'items.food.Cake_Red': 1,
+}}, {multi: 1});
diff --git a/migrations/archive/2014/20140220_challenge_memberCount.js b/migrations/archive/2014/20140220_challenge_memberCount.js
new file mode 100644
index 0000000000..4444165e86
--- /dev/null
+++ b/migrations/archive/2014/20140220_challenge_memberCount.js
@@ -0,0 +1,3 @@
+db.challenges.find({}, {members: 1}).forEach(function (chal) {
+ db.challenges.update({_id: chal._id}, {$set: {memberCount: chal.members.length}});
+});
diff --git a/migrations/archive/2014/20140301_missing_mysteries.js b/migrations/archive/2014/20140301_missing_mysteries.js
new file mode 100644
index 0000000000..f5fb4019ed
--- /dev/null
+++ b/migrations/archive/2014/20140301_missing_mysteries.js
@@ -0,0 +1,14 @@
+db.users.update(
+ {
+ 'purchased.plan.dateCreated': {$gte: new Date('2014-02-22'), $lt: new Date('2014-02-29')},
+ 'items.gear.owned.armor_mystery_201402': null,
+ 'items.gear.owned.head_mystery_201402': null,
+ 'items.gear.owned.back_mystery_201402': null,
+ 'purchased.plan.mysteryItems': {$nin: ['armor_mystery_201402', 'head_mystery_201402', 'back_mystery_201402']},
+ },
+ // {_id:1,'purchased.plan':1,'items.gear.owned':1}
+ {$push: {'purchased.plan.mysteryItems': {$each: ['armor_mystery_201402', 'head_mystery_201402', 'back_mystery_201402']}}},
+ {multi: true}
+);/* .forEach(function(user){
+ printjson(user);
+ });*/
diff --git a/migrations/archive/2014/20140610_missing_backer_mount.js b/migrations/archive/2014/20140610_missing_backer_mount.js
new file mode 100644
index 0000000000..6b678d5869
--- /dev/null
+++ b/migrations/archive/2014/20140610_missing_backer_mount.js
@@ -0,0 +1 @@
+db.users.update({'backer.tier': {$gt: 69}}, {$set: {'items.mounts.LionCub-Ethereal': true}}, {multi: 1});
\ No newline at end of file
diff --git a/migrations/archive/2014/20140712_wiped_quest_membership.js b/migrations/archive/2014/20140712_wiped_quest_membership.js
new file mode 100644
index 0000000000..8ccd44bb40
--- /dev/null
+++ b/migrations/archive/2014/20140712_wiped_quest_membership.js
@@ -0,0 +1,11 @@
+// mongo habitrpg node_modules/lodash/lodash.js ./migrations/20140712_wiped_quest_membership.js
+db.groups.find({type: 'party', 'quest.key': {$ne: null}, 'quest.active': true}, {quest: 1}).forEach(function (group) {
+ let activeMembers = _.reduce(group.quest.members, function (m, v, k) {
+ if (v === true) m.push(k); return m;
+ }, []);
+ db.users.update(
+ {_id: {$in: activeMembers}},
+ {$set: {'party.quest.key': group.quest.key, 'party.quest.completed': null}},
+ {multi: true}
+ );
+});
diff --git a/migrations/archive/2014/20140803_remove_undefined_notifications.js b/migrations/archive/2014/20140803_remove_undefined_notifications.js
new file mode 100644
index 0000000000..1033244adc
--- /dev/null
+++ b/migrations/archive/2014/20140803_remove_undefined_notifications.js
@@ -0,0 +1,13 @@
+let _ = require('lodash');
+
+db.users.find({}).forEach(function (user) {
+ let newNewMessages = {};
+
+ _.each(user.newMessages, function (val, key) {
+ if (key != 'undefined') {
+ newNewMessages[key] = val;
+ }
+ });
+
+ db.users.update({_id: user._id}, {$set: {newMessages: newNewMessages}});
+});
diff --git a/migrations/20140823_remove_undefined_and_false_notifications.js b/migrations/archive/2014/20140823_remove_undefined_and_false_notifications.js
similarity index 53%
rename from migrations/20140823_remove_undefined_and_false_notifications.js
rename to migrations/archive/2014/20140823_remove_undefined_and_false_notifications.js
index a6eed2b838..5f949e4399 100644
--- a/migrations/20140823_remove_undefined_and_false_notifications.js
+++ b/migrations/archive/2014/20140823_remove_undefined_and_false_notifications.js
@@ -1,9 +1,9 @@
// node .migrations/20140823_remove_undefined_and_false_notifications.js
-var migrationName = '20140823_remove_undefined_and_false_notifications';
+let migrationName = '20140823_remove_undefined_and_false_notifications';
-var authorName = 'Alys'; // in case script author needs to know when their ...
-var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
+let authorName = 'Alys'; // in case script author needs to know when their ...
+let authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; // ... own data is done
// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
// We've now upgraded to lodash v4 but the code used in this migration has not been
@@ -15,8 +15,8 @@ var authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; //... own data is done
* https://github.com/HabitRPG/habitrpg/pull/3907
*/
-var mongo = require('mongoskin');
-var _ = require('lodash');
+let mongo = require('mongoskin');
+let _ = require('lodash');
// XXX @lefnire, choose wisely:
// var liveUsers = mongo.db('lefnire:mAdn3s5s@charlotte.mongohq.com:10015/habitrpg_large?auto_reconnect').collection('users');
@@ -26,26 +26,28 @@ var _ = require('lodash');
// var liveUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users');
-var fields = {migration:1,newMessages:1};
-var progressCount = 1000;
+let fields = {migration: 1, newMessages: 1};
+let progressCount = 1000;
// var progressCount = 1;
-var count = 0;
-liveUsers.findEach({migration: {$ne:migrationName}}, fields, {batchSize:250}, function(err, user){
+let count = 0;
+liveUsers.findEach({migration: {$ne: migrationName}}, fields, {batchSize: 250}, function (err, user) {
count++;
if (!user) err = '!user';
- if (err) {return console.error(err);}
+ if (err) {
+ return console.error(err);
+ }
- var newNewMessages = {};
- _.each(user.newMessages,function(val,key){
+ let newNewMessages = {};
+ _.each(user.newMessages, function (val, key) {
// console.log(key + " " + val.name);
- if(key != "undefined" && val['value']){
+ if (key != 'undefined' && val.value) {
newNewMessages[key] = val;
}
- })
+ });
- liveUsers.update({_id:user._id}, {$set:{newMessages:newNewMessages, migration:migrationName}, $inc:{_v:1}});
+ liveUsers.update({_id: user._id}, {$set: {newMessages: newNewMessages, migration: migrationName}, $inc: {_v: 1}});
- if (count%progressCount == 0) console.log(count + ' ' + user._id);
- if (user._id == '9') console.log('lefnire processed');
- if (user._id == authorUuid) console.log(authorName + ' processed');
+ if (count % progressCount === 0) console.log(`${count } ${ user._id}`);
+ if (user._id === '9') console.log('lefnire processed');
+ if (user._id === authorUuid) console.log(`${authorName } processed`);
});
diff --git a/migrations/archive/2014/20140829_change_headAccessory_to_eyewear.js b/migrations/archive/2014/20140829_change_headAccessory_to_eyewear.js
new file mode 100644
index 0000000000..4d73a951ce
--- /dev/null
+++ b/migrations/archive/2014/20140829_change_headAccessory_to_eyewear.js
@@ -0,0 +1,83 @@
+// node .migrations/20140829_change_headAccessory_to_eyewear.js
+
+let migrationName = '20140829_change_headAccessory_to_eyewear';
+let authorName = 'Alys'; // in case script author needs to know when their ...
+let authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; // ... own data is done
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+/**
+ * https://github.com/HabitRPG/habitrpg/issues/3645
+ */
+let mongo = require('mongoskin');
+let _ = require('lodash');
+let liveUsers = mongo.db('localhost:27017/habitrpg2?auto_reconnect').collection('users');
+
+let fields = {migration: 1,
+ 'items.gear.costume.headAccessory': 1,
+ 'items.gear.equipped.headAccessory': 1,
+ 'items.gear.owned.headAccessory_special_wondercon_black': 1,
+ 'items.gear.owned.headAccessory_special_wondercon_red': 1,
+ 'items.gear.owned.headAccessory_special_summerRogue': 1,
+ 'items.gear.owned.headAccessory_special_summerWarrior': 1,
+};
+
+let progressCount = 1000;
+let count = 0;
+liveUsers.findEach({ $and: [
+ { migration: {$ne: migrationName} },
+ { $or: [
+ {'items.gear.owned.headAccessory_special_summerRogue': {$exists: true}},
+ {'items.gear.owned.headAccessory_special_summerWarrior': {$exists: true}},
+ {'items.gear.owned.headAccessory_special_wondercon_red': {$exists: true}},
+ {'items.gear.owned.headAccessory_special_wondercon_black': {$exists: true}},
+ ]},
+]}, fields, {batchSize: 250}, function (err, user) {
+ count++;
+ if (!user) err = '!user';
+ if (err) {
+ return console.error(err);
+ }
+
+ let set = {migration: migrationName};
+ let unset = {};
+
+ let oldToNew = {
+ headAccessory_special_summerRogue: 'eyewear_special_summerRogue',
+ headAccessory_special_summerWarrior: 'eyewear_special_summerWarrior',
+ headAccessory_special_wondercon_red: 'eyewear_special_wondercon_red',
+ headAccessory_special_wondercon_black: 'eyewear_special_wondercon_black',
+ };
+
+ // items.gear.costume, items.gear.equipped:
+ _.each(['costume', 'equipped'], function (type) {
+ _.each(oldToNew, function (newName, oldName) {
+ if (user.items.gear[type].headAccessory === oldName) {
+ unset[`items.gear.${type}.headAccessory`] = '';
+ set[`items.gear.${type}.eyewear`] = newName;
+ }
+ });
+ });
+
+ // items.gear.owned:
+ _.each(oldToNew, function (newName, oldName) {
+ if (oldName in user.items.gear.owned) {
+ unset[`items.gear.owned.${oldName}`] = '';
+ set[`items.gear.owned.${newName}`] = user.items.gear.owned[oldName];
+ }
+ });
+
+ // console.log(JSON.stringify(user, null, " "));
+ // console.log("set: " + JSON.stringify(set, null, " "));
+ // console.log("unset: " + JSON.stringify(unset, null, " "));
+
+ liveUsers.update({_id: user._id}, {$set: set, $unset: unset, $inc: {_v: 1}});
+
+ if (count % progressCount === 0) console.log(`${count } ${ user._id}`);
+ if (user._id === '9') console.log('lefnire processed');
+ if (user._id === authorUuid) console.log(`${authorName } processed`);
+});
diff --git a/migrations/archive/2014/20140831_increase_gems_for_previous_contributions.js b/migrations/archive/2014/20140831_increase_gems_for_previous_contributions.js
new file mode 100644
index 0000000000..a90a85ae36
--- /dev/null
+++ b/migrations/archive/2014/20140831_increase_gems_for_previous_contributions.js
@@ -0,0 +1,144 @@
+// IMPORTANT:
+//
+// run like this to capture all output:
+//
+// node 20140831_increase_gems_for_previous_contributions.js > 20140831_increase_gems_for_previous_contributions_output.txt
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let migrationName = '20140831_increase_gems_for_previous_contributions';
+
+/**
+ * https://github.com/HabitRPG/habitrpg/issues/3933
+ * Increase Number of Gems for Contributors
+ * author: Alys (d904bd62-da08-416b-a816-ba797c9ee265)
+ *
+ * Increase everyone's gems per their contribution level.
+ * Originally they were given 2 gems per tier.
+ * Now they are given 3 gems per tier for tiers 1,2,3
+ * and 4 gems per tier for tiers 4,5,6,7
+ * So that means an EXTRA 1 for tier 1,
+ * 2 for tier 2,
+ * 3 for tier 3,
+ * 5 for tier 4,
+ * 7 for tier 5,
+ * 9 for tier 6,
+ * 11 for tier 7,
+ * 11 for tier 8 (moderators = tier 7 + admin privileges),
+ * none for tier 9 (staff)
+ */
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+
+let dbUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users');
+
+
+let query = {
+ 'contributor.level': {$gt: 0, $lt: 9},
+ migration: {$ne: migrationName},
+};
+
+let fields = {
+ migration: 1,
+ 'contributor.level': 1,
+ balance: 1,
+};
+
+let userResults = {}; // each key is a UUID, each value is a string
+// describing what changed for that user
+
+console.warn('Updating users...');
+let progressCount = 50;
+let count = 0;
+dbUsers.findEach(query, fields, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All users found. Fetching final balances...');
+ return fetchFinalBalances();
+ }
+ count++;
+
+ let set = {migration: migrationName};
+
+ let tier = user.contributor.level;
+ let extraGems = tier; // tiers 1,2,3
+ if (tier > 3) {
+ extraGems = 3 + (tier - 3) * 2;
+ }
+ if (tier === 8) {
+ extraGems = 11;
+ }
+ let extraBalance = extraGems / 4;
+ set.balance = user.balance + extraBalance;
+
+ // Capture current state of user:
+ userResults[user._id] =
+ `${user._id } ` + ':\n' +
+ ` contrib tier : ${ tier }\n` +
+ ` balance before : ${ user.balance }\n` +
+ ` balance (gems) added : ${ extraBalance } (${
+ extraGems })` + '\n' +
+ ` expected balance after: ${ user.balance + extraBalance }\n`;
+
+ // Update user:
+ dbUsers.update({_id: user._id}, {$set: set, $inc: {_v: 1}});
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+});
+
+
+function fetchFinalBalances () {
+ let query = {_id: {$in: Object.keys(userResults)}};
+ let fields = {
+ balance: 1,
+ };
+
+ let count1 = 0;
+ dbUsers.findEach(query, fields, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All final balances found.');
+ return displayData();
+ }
+ count1++;
+ userResults[user._id] = `${userResults[user._id] +
+ user._id } ` + ':\n' +
+ ` actual balance after : ${ user.balance }\n`;
+ if (count1 % progressCount === 0) console.warn(`${count1 } ${ user._id}`);
+ });
+}
+
+
+function displayData () {
+ _.each(userResults, function (text, uuid) {
+ console.log(text); // text contains uuid
+ });
+ console.log(`\n${ count
+ } users processed (should be roughly 335 according to the Hall)\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/archive/2014/20140914_upgrade_admin_contrib_tiers.js b/migrations/archive/2014/20140914_upgrade_admin_contrib_tiers.js
new file mode 100644
index 0000000000..d2187d48ef
--- /dev/null
+++ b/migrations/archive/2014/20140914_upgrade_admin_contrib_tiers.js
@@ -0,0 +1,86 @@
+let migrationName = '20140914_upgrade_admin_contrib_tiers';
+let authorName = 'Alys'; // in case script author needs to know when their ...
+let authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; // ... own data is done
+
+/**
+ * https://github.com/HabitRPG/habitrpg/issues/3801
+ * Convert Tier 8 contributors to Tier 9 (staff) (all current Tier 8s are admins).
+ * Convert Tier 7 contributors with admin flag to Tier 8 (moderators).
+ */
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db('localhost:27017/habitrpg?auto_reconnect').collection('users');
+
+let query =
+ { 'contributor.level': {$gte: 7}, 'contributor.admin': true, migration: {$ne: migrationName} };
+
+let fields = {migration: 1,
+ 'contributor.admin': 1,
+ 'contributor.level': 1,
+ 'auth.local.username': 1,
+ 'profile.name': 1,
+};
+
+let userResults = {}; // each key is a UUID, each value is a username;
+// contains only the users changed
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ let set = {migration: migrationName};
+ let inc = {'contributor.level': 1, _v: 1};
+
+ userResults[user._id] = user.profile.name;
+
+ dbUsers.update({_id: user._id}, {$set: set, $inc: inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+ if (user._id === '9') console.warn('lefnire' + ' processed');
+});
+
+
+function displayData () {
+ console.log('users modified:');
+ _.each(userResults, function (name, uuid) {
+ console.log(name);
+ });
+ console.warn(`\n${ count
+ } users processed (should be 11 according to the Hall)\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/archive/2014/20140922_free_candy.js b/migrations/archive/2014/20140922_free_candy.js
new file mode 100644
index 0000000000..c503fed034
--- /dev/null
+++ b/migrations/archive/2014/20140922_free_candy.js
@@ -0,0 +1,18 @@
+db.users.update(
+ {},
+ {
+ $inc: {
+ 'items.food.Candy_Base': 1,
+ 'items.food.Candy_CottonCandyBlue': 1,
+ 'items.food.Candy_CottonCandyPink': 1,
+ 'items.food.Candy_Desert': 1,
+ 'items.food.Candy_Golden': 1,
+ 'items.food.Candy_Red': 1,
+ 'items.food.Candy_Shade': 1,
+ 'items.food.Candy_Skeleton': 1,
+ 'items.food.Candy_White': 1,
+ 'items.food.Candy_Zombie': 1,
+ },
+ },
+ {multi: 1}
+);
\ No newline at end of file
diff --git a/migrations/archive/2014/20141006_jackolantern_pet.js b/migrations/archive/2014/20141006_jackolantern_pet.js
new file mode 100644
index 0000000000..f55debe7ee
--- /dev/null
+++ b/migrations/archive/2014/20141006_jackolantern_pet.js
@@ -0,0 +1 @@
+db.users.update({_id: '9'}, {$set: {'items.pets.JackOLantern-Base': 5, 'flags.newStuff': true}}, {multi: true});
\ No newline at end of file
diff --git a/migrations/20141117_consecutive_months.js b/migrations/archive/2014/20141117_consecutive_months.js
similarity index 54%
rename from migrations/20141117_consecutive_months.js
rename to migrations/archive/2014/20141117_consecutive_months.js
index 7b2f418d94..6a416a7079 100644
--- a/migrations/20141117_consecutive_months.js
+++ b/migrations/archive/2014/20141117_consecutive_months.js
@@ -6,15 +6,15 @@
// require moment, lodash
db.users.find(
- {'purchased.plan.customerId':{$ne:null}},
- {_id:1, 'purchased.plan':1}
-).forEach(function(user){
- var p = user.purchased.plan
- , latestMonth = p.dateTerminated || new Date() // their last sub date, or on-going (now)
- , count = moment(latestMonth).diff(p.dateCreated, 'months');
+ {'purchased.plan.customerId': {$ne: null}},
+ {_id: 1, 'purchased.plan': 1}
+).forEach(function (user) {
+ let p = user.purchased.plan,
+ latestMonth = p.dateTerminated || new Date(), // their last sub date, or on-going (now)
+ count = moment(latestMonth).diff(p.dateCreated, 'months');
db.users.update({_id: user._id}, {$set: {
'purchased.plan.consecutive.count': count,
- 'purchased.plan.consecutive.gemCapExtra': _.min([ Math.floor(count/3)*5, 25 ]),
- 'purchased.plan.consecutive.trinkets': Math.floor(count/3)
+ 'purchased.plan.consecutive.gemCapExtra': _.min([Math.floor(count / 3) * 5, 25]),
+ 'purchased.plan.consecutive.trinkets': Math.floor(count / 3),
}});
});
diff --git a/migrations/archive/2014/20141126_turkey_mounts.js b/migrations/archive/2014/20141126_turkey_mounts.js
new file mode 100644
index 0000000000..a72e9e57a9
--- /dev/null
+++ b/migrations/archive/2014/20141126_turkey_mounts.js
@@ -0,0 +1,11 @@
+db.users.update(
+ {'items.pets.Turkey-Base': {$ne: null}},
+ {$set: {'items.mounts.Turkey-Base': true}},
+ {multi: 1}
+);
+
+db.users.update(
+ {'items.pets.Turkey-Base': null},
+ {$set: {'items.pets.Turkey-Base': 5}},
+ {multi: 1}
+);
\ No newline at end of file
diff --git a/migrations/archive/2014/20141211_NaN_consecutives.js b/migrations/archive/2014/20141211_NaN_consecutives.js
new file mode 100644
index 0000000000..a718304d75
--- /dev/null
+++ b/migrations/archive/2014/20141211_NaN_consecutives.js
@@ -0,0 +1,4 @@
+db.users.update({'purchased.plan.consecutive.count': NaN}, {$set: {'purchased.plan.consecutive.count': 0}}, {multi: 1});
+db.users.update({'purchased.plan.consecutive.offset': NaN}, {$set: {'purchased.plan.consecutive.offset': 0}}, {multi: 1});
+db.users.update({'purchased.plan.consecutive.gemCapExtra': NaN}, {$set: {'purchased.plan.consecutive.gemCapExtra': 0}}, {multi: 1});
+db.users.update({'purchased.plan.consecutive.trinkets': NaN}, {$set: {'purchased.plan.consecutive.trinkets': 0}}, {multi: 1});
\ No newline at end of file
diff --git a/migrations/archive/2014/20141230_new_years_hats.js b/migrations/archive/2014/20141230_new_years_hats.js
new file mode 100644
index 0000000000..d2244135d7
--- /dev/null
+++ b/migrations/archive/2014/20141230_new_years_hats.js
@@ -0,0 +1,11 @@
+db.users.update(
+ {'items.gear.owned.head_special_nye': {$ne: null}},
+ {$set: {'items.gear.owned.head_special_nye2014': false}},
+ {multi: 1}
+);
+
+db.users.update(
+ {'items.gear.owned.head_special_nye': null},
+ {$set: {'items.gear.owned.head_special_nye': false}},
+ {multi: 1}
+);
diff --git a/migrations/archive/2015/20150107_plan_dateUpdated_null.js b/migrations/archive/2015/20150107_plan_dateUpdated_null.js
new file mode 100644
index 0000000000..865da3ed60
--- /dev/null
+++ b/migrations/archive/2015/20150107_plan_dateUpdated_null.js
@@ -0,0 +1,8 @@
+db.users.update(
+ {'purchased.plan.customerId': {$ne: null}, 'purchased.plan.dateUpdated': null},
+ {
+ $set: {'purchased.plan.dateUpdated': new Date('12/01/2014')},
+ $unset: {'purchased.plan.datedUpdated': ''},
+ },
+ {multi: true}
+);
diff --git a/migrations/archive/2015/20150124_mountmaster_fix.js b/migrations/archive/2015/20150124_mountmaster_fix.js
new file mode 100644
index 0000000000..5a0bbce030
--- /dev/null
+++ b/migrations/archive/2015/20150124_mountmaster_fix.js
@@ -0,0 +1,95 @@
+let migrationName = '20150124_mountmaster_fix.js';
+let authorName = 'Alys'; // in case script author needs to know when their ...
+let authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; // ... own data is done
+
+/**
+ * https://github.com/HabitRPG/habitrpg/pull/4374#issuecomment-71038795
+ * Convert false to null for mounts that used to be owned.
+ */
+
+let dbserver = 'localhost:27017'; // CHANGE THIS FOR PRODUCTION DATABASE
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/habitrpg?auto_reconnect`).collection('users');
+
+let query = {
+ 'items.mounts': {$exists: true},
+};
+
+let fields = {
+ 'items.mounts': 1,
+};
+
+let animals = ['Wolf-Base', 'Wolf-White', 'Wolf-Desert', 'Wolf-Red', 'Wolf-Shade', 'Wolf-Skeleton', 'Wolf-Zombie', 'Wolf-CottonCandyPink', 'Wolf-CottonCandyBlue', 'Wolf-Golden', 'TigerCub-Base', 'TigerCub-White', 'TigerCub-Desert', 'TigerCub-Red', 'TigerCub-Shade', 'TigerCub-Skeleton', 'TigerCub-Zombie', 'TigerCub-CottonCandyPink', 'TigerCub-CottonCandyBlue', 'TigerCub-Golden', 'PandaCub-Base', 'PandaCub-White', 'PandaCub-Desert', 'PandaCub-Red', 'PandaCub-Shade', 'PandaCub-Skeleton', 'PandaCub-Zombie', 'PandaCub-CottonCandyPink', 'PandaCub-CottonCandyBlue', 'PandaCub-Golden', 'LionCub-Base', 'LionCub-White', 'LionCub-Desert', 'LionCub-Red', 'LionCub-Shade', 'LionCub-Skeleton', 'LionCub-Zombie', 'LionCub-CottonCandyPink', 'LionCub-CottonCandyBlue', 'LionCub-Golden', 'Fox-Base', 'Fox-White', 'Fox-Desert', 'Fox-Red', 'Fox-Shade', 'Fox-Skeleton', 'Fox-Zombie', 'Fox-CottonCandyPink', 'Fox-CottonCandyBlue', 'Fox-Golden', 'FlyingPig-Base', 'FlyingPig-White', 'FlyingPig-Desert', 'FlyingPig-Red', 'FlyingPig-Shade', 'FlyingPig-Skeleton', 'FlyingPig-Zombie', 'FlyingPig-CottonCandyPink', 'FlyingPig-CottonCandyBlue', 'FlyingPig-Golden', 'Dragon-Base', 'Dragon-White', 'Dragon-Desert', 'Dragon-Red', 'Dragon-Shade', 'Dragon-Skeleton', 'Dragon-Zombie', 'Dragon-CottonCandyPink', 'Dragon-CottonCandyBlue', 'Dragon-Golden', 'Cactus-Base', 'Cactus-White', 'Cactus-Desert', 'Cactus-Red', 'Cactus-Shade', 'Cactus-Skeleton', 'Cactus-Zombie', 'Cactus-CottonCandyPink', 'Cactus-CottonCandyBlue', 'Cactus-Golden', 'BearCub-Base', 'BearCub-White', 'BearCub-Desert', 'BearCub-Red', 'BearCub-Shade', 'BearCub-Skeleton', 'BearCub-Zombie', 'BearCub-CottonCandyPink', 'BearCub-CottonCandyBlue', 'BearCub-Golden']; // all Gen1 mounts
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ let mounts = user.items.mounts;
+ let changed = false;
+ for (let a in animals) {
+ if (mounts[animals[a]] === false) {
+ mounts[animals[a]] = null;
+ changed = true;
+ }
+ }
+
+ if (changed) {
+ dbUsers.update(
+ { _id: user._id},
+ {
+ $set: { migration: migrationName,
+ 'items.mounts': mounts,
+ },
+ }
+ );
+ }
+
+ // var set = {'migration': migrationName};
+ // var inc = {'xyz':1, _v:1};
+ // dbUsers.update({_id:user._id}, {$set:set, $inc:inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+ if (user._id === '9') console.warn('lefnire' + ' processed');
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/archive/2015/20150130_birthday_goodies.js b/migrations/archive/2015/20150130_birthday_goodies.js
new file mode 100644
index 0000000000..e9a141c0af
--- /dev/null
+++ b/migrations/archive/2015/20150130_birthday_goodies.js
@@ -0,0 +1,36 @@
+db.users.update(
+ {'items.gear.owned.armor_special_birthday': {$ne: null}},
+ {$set: {'items.gear.owned.armor_special_birthday2015': false}},
+ {multi: 1}
+);
+
+db.users.update(
+ {'items.gear.owned.armor_special_birthday': null},
+ {$set: {'items.gear.owned.armor_special_birthday': false}},
+ {multi: 1}
+);
+
+db.users.update({}, {$inc: {
+ 'items.food.Cake_Skeleton': 1,
+ 'items.food.Cake_Base': 1,
+ 'items.food.Cake_CottonCandyBlue': 1,
+ 'items.food.Cake_CottonCandyPink': 1,
+ 'items.food.Cake_Shade': 1,
+ 'items.food.Cake_White': 1,
+ 'items.food.Cake_Golden': 1,
+ 'items.food.Cake_Zombie': 1,
+ 'items.food.Cake_Desert': 1,
+ 'items.food.Cake_Red': 1,
+}}, {multi: 1});
+
+db.users.update(
+ {'achievements.habitBirthday': true},
+ {$set: {'achievements.habitBirthdays': 1}},
+ {multi: 1}
+);
+
+db.users.update(
+ {},
+ {$inc: {'achievements.habitBirthdays': 1}},
+ {multi: 1}
+);
\ No newline at end of file
diff --git a/migrations/archive/2015/20150131_birthday_goodies_fix_remove_robe.js b/migrations/archive/2015/20150131_birthday_goodies_fix_remove_robe.js
new file mode 100644
index 0000000000..2ed8b2dc34
--- /dev/null
+++ b/migrations/archive/2015/20150131_birthday_goodies_fix_remove_robe.js
@@ -0,0 +1,85 @@
+let migrationName = '20150131_birthday_goodies_fix__one_birthday__1';
+let authorName = 'Alys'; // in case script author needs to know when their ...
+let authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; // ... own data is done
+
+/*
+ * remove new birthday robes and second achievement from people who shouldn't have them
+ */
+
+let dbserver = 'localhost:27017'; // CHANGE THIS FOR PRODUCTION DATABASE
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/habitrpg?auto_reconnect`).collection('users');
+
+// 'auth.timestamps.created':{$gt:new Date('2014-02-01')},
+let query = {
+ 'achievements.habitBirthdays': 1,
+ 'auth.timestamps.loggedin': {$gt: new Date('2014-12-20')},
+};
+
+// '_id': 'c03e41bd-501f-438c-9553-a7afdf52a08c',
+// 'achievements.habitBirthday':{$exists:false},
+// 'items.gear.owned.armor_special_birthday2015':1
+
+let fields = {
+ // 'auth.timestamps.created':1,
+ // 'achievements.habitBirthday':1,
+ // 'achievements.habitBirthdays':1,
+ 'items.gear.owned.armor_special_birthday2015': 1,
+ // 'items.gear.owned.armor_special':1
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ let unset = {'items.gear.owned.armor_special_birthday2015': 1};
+ // var set = {'migration':migrationName, 'achievements.habitBirthdays':1 };
+ // var inc = {'xyz':1, _v:1};
+ dbUsers.update({_id: user._id}, {$unset: unset}); // , $inc:inc});
+ // dbUsers.update({_id:user._id}, {$unset:unset, $set:set});
+ // console.warn(user.auth.timestamps.created);
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+ if (user._id === '9') console.warn('lefnire' + ' processed');
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/archive/2015/20150201_convert_creation_date_from_string_to_object.js b/migrations/archive/2015/20150201_convert_creation_date_from_string_to_object.js
new file mode 100644
index 0000000000..f5c9a87b06
--- /dev/null
+++ b/migrations/archive/2015/20150201_convert_creation_date_from_string_to_object.js
@@ -0,0 +1,119 @@
+let migrationName = '20150201_convert_creation_date_from_string_to_object__no_date_recent_signup';
+// // var migrationName = '20150201_convert_creation_date_from_string_to_object';
+
+let authorName = 'Alys'; // in case script author needs to know when their ...
+let authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; // ... own data is done
+
+/*
+ * For users that have no value for auth.timestamps.created, assign them
+ * a recent value.
+ *
+ * NOTE:
+ * Before this script was used as described above, it was first used to
+ * find all users that have a auth.timestamps.created field that is a string
+ * rather than a date object and set it to be a date object. The code used
+ * for this has been commented out with four slashes: ////
+ *
+ * https://github.com/HabitRPG/habitrpg/issues/4601#issuecomment-72339846
+ */
+
+let dbserver = 'localhost:27017'; // CHANGE THIS FOR PRODUCTION DATABASE
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+let moment = require('moment');
+
+let dbUsers = mongo.db(`${dbserver }/habitrpg?auto_reconnect`).collection('users');
+
+let uuidArrayRecent = [ // recent users with no creation dates
+ '1a0d4b75-73ed-4937-974d-d504d6398884',
+ '1c7ebe27-1250-4f95-ba10-965580adbfd7',
+ '5f972121-4a6d-411c-95e9-7093d3e89b66',
+ 'ae85818a-e336-4ccd-945e-c15cef975102',
+ 'ba273976-d9fc-466c-975f-38559d34a824',
+];
+
+let query = {
+ _id: {$in: uuidArrayRecent},
+ // // 'auth':{$exists:true},
+ // // 'auth.timestamps':{$exists:true},
+ // // 'auth.timestamps.created':{$not: {$lt:new Date('2018-01-01')}}
+};
+
+let fields = {
+ _id: 1,
+ 'auth.timestamps.created': 1,
+};
+// 'achievements.habitBirthdays':1
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ // // var oldDate = user.auth.timestamps.created;
+ // // var newDate = moment(oldDate).toDate();
+ let oldDate = 'none';
+ let newDate = moment('2015-01-11').toDate();
+ console.warn(`${user._id } === ${ oldDate } === ${ newDate}`);
+
+ // // var set = { 'migration': migrationName,
+ // // 'auth.timestamps.created': newDate,
+ // // 'achievements.habitBirthdays': 2,
+ // // 'items.gear.owned.head_special_nye':true,
+ // // 'items.gear.owned.head_special_nye2014':true,
+ // // 'items.gear.owned.armor_special_birthday':true,
+ // // 'items.gear.owned.armor_special_birthday2015':true,
+ // // };
+
+ let set = { migration: migrationName,
+ 'auth.timestamps.created': newDate,
+ 'achievements.habitBirthdays': 1,
+ 'items.gear.owned.armor_special_birthday': true,
+ };
+
+ // var unset = {'items.gear.owned.armor_special_birthday2015': 1};
+ // var inc = {'xyz':1, _v:1};
+ dbUsers.update({_id: user._id}, {$set: set});
+ // dbUsers.update({_id:user._id}, {$unset:unset, $set:set, $inc:inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+ if (user._id === '9') console.warn('lefnire' + ' processed');
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/archive/2015/20150201_recapture_emails_phase_update.js b/migrations/archive/2015/20150201_recapture_emails_phase_update.js
new file mode 100644
index 0000000000..26cf9a25d1
--- /dev/null
+++ b/migrations/archive/2015/20150201_recapture_emails_phase_update.js
@@ -0,0 +1,7 @@
+db.users.update({
+ 'flags.recaptureEmailsPhase': {
+ $gt: 0,
+ },
+}, {$inc: {
+ 'flags.recaptureEmailsPhase': 1,
+}}, {multi: 1});
\ No newline at end of file
diff --git a/migrations/archive/2015/20150218_interactive_tour.js b/migrations/archive/2015/20150218_interactive_tour.js
new file mode 100644
index 0000000000..6223f17d6a
--- /dev/null
+++ b/migrations/archive/2015/20150218_interactive_tour.js
@@ -0,0 +1,10 @@
+db.users.update({}, {$set: {
+ 'flags.tour.intro': -2,
+ // 'flags.tour.classes':-2,
+ 'flags.tour.stats': -2,
+ 'flags.tour.tavern': -2,
+ 'flags.tour.party': -2,
+ 'flags.tour.guilds': -2,
+ 'flags.tour.challenges': -2,
+ 'flags.tour.market': -2,
+}}, {multi: 1});
\ No newline at end of file
diff --git a/migrations/archive/2015/20150224_force_resting_in_inn.js b/migrations/archive/2015/20150224_force_resting_in_inn.js
new file mode 100644
index 0000000000..d148419628
--- /dev/null
+++ b/migrations/archive/2015/20150224_force_resting_in_inn.js
@@ -0,0 +1,71 @@
+let migrationName = '20150224_force_resting_in_inn';
+let authorName = 'Alys'; // in case script author needs to know when their ...
+let authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; // ... own data is done
+
+/*
+ * force all active players to rest in the inn due to massive server fail
+ */
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let dbserver = 'localhost:27017'; // CHANGE THIS FOR PRODUCTION DATABASE
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/habitrpg?auto_reconnect`).collection('users');
+
+let query = {
+ 'auth.timestamps.loggedin': {$gt: new Date('2015-02-22')},
+};
+
+let fields = {
+ 'preferences.sleep': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ let set = {migration: migrationName, 'preferences.sleep': 1 };
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+ if (user._id === '9') console.warn('lefnire' + ' processed');
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/archive/2015/20150310_survey_achievements.js b/migrations/archive/2015/20150310_survey_achievements.js
new file mode 100644
index 0000000000..ea343416d5
--- /dev/null
+++ b/migrations/archive/2015/20150310_survey_achievements.js
@@ -0,0 +1,5 @@
+db.users.update(
+ {'achievements.helpedHabit': true},
+ {$set: {'achievements.habitSurveys': 1}},
+ {multi: 1}
+);
\ No newline at end of file
diff --git a/migrations/20150325_egg_quest.js b/migrations/archive/2015/20150325_egg_quest.js
similarity index 56%
rename from migrations/20150325_egg_quest.js
rename to migrations/archive/2015/20150325_egg_quest.js
index 43ca0ad1b7..d28b7dccea 100644
--- a/migrations/20150325_egg_quest.js
+++ b/migrations/archive/2015/20150325_egg_quest.js
@@ -3,6 +3,6 @@
*/
db.users.update(
{},
- {$inc:{'items.quests.egg':1}},
- {multi:1}
-)
\ No newline at end of file
+ {$inc: {'items.quests.egg': 1}},
+ {multi: 1}
+);
\ No newline at end of file
diff --git a/migrations/archive/2015/20150604_ultimateGearSets.js b/migrations/archive/2015/20150604_ultimateGearSets.js
new file mode 100644
index 0000000000..aa69647666
--- /dev/null
+++ b/migrations/archive/2015/20150604_ultimateGearSets.js
@@ -0,0 +1,141 @@
+// var migrationName = '20150604_ultimateGearSets';
+// var authorName = 'Sabe'; // in case script author needs to know when their ...
+// var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+
+let migrationName = '20150620_ultimateGearSets';
+let authorName = 'Alys'; // in case script author needs to know when their ...
+let authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; // ... own data is done
+
+/*
+ * grant the new ultimateGearSets achievement for existing users' collected equipment
+ *
+ *
+ * Changed by Alys on 20150620 to assign false values to
+ * 'achievements.ultimateGearSets' when true values are not appropriate,
+ * because of https://github.com/HabitRPG/habitrpg/issues/5427
+ *
+ * Minimal changes were made so the code isn't as efficient or clean
+ * as it could be, but it's (hopefully) one-use-only and minimal changes
+ * means minimal new testing.
+ */
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let dbserver = 'localhost:27017'; // FOR TEST DATABASE
+// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379' // FOR PRODUCTION DATABASE
+let dbname = 'habitrpg';
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('users');
+
+let fields = {
+ 'achievements.ultimateGearSets': 1,
+ 'items.gear.owned': 1,
+};
+
+
+// Changes 20150620: All users have to be processed now (non-achievers need
+// false values).
+let query = {
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ let achievements = {};
+ let changeUser = false;
+ // Changes 20150620: 'changeUser' now indicates that the user must have the
+ // Enchanted Armoire unlocked.
+ if (typeof user.items.gear.owned.weapon_wizard_6 !== 'undefined' &&
+ typeof user.items.gear.owned.armor_wizard_5 !== 'undefined' &&
+ typeof user.items.gear.owned.head_wizard_5 !== 'undefined'
+ ) {
+ achievements.wizard = true;
+ changeUser = true;
+ } else {
+ // Changes 20150620: false added for all classes (here and below)
+ achievements.wizard = false;
+ }
+
+ if (typeof user.items.gear.owned.weapon_warrior_6 !== 'undefined' &&
+ typeof user.items.gear.owned.armor_warrior_5 !== 'undefined' &&
+ typeof user.items.gear.owned.head_warrior_5 !== 'undefined' &&
+ typeof user.items.gear.owned.shield_warrior_5 !== 'undefined'
+ ) {
+ achievements.warrior = true;
+ changeUser = true;
+ } else {
+ achievements.warrior = false;
+ }
+
+ if (typeof user.items.gear.owned.weapon_healer_6 !== 'undefined' &&
+ typeof user.items.gear.owned.armor_healer_5 !== 'undefined' &&
+ typeof user.items.gear.owned.head_healer_5 !== 'undefined' &&
+ typeof user.items.gear.owned.shield_healer_5 !== 'undefined'
+ ) {
+ achievements.healer = true;
+ changeUser = true;
+ } else {
+ achievements.healer = false;
+ }
+
+ if (typeof user.items.gear.owned.weapon_rogue_6 !== 'undefined' &&
+ typeof user.items.gear.owned.armor_rogue_5 !== 'undefined' &&
+ typeof user.items.gear.owned.head_rogue_5 !== 'undefined' &&
+ typeof user.items.gear.owned.shield_rogue_6 !== 'undefined'
+ ) {
+ achievements.rogue = true;
+ changeUser = true;
+ } else {
+ achievements.rogue = false;
+ }
+
+ // Changes 20150620: $set is now run for all users.
+ let set = {migration: migrationName, 'achievements.ultimateGearSets': achievements};
+ if (changeUser) { // user has at least one Ultimate Gear achievement
+ set['flags.armoireEnabled'] = true;
+ }
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+ if (user._id === '9') console.warn('lefnire' + ' processed');
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/20150706_orca_mounts.js b/migrations/archive/2015/20150706_orca_mounts.js
similarity index 52%
rename from migrations/20150706_orca_mounts.js
rename to migrations/archive/2015/20150706_orca_mounts.js
index e8b6fe662a..92dc55e77c 100644
--- a/migrations/20150706_orca_mounts.js
+++ b/migrations/archive/2015/20150706_orca_mounts.js
@@ -3,6 +3,6 @@
*/
db.users.update(
{},
- {$set:{'items.mounts.Orca-Base':true}},
- {multi:true}
+ {$set: {'items.mounts.Orca-Base': true}},
+ {multi: true}
);
diff --git a/migrations/archive/2015/20150731_purple_gryphon.js b/migrations/archive/2015/20150731_purple_gryphon.js
new file mode 100644
index 0000000000..e75f8e9c97
--- /dev/null
+++ b/migrations/archive/2015/20150731_purple_gryphon.js
@@ -0,0 +1,5 @@
+db.users.update(
+ {},
+ {$set: {'items.mounts.Gryphon-RoyalPurple': true}},
+ {multi: true}
+);
diff --git a/migrations/archive/2015/20150731_veteran_tiger.js b/migrations/archive/2015/20150731_veteran_tiger.js
new file mode 100644
index 0000000000..1494dd0ad8
--- /dev/null
+++ b/migrations/archive/2015/20150731_veteran_tiger.js
@@ -0,0 +1,5 @@
+db.users.update(
+ {'items.pets.Wolf-Veteran': {$ne: null}},
+ {$set: {'items.pets.Tiger-Veteran': 5}},
+ {multi: true}
+);
diff --git a/migrations/archive/2015/20150731_veteran_wolf.js b/migrations/archive/2015/20150731_veteran_wolf.js
new file mode 100644
index 0000000000..f060100957
--- /dev/null
+++ b/migrations/archive/2015/20150731_veteran_wolf.js
@@ -0,0 +1,7 @@
+// Run after the Veteran Tiger script, not before!
+
+db.users.update(
+ {'items.pets.Wolf-Veteran': {$exists: false}},
+ {$set: {'items.pets.Wolf-Veteran': 5}},
+ {multi: true}
+);
diff --git a/migrations/archive/2015/20150906_groups_fix_leaders.js b/migrations/archive/2015/20150906_groups_fix_leaders.js
new file mode 100644
index 0000000000..252328571d
--- /dev/null
+++ b/migrations/archive/2015/20150906_groups_fix_leaders.js
@@ -0,0 +1,79 @@
+/*
+ * Make sure leaders are existing users
+ */
+
+let mongo = require('mongoskin');
+let async = require('async');
+
+let dbserver = 'url';
+let dbname = 'dbname';
+let countGroups = 0;
+let countUsers = 0;
+
+let db = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`);
+let dbUsers = db.collection('users');
+let dbGroups = db.collection('groups');
+
+console.log('Begins work on db');
+
+function findGroups (gt) {
+ let query = {};
+ if (gt) query._id = {$gt: gt};
+
+ console.log(query);
+
+ dbGroups.find(query, {
+ fields: {_id: 1, members: 1, leader: 1},
+ limit: 10000,
+ sort: {
+ _id: 1,
+ },
+ }).toArray(function (err, groups) {
+ if (err) throw err;
+
+ let lastGroup = null;
+ if (groups.length === 10000) {
+ lastGroup = groups[groups.length - 1];
+ }
+
+ async.eachLimit(groups, 30, function (group, cb1) {
+ countGroups++;
+ console.log('Group: ', countGroups, group._id);
+
+ let members = group.members;
+
+ dbUsers.findOne({_id: group.leader}, {fields: {_id: 1}}, function (err, user) {
+ if (err) return cb1(err);
+
+ // If leader has deleted account
+ if (!user && group._id !== 'habitrpg' && members && members[0]) {
+ dbGroups.update({
+ _id: group._id,
+ }, {
+ $set: {
+ // Set first user as new leader
+ leader: members[0],
+ },
+ }, {
+ multi: false,
+ }, function (err, res) {
+ if (err) return cb1(err);
+
+ console.log('Updated: ', res);
+ return cb1();
+ });
+ } else {
+ return cb1();
+ }
+ });
+ }, function (err) {
+ if (err) throw err;
+
+ if (lastGroup && lastGroup._id) {
+ findGroups(lastGroup._id);
+ }
+ });
+ });
+}
+
+findGroups();
\ No newline at end of file
diff --git a/migrations/archive/2015/20150906_groups_remove_deleted_users.js b/migrations/archive/2015/20150906_groups_remove_deleted_users.js
new file mode 100644
index 0000000000..d04b91341b
--- /dev/null
+++ b/migrations/archive/2015/20150906_groups_remove_deleted_users.js
@@ -0,0 +1,86 @@
+/*
+ * Remove deleted accounts from groups
+ */
+
+let mongo = require('mongoskin');
+let async = require('async');
+
+let dbserver = 'url';
+let dbname = 'dbname';
+let countGroups = 0;
+let countUsers = 0;
+
+let db = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`);
+let dbUsers = db.collection('users');
+let dbGroups = db.collection('groups');
+
+console.log('Begins work on db');
+
+function findGroups (gt) {
+ let query = {};
+ if (gt) query._id = {$gt: gt};
+
+ console.log(query);
+
+ dbGroups.find(query, {
+ fields: {_id: 1, members: 1},
+ limit: 10000,
+ sort: {
+ _id: 1,
+ },
+ }).toArray(function (err, groups) {
+ if (err) throw err;
+
+ let lastGroup = null;
+ if (groups.length === 10000) {
+ lastGroup = groups[groups.length - 1];
+ }
+
+ async.eachLimit(groups, 3, function (group, cb1) {
+ countGroups++;
+ console.log('Group: ', countGroups, group._id);
+
+ let members = group.members;
+
+ // Remove users who deleted their account
+ async.eachLimit(members, 15, function (member, cb2) {
+ dbUsers.findOne({_id: member}, {fields: {_id: 1}}, function (err, user) {
+ if (err) return cb2(err);
+
+ if (!user) {
+ countUsers++;
+ console.log('User removed n. ', countUsers, 'user id ', member, 'group id ', group._id);
+
+ dbGroups.update({
+ _id: group._id,
+ }, {
+ $pull: {members: member},
+ $inc: {memberCount: -1},
+ }, {
+ multi: false,
+ }, function (err, res) {
+ if (err) return cb2(err);
+
+ console.log('Updated: ', res);
+ return cb2();
+ });
+ } else {
+ cb2();
+ }
+ });
+ }, function (err) {
+ if (err) return cb1(err);
+
+ cb1();
+ });
+ }, function (err) {
+ if (err) throw err;
+
+ if (lastGroup && lastGroup._id) {
+ findGroups(lastGroup._id);
+ }
+ });
+ });
+}
+
+findGroups();
\ No newline at end of file
diff --git a/migrations/archive/2015/20150906_groups_remove_empty.js b/migrations/archive/2015/20150906_groups_remove_empty.js
new file mode 100644
index 0000000000..b82313e014
--- /dev/null
+++ b/migrations/archive/2015/20150906_groups_remove_empty.js
@@ -0,0 +1,21 @@
+/*
+ * Remove empty private groups
+ */
+
+let mongo = require('mongoskin');
+
+let dbserver = 'url';
+let dbname = 'name';
+
+let db = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`);
+let dbGroups = db.collection('groups');
+
+console.log('Begins work on db');
+
+dbGroups.findEach({
+ memberCount: 0,
+}, {_id: 1}, function (err, res) {
+ if (err) throw err;
+
+ console.log(res);
+});
\ No newline at end of file
diff --git a/migrations/archive/2015/20150906_sync_groups_with_firebase.js b/migrations/archive/2015/20150906_sync_groups_with_firebase.js
new file mode 100644
index 0000000000..9b17d02a09
--- /dev/null
+++ b/migrations/archive/2015/20150906_sync_groups_with_firebase.js
@@ -0,0 +1,43 @@
+/*
+ * Sync groups with Firebase
+ */
+
+let mongo = require('mongoskin');
+let Firebase = require('Firebase');
+
+let dbserver = 'mongodb://url';
+let dbname = 'db';
+
+let db = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`);
+let dbGroups = db.collection('groups');
+let countGroups = 0;
+
+let firebaseRef = new Firebase('https://' + 'firebase-app' + '.firebaseio.com');
+
+// TODO handle sync errors with firebase?
+firebaseRef.authWithCustomToken('firebase-secret', function (err, authData) {
+ if (err) throw new Error('Impossible to authenticate Firebase');
+
+ console.log('Firebase connected, begins work on db');
+
+ dbGroups.findEach({}, {_id: 1, members: 1}, {batchSize: 100}, function (err, group) {
+ if (err) throw err;
+ if (group._id !== 'habitrpg') return;
+
+ countGroups++;
+ console.log('Group: ', countGroups);
+
+ firebaseRef.child(`rooms/${ group._id}`)
+ .set({
+ name: group.name,
+ });
+
+ group.members.forEach(function (member) {
+ firebaseRef.child(`members/${ group._id }/${ userId}`)
+ .set(true);
+
+ firebaseRef.child(`users/${ member }/rooms/${ group._id}`)
+ .set(true);
+ });
+ });
+});
\ No newline at end of file
diff --git a/migrations/archive/2015/20151013_jackolanterns.js b/migrations/archive/2015/20151013_jackolanterns.js
new file mode 100644
index 0000000000..358678f2fa
--- /dev/null
+++ b/migrations/archive/2015/20151013_jackolanterns.js
@@ -0,0 +1,74 @@
+let migrationName = '20151013_jackolanterns.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Jack-O'-Lantern mounts to users who already have the pet version, award pet if they don't
+ */
+
+let dbserver = 'localhost:27017'; // FOR TEST DATABASE
+// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
+let dbname = 'habitrpg';
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'items.pets.JackOLantern-Base': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+ if (user.items.pets['JackOLantern-Base']) {
+ set = {migration: migrationName, 'items.mounts.JackOLantern-Base': true};
+ } else {
+ set = {migration: migrationName, 'items.pets.JackOLantern-Base': 5};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/archive/2015/20151021_usernames_emails_lowercase.js b/migrations/archive/2015/20151021_usernames_emails_lowercase.js
new file mode 100644
index 0000000000..ec46c5642b
--- /dev/null
+++ b/migrations/archive/2015/20151021_usernames_emails_lowercase.js
@@ -0,0 +1,63 @@
+/*
+ * Migrate email to lowerCase version and add auth.local.lowerCaseUsername email
+ */
+
+let mongo = require('mongoskin');
+let async = require('async');
+
+let dbserver = 'url';
+let dbname = 'dbname';
+let countUsers = 0;
+
+let db = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`);
+let dbUsers = db.collection('users');
+
+console.log('Begins work on db');
+
+function findUsers (gt) {
+ let query = {};
+ if (gt) query._id = {$gt: gt};
+
+ console.log(query);
+
+ dbUsers.find(query, {
+ fields: {_id: 1, auth: 1},
+ limit: 10000,
+ sort: {
+ _id: 1,
+ },
+ }).toArray(function (err, users) {
+ if (err) throw err;
+
+ let lastUser = null;
+ if (users.length === 10000) {
+ lastUser = users[users.length - 1];
+ }
+
+ async.eachLimit(users, 20, function (user, cb) {
+ countUsers++;
+ console.log('User: ', countUsers, user._id);
+
+ let update = {
+ $set: {},
+ };
+
+ if (user.auth && user.auth.local) {
+ if (user.auth.local.username) update.$set['auth.local.lowerCaseUsername'] = user.auth.local.username.toLowerCase();
+ if (user.auth.local.email) update.$set['auth.local.email'] = user.auth.local.email.toLowerCase();
+ }
+
+ dbUsers.update({
+ _id: user._id,
+ }, update, cb);
+ }, function (err) {
+ if (err) throw err;
+
+ if (lastUser && lastUser._id) {
+ findUsers(lastUser._id);
+ }
+ });
+ });
+}
+
+findUsers();
diff --git a/migrations/archive/2015/20151105_tutorial_flags.js b/migrations/archive/2015/20151105_tutorial_flags.js
new file mode 100644
index 0000000000..7023af9fae
--- /dev/null
+++ b/migrations/archive/2015/20151105_tutorial_flags.js
@@ -0,0 +1,70 @@
+let migrationName = '20151105_tutorial_flags_v1';
+let authorName = 'Alys'; // in case script author needs to know when their ...
+let authorUuid = 'd904bd62-da08-416b-a816-ba797c9ee265'; // ... own data is done
+
+/*
+ * set flags.tutorial.ios and flags.tutorial.main flags to true in preparation
+ * for the release of a new iOS tutorial
+ *
+ */
+
+// var dbserver = 'localhost:27017' // FOR TEST DATABASE
+let dbserver = 'alys:@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
+let dbname = 'habitrpg';
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('users');
+
+let fields = {
+};
+
+
+let query = {
+ 'auth.timestamps.loggedin': {$gt: new Date('2015-10-20')},
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ // var set = {'migration':migrationName, 'flags.tutorial.ios':true, 'flags.tutorial.main':true };
+ let set = {migration: migrationName, 'flags.tutorial.ios': {} };
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/archive/2015/20151116_costume_contest_award.js b/migrations/archive/2015/20151116_costume_contest_award.js
new file mode 100644
index 0000000000..556697f6ba
--- /dev/null
+++ b/migrations/archive/2015/20151116_costume_contest_award.js
@@ -0,0 +1,109 @@
+let migrationName = '20151116_costume_contest.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Costume Contest achievement to 2015 winners
+ */
+
+let dbserver = 'localhost:27017'; // FOR TEST DATABASE
+// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
+let dbname = 'habitrpg';
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ _id: {
+ $in: [
+ 'e411dab3-a4ca-414d-bdbd-b6940b3bdeb3',
+ '35ced5cc-c33a-45c8-93dc-16000ee66fde',
+ 'ab3f0549-7247-4fd5-975b-efcff98c79c3',
+ 'b1261fd2-eb25-46b4-97a9-ae7a0dc8a131',
+ '1f27893f-3808-4724-9725-f46dab93faca',
+ '216a0c23-6afd-4a5e-b434-d386a10862a2',
+ '2d6ef231-50b4-4a22-90e7-45eb97147a2c',
+ '98b8cf4f-89bd-4b0a-988d-02629a217232',
+ 'c5183dfa-c741-43ce-935e-c6d89b41a030',
+ '262a7afb-6b57-4d81-88e0-80d2e9f6cbdc',
+ '33991e0a-de55-4986-ac81-af78491a84de',
+ '7adf6ada-3c05-4054-b5df-fa7d49d3b9eb',
+ '235a1cbd-48c5-41b1-afb4-59d2f8645c57',
+ 'b7617a61-188b-4332-bf4d-32268fa77f2b',
+ '672c1ce0-9f47-44f0-a3f3-8cc3c6c5a9cb',
+ 'd0a3217a-7b92-48d6-b39a-b1b1be96702e',
+ '5ef910dc-1d22-47d9-aa38-a60132c60679',
+ '370a44c8-e94a-4a2c-91f2-33166926db1f',
+ '1b0b3ef3-28bd-4046-a49b-e1c83e281baf',
+ '75b93321-66b9-49bd-9076-052499c1d2bf',
+ 'd97516e4-81d0-4f60-bf03-95f7330925ab',
+ '3e13cc79-de38-420d-822e-9e9da309ce6b',
+ '0e471dc1-ecb0-4388-a891-b873a237d2cf',
+ 'ca3da398-4f73-4304-b838-af3669ed4cbb',
+ '44cdf105-8bda-4197-9d1a-1bcb83b4dc84',
+ '5419830c-b837-4573-ae82-4718ab95b7f1',
+ 'ac6fbe37-b0dc-40d8-ba14-77dde66fbfa8',
+ '8789ba18-a498-46b9-b367-3b929a0acb94',
+ '52fce1a9-9b0a-4e26-95dc-adc12f52e752',
+ '21bf71ac-399c-470b-abe0-cc49a03b6a8b',
+ 'f1618ce2-552e-4f23-bc76-e73d63ebedd0',
+ '4cc0c749-d943-4090-b529-42bc665b7244',
+ 'e259682e-cb5c-4d94-b472-ceedc66d7484',
+ 'fa197a4b-e065-4551-803a-c8a5b9970f9d',
+ ],
+ },
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {migration: migrationName};
+ let inc = {'achievements.costumeContests': 1};
+
+ dbUsers.update({_id: user._id}, {$set: set});
+ dbUsers.update({_id: user._id}, {$inc: inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/archive/2015/20151116_costume_contest_to_number.js b/migrations/archive/2015/20151116_costume_contest_to_number.js
new file mode 100644
index 0000000000..68660941f3
--- /dev/null
+++ b/migrations/archive/2015/20151116_costume_contest_to_number.js
@@ -0,0 +1,71 @@
+let migrationName = '20151116_costume_contest_to_number.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Change Costume Contest achievement from Boolean to Number, so people can win repeatedly
+ */
+
+let dbserver = 'localhost:27017'; // FOR TEST DATABASE
+// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
+let dbname = 'habitrpg';
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ 'achievements.costumeContest': true,
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'achievements.costumeContest': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {'achievements.costumeContests': 1};
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/archive/2015/20151125_turkey_ladder.js b/migrations/archive/2015/20151125_turkey_ladder.js
new file mode 100644
index 0000000000..6328030f25
--- /dev/null
+++ b/migrations/archive/2015/20151125_turkey_ladder.js
@@ -0,0 +1,78 @@
+let migrationName = '20151125_turkey_ladder.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Gilded Turkey pet to Turkey mount owners, Turkey Mount if they only have Turkey Pet,
+ * and Turkey Pet otherwise
+ */
+
+let dbserver = 'localhost:27017'; // FOR TEST DATABASE
+// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
+let dbname = 'habitrpg';
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'items.pets.Turkey-Base': 1,
+ 'items.mounts.Turkey-Base': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+ if (user.items.mounts['Turkey-Base']) {
+ set = {migration: migrationName, 'items.pets.Turkey-Gilded': 5};
+ } else if (user.items.pets['Turkey-Base']) {
+ set = {migration: migrationName, 'items.mounts.Turkey-Base': true};
+ } else {
+ set = {migration: migrationName, 'items.pets.Turkey-Base': 5};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/archive/2015/20151229_new_years_hats.js b/migrations/archive/2015/20151229_new_years_hats.js
new file mode 100644
index 0000000000..74788369a1
--- /dev/null
+++ b/migrations/archive/2015/20151229_new_years_hats.js
@@ -0,0 +1,77 @@
+let migrationName = '20151229_new_years_hats.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award 2015 party hat if user has 2014 hat, 2014 hat if they have the 2013 hat,
+ * and 2013 hat otherwise
+ */
+
+let dbserver = 'localhost:27017'; // FOR TEST DATABASE
+// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
+let dbname = 'habitrpg';
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+let dbUsers = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'items.gear.owned': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+ if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('head_special_nye2014')) {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye2015': false};
+ } else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('head_special_nye')) {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye2014': false};
+ } else {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye': false};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/20160111_challenges_condense_same_day_history_entries.js b/migrations/archive/2016/20160111_challenges_condense_same_day_history_entries.js
similarity index 56%
rename from migrations/20160111_challenges_condense_same_day_history_entries.js
rename to migrations/archive/2016/20160111_challenges_condense_same_day_history_entries.js
index 69411e8530..76a7e14dfb 100644
--- a/migrations/20160111_challenges_condense_same_day_history_entries.js
+++ b/migrations/archive/2016/20160111_challenges_condense_same_day_history_entries.js
@@ -1,11 +1,11 @@
-var migrationName = '20160111_challenges_condense_same_day_history_entries.js';
+let migrationName = '20160111_challenges_condense_same_day_history_entries.js';
/*
* Compress challenges tasks history entries so that only one entry per day is kept
*/
-var dbserver = '';
-var dbname = '';
+let dbserver = '';
+let dbname = '';
// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
// We've now upgraded to lodash v4 but the code used in this migration has not been
@@ -13,34 +13,34 @@ var dbname = '';
// be checked for compatibility against the v4 changelog and changed if necessary.
// https://github.com/lodash/lodash/wiki/Changelog#v400
-var mongo = require('mongoskin');
-var _ = require('lodash');
-var moment = require('moment');
+let mongo = require('mongoskin');
+let _ = require('lodash');
+let moment = require('moment');
-var dbChallenges = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('challenges');
+let dbChallenges = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('challenges');
// Find all challenges
-var query = {
+let query = {
};
// we only want habits and dailies (rewards and todos don't have history)
-var fields = {
- 'habits': 1,
- 'dailys': 1,
+let fields = {
+ habits: 1,
+ dailys: 1,
};
function compressEntries (history) {
return _.chain(history)
- .filter(function(entry) {
- return !!entry;
+ .filter(function (entry) {
+ return Boolean(entry);
})
- .groupBy(function(entry) { // group by day
+ .groupBy(function (entry) { // group by day
return moment(entry.date).format('YYYYMMDD');
})
- .sortBy(function(entry, key) { // sort by date and transform back to array of array of entries
+ .sortBy(function (entry, key) { // sort by date and transform back to array of array of entries
return key;
})
- .map(function(entries) { // aggregate the value
+ .map(function (entries) { // aggregate the value
return {
date: Number(entries[0].date),
value: _.reduce(entries, function (previousValue, entry) {
@@ -49,14 +49,16 @@ function compressEntries (history) {
};
})
.value();
-};
+}
console.warn('Updating challenges...');
-var progressCount = 100;
-var count = 0;
+let progressCount = 100;
+let count = 0;
-dbChallenges.findEach(query, fields, {batchSize: 250}, function(err, challenge) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
+dbChallenges.findEach(query, fields, {batchSize: 250}, function (err, challenge) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
if (!challenge) {
console.warn('All appropriate challenges found.');
return displayData();
@@ -64,49 +66,54 @@ dbChallenges.findEach(query, fields, {batchSize: 250}, function(err, challenge)
count++;
// specify challenge data to change:
- var set = {};
+ let set = {};
if (challenge.habits && challenge.habits.length > 0) {
- challenge.habits.forEach(function(habit, index) {
+ challenge.habits.forEach(function (habit, index) {
if (habit.history && habit.history.length > 1) {
- var originalL = habit.history.length;
+ let originalL = habit.history.length;
habit.history = compressEntries(habit.history);
if (originalL > 1000) console.log(originalL, habit.history.length);
- set['habits.' + index + '.history'] = habit.history;
+ set[`habits.${ index }.history`] = habit.history;
}
});
}
if (challenge.dailys && challenge.dailys.length > 0) {
- challenge.dailys.forEach(function(daily, index) {
+ challenge.dailys.forEach(function (daily, index) {
if (daily.history && daily.history.length > 1) {
- var originalL = daily.history.length;
+ let originalL = daily.history.length;
daily.history = compressEntries(daily.history);
if (originalL > 1000) console.log(originalL, daily.history.length);
- set['dailys.' + index + '.history'] = daily.history;
+ set[`dailys.${ index }.history`] = daily.history;
}
});
}
- dbChallenges.update({_id: challenge._id}, {$set: set}, function(err) {
- if(err) throw err;
+ dbChallenges.update({_id: challenge._id}, {$set: set}, function (err) {
+ if (err) throw err;
console.log('updated a challenge');
});
- if (count%progressCount == 0) console.warn(count + ' ' + challenge._id);
+ if (count % progressCount === 0) console.warn(`${count } ${ challenge._id}`);
});
-function displayData() {
- console.warn('\n' + count + ' challenges processed\n');
+function displayData () {
+ console.warn(`\n${ count } challenges processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/20160129_habit_birthday.js b/migrations/archive/2016/20160129_habit_birthday.js
similarity index 50%
rename from migrations/20160129_habit_birthday.js
rename to migrations/archive/2016/20160129_habit_birthday.js
index f4be13c50e..25e50ea0dd 100644
--- a/migrations/20160129_habit_birthday.js
+++ b/migrations/archive/2016/20160129_habit_birthday.js
@@ -1,15 +1,15 @@
-var migrationName = '20160129_habit_birthday.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+let migrationName = '20160129_habit_birthday.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* Award 2016 party robes if user has 2015 robes, 2015 robes if they have the 2014 robes,
* and 2014 robes otherwise
*/
-var dbserver = 'localhost:27017'; // FOR TEST DATABASE
+let dbserver = 'localhost:27017'; // FOR TEST DATABASE
// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
-var dbname = 'habitrpg';
+let dbname = 'habitrpg';
// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
// We've now upgraded to lodash v4 but the code used in this migration has not been
@@ -17,25 +17,27 @@ var dbname = 'habitrpg';
// be checked for compatibility against the v4 changelog and changed if necessary.
// https://github.com/lodash/lodash/wiki/Changelog#v400
-var mongo = require('mongoskin');
-var _ = require('lodash');
+let mongo = require('mongoskin');
+let _ = require('lodash');
-var dbUsers = mongo.db(dbserver + '/' + dbname + '?auto_reconnect').collection('users');
+let dbUsers = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('users');
// specify a query to limit the affected users (empty for all users):
-var query = {
+let query = {
};
// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
-var fields = {
+let fields = {
'items.gear.owned': 1,
};
console.warn('Updating users...');
-var progressCount = 1000;
-var count = 0;
-dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
- if (err) { return exiting(1, 'ERROR! ' + err); }
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
if (!user) {
console.warn('All appropriate users found and modified.');
return displayData();
@@ -43,7 +45,7 @@ dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
count++;
// specify user data to change:
- var set = {'migration':migrationName};
+ let set = {migration: migrationName};
if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday2015')) {
set['items.gear.owned.armor_special_birthday2016'] = false;
} else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday')) {
@@ -52,40 +54,45 @@ dbUsers.findEach(query, fields, {batchSize:250}, function(err, user) {
set['items.gear.owned.armor_special_birthday'] = false;
}
- var inc = {
- 'items.food.Cake_Skeleton':1,
- 'items.food.Cake_Base':1,
- 'items.food.Cake_CottonCandyBlue':1,
- 'items.food.Cake_CottonCandyPink':1,
- 'items.food.Cake_Shade':1,
- 'items.food.Cake_White':1,
- 'items.food.Cake_Golden':1,
- 'items.food.Cake_Zombie':1,
- 'items.food.Cake_Desert':1,
- 'items.food.Cake_Red':1,
- 'achievements.habitBirthdays':1
+ let inc = {
+ 'items.food.Cake_Skeleton': 1,
+ 'items.food.Cake_Base': 1,
+ 'items.food.Cake_CottonCandyBlue': 1,
+ 'items.food.Cake_CottonCandyPink': 1,
+ 'items.food.Cake_Shade': 1,
+ 'items.food.Cake_White': 1,
+ 'items.food.Cake_Golden': 1,
+ 'items.food.Cake_Zombie': 1,
+ 'items.food.Cake_Desert': 1,
+ 'items.food.Cake_Red': 1,
+ 'achievements.habitBirthdays': 1,
};
- dbUsers.update({_id:user._id}, {$set:set});
- dbUsers.update({_id:user._id}, {$inc:inc});
+ dbUsers.update({_id: user._id}, {$set: set});
+ dbUsers.update({_id: user._id}, {$inc: inc});
- if (count%progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
});
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
-}
+}
diff --git a/migrations/archive/2016/20160521_veteran_ladder.js b/migrations/archive/2016/20160521_veteran_ladder.js
new file mode 100644
index 0000000000..cc538faf6d
--- /dev/null
+++ b/migrations/archive/2016/20160521_veteran_ladder.js
@@ -0,0 +1,89 @@
+let migrationName = '20160521_veteran_ladder.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Gilded Turkey pet to Turkey mount owners, Turkey Mount if they only have Turkey Pet,
+ * and Turkey Pet otherwise
+ */
+
+let dbserver = 'localhost:27017'; // FOR TEST DATABASE
+// var dbserver = 'username:password@ds031379-a0.mongolab.com:31379'; // FOR PRODUCTION DATABASE
+let dbname = 'habitrpg';
+
+let mongo = require('mongoskin');
+let _ = require('lodash');
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let dbUsers = mongo.db(`${dbserver }/${ dbname }?auto_reconnect`).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ 'auth.timestamps.loggedin': {$gt: new Date('2016-05-01')}, // remove when running migration a second time
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ migration: 1,
+ 'items.pets.Wolf-Veteran': 1,
+ 'items.pets.Tiger-Veteran': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ return displayData();
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+ if (user.migration !== migrationName) {
+ if (user.items.pets['Tiger-Veteran']) {
+ set = {migration: migrationName, 'items.pets.Lion-Veteran': 5};
+ } else if (user.items.pets['Wolf-Veteran']) {
+ set = {migration: migrationName, 'items.pets.Tiger-Veteran': 5};
+ } else {
+ set = {migration: migrationName, 'items.pets.Wolf-Veteran': 5};
+ }
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/archive/2016/20160527_fix_empty_checklist_id.js b/migrations/archive/2016/20160527_fix_empty_checklist_id.js
new file mode 100644
index 0000000000..eacb7498de
--- /dev/null
+++ b/migrations/archive/2016/20160527_fix_empty_checklist_id.js
@@ -0,0 +1,91 @@
+let uuid = require('uuid').v4;
+let mongo = require('mongodb').MongoClient;
+let _ = require('lodash');
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+let taskIds = require('checklists-no-id.json').map(function (obj) {
+ return obj._id;
+});
+
+// Fix empty task.checklistt.id
+
+let progressCount = 100;
+let count = 0;
+
+function displayData () {
+ console.warn(`\n${ count } tasks processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+}
+
+mongo.connect('db url')
+ .then(function (db) {
+ let dbTasks = db.collection('tasks');
+
+ // specify a query to limit the affected tasks (empty for all tasks):
+ let query = {
+ _id: { $in: taskIds },
+ };
+
+ // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ let fields = {
+ checklist: 1,
+ };
+
+ console.warn('Updating tasks...');
+
+ dbTasks.find(query, fields, {batchSize: 250}).toArray(function (err, tasks) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+
+ tasks.forEach(function (task) {
+ let checklist = task.checklist || [];
+ checklist.forEach(function (item) {
+ if (!item.id || item.id === '') {
+ item.id = uuid();
+ }
+ });
+
+ // specify user data to change:
+ let set = {
+ checklist,
+ };
+ // console.log(set);
+
+ dbTasks.update({_id: task._id}, {$set: set}, function (err, res) {
+ if (err) console.error('Error while updating', err);
+ });
+
+ count++;
+ if (count % progressCount === 0) console.warn(`${count } ${ task._id}`);
+ });
+
+ if (count === tasks.length) {
+ console.warn('All appropriate tasks found and modified.');
+ return displayData();
+ }
+ });
+ })
+ .catch(function (err) {
+ throw err;
+ });
\ No newline at end of file
diff --git a/migrations/20160529_fix_challenges.js b/migrations/archive/2016/20160529_fix_challenges.js
similarity index 87%
rename from migrations/20160529_fix_challenges.js
rename to migrations/archive/2016/20160529_fix_challenges.js
index 51c31ee0c9..035a5c30ed 100644
--- a/migrations/20160529_fix_challenges.js
+++ b/migrations/archive/2016/20160529_fix_challenges.js
@@ -1,6 +1,6 @@
'use strict';
-/****************************************
+/** **************************************
* Reason: After the api v3 maintenance migration, some challenge tasks
* became unlinked from their challenges. We're still not sure why,
* but this re-links them
@@ -33,7 +33,7 @@ const TASK_UPDATE_DATA = require('../challenge_fixes.json');
let db;
let count = 0;
-var timer = setInterval(function(){
+let timer = setInterval(function () {
count++;
if (count % 30 === 0) {
logger.warn('Process has been running for', count / 60, 'minutes');
@@ -48,7 +48,7 @@ connectToDb()
// .then(correctUserTasks)
.then(updateTasks)
.then(closeDb)
- .catch(reportError)
+ .catch(reportError);
function connectToDb () {
return new Promise((resolve, reject) => {
@@ -81,11 +81,11 @@ function findBrokenChallengeTasks () {
logger.info('Looking for broken tasks...');
// return db.collection('tasks').find({'challenge.broken': 'CHALLENGE_TASK_NOT_FOUND'}).toArray()
- return db.collection('tasks').find({'_id': { '$in': TASK_IDS }}).toArray()
- .then((tasks) => {
- logger.success('Found', tasks.length, 'broken tasks.');
- return Promise.resolve(tasks);
- });
+ return db.collection('tasks').find({_id: { $in: TASK_IDS }}).toArray()
+ .then((tasks) => {
+ logger.success('Found', tasks.length, 'broken tasks.');
+ return Promise.resolve(tasks);
+ });
}
function getDataFromTasks (tasks) {
@@ -114,12 +114,12 @@ function getDataFromTasks (tasks) {
function getUserChallenges (data) {
logger.info('Collecting user challenges...');
- return db.collection('users').find({_id: { '$in': data.users }}, {challenges: 1}).toArray().then((docs) => {
+ return db.collection('users').find({_id: { $in: data.users }}, {challenges: 1}).toArray().then((docs) => {
logger.success('Found', docs.length, 'users from broken challenge tasks.');
let challenges = [];
docs.forEach((user) => {
- challenges.push.apply(challenges, user.challenges);
+ challenges.push(...user.challenges);
});
challenges = unique(challenges);
@@ -146,7 +146,7 @@ function getUserChallenges (data) {
function getChallengeTasks (data) {
logger.info('Looking up original challenge tasks...');
- return db.collection('tasks').find({'userId': null, 'challenge.id': { '$in': data.challenges }}, [ 'text', 'type', 'challenge', '_legacyId' ]).toArray().then((docs) => {
+ return db.collection('tasks').find({userId: null, 'challenge.id': { $in: data.challenges }}, ['text', 'type', 'challenge', '_legacyId']).toArray().then((docs) => {
logger.success('Found', docs.length, 'challenge tasks.');
let challengeTasks = {};
@@ -190,14 +190,14 @@ function correctUserTasks (data) {
let foundTask = userTasks.find((task) => {
return TASK_IDS.indexOf(task._id) > -1 && task._legacyId === legacyId && task.type === type && task.text === text;
- })
+ });
if (foundTask && !tasksToUpdate[foundTask._id]) {
tasksToUpdate[foundTask._id] = {
id: chal,
broken: null, // NOTE: this caused a lot of problems
taskId,
- }
+ };
} else if (foundTask && taskId !== tasksToUpdate[foundTask._id].taskId) {
logger.error('Duplicate task found, id:', foundTask._id);
duplicateTasks[foundTask._id] = duplicateTasks[foundTask._id] || [tasksToUpdate[foundTask._id].taskId];
@@ -236,12 +236,12 @@ function updateTasks (data) {
logger.info(promiseCount, 'updates started');
}
- return db.collection('tasks').findOneAndUpdate({_id: taskId, 'challenge.broken': 'CHALLENGE_TASK_NOT_FOUND'}, {$set: {challenge: tasksToUpdate[taskId]}}, {returnOriginal: false})
+ return db.collection('tasks').findOneAndUpdate({_id: taskId, 'challenge.broken': 'CHALLENGE_TASK_NOT_FOUND'}, {$set: {challenge: tasksToUpdate[taskId]}}, {returnOriginal: false});
}
return Promise.map(taskIdsToUpdate, queue.wrap(updateTaskById)).then((result) => {
- let updates = result.filter(res => res.lastErrorObject.updatedExisting)
- let failures = result.filter(res => !res.lastErrorObject.updatedExisting);
+ let updates = result.filter(res => res && res.lastErrorObject.updatedExisting);
+ let failures = result.filter(res => res && !res.lastErrorObject.updatedExisting);
logger.success(updates.length, 'tasks have been fixed');
@@ -256,9 +256,9 @@ function updateTasks (data) {
}
function closeDb (data) {
- logger.success('The process took ' + count + ' seconds');
+ logger.success(`The process took ${ count } seconds`);
- clearInterval(timer)
+ clearInterval(timer);
db.close();
}
diff --git a/migrations/20160530_fix_tasks_from_null_value_in_challenges_broken.js b/migrations/archive/2016/20160530_fix_tasks_from_null_value_in_challenges_broken.js
similarity index 88%
rename from migrations/20160530_fix_tasks_from_null_value_in_challenges_broken.js
rename to migrations/archive/2016/20160530_fix_tasks_from_null_value_in_challenges_broken.js
index f5ae6c9925..e010e34b35 100644
--- a/migrations/20160530_fix_tasks_from_null_value_in_challenges_broken.js
+++ b/migrations/archive/2016/20160530_fix_tasks_from_null_value_in_challenges_broken.js
@@ -1,6 +1,6 @@
'use strict';
-/****************************************
+/** **************************************
* Reason: After running the 20160529_fix_challenges.js migration
* challenge.broken was set to null, which is not a valid value
* which caused cron to fail and run many times, messing up daily values,
@@ -28,7 +28,7 @@ const NEW_DB_URI = 'mongodb://username:password@dsXXXXXX-a0.mlab.com:XXXXX,dsXXX
let oldDb, newDb, OldTasks, NewTasks, OldUsers, NewUsers;
let count = 0;
-var timer = setInterval(function(){
+let timer = setInterval(function () {
count++;
if (count % 30 === 0) {
logger.warn('Process has been running for', count / 60, 'minutes');
@@ -46,7 +46,7 @@ Promise.all([
.then(getValuesOfOldTasksFromBackup)
.then(updateNewTasks)
.then(closeDb)
- .catch(reportError)
+ .catch(reportError);
function connectToDb (dbUri, type) {
return new Promise((resolve, reject) => {
@@ -92,14 +92,12 @@ function getAffectedUsersEmail () {
users.forEach((user) => {
if (user.preferences.emailNotifications.newPM && user.inbox.optOut !== true) {
pmsWithEmail.push(user._id);
+ } else if (user.auth && user.auth.local && user.auth.local.email) {
+ emails.push(user.auth.local.email);
+ } else if (user.auth && user.auth.facebook && user.auth.facebook.email) {
+ emails.push(user.auth.facebook.email);
} else {
- if (user.auth && user.auth.local && user.auth.local.email) {
- emails.push(user.auth.local.email);
- } else if (user.auth && user.auth.facebook && user.auth.facebook.email) {
- emails.push(user.auth.facebook.email);
- } else {
- missing.push(user._id);
- }
+ missing.push(user._id);
}
});
@@ -156,7 +154,9 @@ function determineIfTasksNeedAdjusting (tasks) {
let prodTask = tasks[i];
let backupTask = backupTasksAsObject[prodTask._id];
- if (!backupTask) { continue; }
+ if (!backupTask) {
+ continue;
+ }
let historyDifference = prodTask.history.length - backupTask.history.length;
@@ -194,16 +194,16 @@ function updateNewTasks (oldTasks) {
function updateTaskById (task) {
promiseCount++;
- if (promiseCount % 100=== 0) {
+ if (promiseCount % 100 === 0) {
logger.info(promiseCount, 'updates started');
}
- return NewTasks.findOneAndUpdate({_id: task._id}, {$set: {value: task.value, streak: task.streak, history: task.history}}, {returnOriginal: false})
+ return NewTasks.findOneAndUpdate({_id: task._id}, {$set: {value: task.value, streak: task.streak, history: task.history}}, {returnOriginal: false});
}
return Promise.map(oldTasks, queue.wrap(updateTaskById)).then((result) => {
- let updates = result.filter(res => res.lastErrorObject && res.lastErrorObject.updatedExisting)
- let failures = result.filter(res => !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
+ let updates = result.filter(res => res && res.lastErrorObject && res.lastErrorObject.updatedExisting);
+ let failures = result.filter(res => res && !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
logger.success(updates.length, 'tasks have been fixed');
@@ -220,9 +220,9 @@ function unique (array) {
}
function closeDb () {
- logger.success('The process took ' + count + ' seconds');
+ logger.success(`The process took ${ count } seconds`);
- clearInterval(timer)
+ clearInterval(timer);
oldDb.close();
newDb.close();
diff --git a/migrations/20160602_convert_quest_collection.js b/migrations/archive/2016/20160602_convert_quest_collection.js
similarity index 87%
rename from migrations/20160602_convert_quest_collection.js
rename to migrations/archive/2016/20160602_convert_quest_collection.js
index 172575cf1e..04db90f1c2 100644
--- a/migrations/20160602_convert_quest_collection.js
+++ b/migrations/archive/2016/20160602_convert_quest_collection.js
@@ -1,6 +1,6 @@
'use strict';
-/****************************************
+/** **************************************
* Author: Blade Barringer @crookedneighbor
*
* Reason: Collection quest data on the client is unreliable
@@ -33,7 +33,7 @@ const COLLECTION_QUESTS = [
'moonstone1',
'goldenknight1',
'dilatoryDistress1',
-]
+];
let Users, Groups;
@@ -43,14 +43,14 @@ connectToDb(DB_URI).then((db) => {
return Promise.resolve();
})
-.then(findUsersWithCollectionData)
-.then(getUsersCollectionData)
-.then(transformCollectionData)
-.then(cleanUpEmptyCollectionData)
-.then(() => {
- timer.stop();
- closeDb();
-}).catch(reportError);
+ .then(findUsersWithCollectionData)
+ .then(getUsersCollectionData)
+ .then(transformCollectionData)
+ .then(cleanUpEmptyCollectionData)
+ .then(() => {
+ timer.stop();
+ closeDb();
+ }).catch(reportError);
function reportError (err) {
logger.error('Uh oh, an error occurred');
@@ -68,14 +68,14 @@ function findUsersWithCollectionData () {
let members = groups.reduce((array, party) => {
let questers = Object.keys(party.quest.members);
- array.push.apply(array, questers);
+ array.push(...questers);
return array;
}, []);
logger.success('Found', members.length, 'users on collection quests');
return Promise.resolve(members);
- })
+ });
}
function getUsersCollectionData (users) {
@@ -89,7 +89,7 @@ function getUsersCollectionData (users) {
if (!collect) return array;
if (typeof collect === 'number') return array;
- for (var i in collect) {
+ for (let i in collect) {
if (collect.hasOwnProperty(i)) {
total += collect[i];
}
@@ -104,7 +104,7 @@ function getUsersCollectionData (users) {
}
function updateUserById (user) {
- return Users.findOneAndUpdate({_id: user._id}, {$set: {'party.quest.progress.collect': user.collect}}, {returnOriginal: false})
+ return Users.findOneAndUpdate({_id: user._id}, {$set: {'party.quest.progress.collect': user.collect}}, {returnOriginal: false});
}
@@ -114,8 +114,8 @@ function transformCollectionData (users) {
logger.info('About to update', users.length, 'user collection items...');
return Promise.map(users, queue.wrap(updateUserById)).then((result) => {
- let updates = result.filter(res => res.lastErrorObject && res.lastErrorObject.updatedExisting)
- let failures = result.filter(res => !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
+ let updates = result.filter(res => res && res.lastErrorObject && res.lastErrorObject.updatedExisting);
+ let failures = result.filter(res => res && !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
logger.success(updates.length, 'users have been fixed');
diff --git a/migrations/20160605_convert_quest_collection_again.js b/migrations/archive/2016/20160605_convert_quest_collection_again.js
similarity index 86%
rename from migrations/20160605_convert_quest_collection_again.js
rename to migrations/archive/2016/20160605_convert_quest_collection_again.js
index a4e2e0b29e..5b9cc1e95c 100644
--- a/migrations/20160605_convert_quest_collection_again.js
+++ b/migrations/archive/2016/20160605_convert_quest_collection_again.js
@@ -1,6 +1,6 @@
'use strict';
-/****************************************
+/** **************************************
* Author: Blade Barringer @crookedneighbor
*
* Reason: The android app uses quest.progress.collect
@@ -30,7 +30,7 @@ const COLLECTION_QUESTS = [
'moonstone1',
'goldenknight1',
'dilatoryDistress1',
-]
+];
let Users, Groups;
@@ -40,14 +40,14 @@ connectToDb(DB_URI).then((db) => {
return Promise.resolve();
})
-.then(findUsersWithCollectionData)
-.then(getUsersCollectionData)
-.then(transferCollectionData)
-.then(cleanUpBadCollectionData)
-.then(() => {
- timer.stop();
- closeDb();
-}).catch(reportError);
+ .then(findUsersWithCollectionData)
+ .then(getUsersCollectionData)
+ .then(transferCollectionData)
+ .then(cleanUpBadCollectionData)
+ .then(() => {
+ timer.stop();
+ closeDb();
+ }).catch(reportError);
function reportError (err) {
logger.error('Uh oh, an error occurred');
@@ -65,14 +65,14 @@ function findUsersWithCollectionData () {
let members = groups.reduce((array, party) => {
let questers = Object.keys(party.quest.members);
- array.push.apply(array, questers);
+ array.push(...questers);
return array;
}, []);
logger.success('Found', members.length, 'users on collection quests');
return Promise.resolve(members);
- })
+ });
}
function getUsersCollectionData (users) {
@@ -95,7 +95,7 @@ function getUsersCollectionData (users) {
}
function updateUserById (user) {
- return Users.findOneAndUpdate({_id: user._id}, {$set: {'party.quest.progress.collectedItems': user.collect}}, {returnOriginal: false})
+ return Users.findOneAndUpdate({_id: user._id}, {$set: {'party.quest.progress.collectedItems': user.collect}}, {returnOriginal: false});
}
@@ -105,8 +105,8 @@ function transferCollectionData (users) {
logger.info('About to update', users.length, 'user collection items...');
return Promise.map(users, queue.wrap(updateUserById)).then((result) => {
- let updates = result.filter(res => res.lastErrorObject && res.lastErrorObject.updatedExisting)
- let failures = result.filter(res => !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
+ let updates = result.filter(res => res && res.lastErrorObject && res.lastErrorObject.updatedExisting);
+ let failures = result.filter(res => res && !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
logger.success(updates.length, 'users have been fixed');
diff --git a/migrations/20160615_fix_bad_emails.js b/migrations/archive/2016/20160615_fix_bad_emails.js
similarity index 82%
rename from migrations/20160615_fix_bad_emails.js
rename to migrations/archive/2016/20160615_fix_bad_emails.js
index 0413452e31..97f29cefcf 100644
--- a/migrations/20160615_fix_bad_emails.js
+++ b/migrations/archive/2016/20160615_fix_bad_emails.js
@@ -1,6 +1,6 @@
'use strict';
-/****************************************
+/** **************************************
* Author: Blade Barringer @crookedneighbor
*
* Reason: Old code didn't properly validate email
@@ -33,11 +33,11 @@ connectToDb(DB_URI).then((db) => {
})
// cached the lookup as a json file
// .then(findUsersWithBadEmails)
-.then(correctEmails)
-.then(() => {
- timer.stop();
- closeDb();
-}).catch(reportError);
+ .then(correctEmails)
+ .then(() => {
+ timer.stop();
+ closeDb();
+ }).catch(reportError);
function reportError (err) {
logger.error('Uh oh, an error occurred');
@@ -58,8 +58,8 @@ function findUsersWithBadEmails (users) {
return { _id: user._id, email: user.auth.local.email };
});
- logger.warn('number of invalid emails:', invalidEmails.length)
- console.log(result)
+ logger.warn('number of invalid emails:', invalidEmails.length);
+ console.log(result);
return Promise.resolve(invalidEmails);
});
@@ -68,8 +68,8 @@ function findUsersWithBadEmails (users) {
function updateUserById (user) {
return Users.findOneAndUpdate({
_id: user._id},
- {$set: {'auth.local.email': user._id + '@example.com'}
- }, {returnOriginal: false})
+ {$set: {'auth.local.email': `${user._id }@example.com`},
+ }, {returnOriginal: false});
}
// cached lookup of bad emails
@@ -81,8 +81,8 @@ function correctEmails () {
logger.warn('About to update', emails.length, 'user email addresses...');
return Promise.map(emails, queue.wrap(updateUserById)).then((result) => {
- let updates = result.filter(res => res.lastErrorObject && res.lastErrorObject.updatedExisting)
- let failures = result.filter(res => !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
+ let updates = result.filter(res => res && res.lastErrorObject && res.lastErrorObject.updatedExisting);
+ let failures = result.filter(res => res && !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
logger.warn(updates.length, 'users have been fixed');
diff --git a/migrations/archive/2016/20160731_naming_day.js b/migrations/archive/2016/20160731_naming_day.js
new file mode 100644
index 0000000000..dfbbf362b9
--- /dev/null
+++ b/migrations/archive/2016/20160731_naming_day.js
@@ -0,0 +1,89 @@
+let migrationName = '20160731_naming_day.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Royal Purple Gryphon pet to Royal Purple Gryphon mount owners, mount to everyone else
+ */
+
+let mongo = require('mongoskin');
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+
+let dbUsers = mongo.db(connectionString).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ migration: {$ne: migrationName},
+ 'auth.timestamps.loggedin': {$gt: new Date('2016-07-30')}, // Extend timeframe each run of migration
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'items.mounts': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ setTimeout(displayData, 300000);
+ return;
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+ let inc = {};
+ inc = {
+ 'achievements.habiticaDays': 1,
+ 'items.food.Cake_Skeleton': 1,
+ 'items.food.Cake_Base': 1,
+ 'items.food.Cake_CottonCandyBlue': 1,
+ 'items.food.Cake_CottonCandyPink': 1,
+ 'items.food.Cake_Shade': 1,
+ 'items.food.Cake_White': 1,
+ 'items.food.Cake_Golden': 1,
+ 'items.food.Cake_Zombie': 1,
+ 'items.food.Cake_Desert': 1,
+ 'items.food.Cake_Red': 1,
+ };
+ if (user.items.mounts['Gryphon-RoyalPurple']) {
+ set = {migration: migrationName, 'items.pets.Gryphon-RoyalPurple': 5};
+ } else {
+ set = {migration: migrationName, 'items.mounts.Gryphon-RoyalPurple': true};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set, $inc: inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/archive/2016/20160731_takeThis.js b/migrations/archive/2016/20160731_takeThis.js
new file mode 100644
index 0000000000..6a7e858840
--- /dev/null
+++ b/migrations/archive/2016/20160731_takeThis.js
@@ -0,0 +1,78 @@
+let migrationName = '20160731_takeThis.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Take This Sword to Take This challenge participants who already own the Shield
+ * and Take This Shield to the rest of the list
+ */
+
+let mongo = require('mongoskin');
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+
+let dbUsers = mongo.db(connectionString).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ migration: {$ne: migrationName},
+ 'auth.timestamps.loggedin': {$gt: new Date('2016-07-30')}, // Extend timeframe each run of migration
+ challenges: {$in: ['da8859b2-5c6e-4aa5-b8b2-8db93d5de9fc']},
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'items.gear.owned': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ setTimeout(displayData, 300000);
+ return;
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+
+ if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.weapon_special_takeThis': false};
+ } else {
+ set = {migration: migrationName, 'items.gear.owned.shield_special_takeThis': false};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/archive/2016/20160831_takeThis.js b/migrations/archive/2016/20160831_takeThis.js
new file mode 100644
index 0000000000..733b514b19
--- /dev/null
+++ b/migrations/archive/2016/20160831_takeThis.js
@@ -0,0 +1,79 @@
+let migrationName = '20160831_takeThis.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Take This Sword to Take This challenge participants who already own the Shield
+ * and Take This Shield to the rest of the list
+ */
+
+let mongo = require('mongoskin');
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+
+let dbUsers = mongo.db(connectionString).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ migration: {$ne: migrationName},
+ challenges: {$in: ['ee2b3c87-13f0-422a-af3c-309102d4f7e6']},
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'items.gear.owned': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ setTimeout(displayData, 300000);
+ return;
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+
+ if (typeof user.items.gear.owned.weapon_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.armor_special_takeThis': false};
+ } else if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.weapon_special_takeThis': false};
+ } else {
+ set = {migration: migrationName, 'items.gear.owned.shield_special_takeThis': false};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/20161002_add_missing_webhook_type.js b/migrations/archive/2016/20161002_add_missing_webhook_type.js
similarity index 81%
rename from migrations/20161002_add_missing_webhook_type.js
rename to migrations/archive/2016/20161002_add_missing_webhook_type.js
index f3f7b93422..8a0dd5ecbe 100644
--- a/migrations/20161002_add_missing_webhook_type.js
+++ b/migrations/archive/2016/20161002_add_missing_webhook_type.js
@@ -1,6 +1,6 @@
'use strict';
-/****************************************
+/** **************************************
* Author: Blade Barringer @crookedneighbor
*
* Reason: Webhooks have been moved from
@@ -24,7 +24,7 @@ const MIGRATION_NAME = '20161002_add_missing_webhook_type.js';
const DB_URI = 'mongodb://localhost/prod-copy-1';
const LOGGEDIN_DATE_RANGE = {
- $gte: new Date("2016-09-30T00:00:00.000Z"),
+ $gte: new Date('2016-09-30T00:00:00.000Z'),
// $lte: new Date("2016-09-25T00:00:00.000Z"),
};
@@ -33,12 +33,12 @@ let Users;
connectToDb(DB_URI).then((db) => {
Users = db.collection('users');
})
-.then(findUsersWithWebhooks)
-.then(correctWebhooks)
-.then(() => {
- timer.stop();
- closeDb();
-}).catch(reportError);
+ .then(findUsersWithWebhooks)
+ .then(correctWebhooks)
+ .then(() => {
+ timer.stop();
+ closeDb();
+ }).catch(reportError);
function reportError (err) {
logger.error('Uh oh, an error occurred');
@@ -53,14 +53,14 @@ const USER_IDS = require('../../ids_of_webhooks_to_update.json');
function findUsersWithWebhooks () {
logger.warn('Fetching users with webhooks...');
- return Users.find({'_id': {$in: USER_IDS}}, ['preferences.webhooks']).toArray().then((docs) => {
+ return Users.find({_id: {$in: USER_IDS}}, ['preferences.webhooks']).toArray().then((docs) => {
// return Users.find({'preferences.webhooks': {$ne: {} }}, ['preferences.webhooks']).toArray().then((docs) => {
// TODO: Run this after the initial migration to catch any webhooks that may have been aded since the prod backup download
// return Users.find({'preferences.webhooks': {$ne: {} }, 'auth.timestamps.loggedin': LOGGEDIN_DATE_RANGE}, ['preferences.webhooks']).toArray().then((docs) => {
let updates = docs.map((user) => {
let oldWebhooks = user.preferences.webhooks;
let webhooks = Object.keys(oldWebhooks).map((id) => {
- let webhook = oldWebhooks[id]
+ let webhook = oldWebhooks[id];
webhook.type = 'taskActivity';
webhook.label = '';
@@ -79,7 +79,7 @@ function findUsersWithWebhooks () {
return {
webhooks,
id: user._id,
- }
+ };
});
return Promise.resolve(updates);
@@ -92,8 +92,8 @@ function updateUserById (user) {
return Users.findOneAndUpdate({
_id: userId},
- {$set: {webhooks: webhooks, migration: MIGRATION_NAME}
- }, {returnOriginal: false})
+ {$set: {webhooks, migration: MIGRATION_NAME},
+ }, {returnOriginal: false});
}
function correctWebhooks (users) {
@@ -102,8 +102,8 @@ function correctWebhooks (users) {
logger.warn('About to update', users.length, 'users...');
return Promise.map(users, queue.wrap(updateUserById)).then((result) => {
- let updates = result.filter(res => res.lastErrorObject && res.lastErrorObject.updatedExisting)
- let failures = result.filter(res => !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
+ let updates = result.filter(res => res && res.lastErrorObject && res.lastErrorObject.updatedExisting);
+ let failures = result.filter(res => res && !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
logger.warn(updates.length, 'users have been fixed');
diff --git a/migrations/archive/2016/20161002_takeThis.js b/migrations/archive/2016/20161002_takeThis.js
new file mode 100644
index 0000000000..f8880a6c7b
--- /dev/null
+++ b/migrations/archive/2016/20161002_takeThis.js
@@ -0,0 +1,80 @@
+let migrationName = '20161002_takeThis.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Take This ladder items to participants in this month's challenge
+ */
+
+let mongo = require('mongoskin');
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+
+let dbUsers = mongo.db(connectionString).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ migration: {$ne: migrationName},
+ challenges: {$in: ['4bbf63b5-10bc-49f9-8e95-5bd2ac99cd1c']},
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'items.gear.owned': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ setTimeout(displayData, 300000);
+ return;
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+
+ if (typeof user.items.gear.owned.armor_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.head_special_takeThis': false};
+ } else if (typeof user.items.gear.owned.weapon_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.armor_special_takeThis': false};
+ } else if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.weapon_special_takeThis': false};
+ } else {
+ set = {migration: migrationName, 'items.gear.owned.shield_special_takeThis': false};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/archive/2016/20161030-jackolanterns.js b/migrations/archive/2016/20161030-jackolanterns.js
new file mode 100644
index 0000000000..6be94e311f
--- /dev/null
+++ b/migrations/archive/2016/20161030-jackolanterns.js
@@ -0,0 +1,93 @@
+let migrationName = '20161030-jackolanterns.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * set the newStuff flag in all user accounts so they see a Bailey message
+ */
+
+let mongo = require('mongoskin');
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+
+let dbUsers = mongo.db(connectionString).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ 'auth.timestamps.loggedin': {$gt: new Date('2016-10-01')}, // remove when running migration a second time
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ migration: 1,
+ 'items.pets.JackOLantern-Base': 1,
+ 'items.mounts.JackOLantern-Base': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ setTimeout(displayData, 300000);
+ return;
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+ let inc = {};
+ if (user.migration !== migrationName) {
+ if (user.items.mounts['JackOLantern-Base']) {
+ set = {migration: migrationName, 'items.pets.JackOLantern-Ghost': 5};
+ } else if (user.items.pets['JackOLantern-Base']) {
+ set = {migration: migrationName, 'items.mounts.JackOLantern-Base': true};
+ } else {
+ set = {migration: migrationName, 'items.pets.JackOLantern-Base': 5};
+ }
+ inc = {
+ 'items.food.Candy_Base': 1,
+ 'items.food.Candy_CottonCandyBlue': 1,
+ 'items.food.Candy_CottonCandyPink': 1,
+ 'items.food.Candy_Desert': 1,
+ 'items.food.Candy_Golden': 1,
+ 'items.food.Candy_Red': 1,
+ 'items.food.Candy_Shade': 1,
+ 'items.food.Candy_Skeleton': 1,
+ 'items.food.Candy_White': 1,
+ 'items.food.Candy_Zombie': 1,
+ };
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set, $inc: inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/archive/2016/20161102_takeThis.js b/migrations/archive/2016/20161102_takeThis.js
new file mode 100644
index 0000000000..137dc17dee
--- /dev/null
+++ b/migrations/archive/2016/20161102_takeThis.js
@@ -0,0 +1,82 @@
+let migrationName = '20161102_takeThis.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Take This ladder items to participants in this month's challenge
+ */
+
+let mongo = require('mongoskin');
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+
+let dbUsers = mongo.db(connectionString).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ migration: {$ne: migrationName},
+ challenges: {$in: ['d1be0965-e909-4d30-82fa-9a0011f885b2']},
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'items.gear.owned': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ setTimeout(displayData, 300000);
+ return;
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+
+ if (typeof user.items.gear.owned.head_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.body_special_takeThis': false};
+ } else if (typeof user.items.gear.owned.armor_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.head_special_takeThis': false};
+ } else if (typeof user.items.gear.owned.weapon_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.armor_special_takeThis': false};
+ } else if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.weapon_special_takeThis': false};
+ } else {
+ set = {migration: migrationName, 'items.gear.owned.shield_special_takeThis': false};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/archive/2016/20161122_turkey_ladder.js b/migrations/archive/2016/20161122_turkey_ladder.js
new file mode 100644
index 0000000000..9853af9212
--- /dev/null
+++ b/migrations/archive/2016/20161122_turkey_ladder.js
@@ -0,0 +1,81 @@
+let migrationName = '20161122_turkey_ladder.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Yearly Turkey Day award. Turkey pet, Turkey mount, Gilded Turkey pet, Gilded Turkey mount
+ */
+
+let mongo = require('mongoskin');
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+
+let dbUsers = mongo.db(connectionString).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ migration: {$ne: migrationName},
+ 'auth.timestamps.loggedin': {$gt: new Date('2016-10-31')}, // Extend timeframe each run of migration
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ migration: 1,
+ 'items.mounts': 1,
+ 'items.pets': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ setTimeout(displayData, 300000);
+ return;
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+
+ if (user.items.pets['Turkey-Gilded']) {
+ set = {migration: migrationName, 'items.mounts.Turkey-Gilded': true};
+ } else if (user.items.mounts['Turkey-Base']) {
+ set = {migration: migrationName, 'items.pets.Turkey-Gilded': 5};
+ } else if (user.items.pets['Turkey-Base']) {
+ set = {migration: migrationName, 'items.mounts.Turkey-Base': true};
+ } else {
+ set = {migration: migrationName, 'items.pets.Turkey-Base': 5};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
diff --git a/migrations/archive/2016/20161230_nye_hats.js b/migrations/archive/2016/20161230_nye_hats.js
new file mode 100644
index 0000000000..a4c9b491a6
--- /dev/null
+++ b/migrations/archive/2016/20161230_nye_hats.js
@@ -0,0 +1,80 @@
+let migrationName = '20161230_nye_hats.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Yearly New Year's party hat award
+ */
+
+let mongo = require('mongoskin');
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+
+let dbUsers = mongo.db(connectionString).collection('users');
+
+// specify a query to limit the affected users (empty for all users):
+let query = {
+ migration: {$ne: migrationName},
+ 'auth.timestamps.loggedin': {$gt: new Date('2016-11-30')}, // Remove after first run
+};
+
+// specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+let fields = {
+ 'items.gear.owned': 1,
+};
+
+console.warn('Updating users...');
+let progressCount = 1000;
+let count = 0;
+dbUsers.findEach(query, fields, {batchSize: 250}, function (err, user) {
+ if (err) {
+ return exiting(1, `ERROR! ${ err}`);
+ }
+ if (!user) {
+ console.warn('All appropriate users found and modified.');
+ setTimeout(displayData, 300000);
+ return;
+ }
+ count++;
+
+ // specify user data to change:
+ let set = {};
+
+ if (typeof user.items.gear.owned.head_special_nye2015 !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye2016': false};
+ } else if (typeof user.items.gear.owned.head_special_nye2014 !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye2015': false};
+ } else if (typeof user.items.gear.owned.head_special_nye !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye2014': false};
+ } else {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye': false};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+});
+
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
diff --git a/migrations/20170111_announce_collection_quest_change_in_parties.js b/migrations/archive/2017/20170111_announce_collection_quest_change_in_parties.js
similarity index 78%
rename from migrations/20170111_announce_collection_quest_change_in_parties.js
rename to migrations/archive/2017/20170111_announce_collection_quest_change_in_parties.js
index aabd6703f8..35361d4094 100644
--- a/migrations/20170111_announce_collection_quest_change_in_parties.js
+++ b/migrations/archive/2017/20170111_announce_collection_quest_change_in_parties.js
@@ -1,6 +1,6 @@
'use strict';
-/****************************************
+/** **************************************
* Author: @Alys
*
* Reason: Collection quests are being changed
@@ -43,13 +43,13 @@ connectToDb(DB_URI).then((db) => {
return Promise.resolve();
})
-.then(findPartiesWithCollectionQuest)
+ .then(findPartiesWithCollectionQuest)
// .then(displayGroups) // for testing only
-.then(addMessageToGroups)
-.then(() => {
- timer.stop();
- closeDb();
-}).catch(reportError);
+ .then(addMessageToGroups)
+ .then(() => {
+ timer.stop();
+ closeDb();
+ }).catch(reportError);
function reportError (err) {
logger.error('Uh oh, an error occurred');
@@ -61,11 +61,11 @@ function reportError (err) {
function findPartiesWithCollectionQuest () {
logger.info('Looking up groups on collection quests...');
- return Groups.find({'quest.key': {$in: COLLECTION_QUESTS}}, ['name','quest']).toArray().then((groups) => {
+ return Groups.find({'quest.key': {$in: COLLECTION_QUESTS}}, ['name', 'quest']).toArray().then((groups) => {
logger.success('Found', groups.length, 'parties on collection quests');
return Promise.resolve(groups);
- })
+ });
}
function displayGroups (groups) { // for testing only
@@ -75,16 +75,16 @@ function displayGroups (groups) { // for testing only
}
function updateGroupById (group) {
- var newMessage = {
- 'id' : uuid.v4(),
- 'text' : message,
- 'timestamp': Date.now(),
- 'likes': {},
- 'flags': {},
- 'flagCount': 0,
- 'uuid': 'system'
+ let newMessage = {
+ id: uuid.v4(),
+ text: message,
+ timestamp: Date.now(),
+ likes: {},
+ flags: {},
+ flagCount: 0,
+ uuid: 'system',
};
- return Groups.findOneAndUpdate({_id: group._id}, {$push:{"chat" :{$each: [newMessage], $position:0}}}, {returnOriginal: false});
+ return Groups.findOneAndUpdate({_id: group._id}, {$push: {chat: {$each: [newMessage], $position: 0}}}, {returnOriginal: false});
// Does not set the newMessage flag for all party members because I don't think it's essential and
// I don't want to run the extra code (extra database load, extra opportunity for bugs).
}
@@ -95,8 +95,8 @@ function addMessageToGroups (groups) {
logger.info('About to update', groups.length, 'parties...');
return Promise.map(groups, queue.wrap(updateGroupById)).then((result) => {
- let updates = result.filter(res => res.lastErrorObject && res.lastErrorObject.updatedExisting)
- let failures = result.filter(res => !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
+ let updates = result.filter(res => res && res.lastErrorObject && res.lastErrorObject.updatedExisting);
+ let failures = result.filter(res => res && !(res.lastErrorObject && res.lastErrorObject.updatedExisting));
logger.success(updates.length, 'parties have been notified');
diff --git a/migrations/archive/2017/20170120_missing_incentive.js b/migrations/archive/2017/20170120_missing_incentive.js
new file mode 100644
index 0000000000..626fd900eb
--- /dev/null
+++ b/migrations/archive/2017/20170120_missing_incentive.js
@@ -0,0 +1,118 @@
+let migrationName = '20170120_missing_incentive.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award missing Royal Purple Hatching Potion to users with 55+ check-ins
+ * Reduce users with impossible check-in counts to a reasonable number
+ */
+
+import monk from 'monk';
+import common from '../website/common';
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
+
+function processUsers (lastId) {
+ // specify a query to limit the affected users (empty for all users):
+ let query = {
+ loginIncentives: {$gt: 54},
+ migration: {$ne: migrationName},
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ dbUsers.find(query, {
+ sort: {_id: 1},
+ limit: 250,
+ fields: [], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ })
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+let progressCount = 1000;
+let count = 0;
+
+function updateUsers (users) {
+ if (!users || users.length === 0) {
+ console.warn('All appropriate users found and modified.');
+ displayData();
+ return;
+ }
+
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
+
+ return Promise.all(userPromises)
+ .then(function () {
+ processUsers(lastUser._id);
+ });
+}
+
+function updateUser (user) {
+ count++;
+
+ let language = user.preferences.language || 'en';
+ let set = {migration: migrationName};
+ let inc = {'items.hatchingPotions.RoyalPurple': 1};
+ if (user.loginIncentives > 58) {
+ set = {migration: migrationName, loginIncentives: 58};
+ }
+ let push = {
+ notifications: {
+ type: 'LOGIN_INCENTIVE',
+ data: {
+ nextRewardAt: 60,
+ rewardKey: [
+ 'Pet_HatchingPotion_Purple',
+ ],
+ rewardText: common.i18n.t('potion', {potionType: common.i18n.t('hatchingPotionRoyalPurple', language)}, language),
+ reward: [
+ {
+ premium: true,
+ key: 'RoyalPurple',
+ limited: true,
+ value: 2,
+ },
+ ],
+ message: common.i18n.t('unlockedCheckInReward', language),
+ },
+ id: common.uuid(),
+ },
+ };
+
+ dbUsers.update({_id: user._id}, {$set: set, $push: push, $inc: inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+}
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+module.exports = processUsers;
diff --git a/migrations/archive/2017/20170131_habit_birthday.js b/migrations/archive/2017/20170131_habit_birthday.js
new file mode 100644
index 0000000000..01efd5ce6a
--- /dev/null
+++ b/migrations/archive/2017/20170131_habit_birthday.js
@@ -0,0 +1,114 @@
+let migrationName = '20170131_habit_birthday.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award 2017 party robes if user has 2016 robes, 2016 robes if they have the 2015 robes,
+ * 2015 robes if they have the 2014 robes, and 2014 robes otherwise. Also cake!
+ */
+
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
+
+function processUsers (lastId) {
+ // specify a query to limit the affected users (empty for all users):
+ let query = {
+ migration: {$ne: migrationName},
+ 'auth.timestamps.loggedin': {$gt: new Date('2017-01-24')}, // remove after first run to cover remaining users
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ dbUsers.find(query, {
+ sort: {_id: 1},
+ limit: 250,
+ fields: [ // specify fields we are interested in to limit retrieved data (empty if we're not reading data)
+ 'items.gear.owned',
+ ],
+ })
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+let progressCount = 1000;
+let count = 0;
+
+function updateUsers (users) {
+ if (!users || users.length === 0) {
+ console.warn('All appropriate users found and modified.');
+ displayData();
+ return;
+ }
+
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
+
+ return Promise.all(userPromises)
+ .then(function () {
+ processUsers(lastUser._id);
+ });
+}
+
+function updateUser (user) {
+ count++;
+
+ let set = {migration: migrationName};
+ if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday2016')) {
+ set['items.gear.owned.armor_special_birthday2017'] = false;
+ } else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday2015')) {
+ set['items.gear.owned.armor_special_birthday2016'] = false;
+ } else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday')) {
+ set['items.gear.owned.armor_special_birthday2015'] = false;
+ } else {
+ set['items.gear.owned.armor_special_birthday'] = false;
+ }
+
+ let inc = {
+ 'items.food.Cake_Skeleton': 1,
+ 'items.food.Cake_Base': 1,
+ 'items.food.Cake_CottonCandyBlue': 1,
+ 'items.food.Cake_CottonCandyPink': 1,
+ 'items.food.Cake_Shade': 1,
+ 'items.food.Cake_White': 1,
+ 'items.food.Cake_Golden': 1,
+ 'items.food.Cake_Zombie': 1,
+ 'items.food.Cake_Desert': 1,
+ 'items.food.Cake_Red': 1,
+ 'achievements.habitBirthdays': 1,
+ };
+
+ dbUsers.update({_id: user._id}, {$set: set, $inc: inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+}
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+module.exports = processUsers;
diff --git a/migrations/archive/2017/20170418_subscriber_jackalopes.js b/migrations/archive/2017/20170418_subscriber_jackalopes.js
new file mode 100644
index 0000000000..856f35bd13
--- /dev/null
+++ b/migrations/archive/2017/20170418_subscriber_jackalopes.js
@@ -0,0 +1,93 @@
+let migrationName = '20170418_subscriber_jackalopes.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Royal Purple Jackalope pet to all current subscribers
+ */
+
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
+let now = new Date();
+
+function processUsers (lastId) {
+ // specify a query to limit the affected users (empty for all users):
+ let query = {
+ 'purchased.plan.customerId': {$type: 2},
+ $or: [
+ {'purchased.plan.dateTerminated': null},
+ {'purchased.plan.dateTerminated': {$exists: false}},
+ {'purchased.plan.dateTerminated': {$gt: now}},
+ ],
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ dbUsers.find(query, {
+ sort: {_id: 1},
+ limit: 250,
+ fields: [], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ })
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+let progressCount = 1000;
+let count = 0;
+
+function updateUsers (users) {
+ if (!users || users.length === 0) {
+ console.warn('All appropriate users found and modified.');
+ displayData();
+ return;
+ }
+
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
+
+ return Promise.all(userPromises)
+ .then(function () {
+ processUsers(lastUser._id);
+ });
+}
+
+function updateUser (user) {
+ count++;
+
+ let set = {'items.pets.Jackalope-RoyalPurple': 5};
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+}
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+module.exports = processUsers;
diff --git a/migrations/20170425_missing_incentives.js b/migrations/archive/2017/20170425_missing_incentives.js
similarity index 70%
rename from migrations/20170425_missing_incentives.js
rename to migrations/archive/2017/20170425_missing_incentives.js
index be8c224719..9c431b5661 100644
--- a/migrations/20170425_missing_incentives.js
+++ b/migrations/archive/2017/20170425_missing_incentives.js
@@ -1,6 +1,6 @@
-var migrationName = '20170425_missing_incentives';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+let migrationName = '20170425_missing_incentives';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* Award missing Royal Purple Hatching Potion to users with 55+ check-ins
@@ -10,36 +10,36 @@ var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
import monk from 'monk';
import common from '../website/common';
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
- 'loginIncentives': {$gt:99},
- 'migration': {$ne: migrationName},
+ let query = {
+ loginIncentives: {$gt: 99},
+ migration: {$ne: migrationName},
};
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
sort: {_id: 1},
limit: 250,
- fields: [] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ fields: [], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -48,20 +48,20 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(function () {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var language = user.preferences.language || 'en';
- var set = {'migration': migrationName};
- var inc = {
+ let language = user.preferences.language || 'en';
+ let set = {migration: migrationName};
+ let inc = {
'items.eggs.BearCub': 0,
'items.eggs.Cactus': 0,
'items.eggs.Dragon': 0,
@@ -93,7 +93,7 @@ function updateUser (user) {
'items.hatchingPotions.White': 0,
'items.hatchingPotions.Zombie': 0,
};
- var nextReward;
+ let nextReward;
if (user.loginIncentives >= 105) {
inc['items.hatchingPotions.RoyalPurple'] += 1;
@@ -167,39 +167,44 @@ function updateUser (user) {
nextReward = 160;
}
- var push = {
- 'notifications': {
- 'type': 'LOGIN_INCENTIVE',
- 'data': {
- 'nextRewardAt': nextReward,
- 'rewardKey': [
+ let push = {
+ notifications: {
+ type: 'LOGIN_INCENTIVE',
+ data: {
+ nextRewardAt: nextReward,
+ rewardKey: [
'shop_armoire',
],
- 'rewardText': common.i18n.t('checkInRewards', language),
- 'reward': [],
- 'message': common.i18n.t('backloggedCheckInRewards', language),
+ rewardText: common.i18n.t('checkInRewards', language),
+ reward: [],
+ message: common.i18n.t('backloggedCheckInRewards', language),
},
- 'id': common.uuid(),
- }
+ id: common.uuid(),
+ },
};
- dbUsers.update({_id: user._id}, {$set:set, $push:push, $inc:inc});
+ dbUsers.update({_id: user._id}, {$set: set, $push: push, $inc: inc});
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/20170616_achievements.js b/migrations/archive/2017/20170616_achievements.js
similarity index 56%
rename from migrations/20170616_achievements.js
rename to migrations/archive/2017/20170616_achievements.js
index a780c33f3d..53b8be3b73 100644
--- a/migrations/20170616_achievements.js
+++ b/migrations/archive/2017/20170616_achievements.js
@@ -1,6 +1,6 @@
-var migrationName = '20170616_achievements';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+let migrationName = '20170616_achievements';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* Updates to achievements for June 16, 2017 biweekly merge
@@ -10,27 +10,27 @@ var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
import monk from 'monk';
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
+ let query = {
$or: [
- {'achievements.quests.dilatoryDistress1': {$gt:0}},
- {'achievements.quests.egg': {$gt:0}},
- {'achievements.quests.goldenknight1': {$gt:0}},
- {'achievements.quests.moonstone1': {$gt:0}},
- {'achievements.quests.vice2': {$gt:0}},
+ {'achievements.quests.dilatoryDistress1': {$gt: 0}},
+ {'achievements.quests.egg': {$gt: 0}},
+ {'achievements.quests.goldenknight1': {$gt: 0}},
+ {'achievements.quests.moonstone1': {$gt: 0}},
+ {'achievements.quests.vice2': {$gt: 0}},
{'achievements.challenges': {$exists: true, $ne: []}},
- {'challenges': {$exists: true, $ne: []}},
+ {challenges: {$exists: true, $ne: []}},
],
};
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
@@ -41,15 +41,15 @@ function processUsers(lastId) {
'challenges',
],
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -58,18 +58,18 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(function () {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var set = {'migration': migrationName};
+ let set = {migration: migrationName};
if (user.challenges.length > 0 || user.achievements.challenges.length > 0) {
set['achievements.joinedChallenge'] = true;
@@ -90,23 +90,28 @@ function updateUser (user) {
set['achievements.quests.vice2'] = Math.ceil(user.achievements.quests.vice2 * 1.5);
}
- dbUsers.update({_id: user._id}, {$set:set});
+ dbUsers.update({_id: user._id}, {$set: set});
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/archive/2017/20170711_orcas.js b/migrations/archive/2017/20170711_orcas.js
new file mode 100644
index 0000000000..8c9793fe43
--- /dev/null
+++ b/migrations/archive/2017/20170711_orcas.js
@@ -0,0 +1,95 @@
+let migrationName = '20170711_orcas.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Orca pets to owners of Orca mount, and Orca mount to everyone else
+ */
+
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
+
+function processUsers (lastId) {
+ // specify a query to limit the affected users (empty for all users):
+ let query = {
+ migration: {$ne: migrationName},
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ dbUsers.find(query, {
+ sort: {_id: 1},
+ limit: 250,
+ fields: [
+ 'items.mounts',
+ ], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ })
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+let progressCount = 1000;
+let count = 0;
+
+function updateUsers (users) {
+ if (!users || users.length === 0) {
+ console.warn('All appropriate users found and modified.');
+ displayData();
+ return;
+ }
+
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
+
+ return Promise.all(userPromises)
+ .then(function () {
+ processUsers(lastUser._id);
+ });
+}
+
+function updateUser (user) {
+ count++;
+
+ let set = {};
+
+ if (user.items.mounts['Orca-Base']) {
+ set = {migration: migrationName, 'items.pets.Orca-Base': 5};
+ } else {
+ set = {migration: migrationName, 'items.mounts.Orca-Base': true};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+}
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+module.exports = processUsers;
diff --git a/migrations/archive/2017/20170731_naming_day.js b/migrations/archive/2017/20170731_naming_day.js
new file mode 100644
index 0000000000..0aac178dba
--- /dev/null
+++ b/migrations/archive/2017/20170731_naming_day.js
@@ -0,0 +1,114 @@
+let migrationName = '20170731_naming_day.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award Royal Purple Gryphon Helm to Royal Purple Gryphon pet owners,
+ * award Royal Purple Gryphon pet to Royal Purple Gryphon mount owners,
+ * award Royal Purple Gryphon mount to everyone else
+ */
+
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
+
+function processUsers (lastId) {
+ // specify a query to limit the affected users (empty for all users):
+ let query = {
+ migration: {$ne: migrationName},
+ 'auth.timestamps.loggedin': {$gt: new Date('2017-01-01')},
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ dbUsers.find(query, {
+ sort: {_id: 1},
+ limit: 250,
+ fields: [
+ 'items.mounts',
+ 'items.pets',
+ ], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ })
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+let progressCount = 1000;
+let count = 0;
+
+function updateUsers (users) {
+ if (!users || users.length === 0) {
+ console.warn('All appropriate users found and modified.');
+ displayData();
+ return;
+ }
+
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
+
+ return Promise.all(userPromises)
+ .then(function () {
+ processUsers(lastUser._id);
+ });
+}
+
+function updateUser (user) {
+ count++;
+
+ let set = {};
+ let inc = {
+ 'achievements.habiticaDays': 1,
+ 'items.food.Cake_Skeleton': 1,
+ 'items.food.Cake_Base': 1,
+ 'items.food.Cake_CottonCandyBlue': 1,
+ 'items.food.Cake_CottonCandyPink': 1,
+ 'items.food.Cake_Shade': 1,
+ 'items.food.Cake_White': 1,
+ 'items.food.Cake_Golden': 1,
+ 'items.food.Cake_Zombie': 1,
+ 'items.food.Cake_Desert': 1,
+ 'items.food.Cake_Red': 1,
+ };
+
+ if (user.items.pets['Gryphon-RoyalPurple']) {
+ set = {migration: migrationName, 'items.gear.owned.head_special_namingDay2017': false};
+ } else if (user.items.mounts['Gryphon-RoyalPurple']) {
+ set = {migration: migrationName, 'items.pets.Gryphon-RoyalPurple': 5};
+ } else {
+ set = {migration: migrationName, 'items.mounts.Gryphon-RoyalPurple': true};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set, $inc: inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+}
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+module.exports = processUsers;
diff --git a/migrations/archive/2017/20170928_redesign_guilds.js b/migrations/archive/2017/20170928_redesign_guilds.js
new file mode 100644
index 0000000000..89bd8f5261
--- /dev/null
+++ b/migrations/archive/2017/20170928_redesign_guilds.js
@@ -0,0 +1,102 @@
+let migrationName = '20170928_redesign_guilds.js';
+
+/*
+ * Copy Guild Leader messages to end of Guild descriptions
+ * Copy Guild logos to beginning of Guild descriptions
+ */
+
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbGroups = monk(connectionString).get('groups', { castIds: false });
+
+function processGroups (lastId) {
+ // specify a query to limit the affected groups (empty for all groups):
+ let query = {
+ };
+
+ let fields = {
+ description: 1,
+ logo: 1,
+ leaderMessage: 1,
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ return dbGroups.find(query, {
+ fields,
+ sort: {_id: 1},
+ limit: 250,
+ })
+ .then(updateGroups)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+let progressCount = 1000;
+let count = 0;
+
+function updateGroups (groups) {
+ if (!groups || groups.length === 0) {
+ console.warn('All appropriate groups found and modified.');
+ displayData();
+ return;
+ }
+
+ let groupPromises = groups.map(updateGroup);
+ let lastGroup = groups[groups.length - 1];
+
+ return Promise.all(groupPromises)
+ .then(function () {
+ processGroups(lastGroup._id);
+ });
+}
+
+function updateGroup (group) {
+ count++;
+
+ let description = group.description;
+
+ if (group.logo) {
+ description = `\n\n \n\n${ description}`;
+ }
+
+ if (group.leaderMessage) {
+ description = `${description }\n\n \n\n${ group.leaderMessage}`;
+ }
+
+ let set = {
+ description,
+ };
+
+ if (count % progressCount === 0) console.warn(`${count } ${ group._id}`);
+
+ return dbGroups.update({_id: group._id}, {$set: set});
+}
+
+function displayData () {
+ console.warn(`\n${ count } groups processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+module.exports = processGroups;
diff --git a/migrations/20170928_redesign_launch.js b/migrations/archive/2017/20170928_redesign_launch.js
similarity index 50%
rename from migrations/20170928_redesign_launch.js
rename to migrations/archive/2017/20170928_redesign_launch.js
index 1139652050..e83d838413 100644
--- a/migrations/20170928_redesign_launch.js
+++ b/migrations/archive/2017/20170928_redesign_launch.js
@@ -1,53 +1,53 @@
import { selectGearToPin } from '../website/common/script/ops/pinnedGearUtils';
-var getItemInfo = require('../website/common/script/libs/getItemInfo');
+let getItemInfo = require('../website/common/script/libs/getItemInfo');
-var migrationName = '20170928_redesign_launch.js';
-var authorName = 'paglias'; // in case script author needs to know when their ...
-var authorUuid = 'ed4c688c-6652-4a92-9d03-a5a79844174a'; //... own data is done
+let migrationName = '20170928_redesign_launch.js';
+let authorName = 'paglias'; // in case script author needs to know when their ...
+let authorUuid = 'ed4c688c-6652-4a92-9d03-a5a79844174a'; // ... own data is done
/*
* Migrate existing in app rewards lists to pinned items
* Award Veteran Pets
*/
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
- 'migration': {$ne:migrationName},
+ let query = {
+ migration: {$ne: migrationName},
'auth.timestamps.loggedin': {$gt: new Date('2017-09-21')},
};
- var fields = {
+ let fields = {
'items.pets': 1,
'items.gear': 1,
'stats.class': 1,
- }
+ };
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
return dbUsers.find(query, {
- fields: fields,
+ fields,
sort: {_id: 1},
limit: 250,
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -56,22 +56,22 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(function () {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var set = {'migration': migrationName};
+ let set = {migration: migrationName};
- var oldRewardsList = selectGearToPin(user);
- var newPinnedItems = [
+ let oldRewardsList = selectGearToPin(user);
+ let newPinnedItems = [
{
type: 'armoire',
path: 'armoire',
@@ -83,13 +83,13 @@ function updateUser (user) {
];
oldRewardsList.forEach(item => {
- var type = 'marketGear';
+ let type = 'marketGear';
- var itemInfo = getItemInfo(user, 'marketGear', item);
+ let itemInfo = getItemInfo(user, 'marketGear', item);
newPinnedItems.push({
type,
path: itemInfo.path,
- })
+ });
});
set.pinnedItems = newPinnedItems;
@@ -104,23 +104,28 @@ function updateUser (user) {
set['items.pets.Wolf-Veteran'] = 5;
}
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
- return dbUsers.update({_id: user._id}, {$set:set});
+ return dbUsers.update({_id: user._id}, {$set: set});
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/archive/2017/20171030_jackolanterns.js b/migrations/archive/2017/20171030_jackolanterns.js
new file mode 100644
index 0000000000..1b07ed1fb2
--- /dev/null
+++ b/migrations/archive/2017/20171030_jackolanterns.js
@@ -0,0 +1,116 @@
+let migrationName = '20171030_jackolanterns.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award the Jack-O'-Lantern ladder:
+ * Ghost Jack-O-Lantern Mount to owners of Ghost Jack-O-Lantern Pet
+ * Ghost Jack-O-Lantern Pet to owners of Jack-O-Lantern Mount
+ * Jack-O-Lantern Mount to owners of Jack-O-Lantern Pet
+ * Jack-O-Lantern Pet to everyone else
+ */
+
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
+
+function processUsers (lastId) {
+ // specify a query to limit the affected users (empty for all users):
+ let query = {
+ migration: {$ne: migrationName},
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ dbUsers.find(query, {
+ sort: {_id: 1},
+ limit: 250,
+ fields: [
+ 'items.pets',
+ 'items.mounts',
+ ], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ })
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+let progressCount = 1000;
+let count = 0;
+
+function updateUsers (users) {
+ if (!users || users.length === 0) {
+ console.warn('All appropriate users found and modified.');
+ displayData();
+ return;
+ }
+
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
+
+ return Promise.all(userPromises)
+ .then(function () {
+ processUsers(lastUser._id);
+ });
+}
+
+function updateUser (user) {
+ count++;
+
+ let set = {};
+ let inc = {
+ 'items.food.Candy_Skeleton': 1,
+ 'items.food.Candy_Base': 1,
+ 'items.food.Candy_CottonCandyBlue': 1,
+ 'items.food.Candy_CottonCandyPink': 1,
+ 'items.food.Candy_Shade': 1,
+ 'items.food.Candy_White': 1,
+ 'items.food.Candy_Golden': 1,
+ 'items.food.Candy_Zombie': 1,
+ 'items.food.Candy_Desert': 1,
+ 'items.food.Candy_Red': 1,
+ };
+
+ if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Ghost']) {
+ set = {migration: migrationName, 'items.mounts.JackOLantern-Ghost': true};
+ } else if (user && user.items && user.items.mounts && user.items.mounts['JackOLantern-Base']) {
+ set = {migration: migrationName, 'items.pets.JackOLantern-Ghost': 5};
+ } else if (user && user.items && user.items.pets && user.items.pets['JackOLantern-Base']) {
+ set = {migration: migrationName, 'items.mounts.JackOLantern-Base': true};
+ } else {
+ set = {migration: migrationName, 'items.pets.JackOLantern-Base': 5};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set, $inc: inc});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+}
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+module.exports = processUsers;
diff --git a/migrations/20171117_turkey_ladder.js b/migrations/archive/2017/20171117_turkey_ladder.js
similarity index 57%
rename from migrations/20171117_turkey_ladder.js
rename to migrations/archive/2017/20171117_turkey_ladder.js
index 814109af5f..f4414f58ac 100644
--- a/migrations/20171117_turkey_ladder.js
+++ b/migrations/archive/2017/20171117_turkey_ladder.js
@@ -1,6 +1,6 @@
-var migrationName = '20171117_turkey_ladder.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+let migrationName = '20171117_turkey_ladder.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* Award the Turkey Day ladder:
@@ -11,21 +11,21 @@ var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
* Grant Base Turkey pet to those who have none of the above yet
*/
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
- 'migration':{$ne:migrationName},
- 'auth.timestamps.loggedin':{$gt:new Date('2017-11-01')},
+ let query = {
+ migration: {$ne: migrationName},
+ 'auth.timestamps.loggedin': {$gt: new Date('2017-11-01')},
};
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
@@ -34,17 +34,17 @@ function processUsers(lastId) {
fields: [
'items.pets',
'items.mounts',
- ] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ ], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -53,19 +53,19 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(function () {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var set = {};
+ let set = {};
if (user && user.items && user.items.mounts && user.items.mounts['Turkey-Gilded']) {
set = {
@@ -92,13 +92,13 @@ function updateUser (user) {
},
];
} else if (user && user.items && user.items.pets && user.items.pets['Turkey-Gilded']) {
- set = {'migration':migrationName, 'items.mounts.Turkey-Gilded':true};
+ set = {migration: migrationName, 'items.mounts.Turkey-Gilded': true};
} else if (user && user.items && user.items.mounts && user.items.mounts['Turkey-Base']) {
- set = {'migration':migrationName, 'items.pets.Turkey-Gilded':5};
+ set = {migration: migrationName, 'items.pets.Turkey-Gilded': 5};
} else if (user && user.items && user.items.pets && user.items.pets['Turkey-Base']) {
- set = {'migration':migrationName, 'items.mounts.Turkey-Base':true};
+ set = {migration: migrationName, 'items.mounts.Turkey-Base': true};
} else {
- set = {'migration':migrationName, 'items.pets.Turkey-Base':5};
+ set = {migration: migrationName, 'items.pets.Turkey-Base': 5};
}
dbUsers.update({_id: user._id}, {$set: set});
@@ -106,21 +106,26 @@ function updateUser (user) {
dbUsers.update({_id: user._id}, {$push: {pinnedItems: {$each: push}}});
}
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/archive/2017/20171230_nye_hats.js b/migrations/archive/2017/20171230_nye_hats.js
new file mode 100644
index 0000000000..12c4287dc5
--- /dev/null
+++ b/migrations/archive/2017/20171230_nye_hats.js
@@ -0,0 +1,108 @@
+let migrationName = '20171230_nye_hats.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award New Year's Eve party hats to users in sequence
+ */
+
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
+
+function processUsers (lastId) {
+ // specify a query to limit the affected users (empty for all users):
+ let query = {
+ migration: {$ne: migrationName},
+ 'auth.timestamps.loggedin': {$gt: new Date('2017-11-30')},
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ dbUsers.find(query, {
+ sort: {_id: 1},
+ limit: 250,
+ fields: [
+ 'items.gear.owned',
+ ], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ })
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+let progressCount = 1000;
+let count = 0;
+
+function updateUsers (users) {
+ if (!users || users.length === 0) {
+ console.warn('All appropriate users found and modified.');
+ displayData();
+ return;
+ }
+
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
+
+ return Promise.all(userPromises)
+ .then(function () {
+ processUsers(lastUser._id);
+ });
+}
+
+function updateUser (user) {
+ count++;
+
+ let set = {};
+ let push = {};
+
+ if (typeof user.items.gear.owned.head_special_nye2016 !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye2017': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye2017', _id: monk.id()}};
+ } else if (typeof user.items.gear.owned.head_special_nye2015 !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye2016': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye2016', _id: monk.id()}};
+ } else if (typeof user.items.gear.owned.head_special_nye2014 !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye2015': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye2015', _id: monk.id()}};
+ } else if (typeof user.items.gear.owned.head_special_nye !== 'undefined') {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye2014': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye2014', _id: monk.id()}};
+ } else {
+ set = {migration: migrationName, 'items.gear.owned.head_special_nye': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_nye', _id: monk.id()}};
+ }
+
+ dbUsers.update({_id: user._id}, {$set: set, $push: push});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+}
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+module.exports = processUsers;
diff --git a/migrations/20180110_nextPaymentProcessing.js b/migrations/archive/2018/20180110_nextPaymentProcessing.js
similarity index 50%
rename from migrations/20180110_nextPaymentProcessing.js
rename to migrations/archive/2018/20180110_nextPaymentProcessing.js
index 293dcb354c..c56cca690f 100644
--- a/migrations/20180110_nextPaymentProcessing.js
+++ b/migrations/archive/2018/20180110_nextPaymentProcessing.js
@@ -2,36 +2,36 @@
* Convert purchased.plan.nextPaymentProcessing from a double to a date field for Apple subscribers
*/
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
- 'purchased.plan.paymentMethod': "Apple",
+ let query = {
+ 'purchased.plan.paymentMethod': 'Apple',
'purchased.plan.nextPaymentProcessing': {$type: 'double'},
};
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
sort: {_id: 1},
limit: 250,
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 100;
-var count = 0;
+let progressCount = 100;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -40,38 +40,43 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(function () {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var set = {
+ let set = {
'purchased.plan.nextPaymentProcessing': new Date(user.purchased.plan.nextPaymentProcessing),
};
dbUsers.update({_id: user._id}, {$set: set});
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/20180125_clean_new_notifications.js b/migrations/archive/2018/20180125_clean_new_notifications.js
similarity index 100%
rename from migrations/20180125_clean_new_notifications.js
rename to migrations/archive/2018/20180125_clean_new_notifications.js
diff --git a/migrations/20180125_notifications.js b/migrations/archive/2018/20180125_notifications.js
similarity index 100%
rename from migrations/20180125_notifications.js
rename to migrations/archive/2018/20180125_notifications.js
diff --git a/migrations/20180130_habit_birthday.js b/migrations/archive/2018/20180130_habit_birthday.js
similarity index 51%
rename from migrations/20180130_habit_birthday.js
rename to migrations/archive/2018/20180130_habit_birthday.js
index 05a3dc1c02..f28a42eaa8 100644
--- a/migrations/20180130_habit_birthday.js
+++ b/migrations/archive/2018/20180130_habit_birthday.js
@@ -1,44 +1,44 @@
-var migrationName = '20180130_habit_birthday.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+let migrationName = '20180130_habit_birthday.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* Award party robes: most recent user doesn't have of 2014-2018. Also cake!
*/
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
- 'migration':{$ne:migrationName},
- 'auth.timestamps.loggedin':{$gt:new Date('2018-01-01')}, // remove after first run to cover remaining users
+ let query = {
+ migration: {$ne: migrationName},
+ 'auth.timestamps.loggedin': {$gt: new Date('2018-01-01')}, // remove after first run to cover remaining users
};
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
sort: {_id: 1},
limit: 250,
fields: [ // specify fields we are interested in to limit retrieved data (empty if we're not reading data)
- 'items.gear.owned'
+ 'items.gear.owned',
],
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch(function (err) {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -47,69 +47,74 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(function () {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var push;
- var set = {'migration':migrationName};
+ let push;
+ let set = {migration: migrationName};
if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday2017')) {
set['items.gear.owned.armor_special_birthday2018'] = false;
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2018', '_id': monk.id()}};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2018', _id: monk.id()}};
} else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday2016')) {
set['items.gear.owned.armor_special_birthday2017'] = false;
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2017', '_id': monk.id()}};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2017', _id: monk.id()}};
} else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday2015')) {
set['items.gear.owned.armor_special_birthday2016'] = false;
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2016', '_id': monk.id()}};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2016', _id: monk.id()}};
} else if (user.items && user.items.gear && user.items.gear.owned && user.items.gear.owned.hasOwnProperty('armor_special_birthday')) {
set['items.gear.owned.armor_special_birthday2015'] = false;
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2015', '_id': monk.id()}};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday2015', _id: monk.id()}};
} else {
set['items.gear.owned.armor_special_birthday'] = false;
- push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday', '_id': monk.id()}};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_birthday', _id: monk.id()}};
}
- var inc = {
- 'items.food.Cake_Skeleton':1,
- 'items.food.Cake_Base':1,
- 'items.food.Cake_CottonCandyBlue':1,
- 'items.food.Cake_CottonCandyPink':1,
- 'items.food.Cake_Shade':1,
- 'items.food.Cake_White':1,
- 'items.food.Cake_Golden':1,
- 'items.food.Cake_Zombie':1,
- 'items.food.Cake_Desert':1,
- 'items.food.Cake_Red':1,
- 'achievements.habitBirthdays':1
+ let inc = {
+ 'items.food.Cake_Skeleton': 1,
+ 'items.food.Cake_Base': 1,
+ 'items.food.Cake_CottonCandyBlue': 1,
+ 'items.food.Cake_CottonCandyPink': 1,
+ 'items.food.Cake_Shade': 1,
+ 'items.food.Cake_White': 1,
+ 'items.food.Cake_Golden': 1,
+ 'items.food.Cake_Zombie': 1,
+ 'items.food.Cake_Desert': 1,
+ 'items.food.Cake_Red': 1,
+ 'achievements.habitBirthdays': 1,
};
dbUsers.update({_id: user._id}, {$set: set, $inc: inc, $push: push});
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/archive/README.md b/migrations/archive/README.md
new file mode 100644
index 0000000000..9330a6dbf8
--- /dev/null
+++ b/migrations/archive/README.md
@@ -0,0 +1,4 @@
+If you need to use a migration from this folder, move it to /migrations.
+
+Note that /migrations files (excluding /archive) are linted, so to pass test you'll have to make sure
+that the file is written correctly.
\ No newline at end of file
diff --git a/migrations/archive/api_v3/challenges.js b/migrations/archive/api_v3/challenges.js
new file mode 100644
index 0000000000..80315db9f1
--- /dev/null
+++ b/migrations/archive/api_v3/challenges.js
@@ -0,0 +1,218 @@
+// Migrate challenges collection to new schema (except for members)
+
+// The console-stamp module must be installed (not included in package.json)
+
+// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
+
+// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
+// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+console.log('Starting migrations/api_v3/challenges.js.');
+
+require('babel-register');
+require('babel-polyfill');
+
+let Bluebird = require('bluebird');
+let MongoDB = require('mongodb');
+let nconf = require('nconf');
+let mongoose = require('mongoose');
+let _ = require('lodash');
+let uuid = require('uuid');
+let consoleStamp = require('console-stamp');
+let fs = require('fs');
+
+// Add timestamps to console messages
+consoleStamp(console);
+
+// Initialize configuration
+require('../../website/server/libs/api-v3/setupNconf')();
+
+let MONGODB_OLD = nconf.get('MONGODB_OLD');
+let MONGODB_NEW = nconf.get('MONGODB_NEW');
+
+let MongoClient = MongoDB.MongoClient;
+
+mongoose.Promise = Bluebird; // otherwise mongoose models won't work
+
+// Load new models
+let NewChallenge = require('../../website/server/models/challenge').model;
+let Tasks = require('../../website/server/models/task');
+
+// To be defined later when MongoClient connects
+let mongoDbOldInstance;
+let oldChallengeCollection;
+
+let mongoDbNewInstance;
+let newChallengeCollection;
+let newTaskCollection;
+
+let BATCH_SIZE = 1000;
+
+let processedChallenges = 0;
+let totoalProcessedTasks = 0;
+
+let newTasksIds = {}; // a map of old id -> [new id, challengeId]
+
+// Only process challenges that fall in a interval ie -> up to 0000-4000-0000-0000
+let AFTER_CHALLENGE_ID = nconf.get('AFTER_CHALLENGE_ID');
+let BEFORE_CHALLENGE_ID = nconf.get('BEFORE_CHALLENGE_ID');
+
+function processChallenges (afterId) {
+ let processedTasks = 0;
+ let lastChallenge = null;
+ let oldChallenges;
+
+ let query = {};
+
+ if (BEFORE_CHALLENGE_ID) {
+ query._id = {$lte: BEFORE_CHALLENGE_ID};
+ }
+
+ if ((afterId || AFTER_CHALLENGE_ID) && !query._id) {
+ query._id = {};
+ }
+
+ if (afterId) {
+ query._id.$gt = afterId;
+ } else if (AFTER_CHALLENGE_ID) {
+ query._id.$gt = AFTER_CHALLENGE_ID;
+ }
+
+ let batchInsertTasks = newTaskCollection.initializeUnorderedBulkOp();
+ let batchInsertChallenges = newChallengeCollection.initializeUnorderedBulkOp();
+
+ console.log(`Executing challenges query.\nMatching challenges after ${afterId ? afterId : AFTER_CHALLENGE_ID} and before ${BEFORE_CHALLENGE_ID} (included).`);
+
+ return oldChallengeCollection
+ .find(query)
+ .sort({_id: 1})
+ .limit(BATCH_SIZE)
+ .toArray()
+ .then(function (oldChallengesR) {
+ oldChallenges = oldChallengesR;
+
+ console.log(`Processing ${oldChallenges.length} challenges. Already processed ${processedChallenges} challenges and ${totoalProcessedTasks} tasks.`);
+
+ if (oldChallenges.length === BATCH_SIZE) {
+ lastChallenge = oldChallenges[oldChallenges.length - 1]._id;
+ }
+
+ oldChallenges.forEach(function (oldChallenge) {
+ let oldTasks = oldChallenge.habits.concat(oldChallenge.dailys).concat(oldChallenge.rewards).concat(oldChallenge.todos);
+ delete oldChallenge.habits;
+ delete oldChallenge.dailys;
+ delete oldChallenge.rewards;
+ delete oldChallenge.todos;
+
+ let createdAt = oldChallenge.timestamp;
+
+ oldChallenge.memberCount = oldChallenge.members.length;
+ if (oldChallenge.prize <= 0) oldChallenge.prize = 0;
+ if (!oldChallenge.name) oldChallenge.name = 'challenge name';
+ if (!oldChallenge.shortName) oldChallenge.name = 'challenge-name';
+
+ if (!oldChallenge.group) throw new Error('challenge.group is required');
+ if (!oldChallenge.leader) throw new Error('challenge.leader is required');
+
+
+ if (oldChallenge.leader === '9') {
+ oldChallenge.leader = '00000000-0000-4000-9000-000000000000';
+ }
+
+ if (oldChallenge.group === 'habitrpg') {
+ oldChallenge.group = '00000000-0000-4000-A000-000000000000';
+ }
+
+ delete oldChallenge.id;
+
+ let newChallenge = new NewChallenge(oldChallenge);
+
+ newChallenge.createdAt = createdAt;
+
+ oldTasks.forEach(function (oldTask) {
+ oldTask._id = uuid.v4();
+ oldTask._legacyId = oldTask.id; // store the old task id
+ delete oldTask.id;
+
+ oldTask.challenge = oldTask.challenge || {};
+ oldTask.challenge.id = newChallenge._id;
+
+ if (newTasksIds[`${oldTask._legacyId }-${ newChallenge._id}`]) {
+ throw new Error('duplicate :(');
+ } else {
+ newTasksIds[`${oldTask._legacyId }-${ newChallenge._id}`] = oldTask._id;
+ }
+
+ oldTask.tags = _.map(oldTask.tags || {}, function (tagPresent, tagId) {
+ return tagPresent && tagId;
+ }).filter(function (tag) {
+ return tag !== false;
+ });
+
+ if (!oldTask.text) oldTask.text = 'task text'; // required
+
+ oldTask.createdAt = oldTask.dateCreated;
+
+ newChallenge.tasksOrder[`${oldTask.type}s`].push(oldTask._id);
+ if (oldTask.completed) oldTask.completed = false;
+
+ let newTask = new Tasks[oldTask.type](oldTask);
+
+ batchInsertTasks.insert(newTask.toObject());
+ processedTasks++;
+ });
+
+ batchInsertChallenges.insert(newChallenge.toObject());
+ });
+
+ console.log(`Saving ${oldChallenges.length} challenges and ${processedTasks} tasks.`);
+
+ return Bluebird.all([
+ batchInsertChallenges.execute(),
+ batchInsertTasks.execute(),
+ ]);
+ })
+ .then(function () {
+ totoalProcessedTasks += processedTasks;
+ processedChallenges += oldChallenges.length;
+
+ console.log(`Saved ${oldChallenges.length} challenges and their tasks.`);
+
+ if (lastChallenge) {
+ return processChallenges(lastChallenge);
+ } else {
+ console.log('Writing newTasksIds.json...');
+ fs.writeFileSync('newTasksIds.json', JSON.stringify(newTasksIds, null, 4), 'utf8');
+ return console.log('Done!');
+ }
+ });
+}
+
+// Connect to the databases
+Bluebird.all([
+ MongoClient.connect(MONGODB_OLD),
+ MongoClient.connect(MONGODB_NEW),
+])
+ .then(function (result) {
+ let oldInstance = result[0];
+ let newInstance = result[1];
+
+ mongoDbOldInstance = oldInstance;
+ oldChallengeCollection = mongoDbOldInstance.collection('challenges');
+
+ mongoDbNewInstance = newInstance;
+ newChallengeCollection = mongoDbNewInstance.collection('challenges');
+ newTaskCollection = mongoDbNewInstance.collection('tasks');
+
+ console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
+
+ return processChallenges();
+ })
+ .catch(function (err) {
+ console.error(err.stack || err);
+ });
diff --git a/migrations/archive/api_v3/challengesMembers.js b/migrations/archive/api_v3/challengesMembers.js
new file mode 100644
index 0000000000..2691896b18
--- /dev/null
+++ b/migrations/archive/api_v3/challengesMembers.js
@@ -0,0 +1,149 @@
+// Migrate challenges members
+// Run AFTER users migration
+
+// The console-stamp module must be installed (not included in package.json)
+
+// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
+
+// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
+// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
+console.log('Starting migrations/api_v3/challengesMembers.js.');
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+require('babel-register');
+require('babel-polyfill');
+
+let Bluebird = require('bluebird');
+let MongoDB = require('mongodb');
+let nconf = require('nconf');
+let mongoose = require('mongoose');
+let _ = require('lodash');
+let uuid = require('uuid');
+let consoleStamp = require('console-stamp');
+
+// Add timestamps to console messages
+consoleStamp(console);
+
+// Initialize configuration
+require('../../website/server/libs/api-v3/setupNconf')();
+
+let MONGODB_OLD = nconf.get('MONGODB_OLD');
+let MONGODB_NEW = nconf.get('MONGODB_NEW');
+
+let MongoClient = MongoDB.MongoClient;
+
+mongoose.Promise = Bluebird; // otherwise mongoose models won't work
+
+// To be defined later when MongoClient connects
+let mongoDbOldInstance;
+let oldChallengeCollection;
+
+let mongoDbNewInstance;
+let newUserCollection;
+
+let BATCH_SIZE = 1000;
+
+let processedChallenges = 0;
+
+// Only process challenges that fall in a interval ie -> up to 0000-4000-0000-0000
+let AFTER_CHALLENGE_ID = nconf.get('AFTER_CHALLENGE_ID');
+let BEFORE_CHALLENGE_ID = nconf.get('BEFORE_CHALLENGE_ID');
+
+function processChallenges (afterId) {
+ let processedTasks = 0;
+ let lastChallenge = null;
+ let oldChallenges;
+
+ let query = {};
+
+ if (BEFORE_CHALLENGE_ID) {
+ query._id = {$lte: BEFORE_CHALLENGE_ID};
+ }
+
+ if ((afterId || AFTER_CHALLENGE_ID) && !query._id) {
+ query._id = {};
+ }
+
+ if (afterId) {
+ query._id.$gt = afterId;
+ } else if (AFTER_CHALLENGE_ID) {
+ query._id.$gt = AFTER_CHALLENGE_ID;
+ }
+
+ console.log(`Executing challenges query.\nMatching challenges after ${afterId ? afterId : AFTER_CHALLENGE_ID} and before ${BEFORE_CHALLENGE_ID} (included).`);
+
+ return oldChallengeCollection
+ .find(query)
+ .sort({_id: 1})
+ .limit(BATCH_SIZE)
+ .toArray()
+ .then(function (oldChallengesR) {
+ oldChallenges = oldChallengesR;
+
+ let promises = [];
+
+ console.log(`Processing ${oldChallenges.length} challenges. Already processed ${processedChallenges} challenges.`);
+
+ if (oldChallenges.length === BATCH_SIZE) {
+ lastChallenge = oldChallenges[oldChallenges.length - 1]._id;
+ }
+
+ oldChallenges.forEach(function (oldChallenge) {
+ // Tyler Renelle
+ oldChallenge.members.forEach(function (id, index) {
+ if (id === '9') {
+ oldChallenge.members[index] = '00000000-0000-4000-9000-000000000000';
+ }
+ });
+
+ promises.push(newUserCollection.updateMany({
+ _id: {$in: oldChallenge.members || []},
+ }, {
+ $push: {challenges: oldChallenge._id},
+ }, {multi: true}));
+ });
+
+ console.log(`Migrating members of ${oldChallenges.length} challenges.`);
+
+ return Bluebird.all(promises);
+ })
+ .then(function () {
+ processedChallenges += oldChallenges.length;
+
+ console.log(`Migrated members of ${oldChallenges.length} challenges.`);
+
+ if (lastChallenge) {
+ return processChallenges(lastChallenge);
+ } else {
+ return console.log('Done!');
+ }
+ });
+}
+
+// Connect to the databases
+Bluebird.all([
+ MongoClient.connect(MONGODB_OLD),
+ MongoClient.connect(MONGODB_NEW),
+])
+ .then(function (result) {
+ let oldInstance = result[0];
+ let newInstance = result[1];
+
+ mongoDbOldInstance = oldInstance;
+ oldChallengeCollection = mongoDbOldInstance.collection('challenges');
+
+ mongoDbNewInstance = newInstance;
+ newUserCollection = mongoDbNewInstance.collection('users');
+
+ console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
+
+ return processChallenges();
+ })
+ .catch(function (err) {
+ console.error(err.stack || err);
+ });
diff --git a/migrations/archive/api_v3/coupons.js b/migrations/archive/api_v3/coupons.js
new file mode 100644
index 0000000000..22da730515
--- /dev/null
+++ b/migrations/archive/api_v3/coupons.js
@@ -0,0 +1,142 @@
+// Migrate coupons collection to new schema
+
+// The console-stamp module must be installed (not included in package.json)
+
+// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
+
+// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
+// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
+console.log('Starting migrations/api_v3/coupons.js.');
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+require('babel-register');
+require('babel-polyfill');
+
+let Bluebird = require('bluebird');
+let MongoDB = require('mongodb');
+let nconf = require('nconf');
+let mongoose = require('mongoose');
+let _ = require('lodash');
+let uuid = require('uuid');
+let consoleStamp = require('console-stamp');
+
+// Add timestamps to console messages
+consoleStamp(console);
+
+// Initialize configuration
+require('../../website/server/libs/api-v3/setupNconf')();
+
+let MONGODB_OLD = nconf.get('MONGODB_OLD');
+let MONGODB_NEW = nconf.get('MONGODB_NEW');
+
+let MongoClient = MongoDB.MongoClient;
+
+mongoose.Promise = Bluebird; // otherwise mongoose models won't work
+
+// Load new models
+let Coupon = require('../../website/server/models/coupon').model;
+
+// To be defined later when MongoClient connects
+let mongoDbOldInstance;
+let oldCouponCollection;
+
+let mongoDbNewInstance;
+let newCouponCollection;
+
+let BATCH_SIZE = 1000;
+
+let processedCoupons = 0;
+
+// Only process coupons that fall in a interval ie -> up to 0000-4000-0000-0000
+let AFTER_COUPON_ID = nconf.get('AFTER_COUPON_ID');
+let BEFORE_COUPON_ID = nconf.get('BEFORE_COUPON_ID');
+
+function processCoupons (afterId) {
+ let processedTasks = 0;
+ let lastCoupon = null;
+ let oldCoupons;
+
+ let query = {};
+
+ if (BEFORE_COUPON_ID) {
+ query._id = {$lte: BEFORE_COUPON_ID};
+ }
+
+ if ((afterId || AFTER_COUPON_ID) && !query._id) {
+ query._id = {};
+ }
+
+ if (afterId) {
+ query._id.$gt = afterId;
+ } else if (AFTER_COUPON_ID) {
+ query._id.$gt = AFTER_COUPON_ID;
+ }
+
+ let batchInsertCoupons = newCouponCollection.initializeUnorderedBulkOp();
+
+ console.log(`Executing coupons query.\nMatching coupons after ${afterId ? afterId : AFTER_COUPON_ID} and before ${BEFORE_COUPON_ID} (included).`);
+
+ return oldCouponCollection
+ .find(query)
+ .sort({_id: 1})
+ .limit(BATCH_SIZE)
+ .toArray()
+ .then(function (oldCouponsR) {
+ oldCoupons = oldCouponsR;
+
+ console.log(`Processing ${oldCoupons.length} coupons. Already processed ${processedCoupons} coupons.`);
+
+ if (oldCoupons.length === BATCH_SIZE) {
+ lastCoupon = oldCoupons[oldCoupons.length - 1]._id;
+ }
+
+ oldCoupons.forEach(function (oldCoupon) {
+ let newCoupon = new Coupon(oldCoupon);
+
+ batchInsertCoupons.insert(newCoupon.toObject());
+ });
+
+ console.log(`Saving ${oldCoupons.length} coupons.`);
+
+ return batchInsertCoupons.execute();
+ })
+ .then(function () {
+ processedCoupons += oldCoupons.length;
+
+ console.log(`Saved ${oldCoupons.length} coupons.`);
+
+ if (lastCoupon) {
+ return processCoupons(lastCoupon);
+ } else {
+ return console.log('Done!');
+ }
+ });
+}
+
+// Connect to the databases
+Bluebird.all([
+ MongoClient.connect(MONGODB_OLD),
+ MongoClient.connect(MONGODB_NEW),
+])
+ .then(function (result) {
+ let oldInstance = result[0];
+ let newInstance = result[1];
+
+ mongoDbOldInstance = oldInstance;
+ oldCouponCollection = mongoDbOldInstance.collection('coupons');
+
+ mongoDbNewInstance = newInstance;
+ newCouponCollection = mongoDbNewInstance.collection('coupons');
+
+ console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
+
+ return processCoupons();
+ })
+ .catch(function (err) {
+ console.error(err.stack || err);
+ });
diff --git a/migrations/archive/api_v3/emailUnsubscriptions.js b/migrations/archive/api_v3/emailUnsubscriptions.js
new file mode 100644
index 0000000000..21eae2a13c
--- /dev/null
+++ b/migrations/archive/api_v3/emailUnsubscriptions.js
@@ -0,0 +1,143 @@
+// Migrate unsubscriptions collection to new schema
+
+// The console-stamp module must be installed (not included in package.json)
+
+// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
+
+// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
+// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
+console.log('Starting migrations/api_v3/unsubscriptions.js.');
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+require('babel-register');
+require('babel-polyfill');
+
+let Bluebird = require('bluebird');
+let MongoDB = require('mongodb');
+let nconf = require('nconf');
+let mongoose = require('mongoose');
+let _ = require('lodash');
+let uuid = require('uuid');
+let consoleStamp = require('console-stamp');
+
+// Add timestamps to console messages
+consoleStamp(console);
+
+// Initialize configuration
+require('../../website/server/libs/api-v3/setupNconf')();
+
+let MONGODB_OLD = nconf.get('MONGODB_OLD');
+let MONGODB_NEW = nconf.get('MONGODB_NEW');
+
+let MongoClient = MongoDB.MongoClient;
+
+mongoose.Promise = Bluebird; // otherwise mongoose models won't work
+
+// Load new models
+let EmailUnsubscription = require('../../website/server/models/emailUnsubscription').model;
+
+// To be defined later when MongoClient connects
+let mongoDbOldInstance;
+let oldUnsubscriptionCollection;
+
+let mongoDbNewInstance;
+let newUnsubscriptionCollection;
+
+let BATCH_SIZE = 1000;
+
+let processedUnsubscriptions = 0;
+
+// Only process unsubscriptions that fall in a interval ie -> up to 0000-4000-0000-0000
+let AFTER_UNSUBSCRIPTION_ID = nconf.get('AFTER_UNSUBSCRIPTION_ID');
+let BEFORE_UNSUBSCRIPTION_ID = nconf.get('BEFORE_UNSUBSCRIPTION_ID');
+
+function processUnsubscriptions (afterId) {
+ let processedTasks = 0;
+ let lastUnsubscription = null;
+ let oldUnsubscriptions;
+
+ let query = {};
+
+ if (BEFORE_UNSUBSCRIPTION_ID) {
+ query._id = {$lte: BEFORE_UNSUBSCRIPTION_ID};
+ }
+
+ if ((afterId || AFTER_UNSUBSCRIPTION_ID) && !query._id) {
+ query._id = {};
+ }
+
+ if (afterId) {
+ query._id.$gt = afterId;
+ } else if (AFTER_UNSUBSCRIPTION_ID) {
+ query._id.$gt = AFTER_UNSUBSCRIPTION_ID;
+ }
+
+ let batchInsertUnsubscriptions = newUnsubscriptionCollection.initializeUnorderedBulkOp();
+
+ console.log(`Executing unsubscriptions query.\nMatching unsubscriptions after ${afterId ? afterId : AFTER_UNSUBSCRIPTION_ID} and before ${BEFORE_UNSUBSCRIPTION_ID} (included).`);
+
+ return oldUnsubscriptionCollection
+ .find(query)
+ .sort({_id: 1})
+ .limit(BATCH_SIZE)
+ .toArray()
+ .then(function (oldUnsubscriptionsR) {
+ oldUnsubscriptions = oldUnsubscriptionsR;
+
+ console.log(`Processing ${oldUnsubscriptions.length} unsubscriptions. Already processed ${processedUnsubscriptions} unsubscriptions.`);
+
+ if (oldUnsubscriptions.length === BATCH_SIZE) {
+ lastUnsubscription = oldUnsubscriptions[oldUnsubscriptions.length - 1]._id;
+ }
+
+ oldUnsubscriptions.forEach(function (oldUnsubscription) {
+ oldUnsubscription.email = oldUnsubscription.email.toLowerCase();
+ let newUnsubscription = new EmailUnsubscription(oldUnsubscription);
+
+ batchInsertUnsubscriptions.insert(newUnsubscription.toObject());
+ });
+
+ console.log(`Saving ${oldUnsubscriptions.length} unsubscriptions.`);
+
+ return batchInsertUnsubscriptions.execute();
+ })
+ .then(function () {
+ processedUnsubscriptions += oldUnsubscriptions.length;
+
+ console.log(`Saved ${oldUnsubscriptions.length} unsubscriptions.`);
+
+ if (lastUnsubscription) {
+ return processUnsubscriptions(lastUnsubscription);
+ } else {
+ return console.log('Done!');
+ }
+ });
+}
+
+// Connect to the databases
+Bluebird.all([
+ MongoClient.connect(MONGODB_OLD),
+ MongoClient.connect(MONGODB_NEW),
+])
+ .then(function (result) {
+ let oldInstance = result[0];
+ let newInstance = result[1];
+
+ mongoDbOldInstance = oldInstance;
+ oldUnsubscriptionCollection = mongoDbOldInstance.collection('emailunsubscriptions');
+
+ mongoDbNewInstance = newInstance;
+ newUnsubscriptionCollection = mongoDbNewInstance.collection('emailunsubscriptions');
+
+ console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
+
+ return processUnsubscriptions();
+ })
+ .catch(function (err) {
+ console.error(err.stack || err);
+ });
diff --git a/migrations/archive/api_v3/groups.js b/migrations/archive/api_v3/groups.js
new file mode 100644
index 0000000000..1d1d7e3b0c
--- /dev/null
+++ b/migrations/archive/api_v3/groups.js
@@ -0,0 +1,217 @@
+/*
+ members are not stored anymore
+ invites are not stored anymore
+
+ tavern id and leader must be updated
+*/
+
+// Migrate groups collection to new schema
+// Run AFTER users migration
+
+// The console-stamp module must be installed (not included in package.json)
+
+// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
+
+// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
+// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
+console.log('Starting migrations/api_v3/groups.js.');
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+require('babel-register');
+require('babel-polyfill');
+
+let Bluebird = require('bluebird');
+let MongoDB = require('mongodb');
+let nconf = require('nconf');
+let mongoose = require('mongoose');
+let _ = require('lodash');
+let uuid = require('uuid');
+let consoleStamp = require('console-stamp');
+
+// Add timestamps to console messages
+consoleStamp(console);
+
+// Initialize configuration
+require('../../website/server/libs/api-v3/setupNconf')();
+
+let MONGODB_OLD = nconf.get('MONGODB_OLD');
+let MONGODB_NEW = nconf.get('MONGODB_NEW');
+
+let MongoClient = MongoDB.MongoClient;
+
+mongoose.Promise = Bluebird; // otherwise mongoose models won't work
+
+// Load new models
+let NewGroup = require('../../website/server/models/group').model;
+
+let TAVERN_ID = require('../../website/server/models/group').TAVERN_ID;
+
+// To be defined later when MongoClient connects
+let mongoDbOldInstance;
+let oldGroupCollection;
+
+let mongoDbNewInstance;
+let newGroupCollection;
+let newUserCollection;
+
+let BATCH_SIZE = 1000;
+
+let processedGroups = 0;
+
+// Only process groups that fall in a interval ie -> up to 0000-4000-0000-0000
+let AFTER_GROUP_ID = nconf.get('AFTER_GROUP_ID');
+let BEFORE_GROUP_ID = nconf.get('BEFORE_GROUP_ID');
+
+function processGroups (afterId) {
+ let processedTasks = 0;
+ let lastGroup = null;
+ let oldGroups;
+
+ let query = {};
+
+ if (BEFORE_GROUP_ID) {
+ query._id = {$lte: BEFORE_GROUP_ID};
+ }
+
+ if ((afterId || AFTER_GROUP_ID) && !query._id) {
+ query._id = {};
+ }
+
+ if (afterId) {
+ query._id.$gt = afterId;
+ } else if (AFTER_GROUP_ID) {
+ query._id.$gt = AFTER_GROUP_ID;
+ }
+
+ let batchInsertGroups = newGroupCollection.initializeUnorderedBulkOp();
+
+ console.log(`Executing groups query.\nMatching groups after ${afterId ? afterId : AFTER_GROUP_ID} and before ${BEFORE_GROUP_ID} (included).`);
+
+ return oldGroupCollection
+ .find(query)
+ .sort({_id: 1})
+ .limit(BATCH_SIZE)
+ .toArray()
+ .then(function (oldGroupsR) {
+ oldGroups = oldGroupsR;
+
+ let promises = [];
+
+ console.log(`Processing ${oldGroups.length} groups. Already processed ${processedGroups} groups.`);
+
+ if (oldGroups.length === BATCH_SIZE) {
+ lastGroup = oldGroups[oldGroups.length - 1]._id;
+ }
+
+ oldGroups.forEach(function (oldGroup) {
+ if ((!oldGroup.privacy || oldGroup.privacy === 'private') && (!oldGroup.members || oldGroup.members.length === 0)) return; // delete empty private groups TODO must also delete challenges or this won't work
+
+ oldGroup.members = oldGroup.members || [];
+ oldGroup.memberCount = oldGroup.members ? oldGroup.members.length : 0;
+ oldGroup.challengeCount = oldGroup.challenges ? oldGroup.challenges.length : 0;
+
+ if (oldGroup.balance <= 0) oldGroup.balance = 0;
+ if (!oldGroup.name) oldGroup.name = 'group name';
+ if (!oldGroup.leaderOnly) oldGroup.leaderOnly = {};
+ if (!oldGroup.leaderOnly.challenges) oldGroup.leaderOnly.challenges = false;
+
+ // Tavern
+ if (oldGroup._id === 'habitrpg') {
+ oldGroup._id = TAVERN_ID;
+ oldGroup.leader = '7bde7864-ebc5-4ee2-a4b7-1070d464cdb0'; // Siena Leslie
+ }
+
+ if (!oldGroup.type) {
+ // throw new Error('group.type is required');
+ oldGroup.type = 'guild';
+ }
+
+ if (!oldGroup.leader) {
+ if (oldGroup.members && oldGroup.members.length > 0) {
+ oldGroup.leader = oldGroup.members[0];
+ } else {
+ throw new Error('group.leader is required and no member available!');
+ }
+ }
+
+ if (!oldGroup.privacy) {
+ // throw new Error('group.privacy is required');
+ oldGroup.privacy = 'private';
+ }
+
+ let updateMembers = {};
+
+ if (oldGroup.type === 'guild') {
+ updateMembers.$push = {guilds: oldGroup._id};
+ } else if (oldGroup.type === 'party') {
+ updateMembers.$set = {'party._id': oldGroup._id};
+ }
+
+ if (oldGroup.members) {
+ // Tyler Renelle
+ oldGroup.members.forEach(function (id, index) {
+ if (id === '9') {
+ oldGroup.members[index] = '00000000-0000-4000-9000-000000000000';
+ }
+ });
+
+ promises.push(newUserCollection.updateMany({
+ _id: {$in: oldGroup.members},
+ }, updateMembers, {multi: true}));
+ }
+
+ let newGroup = new NewGroup(oldGroup);
+
+ batchInsertGroups.insert(newGroup.toObject());
+ });
+
+ console.log(`Saving ${oldGroups.length} groups and migrating members to users collection.`);
+
+ promises.push(batchInsertGroups.execute());
+ return Bluebird.all(promises);
+ })
+ .then(function () {
+ processedGroups += oldGroups.length;
+
+ console.log(`Saved ${oldGroups.length} groups and migrated their members to the user collection.`);
+
+ if (lastGroup) {
+ return processGroups(lastGroup);
+ } else {
+ return console.log('Done!');
+ }
+ });
+}
+
+// Connect to the databases
+Bluebird.all([
+ MongoClient.connect(MONGODB_OLD),
+ MongoClient.connect(MONGODB_NEW),
+])
+ .then(function (result) {
+ let oldInstance = result[0];
+ let newInstance = result[1];
+
+ mongoDbOldInstance = oldInstance;
+ oldGroupCollection = mongoDbOldInstance.collection('groups');
+
+ mongoDbNewInstance = newInstance;
+ newGroupCollection = mongoDbNewInstance.collection('groups');
+ newUserCollection = mongoDbNewInstance.collection('users');
+
+ console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
+
+ // First delete the tavern group created by having required the group model
+ return newGroupCollection.deleteOne({_id: TAVERN_ID});
+ })
+ .then(function () {
+ return processGroups();
+ })
+ .catch(function (err) {
+ console.error(err.stack || err);
+ });
diff --git a/migrations/api_v3/indexes.js b/migrations/archive/api_v3/indexes.js
similarity index 100%
rename from migrations/api_v3/indexes.js
rename to migrations/archive/api_v3/indexes.js
diff --git a/migrations/archive/api_v3/users.js b/migrations/archive/api_v3/users.js
new file mode 100644
index 0000000000..1560c9d3dd
--- /dev/null
+++ b/migrations/archive/api_v3/users.js
@@ -0,0 +1,268 @@
+// Migrate users collection to new schema
+// This should run AFTER challenges migration
+
+// The console-stamp module must be installed (not included in package.json)
+
+// It requires two environment variables: MONGODB_OLD and MONGODB_NEW
+
+// Due to some big user profiles it needs more RAM than is allowed by default by v8 (arounf 1.7GB).
+// Run the script with --max-old-space-size=4096 to allow up to 4GB of RAM
+console.log('Starting migrations/api_v3/users.js.');
+
+// IMPORTANT NOTE: this migration was written when we were using version 3 of lodash.
+// We've now upgraded to lodash v4 but the code used in this migration has not been
+// adapted to work with it. Before this migration is used again any lodash method should
+// be checked for compatibility against the v4 changelog and changed if necessary.
+// https://github.com/lodash/lodash/wiki/Changelog#v400
+
+require('babel-register');
+require('babel-polyfill');
+
+let Bluebird = require('bluebird');
+let MongoDB = require('mongodb');
+let nconf = require('nconf');
+let mongoose = require('mongoose');
+let _ = require('lodash');
+let uuid = require('uuid');
+let consoleStamp = require('console-stamp');
+let common = require('../../common');
+let moment = require('moment');
+
+// Add timestamps to console messages
+consoleStamp(console);
+
+// Initialize configuration
+require('../../website/server/libs/api-v3/setupNconf')();
+
+let MONGODB_OLD = nconf.get('MONGODB_OLD');
+let MONGODB_NEW = nconf.get('MONGODB_NEW');
+
+let taskDefaults = common.taskDefaults;
+let MongoClient = MongoDB.MongoClient;
+
+mongoose.Promise = Bluebird; // otherwise mongoose models won't work
+
+// Load new models
+let NewUser = require('../../website/server/models/user').model;
+let NewTasks = require('../../website/server/models/task');
+
+// To be defined later when MongoClient connects
+let mongoDbOldInstance;
+let oldUserCollection;
+
+let mongoDbNewInstance;
+let newUserCollection;
+let newTaskCollection;
+
+let BATCH_SIZE = 1000;
+
+let processedUsers = 0;
+let totoalProcessedTasks = 0;
+
+let challengeTaskWithMatchingId = 0;
+let challengeTaskNoMatchingId = 0;
+
+// Load the new tasks ids for challenges tasks
+let newTasksIds = require('./newTasksIds.json');
+
+// Only process users that fall in a interval ie up to -> 0000-4000-0000-0000
+let AFTER_USER_ID = nconf.get('AFTER_USER_ID');
+let BEFORE_USER_ID = nconf.get('BEFORE_USER_ID');
+
+function processUsers (afterId) {
+ let processedTasks = 0;
+ let lastUser = null;
+ let oldUsers;
+
+ let now = new Date();
+
+ let query = {};
+
+ if (BEFORE_USER_ID) {
+ query._id = {$lte: BEFORE_USER_ID};
+ }
+
+ if ((afterId || AFTER_USER_ID) && !query._id) {
+ query._id = {};
+ }
+
+ if (afterId) {
+ query._id.$gt = afterId;
+ } else if (AFTER_USER_ID) {
+ query._id.$gt = AFTER_USER_ID;
+ }
+
+ let batchInsertTasks = newTaskCollection.initializeUnorderedBulkOp();
+ let batchInsertUsers = newUserCollection.initializeUnorderedBulkOp();
+
+ console.log(`Executing users query.\nMatching users after ${afterId ? afterId : AFTER_USER_ID} and before ${BEFORE_USER_ID} (included).`);
+
+ return oldUserCollection
+ .find(query)
+ .sort({_id: 1})
+ .limit(BATCH_SIZE)
+ .toArray()
+ .then(function (oldUsersR) {
+ oldUsers = oldUsersR;
+
+ console.log(`Processing ${oldUsers.length} users. Already processed ${processedUsers} users and ${totoalProcessedTasks} tasks.`);
+
+ if (oldUsers.length === BATCH_SIZE) {
+ lastUser = oldUsers[oldUsers.length - 1]._id;
+ }
+
+ oldUsers.forEach(function (oldUser) {
+ let oldTasks = oldUser.habits.concat(oldUser.dailys).concat(oldUser.rewards).concat(oldUser.todos);
+ delete oldUser.habits;
+ delete oldUser.dailys;
+ delete oldUser.rewards;
+ delete oldUser.todos;
+
+ delete oldUser.id;
+
+ // spookDust -> spookySparkles
+
+ if (oldUser.achievements && oldUser.achievements.spookDust) {
+ oldUser.achievements.spookySparkles = oldUser.achievements.spookDust;
+ delete oldUser.achievements.spookDust;
+ }
+
+ if (oldUser.items && oldUser.items.special && oldUser.items.special.spookDust) {
+ oldUser.items.special.spookySparkles = oldUser.items.special.spookDust;
+ delete oldUser.items.special.spookDust;
+ }
+
+ if (oldUser.stats && oldUser.stats.buffs && oldUser.stats.buffs.spookySparkles) {
+ oldUser.stats.buffs.spookySparkles = oldUser.stats.buffs.spookDust;
+ delete oldUser.stats.buffs.spookDust;
+ }
+
+ // end spookDust -> spookySparkles
+
+ oldUser.tags = oldUser.tags.map(function (tag) {
+ return {
+ id: tag.id,
+ name: tag.name || 'tag name',
+ challenge: tag.challenge,
+ };
+ });
+
+ if (oldUser._id === '9') { // Tyler Renelle
+ oldUser._id = '00000000-0000-4000-9000-000000000000';
+ }
+
+ let newUser = new NewUser(oldUser);
+ let isSubscribed = newUser.isSubscribed();
+
+ oldTasks.forEach(function (oldTask) {
+ oldTask._id = uuid.v4(); // create a new unique uuid
+ oldTask.userId = newUser._id;
+ oldTask._legacyId = oldTask.id; // store the old task id
+ delete oldTask.id;
+
+ oldTask.challenge = oldTask.challenge || {};
+ if (oldTask.challenge.id) {
+ if (oldTask.challenge.broken) {
+ oldTask.challenge.taskId = oldTask._legacyId;
+ } else {
+ let newId = newTasksIds[`${oldTask._legacyId }-${ oldTask.challenge.id}`];
+
+ // Challenges' tasks ids changed
+ if (!newId && !oldTask.challenge.broken) {
+ challengeTaskNoMatchingId++;
+ oldTask.challenge.taskId = oldTask._legacyId;
+ oldTask.challenge.broken = 'CHALLENGE_TASK_NOT_FOUND';
+ } else {
+ challengeTaskWithMatchingId++;
+ oldTask.challenge.taskId = newId;
+ }
+ }
+ }
+
+ // Delete old completed todos
+ if (oldTask.type === 'todo' && oldTask.completed && (!oldTask.challenge.id || oldTask.challenge.broken)) {
+ if (moment(now).subtract(isSubscribed ? 90 : 30, 'days').toDate() > moment(oldTask.dateCompleted).toDate()) {
+ return;
+ }
+ }
+
+ oldTask.createdAt = oldTask.dateCreated;
+
+ if (!oldTask.text) oldTask.text = 'task text'; // required
+ oldTask.tags = _.map(oldTask.tags, function (tagPresent, tagId) {
+ return tagPresent && tagId;
+ }).filter(function (tag) {
+ return tag !== false;
+ });
+
+ if (oldTask.type !== 'todo' || oldTask.type === 'todo' && !oldTask.completed) {
+ newUser.tasksOrder[`${oldTask.type}s`].push(oldTask._id);
+ }
+
+ let allTasksFields = ['_id', 'type', 'text', 'notes', 'tags', 'value', 'priority', 'attribute', 'challenge', 'reminders', 'userId', '_legacyId', 'createdAt'];
+ // using mongoose models is too slow
+ if (oldTask.type === 'habit') {
+ oldTask = _.pick(oldTask, allTasksFields.concat(['history', 'up', 'down']));
+ } else if (oldTask.type === 'daily') {
+ oldTask = _.pick(oldTask, allTasksFields.concat(['completed', 'collapseChecklist', 'checklist', 'history', 'frequency', 'everyX', 'startDate', 'repeat', 'streak']));
+ } else if (oldTask.type === 'todo') {
+ oldTask = _.pick(oldTask, allTasksFields.concat(['completed', 'collapseChecklist', 'checklist', 'date', 'dateCompleted']));
+ } else if (oldTask.type === 'reward') {
+ oldTask = _.pick(oldTask, allTasksFields);
+ } else {
+ throw new Error('Task with no or invalid type!');
+ }
+
+ batchInsertTasks.insert(taskDefaults(oldTask));
+ processedTasks++;
+ });
+
+ batchInsertUsers.insert(newUser.toObject());
+ });
+
+ console.log(`Saving ${oldUsers.length} users and ${processedTasks} tasks.`);
+
+ return Bluebird.all([
+ batchInsertUsers.execute(),
+ batchInsertTasks.execute(),
+ ]);
+ })
+ .then(function () {
+ totoalProcessedTasks += processedTasks;
+ processedUsers += oldUsers.length;
+
+ console.log(`Saved ${oldUsers.length} users and their tasks.`);
+ console.log('Challenges\' tasks no matching id: ', challengeTaskNoMatchingId);
+ console.log('Challenges\' tasks with matching id: ', challengeTaskWithMatchingId);
+
+ if (lastUser) {
+ return processUsers(lastUser);
+ } else {
+ return console.log('Done!');
+ }
+ });
+}
+
+// Connect to the databases
+Bluebird.all([
+ MongoClient.connect(MONGODB_OLD),
+ MongoClient.connect(MONGODB_NEW),
+])
+ .then(function (result) {
+ let oldInstance = result[0];
+ let newInstance = result[1];
+
+ mongoDbOldInstance = oldInstance;
+ oldUserCollection = mongoDbOldInstance.collection('users');
+
+ mongoDbNewInstance = newInstance;
+ newUserCollection = mongoDbNewInstance.collection('users');
+ newTaskCollection = mongoDbNewInstance.collection('tasks');
+
+ console.log(`Connected with MongoClient to ${MONGODB_OLD} and ${MONGODB_NEW}.`);
+
+ return processUsers();
+ })
+ .catch(function (err) {
+ console.error(err.stack || err);
+ });
diff --git a/migrations/manual_password_reset.js b/migrations/archive/manual_password_reset.js
similarity index 54%
rename from migrations/manual_password_reset.js
rename to migrations/archive/manual_password_reset.js
index 6e84673eaa..94262a17ec 100644
--- a/migrations/manual_password_reset.js
+++ b/migrations/archive/manual_password_reset.js
@@ -4,11 +4,11 @@
// IMPORTANT: this script isn't updated to use the new password encryption that uses bcrypt
// using it will break accounts and should not be used until upgraded
-var nconf = require('nconf'),
+let nconf = require('nconf'),
path = require('path');
nconf.argv().env().file('user', path.join(path.resolve(__dirname, '../config.json')));
-var Users = require('mongoskin').db(nconf.get("PRODUCTION_DB:URL"), nconf.get("PRODUCTION_DB").CREDS).collection('users'),
+let Users = require('mongoskin').db(nconf.get('PRODUCTION_DB:URL'), nconf.get('PRODUCTION_DB').CREDS).collection('users'),
async = require('async'),
utils = require('../website/server/utils'),
salt = utils.makeSalt(),
@@ -16,23 +16,23 @@ var Users = require('mongoskin').db(nconf.get("PRODUCTION_DB:URL"), nconf.get("P
hashed_password = utils.encryptPassword(newPassword, salt);
async.waterfall([
- function(cb){
- Users.findItems({'auth.local.email':nconf.get("EMAIL")}, {auth:1}, cb);
+ function (cb) {
+ Users.findItems({'auth.local.email': nconf.get('EMAIL')}, {auth: 1}, cb);
},
- function(users, cb){
- if (users.length<1) return cb("User not found for that email");
- if (users.length>1) return cb("Multiple users for that email");
- var user = users[0];
- console.dir({username:user.auth.local.username, password: newPassword});
- Users.update({_id:user._id}, {
- $set:{
+ function (users, cb) {
+ if (users.length < 1) return cb('User not found for that email');
+ if (users.length > 1) return cb('Multiple users for that email');
+ let user = users[0];
+ console.dir({username: user.auth.local.username, password: newPassword});
+ Users.update({_id: user._id}, {
+ $set: {
'auth.local.salt': salt,
'auth.local.hashed_password': hashed_password,
- 'preferences.sleep': true
- }
- }, cb)
- }
-], function(err){
+ 'preferences.sleep': true,
+ },
+ }, cb);
+ },
+], function (err) {
if (err) console.log(err);
- process.exit()
+ process.exit();
});
\ No newline at end of file
diff --git a/migrations/archive/metrics.js b/migrations/archive/metrics.js
new file mode 100644
index 0000000000..866c0bfc3a
--- /dev/null
+++ b/migrations/archive/metrics.js
@@ -0,0 +1,85 @@
+// node habitrpg ./migrations/metrics.js
+
+let EXPORT_EMAILS = true;
+let mongo = require('mongoskin');
+let csv = require('csv');
+let _ = require('lodash');
+let moment = require('moment');
+let db = mongo.db('localhost:27017/habitrpg?auto_reconnect');
+let twoWeeksAgo = moment().subtract(14, 'days');
+let angularRewrite = moment('07/09/2013');
+
+let query = {auth: {$exists: 1}};
+let fields = {lastCron: 1, 'history.exp': 1, 'auth.timestamps': 1, 'auth.local.email': 1};
+db.collection('users').find(query, fields).toArray(function (err, items) {
+ if (err) return console.error({err});
+ let stats = {total: _.size(items), lostToDerby: 0, isActive: 0};
+ let emails = [];
+ _.each(items, function (item) {
+ // if (!item.history || !item.history.exp) console.log(item._id)
+
+ // var hasBeenActive = item.history && item.history.exp && item.history.exp.length > 7;
+ let hasBeenActive = item.auth.timestamps && item.auth.timestamps.created &&
+ Math.abs(moment(item.lastCron).diff(item.auth.timestamps.created, 'd')) > 14;
+
+ if (/* hasBeenActive && */moment(item.lastCron).isBefore(angularRewrite)) {
+ stats.lostToDerby++;
+ if (item.auth.local)
+ emails.push([item.auth.local.email]);
+ // Facebook emails. Kinda dirty, and there's only ~30 available fb emails anyway.
+ // } else if (item.auth.facebook && item.auth.facebook.email) {
+ // emails.push([item.auth.facebook.email])
+ // } else if (item.auth.facebook && item.auth.facebook.emails && item.auth.facebook.emails[0] && !!item.auth.facebook.emails[0].value) {
+ // emails.push([item.auth.facebook.emails[0].value])
+ }
+ if (hasBeenActive && moment(item.lastCron).isAfter(twoWeeksAgo)) {
+ stats.isActive++;
+ }
+ });
+ stats.emails = _.size(emails);
+ console.log(stats);
+
+ if (EXPORT_EMAILS)
+ csv().from.array(emails).to.path(`${__dirname}/emails.csv`);
+});
+
+/*
+load('./node_modules/moment/moment.js');
+var today = +new Date,
+ twoWeeksAgo = +moment().subtract(14, 'days');
+
+ corrupt = {
+ $or: [
+ {lastCron: {$exists:false}},
+ {lastCron: 'new'}
+ ]
+ }
+
+ un_registered = {
+ "auth.local": {$exists: false},
+ "auth.facebook": {$exists: false}
+ },
+
+ registered = {
+ $or: [
+ { 'auth.local': { $exists: true }},
+ { 'auth.facebook': { $exists: true }}
+ ]
+ },
+
+ active = {
+ $or: [
+ { 'auth.local': { $exists: true }},
+ { 'auth.facebook': { $exists: true }}
+ ],
+ $where: function(){
+ return this.history && this.history.exp && this.history.exp.length > 7;
+ },
+ 'lastCron': {$gt: twoWeeksAgo}
+ };
+
+print('corrupt: ' + db.users.count(corrupt));
+print('unregistered: ' + db.users.count(un_registered));
+print('registered: ' + db.users.count(registered));
+print('active: ' + db.users.count(active));
+*/
\ No newline at end of file
diff --git a/migrations/challenges/sync-all-challenges.js b/migrations/challenges/sync-all-challenges.js
index 4cb9d00088..3be7a74bb0 100644
--- a/migrations/challenges/sync-all-challenges.js
+++ b/migrations/challenges/sync-all-challenges.js
@@ -4,14 +4,14 @@ import { model as Challenges } from '../../website/server/models/challenge';
import { model as User } from '../../website/server/models/user';
async function syncChallengeToMembers (challenges) {
- let challengSyncPromises = challenges.map(async function (challenge) {
+ let challengSyncPromises = challenges.map(async (challenge) => {
let users = await User.find({
// _id: '',
challenges: challenge._id,
}).exec();
let promises = [];
- users.forEach(function (user) {
+ users.forEach((user) => {
promises.push(challenge.syncToUser(user));
promises.push(challenge.save());
promises.push(user.save());
@@ -42,6 +42,6 @@ async function syncChallenges (lastChallengeDate) {
let lastChallenge = challengesFound[challengesFound.length - 1];
if (lastChallenge) syncChallenges(lastChallenge.createdAt);
return syncedChallenges;
-};
+}
module.exports = syncChallenges;
diff --git a/migrations/command-line/.eslintrc b/migrations/command-line/.eslintrc
new file mode 100644
index 0000000000..49551e8040
--- /dev/null
+++ b/migrations/command-line/.eslintrc
@@ -0,0 +1,10 @@
+{
+ "root": false,
+ "globals": {
+ "db": true,
+ "moment": true,
+ "print": true,
+ "printjson": true,
+ "_": true,
+ },
+}
diff --git a/migrations/command-line/apology_gems.js b/migrations/command-line/apology_gems.js
new file mode 100644
index 0000000000..347a63d141
--- /dev/null
+++ b/migrations/command-line/apology_gems.js
@@ -0,0 +1 @@
+db.users.update({_id: {$in: ['']}}, {$inc: {balance: 0.5}}, {multi: true});
\ No newline at end of file
diff --git a/migrations/cancelSubscription.js b/migrations/command-line/cancelSubscription.js
similarity index 77%
rename from migrations/cancelSubscription.js
rename to migrations/command-line/cancelSubscription.js
index 38a5fe318d..f823bed40f 100644
--- a/migrations/cancelSubscription.js
+++ b/migrations/command-line/cancelSubscription.js
@@ -4,8 +4,8 @@
// the FAQ (http://goo.gl/1uoPGQ) they insist...
db.users.update(
- {_id:''},
+ {_id: ''},
{$set: {
- 'purchased.plan.dateTerminated': moment().add('month',1).toDate()
+ 'purchased.plan.dateTerminated': moment().add('month', 1).toDate(),
}}
);
\ No newline at end of file
diff --git a/migrations/command-line/contribs_plan.js b/migrations/command-line/contribs_plan.js
new file mode 100644
index 0000000000..548ff6f18f
--- /dev/null
+++ b/migrations/command-line/contribs_plan.js
@@ -0,0 +1,23 @@
+// Give contrib.level 7+ free subscription for life
+db.users.update(
+
+ {
+ 'contributor.level': {$gte: 7},
+ 'purchased.plan.customerId': null,
+ },
+
+ {
+ $set: {
+ 'purchased.plan': {
+ planId: 'basic',
+ customerId: 'habitrpg',
+ dateCreated: new Date(),
+ dateUpdated: new Date(),
+ gemsBought: 0,
+ },
+ },
+ },
+
+ {multi: true}
+
+);
\ No newline at end of file
diff --git a/migrations/current_period_end.js b/migrations/command-line/current_period_end.js
similarity index 52%
rename from migrations/current_period_end.js
rename to migrations/command-line/current_period_end.js
index 31e33e4a79..56c9e8b45d 100644
--- a/migrations/current_period_end.js
+++ b/migrations/command-line/current_period_end.js
@@ -1,5 +1,5 @@
// mongo habitrpg ./node_modules/moment/moment.js ./migrations/current_period_end.js
db.users.update(
- {_id:''},
- {$set:{'purchased.plan.dateTerminated':moment().add({days:7}).toDate()}}
-)
\ No newline at end of file
+ {_id: ''},
+ {$set: {'purchased.plan.dateTerminated': moment().add({days: 7}).toDate()}}
+);
\ No newline at end of file
diff --git a/migrations/duplicatedTasksFindAndRemove.js b/migrations/command-line/duplicatedTasksFindAndRemove.js
similarity index 75%
rename from migrations/duplicatedTasksFindAndRemove.js
rename to migrations/command-line/duplicatedTasksFindAndRemove.js
index a6288efc4a..2dcdb10e5c 100644
--- a/migrations/duplicatedTasksFindAndRemove.js
+++ b/migrations/command-line/duplicatedTasksFindAndRemove.js
@@ -39,51 +39,49 @@
// needed. Do not miss any of them!
-var uuid='30fb2640-7121-4968-ace5-f385e60ea6c5';
+let uuid = '30fb2640-7121-4968-ace5-f385e60ea6c5';
db.users.aggregate([
{$match: {
- '_id': uuid
+ _id: uuid,
}},
{$project: {
- '_id':0, 'todos':1
+ _id: 0, todos: 1,
}},
{$unwind: '$todos'},
{$group: {
_id: { taskid: '$todos.id' },
- count: { $sum: 1 }
+ count: { $sum: 1 },
}},
{$match: {
- count: { $gt: 1 }
+ count: { $gt: 1 },
}},
{$project: {
- '_id.taskid':1,
+ '_id.taskid': 1,
}},
{$group: {
_id: { taskid: '$todos.id' },
- troublesomeIds: { $addToSet: "$_id.taskid" },
+ troublesomeIds: { $addToSet: '$_id.taskid' },
}},
{$project: {
- '_id':0,
- troublesomeIds:1,
+ _id: 0,
+ troublesomeIds: 1,
}},
-]).forEach(
- function(data) {
- // print( "\n" ); printjson(data);
- data.troublesomeIds.forEach( function(taskid) {
- print('non-unique task: ' + taskid);
- db.users.update({
- '_id': uuid,
- 'todos': { $elemMatch: { id: taskid } }
- },{
- $set: { "todos.$.id" : 'de666' }
- });
+]).forEach((data) => {
+ // print( "\n" ); printjson(data);
+ data.troublesomeIds.forEach((taskid) => {
+ print(`non-unique task: ${ taskid}`);
+ db.users.update({
+ _id: uuid,
+ todos: { $elemMatch: { id: taskid } },
+ }, {
+ $set: { 'todos.$.id': 'de666' },
});
- }
-);
+ });
+});
db.users.update(
- {'_id': uuid},
+ {_id: uuid},
{$pull: { todos: { id: 'de666' } } },
{multi: false }
);
diff --git a/migrations/facebook_to_local.js b/migrations/command-line/facebook_to_local.js
similarity index 51%
rename from migrations/facebook_to_local.js
rename to migrations/command-line/facebook_to_local.js
index 0aca5573b1..de707c4f05 100644
--- a/migrations/facebook_to_local.js
+++ b/migrations/command-line/facebook_to_local.js
@@ -1,10 +1,10 @@
-var oldId = "",
- newId = "",
- newUser = db.users.findOne({_id: newId})
+let oldId = '';
+let newId = '';
+let newUser = db.users.findOne({_id: newId});
-db.users.update({_id: oldId}, {$set:{auth: newUser.auth}});
+db.users.update({_id: oldId}, {$set: {auth: newUser.auth}});
// remove the auth on the new user (which is a template account). The account will be preened automatically later,
// this allows us to keep the account around a few days in case there was a mistake
-db.users.update({_id: newId}, {$unset:{auth:1}});
+db.users.update({_id: newId}, {$unset: {auth: 1}});
diff --git a/migrations/find_unique_user.js b/migrations/command-line/find_unique_user.js
similarity index 74%
rename from migrations/find_unique_user.js
rename to migrations/command-line/find_unique_user.js
index 014933ac1f..378c6c8708 100644
--- a/migrations/find_unique_user.js
+++ b/migrations/command-line/find_unique_user.js
@@ -5,8 +5,8 @@
* Past in the text of a unique habit here to find the user, then you can restore their UUID
*/
-db.users.find().forEach(function(user){
+db.users.find().forEach((user) => {
user.tasks = user.habits.concat(user.dailys).concat(user.todos).concat(user.rewards);
- var found = _.some(user.tasks, {text: ""})
- if (found) printjson({id:user._id, auth:user.auth});
-})
\ No newline at end of file
+ let found = _.some(user.tasks, {text: ''});
+ if (found) printjson({id: user._id, auth: user.auth});
+});
\ No newline at end of file
diff --git a/migrations/freeMonth.js b/migrations/command-line/freeMonth.js
similarity index 65%
rename from migrations/freeMonth.js
rename to migrations/command-line/freeMonth.js
index cd2c501149..2b9b19cccd 100644
--- a/migrations/freeMonth.js
+++ b/migrations/command-line/freeMonth.js
@@ -1,16 +1,16 @@
// mongo habitrpg ./node_modules/moment/moment.js ./migrations/freeMonth.js
db.users.update(
- {_id:''},
- {$set:{
- 'purchased.plan.customerId':'temporary',
- 'purchased.plan.paymentMethod':'Stripe',
- 'purchased.plan.planId':'basic_earned',
- 'purchased.plan.dateTerminated': moment().add('month',1).toDate()
+ {_id: ''},
+ {$set: {
+ 'purchased.plan.customerId': 'temporary',
+ 'purchased.plan.paymentMethod': 'Stripe',
+ 'purchased.plan.planId': 'basic_earned',
+ 'purchased.plan.dateTerminated': moment().add('month', 1).toDate(),
}}
-)
-//var m = 12;
-//db.users.update(
+);
+// var m = 12;
+// db.users.update(
// {_id:''},
// {$set:{'purchased.plan':{
// planId: 'basic_'+m+'mo',
@@ -29,4 +29,4 @@ db.users.update(
// trinkets: m/3
// }
// }}}
-//)
\ No newline at end of file
+// )
\ No newline at end of file
diff --git a/migrations/command-line/habitica_day.js b/migrations/command-line/habitica_day.js
new file mode 100644
index 0000000000..9e4fd3af5b
--- /dev/null
+++ b/migrations/command-line/habitica_day.js
@@ -0,0 +1,5 @@
+db.users.update(
+ {},
+ {$inc: {'achievements.habiticaDays': 1}},
+ {multi: 1}
+);
diff --git a/migrations/command-line/missing_gems.js b/migrations/command-line/missing_gems.js
new file mode 100644
index 0000000000..080bfbd687
--- /dev/null
+++ b/migrations/command-line/missing_gems.js
@@ -0,0 +1 @@
+db.users.update({_id: ''}, {$inc: {balance: 5}});
\ No newline at end of file
diff --git a/migrations/contribs_plan.js b/migrations/contribs_plan.js
deleted file mode 100644
index a08bd93f76..0000000000
--- a/migrations/contribs_plan.js
+++ /dev/null
@@ -1,23 +0,0 @@
-// Give contrib.level 7+ free subscription for life
-db.users.update(
-
- {
- 'contributor.level':{$gte:7},
- 'purchased.plan.customerId':null
- },
-
- {
- $set: {
- 'purchased.plan':{
- planId: 'basic',
- customerId: 'habitrpg',
- dateCreated: new Date,
- dateUpdated: new Date,
- gemsBought: 0
- }
- }
- },
-
- {multi:true}
-
-)
\ No newline at end of file
diff --git a/migrations/groups/add-unlimited-subscription.js b/migrations/groups/add-unlimited-subscription.js
index 4a7eb27a02..43fbe55b5d 100644
--- a/migrations/groups/add-unlimited-subscription.js
+++ b/migrations/groups/add-unlimited-subscription.js
@@ -1,6 +1,8 @@
-var migrationName = 'AddUnlimitedSubscription';
-var authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
-var authorUuid = ''; //... own data is done
+/*
+let migrationName = 'AddUnlimitedSubscription';
+let authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
+let authorUuid = ''; // ... own data is done
+*/
/*
* This migrations will add a free subscription to a specified group
@@ -11,30 +13,30 @@ import { model as Group } from '../../website/server/models/group';
// @TODO: this should probably be a GroupManager library method
async function addUnlimitedSubscription (groupId, dateTerminated) {
- let group = await Group.findById(groupId);
+ let group = await Group.findOne({_id: groupId});
- group.purchased.plan.customerId = "group-unlimited";
- group.purchased.plan.dateCreated = new Date();
- group.purchased.plan.dateUpdated = new Date();
- group.purchased.plan.paymentMethod = "Group Unlimited";
- group.purchased.plan.planId = "group_monthly";
- group.purchased.plan.dateTerminated = null;
- if (dateTerminated) {
- let dateToEnd = moment(dateTerminated).toDate();
- group.purchased.plan.dateTerminated = dateToEnd;
- }
- // group.purchased.plan.owner = ObjectId();
- group.purchased.plan.subscriptionId = "";
+ group.purchased.plan.customerId = 'group-unlimited';
+ group.purchased.plan.dateCreated = new Date();
+ group.purchased.plan.dateUpdated = new Date();
+ group.purchased.plan.paymentMethod = 'Group Unlimited';
+ group.purchased.plan.planId = 'group_monthly';
+ group.purchased.plan.dateTerminated = null;
+ if (dateTerminated) {
+ let dateToEnd = moment(dateTerminated).toDate();
+ group.purchased.plan.dateTerminated = dateToEnd;
+ }
+ // group.purchased.plan.owner = ObjectId();
+ group.purchased.plan.subscriptionId = '';
- return group.save();
-};
+ return group.save();
+}
module.exports = async function addUnlimitedSubscriptionCreator () {
- let groupId = process.argv[2];
+ let groupId = process.argv[2];
- if (!groupId) throw Error('Group ID is required');
+ if (!groupId) throw Error('Group ID is required');
- let dateTerminated = process.argv[3];
+ let dateTerminated = process.argv[3];
- let result = await addUnlimitedSubscription(groupId, dateTerminated);
+ await addUnlimitedSubscription(groupId, dateTerminated);
};
diff --git a/migrations/groups/create-group.js b/migrations/groups/create-group.js
index 79a4c03e63..d1cedcc4fc 100644
--- a/migrations/groups/create-group.js
+++ b/migrations/groups/create-group.js
@@ -5,28 +5,27 @@ import { model as User } from '../../website/server/models/user';
// @TODO: this should probably be a GroupManager library method
async function createGroup (name, privacy, type, leaderId) {
- let user = await User.findById(leaderId);
-
- let group = new Group({
- name,
- privacy,
- type,
- });
+ let user = await User.findOne({_id: leaderId});
- group.leader = user._id;
- user.guilds.push(group._id);
+ let group = new Group({
+ name,
+ privacy,
+ type,
+ });
- return Bluebird.all([group.save(), user.save()]);
-};
+ group.leader = user._id;
+ user.guilds.push(group._id);
+
+ return Bluebird.all([group.save(), user.save()]);
+}
module.exports = async function groupCreator () {
- let name = process.argv[2];
- let privacy = process.argv[3];
- let type = process.argv[4];
- let leaderId = process.argv[5];
+ let name = process.argv[2];
+ let privacy = process.argv[3];
+ let type = process.argv[4];
+ let leaderId = process.argv[5];
- let result = await createGroup(name, privacy, type, leaderId)
+ await createGroup(name, privacy, type, leaderId);
};
-
diff --git a/migrations/groups/habitrpg-jackalopes.js b/migrations/groups/habitrpg-jackalopes.js
index de7df3eb49..50c6da4673 100644
--- a/migrations/groups/habitrpg-jackalopes.js
+++ b/migrations/groups/habitrpg-jackalopes.js
@@ -1,4 +1,4 @@
-var migrationName = 'Jackalopes for Unlimited Subscribers';
+/* let migrationName = 'Jackalopes for Unlimited Subscribers'; */
/*
* This migration will find users with unlimited subscriptions who are also eligible for Jackalope mounts, and award them
@@ -7,16 +7,15 @@ import Bluebird from 'bluebird';
import { model as Group } from '../../website/server/models/group';
import { model as User } from '../../website/server/models/user';
-import * as payments from '../../website/server/libs/payments';
async function handOutJackalopes () {
let promises = [];
let cursor = User.find({
- 'purchased.plan.customerId':'habitrpg',
+ 'purchased.plan.customerId': 'habitrpg',
}).cursor();
- cursor.on('data', async function(user) {
- console.log('User: ' + user._id);
+ cursor.on('data', async (user) => {
+ console.log(`User: ${ user._id}`);
let groupList = [];
if (user.party._id) groupList.push(user.party._id);
@@ -24,23 +23,23 @@ async function handOutJackalopes () {
let subscribedGroup =
await Group.findOne({
- '_id': {$in: groupList},
+ _id: {$in: groupList},
'purchased.plan.planId': 'group_monthly',
'purchased.plan.dateTerminated': null,
},
- {'_id':1}
- );
+ {_id: 1}
+ );
if (subscribedGroup) {
- User.update({'_id':user._id},{$set:{'items.mounts.Jackalope-RoyalPurple':true}}).exec();
+ User.update({_id: user._id}, {$set: {'items.mounts.Jackalope-RoyalPurple': true}}).exec();
promises.push(user.save());
}
});
- cursor.on('close', async function() {
+ cursor.on('close', async () => {
console.log('done');
return await Bluebird.all(promises);
});
-};
+}
module.exports = handOutJackalopes;
diff --git a/migrations/groups/update-groups-with-group-plans.js b/migrations/groups/update-groups-with-group-plans.js
index f217d54031..921c9bbb99 100644
--- a/migrations/groups/update-groups-with-group-plans.js
+++ b/migrations/groups/update-groups-with-group-plans.js
@@ -1,6 +1,8 @@
-var migrationName = 'ResyncGroupPlanMembers';
-var authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
-var authorUuid = ''; //... own data is done
+/*
+let migrationName = 'ResyncGroupPlanMembers';
+let authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
+let authorUuid = ''; // ... own data is done
+*/
/*
* This migrations will iterate through all groups with a group plan a subscription and resync the free
@@ -20,14 +22,14 @@ async function updateGroupsWithGroupPlans () {
let promises = [];
- cursor.on('data', function(group) {
+ cursor.on('data', (group) => {
promises.push(payments.addSubscriptionToGroupUsers(group));
- promises.push(group.save())
+ promises.push(group.save());
});
- cursor.on('close', async function() {
+ cursor.on('close', async () => {
return await Bluebird.all(promises);
});
-};
+}
module.exports = updateGroupsWithGroupPlans;
diff --git a/migrations/habitica_day.js b/migrations/habitica_day.js
deleted file mode 100644
index 6e352f6f06..0000000000
--- a/migrations/habitica_day.js
+++ /dev/null
@@ -1,5 +0,0 @@
-db.users.update(
- {},
- {$inc:{'achievements.habiticaDays':1}},
- {multi:1}
-);
diff --git a/migrations/metrics.js b/migrations/metrics.js
deleted file mode 100644
index 523aab9113..0000000000
--- a/migrations/metrics.js
+++ /dev/null
@@ -1,86 +0,0 @@
-// node habitrpg ./migrations/metrics.js
-
-var EXPORT_EMAILS = true;
-var mongo = require('mongoskin');
-var csv = require('csv');
-var _ = require('lodash');
-var moment = require('moment');
-var db = mongo.db('localhost:27017/habitrpg?auto_reconnect');
-var twoWeeksAgo = moment().subtract(14, 'days');
-var angularRewrite = moment('07/09/2013');
-
-var query = {auth: {'$exists':1}};
-var fields = {lastCron:1, 'history.exp':1, 'auth.timestamps':1, 'auth.local.email':1};
-db.collection('users').find(query, fields).toArray(function(err, items) {
- if (err) return console.error({err:err});
- var stats = {total: _.size(items), lostToDerby: 0, isActive: 0};
- var emails = [];
- _.each(items, function(item) {
- //if (!item.history || !item.history.exp) console.log(item._id)
-
- //var hasBeenActive = item.history && item.history.exp && item.history.exp.length > 7;
- var hasBeenActive = item.auth.timestamps && item.auth.timestamps.created &&
- (Math.abs(moment(item.lastCron).diff(item.auth.timestamps.created, 'd')) > 14);
-
- if (/*hasBeenActive && */moment(item.lastCron).isBefore(angularRewrite)) {
- stats.lostToDerby++;
- if (item.auth.local)
- emails.push([item.auth.local.email]);
- // Facebook emails. Kinda dirty, and there's only ~30 available fb emails anyway.
-// } else if (item.auth.facebook && item.auth.facebook.email) {
-// emails.push([item.auth.facebook.email])
-// } else if (item.auth.facebook && item.auth.facebook.emails && item.auth.facebook.emails[0] && !!item.auth.facebook.emails[0].value) {
-// emails.push([item.auth.facebook.emails[0].value])
- }
- if (hasBeenActive && moment(item.lastCron).isAfter(twoWeeksAgo)) {
- stats.isActive++;
- }
-
- })
- stats.emails = _.size(emails);
- console.log(stats);
-
- if (EXPORT_EMAILS)
- csv().from.array(emails).to.path(__dirname+'/emails.csv')
-});
-
-/*
-load('./node_modules/moment/moment.js');
-var today = +new Date,
- twoWeeksAgo = +moment().subtract(14, 'days');
-
- corrupt = {
- $or: [
- {lastCron: {$exists:false}},
- {lastCron: 'new'}
- ]
- }
-
- un_registered = {
- "auth.local": {$exists: false},
- "auth.facebook": {$exists: false}
- },
-
- registered = {
- $or: [
- { 'auth.local': { $exists: true }},
- { 'auth.facebook': { $exists: true }}
- ]
- },
-
- active = {
- $or: [
- { 'auth.local': { $exists: true }},
- { 'auth.facebook': { $exists: true }}
- ],
- $where: function(){
- return this.history && this.history.exp && this.history.exp.length > 7;
- },
- 'lastCron': {$gt: twoWeeksAgo}
- };
-
-print('corrupt: ' + db.users.count(corrupt));
-print('unregistered: ' + db.users.count(un_registered));
-print('registered: ' + db.users.count(registered));
-print('active: ' + db.users.count(active));
-*/
\ No newline at end of file
diff --git a/migrations/migration-runner.js b/migrations/migration-runner.js
index 2b030b88e6..59a2a32a27 100644
--- a/migrations/migration-runner.js
+++ b/migrations/migration-runner.js
@@ -1,13 +1,13 @@
-require("babel-register");
-require("babel-polyfill");
+require('babel-register');
+require('babel-polyfill');
// This file must use ES5, everything required can be in ES6
function setUpServer () {
- var nconf = require('nconf');
- var mongoose = require('mongoose');
- var Bluebird = require('bluebird');
- var setupNconf = require('../website/server/libs/setupNconf');
+ const nconf = require('nconf'); // eslint-disable-line global-require, no-unused-vars
+ const mongoose = require('mongoose'); // eslint-disable-line global-require, no-unused-vars
+ const Bluebird = require('bluebird'); // eslint-disable-line global-require, no-unused-vars
+ const setupNconf = require('../website/server/libs/setupNconf'); // eslint-disable-line global-require
setupNconf();
// We require src/server and npt src/index because
// 1. nconf is already setup
diff --git a/migrations/missing_gems.js b/migrations/missing_gems.js
deleted file mode 100644
index 78ff37ed1d..0000000000
--- a/migrations/missing_gems.js
+++ /dev/null
@@ -1 +0,0 @@
-db.users.update({_id:''},{$inc:{balance:5}});
\ No newline at end of file
diff --git a/migrations/mystery_items.js b/migrations/mystery_items.js
deleted file mode 100644
index 28da1c7ed6..0000000000
--- a/migrations/mystery_items.js
+++ /dev/null
@@ -1,51 +0,0 @@
-var UserNotification = require('../website/server/models/userNotification').model
-
-var _id = '';
-
-var items = ['back_mystery_201801','headAccessory_mystery_201801']
-
-var update = {
- $addToSet: {
- 'purchased.plan.mysteryItems':{
- $each: items,
- }
- },
- $push: {
- notifications: (new UserNotification({
- type: 'NEW_MYSTERY_ITEMS',
- data: {
- items: items,
- },
- })).toJSON(),
- },
-};
-
-/*var update = {
- $set:{
- 'purchased.plan':{
- customerId: "",
- dateCreated: new Date(),
- dateTerminated: null,
- dateUpdated:new Date(),
- gemsBought: 0,
- mysteryItems: [],
- paymentMethod: "Paypal",
- planId : "basic_earned"
- }
- }
-};*/
-
-if (_id) {
- // singular (missing items)
- db.users.update({_id: _id}, update);
-} else {
- // multiple (once @ start of event)
- db.users.update({
- 'purchased.plan.customerId': { $ne: null },
- $or: [
- { 'purchased.plan.dateTerminated': { $gte: new Date() } },
- { 'purchased.plan.dateTerminated': { $exists: false } },
- { 'purchased.plan.dateTerminated': { $eq: null } }
- ]
- }, update, { multi: true });
-}
diff --git a/migrations/new_stuff.js b/migrations/new_stuff.js
index 9abcbc32a1..3ee124ab6b 100644
--- a/migrations/new_stuff.js
+++ b/migrations/new_stuff.js
@@ -1,41 +1,41 @@
-var migrationName = 'new_stuff.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+/* let migrationName = 'new_stuff.js'; */
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* set the newStuff flag in all user accounts so they see a Bailey message
*/
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
- 'flags.newStuff': {$ne:true},
+ let query = {
+ 'flags.newStuff': {$ne: true},
};
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
sort: {_id: 1},
limit: 250,
- fields: [] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ fields: [], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch((err) => {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -44,37 +44,42 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(() => {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var set = {'flags.newStuff': true};
+ let set = {'flags.newStuff': true};
- dbUsers.update({_id: user._id}, {$set:set});
+ dbUsers.update({_id: user._id}, {$set: set});
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/restock_armoire.js b/migrations/restock_armoire.js
index a26e45b693..5046998a3b 100644
--- a/migrations/restock_armoire.js
+++ b/migrations/restock_armoire.js
@@ -1,41 +1,41 @@
-var migrationName = 'restock_armoire.js';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+let migrationName = 'restock_armoire.js';
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* Remove flag stating that the Enchanted Armoire is empty, for when new equipment is added
*/
-var monk = require('monk');
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
+ let query = {
'flags.armoireEmpty': true,
};
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
sort: {_id: 1},
limit: 250,
- fields: [] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ fields: [], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch((err) => {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -44,37 +44,42 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(() => {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var set = {'migration': migrationName, 'flags.armoireEmpty': false};
+ let set = {migration: migrationName, 'flags.armoireEmpty': false};
- dbUsers.update({_id: user._id}, {$set:set});
+ dbUsers.update({_id: user._id}, {$set: set});
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/restock_armoire_for_users_that_need_it.js b/migrations/restock_armoire_for_users_that_need_it.js
index 1c335ffe78..5bf0422d04 100644
--- a/migrations/restock_armoire_for_users_that_need_it.js
+++ b/migrations/restock_armoire_for_users_that_need_it.js
@@ -1,65 +1,65 @@
-var migrationName = 'restock_armoire_for_users_that_need_it.js';
-var authorName = 'Alys (ALittleYellowSpider)'; // in case script author needs to know when their ...
-var authorUuid = '3e595299-3d8a-4a10-bfe0-88f555e4aa0c'; //... own data is done
+let migrationName = 'restock_armoire_for_users_that_need_it.js';
+let authorName = 'Alys (ALittleYellowSpider)'; // in case script author needs to know when their ...
+let authorUuid = '3e595299-3d8a-4a10-bfe0-88f555e4aa0c'; // ... own data is done
/*
* Remove flag stating that the Enchanted Armoire is empty,
- * for when new equipment has been added
+ * for when new equipment has been added
* AND the normal restock_armoire.js script has failed.
* This script finds all users that logged in recently, checks if they
* do NOT own all Armoire items, and only then does it mark the Armoire
* as not empty.
- *
+ *
*********************************************************************
* IMPORTANT:
* You must update the list of Armoire items that this list checks for.
* Scroll down. You'll see it.
*********************************************************************
- *
+ *
*/
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var monk = require('monk');
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let monk = require('monk');
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
- 'auth.timestamps.loggedin':{$gt:new Date('2016-01-04')}
+ let query = {
+ 'auth.timestamps.loggedin': {$gt: new Date('2016-01-04')},
// '_id': authorUuid // FOR TESTING
};
// specify a query to limit the affected users (empty for all users):
- var fields = {
- 'flags.armoireEmpty':1,
- 'items.gear.owned':1
- };
+ /* let fields = {
+ 'flags.armoireEmpty': 1,
+ 'items.gear.owned': 1,
+ };*/
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
sort: {_id: 1},
limit: 250,
fields: {
- 'flags.armoireEmpty':1,
- 'items.gear.owned':1
- } // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ 'flags.armoireEmpty': 1,
+ 'items.gear.owned': 1,
+ }, // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch((err) => {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -68,19 +68,19 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(() => {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var set = {'migration':migrationName, 'flags.armoireEmpty':false};
+ let set = {migration: migrationName, 'flags.armoireEmpty': false};
if (user.flags.armoireEmpty) {
@@ -98,21 +98,26 @@ function updateUser (user) {
// console.log("DON'T CHANGE: " + user._id); // FOR TESTING
}
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/restore-profile-data.js b/migrations/restore-profile-data.js
index 78884738e1..750a991efb 100644
--- a/migrations/restore-profile-data.js
+++ b/migrations/restore-profile-data.js
@@ -1,23 +1,22 @@
-var migrationName = 'restore_profile_data.js';
-var authorName = 'ThehollidayInn'; // in case script author needs to know when their ...
-var authorUuid = ''; //... own data is done
+/* let migrationName = 'restore_profile_data.js'; */
+let authorName = 'ThehollidayInn'; // in case script author needs to know when their ...
+let authorUuid = ''; // ... own data is done
/*
* Check if users have empty profile data in new database and update it with old database info
*/
-var monk = require('monk');
-var connectionString = ''; // FOR TEST DATABASE
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let monk = require('monk');
+let connectionString = ''; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-var monk2 = require('monk');
-var oldDbConnectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var olDbUsers = monk2(oldDbConnectionString).get('users', { castIds: false });
+let monk2 = require('monk');
+let oldDbConnectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let olDbUsers = monk2(oldDbConnectionString).get('users', { castIds: false });
-function processUsers(lastId)
-{
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
+ let query = {
// 'profile.name': 'profile name not found',
'profile.blurb': null,
// 'auth.timestamps.loggedin': {$gt: new Date('11/30/2016')},
@@ -25,24 +24,24 @@ function processUsers(lastId)
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
sort: {_id: 1},
limit: 250,
- fields: ['_id', 'profile', 'auth.timestamps.loggedin'] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ fields: ['_id', 'profile', 'auth.timestamps.loggedin'], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch((err) => {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -51,13 +50,13 @@ function updateUsers (users) {
return;
}
- var userPaymentPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPaymentPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPaymentPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(() => {
+ return processUsers(lastUser._id);
+ });
}
function updateUser (user) {
@@ -68,11 +67,11 @@ function updateUser (user) {
.then((oldUserData) => {
if (!oldUserData) return;
// specify user data to change:
- var set = {};
+ let set = {};
if (oldUserData.profile.name === 'profile name not found') return;
- var userNeedsProfileName = !user.profile.name || user.profile.name === 'profile name not found';
+ let userNeedsProfileName = !user.profile.name || user.profile.name === 'profile name not found';
if (userNeedsProfileName && oldUserData.profile.name) {
set['profile.name'] = oldUserData.profile.name;
}
@@ -86,30 +85,35 @@ function updateUser (user) {
}
if (Object.keys(set).length !== 0 && set.constructor === Object) {
- console.log(set)
- return dbUsers.update({_id: user._id}, {$set:set});
+ console.log(set);
+ return dbUsers.update({_id: user._id}, {$set: set});
}
});
}
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
-processUsers()
+processUsers();
diff --git a/migrations/s3-upload.js b/migrations/s3-upload.js
index dfb07f1eca..7538e83f6d 100644
--- a/migrations/s3-upload.js
+++ b/migrations/s3-upload.js
@@ -4,7 +4,7 @@ let last = require('lodash/last');
let AWS = require('aws-sdk');
let config = require('../config');
-const S3_DIRECTORY = 'mobileApp/images'; //config.S3.SPRITES_DIRECTORY;
+const S3_DIRECTORY = 'mobileApp/images'; // config.S3.SPRITES_DIRECTORY;
AWS.config.update({
accessKeyId: config.S3.accessKeyId,
@@ -53,26 +53,26 @@ function getFileFromUrl (url) {
let commit = '78f94e365c72cc58f66857d5941105638db7d35c';
commit = 'df0dbaba636c9ce424cc7040f7bd7fc1aa311015';
-let gihuburl = `https://api.github.com/repos/HabitRPG/habitica/commits/${commit}`
+let gihuburl = `https://api.github.com/repos/HabitRPG/habitica/commits/${commit}`;
let currentIndex = 0;
-function uploadToS3(start, end, filesUrls) {
+function uploadToS3 (start, end, filesUrls) {
let urls = filesUrls.slice(start, end);
if (urls.length === 0) {
- console.log("done");
+ console.log('done');
return;
}
let promises = urls.map(fullUrl => {
return getFileFromUrl(fullUrl)
- .then((buffer) => {
- return uploadFile(buffer, getFileName(fullUrl));
- });
+ .then((buffer) => {
+ return uploadFile(buffer, getFileName(fullUrl));
+ });
});
- console.log(promises.length)
+ console.log(promises.length);
return Bluebird.all(promises)
.then(() => {
@@ -92,7 +92,7 @@ request.get(gihuburl)
let filesUrls = [''];
filesUrls = files.map(file => {
return file.raw_url;
- })
+ });
uploadToS3(currentIndex, currentIndex + 50, filesUrls);
});
diff --git a/migrations/takeThis.js b/migrations/takeThis.js
index 17336e394d..d276727a70 100644
--- a/migrations/takeThis.js
+++ b/migrations/takeThis.js
@@ -1,26 +1,26 @@
-var migrationName = '20180102_takeThis.js'; // Update per month
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+let migrationName = '20180102_takeThis.js'; // Update per month
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* Award Take This ladder items to participants in this month's challenge
*/
-var monk = require('monk');
-var connectionString = 'mongodb://sabrecat:z8e8jyRA8CTofMQ@ds013393-a0.mlab.com:13393/habitica?auto_reconnect=true';
-var dbUsers = monk(connectionString).get('users', { castIds: false });
+let monk = require('monk');
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbUsers = monk(connectionString).get('users', { castIds: false });
-function processUsers(lastId) {
+function processUsers (lastId) {
// specify a query to limit the affected users (empty for all users):
- var query = {
- 'migration':{$ne:migrationName},
- 'challenges':{$in:['5f70ce5b-2d82-4114-8e44-ca65615aae62']} // Update per month
+ let query = {
+ migration: {$ne: migrationName},
+ challenges: {$in: ['5f70ce5b-2d82-4114-8e44-ca65615aae62']}, // Update per month
};
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbUsers.find(query, {
@@ -28,17 +28,17 @@ function processUsers(lastId) {
limit: 250,
fields: [
'items.gear.owned',
- ] // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ ], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
})
- .then(updateUsers)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateUsers)
+ .catch((err) => {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateUsers (users) {
if (!users || users.length === 0) {
@@ -47,40 +47,41 @@ function updateUsers (users) {
return;
}
- var userPromises = users.map(updateUser);
- var lastUser = users[users.length - 1];
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
return Promise.all(userPromises)
- .then(function () {
- processUsers(lastUser._id);
- });
+ .then(() => {
+ processUsers(lastUser._id);
+ });
}
function updateUser (user) {
count++;
- var set = {};
+ let set = {};
+ let push;
if (typeof user.items.gear.owned.back_special_takeThis !== 'undefined') {
- set = {'migration':migrationName};
+ set = {migration: migrationName};
} else if (typeof user.items.gear.owned.body_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.back_special_takeThis':false};
- var push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.back_special_takeThis', '_id': monk.id()}};
+ set = {migration: migrationName, 'items.gear.owned.back_special_takeThis': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.back_special_takeThis', _id: monk.id()}};
} else if (typeof user.items.gear.owned.head_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.body_special_takeThis':false};
- var push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.body_special_takeThis', '_id': monk.id()}};
+ set = {migration: migrationName, 'items.gear.owned.body_special_takeThis': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.body_special_takeThis', _id: monk.id()}};
} else if (typeof user.items.gear.owned.armor_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.head_special_takeThis':false};
- var push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_takeThis', '_id': monk.id()}};
+ set = {migration: migrationName, 'items.gear.owned.head_special_takeThis': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.head_special_takeThis', _id: monk.id()}};
} else if (typeof user.items.gear.owned.weapon_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.armor_special_takeThis':false};
- var push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_takeThis', '_id': monk.id()}};
+ set = {migration: migrationName, 'items.gear.owned.armor_special_takeThis': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.armor_special_takeThis', _id: monk.id()}};
} else if (typeof user.items.gear.owned.shield_special_takeThis !== 'undefined') {
- set = {'migration':migrationName, 'items.gear.owned.weapon_special_takeThis':false};
- var push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.weapon_special_takeThis', '_id': monk.id()}};
+ set = {migration: migrationName, 'items.gear.owned.weapon_special_takeThis': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.weapon_special_takeThis', _id: monk.id()}};
} else {
- set = {'migration':migrationName, 'items.gear.owned.shield_special_takeThis':false};
- var push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.shield_special_takeThis', '_id': monk.id()}};
+ set = {migration: migrationName, 'items.gear.owned.shield_special_takeThis': false};
+ push = {pinnedItems: {type: 'marketGear', path: 'gear.flat.shield_special_takeThis', _id: monk.id()}};
}
if (push) {
@@ -89,21 +90,26 @@ function updateUser (user) {
dbUsers.update({_id: user._id}, {$set: set});
}
- if (count % progressCount == 0) console.warn(count + ' ' + user._id);
- if (user._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' users processed\n');
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/tasks/tasks-set-everyX.js b/migrations/tasks/tasks-set-everyX.js
index c0a4acc7fb..f3bd5408d6 100644
--- a/migrations/tasks/tasks-set-everyX.js
+++ b/migrations/tasks/tasks-set-everyX.js
@@ -1,32 +1,32 @@
-var migrationName = 'tasks-set-everyX';
-var authorName = 'Sabe'; // in case script author needs to know when their ...
-var authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; //... own data is done
+/* let migrationName = 'tasks-set-everyX'; */
+let authorName = 'Sabe'; // in case script author needs to know when their ...
+let authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
/*
* Iterates over all tasks and sets invalid everyX values (less than 0 or more than 9999 or not an int) field to 0
*/
-var monk = require('monk');
-var connectionString = 'mongodb://sabrecat:z8e8jyRA8CTofMQ@ds013393-a0.mlab.com:13393/habitica?auto_reconnect=true';
-var dbTasks = monk(connectionString).get('tasks', { castIds: false });
+let monk = require('monk');
+let connectionString = 'mongodb://sabrecat:z8e8jyRA8CTofMQ@ds013393-a0.mlab.com:13393/habitica?auto_reconnect=true';
+let dbTasks = monk(connectionString).get('tasks', { castIds: false });
-function processTasks(lastId) {
+function processTasks (lastId) {
// specify a query to limit the affected tasks (empty for all tasks):
- var query = {
- type: "daily",
+ let query = {
+ type: 'daily',
everyX: {
$not: {
$gte: 0,
$lte: 9999,
- $type: "int",
- }
+ $type: 'int',
+ },
},
};
if (lastId) {
query._id = {
- $gt: lastId
- }
+ $gt: lastId,
+ };
}
dbTasks.find(query, {
@@ -34,15 +34,15 @@ function processTasks(lastId) {
limit: 250,
fields: [],
})
- .then(updateTasks)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
+ .then(updateTasks)
+ .catch((err) => {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
}
-var progressCount = 1000;
-var count = 0;
+let progressCount = 1000;
+let count = 0;
function updateTasks (tasks) {
if (!tasks || tasks.length === 0) {
@@ -51,36 +51,41 @@ function updateTasks (tasks) {
return;
}
- var taskPromises = tasks.map(updatetask);
- var lasttask = tasks[tasks.length - 1];
+ let taskPromises = tasks.map(updatetask);
+ let lasttask = tasks[tasks.length - 1];
return Promise.all(taskPromises)
- .then(function () {
- processTasks(lasttask._id);
- });
+ .then(() => {
+ return processTasks(lasttask._id);
+ });
}
function updatetask (task) {
count++;
- var set = {'everyX': 0};
+ let set = {everyX: 0};
- dbTasks.update({_id: task._id}, {$set:set});
+ dbTasks.update({_id: task._id}, {$set: set});
- if (count % progressCount == 0) console.warn(count + ' ' + task._id);
- if (task._id == authorUuid) console.warn(authorName + ' processed');
+ if (count % progressCount === 0) console.warn(`${count } ${ task._id}`);
+ if (task._id === authorUuid) console.warn(`${authorName } processed`);
}
-function displayData() {
- console.warn('\n' + count + ' tasks processed\n');
+function displayData () {
+ console.warn(`\n${ count } tasks processed\n`);
return exiting(0);
}
-function exiting(code, msg) {
+function exiting (code, msg) {
code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
}
process.exit(code);
}
diff --git a/migrations/tasks/tasks-set-yesterdailies.js b/migrations/tasks/tasks-set-yesterdailies.js
index 8ce87b1046..253d871612 100644
--- a/migrations/tasks/tasks-set-yesterdailies.js
+++ b/migrations/tasks/tasks-set-yesterdailies.js
@@ -1,83 +1,88 @@
-var migrationName = 'tasks-set-yesterdaily';
-var authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
-var authorUuid = ''; //... own data is done
-
-/*
- * Iterates over all tasks and sets the yseterDaily field to True
- */
-
-import monk from 'monk';
-
-var connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
-var dbTasks = monk(connectionString).get('tasks', { castIds: false });
-
-function processTasks(lastId) {
- // specify a query to limit the affected tasks (empty for all tasks):
- var query = {
- yesterDaily: false,
- };
-
- if (lastId) {
- query._id = {
- $gt: lastId
- }
- }
-
- dbTasks.find(query, {
- sort: {_id: 1},
- limit: 250,
- fields: [ // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
- ],
- })
- .then(updateTasks)
- .catch(function (err) {
- console.log(err);
- return exiting(1, 'ERROR! ' + err);
- });
-}
-
-var progressCount = 1000;
-var count = 0;
-
-function updateTasks (tasks) {
- if (!tasks || tasks.length === 0) {
- console.warn('All appropriate tasks found and modified.');
- displayData();
- return;
- }
-
- var taskPromises = tasks.map(updatetask);
- var lasttask = tasks[tasks.length - 1];
-
- return Promise.all(taskPromises)
- .then(function () {
- processtasks(lasttask._id);
- });
-}
-
-function updatetask (task) {
- count++;
- var set = {'yesterDaily': true};
-
- dbTasks.update({_id: task._id}, {$set:set});
-
- if (count % progressCount == 0) console.warn(count + ' ' + task._id);
- if (task._id == authorUuid) console.warn(authorName + ' processed');
-}
-
-function displayData() {
- console.warn('\n' + count + ' tasks processed\n');
- return exiting(0);
-}
-
-function exiting(code, msg) {
- code = code || 0; // 0 = success
- if (code && !msg) { msg = 'ERROR!'; }
- if (msg) {
- if (code) { console.error(msg); }
- else { console.log( msg); }
- }
- process.exit(code);
-}
-
-module.exports = processtasks;
+/* let migrationName = 'tasks-set-yesterdaily'; */
+let authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
+let authorUuid = ''; // ... own data is done
+
+/*
+ * Iterates over all tasks and sets the yseterDaily field to True
+ */
+
+import monk from 'monk';
+
+let connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+let dbTasks = monk(connectionString).get('tasks', { castIds: false });
+
+let progressCount = 1000;
+let count = 0;
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+function displayData () {
+ console.warn(`\n${ count } tasks processed\n`);
+ return exiting(0);
+}
+
+function updatetask (task) {
+ count++;
+ let set = {yesterDaily: true};
+
+ dbTasks.update({_id: task._id}, {$set: set});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ task._id}`);
+ if (task._id === authorUuid) console.warn(`${authorName } processed`);
+}
+
+function updateTasks (tasks) {
+ if (!tasks || tasks.length === 0) {
+ console.warn('All appropriate tasks found and modified.');
+ displayData();
+ return;
+ }
+
+ let taskPromises = tasks.map(updatetask);
+ let lasttask = tasks[tasks.length - 1];
+
+ return Promise.all(taskPromises)
+ .then(() => {
+ return processTasks(lasttask._id); // eslint-disable-line no-use-before-define
+ });
+}
+
+function processTasks (lastId) {
+ // specify a query to limit the affected tasks (empty for all tasks):
+ let query = {
+ yesterDaily: false,
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ dbTasks.find(query, {
+ sort: {_id: 1},
+ limit: 250,
+ fields: [ // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ ],
+ })
+ .then(updateTasks)
+ .catch((err) => {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+module.exports = processTasks;
diff --git a/migrations/users/account-transfer.js b/migrations/users/account-transfer.js
index 7d57dac08b..42a9602aa1 100644
--- a/migrations/users/account-transfer.js
+++ b/migrations/users/account-transfer.js
@@ -1,6 +1,8 @@
-var migrationName = 'AccountTransfer';
-var authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
-var authorUuid = ''; //... own data is done
+/*
+let migrationName = 'AccountTransfer';
+let authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
+let authorUuid = ''; // ... own data is done
+*/
/*
* This migraition will copy user data from prod to test
@@ -10,10 +12,6 @@ const monk = require('monk');
const connectionString = '';
const Users = monk(connectionString).get('users', { castIds: false });
-import uniq from 'lodash/uniq';
-import Bluebird from 'bluebird';
-
-
module.exports = async function accountTransfer () {
const fromAccountId = '';
const toAccountId = '';
@@ -32,7 +30,7 @@ module.exports = async function accountTransfer () {
'purchased.background': newBackgrounds,
},
})
- .then((result) => {
- console.log(result);
- });
+ .then((result) => {
+ console.log(result);
+ });
};
diff --git a/migrations/users/achievement-restore.js b/migrations/users/achievement-restore.js
index bd7e91a327..45e7866398 100644
--- a/migrations/users/achievement-restore.js
+++ b/migrations/users/achievement-restore.js
@@ -1,17 +1,17 @@
+/*
const migrationName = 'AchievementRestore';
const authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
-const authorUuid = ''; //... own data is done
+const authorUuid = ''; // ... own data is done
+*/
/*
* This migraition will copy user data from prod to test
*/
-import Bluebird from 'bluebird';
const monk = require('monk');
const connectionString = 'mongodb://localhost/new-habit';
const Users = monk(connectionString).get('users', { castIds: false });
-const monkOld = require('monk');
const oldConnectionSting = 'mongodb://localhost/old-habit';
const UsersOld = monk(oldConnectionSting).get('users', { castIds: false });
@@ -52,21 +52,19 @@ function getAchievementUpdate (newUser, oldUser) {
achievementsUpdate.rebirthLevel = oldAchievements.rebirthLevel;
}
- //All others
+ // All others
const indexsToIgnore = ['ultimateGearSets', 'challenges', 'quests', 'rebirthLevel'];
for (let index in oldAchievements) {
- if (indexsToIgnore.indexOf(index) !== -1) continue;
+ if (indexsToIgnore.indexOf(index) !== -1) continue; // eslint-disable-line no-continue
if (!achievementsUpdate[index]) {
achievementsUpdate[index] = oldAchievements[index];
- continue;
+ continue; // eslint-disable-line no-continue
}
if (Number.isInteger(oldAchievements[index])) {
achievementsUpdate[index] += oldAchievements[index];
- } else {
- if (oldAchievements[index] === true) achievementsUpdate[index] = true;
- }
+ } else if (oldAchievements[index] === true) achievementsUpdate[index] = true;
}
return achievementsUpdate;
@@ -76,6 +74,7 @@ module.exports = async function achievementRestore () {
const userIds = [
];
+ /* eslint-disable no-await-in-loop */
for (let index in userIds) {
const userId = userIds[index];
const oldUser = await UsersOld.findOne({_id: userId}, 'achievements');
@@ -85,9 +84,10 @@ module.exports = async function achievementRestore () {
{_id: userId},
{
$set: {
- 'achievements': achievementUpdate,
+ achievements: achievementUpdate,
},
});
console.log(`Updated ${userId}`);
+ /* eslint-enable no-await-in-loop */
}
};
diff --git a/migrations/users/mystery-items.js b/migrations/users/mystery-items.js
new file mode 100644
index 0000000000..955eee3b6a
--- /dev/null
+++ b/migrations/users/mystery-items.js
@@ -0,0 +1,108 @@
+const migrationName = 'mystery-items-201802.js'; // Update per month
+const authorName = 'Sabe'; // in case script author needs to know when their ...
+const authorUuid = '7f14ed62-5408-4e1b-be83-ada62d504931'; // ... own data is done
+
+/*
+ * Award this month's mystery items to subscribers
+ */
+const MYSTERY_ITEMS = ['armor_mystery_201802', 'head_mystery_201802', 'shield_mystery_201802'];
+const connectionString = 'mongodb://localhost:27017/habitrpg?auto_reconnect=true'; // FOR TEST DATABASE
+
+let monk = require('monk');
+let dbUsers = monk(connectionString).get('users', { castIds: false });
+let UserNotification = require('../../website/server/models/userNotification').model;
+
+function processUsers (lastId) {
+ // specify a query to limit the affected users (empty for all users):
+ let query = {
+ migration: {$ne: migrationName},
+ 'purchased.plan.customerId': { $ne: null },
+ $or: [
+ { 'purchased.plan.dateTerminated': { $gte: new Date() } },
+ { 'purchased.plan.dateTerminated': { $exists: false } },
+ { 'purchased.plan.dateTerminated': { $eq: null } },
+ ],
+ };
+
+ if (lastId) {
+ query._id = {
+ $gt: lastId,
+ };
+ }
+
+ dbUsers.find(query, {
+ sort: {_id: 1},
+ limit: 250,
+ fields: [
+ ], // specify fields we are interested in to limit retrieved data (empty if we're not reading data):
+ })
+ .then(updateUsers)
+ .catch((err) => {
+ console.log(err);
+ return exiting(1, `ERROR! ${ err}`);
+ });
+}
+
+let progressCount = 1000;
+let count = 0;
+
+function updateUsers (users) {
+ if (!users || users.length === 0) {
+ console.warn('All appropriate users found and modified.');
+ displayData();
+ return;
+ }
+
+ let userPromises = users.map(updateUser);
+ let lastUser = users[users.length - 1];
+
+ return Promise.all(userPromises)
+ .then(() => {
+ processUsers(lastUser._id);
+ });
+}
+
+function updateUser (user) {
+ count++;
+
+ const addToSet = {
+ 'purchased.plan.mysteryItems': {
+ $each: MYSTERY_ITEMS,
+ },
+ };
+ const push = {
+ notifications: (new UserNotification({
+ type: 'NEW_MYSTERY_ITEMS',
+ data: {
+ MYSTERY_ITEMS,
+ },
+ })).toJSON(),
+ };
+
+ dbUsers.update({_id: user._id}, {$addToSet: addToSet, $push: push});
+
+ if (count % progressCount === 0) console.warn(`${count } ${ user._id}`);
+ if (user._id === authorUuid) console.warn(`${authorName } processed`);
+}
+
+function displayData () {
+ console.warn(`\n${ count } users processed\n`);
+ return exiting(0);
+}
+
+function exiting (code, msg) {
+ code = code || 0; // 0 = success
+ if (code && !msg) {
+ msg = 'ERROR!';
+ }
+ if (msg) {
+ if (code) {
+ console.error(msg);
+ } else {
+ console.log(msg);
+ }
+ }
+ process.exit(code);
+}
+
+module.exports = processUsers;
diff --git a/migrations/users/users-to-test.js b/migrations/users/users-to-test.js
index 64b6c38e07..cf9f4cc92f 100644
--- a/migrations/users/users-to-test.js
+++ b/migrations/users/users-to-test.js
@@ -1,32 +1,35 @@
-var migrationName = 'UserFromProdToTest';
-var authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
-var authorUuid = ''; //... own data is done
+/*
+let migrationName = 'UserFromProdToTest';
+let authorName = 'TheHollidayInn'; // in case script author needs to know when their ...
+let authorUuid = ''; // ... own data is done
+*/
/*
* This migraition will copy user data from prod to test
*/
-var monk = require('monk');
-var testConnectionSting = ''; // FOR TEST DATABASE
-var usersTest = monk(testConnectionSting).get('users', { castIds: false });
-var groupsTest = monk(testConnectionSting).get('groups', { castIds: false });
-var challengesTest = monk(testConnectionSting).get('challenges', { castIds: false });
-var tasksTest = monk(testConnectionSting).get('tasks', { castIds: false });
+let monk = require('monk');
+let testConnectionSting = ''; // FOR TEST DATABASE
+let usersTest = monk(testConnectionSting).get('users', { castIds: false });
+let groupsTest = monk(testConnectionSting).get('groups', { castIds: false });
+let challengesTest = monk(testConnectionSting).get('challenges', { castIds: false });
+let tasksTest = monk(testConnectionSting).get('tasks', { castIds: false });
-var monk2 = require('monk');
-var liveConnectString = ''; // FOR TEST DATABASE
-var userLive = monk2(liveConnectString).get('users', { castIds: false });
-var groupsLive = monk2(liveConnectString).get('groups', { castIds: false });
-var challengesLive = monk2(liveConnectString).get('challenges', { castIds: false });
-var tasksLive = monk2(liveConnectString).get('tasks', { castIds: false });
+let monk2 = require('monk');
+let liveConnectString = ''; // FOR TEST DATABASE
+let userLive = monk2(liveConnectString).get('users', { castIds: false });
+let groupsLive = monk2(liveConnectString).get('groups', { castIds: false });
+let challengesLive = monk2(liveConnectString).get('challenges', { castIds: false });
+let tasksLive = monk2(liveConnectString).get('tasks', { castIds: false });
import uniq from 'lodash/uniq';
-import Bluebird from 'bluebird';
// Variabls for updating
+/*
let userIds = [
'206039c6-24e4-4b9f-8a31-61cbb9aa3f66',
];
+*/
let groupIds = [];
let challengeIds = [];
@@ -34,10 +37,10 @@ let tasksIds = [];
async function processUsers () {
let userPromises = [];
- //{_id: {$in: userIds}}
+ // {_id: {$in: userIds}}
return userLive.find({guilds: 'b0764d64-8276-45a1-afa5-5ca9a5c64ca0'})
- .each((user, {close, pause, resume}) => {
+ .each((user) => {
if (user.guilds.length > 0) groupIds = groupIds.concat(user.guilds);
if (user.party._id) groupIds.push(user.party._id);
if (user.challenges.length > 0) challengeIds = challengeIds.concat(user.challenges);
@@ -46,13 +49,13 @@ async function processUsers () {
if (user.tasksOrder.dailys.length > 0) tasksIds = tasksIds.concat(user.tasksOrder.dailys);
if (user.tasksOrder.habits.length > 0) tasksIds = tasksIds.concat(user.tasksOrder.habits);
- let userPromise = usersTest.update({'_id': user._id}, user, {upsert:true});
+ let userPromise = usersTest.update({_id: user._id}, user, {upsert: true});
userPromises.push(userPromise);
}).then(() => {
- return Bluebird.all(userPromises);
+ return Promise.all(userPromises);
})
.then(() => {
- console.log("Done User");
+ console.log('Done User');
});
}
@@ -60,14 +63,14 @@ function processGroups () {
let promises = [];
let groupsToQuery = uniq(groupIds);
return groupsLive.find({_id: {$in: groupsToQuery}})
- .each((group, {close, pause, resume}) => {
- let promise = groupsTest.update({_id: group._id}, group, {upsert:true});
+ .each((group) => {
+ let promise = groupsTest.update({_id: group._id}, group, {upsert: true});
promises.push(promise);
}).then(() => {
- return Bluebird.all(promises);
+ return Promise.all(promises);
})
.then(() => {
- console.log("Done Group");
+ console.log('Done Group');
});
}
@@ -75,14 +78,14 @@ function processChallenges () {
let promises = [];
let challengesToQuery = uniq(challengeIds);
return challengesLive.find({_id: {$in: challengesToQuery}})
- .each((challenge, {close, pause, resume}) => {
- let promise = challengesTest.update({_id: challenge._id}, challenge, {upsert:true});
+ .each((challenge) => {
+ let promise = challengesTest.update({_id: challenge._id}, challenge, {upsert: true});
promises.push(promise);
}).then(() => {
- return Bluebird.all(promises);
+ return Promise.all(promises);
})
.then(() => {
- console.log("Done Challenge");
+ console.log('Done Challenge');
});
}
@@ -90,14 +93,14 @@ function processTasks () {
let promises = [];
let tasksToQuery = uniq(tasksIds);
return tasksLive.find({_id: {$in: tasksToQuery}})
- .each((task, {close, pause, resume}) => {
- let promise = tasksTest.update({_id: task._id}, task, {upsert:true});
+ .each((task) => {
+ let promise = tasksTest.update({_id: task._id}, task, {upsert: true});
promises.push(promise);
}).then(() => {
- return Bluebird.all(promises);
+ return Promise.all(promises);
})
.then(() => {
- console.log("Done Tasks");
+ console.log('Done Tasks');
});
}
diff --git a/migrations/utils/connect.js b/migrations/utils/connect.js
index 492b473708..1b20d523ca 100644
--- a/migrations/utils/connect.js
+++ b/migrations/utils/connect.js
@@ -3,7 +3,7 @@
const MongoClient = require('mongodb').MongoClient;
const logger = require('./logger');
-let db;
+let dbConnection;
function connectToDb (dbUri) {
return new Promise((resolve, reject) => {
@@ -13,7 +13,7 @@ function connectToDb (dbUri) {
return reject(err);
}
- db = database;
+ dbConnection = database;
logger.success(`Connected to ${dbUri}`);
@@ -23,7 +23,7 @@ function connectToDb (dbUri) {
}
function closeDb () {
- if (db) db.close();
+ if (dbConnection) dbConnection.close();
logger.success('Closed connection to the database');
return Promise.resolve();
@@ -32,4 +32,4 @@ function closeDb () {
module.exports = {
connectToDb,
closeDb,
-}
+};
diff --git a/migrations/utils/logger.js b/migrations/utils/logger.js
index a2ddc96fe2..cf6d643e76 100644
--- a/migrations/utils/logger.js
+++ b/migrations/utils/logger.js
@@ -2,6 +2,13 @@
const chalk = require('chalk');
+function loggerGenerator (type, color) {
+ return function logger () {
+ let args = Array.from(arguments).map(arg => chalk[color](arg));
+ console[type].apply(null, args);
+ };
+}
+
const logger = {
info: loggerGenerator('info', 'cyan'),
success: loggerGenerator('info', 'green'),
@@ -10,11 +17,4 @@ const logger = {
warn: loggerGenerator('warn', 'yellow'),
};
-function loggerGenerator (type, color) {
- return function () {
- let args = Array.from(arguments).map(arg => chalk[color](arg));
- console[type].apply(null, args);
- }
-}
-
module.exports = logger;
diff --git a/migrations/utils/timer.js b/migrations/utils/timer.js
index 37a75830b1..cacdfc1b8b 100644
--- a/migrations/utils/timer.js
+++ b/migrations/utils/timer.js
@@ -13,7 +13,7 @@ class Timer {
if (!options.disableAutoStart) this.start();
}
start () {
- this._internalTimer = setInterval(() =>{
+ this._internalTimer = setInterval(() => {
this.count++;
let shouldWarn = this._minutesWarningThreshold < this.count;
diff --git a/package-lock.json b/package-lock.json
index f953f8092e..569840dc8a 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,9 +1,157 @@
{
"name": "habitica",
- "version": "4.27.2",
+ "version": "4.28.0",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0-beta.40.tgz",
+ "integrity": "sha512-eVXQSbu/RimU6OKcK2/gDJVTFcxXJI4sHbIqw2mhwMZeQ2as/8AhS9DGkEDoHMBBNJZ5B0US63lF56x+KDcxiA==",
+ "requires": {
+ "@babel/highlight": "7.0.0-beta.40"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.0.0-beta.40.tgz",
+ "integrity": "sha512-c91BQcXyTq/5aFV4afgOionxZS1dxWt8OghEx5Q52SKssdGRFSiMKnk9tGkev1pYULPJBqjSDZU2Pcuc58ffZw==",
+ "requires": {
+ "@babel/types": "7.0.0-beta.40",
+ "jsesc": "2.5.1",
+ "lodash": "4.17.5",
+ "source-map": "0.5.7",
+ "trim-right": "1.0.1"
+ },
+ "dependencies": {
+ "jsesc": {
+ "version": "2.5.1",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.1.tgz",
+ "integrity": "sha1-5CGiqOINawgZ3yiQj3glJrlt0f4="
+ }
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.0.0-beta.40.tgz",
+ "integrity": "sha512-cK9BVLtOfisSISTTHXKGvBc2OBh65tjEk4PgXhsSnnH0i8RP2v+5RCxoSlh2y/i+l2fxQqKqv++Qo5RMiwmRCA==",
+ "requires": {
+ "@babel/helper-get-function-arity": "7.0.0-beta.40",
+ "@babel/template": "7.0.0-beta.40",
+ "@babel/types": "7.0.0-beta.40"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0-beta.40.tgz",
+ "integrity": "sha512-MwquaPznI4cUoZEgHC/XGkddOXtqKqD4DvZDOyJK2LR9Qi6TbMbAhc6IaFoRX7CRTFCmtGeu8gdXW2dBotBBTA==",
+ "requires": {
+ "@babel/types": "7.0.0-beta.40"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0-beta.40.tgz",
+ "integrity": "sha512-mOhhTrzieV6VO7odgzFGFapiwRK0ei8RZRhfzHhb6cpX3QM8XXuCLXWjN8qBB7JReDdUR80V3LFfFrGUYevhNg==",
+ "requires": {
+ "chalk": "2.3.1",
+ "esutils": "2.0.2",
+ "js-tokens": "3.0.2"
+ }
+ },
+ "@babel/template": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.0.0-beta.40.tgz",
+ "integrity": "sha512-RlQiVB7eL7fxsKN6JvnCCwEwEL28CBYalXSgWWULuFlEHjtMoXBqQanSie3bNyhrANJx67sb+Sd/vuGivoMwLQ==",
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.40",
+ "@babel/types": "7.0.0-beta.40",
+ "babylon": "7.0.0-beta.40",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz",
+ "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg=="
+ }
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.0.0-beta.40.tgz",
+ "integrity": "sha512-h96SQorjvdSuxQ6hHFIuAa3oxnad1TA5bU1Zz88+XqzwmM5QM0/k2D+heXGGy/76gT5ajl7xYLKGiPA/KTyVhQ==",
+ "requires": {
+ "@babel/code-frame": "7.0.0-beta.40",
+ "@babel/generator": "7.0.0-beta.40",
+ "@babel/helper-function-name": "7.0.0-beta.40",
+ "@babel/types": "7.0.0-beta.40",
+ "babylon": "7.0.0-beta.40",
+ "debug": "3.1.0",
+ "globals": "11.3.0",
+ "invariant": "2.2.2",
+ "lodash": "4.17.5"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz",
+ "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg=="
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "globals": {
+ "version": "11.3.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz",
+ "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw=="
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.0.0-beta.40.tgz",
+ "integrity": "sha512-uXCGCzTgMZxcSUzutCPtZmXbVC+cvENgS2e0tRuhn+Y1hZnMb8IHP0Trq7Q2MB/eFmG5pKrAeTIUfQIe5kA4Tg==",
+ "requires": {
+ "esutils": "2.0.2",
+ "lodash": "4.17.5",
+ "to-fast-properties": "2.0.0"
+ },
+ "dependencies": {
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4="
+ }
+ }
+ },
+ "@sindresorhus/is": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz",
+ "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow=="
+ },
+ "@sinonjs/formatio": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-2.0.0.tgz",
+ "integrity": "sha512-ls6CAMA6/5gG+O/IdsBcblvnd8qcO/l1TYoNeAzp3wcISOxlPXQEus0mLcdwazEkWjaBdaJ3TaxmNgCLWwvWzg==",
+ "dev": true,
+ "requires": {
+ "samsam": "1.3.0"
+ },
+ "dependencies": {
+ "samsam": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/samsam/-/samsam-1.3.0.tgz",
+ "integrity": "sha512-1HwIYD/8UlOtFS3QO3w7ey+SdSDFE4HRNLZoZRYVQefrOY3l17epswImeB1ijgJFQJodIaHcwkp3r/myBjFVbg==",
+ "dev": true
+ }
+ }
+ },
"@slack/client": {
"version": "3.16.0",
"resolved": "https://registry.npmjs.org/@slack/client/-/client-3.16.0.tgz",
@@ -136,7 +284,9 @@
"addressparser": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/addressparser/-/addressparser-1.0.1.tgz",
- "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y="
+ "integrity": "sha1-R6++GiqSYhkdtoOOT9HTm0CCF0Y=",
+ "dev": true,
+ "optional": true
},
"after": {
"version": "0.8.2",
@@ -165,9 +315,9 @@
}
},
"ajv-keywords": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-1.5.1.tgz",
- "integrity": "sha1-MU3QpLM2j609/NxU7eYXG4htrzw="
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.1.0.tgz",
+ "integrity": "sha1-rCsnk5xUPpXSwG5/f1wnvkqlQ74="
},
"align-text": {
"version": "0.1.4",
@@ -365,11 +515,6 @@
"resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
"integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768="
},
- "any-promise": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-0.1.0.tgz",
- "integrity": "sha1-gwtoCqflbzNFHUsEnzvYBESY7ic="
- },
"anymatch": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
@@ -782,22 +927,84 @@
"integrity": "sha512-hIp37ojJRRW8ExWSxxLpkDHUufk/DFfsb7/cUC1cVbBg7JV4gJTkCTRa44dlL9e5jx1P3VNrjL7QOQfi4MyltA=="
},
"autoprefixer": {
- "version": "6.7.7",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
- "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-8.0.0.tgz",
+ "integrity": "sha512-XBEqAoESCyGu3daYmWcTC37Dwmjvs0y40UtUO3MMX+Pd/w7jwNFfUKNtxoMFu0u0wcotP+arDpU3JVH54UV79Q==",
"requires": {
- "browserslist": "1.7.7",
- "caniuse-db": "1.0.30000803",
+ "browserslist": "3.1.0",
+ "caniuse-lite": "1.0.30000808",
"normalize-range": "0.1.2",
"num2fraction": "1.2.2",
- "postcss": "5.2.18",
+ "postcss": "6.0.18",
"postcss-value-parser": "3.3.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "browserslist": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-3.1.0.tgz",
+ "integrity": "sha512-pyoJs5teqQWTdwOTG7F5IDKi7hMvifd9ri3EYLG2ElXlA2AwvqB1SZ6RIPMRHpmYb0RYN8N7GSERey5WgxSCUQ==",
+ "requires": {
+ "caniuse-lite": "1.0.30000808",
+ "electron-to-chromium": "1.3.33"
+ }
+ },
+ "chalk": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
+ "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.2.0"
+ }
+ },
+ "electron-to-chromium": {
+ "version": "1.3.33",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.33.tgz",
+ "integrity": "sha1-vwBwPWKnxlI4E2V4w1LWxcBCpUU="
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "postcss": {
+ "version": "6.0.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.18.tgz",
+ "integrity": "sha512-X8MyLi3OYI1o71u0SsefWLpGBo5xnGiK1Pn+nrZFplc671Ts7L8aPwEbPIO8AWpulK5wuaVzyM9Rw6R8o7hYBw==",
+ "requires": {
+ "chalk": "2.3.1",
+ "source-map": "0.6.1",
+ "supports-color": "5.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
+ "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
}
},
"aws-sdk": {
- "version": "2.189.0",
- "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.189.0.tgz",
- "integrity": "sha1-TfZJuM+iAI/uCfNX/jqYNUZcTaQ=",
+ "version": "2.200.0",
+ "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.200.0.tgz",
+ "integrity": "sha1-9GDJZAhyWw64xlj93qbgv+DvWkQ=",
"requires": {
"buffer": "4.9.1",
"events": "1.1.1",
@@ -850,21 +1057,18 @@
"integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4="
},
"axios": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-0.16.2.tgz",
- "integrity": "sha1-uk+S8XFn37q0CYN4VFS5rBScPG0=",
+ "version": "0.18.0",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-0.18.0.tgz",
+ "integrity": "sha1-MtU+SFHv3AoRmTts0AB4nXDAUQI=",
"requires": {
"follow-redirects": "1.4.1",
"is-buffer": "1.1.6"
}
},
"axios-progress-bar": {
- "version": "0.1.7",
- "resolved": "https://registry.npmjs.org/axios-progress-bar/-/axios-progress-bar-0.1.7.tgz",
- "integrity": "sha512-xStxJUtcQUH0ulLni5qc8YwvNMTUjO7rmUTsvnxS1bD2GJKEemozP6sJ5OeoC6jjd6MS5FZyx5BlkU/lD8JLUw==",
- "requires": {
- "nprogress": "0.2.0"
- }
+ "version": "1.1.8",
+ "resolved": "https://registry.npmjs.org/axios-progress-bar/-/axios-progress-bar-1.1.8.tgz",
+ "integrity": "sha512-CDjRu+qCj1EmuIXkZbluZE0qz0mOugBrAlDwnhn2VRP6Bvg7ddkfXqyFlEM+Rtgxzn1rWQiFTuCC46azyRQOpA=="
},
"babel-code-frame": {
"version": "6.26.0",
@@ -917,14 +1121,23 @@
}
},
"babel-eslint": {
- "version": "7.2.3",
- "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-7.2.3.tgz",
- "integrity": "sha1-sv4tgBJkcPXBlELcdXJTqJdxCCc=",
+ "version": "8.2.2",
+ "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-8.2.2.tgz",
+ "integrity": "sha512-Qt2lz2egBxNYWqN9JIO2z4NOOf8i4b5JS6CFoYrOZZTDssueiV1jH/jsefyg+86SeNY3rB361/mi3kE1WK2WYQ==",
"requires": {
- "babel-code-frame": "6.26.0",
- "babel-traverse": "6.26.0",
- "babel-types": "6.26.0",
- "babylon": "6.18.0"
+ "@babel/code-frame": "7.0.0-beta.40",
+ "@babel/traverse": "7.0.0-beta.40",
+ "@babel/types": "7.0.0-beta.40",
+ "babylon": "7.0.0-beta.40",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "1.0.0"
+ },
+ "dependencies": {
+ "babylon": {
+ "version": "7.0.0-beta.40",
+ "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz",
+ "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg=="
+ }
}
},
"babel-generator": {
@@ -1048,14 +1261,51 @@
}
},
"babel-loader": {
- "version": "6.4.1",
- "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-6.4.1.tgz",
- "integrity": "sha1-CzQRLVsHSKjc2/Uaz2+b1C1QuMo=",
+ "version": "7.1.2",
+ "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-7.1.2.tgz",
+ "integrity": "sha512-jRwlFbINAeyDStqK6Dd5YuY0k5YuzQUvlz2ZamuXrXmxav3pNqe9vfJ402+2G+OmlJSXxCOpB6Uz0INM7RQe2A==",
"requires": {
- "find-cache-dir": "0.1.1",
- "loader-utils": "0.2.17",
- "mkdirp": "0.5.1",
- "object-assign": "4.1.1"
+ "find-cache-dir": "1.0.0",
+ "loader-utils": "1.1.0",
+ "mkdirp": "0.5.1"
+ },
+ "dependencies": {
+ "find-cache-dir": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz",
+ "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=",
+ "requires": {
+ "commondir": "1.0.1",
+ "make-dir": "1.1.0",
+ "pkg-dir": "2.0.0"
+ }
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
+ "requires": {
+ "locate-path": "2.0.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
+ }
+ },
+ "pkg-dir": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
+ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
+ "requires": {
+ "find-up": "2.1.0"
+ }
+ }
}
},
"babel-messages": {
@@ -1780,10 +2030,11 @@
"integrity": "sha512-gulJE5dGFo6Q61V/whS6VM4WIyrlydXfCgkE+Gxe5hjrJ8rXLLZlALq7zq2RPhOc45PSwQpJkrTnc2KgD6cvmA=="
},
"bootstrap-vue": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-1.5.1.tgz",
- "integrity": "sha512-bkob7vTHA5VZN6U0Wj34Yj+6jNtqAtc6MwcsLdBz78fcy8Ju5tlYUYMDUefQ0rQH7hhdtFDn9GuDiqhUPmE1sA==",
+ "version": "2.0.0-rc.1",
+ "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.0.0-rc.1.tgz",
+ "integrity": "sha512-X9dr6gKi3pF3K2yMJah7nYhlo/HB3JLJQ+grr8442s/HJsfnW9P1iALJtmiAxH8/RXLCSes00gs4lYlP0zg21w==",
"requires": {
+ "bootstrap": "4.0.0",
"lodash.startcase": "4.4.0",
"opencollective": "1.0.3",
"popper.js": "1.13.0",
@@ -2240,6 +2491,8 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/buildmail/-/buildmail-4.0.1.tgz",
"integrity": "sha1-h393OLeHKYccmhBeO4N9K+EaenI=",
+ "dev": true,
+ "optional": true,
"requires": {
"addressparser": "1.0.1",
"libbase64": "0.1.0",
@@ -2286,6 +2539,55 @@
"unset-value": "1.0.0"
}
},
+ "cacheable-request": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz",
+ "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=",
+ "requires": {
+ "clone-response": "1.0.2",
+ "get-stream": "3.0.0",
+ "http-cache-semantics": "3.8.1",
+ "keyv": "3.0.0",
+ "lowercase-keys": "1.0.0",
+ "normalize-url": "2.0.1",
+ "responselike": "1.0.2"
+ },
+ "dependencies": {
+ "normalize-url": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz",
+ "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==",
+ "requires": {
+ "prepend-http": "2.0.0",
+ "query-string": "5.1.0",
+ "sort-keys": "2.0.0"
+ }
+ },
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
+ },
+ "query-string": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.0.tgz",
+ "integrity": "sha512-F3DkxxlY0AqD/rwe4YAwjRE2HjOkKW7TxsuteyrS/Jbwrxw887PqYBL4sWUJ9D/V1hmFns0SCD6FDyvlwo9RCQ==",
+ "requires": {
+ "decode-uri-component": "0.2.0",
+ "object-assign": "4.1.1",
+ "strict-uri-encode": "1.1.0"
+ }
+ },
+ "sort-keys": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz",
+ "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=",
+ "requires": {
+ "is-plain-obj": "1.1.0"
+ }
+ }
+ }
+ },
"cached-constructors-x": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/cached-constructors-x/-/cached-constructors-x-1.0.0.tgz",
@@ -2364,6 +2666,11 @@
"resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30000803.tgz",
"integrity": "sha1-Po0rr1bC/VpZyC4ieSig3CwmcC0="
},
+ "caniuse-lite": {
+ "version": "1.0.30000808",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000808.tgz",
+ "integrity": "sha512-vT0JLmHdvq1UVbYXioxCXHYdNw55tyvi+IUWyX0Zeh1OFQi2IllYtm38IJnSgHWCv/zUnX1hdhy3vMJvuTNSqw=="
+ },
"capture-stack-trace": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.0.tgz",
@@ -2414,21 +2721,38 @@
}
},
"chai": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
- "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-4.1.2.tgz",
+ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=",
"dev": true,
"requires": {
"assertion-error": "1.1.0",
- "deep-eql": "0.1.3",
- "type-detect": "1.0.0"
+ "check-error": "1.0.2",
+ "deep-eql": "3.0.1",
+ "get-func-name": "2.0.0",
+ "pathval": "1.1.0",
+ "type-detect": "4.0.8"
+ },
+ "dependencies": {
+ "deep-eql": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz",
+ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==",
+ "dev": true,
+ "requires": {
+ "type-detect": "4.0.8"
+ }
+ }
}
},
"chai-as-promised": {
- "version": "5.3.0",
- "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-5.3.0.tgz",
- "integrity": "sha1-CdekApCKpw39vq1T5YU/x50+8hw=",
- "dev": true
+ "version": "7.1.1",
+ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-7.1.1.tgz",
+ "integrity": "sha512-azL6xMoi+uxu6z4rhWQ1jbdUhOMhis2PvscD/xjLqNMkv3BPPp2JyyuTHOrf9BOosGpNQ11v6BKv/g57RXbiaA==",
+ "dev": true,
+ "requires": {
+ "check-error": "1.0.2"
+ }
},
"chai-dom": {
"version": "1.7.0",
@@ -2467,38 +2791,34 @@
"dev": true
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
- "dev": true,
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
+ "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
"requires": {
"ansi-styles": "3.2.0",
"escape-string-regexp": "1.0.5",
- "supports-color": "4.5.0"
+ "supports-color": "5.2.0"
},
"dependencies": {
"ansi-styles": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
"integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "dev": true,
"requires": {
"color-convert": "1.9.1"
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
- "dev": true
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
- "dev": true,
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
+ "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
"requires": {
- "has-flag": "2.0.0"
+ "has-flag": "3.0.0"
}
}
}
@@ -2516,6 +2836,12 @@
"resolved": "https://registry.npmjs.org/chardet/-/chardet-0.4.2.tgz",
"integrity": "sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I="
},
+ "check-error": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
+ "integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII=",
+ "dev": true
+ },
"check-types": {
"version": "7.3.0",
"resolved": "https://registry.npmjs.org/check-types/-/check-types-7.3.0.tgz",
@@ -2834,6 +3160,14 @@
}
}
},
+ "clone-response": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz",
+ "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=",
+ "requires": {
+ "mimic-response": "1.0.0"
+ }
+ },
"clone-stats": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
@@ -2862,6 +3196,12 @@
"q": "1.5.1"
}
},
+ "coalescy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/coalescy/-/coalescy-1.0.0.tgz",
+ "integrity": "sha1-SwZYRrg2NhrabEtKSr9LwcrDG/E=",
+ "dev": true
+ },
"code-point-at": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
@@ -3008,21 +3348,28 @@
"dev": true
},
"compressible": {
- "version": "2.0.12",
- "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.12.tgz",
- "integrity": "sha1-xZpcmdt2dn6YdlAOJx72OzSTvWY=",
+ "version": "2.0.13",
+ "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.13.tgz",
+ "integrity": "sha1-DRAgq5JLL9tNYnmHXH1tq6a6p6k=",
"requires": {
- "mime-db": "1.30.0"
+ "mime-db": "1.33.0"
+ },
+ "dependencies": {
+ "mime-db": {
+ "version": "1.33.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz",
+ "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ=="
+ }
}
},
"compression": {
- "version": "1.7.1",
- "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.1.tgz",
- "integrity": "sha1-7/JgPvwuIs+G810uuTWJ+YdTc9s=",
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.2.tgz",
+ "integrity": "sha1-qv+81qr4VLROuygDU9WtFlH1mmk=",
"requires": {
"accepts": "1.3.4",
"bytes": "3.0.0",
- "compressible": "2.0.12",
+ "compressible": "2.0.13",
"debug": "2.6.9",
"on-headers": "1.0.1",
"safe-buffer": "5.1.1",
@@ -3462,7 +3809,6 @@
"version": "1.3.0-rc0",
"resolved": "https://registry.npmjs.org/css-select/-/css-select-1.3.0-rc0.tgz",
"integrity": "sha1-b5MZaqrnN2ZuoQNqjLFKj8t6kjE=",
- "optional": true,
"requires": {
"boolbase": "1.0.0",
"css-what": "2.1.0",
@@ -3473,8 +3819,7 @@
"css-select-base-adapter": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.0.tgz",
- "integrity": "sha1-AQKz0UYw34bD65+p9UVicBBs+ZA=",
- "optional": true
+ "integrity": "sha1-AQKz0UYw34bD65+p9UVicBBs+ZA="
},
"css-selector-tokenizer": {
"version": "0.7.0",
@@ -3502,7 +3847,6 @@
"version": "1.0.0-alpha25",
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha25.tgz",
"integrity": "sha512-XC6xLW/JqIGirnZuUWHXCHRaAjje2b3OIB0Vj5RIJo6mIi/AdJo30quQl5LxUl0gkXDIrTrFGbMlcZjyFplz1A==",
- "optional": true,
"requires": {
"mdn-data": "1.1.0",
"source-map": "0.5.7"
@@ -3511,8 +3855,7 @@
"css-url-regex": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz",
- "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=",
- "optional": true
+ "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w="
},
"css-what": {
"version": "2.1.0",
@@ -3561,6 +3904,21 @@
"postcss-unique-selectors": "2.0.2",
"postcss-value-parser": "3.3.0",
"postcss-zindex": "2.2.0"
+ },
+ "dependencies": {
+ "autoprefixer": {
+ "version": "6.7.7",
+ "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-6.7.7.tgz",
+ "integrity": "sha1-Hb0cg1ZY41zj+ZhAmdsAWFx4IBQ=",
+ "requires": {
+ "browserslist": "1.7.7",
+ "caniuse-db": "1.0.30000803",
+ "normalize-range": "0.1.2",
+ "num2fraction": "1.2.2",
+ "postcss": "5.2.18",
+ "postcss-value-parser": "3.3.0"
+ }
+ }
}
},
"csso": {
@@ -3573,9 +3931,9 @@
}
},
"csv-stringify": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-2.0.1.tgz",
- "integrity": "sha512-qoWgXJHmANfwIZFogezZjfN7KeaALrSe2zA5velb2tVEx0r7tgVuMfideB5gq12x5Z7LkvgOayXplOwlKcXnKQ==",
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/csv-stringify/-/csv-stringify-2.0.4.tgz",
+ "integrity": "sha512-rm8JxNYXglaDKExA2KqCKY+jx8qVBSkXm8/bgw2BIyzLq1/qni/QMSPBchAkd8RGsJhMJDQ+ZxikG/Qgvck+gQ==",
"requires": {
"lodash.get": "4.4.2"
}
@@ -3932,6 +4290,14 @@
}
}
},
+ "decompress-response": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz",
+ "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=",
+ "requires": {
+ "mimic-response": "1.0.0"
+ }
+ },
"decompress-tar": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/decompress-tar/-/decompress-tar-3.1.0.tgz",
@@ -5120,7 +5486,6 @@
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz",
"integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=",
- "dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.38",
@@ -5135,11 +5500,27 @@
"resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.2.1.tgz",
"integrity": "sha1-7FYjOGgDKQkgcXDDlEjiREndH8Q="
},
+ "es6-promisify": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz",
+ "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=",
+ "dev": true,
+ "requires": {
+ "es6-promise": "4.2.4"
+ },
+ "dependencies": {
+ "es6-promise": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz",
+ "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==",
+ "dev": true
+ }
+ }
+ },
"es6-set": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz",
"integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=",
- "dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.38",
@@ -5214,7 +5595,6 @@
"version": "3.6.0",
"resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz",
"integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=",
- "dev": true,
"requires": {
"es6-map": "0.1.5",
"es6-weak-map": "2.0.2",
@@ -5225,170 +5605,130 @@
"estraverse": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
}
}
},
"eslint": {
- "version": "3.19.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-3.19.0.tgz",
- "integrity": "sha1-yPxiAcf0DdCJQbh8CFdnOGpnmsw=",
+ "version": "4.18.1",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.18.1.tgz",
+ "integrity": "sha512-gPSfpSRCHre1GLxGmO68tZNxOlL2y7xBd95VcLD+Eo4S2js31YoMum3CAQIOaxY24hqYOMksMvW38xuuWKQTgw==",
"dev": true,
"requires": {
+ "ajv": "5.5.2",
"babel-code-frame": "6.26.0",
- "chalk": "1.1.3",
+ "chalk": "2.3.1",
"concat-stream": "1.6.0",
- "debug": "2.6.9",
+ "cross-spawn": "5.1.0",
+ "debug": "3.1.0",
"doctrine": "2.1.0",
- "escope": "3.6.0",
+ "eslint-scope": "3.7.1",
+ "eslint-visitor-keys": "1.0.0",
"espree": "3.5.3",
"esquery": "1.0.0",
- "estraverse": "4.2.0",
"esutils": "2.0.2",
"file-entry-cache": "2.0.0",
+ "functional-red-black-tree": "1.0.1",
"glob": "7.1.2",
- "globals": "9.18.0",
+ "globals": "11.3.0",
"ignore": "3.3.7",
"imurmurhash": "0.1.4",
- "inquirer": "0.12.0",
- "is-my-json-valid": "2.17.1",
+ "inquirer": "3.0.6",
"is-resolvable": "1.1.0",
- "js-yaml": "3.7.0",
- "json-stable-stringify": "1.0.1",
+ "js-yaml": "3.10.0",
+ "json-stable-stringify-without-jsonify": "1.0.1",
"levn": "0.3.0",
"lodash": "4.17.5",
+ "minimatch": "3.0.4",
"mkdirp": "0.5.1",
"natural-compare": "1.4.0",
"optionator": "0.8.2",
"path-is-inside": "1.0.2",
- "pluralize": "1.2.1",
- "progress": "1.1.8",
+ "pluralize": "7.0.0",
+ "progress": "2.0.0",
"require-uncached": "1.0.3",
- "shelljs": "0.7.8",
- "strip-bom": "3.0.0",
+ "semver": "5.5.0",
+ "strip-ansi": "4.0.0",
"strip-json-comments": "2.0.1",
- "table": "3.8.3",
- "text-table": "0.2.0",
- "user-home": "2.0.0"
+ "table": "4.0.2",
+ "text-table": "0.2.0"
},
"dependencies": {
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- }
- },
- "cli-cursor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz",
- "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=",
- "dev": true,
- "requires": {
- "restore-cursor": "1.0.1"
- }
- },
- "estraverse": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
- },
- "figures": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
- "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
- "dev": true,
- "requires": {
- "escape-string-regexp": "1.0.5",
- "object-assign": "4.1.1"
- }
- },
- "inquirer": {
- "version": "0.12.0",
- "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-0.12.0.tgz",
- "integrity": "sha1-HvK/1jUE3wvHV4X/+MLEHfEvB34=",
- "dev": true,
- "requires": {
- "ansi-escapes": "1.4.0",
- "ansi-regex": "2.1.1",
- "chalk": "1.1.3",
- "cli-cursor": "1.0.2",
- "cli-width": "2.2.0",
- "figures": "1.7.0",
- "lodash": "4.17.5",
- "readline2": "1.0.1",
- "run-async": "0.1.0",
- "rx-lite": "3.1.2",
- "string-width": "1.0.2",
- "strip-ansi": "3.0.1",
- "through": "2.3.8"
- }
- },
- "onetime": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz",
- "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=",
- "dev": true
- },
- "restore-cursor": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz",
- "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=",
- "dev": true,
- "requires": {
- "exit-hook": "1.1.1",
- "onetime": "1.1.0"
- }
- },
- "run-async": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/run-async/-/run-async-0.1.0.tgz",
- "integrity": "sha1-yK1KXhEGYeQCp9IbUw4AnyX444k=",
- "dev": true,
- "requires": {
- "once": "1.4.0"
- }
- },
- "shelljs": {
- "version": "0.7.8",
- "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz",
- "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=",
- "dev": true,
- "requires": {
- "glob": "7.1.2",
- "interpret": "1.1.0",
- "rechoir": "0.6.2"
- }
- },
- "strip-bom": {
+ "ansi-regex": {
"version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
- "user-home": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/user-home/-/user-home-2.0.0.tgz",
- "integrity": "sha1-nHC/2Babwdy/SGBODwS4tJzenp8=",
+ "cross-spawn": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
+ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"dev": true,
"requires": {
- "os-homedir": "1.0.2"
+ "lru-cache": "4.1.1",
+ "shebang-command": "1.2.0",
+ "which": "1.3.0"
+ }
+ },
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==",
+ "dev": true
+ },
+ "globals": {
+ "version": "11.3.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.3.0.tgz",
+ "integrity": "sha512-kkpcKNlmQan9Z5ZmgqKH/SMbSmjxQ7QjyNqfXVc8VJcoBV2UEg+sxQD15GQofGRh2hfpwUb70VC31DR7Rq5Hdw==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "dev": true,
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
+ "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "3.0.0"
}
}
}
},
"eslint-config-habitrpg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/eslint-config-habitrpg/-/eslint-config-habitrpg-3.0.0.tgz",
- "integrity": "sha1-fPq7yR9b084PAMCpo1Ccorl3O+0=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-habitrpg/-/eslint-config-habitrpg-4.0.0.tgz",
+ "integrity": "sha512-vZc/KjnNVL2BkDBQaQBF9JV16cnZyKa6djCCqH6iKhp8Uuye8Bym3eeLNEcnGkOtZfzJE61hDqiPZXQk7BiXJQ==",
"dev": true,
"requires": {
"eslint-plugin-lodash": "2.6.1",
@@ -5396,12 +5736,13 @@
}
},
"eslint-friendly-formatter": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/eslint-friendly-formatter/-/eslint-friendly-formatter-2.0.7.tgz",
- "integrity": "sha1-ZX+VoZr0mJY2r+uxzJ3mzrvQiO4=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-friendly-formatter/-/eslint-friendly-formatter-3.0.0.tgz",
+ "integrity": "sha1-J4h0Q1psRuwdlPoLH/SU4w7wQpA=",
"dev": true,
"requires": {
"chalk": "1.1.3",
+ "coalescy": "1.0.0",
"extend": "3.0.1",
"minimist": "1.2.0",
"text-table": "0.2.0"
@@ -5455,9 +5796,9 @@
}
},
"eslint-plugin-html": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-2.0.3.tgz",
- "integrity": "sha1-fImIOrDIX6XSi2ZqFKTpBqqQuJc=",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-4.0.2.tgz",
+ "integrity": "sha512-CrQd0F8GWdNWnu4PFrYZl+LjUCXNVy2h0uhDMtnf/7VKc9HRcnkXSrlg0BSGfptZPSzmwnnwCaREAa9+fnQhYw==",
"dev": true,
"requires": {
"htmlparser2": "3.9.2"
@@ -5507,6 +5848,27 @@
"ramda": "0.24.1"
}
},
+ "eslint-scope": {
+ "version": "3.7.1",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-3.7.1.tgz",
+ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=",
+ "requires": {
+ "esrecurse": "4.2.0",
+ "estraverse": "4.2.0"
+ },
+ "dependencies": {
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
+ }
+ }
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ=="
+ },
"espree": {
"version": "3.5.3",
"resolved": "https://registry.npmjs.org/espree/-/espree-3.5.3.tgz",
@@ -5543,7 +5905,6 @@
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.0.tgz",
"integrity": "sha1-+pVo2Y04I/mkHZHpAtyrnqblsWM=",
- "dev": true,
"requires": {
"estraverse": "4.2.0",
"object-assign": "4.1.1"
@@ -5552,8 +5913,7 @@
"estraverse": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
- "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
- "dev": true
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM="
}
}
},
@@ -5576,7 +5936,6 @@
"version": "0.3.5",
"resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz",
"integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=",
- "dev": true,
"requires": {
"d": "1.0.0",
"es5-ext": "0.10.38"
@@ -5687,12 +6046,6 @@
"meow": "3.7.0"
}
},
- "exit-hook": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/exit-hook/-/exit-hook-1.1.1.tgz",
- "integrity": "sha1-8FyiM7SMBdVP/wd2XfhQfpXAL/g=",
- "dev": true
- },
"expand-braces": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/expand-braces/-/expand-braces-0.1.2.tgz",
@@ -5944,38 +6297,20 @@
}
},
"express-basic-auth": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.1.3.tgz",
- "integrity": "sha512-+tYtERHfl46Y1sPexskNcnIgYCmEnvj4Hp8/19dfByMUQAAWKEQ/Ik1taQ+Kj9LLJP1ItuXa95Ta8e8LtyltVQ==",
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/express-basic-auth/-/express-basic-auth-1.1.4.tgz",
+ "integrity": "sha512-stNYRMPULJu/Tk3aFSdkyFMHDPDukens2L5FrTHJab+k/gvBdjB885W3gAZtHNrUaSmbAO8dQ9Omcot9qtbAag==",
"requires": {
"basic-auth": "1.1.0"
}
},
"express-validator": {
- "version": "2.21.0",
- "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-2.21.0.tgz",
- "integrity": "sha1-9fwvn6npqFeGNPEOhrpaQ0a5b08=",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/express-validator/-/express-validator-5.0.1.tgz",
+ "integrity": "sha512-M5SgmiyzAzdqnaCAgqvQpiC7KpCBeIqcwYxivTv32ALWk+ZQG/E2DlxH5FoIOsO5m/V9xO8SGyghtz5Waxz35A==",
"requires": {
- "bluebird": "3.4.7",
- "lodash": "4.16.6",
- "validator": "5.7.0"
- },
- "dependencies": {
- "bluebird": {
- "version": "3.4.7",
- "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.4.7.tgz",
- "integrity": "sha1-9y12C+Cbf3bQjtj66Ysomo0F+rM="
- },
- "lodash": {
- "version": "4.16.6",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.16.6.tgz",
- "integrity": "sha1-0iyaxmAojzhD4Wun0rXQbMon13c="
- },
- "validator": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/validator/-/validator-5.7.0.tgz",
- "integrity": "sha1-eoelgUa2laxIYHEUHAxJ1n2gXlw="
- }
+ "lodash": "4.17.5",
+ "validator": "9.4.1"
}
},
"extend": {
@@ -6017,9 +6352,9 @@
}
},
"extract-text-webpack-plugin": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-2.1.2.tgz",
- "integrity": "sha1-dW7076gVXDaBgz+8NNpTuUF0bWw=",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extract-text-webpack-plugin/-/extract-text-webpack-plugin-3.0.2.tgz",
+ "integrity": "sha512-bt/LZ4m5Rqt/Crl2HiKuAl/oqg0psx1tsTLkvWbJen1CtD+fftkZhMaQ9HOtY2gWsl2Wq+sABmMVi9z3DhKWQQ==",
"requires": {
"async": "2.6.0",
"loader-utils": "1.1.0",
@@ -6279,6 +6614,7 @@
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
"integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
+ "dev": true,
"requires": {
"commondir": "1.0.1",
"mkdirp": "0.5.1",
@@ -6499,6 +6835,24 @@
"resolved": "https://registry.npmjs.org/from/-/from-0.1.7.tgz",
"integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4="
},
+ "from2": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
+ "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
+ "requires": {
+ "inherits": "2.0.3",
+ "readable-stream": "2.3.3"
+ }
+ },
+ "fs-access": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/fs-access/-/fs-access-1.0.1.tgz",
+ "integrity": "sha1-1qh/JiJxzv6+wwxVNAf7mV2od3o=",
+ "dev": true,
+ "requires": {
+ "null-check": "1.0.0"
+ }
+ },
"fs-extra": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-3.0.1.tgz",
@@ -6546,12 +6900,14 @@
"dependencies": {
"abbrev": {
"version": "1.1.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.0.tgz",
+ "integrity": "sha1-0FVMIlZjbi9W58LlrRg/hZQo2B8=",
"optional": true
},
"ajv": {
"version": "4.11.8",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
+ "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
"optional": true,
"requires": {
"co": "4.6.0",
@@ -6560,16 +6916,19 @@
},
"ansi-regex": {
"version": "2.1.1",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8="
},
"aproba": {
"version": "1.1.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.1.1.tgz",
+ "integrity": "sha1-ldNgDwdxCqDpKYxyatXs8urLq6s=",
"optional": true
},
"are-we-there-yet": {
"version": "1.1.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.4.tgz",
+ "integrity": "sha1-u13KOCu5TwXhUZQ3PRb9O6HKEQ0=",
"optional": true,
"requires": {
"delegates": "1.0.0",
@@ -6578,36 +6937,43 @@
},
"asn1": {
"version": "0.2.3",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz",
+ "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=",
"optional": true
},
"assert-plus": {
"version": "0.2.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
+ "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
"optional": true
},
"asynckit": {
"version": "0.4.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
+ "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
"optional": true
},
"aws-sign2": {
"version": "0.6.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
+ "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
"optional": true
},
"aws4": {
"version": "1.6.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz",
+ "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=",
"optional": true
},
"balanced-match": {
"version": "0.4.2",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-0.4.2.tgz",
+ "integrity": "sha1-yz8+PHMtwPAe5wtAPzAuYddwmDg="
},
"bcrypt-pbkdf": {
"version": "1.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz",
+ "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=",
"optional": true,
"requires": {
"tweetnacl": "0.14.5"
@@ -6615,21 +6981,24 @@
},
"block-stream": {
"version": "0.0.9",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz",
+ "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=",
"requires": {
"inherits": "2.0.3"
}
},
"boom": {
"version": "2.10.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
+ "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"requires": {
"hoek": "2.16.3"
}
},
"brace-expansion": {
"version": "1.1.7",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.7.tgz",
+ "integrity": "sha1-Pv/DxQ4ABTH7cg6v+A8K6O8jz1k=",
"requires": {
"balanced-match": "0.4.2",
"concat-map": "0.0.1"
@@ -6637,51 +7006,61 @@
},
"buffer-shims": {
"version": "1.0.0",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz",
+ "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E="
},
"caseless": {
"version": "0.12.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz",
+ "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=",
"optional": true
},
"co": {
"version": "4.6.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
+ "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
"optional": true
},
"code-point-at": {
"version": "1.1.0",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
},
"combined-stream": {
"version": "1.0.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
+ "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
"requires": {
"delayed-stream": "1.0.0"
}
},
"concat-map": {
"version": "0.0.1",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
+ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s="
},
"console-control-strings": {
"version": "1.1.0",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
+ "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
},
"core-util-is": {
"version": "1.0.2",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
+ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac="
},
"cryptiles": {
"version": "2.0.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
+ "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"requires": {
"boom": "2.10.1"
}
},
"dashdash": {
"version": "1.14.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
+ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=",
"optional": true,
"requires": {
"assert-plus": "1.0.0"
@@ -6689,14 +7068,16 @@
"dependencies": {
"assert-plus": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"optional": true
}
}
},
"debug": {
"version": "2.6.8",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.8.tgz",
+ "integrity": "sha1-5zFTHKLt4n0YgiJCfaF4IdaP9Pw=",
"optional": true,
"requires": {
"ms": "2.0.0"
@@ -6704,26 +7085,31 @@
},
"deep-extend": {
"version": "0.4.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz",
+ "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=",
"optional": true
},
"delayed-stream": {
"version": "1.0.0",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
+ "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk="
},
"delegates": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
+ "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=",
"optional": true
},
"detect-libc": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.2.tgz",
+ "integrity": "sha1-ca1dIEvxempsqPRQxhRUBm70YeE=",
"optional": true
},
"ecc-jsbn": {
"version": "0.1.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz",
+ "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=",
"optional": true,
"requires": {
"jsbn": "0.1.1"
@@ -6731,21 +7117,25 @@
},
"extend": {
"version": "3.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz",
+ "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=",
"optional": true
},
"extsprintf": {
"version": "1.0.2",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.0.2.tgz",
+ "integrity": "sha1-4QgOBljjALBilJkMxw4VAiNf1VA="
},
"forever-agent": {
"version": "0.6.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
+ "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"optional": true
},
"form-data": {
"version": "2.1.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
+ "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
"optional": true,
"requires": {
"asynckit": "0.4.0",
@@ -6755,11 +7145,13 @@
},
"fs.realpath": {
"version": "1.0.0",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
+ "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8="
},
"fstream": {
"version": "1.0.11",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz",
+ "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=",
"requires": {
"graceful-fs": "4.1.11",
"inherits": "2.0.3",
@@ -6769,7 +7161,8 @@
},
"fstream-ignore": {
"version": "1.0.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/fstream-ignore/-/fstream-ignore-1.0.5.tgz",
+ "integrity": "sha1-nDHa40dnAY/h0kmyTa2mfQktoQU=",
"optional": true,
"requires": {
"fstream": "1.0.11",
@@ -6779,7 +7172,8 @@
},
"gauge": {
"version": "2.7.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
+ "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=",
"optional": true,
"requires": {
"aproba": "1.1.1",
@@ -6794,7 +7188,8 @@
},
"getpass": {
"version": "0.1.7",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz",
+ "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=",
"optional": true,
"requires": {
"assert-plus": "1.0.0"
@@ -6802,14 +7197,16 @@
"dependencies": {
"assert-plus": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"optional": true
}
}
},
"glob": {
"version": "7.1.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
+ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==",
"requires": {
"fs.realpath": "1.0.0",
"inflight": "1.0.6",
@@ -6821,16 +7218,19 @@
},
"graceful-fs": {
"version": "4.1.11",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
+ "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg="
},
"har-schema": {
"version": "1.0.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
+ "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
"optional": true
},
"har-validator": {
"version": "4.2.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
+ "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
"optional": true,
"requires": {
"ajv": "4.11.8",
@@ -6839,12 +7239,14 @@
},
"has-unicode": {
"version": "2.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
+ "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=",
"optional": true
},
"hawk": {
"version": "3.1.3",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
+ "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
"requires": {
"boom": "2.10.1",
"cryptiles": "2.0.5",
@@ -6854,11 +7256,13 @@
},
"hoek": {
"version": "2.16.3",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
+ "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0="
},
"http-signature": {
"version": "1.1.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
+ "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
"optional": true,
"requires": {
"assert-plus": "0.2.0",
@@ -6868,7 +7272,8 @@
},
"inflight": {
"version": "1.0.6",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
+ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"requires": {
"once": "1.4.0",
"wrappy": "1.0.2"
@@ -6876,37 +7281,44 @@
},
"inherits": {
"version": "2.0.3",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
},
"ini": {
"version": "1.3.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.4.tgz",
+ "integrity": "sha1-BTfLedr1m1mhpRff9wbIbsA5Fi4=",
"optional": true
},
"is-fullwidth-code-point": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
+ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
"requires": {
"number-is-nan": "1.0.1"
}
},
"is-typedarray": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
"optional": true
},
"isarray": {
"version": "1.0.0",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE="
},
"isstream": {
"version": "0.1.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
+ "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=",
"optional": true
},
"jodid25519": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/jodid25519/-/jodid25519-1.0.2.tgz",
+ "integrity": "sha1-BtSRIlUJNBlHfUJWM2BuDpB4KWc=",
"optional": true,
"requires": {
"jsbn": "0.1.1"
@@ -6914,17 +7326,20 @@
},
"jsbn": {
"version": "0.1.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz",
+ "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=",
"optional": true
},
"json-schema": {
"version": "0.2.3",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz",
+ "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=",
"optional": true
},
"json-stable-stringify": {
"version": "1.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz",
+ "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=",
"optional": true,
"requires": {
"jsonify": "0.0.0"
@@ -6932,17 +7347,20 @@
},
"json-stringify-safe": {
"version": "5.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=",
"optional": true
},
"jsonify": {
"version": "0.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz",
+ "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=",
"optional": true
},
"jsprim": {
"version": "1.4.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.0.tgz",
+ "integrity": "sha1-o7h+QCmNjDgFUtjMdiigu5WiKRg=",
"optional": true,
"requires": {
"assert-plus": "1.0.0",
@@ -6953,48 +7371,56 @@
"dependencies": {
"assert-plus": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"optional": true
}
}
},
"mime-db": {
"version": "1.27.0",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.27.0.tgz",
+ "integrity": "sha1-gg9XIpa70g7CXtVeW13oaeVDbrE="
},
"mime-types": {
"version": "2.1.15",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.15.tgz",
+ "integrity": "sha1-pOv1BkCUVpI3uM9wBGd20J/JKu0=",
"requires": {
"mime-db": "1.27.0"
}
},
"minimatch": {
"version": "3.0.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
+ "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"requires": {
"brace-expansion": "1.1.7"
}
},
"minimist": {
"version": "0.0.8",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
},
"mkdirp": {
"version": "0.5.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
"requires": {
"minimist": "0.0.8"
}
},
"ms": {
"version": "2.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
"optional": true
},
"node-pre-gyp": {
"version": "0.6.39",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.6.39.tgz",
+ "integrity": "sha512-OsJV74qxnvz/AMGgcfZoDaeDXKD3oY3QVIbBmwszTFkRisTSXbMQyn4UWzUMOtA5SVhrBZOTp0wcoSBgfMfMmQ==",
"optional": true,
"requires": {
"detect-libc": "1.0.2",
@@ -7012,7 +7438,8 @@
},
"nopt": {
"version": "4.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz",
+ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=",
"optional": true,
"requires": {
"abbrev": "1.1.0",
@@ -7021,7 +7448,8 @@
},
"npmlog": {
"version": "4.1.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.0.tgz",
+ "integrity": "sha512-ocolIkZYZt8UveuiDS0yAkkIjid1o7lPG8cYm05yNYzBn8ykQtaiPMEGp8fY9tKdDgm8okpdKzkvu1y9hUYugA==",
"optional": true,
"requires": {
"are-we-there-yet": "1.1.4",
@@ -7032,38 +7460,45 @@
},
"number-is-nan": {
"version": "1.0.1",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0="
},
"oauth-sign": {
"version": "0.8.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
+ "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
"optional": true
},
"object-assign": {
"version": "4.1.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
"optional": true
},
"once": {
"version": "1.4.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"requires": {
"wrappy": "1.0.2"
}
},
"os-homedir": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
+ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
"optional": true
},
"os-tmpdir": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
"optional": true
},
"osenv": {
"version": "0.1.4",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.4.tgz",
+ "integrity": "sha1-Qv5tWVPfBsgGS+bxdsPQWqqjRkQ=",
"optional": true,
"requires": {
"os-homedir": "1.0.2",
@@ -7072,30 +7507,36 @@
},
"path-is-absolute": {
"version": "1.0.1",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
+ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18="
},
"performance-now": {
"version": "0.2.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
+ "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
"optional": true
},
"process-nextick-args": {
"version": "1.0.7",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
+ "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
},
"punycode": {
"version": "1.4.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
+ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=",
"optional": true
},
"qs": {
"version": "6.4.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
+ "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
"optional": true
},
"rc": {
"version": "1.2.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.1.tgz",
+ "integrity": "sha1-LgPo5C7kULjLPc5lvhv4l04d/ZU=",
"optional": true,
"requires": {
"deep-extend": "0.4.2",
@@ -7106,14 +7547,16 @@
"dependencies": {
"minimist": {
"version": "1.2.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
"optional": true
}
}
},
"readable-stream": {
"version": "2.2.9",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.2.9.tgz",
+ "integrity": "sha1-z3jsb0ptHrQ9JkiMrJfwQudLf8g=",
"requires": {
"buffer-shims": "1.0.0",
"core-util-is": "1.0.2",
@@ -7126,7 +7569,8 @@
},
"request": {
"version": "2.81.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
+ "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
"optional": true,
"requires": {
"aws-sign2": "0.6.0",
@@ -7155,40 +7599,47 @@
},
"rimraf": {
"version": "2.6.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.1.tgz",
+ "integrity": "sha1-wjOOxkPfeht/5cVPqG9XQopV8z0=",
"requires": {
"glob": "7.1.2"
}
},
"safe-buffer": {
"version": "5.0.1",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
+ "integrity": "sha1-0mPKVGls2KMGtcplUekt5XkY++c="
},
"semver": {
"version": "5.3.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
+ "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=",
"optional": true
},
"set-blocking": {
"version": "2.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
+ "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
"optional": true
},
"signal-exit": {
"version": "3.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
"optional": true
},
"sntp": {
"version": "1.0.9",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
+ "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"requires": {
"hoek": "2.16.3"
}
},
"sshpk": {
"version": "1.13.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.0.tgz",
+ "integrity": "sha1-/yo+T9BEl1Vf7Zezmg/YL6+zozw=",
"optional": true,
"requires": {
"asn1": "0.2.3",
@@ -7204,14 +7655,16 @@
"dependencies": {
"assert-plus": {
"version": "1.0.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz",
+ "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=",
"optional": true
}
}
},
"string-width": {
"version": "1.0.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
"requires": {
"code-point-at": "1.1.0",
"is-fullwidth-code-point": "1.0.0",
@@ -7220,31 +7673,36 @@
},
"string_decoder": {
"version": "1.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.1.tgz",
+ "integrity": "sha1-YuIA8DmVWmgQ2N8KM//A8BNmLZg=",
"requires": {
"safe-buffer": "5.0.1"
}
},
"stringstream": {
"version": "0.0.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz",
+ "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=",
"optional": true
},
"strip-ansi": {
"version": "3.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
"requires": {
"ansi-regex": "2.1.1"
}
},
"strip-json-comments": {
"version": "2.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
+ "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
"optional": true
},
"tar": {
"version": "2.2.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz",
+ "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=",
"requires": {
"block-stream": "0.0.9",
"fstream": "1.0.11",
@@ -7253,7 +7711,8 @@
},
"tar-pack": {
"version": "3.4.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/tar-pack/-/tar-pack-3.4.0.tgz",
+ "integrity": "sha1-I74tf2cagzk3bL2wuP4/3r8xeYQ=",
"optional": true,
"requires": {
"debug": "2.6.8",
@@ -7268,7 +7727,8 @@
},
"tough-cookie": {
"version": "2.3.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.2.tgz",
+ "integrity": "sha1-8IH3bkyFcg5sN6X6ztc3FQ2EByo=",
"optional": true,
"requires": {
"punycode": "1.4.1"
@@ -7276,7 +7736,8 @@
},
"tunnel-agent": {
"version": "0.6.0",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"optional": true,
"requires": {
"safe-buffer": "5.0.1"
@@ -7284,26 +7745,31 @@
},
"tweetnacl": {
"version": "0.14.5",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz",
+ "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=",
"optional": true
},
"uid-number": {
"version": "0.0.6",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
+ "integrity": "sha1-DqEOgDXo61uOREnwbaHHMGY7qoE=",
"optional": true
},
"util-deprecate": {
"version": "1.0.2",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
+ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
},
"uuid": {
"version": "3.0.1",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.0.1.tgz",
+ "integrity": "sha1-ZUS7ot/ajBzxfmKaOjBeK7H+5sE=",
"optional": true
},
"verror": {
"version": "1.3.6",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/verror/-/verror-1.3.6.tgz",
+ "integrity": "sha1-z/XfEpRtKX0rqu+qJoniW+AcAFw=",
"optional": true,
"requires": {
"extsprintf": "1.0.2"
@@ -7311,7 +7777,8 @@
},
"wide-align": {
"version": "1.1.2",
- "bundled": true,
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.2.tgz",
+ "integrity": "sha512-ijDLlyQ7s6x1JgCLur53osjm/UXUYD9+0PbYKrBsYisYXzCxN+HC3mYDNy/dWdmf3AwqwU3CXwDCvsNgGK1S0w==",
"optional": true,
"requires": {
"string-width": "1.0.2"
@@ -7319,7 +7786,8 @@
},
"wrappy": {
"version": "1.0.2",
- "bundled": true
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8="
}
}
},
@@ -7385,6 +7853,12 @@
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A=="
},
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
"gauge": {
"version": "2.7.4",
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
@@ -7426,6 +7900,12 @@
"resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.2.tgz",
"integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U="
},
+ "get-func-name": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
+ "integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE=",
+ "dev": true
+ },
"get-pixels": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/get-pixels/-/get-pixels-3.3.0.tgz",
@@ -7555,12 +8035,6 @@
"logalot": "2.1.0"
}
},
- "gitbook-plugin-github": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/gitbook-plugin-github/-/gitbook-plugin-github-2.0.0.tgz",
- "integrity": "sha1-UWbnY8/MQC1DKIC3pshcHFS1ao0=",
- "dev": true
- },
"glob": {
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz",
@@ -7768,21 +8242,47 @@
}
},
"got": {
- "version": "6.7.1",
- "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
- "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/got/-/got-8.2.0.tgz",
+ "integrity": "sha512-giadqJpXIwjY+ZsuWys8p2yjZGhOHiU4hiJHjS/oeCxw1u8vANQz3zPlrxW2Zw/siCXsSMI3hvzWGcnFyujyAg==",
"requires": {
- "create-error-class": "3.0.2",
+ "@sindresorhus/is": "0.7.0",
+ "cacheable-request": "2.1.4",
+ "decompress-response": "3.3.0",
"duplexer3": "0.1.4",
"get-stream": "3.0.0",
- "is-redirect": "1.0.0",
+ "into-stream": "3.1.0",
"is-retry-allowed": "1.1.0",
- "is-stream": "1.1.0",
+ "isurl": "1.0.0",
"lowercase-keys": "1.0.0",
+ "mimic-response": "1.0.0",
+ "p-cancelable": "0.3.0",
+ "p-timeout": "2.0.1",
+ "pify": "3.0.0",
"safe-buffer": "5.1.1",
"timed-out": "4.0.1",
- "unzip-response": "2.0.1",
- "url-parse-lax": "1.0.0"
+ "url-parse-lax": "3.0.0",
+ "url-to-options": "1.0.1"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ },
+ "prepend-http": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz",
+ "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc="
+ },
+ "url-parse-lax": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz",
+ "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=",
+ "requires": {
+ "prepend-http": "2.0.0"
+ }
+ }
}
},
"graceful-fs": {
@@ -7839,12 +8339,10 @@
}
},
"gulp-babel": {
- "version": "6.1.3",
- "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-6.1.3.tgz",
- "integrity": "sha512-tm15R3rt4gO59WXCuqrwf4QXJM9VIJC+0J2NPYSC6xZn+cZRD5y5RPGAiHaDxCJq7Rz5BDljlrk3cEjWADF+wQ==",
+ "version": "7.0.1",
+ "resolved": "https://registry.npmjs.org/gulp-babel/-/gulp-babel-7.0.1.tgz",
+ "integrity": "sha512-UqHS3AdxZyJCRxqnAX603Dj3k/Wx6hzcgmav3QcxvsIFq3Y8ZkU7iXd0O+JwD5ivqCc6o0r1S7tCB/xxLnuSNw==",
"requires": {
- "babel-core": "6.26.0",
- "object-assign": "4.1.1",
"plugin-error": "1.0.1",
"replace-ext": "0.0.1",
"through2": "2.0.3",
@@ -8753,6 +9251,11 @@
}
}
},
+ "http-cache-semantics": {
+ "version": "3.8.1",
+ "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz",
+ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w=="
+ },
"http-errors": {
"version": "1.6.2",
"resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.2.tgz",
@@ -8928,6 +9431,7 @@
"version": "1.6.1",
"resolved": "https://registry.npmjs.org/httpntlm/-/httpntlm-1.6.1.tgz",
"integrity": "sha1-rQFScUOi6Hc8+uapb1hla7UqNLI=",
+ "dev": true,
"requires": {
"httpreq": "0.4.24",
"underscore": "1.7.0"
@@ -8936,14 +9440,16 @@
"underscore": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/underscore/-/underscore-1.7.0.tgz",
- "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk="
+ "integrity": "sha1-a7rwh3UA02vjTsqlhODbn+8DUgk=",
+ "dev": true
}
}
},
"httpreq": {
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/httpreq/-/httpreq-0.4.24.tgz",
- "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8="
+ "integrity": "sha1-QzX/2CzZaWaKOUZckprGHWOTYn8=",
+ "dev": true
},
"https-browserify": {
"version": "1.0.0",
@@ -9435,6 +9941,15 @@
"resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz",
"integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ="
},
+ "into-stream": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz",
+ "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=",
+ "requires": {
+ "from2": "2.3.0",
+ "p-is-promise": "1.1.0"
+ }
+ },
"intro.js": {
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/intro.js/-/intro.js-2.7.0.tgz",
@@ -9461,7 +9976,8 @@
"ip": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
- "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo="
+ "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=",
+ "dev": true
},
"ip-regex": {
"version": "1.0.3",
@@ -9776,6 +10292,11 @@
"resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
"integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8="
},
+ "is-object": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz",
+ "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA="
+ },
"is-object-like-x": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/is-object-like-x/-/is-object-like-x-1.6.0.tgz",
@@ -10142,6 +10663,15 @@
"handlebars": "4.0.11"
}
},
+ "isurl": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz",
+ "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==",
+ "requires": {
+ "has-to-string-tag-x": "1.4.1",
+ "is-object": "1.0.1"
+ }
+ },
"jmespath": {
"version": "0.15.0",
"resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.15.0.tgz",
@@ -10193,9 +10723,12 @@
}
},
"js2xmlparser": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-1.0.0.tgz",
- "integrity": "sha1-WhcPLo1kds5FQF4EgjJCUTeC/jA="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-3.0.0.tgz",
+ "integrity": "sha1-P7YOqgicVED5MZ9RdgzNB+JJlzM=",
+ "requires": {
+ "xmlcreate": "1.0.2"
+ }
},
"jsbn": {
"version": "0.1.1",
@@ -10208,6 +10741,11 @@
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-1.3.0.tgz",
"integrity": "sha1-RsP+yMGJKxKwgz25vHYiF226s0s="
},
+ "json-buffer": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz",
+ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg="
+ },
"json-content-demux": {
"version": "0.1.3",
"resolved": "https://registry.npmjs.org/json-content-demux/-/json-content-demux-0.1.3.tgz",
@@ -10236,6 +10774,12 @@
"jsonify": "0.0.0"
}
},
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
"json-stringify-safe": {
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
@@ -10520,6 +11064,31 @@
"sinon-chai": "2.14.0"
},
"dependencies": {
+ "chai": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/chai/-/chai-3.5.0.tgz",
+ "integrity": "sha1-TQJjewZ/6Vi9v906QOxW/vc3Mkc=",
+ "dev": true,
+ "requires": {
+ "assertion-error": "1.1.0",
+ "deep-eql": "0.1.3",
+ "type-detect": "1.0.0"
+ },
+ "dependencies": {
+ "type-detect": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
+ "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=",
+ "dev": true
+ }
+ }
+ },
+ "chai-as-promised": {
+ "version": "5.3.0",
+ "resolved": "https://registry.npmjs.org/chai-as-promised/-/chai-as-promised-5.3.0.tgz",
+ "integrity": "sha1-CdekApCKpw39vq1T5YU/x50+8hw=",
+ "dev": true
+ },
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
@@ -10565,6 +11134,16 @@
}
}
},
+ "karma-chrome-launcher": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-2.2.0.tgz",
+ "integrity": "sha512-uf/ZVpAabDBPvdPdveyk1EPgbnloPvFFGgmRhYLTDH7gEB4nZdSBk8yTU47w1g/drLSx5uMOkjKk7IWKfWg/+w==",
+ "dev": true,
+ "requires": {
+ "fs-access": "1.0.1",
+ "which": "1.3.0"
+ }
+ },
"karma-coverage": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-1.1.1.tgz",
@@ -10778,16 +11357,6 @@
}
}
},
- "karma-phantomjs-launcher": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/karma-phantomjs-launcher/-/karma-phantomjs-launcher-1.0.4.tgz",
- "integrity": "sha1-0jyjSAG9qYY60xjju0vUBisTrNI=",
- "dev": true,
- "requires": {
- "lodash": "4.17.5",
- "phantomjs-prebuilt": "2.1.16"
- }
- },
"karma-sinon-chai": {
"version": "1.3.3",
"resolved": "https://registry.npmjs.org/karma-sinon-chai/-/karma-sinon-chai-1.3.3.tgz",
@@ -10853,6 +11422,25 @@
"resolved": "https://registry.npmjs.org/lodash/-/lodash-3.10.1.tgz",
"integrity": "sha1-W/Rejkm6QYnhfUgnid/RW9FAt7Y=",
"dev": true
+ },
+ "time-stamp": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz",
+ "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=",
+ "dev": true
+ },
+ "webpack-dev-middleware": {
+ "version": "1.12.2",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz",
+ "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==",
+ "dev": true,
+ "requires": {
+ "memory-fs": "0.4.1",
+ "mime": "1.6.0",
+ "path-is-absolute": "1.0.1",
+ "range-parser": "1.2.0",
+ "time-stamp": "2.0.0"
+ }
}
}
},
@@ -10866,6 +11454,14 @@
"resolved": "https://registry.npmjs.org/keygrip/-/keygrip-1.0.2.tgz",
"integrity": "sha1-rTKXxVcGneqLz+ek+kkbdcXd65E="
},
+ "keyv": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz",
+ "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==",
+ "requires": {
+ "json-buffer": "3.0.0"
+ }
+ },
"kind-of": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
@@ -11239,12 +11835,14 @@
"libbase64": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/libbase64/-/libbase64-0.1.0.tgz",
- "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY="
+ "integrity": "sha1-YjUag5VjrF/1vSbxL2Dpgwu3UeY=",
+ "dev": true
},
"libmime": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/libmime/-/libmime-3.0.0.tgz",
"integrity": "sha1-UaGp50SOy9Ms2lRCFnW7IbwJPaY=",
+ "dev": true,
"requires": {
"iconv-lite": "0.4.15",
"libbase64": "0.1.0",
@@ -11254,14 +11852,16 @@
"iconv-lite": {
"version": "0.4.15",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.15.tgz",
- "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es="
+ "integrity": "sha1-/iZaIYrGpXz+hUkn6dBMGYJe3es=",
+ "dev": true
}
}
},
"libqp": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/libqp/-/libqp-1.1.0.tgz",
- "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g="
+ "integrity": "sha1-9ebgatdLeU+1tbZpiL9yjvHe2+g=",
+ "dev": true
},
"liftoff": {
"version": "2.5.0",
@@ -11328,7 +11928,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
- "dev": true,
"requires": {
"p-locate": "2.0.0",
"path-exists": "3.0.0"
@@ -11337,8 +11936,7 @@
"path-exists": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
- "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
- "dev": true
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU="
}
}
},
@@ -11738,6 +12336,22 @@
}
}
},
+ "nodemailer": {
+ "version": "2.7.2",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz",
+ "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "libmime": "3.0.0",
+ "mailcomposer": "4.0.1",
+ "nodemailer-direct-transport": "3.3.2",
+ "nodemailer-shared": "1.1.0",
+ "nodemailer-smtp-pool": "2.8.2",
+ "nodemailer-smtp-transport": "2.7.2",
+ "socks": "1.1.9"
+ }
+ },
"semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
@@ -11870,6 +12484,12 @@
}
}
},
+ "loglevelnext": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/loglevelnext/-/loglevelnext-1.0.3.tgz",
+ "integrity": "sha512-OCxd/b78TijTB4b6zVqLbMrxhebyvdZKwqpL0VHUZ0pYhavXaPD4l6Xrr4n5xqTYWiqtb0i7ikSoJY/myQ/Org==",
+ "dev": true
+ },
"lolex": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
@@ -11938,6 +12558,8 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/mailcomposer/-/mailcomposer-4.0.1.tgz",
"integrity": "sha1-DhxEsqB890DuF9wUm6AJ8Zyt/rQ=",
+ "dev": true,
+ "optional": true,
"requires": {
"buildmail": "4.0.1",
"libmime": "3.0.0"
@@ -12255,6 +12877,11 @@
"brorand": "1.1.0"
}
},
+ "mime": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
+ "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg=="
+ },
"mime-db": {
"version": "1.30.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz",
@@ -12273,6 +12900,11 @@
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
"integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ=="
},
+ "mimic-response": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.0.tgz",
+ "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4="
+ },
"minimalistic-assert": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz",
@@ -12346,9 +12978,9 @@
"dev": true
},
"mocha": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.0.tgz",
- "integrity": "sha512-ukB2dF+u4aeJjc6IGtPNnJXfeby5d4ZqySlIBT0OEyva/DrMjVm5HkQxKnHDLKEfEQBsEnwTg9HHhtPHJdTd8w==",
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-5.0.1.tgz",
+ "integrity": "sha512-SpwyojlnE/WRBNGtvJSNfllfm5PqEDFxcWluSIgLeSBJtXG4DmoX2NNAeEA7rP5kK+79VgtVq8nG6HskaL1ykg==",
"dev": true,
"requires": {
"browser-stdout": "1.3.0",
@@ -12550,7 +13182,12 @@
"integrity": "sha512-Yh9y73JRljxW5QxN08Fner68eFLxM5ynNOAw2LbIB1YAGeQzZT8QFSUvkAz609Zf+IHhhaUxqZK8dG3W/+HEvg=="
},
"moment-recur": {
- "version": "git://github.com/habitrpg/moment-recur.git#f147ef27bbc26ca67638385f3db4a44084c76626"
+ "version": "1.0.7",
+ "resolved": "https://registry.npmjs.org/moment-recur/-/moment-recur-1.0.7.tgz",
+ "integrity": "sha1-TVCSr2SK7e1q/lwT7zjFKQHJlBk=",
+ "requires": {
+ "moment": "2.20.1"
+ }
},
"mongodb": {
"version": "2.2.34",
@@ -12588,9 +13225,9 @@
}
},
"mongoose": {
- "version": "4.13.10",
- "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.10.tgz",
- "integrity": "sha512-ERmAyJf/ECyApfmkcjlbnmY0CoNzanOHA8vCIFuZwY55tW4b4gTVtklFXWLmSye8XjZjM0xHioXr5eN3Z8jtZg==",
+ "version": "4.13.11",
+ "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-4.13.11.tgz",
+ "integrity": "sha512-OgXmFc3vzXwq4zWp41XfSBDnKZLqnBc4Kh7mwwGjBE5iWH5tfkixaPK0uFtpEuzDzUvAIg33bgniyTsmc00olA==",
"requires": {
"async": "2.1.4",
"bson": "1.0.4",
@@ -12618,16 +13255,58 @@
}
},
"monk": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/monk/-/monk-4.1.0.tgz",
- "integrity": "sha1-x+VA6GquaQ1xLD4KtwYa2LpaOio=",
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/monk/-/monk-6.0.5.tgz",
+ "integrity": "sha512-NEygZ2fhRkPE9zxyOT/GhEYKIGClMCQ+StsTruZSlAWf1aRsgvdu8suVvOj3KWfdiOtsIMs9gg8eyyVHPNWRwg==",
"dev": true,
"requires": {
"debug": "2.6.9",
- "gitbook-plugin-github": "2.0.0",
- "mongodb": "2.2.34"
+ "mongodb": "2.2.34",
+ "monk-middleware-cast-ids": "0.2.1",
+ "monk-middleware-fields": "0.2.0",
+ "monk-middleware-handle-callback": "0.2.2",
+ "monk-middleware-options": "0.2.1",
+ "monk-middleware-query": "0.2.0",
+ "monk-middleware-wait-for-connection": "0.2.0",
+ "object-assign": "4.1.1"
}
},
+ "monk-middleware-cast-ids": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/monk-middleware-cast-ids/-/monk-middleware-cast-ids-0.2.1.tgz",
+ "integrity": "sha1-QMQOWmyzPM7cKJIglDJ17ohhxSk=",
+ "dev": true
+ },
+ "monk-middleware-fields": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/monk-middleware-fields/-/monk-middleware-fields-0.2.0.tgz",
+ "integrity": "sha1-/2N6819ZSIecyyvhWpE2CRG+psE=",
+ "dev": true
+ },
+ "monk-middleware-handle-callback": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/monk-middleware-handle-callback/-/monk-middleware-handle-callback-0.2.2.tgz",
+ "integrity": "sha512-5hBynb7asZ2uw9XVze7C3XH0zXT51yFDvYydk/5HnWWzh2NLglDSiKDcX0yLKPHzFgiq+5Z4Laq5fFVnFsmm8w==",
+ "dev": true
+ },
+ "monk-middleware-options": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/monk-middleware-options/-/monk-middleware-options-0.2.1.tgz",
+ "integrity": "sha1-WNrhxRjUZjbr3/UG+t/Hc7tEKIY=",
+ "dev": true
+ },
+ "monk-middleware-query": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/monk-middleware-query/-/monk-middleware-query-0.2.0.tgz",
+ "integrity": "sha1-qSbGd9SlYgxiFRsKVtDAwVFnWHQ=",
+ "dev": true
+ },
+ "monk-middleware-wait-for-connection": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/monk-middleware-wait-for-connection/-/monk-middleware-wait-for-connection-0.2.0.tgz",
+ "integrity": "sha1-MSlY0w5Yi1fQl1TdfJe0hDMWg1o=",
+ "dev": true
+ },
"morgan": {
"version": "1.9.0",
"resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz",
@@ -12931,27 +13610,18 @@
}
},
"nise": {
- "version": "1.2.2",
- "resolved": "https://registry.npmjs.org/nise/-/nise-1.2.2.tgz",
- "integrity": "sha512-rvxf+PSZeCKtP0DgmwMmNf1G3I6X1r4WHiP2H88PlIkOkt7mGqufdokjS8caoHBgZzVx0ee/5ytGcGHbZaUw8w==",
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/nise/-/nise-1.2.5.tgz",
+ "integrity": "sha512-Es4hGuq3lpip5PckrB+Qpuma282M0UJANJ+jxAgI+0wWTL9X6MtNv+M385JgqsAE8hv6NvD3lv8CQtXgEnvlpQ==",
"dev": true,
"requires": {
- "formatio": "1.2.0",
+ "@sinonjs/formatio": "2.0.0",
"just-extend": "1.1.27",
- "lolex": "1.6.0",
+ "lolex": "2.3.2",
"path-to-regexp": "1.7.0",
"text-encoding": "0.6.4"
},
"dependencies": {
- "formatio": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
- "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
- "dev": true,
- "requires": {
- "samsam": "1.1.2"
- }
- },
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
@@ -12959,9 +13629,9 @@
"dev": true
},
"lolex": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/lolex/-/lolex-1.6.0.tgz",
- "integrity": "sha1-OpoCg0UqR9dDnnJzG54H1zhuSfY=",
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/lolex/-/lolex-2.3.2.tgz",
+ "integrity": "sha512-A5pN2tkFj7H0dGIAM6MFvHKMJcPnjZsOMvR7ujCjfgW5TbV6H9vb1PgxLtHvjqNZTHsUolz+6/WEO0N1xNx2ng==",
"dev": true
},
"path-to-regexp": {
@@ -13318,23 +13988,16 @@
"integrity": "sha1-WuVUHQJGRdMqWPzdyc7s6nrjrC8="
},
"nodemailer": {
- "version": "2.7.2",
- "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-2.7.2.tgz",
- "integrity": "sha1-8kLmSa7q45tsftdA73sGHEBNMPk=",
- "requires": {
- "libmime": "3.0.0",
- "mailcomposer": "4.0.1",
- "nodemailer-direct-transport": "3.3.2",
- "nodemailer-shared": "1.1.0",
- "nodemailer-smtp-pool": "2.8.2",
- "nodemailer-smtp-transport": "2.7.2",
- "socks": "1.1.9"
- }
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-4.5.0.tgz",
+ "integrity": "sha512-bznbREPZoRt3g400RdmVYXs2mbZft9Y1DfEqE2GS0VcBwU8DiEMDQ2q4gauSltbsnXtIVHtKH+VmE80I35TxhA=="
},
"nodemailer-direct-transport": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/nodemailer-direct-transport/-/nodemailer-direct-transport-3.3.2.tgz",
"integrity": "sha1-6W+vuQNYVglH5WkBfZfmBzilCoY=",
+ "dev": true,
+ "optional": true,
"requires": {
"nodemailer-shared": "1.1.0",
"smtp-connection": "2.12.0"
@@ -13343,12 +14006,14 @@
"nodemailer-fetch": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/nodemailer-fetch/-/nodemailer-fetch-1.6.0.tgz",
- "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q="
+ "integrity": "sha1-ecSQihwPXzdbc/6IjamCj23JY6Q=",
+ "dev": true
},
"nodemailer-shared": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/nodemailer-shared/-/nodemailer-shared-1.1.0.tgz",
"integrity": "sha1-z1mU4v0mjQD1zw+nZ6CBae2wfsA=",
+ "dev": true,
"requires": {
"nodemailer-fetch": "1.6.0"
}
@@ -13357,6 +14022,8 @@
"version": "2.8.2",
"resolved": "https://registry.npmjs.org/nodemailer-smtp-pool/-/nodemailer-smtp-pool-2.8.2.tgz",
"integrity": "sha1-LrlNbPhXgLG0clzoU7nL1ejajHI=",
+ "dev": true,
+ "optional": true,
"requires": {
"nodemailer-shared": "1.1.0",
"nodemailer-wellknown": "0.1.10",
@@ -13367,6 +14034,8 @@
"version": "2.7.2",
"resolved": "https://registry.npmjs.org/nodemailer-smtp-transport/-/nodemailer-smtp-transport-2.7.2.tgz",
"integrity": "sha1-A9ccdjFPFKx9vHvwM6am0W1n+3c=",
+ "dev": true,
+ "optional": true,
"requires": {
"nodemailer-shared": "1.1.0",
"nodemailer-wellknown": "0.1.10",
@@ -13376,7 +14045,8 @@
"nodemailer-wellknown": {
"version": "0.1.10",
"resolved": "https://registry.npmjs.org/nodemailer-wellknown/-/nodemailer-wellknown-0.1.10.tgz",
- "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U="
+ "integrity": "sha1-WG24EB2zDLRDjrVGc3pBqtDPE9U=",
+ "dev": true
},
"nodemon": {
"version": "1.14.12",
@@ -13521,11 +14191,6 @@
"set-blocking": "2.0.0"
}
},
- "nprogress": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/nprogress/-/nprogress-0.2.0.tgz",
- "integrity": "sha1-y480xTIT2JVyP8urkH6UIq28r7E="
- },
"nth-check": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.1.tgz",
@@ -13534,6 +14199,12 @@
"boolbase": "1.0.0"
}
},
+ "null-check": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/null-check/-/null-check-1.0.0.tgz",
+ "integrity": "sha1-l33/1xdgErnsMNKjnbXPcqBDnt0=",
+ "dev": true
+ },
"num2fraction": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz",
@@ -13699,7 +14370,6 @@
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz",
"integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=",
- "optional": true,
"requires": {
"define-properties": "1.1.2",
"es-abstract": "1.10.0"
@@ -13754,7 +14424,6 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/object.values/-/object.values-1.0.4.tgz",
"integrity": "sha1-5STaCbT2b/Bd9FdUbscqyZ8TBpo=",
- "optional": true,
"requires": {
"define-properties": "1.1.2",
"es-abstract": "1.10.0",
@@ -13906,45 +14575,29 @@
}
},
"ora": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/ora/-/ora-1.4.0.tgz",
- "integrity": "sha512-iMK1DOQxzzh2MBlVsU42G80mnrvUhqsMh74phHtDlrcTZPK0pH6o7l7DRshK+0YsxDyEuaOkziVdvM3T0QTzpw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ora/-/ora-2.0.0.tgz",
+ "integrity": "sha512-g+IR0nMUXq1k4nE3gkENbN4wkF0XsVZFyxznTF6CdmwQ9qeTGONGpSR9LM5//1l0TVvJoJF3MkMtJp6slUsWFg==",
"requires": {
- "chalk": "2.3.0",
+ "chalk": "2.3.1",
"cli-cursor": "2.1.0",
"cli-spinners": "1.1.0",
- "log-symbols": "2.2.0"
+ "log-symbols": "2.2.0",
+ "strip-ansi": "4.0.0",
+ "wcwidth": "1.0.1"
},
"dependencies": {
- "ansi-styles": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
- "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
- "requires": {
- "color-convert": "1.9.1"
- }
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
},
- "chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
"requires": {
- "ansi-styles": "3.2.0",
- "escape-string-regexp": "1.0.5",
- "supports-color": "4.5.0"
- }
- },
- "has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
- },
- "supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
- "requires": {
- "has-flag": "2.0.0"
+ "ansi-regex": "3.0.0"
}
}
}
@@ -14023,16 +14676,25 @@
"os-tmpdir": "1.0.2"
}
},
+ "p-cancelable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz",
+ "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw=="
+ },
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4="
},
+ "p-is-promise": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz",
+ "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4="
+ },
"p-limit": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.2.0.tgz",
"integrity": "sha512-Y/OtIaXtUPr4/YpMv1pCL5L5ed0rumAaAeBSj12F+bSlMdys7i8oQF/GUJmfpTS/QoaRrS/k6pma29haJpsMng==",
- "dev": true,
"requires": {
"p-try": "1.0.0"
}
@@ -14041,7 +14703,6 @@
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
- "dev": true,
"requires": {
"p-limit": "1.2.0"
}
@@ -14056,11 +14717,18 @@
"resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-1.2.0.tgz",
"integrity": "sha1-SxoROZoRUgpneQ7loMHViB1r7+k="
},
+ "p-timeout": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz",
+ "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==",
+ "requires": {
+ "p-finally": "1.0.0"
+ }
+ },
"p-try": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
- "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
- "dev": true
+ "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M="
},
"pac-proxy-agent": {
"version": "1.1.0",
@@ -14117,6 +14785,24 @@
"semver": "5.5.0"
},
"dependencies": {
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ }
+ },
"semver": {
"version": "5.5.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz",
@@ -14475,6 +15161,12 @@
"pinkie-promise": "2.0.1"
}
},
+ "pathval": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
+ "integrity": "sha1-uULm1L3mUwBe9rcTYd74cn0GReA=",
+ "dev": true
+ },
"pause": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
@@ -14651,6 +15343,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
"integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
+ "dev": true,
"requires": {
"find-up": "1.1.2"
}
@@ -14699,9 +15392,9 @@
}
},
"pluralize": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-1.2.1.tgz",
- "integrity": "sha1-0aIUg/0iu0HlihL6NCGCMUCJfEU=",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-7.0.0.tgz",
+ "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==",
"dev": true
},
"pngjs": {
@@ -14835,26 +15528,69 @@
}
},
"postcss-easy-import": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postcss-easy-import/-/postcss-easy-import-2.1.0.tgz",
- "integrity": "sha512-LfHi1rFGZ//1idOauAzhK45vjruQJGuofmR0fjUx+2gToT9L1kYlOQN0Ke6rwvuEE/IY/CHK5XgbGfRhbx0Hbw==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-easy-import/-/postcss-easy-import-3.0.0.tgz",
+ "integrity": "sha512-cfNsear/v8xlkl9v5Wm8y4Do/puiDQTFF+WX2Fo++h7oKt1fKWVVW/5Ca8hslYDQWnjndrg813cA23Pt1jsYdg==",
"requires": {
"globby": "6.1.0",
- "is-glob": "3.1.0",
+ "is-glob": "4.0.0",
"lodash": "4.17.5",
"object-assign": "4.1.1",
- "pify": "2.3.0",
- "postcss": "5.2.18",
- "postcss-import": "9.1.0",
+ "pify": "3.0.0",
+ "postcss": "6.0.18",
+ "postcss-import": "10.0.0",
"resolve": "1.5.0"
},
"dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
"requires": {
- "is-extglob": "2.1.1"
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
+ "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.2.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY="
+ },
+ "postcss": {
+ "version": "6.0.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.18.tgz",
+ "integrity": "sha512-X8MyLi3OYI1o71u0SsefWLpGBo5xnGiK1Pn+nrZFplc671Ts7L8aPwEbPIO8AWpulK5wuaVzyM9Rw6R8o7hYBw==",
+ "requires": {
+ "chalk": "2.3.1",
+ "source-map": "0.6.1",
+ "supports-color": "5.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
+ "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
+ "requires": {
+ "has-flag": "3.0.0"
}
}
}
@@ -14869,16 +15605,63 @@
}
},
"postcss-import": {
- "version": "9.1.0",
- "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-9.1.0.tgz",
- "integrity": "sha1-lf6YdqHnmvSfvcNYnwH+WqfMHoA=",
+ "version": "10.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-10.0.0.tgz",
+ "integrity": "sha1-TIXJewmRNsxeoCQNwd/b/eTi674=",
"requires": {
"object-assign": "4.1.1",
- "postcss": "5.2.18",
+ "postcss": "6.0.18",
"postcss-value-parser": "3.3.0",
- "promise-each": "2.2.0",
"read-cache": "1.0.0",
"resolve": "1.5.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.0.tgz",
+ "integrity": "sha512-NnSOmMEYtVR2JVMIGTzynRkkaxtiq1xnFBcdQD/DnNCYPoEPsVJhM98BDyaoNOQIi7p4okdi3E27eN7GQbsUug==",
+ "requires": {
+ "color-convert": "1.9.1"
+ }
+ },
+ "chalk": {
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
+ "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
+ "requires": {
+ "ansi-styles": "3.2.0",
+ "escape-string-regexp": "1.0.5",
+ "supports-color": "5.2.0"
+ }
+ },
+ "has-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
+ },
+ "postcss": {
+ "version": "6.0.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.18.tgz",
+ "integrity": "sha512-X8MyLi3OYI1o71u0SsefWLpGBo5xnGiK1Pn+nrZFplc671Ts7L8aPwEbPIO8AWpulK5wuaVzyM9Rw6R8o7hYBw==",
+ "requires": {
+ "chalk": "2.3.1",
+ "source-map": "0.6.1",
+ "supports-color": "5.2.0"
+ }
+ },
+ "source-map": {
+ "version": "0.6.1",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
+ "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
+ },
+ "supports-color": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
+ "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
+ "requires": {
+ "has-flag": "3.0.0"
+ }
+ }
}
},
"postcss-load-config": {
@@ -15327,6 +16110,32 @@
"postcss": "5.2.18",
"postcss-value-parser": "3.3.0",
"svgo": "0.7.2"
+ },
+ "dependencies": {
+ "colors": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
+ "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
+ },
+ "sax": {
+ "version": "1.2.4",
+ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
+ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
+ },
+ "svgo": {
+ "version": "0.7.2",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
+ "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "requires": {
+ "coa": "1.0.4",
+ "colors": "1.1.2",
+ "csso": "2.3.2",
+ "js-yaml": "3.7.0",
+ "mkdirp": "0.5.1",
+ "sax": "1.2.4",
+ "whet.extend": "0.9.9"
+ }
+ }
}
},
"postcss-unique-selectors": {
@@ -15422,14 +16231,6 @@
"asap": "2.0.6"
}
},
- "promise-each": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/promise-each/-/promise-each-2.2.0.tgz",
- "integrity": "sha1-M1MXTv8mlEgQN+BOAfd6oPttG2A=",
- "requires": {
- "any-promise": "0.1.0"
- }
- },
"property-is-enumerable-x": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/property-is-enumerable-x/-/property-is-enumerable-x-1.1.0.tgz",
@@ -15482,6 +16283,12 @@
}
}
},
+ "proxy-from-env": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.0.0.tgz",
+ "integrity": "sha1-M8UDmPcOp+uW0h97gXYwpVeRx+4=",
+ "dev": true
+ },
"prr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz",
@@ -15701,6 +16508,77 @@
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
},
+ "puppeteer": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.1.0.tgz",
+ "integrity": "sha512-Up+EiDVtc+EueFUzEFi4JqTlkXdC4pjMng0W9s/uqg2HP7+EHJiIe8OtwP7I+Jk7rI1kS5WIVpqx46aihnLuJQ==",
+ "dev": true,
+ "requires": {
+ "debug": "2.6.9",
+ "extract-zip": "1.6.6",
+ "https-proxy-agent": "2.1.1",
+ "mime": "1.6.0",
+ "progress": "2.0.0",
+ "proxy-from-env": "1.0.0",
+ "rimraf": "2.6.2",
+ "ws": "3.3.3"
+ },
+ "dependencies": {
+ "agent-base": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.0.tgz",
+ "integrity": "sha512-c+R/U5X+2zz2+UCrCFv6odQzJdoqI+YecuhnAJLa1zYaMc13zPfwMwZrr91Pd1DYNo/yPRbiM4WVf9whgwFsIg==",
+ "dev": true,
+ "requires": {
+ "es6-promisify": "5.0.0"
+ }
+ },
+ "https-proxy-agent": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.1.1.tgz",
+ "integrity": "sha512-LK6tQUR/VOkTI6ygAfWUKKP95I+e6M1h7N3PncGu1CATHCnex+CAv9ttR0lbHu1Uk2PXm/WoAHFo6JCGwMjVMw==",
+ "dev": true,
+ "requires": {
+ "agent-base": "4.2.0",
+ "debug": "3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
+ "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ }
+ }
+ },
+ "progress": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.0.tgz",
+ "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
+ "dev": true
+ },
+ "ultron": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/ultron/-/ultron-1.1.1.tgz",
+ "integrity": "sha512-UIEXBNeYmKptWH6z8ZnqTeS8fV74zG0/eRU9VGkpzz+LIJNs8W/zM/L+7ctCkRrgbNnnR0xxw4bKOr0cW0N0Og==",
+ "dev": true
+ },
+ "ws": {
+ "version": "3.3.3",
+ "resolved": "https://registry.npmjs.org/ws/-/ws-3.3.3.tgz",
+ "integrity": "sha512-nnWLa/NwZSt4KQJu51MYlCcSQ5g7INpOrOMt4XV8j4dqTXdmlUmSHQ8/oLC069ckre0fRsgfvsKwbTdtKLCDkA==",
+ "dev": true,
+ "requires": {
+ "async-limiter": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "ultron": "1.1.1"
+ }
+ }
+ }
+ },
"push-notify": {
"version": "git://github.com/habitrpg/push-notify.git#6bc2b5fdb1bdc9649b9ec1964d79ca50187fc8a9",
"requires": {
@@ -16041,25 +16919,6 @@
"set-immediate-shim": "1.0.1"
}
},
- "readline2": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/readline2/-/readline2-1.0.1.tgz",
- "integrity": "sha1-QQWWCP/BVHV7cV2ZidGZ/783LjU=",
- "dev": true,
- "requires": {
- "code-point-at": "1.1.0",
- "is-fullwidth-code-point": "1.0.0",
- "mute-stream": "0.0.5"
- },
- "dependencies": {
- "mute-stream": {
- "version": "0.0.5",
- "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.5.tgz",
- "integrity": "sha1-j7+rsKmKJT0xhDMfno3rc3L6xsA=",
- "dev": true
- }
- }
- },
"rechoir": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
@@ -16596,6 +17455,14 @@
"resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
"integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo="
},
+ "responselike": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz",
+ "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=",
+ "requires": {
+ "lowercase-keys": "1.0.0"
+ }
+ },
"restore-cursor": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
@@ -16648,12 +17515,6 @@
"resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz",
"integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I="
},
- "rx-lite": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-3.1.2.tgz",
- "integrity": "sha1-Gc5QLKVyZl87ZHsQk5+X/RYV8QI=",
- "dev": true
- },
"safe-buffer": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz",
@@ -16802,9 +17663,9 @@
}
},
"selenium-server": {
- "version": "3.9.0",
- "resolved": "https://registry.npmjs.org/selenium-server/-/selenium-server-3.9.0.tgz",
- "integrity": "sha512-xbcL9yt/a1U0pvwAkneTWxrq7zF/X5oCAY5CMfwYbY3BglmvlXjrPhM5rnzVveDlVOtbXkZpcDnG3Ny9YUpddA==",
+ "version": "3.9.1",
+ "resolved": "https://registry.npmjs.org/selenium-server/-/selenium-server-3.9.1.tgz",
+ "integrity": "sha512-p+GORe/uLnUUjMkEX3zqQmZKDxJ+WG7od92RKAh0Oz+H4e9Kjgxzgwb3E8IB4nGf2ifsZkJVo/uEvqRP30y9+Q==",
"dev": true
},
"semver": {
@@ -17050,33 +17911,24 @@
"integrity": "sha1-BcLuxXn//+FFoDCsJs/qYbmA+r4="
},
"sinon": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.2.2.tgz",
- "integrity": "sha512-BEa593xl+IkIc94nKo0O0LauQC/gQy8Gyv4DkzPwF/9DweC5phr1y+42zibCpn9abfkdHxt9r8AhD0R6u9DE/Q==",
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.3.0.tgz",
+ "integrity": "sha512-pmf05hFgEZUS52AGJcsVjOjqAyJW2yo14cOwVYvzCyw7+inv06YXkLyW75WG6X6p951lzkoKh51L2sNbR9CDvw==",
"dev": true,
"requires": {
+ "@sinonjs/formatio": "2.0.0",
"diff": "3.2.0",
- "formatio": "1.2.0",
"lodash.get": "4.4.2",
"lolex": "2.3.2",
- "nise": "1.2.2",
- "supports-color": "5.1.0",
+ "nise": "1.2.5",
+ "supports-color": "5.2.0",
"type-detect": "4.0.8"
},
"dependencies": {
- "formatio": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/formatio/-/formatio-1.2.0.tgz",
- "integrity": "sha1-87IWfZBoxGmKjVH092CjmlTYGOs=",
- "dev": true,
- "requires": {
- "samsam": "1.1.2"
- }
- },
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
"dev": true
},
"lolex": {
@@ -17086,19 +17938,13 @@
"dev": true
},
"supports-color": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz",
- "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
+ "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
"dev": true,
"requires": {
- "has-flag": "2.0.0"
+ "has-flag": "3.0.0"
}
- },
- "type-detect": {
- "version": "4.0.8",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
- "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
- "dev": true
}
}
},
@@ -17130,10 +17976,21 @@
"integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU="
},
"slice-ansi": {
- "version": "0.0.4",
- "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
- "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
- "dev": true
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-1.0.0.tgz",
+ "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0"
+ },
+ "dependencies": {
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ }
+ }
},
"sliced": {
"version": "1.0.1",
@@ -17143,12 +18000,14 @@
"smart-buffer": {
"version": "1.1.15",
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-1.1.15.tgz",
- "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY="
+ "integrity": "sha1-fxFLW2X6s+KjWqd1uxLw0cZJvxY=",
+ "dev": true
},
"smtp-connection": {
"version": "2.12.0",
"resolved": "https://registry.npmjs.org/smtp-connection/-/smtp-connection-2.12.0.tgz",
"integrity": "sha1-1275EnyyPCJZ7bHoNJwujV4tdME=",
+ "dev": true,
"requires": {
"httpntlm": "1.6.1",
"nodemailer-shared": "1.1.0"
@@ -17330,6 +18189,7 @@
"version": "1.1.9",
"resolved": "https://registry.npmjs.org/socks/-/socks-1.1.9.tgz",
"integrity": "sha1-Yo1+TQSRJDVEWsC25Fk3bLPm1pE=",
+ "dev": true,
"requires": {
"ip": "1.1.5",
"smart-buffer": "1.1.15"
@@ -17569,8 +18429,7 @@
"stable": {
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/stable/-/stable-0.1.6.tgz",
- "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA=",
- "optional": true
+ "integrity": "sha1-kQ9dKu17Ugxud3SZwfMuE5/eyxA="
},
"stack-trace": {
"version": "0.0.10",
@@ -17995,9 +18854,9 @@
"integrity": "sha1-IrD6OkE4WzO+PzMVUbu4N/oM164="
},
"stripe": {
- "version": "5.4.0",
- "resolved": "https://registry.npmjs.org/stripe/-/stripe-5.4.0.tgz",
- "integrity": "sha512-VCDFp4oQu1uOcOLHIwRIznH8ikLJcpDsHahWN48V/QuV6y2Bm281cq5wnkjqv+LPdUpqXVp9pjlb+SfN6dnyZg==",
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/stripe/-/stripe-5.5.0.tgz",
+ "integrity": "sha512-oy8xNoxv5/4eFsn+W/0KQvG9St7x/xM8TbOIW2prBLd2+zo+2y2V9iyqcNt6B14efcOE2YeCR1s5yw+1cqa2VQ==",
"requires": {
"bluebird": "3.5.1",
"lodash.isplainobject": "4.0.6",
@@ -18113,9 +18972,9 @@
}
},
"svg-inline-loader": {
- "version": "0.7.1",
- "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.7.1.tgz",
- "integrity": "sha1-bQ4nKLfsNBTCGAs/eAvD9xVO8iY=",
+ "version": "0.8.0",
+ "resolved": "https://registry.npmjs.org/svg-inline-loader/-/svg-inline-loader-0.8.0.tgz",
+ "integrity": "sha512-rynplY2eXFrdNomL1FvyTFQlP+dx0WqbzHglmNtA9M4IHRC3no2aPAl3ny9lUpJzFzFMZfWRK5YIclNU+FRePA==",
"requires": {
"loader-utils": "0.2.17",
"object-assign": "4.1.1",
@@ -18144,24 +19003,72 @@
}
},
"svgo": {
- "version": "0.7.2",
- "resolved": "https://registry.npmjs.org/svgo/-/svgo-0.7.2.tgz",
- "integrity": "sha1-n1dyQTlSE1xv779Ar+ak+qiLS7U=",
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.0.4.tgz",
+ "integrity": "sha512-DR9ieoaBoeySY4pnIJMM3Hez6kcVj+Uzj8AUJkr3435qstozP9i+mZ9yzcbq64A44i9YKh3I1Laex+mAyc69Rg==",
"requires": {
- "coa": "1.0.4",
+ "coa": "2.0.1",
"colors": "1.1.2",
- "csso": "2.3.2",
- "js-yaml": "3.7.0",
+ "css-select": "1.3.0-rc0",
+ "css-select-base-adapter": "0.1.0",
+ "css-tree": "1.0.0-alpha25",
+ "css-url-regex": "1.1.0",
+ "csso": "3.5.0",
+ "js-yaml": "3.10.0",
"mkdirp": "0.5.1",
+ "object.values": "1.0.4",
"sax": "1.2.4",
- "whet.extend": "0.9.9"
+ "stable": "0.1.6",
+ "unquote": "1.1.1",
+ "util.promisify": "1.0.0"
},
"dependencies": {
+ "coa": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.1.tgz",
+ "integrity": "sha512-5wfTTO8E2/ja4jFSxePXlG5nRu5bBtL/r1HCIpJW/lzT6yDtKl0u0Z4o/Vpz32IpKmBn7HerheEZQgA9N2DarQ==",
+ "requires": {
+ "q": "1.5.1"
+ }
+ },
"colors": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz",
"integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM="
},
+ "csso": {
+ "version": "3.5.0",
+ "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.0.tgz",
+ "integrity": "sha512-WtJjFP3ZsSdWhiZr4/k1B9uHPgYjFYnDxfbaJxk1hz5PDLIJ5BCRWkJqaztZ0DbP8d2ZIVwUPIJb2YmCwkPaMw==",
+ "requires": {
+ "css-tree": "1.0.0-alpha.27"
+ },
+ "dependencies": {
+ "css-tree": {
+ "version": "1.0.0-alpha.27",
+ "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.27.tgz",
+ "integrity": "sha512-BAYp9FyN4jLXjfvRpTDchBllDptqlK9I7OsagXCG9Am5C+5jc8eRZHgqb9x500W2OKS14MMlpQc/nmh/aA7TEQ==",
+ "requires": {
+ "mdn-data": "1.1.0",
+ "source-map": "0.5.7"
+ }
+ }
+ }
+ },
+ "esprima": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz",
+ "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw=="
+ },
+ "js-yaml": {
+ "version": "3.10.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.10.0.tgz",
+ "integrity": "sha512-O2v52ffjLa9VeM43J4XocZE//WT9N0IiwDa3KSHH7Tu8CtH+1qM8SIZvnsTh6v+4yFy5KUY3BHUVwjpfAWsjIA==",
+ "requires": {
+ "argparse": "1.0.9",
+ "esprima": "4.0.0"
+ }
+ },
"sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
@@ -18170,9 +19077,9 @@
}
},
"svgo-loader": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/svgo-loader/-/svgo-loader-1.2.1.tgz",
- "integrity": "sha1-4lXN6/VnU/+DvSjR16IHYsDfUTA=",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/svgo-loader/-/svgo-loader-2.1.0.tgz",
+ "integrity": "sha512-G9KGgXaSn+F05HtIViNmy3hT2TZsnqtq10QnmYlaoc+ITd5SGQckaH7v066Noq9cOjMqA6s2AXHDiNAUItfHuw==",
"requires": {
"loader-utils": "1.1.0"
},
@@ -18207,28 +19114,24 @@
}
},
"table": {
- "version": "3.8.3",
- "resolved": "https://registry.npmjs.org/table/-/table-3.8.3.tgz",
- "integrity": "sha1-K7xULw/amGGnVdOUf+/Ys/UThV8=",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/table/-/table-4.0.2.tgz",
+ "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==",
"dev": true,
"requires": {
- "ajv": "4.11.8",
- "ajv-keywords": "1.5.1",
- "chalk": "1.1.3",
+ "ajv": "5.5.2",
+ "ajv-keywords": "2.1.1",
+ "chalk": "2.3.1",
"lodash": "4.17.5",
- "slice-ansi": "0.0.4",
+ "slice-ansi": "1.0.0",
"string-width": "2.1.1"
},
"dependencies": {
- "ajv": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
- "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
- "dev": true,
- "requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
- }
+ "ajv-keywords": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-2.1.1.tgz",
+ "integrity": "sha1-YXmX/F9gV2iUxDX5QNgZ4TW4B2I=",
+ "dev": true
},
"ansi-regex": {
"version": "3.0.0",
@@ -18236,36 +19139,6 @@
"integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
"dev": true
},
- "chalk": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
- "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
- "dev": true,
- "requires": {
- "ansi-styles": "2.2.1",
- "escape-string-regexp": "1.0.5",
- "has-ansi": "2.0.0",
- "strip-ansi": "3.0.1",
- "supports-color": "2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "2.1.1"
- }
- }
- }
- },
"is-fullwidth-code-point": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
@@ -18923,9 +19796,9 @@
}
},
"type-detect": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-1.0.0.tgz",
- "integrity": "sha1-diIXzAbbJY7EiQihKY6LlRIejqI=",
+ "version": "4.0.8",
+ "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
+ "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
"dev": true
},
"type-is": {
@@ -18996,6 +19869,16 @@
"integrity": "sha1-bgkk1r2mta/jSeOabWMoUKD4grc=",
"optional": true
},
+ "uglifyjs-webpack-plugin": {
+ "version": "0.4.6",
+ "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-0.4.6.tgz",
+ "integrity": "sha1-uVH0q7a9YX5m9j64kUmOORdj4wk=",
+ "requires": {
+ "source-map": "0.5.7",
+ "uglify-js": "2.8.29",
+ "webpack-sources": "1.1.0"
+ }
+ },
"uid-number": {
"version": "0.0.6",
"resolved": "https://registry.npmjs.org/uid-number/-/uid-number-0.0.6.tgz",
@@ -19142,8 +20025,7 @@
"unquote": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz",
- "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=",
- "optional": true
+ "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ="
},
"unset-value": {
"version": "1.0.0",
@@ -19283,12 +20165,13 @@
"integrity": "sha1-HbSK1CLTQCRpqH99l73r/k+x48g="
},
"url-loader": {
- "version": "0.5.9",
- "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.5.9.tgz",
- "integrity": "sha512-B7QYFyvv+fOBqBVeefsxv6koWWtjmHaMFT6KZWti4KRw8YUD/hOU+3AECvXuzyVawIBx3z7zQRejXCDSO5kk1Q==",
+ "version": "0.6.2",
+ "resolved": "https://registry.npmjs.org/url-loader/-/url-loader-0.6.2.tgz",
+ "integrity": "sha512-h3qf9TNn53BpuXTTcpC+UehiRrl0Cv45Yr/xWayApjw6G8Bg2dGke7rIwDQ39piciWCWrC+WiqLjOh3SUp9n0Q==",
"requires": {
"loader-utils": "1.1.0",
- "mime": "1.3.6"
+ "mime": "1.6.0",
+ "schema-utils": "0.3.0"
},
"dependencies": {
"loader-utils": {
@@ -19300,11 +20183,6 @@
"emojis-list": "2.1.0",
"json5": "0.5.1"
}
- },
- "mime": {
- "version": "1.3.6",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.3.6.tgz",
- "integrity": "sha1-WR2E02U6awtKO5343lqoEI5y5eA="
}
}
},
@@ -19325,6 +20203,11 @@
"ip-regex": "1.0.3"
}
},
+ "url-to-options": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz",
+ "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k="
+ },
"url2": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/url2/-/url2-1.0.4.tgz",
@@ -19457,7 +20340,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.0.tgz",
"integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==",
- "optional": true,
"requires": {
"define-properties": "1.1.2",
"object.getownpropertydescriptors": "2.0.3"
@@ -19513,19 +20395,9 @@
"integrity": "sha1-fif8uzFbhB54JDQxiXZxkp4gt/Q="
},
"validator": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/validator/-/validator-4.9.0.tgz",
- "integrity": "sha1-CC/84qdhSP8HqOienCukOq8S7Ew=",
- "requires": {
- "depd": "1.1.0"
- },
- "dependencies": {
- "depd": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.0.tgz",
- "integrity": "sha1-4b2Cxqq2ztlluXuIsX7T5SjKGMM="
- }
- }
+ "version": "9.4.1",
+ "resolved": "https://registry.npmjs.org/validator/-/validator-9.4.1.tgz",
+ "integrity": "sha512-YV5KjzvRmSyJ1ee/Dm5UED0G+1L4GZnLN3w6/T+zZm8scVua4sOhYKWTUrKa0H/tMiJyO9QLHMPN+9mB/aMunA=="
},
"value-or-function": {
"version": "3.0.0",
@@ -19710,22 +20582,22 @@
"integrity": "sha512-e+ThJMYmZg4D9UnrLcr6LQxGu6YlcxkrmZGPCyIN4malcNhdeGGKxmFuM5y6ICMJJxQywLfT8MM1rYZr4LpeLw=="
},
"vue-loader": {
- "version": "13.7.1",
- "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-13.7.1.tgz",
- "integrity": "sha512-v6PbKMGl/hWHGPxB2uGHsA66vusrXF66J/h1QiFXtU6z5zVSK8jq5xl95M1p3QNXmuEJKNP3nxoXfbgQNs7hJg==",
+ "version": "14.1.1",
+ "resolved": "https://registry.npmjs.org/vue-loader/-/vue-loader-14.1.1.tgz",
+ "integrity": "sha512-ZLu0yWohbWPayFhSPy80xnObCrPDLGrf/v9R5kJyUbVlcI46srnQlaG+HnTN5HAt5nV9iJiF4oJIjX0+jK+f0w==",
"requires": {
"consolidate": "0.14.5",
"hash-sum": "1.0.2",
"loader-utils": "1.1.0",
"lru-cache": "4.1.1",
- "postcss": "6.0.17",
+ "postcss": "6.0.18",
"postcss-load-config": "1.2.0",
"postcss-selector-parser": "2.2.3",
"prettier": "1.10.2",
"resolve": "1.5.0",
"source-map": "0.6.1",
"vue-hot-reload-api": "2.2.4",
- "vue-style-loader": "3.1.2",
+ "vue-style-loader": "4.0.2",
"vue-template-es2015-compiler": "1.6.0"
},
"dependencies": {
@@ -19738,29 +20610,19 @@
}
},
"chalk": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.0.tgz",
- "integrity": "sha512-Az5zJR2CBujap2rqXGaJKaPHyJ0IrUimvYNX+ncCy8PJP4ltOGTrHUIo097ZaL2zMeKYpiCdqDvS6zdrTFok3Q==",
+ "version": "2.3.1",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.1.tgz",
+ "integrity": "sha512-QUU4ofkDoMIVO7hcx1iPTISs88wsO8jA92RQIm4JAwZvFGGAV2hSAA1NX7oVj2Ej2Q6NDTcRDjPTFrMCRZoJ6g==",
"requires": {
"ansi-styles": "3.2.0",
"escape-string-regexp": "1.0.5",
- "supports-color": "4.5.0"
- },
- "dependencies": {
- "supports-color": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
- "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
- "requires": {
- "has-flag": "2.0.0"
- }
- }
+ "supports-color": "5.2.0"
}
},
"has-flag": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
- "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0="
},
"loader-utils": {
"version": "1.1.0",
@@ -19773,13 +20635,13 @@
}
},
"postcss": {
- "version": "6.0.17",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.17.tgz",
- "integrity": "sha512-Bl1nybsSzWYbP8O4gAVD8JIjZIul9hLNOPTGBIlVmZNUnNAGL+W0cpYWzVwfImZOwumct4c1SDvSbncVWKtXUw==",
+ "version": "6.0.18",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-6.0.18.tgz",
+ "integrity": "sha512-X8MyLi3OYI1o71u0SsefWLpGBo5xnGiK1Pn+nrZFplc671Ts7L8aPwEbPIO8AWpulK5wuaVzyM9Rw6R8o7hYBw==",
"requires": {
- "chalk": "2.3.0",
+ "chalk": "2.3.1",
"source-map": "0.6.1",
- "supports-color": "5.1.0"
+ "supports-color": "5.2.0"
}
},
"source-map": {
@@ -19788,11 +20650,20 @@
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"supports-color": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.1.0.tgz",
- "integrity": "sha512-Ry0AwkoKjDpVKK4sV4h6o3UJmNRbjYm2uXhwfj3J56lMVdvnUNqzQVRztOOMGQ++w1K/TjNDFvpJk0F/LoeBCQ==",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.2.0.tgz",
+ "integrity": "sha512-F39vS48la4YvTZUPVeTqsjsFNrvcMwrV3RLZINsmHo+7djCvuUzSIeXOnZ5hmjef4bajL1dNccN+tg5XAliO5Q==",
"requires": {
- "has-flag": "2.0.0"
+ "has-flag": "3.0.0"
+ }
+ },
+ "vue-style-loader": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.0.2.tgz",
+ "integrity": "sha512-Bwf1Gf331Z5OTzMRAYQYiFpFbaCpaXQjQcSvWYsmEwSgOIVa+moXWoD8fQCNetcekbP3OSE5pyvomNKbvIUQtQ==",
+ "requires": {
+ "hash-sum": "1.0.2",
+ "loader-utils": "1.1.0"
}
}
}
@@ -19811,9 +20682,9 @@
"integrity": "sha512-vLLoY452L+JBpALMP5UHum9+7nzR9PeIBCghU9ZtJ1eWm6ieUI8Zb/DI3MYxH32bxkjzYV1LRjNv4qr8d+uX/w=="
},
"vue-style-loader": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-3.1.2.tgz",
- "integrity": "sha512-ICtVdK/p+qXWpdSs2alWtsXt9YnDoYjQe0w5616j9+/EhjoxZkbun34uWgsMFnC1MhrMMwaWiImz3K2jK1Yp2Q==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/vue-style-loader/-/vue-style-loader-4.0.2.tgz",
+ "integrity": "sha512-Bwf1Gf331Z5OTzMRAYQYiFpFbaCpaXQjQcSvWYsmEwSgOIVa+moXWoD8fQCNetcekbP3OSE5pyvomNKbvIUQtQ==",
"requires": {
"hash-sum": "1.0.2",
"loader-utils": "1.1.0"
@@ -19864,6 +20735,26 @@
"cheerio": "0.19.0",
"got": "6.7.1",
"meow": "3.7.0"
+ },
+ "dependencies": {
+ "got": {
+ "version": "6.7.1",
+ "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz",
+ "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=",
+ "requires": {
+ "create-error-class": "3.0.2",
+ "duplexer3": "0.1.4",
+ "get-stream": "3.0.0",
+ "is-redirect": "1.0.0",
+ "is-retry-allowed": "1.1.0",
+ "is-stream": "1.1.0",
+ "lowercase-keys": "1.0.0",
+ "safe-buffer": "5.1.1",
+ "timed-out": "4.0.1",
+ "unzip-response": "2.0.1",
+ "url-parse-lax": "1.0.0"
+ }
+ }
}
},
"ware": {
@@ -20007,43 +20898,58 @@
}
}
},
+ "wcwidth": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
+ "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
+ "requires": {
+ "defaults": "1.0.3"
+ }
+ },
"webpack": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-2.7.0.tgz",
- "integrity": "sha512-MjAA0ZqO1ba7ZQJRnoCdbM56mmFpipOPUv/vQpwwfSI42p5PVDdoiuK2AL2FwFUVgT859Jr43bFZXRg/LNsqvg==",
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.11.0.tgz",
+ "integrity": "sha512-3kOFejWqj5ISpJk4Qj/V7w98h9Vl52wak3CLiw/cDOfbVTq7FeoZ0SdoHHY9PYlHr50ZS42OfvzE2vB4nncKQg==",
"requires": {
"acorn": "5.4.1",
"acorn-dynamic-import": "2.0.2",
- "ajv": "4.11.8",
- "ajv-keywords": "1.5.1",
+ "ajv": "6.1.1",
+ "ajv-keywords": "3.1.0",
"async": "2.6.0",
"enhanced-resolve": "3.4.1",
+ "escope": "3.6.0",
"interpret": "1.1.0",
"json-loader": "0.5.7",
"json5": "0.5.1",
"loader-runner": "2.3.0",
- "loader-utils": "0.2.17",
+ "loader-utils": "1.1.0",
"memory-fs": "0.4.1",
"mkdirp": "0.5.1",
"node-libs-browser": "2.1.0",
"source-map": "0.5.7",
- "supports-color": "3.2.3",
+ "supports-color": "4.5.0",
"tapable": "0.2.8",
- "uglify-js": "2.8.29",
+ "uglifyjs-webpack-plugin": "0.4.6",
"watchpack": "1.4.0",
"webpack-sources": "1.1.0",
- "yargs": "6.6.0"
+ "yargs": "8.0.2"
},
"dependencies": {
"ajv": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
- "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=",
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.1.1.tgz",
+ "integrity": "sha1-l41Zf7wrfQ5aXD3esUmmgvKr+g4=",
"requires": {
- "co": "4.6.0",
- "json-stable-stringify": "1.0.1"
+ "fast-deep-equal": "1.0.0",
+ "fast-json-stable-stringify": "2.0.0",
+ "json-schema-traverse": "0.3.1"
}
},
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg="
+ },
"async": {
"version": "2.6.0",
"resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz",
@@ -20052,40 +20958,148 @@
"lodash": "4.17.5"
}
},
- "supports-color": {
- "version": "3.2.3",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-3.2.3.tgz",
- "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=",
+ "camelcase": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz",
+ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0="
+ },
+ "find-up": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
+ "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"requires": {
- "has-flag": "1.0.0"
+ "locate-path": "2.0.0"
}
},
- "yargs": {
- "version": "6.6.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz",
- "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=",
+ "has-flag": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-2.0.0.tgz",
+ "integrity": "sha1-6CB68cx7MNRGzHC3NLXovhj4jVE="
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8="
+ },
+ "load-json-file": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
+ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
"requires": {
- "camelcase": "3.0.0",
+ "graceful-fs": "4.1.11",
+ "parse-json": "2.2.0",
+ "pify": "2.3.0",
+ "strip-bom": "3.0.0"
+ }
+ },
+ "loader-utils": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.1.0.tgz",
+ "integrity": "sha1-yYrvSIvM7aL/teLeZG1qdUQp9c0=",
+ "requires": {
+ "big.js": "3.2.0",
+ "emojis-list": "2.1.0",
+ "json5": "0.5.1"
+ }
+ },
+ "os-locale": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz",
+ "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==",
+ "requires": {
+ "execa": "0.7.0",
+ "lcid": "1.0.0",
+ "mem": "1.1.0"
+ }
+ },
+ "path-type": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
+ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
+ "requires": {
+ "pify": "2.3.0"
+ }
+ },
+ "read-pkg": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
+ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
+ "requires": {
+ "load-json-file": "2.0.0",
+ "normalize-package-data": "2.4.0",
+ "path-type": "2.0.0"
+ }
+ },
+ "read-pkg-up": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
+ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
+ "requires": {
+ "find-up": "2.1.0",
+ "read-pkg": "2.0.0"
+ }
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "requires": {
+ "is-fullwidth-code-point": "2.0.0",
+ "strip-ansi": "4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "requires": {
+ "ansi-regex": "3.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
+ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM="
+ },
+ "supports-color": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-4.5.0.tgz",
+ "integrity": "sha1-vnoN5ITexcXN34s9WRJQRJEvY1s=",
+ "requires": {
+ "has-flag": "2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho="
+ },
+ "yargs": {
+ "version": "8.0.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-8.0.2.tgz",
+ "integrity": "sha1-YpmpBVsc78lp/355wdkY3Osiw2A=",
+ "requires": {
+ "camelcase": "4.1.0",
"cliui": "3.2.0",
"decamelize": "1.2.0",
"get-caller-file": "1.0.2",
- "os-locale": "1.4.0",
- "read-pkg-up": "1.0.1",
+ "os-locale": "2.1.0",
+ "read-pkg-up": "2.0.0",
"require-directory": "2.1.1",
"require-main-filename": "1.0.1",
"set-blocking": "2.0.0",
- "string-width": "1.0.2",
- "which-module": "1.0.0",
+ "string-width": "2.1.1",
+ "which-module": "2.0.0",
"y18n": "3.2.1",
- "yargs-parser": "4.2.1"
+ "yargs-parser": "7.0.0"
}
},
"yargs-parser": {
- "version": "4.2.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz",
- "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=",
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz",
+ "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=",
"requires": {
- "camelcase": "3.0.0"
+ "camelcase": "4.1.0"
}
}
}
@@ -20309,28 +21323,30 @@
}
},
"webpack-dev-middleware": {
- "version": "1.12.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-1.12.2.tgz",
- "integrity": "sha512-FCrqPy1yy/sN6U/SaEZcHKRXGlqU0DUaEBL45jkUYoB8foVb6wCnbIJ1HKIx+qUFTW+3JpVcCJCxZ8VATL4e+A==",
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-2.0.5.tgz",
+ "integrity": "sha512-EPXudTrpQLksLt9klR0spnb7mt4dHtk3amGnohZNeQ+Y2QSqBbnWA7uNZ9+rqyfhEcYw18pUwcGIXuPFvIIELQ==",
"dev": true,
"requires": {
+ "loud-rejection": "1.6.0",
"memory-fs": "0.4.1",
- "mime": "1.6.0",
+ "mime": "2.2.0",
"path-is-absolute": "1.0.1",
"range-parser": "1.2.0",
- "time-stamp": "2.0.0"
+ "url-join": "2.0.5",
+ "webpack-log": "1.1.2"
},
"dependencies": {
"mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.2.0.tgz",
+ "integrity": "sha512-0Qz9uF1ATtl8RKJG4VRfOymh7PyEor6NbrI/61lRfuRe4vx9SNATrvAeTj2EWVRKjEQGskrzWkJBBY5NbaVHIA==",
"dev": true
},
- "time-stamp": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-2.0.0.tgz",
- "integrity": "sha1-lcakRTDhW6jW9KPsuMOj+sRto1c=",
+ "url-join": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/url-join/-/url-join-2.0.5.tgz",
+ "integrity": "sha1-WvIvGMBSoACkjXuCxenC4v7tpyg=",
"dev": true
}
}
@@ -20347,6 +21363,18 @@
"strip-ansi": "3.0.1"
}
},
+ "webpack-log": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/webpack-log/-/webpack-log-1.1.2.tgz",
+ "integrity": "sha512-B53SD4N4BHpZdUwZcj4st2QT7gVfqZtqHDruC1N+K2sciq0Rt/3F1Dx6RlylVkcrToMLTaiaeT48k9Lq4iDVDA==",
+ "dev": true,
+ "requires": {
+ "chalk": "2.3.1",
+ "log-symbols": "2.2.0",
+ "loglevelnext": "1.0.3",
+ "uuid": "3.2.1"
+ }
+ },
"webpack-merge": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.1.1.tgz",
@@ -20596,6 +21624,11 @@
"resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.4.tgz",
"integrity": "sha1-UZy0ymhtAFqEINNJbz8MruzKWA8="
},
+ "xmlcreate": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-1.0.2.tgz",
+ "integrity": "sha1-+mv3YqYKQT+z3Y9LA8WyaSONMI8="
+ },
"xmldom": {
"version": "0.1.19",
"resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.1.19.tgz",
diff --git a/package.json b/package.json
index 1666a4f8d4..4301dc8962 100644
--- a/package.json
+++ b/package.json
@@ -1,22 +1,26 @@
{
"name": "habitica",
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
- "version": "4.27.2",
+ "version": "4.28.0",
"main": "./website/server/index.js",
+ "greenkeeper": {
+ "ignore": [
+ "mongoose"
+ ]
+ },
"dependencies": {
"@slack/client": "^3.8.1",
"accepts": "^1.3.2",
"amazon-payments": "^0.2.6",
"amplitude": "^3.5.0",
"apidoc": "^0.17.5",
- "apn": "^1.7.6",
- "autoprefixer": "^6.4.0",
- "aws-sdk": "^2.0.25",
- "axios": "^0.16.0",
- "axios-progress-bar": "^0.1.7",
+ "autoprefixer": "^8.0.0",
+ "aws-sdk": "^2.200.0",
+ "axios": "^0.18.0",
+ "axios-progress-bar": "^1.1.8",
"babel-core": "^6.0.0",
- "babel-eslint": "^7.2.3",
- "babel-loader": "^6.0.0",
+ "babel-eslint": "^8.2.2",
+ "babel-loader": "^7.1.2",
"babel-plugin-syntax-async-functions": "^6.13.0",
"babel-plugin-syntax-dynamic-import": "^6.18.0",
"babel-plugin-transform-async-to-module-method": "^6.8.0",
@@ -30,23 +34,23 @@
"bluebird": "^3.3.5",
"body-parser": "^1.15.0",
"bootstrap": "^4.0.0",
- "bootstrap-vue": "^1.5.0",
- "compression": "^1.6.1",
+ "bootstrap-vue": "^2.0.0-rc.1",
+ "compression": "^1.7.2",
"cookie-session": "^1.2.0",
"coupon-code": "^0.4.5",
"cross-env": "^5.1.3",
"css-loader": "^0.28.0",
+ "csv-stringify": "^2.0.4",
"cwait": "^1.1.1",
- "csv-stringify": "^2.0.1",
"domain-middleware": "~0.1.0",
"express": "^4.16.2",
- "express-basic-auth": "^1.0.1",
- "express-validator": "^2.18.0",
- "extract-text-webpack-plugin": "^2.0.0-rc.3",
+ "express-basic-auth": "^1.1.4",
+ "express-validator": "^5.0.1",
+ "extract-text-webpack-plugin": "^3.0.2",
"glob": "^7.1.2",
- "got": "^6.1.1",
+ "got": "^8.2.0",
"gulp": "^4.0.0",
- "gulp-babel": "^6.1.2",
+ "gulp-babel": "^7.0.1",
"gulp-imagemin": "^4.1.0",
"gulp-nodemon": "^2.2.1",
"gulp.spritesmith": "^6.9.0",
@@ -57,19 +61,19 @@
"in-app-purchase": "^1.1.6",
"intro.js": "^2.6.0",
"jquery": ">=3.0.0",
- "js2xmlparser": "~1.0.0",
+ "js2xmlparser": "^3.0.0",
"lodash": "^4.17.4",
"merge-stream": "^1.0.0",
"method-override": "^2.3.5",
"moment": "^2.13.0",
- "moment-recur": "git://github.com/habitrpg/moment-recur.git#f147ef27bbc26ca67638385f3db4a44084c76626",
- "mongoose": "^4.13.10",
+ "moment-recur": "^1.0.7",
+ "mongoose": "^4.13.11",
"morgan": "^1.7.0",
"nconf": "^0.10.0",
"node-gcm": "^0.14.4",
"node-sass": "^4.5.0",
- "nodemailer": "^2.3.2",
- "ora": "^1.1.0",
+ "nodemailer": "^4.5.0",
+ "ora": "^2.0.0",
"pageres": "^4.1.1",
"passport": "^0.4.0",
"passport-facebook": "^2.0.0",
@@ -77,35 +81,35 @@
"paypal-ipn": "3.0.0",
"paypal-rest-sdk": "^1.8.1",
"popper.js": "^1.13.0",
- "postcss-easy-import": "^2.0.0",
+ "postcss-easy-import": "^3.0.0",
"ps-tree": "^1.0.0",
"pug": "^2.0.0-rc.4",
"push-notify": "git://github.com/habitrpg/push-notify.git#6bc2b5fdb1bdc9649b9ec1964d79ca50187fc8a9",
"pusher": "^1.3.0",
- "request": "^2.83.0",
"rimraf": "^2.4.3",
"sass-loader": "^6.0.2",
- "stripe": "^5.4.0",
"shelljs": "^0.8.1",
+ "stripe": "^5.5.0",
"superagent": "^3.4.3",
- "svg-inline-loader": "^0.7.1",
+ "svg-inline-loader": "^0.8.0",
"svg-url-loader": "^2.0.2",
- "svgo-loader": "^1.2.1",
+ "svgo": "^1.0.4",
+ "svgo-loader": "^2.1.0",
"universal-analytics": "^0.4.16",
- "url-loader": "^0.5.7",
+ "url-loader": "^0.6.2",
"useragent": "^2.1.9",
"uuid": "^3.0.1",
- "validator": "^4.9.0",
+ "validator": "^9.4.1",
"vinyl-buffer": "^1.0.1",
"vue": "^2.5.2",
- "vue-loader": "^13.3.0",
+ "vue-loader": "^14.1.1",
"vue-mugen-scroll": "^0.2.1",
"vue-router": "^3.0.0",
- "vue-style-loader": "^3.0.0",
+ "vue-style-loader": "^4.0.2",
"vue-template-compiler": "^2.5.2",
"vuedraggable": "^2.15.0",
"vuejs-datepicker": "git://github.com/habitrpg/vuejs-datepicker.git#5d237615463a84a23dd6f3f77c6ab577d68593ec",
- "webpack": "^2.2.1",
+ "webpack": "^3.11.0",
"webpack-merge": "^4.0.0",
"winston": "^2.1.0",
"winston-loggly-bulk": "^2.0.2",
@@ -142,18 +146,18 @@
},
"devDependencies": {
"babel-plugin-istanbul": "^4.0.0",
- "chai": "^3.4.0",
- "chai-as-promised": "^5.1.0",
- "chalk": "^2.3.0",
+ "chai": "^4.1.2",
+ "chai-as-promised": "^7.1.1",
+ "chalk": "^2.3.1",
"chromedriver": "^2.27.2",
"connect-history-api-fallback": "^1.1.0",
"coveralls": "^3.0.0",
"cross-spawn": "^6.0.4",
- "eslint": "^3.0.0",
- "eslint-config-habitrpg": "^3.0.0",
- "eslint-friendly-formatter": "^2.0.5",
+ "eslint": "^4.18.1",
+ "eslint-config-habitrpg": "^4.0.0",
+ "eslint-friendly-formatter": "^3.0.0",
"eslint-loader": "^1.3.0",
- "eslint-plugin-html": "^2.0.0",
+ "eslint-plugin-html": "^4.0.2",
"eslint-plugin-mocha": "^4.7.0",
"eventsource-polyfill": "^0.9.6",
"expect.js": "^0.3.1",
@@ -162,27 +166,27 @@
"karma": "^2.0.0",
"karma-babel-preprocessor": "^7.0.0",
"karma-chai-plugins": "^0.9.0",
+ "karma-chrome-launcher": "^2.2.0",
"karma-coverage": "^1.1.1",
"karma-mocha": "^1.3.0",
"karma-mocha-reporter": "^2.2.5",
- "karma-phantomjs-launcher": "^1.0.0",
"karma-sinon-chai": "^1.3.3",
"karma-sinon-stub-promise": "^1.0.0",
"karma-sourcemap-loader": "^0.3.7",
"karma-spec-reporter": "0.0.32",
"karma-webpack": "^2.0.2",
"lcov-result-merger": "^2.0.0",
- "mocha": "^5.0.0",
- "monk": "^4.0.0",
+ "mocha": "^5.0.1",
+ "monk": "^6.0.5",
"nightwatch": "^0.9.12",
- "phantomjs-prebuilt": "^2.1.12",
+ "puppeteer": "^1.1.0",
"require-again": "^2.0.0",
- "selenium-server": "^3.0.1",
- "sinon": "^4.2.2",
+ "selenium-server": "^3.9.1",
+ "sinon": "^4.3.0",
"sinon-chai": "^2.8.0",
"sinon-stub-promise": "^4.0.0",
"webpack-bundle-analyzer": "^2.2.1",
- "webpack-dev-middleware": "^1.10.0",
+ "webpack-dev-middleware": "^2.0.5",
"webpack-hot-middleware": "^2.6.1"
}
}
diff --git a/scripts/paypalBillingSetup.js b/scripts/paypalBillingSetup.js
index 78fcedce2e..b941254420 100644
--- a/scripts/paypalBillingSetup.js
+++ b/scripts/paypalBillingSetup.js
@@ -1,111 +1,120 @@
-require("babel-register");
-require("babel-polyfill");
+require('babel-register');
+require('babel-polyfill');
+
// This file is used for creating paypal billing plans. PayPal doesn't have a web interface for setting up recurring
// payment plan definitions, instead you have to create it via their REST SDK and keep it updated the same way. So this
// file will be used once for initing your billing plan (then you get the resultant plan.id to store in config.json),
// and once for any time you need to edit the plan thereafter
-var path = require('path');
-var nconf = require('nconf');
-var _ = require('lodash');
-var paypal = require('paypal-rest-sdk');
-var blocks = require('../website/common').content.subscriptionBlocks;
-var live = nconf.get('PAYPAL:mode')=='live';
+/* eslint-disable no-console, camelcase, no-case-declarations */
+
+const path = require('path');
+const nconf = require('nconf');
+const _ = require('lodash');
+const paypal = require('paypal-rest-sdk');
+const blocks = require('../website/common').content.subscriptionBlocks;
+const live = nconf.get('PAYPAL:mode') === 'live';
nconf.argv().env().file('user', path.join(path.resolve(__dirname, '../config.json')));
-var OP = 'create'; // list create update remove
+let OP = 'create'; // list create update remove
paypal.configure({
- 'mode': nconf.get("PAYPAL:mode"), //sandbox or live
- 'client_id': nconf.get("PAYPAL:client_id"),
- 'client_secret': nconf.get("PAYPAL:client_secret")
+ mode: nconf.get('PAYPAL:mode'), // sandbox or live
+ client_id: nconf.get('PAYPAL:client_id'),
+ client_secret: nconf.get('PAYPAL:client_secret'),
});
// https://developer.paypal.com/docs/api/#billing-plans-and-agreements
-var billingPlanTitle ="Habitica Subscription";
-var billingPlanAttributes = {
- "name": billingPlanTitle,
- "description": billingPlanTitle,
- "type": "INFINITE",
- "merchant_preferences": {
- "auto_bill_amount": "yes",
- "cancel_url": live ? 'https://habitica.com' : 'http://localhost:3000',
- "return_url": (live ? 'https://habitica.com' : 'http://localhost:3000') + '/paypal/subscribe/success'
+let billingPlanTitle = 'Habitica Subscription';
+let billingPlanAttributes = {
+ name: billingPlanTitle,
+ description: billingPlanTitle,
+ type: 'INFINITE',
+ merchant_preferences: {
+ auto_bill_amount: 'yes',
+ cancel_url: live ? 'https://habitica.com' : 'http://localhost:3000',
+ return_url: `${live ? 'https://habitica.com' : 'http://localhost:3000' }/paypal/subscribe/success`,
},
payment_definitions: [{
- "type": "REGULAR",
- "frequency": "MONTH",
- "cycles": "0"
- }]
+ type: 'REGULAR',
+ frequency: 'MONTH',
+ cycles: '0',
+ }],
};
-_.each(blocks, function(block){
+
+_.each(blocks, (block) => {
block.definition = _.cloneDeep(billingPlanAttributes);
_.merge(block.definition.payment_definitions[0], {
- "name": billingPlanTitle + ' ($'+block.price+' every '+block.months+' months, recurring)',
- "frequency_interval": ""+block.months,
- "amount": {
- "currency": "USD",
- "value": ""+block.price
- }
+ name: `${billingPlanTitle } ($${block.price} every ${block.months} months, recurring)`,
+ frequency_interval: `${block.months}`,
+ amount: {
+ currency: 'USD',
+ value: `${block.price}`,
+ },
});
-})
+});
// @TODO: Add cli library for this
-switch(OP) {
- case "list":
- paypal.billingPlan.list({status: 'ACTIVE'}, function(err, plans){
- console.log({err:err, plans:plans});
+switch (OP) {
+ case 'list':
+ paypal.billingPlan.list({status: 'ACTIVE'}, (err, plans) => {
+ console.log({err, plans});
});
break;
- case "get":
- paypal.billingPlan.get(nconf.get("PAYPAL:billing_plans:12"), function (err, plan) {
- console.log({err:err, plan:plan});
- })
+ case 'get':
+ paypal.billingPlan.get(nconf.get('PAYPAL:billing_plans:12'), (err, plan) => {
+ console.log({err, plan});
+ });
break;
- case "update":
- var update = {
- "op": "replace",
- "path": "/merchant_preferences",
- "value": {
- "cancel_url": "https://habitica.com"
- }
+ case 'update':
+ let updatePayload = {
+ op: 'replace',
+ path: '/merchant_preferences',
+ value: {
+ cancel_url: 'https://habitica.com',
+ },
};
- paypal.billingPlan.update(nconf.get("PAYPAL:billing_plans:12"), update, function (err, res) {
- console.log({err:err, plan:res});
+ paypal.billingPlan.update(nconf.get('PAYPAL:billing_plans:12'), updatePayload, (err, res) => {
+ console.log({err, plan: res});
});
break;
- case "create":
- paypal.billingPlan.create(blocks["google_6mo"].definition, function(err,plan){
+ case 'create':
+ paypal.billingPlan.create(blocks.google_6mo.definition, (err, plan) => {
if (err) return console.log(err);
- if (plan.state == "ACTIVE")
- return console.log({err:err, plan:plan});
- var billingPlanUpdateAttributes = [{
- "op": "replace",
- "path": "/",
- "value": {
- "state": "ACTIVE"
- }
+
+ if (plan.state === 'ACTIVE') {
+ return console.log({err, plan});
+ }
+
+ let billingPlanUpdateAttributes = [{
+ op: 'replace',
+ path: '/',
+ value: {
+ state: 'ACTIVE',
+ },
}];
+
// Activate the plan by changing status to Active
- paypal.billingPlan.update(plan.id, billingPlanUpdateAttributes, function(err, response){
- console.log({err:err, response:response, id:plan.id});
+ paypal.billingPlan.update(plan.id, billingPlanUpdateAttributes, (err2, response) => {
+ console.log({err: err2, response, id: plan.id});
});
});
break;
- case "remove": break;
+
+ case 'remove': break;
case 'create-webprofile':
let webexpinfo = {
- "name": "HabiticaProfile",
- "input_fields": {
- "no_shipping": 1,
+ name: 'HabiticaProfile',
+ input_fields: {
+ no_shipping: 1,
},
};
paypal.webProfile.create(webexpinfo, (error, result) => {
- console.log(error, result)
- })
+ console.log(error, result);
+ });
break;
-}
+}
\ No newline at end of file
diff --git a/test/api/v3/integration/challenges/POST-challenges_challengeId_winner_winnerId.test.js b/test/api/v3/integration/challenges/POST-challenges_challengeId_winner_winnerId.test.js
index e0dc561c66..19e8deaf12 100644
--- a/test/api/v3/integration/challenges/POST-challenges_challengeId_winner_winnerId.test.js
+++ b/test/api/v3/integration/challenges/POST-challenges_challengeId_winner_winnerId.test.js
@@ -99,7 +99,7 @@ describe('POST /challenges/:challengeId/winner/:winnerId', () => {
await sleep(0.5);
- await expect(winningUser.sync()).to.eventually.have.deep.property('achievements.challenges').to.include(challenge.name);
+ await expect(winningUser.sync()).to.eventually.have.nested.property('achievements.challenges').to.include(challenge.name);
expect(winningUser.notifications.length).to.equal(2); // 2 because winningUser just joined the challenge, which now awards an achievement
expect(winningUser.notifications[1].type).to.equal('WON_CHALLENGE');
});
diff --git a/test/api/v3/integration/chat/POST-chat.test.js b/test/api/v3/integration/chat/POST-chat.test.js
index 395c6b88e1..c9b2d97384 100644
--- a/test/api/v3/integration/chat/POST-chat.test.js
+++ b/test/api/v3/integration/chat/POST-chat.test.js
@@ -119,21 +119,21 @@ describe('POST /chat', () => {
it('errors when word is part of a phrase', async () => {
let wordInPhrase = `phrase ${testBannedWordMessage} end`;
await expect(user.post('/groups/habitrpg/chat', { message: wordInPhrase}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: bannedWordErrorMessage,
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: bannedWordErrorMessage,
+ });
});
it('errors when word is surrounded by non alphabet characters', async () => {
let wordInPhrase = `_!${testBannedWordMessage}@_`;
await expect(user.post('/groups/habitrpg/chat', { message: wordInPhrase}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: bannedWordErrorMessage,
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: bannedWordErrorMessage,
+ });
});
it('checks error message has the banned words used', async () => {
diff --git a/test/api/v3/integration/content/GET-content.test.js b/test/api/v3/integration/content/GET-content.test.js
index fad68edae2..1489738577 100644
--- a/test/api/v3/integration/content/GET-content.test.js
+++ b/test/api/v3/integration/content/GET-content.test.js
@@ -7,19 +7,19 @@ import i18n from '../../../../../website/common/script/i18n';
describe('GET /content', () => {
it('returns content (and does not require authentication)', async () => {
let res = await requester().get('/content');
- expect(res).to.have.deep.property('backgrounds.backgrounds062014.beach');
+ expect(res).to.have.nested.property('backgrounds.backgrounds062014.beach');
expect(res.backgrounds.backgrounds062014.beach.text).to.equal(t('backgroundBeachText'));
});
it('returns content not in English', async () => {
let res = await requester().get('/content?language=de');
- expect(res).to.have.deep.property('backgrounds.backgrounds062014.beach');
+ expect(res).to.have.nested.property('backgrounds.backgrounds062014.beach');
expect(res.backgrounds.backgrounds062014.beach.text).to.equal(i18n.t('backgroundBeachText', 'de'));
});
it('falls back to English if the desired language is not found', async () => {
let res = await requester().get('/content?language=wrong');
- expect(res).to.have.deep.property('backgrounds.backgrounds062014.beach');
+ expect(res).to.have.nested.property('backgrounds.backgrounds062014.beach');
expect(res.backgrounds.backgrounds062014.beach.text).to.equal(t('backgroundBeachText'));
});
});
diff --git a/test/api/v3/integration/debug/POST-debug_addTenGems.test.js b/test/api/v3/integration/debug/POST-debug_addTenGems.test.js
index fd01aea5d3..d1a3b39eb2 100644
--- a/test/api/v3/integration/debug/POST-debug_addTenGems.test.js
+++ b/test/api/v3/integration/debug/POST-debug_addTenGems.test.js
@@ -26,10 +26,10 @@ describe('POST /debug/add-ten-gems', () => {
nconf.set('IS_PROD', true);
await expect(userToGainTenGems.post('/debug/add-ten-gems'))
- .eventually.be.rejected.and.to.deep.equal({
- code: 404,
- error: 'NotFound',
- message: 'Not found.',
- });
+ .eventually.be.rejected.and.to.deep.equal({
+ code: 404,
+ error: 'NotFound',
+ message: 'Not found.',
+ });
});
});
diff --git a/test/api/v3/integration/debug/POST-debug_make-admin.test.js b/test/api/v3/integration/debug/POST-debug_make-admin.test.js
index 98818fb07e..0696b6469f 100644
--- a/test/api/v3/integration/debug/POST-debug_make-admin.test.js
+++ b/test/api/v3/integration/debug/POST-debug_make-admin.test.js
@@ -26,10 +26,10 @@ describe('POST /debug/make-admin (pended for v3 prod testing)', () => {
nconf.set('IS_PROD', true);
await expect(user.post('/debug/make-admin'))
- .eventually.be.rejected.and.to.deep.equal({
- code: 404,
- error: 'NotFound',
- message: 'Not found.',
- });
+ .eventually.be.rejected.and.to.deep.equal({
+ code: 404,
+ error: 'NotFound',
+ message: 'Not found.',
+ });
});
});
diff --git a/test/api/v3/integration/debug/POST-debug_modify-inventory.test.js b/test/api/v3/integration/debug/POST-debug_modify-inventory.test.js
index 93f9081492..7047150477 100644
--- a/test/api/v3/integration/debug/POST-debug_modify-inventory.test.js
+++ b/test/api/v3/integration/debug/POST-debug_modify-inventory.test.js
@@ -151,10 +151,10 @@ describe('POST /debug/modify-inventory', () => {
nconf.set('IS_PROD', true);
await expect(user.post('/debug/modify-inventory'))
- .eventually.be.rejected.and.to.deep.equal({
- code: 404,
- error: 'NotFound',
- message: 'Not found.',
- });
+ .eventually.be.rejected.and.to.deep.equal({
+ code: 404,
+ error: 'NotFound',
+ message: 'Not found.',
+ });
});
});
diff --git a/test/api/v3/integration/debug/POST-debug_quest-progress.test.js b/test/api/v3/integration/debug/POST-debug_quest-progress.test.js
index 6f10b78ba4..90c14c4470 100644
--- a/test/api/v3/integration/debug/POST-debug_quest-progress.test.js
+++ b/test/api/v3/integration/debug/POST-debug_quest-progress.test.js
@@ -16,11 +16,11 @@ describe('POST /debug/quest-progress', () => {
it('errors if user is not on a quest', async () => {
await expect(user.post('/debug/quest-progress'))
- .to.eventually.be.rejected.and.to.deep.equal({
- code: 400,
- error: 'BadRequest',
- message: 'User is not on a valid quest.',
- });
+ .to.eventually.be.rejected.and.to.deep.equal({
+ code: 400,
+ error: 'BadRequest',
+ message: 'User is not on a valid quest.',
+ });
});
it('increases boss quest progress by 1000', async () => {
@@ -51,10 +51,10 @@ describe('POST /debug/quest-progress', () => {
nconf.set('IS_PROD', true);
await expect(user.post('/debug/quest-progress'))
- .eventually.be.rejected.and.to.deep.equal({
- code: 404,
- error: 'NotFound',
- message: 'Not found.',
- });
+ .eventually.be.rejected.and.to.deep.equal({
+ code: 404,
+ error: 'NotFound',
+ message: 'Not found.',
+ });
});
});
diff --git a/test/api/v3/integration/debug/POST-debug_set-cron.test.js b/test/api/v3/integration/debug/POST-debug_set-cron.test.js
index c737831d95..10fe75fa14 100644
--- a/test/api/v3/integration/debug/POST-debug_set-cron.test.js
+++ b/test/api/v3/integration/debug/POST-debug_set-cron.test.js
@@ -30,10 +30,10 @@ describe('POST /debug/set-cron', () => {
nconf.set('IS_PROD', true);
await expect(user.post('/debug/set-cron'))
- .eventually.be.rejected.and.to.deep.equal({
- code: 404,
- error: 'NotFound',
- message: 'Not found.',
- });
+ .eventually.be.rejected.and.to.deep.equal({
+ code: 404,
+ error: 'NotFound',
+ message: 'Not found.',
+ });
});
});
diff --git a/test/api/v3/integration/groups/GET-groups.test.js b/test/api/v3/integration/groups/GET-groups.test.js
index b7c8fbd942..10821a7dcb 100644
--- a/test/api/v3/integration/groups/GET-groups.test.js
+++ b/test/api/v3/integration/groups/GET-groups.test.js
@@ -93,14 +93,14 @@ describe('GET /groups', () => {
it('returns only the tavern when tavern passed in as query', async () => {
await expect(user.get('/groups?type=tavern'))
.to.eventually.have.a.lengthOf(1)
- .and.to.have.deep.property('[0]')
+ .and.to.have.nested.property('[0]')
.and.to.have.property('_id', TAVERN_ID);
});
it('returns only the user\'s party when party passed in as query', async () => {
await expect(user.get('/groups?type=party'))
.to.eventually.have.a.lengthOf(1)
- .and.to.have.deep.property('[0]');
+ .and.to.have.nested.property('[0]');
});
it('returns all public guilds when publicGuilds passed in as query', async () => {
diff --git a/test/api/v3/integration/groups/POST-groups_groupId_join.test.js b/test/api/v3/integration/groups/POST-groups_groupId_join.test.js
index 33b1b7f5a4..a06f40bc4e 100644
--- a/test/api/v3/integration/groups/POST-groups_groupId_join.test.js
+++ b/test/api/v3/integration/groups/POST-groups_groupId_join.test.js
@@ -58,7 +58,7 @@ describe('POST /group/:groupId/join', () => {
await joiningUser.post(`/groups/${publicGuild._id}/join`);
- await expect(joiningUser.get(`/groups/${publicGuild._id}`)).to.eventually.have.deep.property('leader._id', joiningUser._id);
+ await expect(joiningUser.get(`/groups/${publicGuild._id}`)).to.eventually.have.nested.property('leader._id', joiningUser._id);
});
it('increments memberCount when joining guilds', async () => {
@@ -72,7 +72,7 @@ describe('POST /group/:groupId/join', () => {
it('awards Joined Guild achievement', async () => {
await joiningUser.post(`/groups/${publicGuild._id}/join`);
- await expect(joiningUser.get('/user')).to.eventually.have.deep.property('achievements.joinedGuild', true);
+ await expect(joiningUser.get('/user')).to.eventually.have.nested.property('achievements.joinedGuild', true);
});
});
@@ -115,7 +115,7 @@ describe('POST /group/:groupId/join', () => {
await invitedUser.post(`/groups/${guild._id}/join`);
await expect(invitedUser.get('/user'))
- .to.eventually.have.deep.property('invitations.guilds')
+ .to.eventually.have.nested.property('invitations.guilds')
.to.not.include({id: guild._id});
});
@@ -130,7 +130,7 @@ describe('POST /group/:groupId/join', () => {
it('does not give basilist quest to inviter when joining a guild', async () => {
await invitedUser.post(`/groups/${guild._id}/join`);
- await expect(user.get('/user')).to.eventually.not.have.deep.property('items.quests.basilist');
+ await expect(user.get('/user')).to.eventually.not.have.nested.property('items.quests.basilist');
});
it('does not increment basilist quest count to inviter with basilist when joining a guild', async () => {
@@ -138,7 +138,7 @@ describe('POST /group/:groupId/join', () => {
await invitedUser.post(`/groups/${guild._id}/join`);
- await expect(user.get('/user')).to.eventually.have.deep.property('items.quests.basilist', 1);
+ await expect(user.get('/user')).to.eventually.have.nested.property('items.quests.basilist', 1);
});
it('notifies inviting user that their invitation was accepted', async () => {
@@ -160,7 +160,7 @@ describe('POST /group/:groupId/join', () => {
it('awards Joined Guild achievement', async () => {
await invitedUser.post(`/groups/${guild._id}/join`);
- await expect(invitedUser.get('/user')).to.eventually.have.deep.property('achievements.joinedGuild', true);
+ await expect(invitedUser.get('/user')).to.eventually.have.nested.property('achievements.joinedGuild', true);
});
});
});
@@ -197,7 +197,7 @@ describe('POST /group/:groupId/join', () => {
it('allows invited user to join party', async () => {
await invitedUser.post(`/groups/${party._id}/join`);
- await expect(invitedUser.get('/user')).to.eventually.have.deep.property('party._id', party._id);
+ await expect(invitedUser.get('/user')).to.eventually.have.nested.property('party._id', party._id);
});
it('notifies inviting user that their invitation was accepted', async () => {
@@ -220,7 +220,7 @@ describe('POST /group/:groupId/join', () => {
it('clears invitation from user when joining party', async () => {
await invitedUser.post(`/groups/${party._id}/join`);
- await expect(invitedUser.get('/user')).to.eventually.not.have.deep.property('invitations.parties[0].id');
+ await expect(invitedUser.get('/user')).to.eventually.not.have.nested.property('invitations.parties[0].id');
});
it('increments memberCount when joining party', async () => {
@@ -234,7 +234,7 @@ describe('POST /group/:groupId/join', () => {
it('gives basilist quest item to the inviter when joining a party', async () => {
await invitedUser.post(`/groups/${party._id}/join`);
- await expect(user.get('/user')).to.eventually.have.deep.property('items.quests.basilist', 1);
+ await expect(user.get('/user')).to.eventually.have.nested.property('items.quests.basilist', 1);
});
it('increments basilist quest item count to inviter when joining a party', async () => {
@@ -242,7 +242,7 @@ describe('POST /group/:groupId/join', () => {
await invitedUser.post(`/groups/${party._id}/join`);
- await expect(user.get('/user')).to.eventually.have.deep.property('items.quests.basilist', 2);
+ await expect(user.get('/user')).to.eventually.have.nested.property('items.quests.basilist', 2);
});
it('deletes previous party where the user was the only member', async () => {
@@ -258,7 +258,7 @@ describe('POST /group/:groupId/join', () => {
});
await userToInvite.post(`/groups/${party._id}/join`);
- await expect(user.get('/user')).to.eventually.have.deep.property('party._id', party._id);
+ await expect(user.get('/user')).to.eventually.have.nested.property('party._id', party._id);
await expect(checkExistence('groups', oldParty._id)).to.eventually.equal(false);
});
@@ -273,8 +273,8 @@ describe('POST /group/:groupId/join', () => {
await invitedUser.sync();
await party.sync();
- expect(invitedUser).to.have.deep.property('party.quest.RSVPNeeded', true);
- expect(invitedUser).to.have.deep.property('party.quest.key', party.quest.key);
+ expect(invitedUser).to.have.nested.property('party.quest.RSVPNeeded', true);
+ expect(invitedUser).to.have.nested.property('party.quest.key', party.quest.key);
expect(party.quest.members[invitedUser._id]).to.be.null;
});
});
@@ -300,16 +300,16 @@ describe('POST /group/:groupId/join', () => {
await member.sync();
await leader.sync();
- expect(member).to.have.deep.property('achievements.partyUp', true);
- expect(leader).to.have.deep.property('achievements.partyUp', true);
+ expect(member).to.have.nested.property('achievements.partyUp', true);
+ expect(leader).to.have.nested.property('achievements.partyUp', true);
});
it('does not award Party On achievement to party of size 2', async () => {
await member.sync();
await leader.sync();
- expect(member).to.not.have.deep.property('achievements.partyOn');
- expect(leader).to.not.have.deep.property('achievements.partyOn');
+ expect(member).to.not.have.nested.property('achievements.partyOn');
+ expect(leader).to.not.have.nested.property('achievements.partyOn');
});
it('awards Party On achievement to party of size 4', async () => {
@@ -324,8 +324,8 @@ describe('POST /group/:groupId/join', () => {
await member.sync();
await leader.sync();
- expect(member).to.have.deep.property('achievements.partyOn', true);
- expect(leader).to.have.deep.property('achievements.partyOn', true);
+ expect(member).to.have.nested.property('achievements.partyOn', true);
+ expect(leader).to.have.nested.property('achievements.partyOn', true);
});
});
});
diff --git a/test/api/v3/integration/groups/POST-groups_groupId_leave.js b/test/api/v3/integration/groups/POST-groups_groupId_leave.js
index c9dd64e7a9..615b5e01e2 100644
--- a/test/api/v3/integration/groups/POST-groups_groupId_leave.js
+++ b/test/api/v3/integration/groups/POST-groups_groupId_leave.js
@@ -85,7 +85,7 @@ describe('POST /groups/:groupId/leave', () => {
expect(leader.notifications.find(n => {
return n.type === 'NEW_CHAT_MESSAGE' && n.data.group.id === groupToLeave._id;
})).to.not.exist;
- expect(leader.newMessages[groupToLeave._id]).to.be.empty;
+ expect(leader.newMessages[groupToLeave._id]).to.be.undefined;
});
context('with challenges', () => {
@@ -257,7 +257,7 @@ describe('POST /groups/:groupId/leave', () => {
let userWithoutInvitation = await invitedUser.get('/user');
- expect(userWithoutInvitation.invitations.parties[0]).to.be.empty;
+ expect(userWithoutInvitation.invitations.parties[0]).to.be.undefined;
});
});
diff --git a/test/api/v3/integration/groups/POST-groups_groupId_reject.test.js b/test/api/v3/integration/groups/POST-groups_groupId_reject.test.js
index 626c6ff896..7f1e31df85 100644
--- a/test/api/v3/integration/groups/POST-groups_groupId_reject.test.js
+++ b/test/api/v3/integration/groups/POST-groups_groupId_reject.test.js
@@ -36,7 +36,7 @@ describe('POST /group/:groupId/reject-invite', () => {
await invitedUser.post(`/groups/${publicGuild._id}/reject-invite`);
await expect(invitedUser.get('/user'))
- .to.eventually.have.deep.property('invitations.guilds')
+ .to.eventually.have.nested.property('invitations.guilds')
.to.not.include({id: publicGuild._id});
});
});
@@ -72,7 +72,7 @@ describe('POST /group/:groupId/reject-invite', () => {
await invitedUser.post(`/groups/${guild._id}/reject-invite`);
await expect(invitedUser.get('/user'))
- .to.eventually.have.deep.property('invitations.guilds')
+ .to.eventually.have.nested.property('invitations.guilds')
.to.not.include({id: guild._id});
});
});
@@ -107,7 +107,7 @@ describe('POST /group/:groupId/reject-invite', () => {
it('clears invitation from user', async () => {
await invitedUser.post(`/groups/${party._id}/reject-invite`);
- await expect(invitedUser.get('/user')).to.eventually.not.have.deep.property('invitations.parties[0].id');
+ await expect(invitedUser.get('/user')).to.eventually.not.have.nested.property('invitations.parties[0].id');
});
});
});
diff --git a/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js b/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js
index 6fb2af0704..97819e7a41 100644
--- a/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js
+++ b/test/api/v3/integration/groups/POST-groups_id_removeMember.test.js
@@ -184,7 +184,7 @@ describe('POST /groups/:groupId/removeMember/:memberId', () => {
let invitedUserWithoutInvite = await partyInvitedUser.get('/user');
- expect(invitedUserWithoutInvite.invitations.parties[0]).to.be.empty;
+ expect(invitedUserWithoutInvite.invitations.parties[0]).to.be.undefined;
});
it('removes new messages from a member who is removed', async () => {
@@ -203,7 +203,7 @@ describe('POST /groups/:groupId/removeMember/:memberId', () => {
expect(removedMember.notifications.find(n => {
return n.type === 'NEW_CHAT_MESSAGE' && n.data.group.id === party._id;
})).to.not.exist;
- expect(removedMember.newMessages[party._id]).to.be.empty;
+ expect(removedMember.newMessages[party._id]).to.be.undefined;
});
it('removes user from quest when removing user from party after quest starts', async () => {
diff --git a/test/api/v3/integration/groups/POST-groups_invite.test.js b/test/api/v3/integration/groups/POST-groups_invite.test.js
index 3de01d0d40..712c9a8f3c 100644
--- a/test/api/v3/integration/groups/POST-groups_invite.test.js
+++ b/test/api/v3/integration/groups/POST-groups_invite.test.js
@@ -30,22 +30,22 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
uuids: [fakeID],
}))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('userWithIDNotFound', {userId: fakeID}),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('userWithIDNotFound', {userId: fakeID}),
+ });
});
it('returns an error when inviting yourself to a group', async () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
uuids: [inviter._id],
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('cannotInviteSelfToGroup'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('cannotInviteSelfToGroup'),
+ });
});
it('returns an error when uuids is not an array', async () => {
@@ -54,11 +54,11 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
uuids: {fakeID},
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('uuidsMustBeAnArray'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('uuidsMustBeAnArray'),
+ });
});
it('returns an error when uuids and emails are empty', async () => {
@@ -66,22 +66,22 @@ describe('Post /groups/:groupId/invite', () => {
emails: [],
uuids: [],
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('inviteMustNotBeEmpty'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('inviteMustNotBeEmpty'),
+ });
});
it('returns an error when uuids is empty and emails is not passed', async () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
uuids: [],
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('inviteMissingUuid'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('inviteMissingUuid'),
+ });
});
it('returns an error when there are more than INVITES_LIMIT uuids', async () => {
@@ -94,11 +94,11 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
uuids,
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('canOnlyInviteMaxInvites', {maxInvites: INVITES_LIMIT}),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('canOnlyInviteMaxInvites', {maxInvites: INVITES_LIMIT}),
+ });
});
it('invites a user to a group by uuid', async () => {
@@ -114,7 +114,7 @@ describe('Post /groups/:groupId/invite', () => {
}]);
await expect(userToInvite.get('/user'))
- .to.eventually.have.deep.property('invitations.guilds[0].id', group._id);
+ .to.eventually.have.nested.property('invitations.guilds[0].id', group._id);
});
it('invites multiple users to a group by uuid', async () => {
@@ -138,8 +138,8 @@ describe('Post /groups/:groupId/invite', () => {
},
]);
- await expect(userToInvite.get('/user')).to.eventually.have.deep.property('invitations.guilds[0].id', group._id);
- await expect(userToInvite2.get('/user')).to.eventually.have.deep.property('invitations.guilds[0].id', group._id);
+ await expect(userToInvite.get('/user')).to.eventually.have.nested.property('invitations.guilds[0].id', group._id);
+ await expect(userToInvite2.get('/user')).to.eventually.have.nested.property('invitations.guilds[0].id', group._id);
});
it('returns an error when inviting multiple users and a user is not found', async () => {
@@ -149,11 +149,11 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
uuids: [userToInvite._id, fakeID],
}))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('userWithIDNotFound', {userId: fakeID}),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('userWithIDNotFound', {userId: fakeID}),
+ });
});
});
@@ -164,33 +164,33 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
emails: [{name: 'test'}],
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('inviteMissingEmail'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('inviteMissingEmail'),
+ });
});
it('returns an error when emails is not an array', async () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
emails: {testInvite},
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('emailsMustBeAnArray'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('emailsMustBeAnArray'),
+ });
});
it('returns an error when emails is empty and uuids is not passed', async () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
emails: [],
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('inviteMissingEmail'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('inviteMissingEmail'),
+ });
});
it('returns an error when there are more than INVITES_LIMIT emails', async () => {
@@ -203,11 +203,11 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
emails,
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('canOnlyInviteMaxInvites', {maxInvites: INVITES_LIMIT}),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('canOnlyInviteMaxInvites', {maxInvites: INVITES_LIMIT}),
+ });
});
it('returns an error when a user has sent the max number of email invites', async () => {
@@ -224,11 +224,11 @@ describe('Post /groups/:groupId/invite', () => {
emails: [testInvite],
inviter: 'inviter name',
}))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('inviteLimitReached', {techAssistanceEmail: nconf.get('EMAILS:TECH_ASSISTANCE_EMAIL')}),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('inviteLimitReached', {techAssistanceEmail: nconf.get('EMAILS:TECH_ASSISTANCE_EMAIL')}),
+ });
});
it('invites a user to a group by email', async () => {
@@ -258,11 +258,11 @@ describe('Post /groups/:groupId/invite', () => {
describe('user and email invites', () => {
it('returns an error when emails and uuids are not provided', async () => {
await expect(inviter.post(`/groups/${group._id}/invite`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('canOnlyInviteEmailUuid'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('canOnlyInviteEmailUuid'),
+ });
});
it('returns an error when there are more than INVITES_LIMIT uuids and emails', async () => {
@@ -281,11 +281,11 @@ describe('Post /groups/:groupId/invite', () => {
emails,
uuids,
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('canOnlyInviteMaxInvites', {maxInvites: INVITES_LIMIT}),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('canOnlyInviteMaxInvites', {maxInvites: INVITES_LIMIT}),
+ });
});
it('invites users to a group by uuid and email', async () => {
@@ -322,19 +322,19 @@ describe('Post /groups/:groupId/invite', () => {
describe('guild invites', () => {
it('returns an error when invited user is already invited to the group', async () => {
- let userToInivite = await generateUser();
+ let userToInvite = await generateUser();
await inviter.post(`/groups/${group._id}/invite`, {
- uuids: [userToInivite._id],
+ uuids: [userToInvite._id],
});
await expect(inviter.post(`/groups/${group._id}/invite`, {
- uuids: [userToInivite._id],
+ uuids: [userToInvite._id],
}))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('userAlreadyInvitedToGroup'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('userAlreadyInvitedToGroup', { userId: userToInvite._id, username: userToInvite.profile.name}),
+ });
});
it('returns an error when invited user is already in the group', async () => {
@@ -347,11 +347,11 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${group._id}/invite`, {
uuids: [userToInvite._id],
}))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('userAlreadyInGroup'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('userAlreadyInGroup', { userId: userToInvite._id, username: userToInvite.profile.name}),
+ });
});
it('allows 30+ members in a guild', async () => {
@@ -380,11 +380,11 @@ describe('Post /groups/:groupId/invite', () => {
await expect(nonGroupLeader.post(`/groups/${group._id}/invite`, {
uuids: [userToInvite._id],
}))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('onlyGroupLeaderCanInviteToGroupPlan'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('onlyGroupLeaderCanInviteToGroupPlan'),
+ });
});
});
@@ -407,11 +407,11 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${party._id}/invite`, {
uuids: [userToInvite._id],
}))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('userAlreadyPendingInvitation'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('userAlreadyPendingInvitation', { userId: userToInvite._id, username: userToInvite.profile.name}),
+ });
});
it('returns an error when invited user is already in a party of more than 1 member', async () => {
@@ -426,11 +426,11 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${party._id}/invite`, {
uuids: [userToInvite._id],
}))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('userAlreadyInAParty'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('userAlreadyInAParty', { userId: userToInvite._id, username: userToInvite.profile.name}),
+ });
});
it('allow inviting a user to a party if they are partying solo', async () => {
@@ -512,11 +512,11 @@ describe('Post /groups/:groupId/invite', () => {
await expect(inviter.post(`/groups/${party._id}/invite`, {
uuids: generatedInvites.map(invite => invite._id),
}))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('partyExceedsMembersLimit', {maxMembersParty: PARTY_LIMIT_MEMBERS}),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('partyExceedsMembersLimit', {maxMembersParty: PARTY_LIMIT_MEMBERS}),
+ });
});
});
});
diff --git a/test/api/v3/integration/news/POST-news_tell_me_later.test.js b/test/api/v3/integration/news/POST-news_tell_me_later.test.js
index 47444574c4..491a33f210 100644
--- a/test/api/v3/integration/news/POST-news_tell_me_later.test.js
+++ b/test/api/v3/integration/news/POST-news_tell_me_later.test.js
@@ -24,7 +24,7 @@ describe('POST /news/tell-me-later', () => {
const notification = user.notifications[user.notifications.length - 1];
expect(notification.type).to.equal('NEW_STUFF');
- // should be marked as seen by default so it's not counted in the number of notifications
+ // should be marked as seen by default so it's not counted in the number of notifications
expect(notification.seen).to.equal(true);
expect(notification.data.title).to.be.a.string;
});
diff --git a/test/api/v3/integration/payments/apple/POST-payments_apple_verifyiap.js b/test/api/v3/integration/payments/apple/POST-payments_apple_verifyiap.js
index a5d4c1e769..72ebf915f7 100644
--- a/test/api/v3/integration/payments/apple/POST-payments_apple_verifyiap.js
+++ b/test/api/v3/integration/payments/apple/POST-payments_apple_verifyiap.js
@@ -26,9 +26,9 @@ describe('payments : apple #verify', () => {
});
await user.post(endpoint, {
- transaction: {
- receipt: 'receipt',
- }});
+ transaction: {
+ receipt: 'receipt',
+ }});
expect(verifyStub).to.be.calledOnce;
expect(verifyStub.args[0][0]._id).to.eql(user._id);
diff --git a/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js b/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js
index ecff25cfd3..9faa405054 100644
--- a/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js
+++ b/test/api/v3/integration/quests/POST-groups_groupId_quests_accept.test.js
@@ -33,20 +33,20 @@ describe('POST /groups/:groupId/quests/accept', () => {
context('failure conditions', () => {
it('does not accept quest without an invite', async () => {
await expect(leader.post(`/groups/${questingGroup._id}/quests/accept`))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('questInviteNotFound'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('questInviteNotFound'),
+ });
});
it('does not accept quest for a group in which user is not a member', async () => {
await expect(user.post(`/groups/${questingGroup._id}/quests/accept`))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('groupNotFound'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('groupNotFound'),
+ });
});
it('does not accept quest for a guild', async () => {
@@ -55,11 +55,11 @@ describe('POST /groups/:groupId/quests/accept', () => {
});
await expect(guildLeader.post(`/groups/${guild._id}/quests/accept`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('guildQuestsNotSupported'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('guildQuestsNotSupported'),
+ });
});
it('does not accept invite twice', async () => {
@@ -67,11 +67,11 @@ describe('POST /groups/:groupId/quests/accept', () => {
await partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`);
await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('questAlreadyAccepted'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('questAlreadyAccepted'),
+ });
});
it('clears the invalid invite from the user when the request fails', async () => {
@@ -79,11 +79,11 @@ describe('POST /groups/:groupId/quests/accept', () => {
await partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`);
await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('questAlreadyAccepted'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('questAlreadyAccepted'),
+ });
await partyMembers[0].sync();
expect(partyMembers[0].party.quest.RSVPNeeded).to.be.false;
@@ -96,11 +96,11 @@ describe('POST /groups/:groupId/quests/accept', () => {
await partyMembers[1].post(`/groups/${questingGroup._id}/quests/accept`);
await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('questAlreadyUnderway'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('questAlreadyUnderway'),
+ });
});
});
diff --git a/test/api/v3/integration/quests/POST-groups_groupId_quests_force-start.test.js b/test/api/v3/integration/quests/POST-groups_groupId_quests_force-start.test.js
index 76497f50e9..bcbf6a6cf1 100644
--- a/test/api/v3/integration/quests/POST-groups_groupId_quests_force-start.test.js
+++ b/test/api/v3/integration/quests/POST-groups_groupId_quests_force-start.test.js
@@ -32,11 +32,11 @@ describe('POST /groups/:groupId/quests/force-start', () => {
let nonMember = await generateUser();
await expect(nonMember.post(`/groups/${questingGroup._id}/quests/force-start`))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('groupNotFound'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('groupNotFound'),
+ });
});
it('does not force start quest for a guild', async () => {
@@ -45,20 +45,20 @@ describe('POST /groups/:groupId/quests/force-start', () => {
});
await expect(guildLeader.post(`/groups/${guild._id}/quests/force-start`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('guildQuestsNotSupported'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('guildQuestsNotSupported'),
+ });
});
it('does not force start for a party without a pending quest', async () => {
await expect(leader.post(`/groups/${questingGroup._id}/quests/force-start`))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('questNotPending'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('questNotPending'),
+ });
});
it('does not force start for a quest already underway', async () => {
@@ -69,22 +69,22 @@ describe('POST /groups/:groupId/quests/force-start', () => {
await partyMembers[2].post(`/groups/${questingGroup._id}/quests/accept`);
await expect(leader.post(`/groups/${questingGroup._id}/quests/force-start`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('questAlreadyUnderway'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('questAlreadyUnderway'),
+ });
});
it('does not allow non-quest leader or non-group leader to force start a quest', async () => {
await leader.post(`/groups/${questingGroup._id}/quests/invite/${PET_QUEST}`);
await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/force-start`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('questOrGroupLeaderOnlyStartQuest'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('questOrGroupLeaderOnlyStartQuest'),
+ });
});
});
diff --git a/test/api/v3/integration/quests/POST-groups_groupid_quests_abort.test.js b/test/api/v3/integration/quests/POST-groups_groupid_quests_abort.test.js
index 9b5503736b..aa90c5940d 100644
--- a/test/api/v3/integration/quests/POST-groups_groupid_quests_abort.test.js
+++ b/test/api/v3/integration/quests/POST-groups_groupid_quests_abort.test.js
@@ -42,11 +42,11 @@ describe('POST /groups/:groupId/quests/abort', () => {
it('returns an error for a group in which user is not a member', async () => {
await expect(user.post(`/groups/${questingGroup._id}/quests/abort`))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('groupNotFound'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('groupNotFound'),
+ });
});
it('returns an error when group is a guild', async () => {
@@ -55,11 +55,11 @@ describe('POST /groups/:groupId/quests/abort', () => {
});
await expect(guildLeader.post(`/groups/${guild._id}/quests/abort`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('guildQuestsNotSupported'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('guildQuestsNotSupported'),
+ });
});
it('returns an error when quest is not active', async () => {
diff --git a/test/api/v3/integration/quests/POST-groups_groupid_quests_cancel.test.js b/test/api/v3/integration/quests/POST-groups_groupid_quests_cancel.test.js
index 96d78c9bb4..3a5afe4254 100644
--- a/test/api/v3/integration/quests/POST-groups_groupid_quests_cancel.test.js
+++ b/test/api/v3/integration/quests/POST-groups_groupid_quests_cancel.test.js
@@ -41,11 +41,11 @@ describe('POST /groups/:groupId/quests/cancel', () => {
it('does not reject quest for a group in which user is not a member', async () => {
await expect(user.post(`/groups/${questingGroup._id}/quests/cancel`))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('groupNotFound'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('groupNotFound'),
+ });
});
it('returns an error when group is a guild', async () => {
@@ -54,11 +54,11 @@ describe('POST /groups/:groupId/quests/cancel', () => {
});
await expect(guildLeader.post(`/groups/${guild._id}/quests/cancel`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('guildQuestsNotSupported'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('guildQuestsNotSupported'),
+ });
});
it('returns an error when group is not on a quest', async () => {
@@ -74,11 +74,11 @@ describe('POST /groups/:groupId/quests/cancel', () => {
await leader.post(`/groups/${questingGroup._id}/quests/invite/${PET_QUEST}`);
await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/cancel`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('onlyLeaderCancelQuest'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('onlyLeaderCancelQuest'),
+ });
});
it('does not cancel a quest already underway', async () => {
@@ -88,11 +88,11 @@ describe('POST /groups/:groupId/quests/cancel', () => {
await partyMembers[1].post(`/groups/${questingGroup._id}/quests/accept`);
await expect(leader.post(`/groups/${questingGroup._id}/quests/cancel`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('cantCancelActiveQuest'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('cantCancelActiveQuest'),
+ });
});
});
diff --git a/test/api/v3/integration/quests/POST-groups_groupid_quests_leave.test.js b/test/api/v3/integration/quests/POST-groups_groupid_quests_leave.test.js
index 89c65d0c73..8a2870681d 100644
--- a/test/api/v3/integration/quests/POST-groups_groupid_quests_leave.test.js
+++ b/test/api/v3/integration/quests/POST-groups_groupid_quests_leave.test.js
@@ -41,11 +41,11 @@ describe('POST /groups/:groupId/quests/leave', () => {
it('returns an error for a group in which user is not a member', async () => {
await expect(user.post(`/groups/${questingGroup._id}/quests/leave`))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('groupNotFound'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('groupNotFound'),
+ });
});
it('returns an error when group is a guild', async () => {
@@ -54,11 +54,11 @@ describe('POST /groups/:groupId/quests/leave', () => {
});
await expect(guildLeader.post(`/groups/${guild._id}/quests/leave`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('guildQuestsNotSupported'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('guildQuestsNotSupported'),
+ });
});
it('returns an error when quest is not active', async () => {
@@ -89,11 +89,11 @@ describe('POST /groups/:groupId/quests/leave', () => {
await partyMembers[1].post(`/groups/${questingGroup._id}/quests/reject`);
await expect(partyMembers[1].post(`/groups/${questingGroup._id}/quests/leave`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('notPartOfQuest'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('notPartOfQuest'),
+ });
});
});
diff --git a/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js b/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js
index 46dfb5a88d..aacec2598b 100644
--- a/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js
+++ b/test/api/v3/integration/quests/POST-groups_groupid_quests_reject.test.js
@@ -42,11 +42,11 @@ describe('POST /groups/:groupId/quests/reject', () => {
it('does not accept quest for a group in which user is not a member', async () => {
await expect(user.post(`/groups/${questingGroup._id}/quests/accept`))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('groupNotFound'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('groupNotFound'),
+ });
});
it('returns an error when group is a guild', async () => {
@@ -55,11 +55,11 @@ describe('POST /groups/:groupId/quests/reject', () => {
});
await expect(guildLeader.post(`/groups/${guild._id}/quests/reject`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('guildQuestsNotSupported'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('guildQuestsNotSupported'),
+ });
});
it('returns an error when group is not on a quest', async () => {
@@ -76,11 +76,11 @@ describe('POST /groups/:groupId/quests/reject', () => {
await partyMembers[0].post(`/groups/${questingGroup._id}/quests/reject`);
await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/reject`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('questAlreadyRejected'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('questAlreadyRejected'),
+ });
});
it('clears the user rsvp needed if the request fails because the request is invalid', async () => {
@@ -88,11 +88,11 @@ describe('POST /groups/:groupId/quests/reject', () => {
await partyMembers[0].post(`/groups/${questingGroup._id}/quests/reject`);
await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/reject`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('questAlreadyRejected'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('questAlreadyRejected'),
+ });
await partyMembers[0].sync();
expect(partyMembers[0].party.quest.RSVPNeeded).to.be.false;
@@ -103,11 +103,11 @@ describe('POST /groups/:groupId/quests/reject', () => {
await partyMembers[0].post(`/groups/${questingGroup._id}/quests/accept`);
await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/reject`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('questAlreadyAccepted'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('questAlreadyAccepted'),
+ });
});
it('does not reject invite for a quest already underway', async () => {
@@ -117,11 +117,11 @@ describe('POST /groups/:groupId/quests/reject', () => {
await partyMembers[1].post(`/groups/${questingGroup._id}/quests/accept`);
await expect(partyMembers[0].post(`/groups/${questingGroup._id}/quests/reject`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('questAlreadyUnderway'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('questAlreadyUnderway'),
+ });
});
});
diff --git a/test/api/v3/integration/tasks/POST-tasks_id_score_direction.test.js b/test/api/v3/integration/tasks/POST-tasks_id_score_direction.test.js
index fa435c5e31..458fed6f10 100644
--- a/test/api/v3/integration/tasks/POST-tasks_id_score_direction.test.js
+++ b/test/api/v3/integration/tasks/POST-tasks_id_score_direction.test.js
@@ -141,11 +141,11 @@ describe('POST /tasks/:id/score/:direction', () => {
it('doesn\'t let a todo be completed twice', async () => {
await user.post(`/tasks/${todo._id}/score/up`);
await expect(user.post(`/tasks/${todo._id}/score/up`))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('sessionOutdated'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('sessionOutdated'),
+ });
});
it('doesn\'t let a todo be uncompleted twice', async () => {
@@ -380,11 +380,11 @@ describe('POST /tasks/:id/score/:direction', () => {
await expect(user.post(`/tasks/${habit._id}/score/up`, {
scoreNotes: scoreNotesString,
}))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('taskScoreNotesTooLong'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('taskScoreNotesTooLong'),
+ });
});
});
diff --git a/test/api/v3/integration/tasks/POST-tasks_unlink-all_challengeId.test.js b/test/api/v3/integration/tasks/POST-tasks_unlink-all_challengeId.test.js
index ee60541017..cd8bec5acc 100644
--- a/test/api/v3/integration/tasks/POST-tasks_unlink-all_challengeId.test.js
+++ b/test/api/v3/integration/tasks/POST-tasks_unlink-all_challengeId.test.js
@@ -41,30 +41,30 @@ describe('POST /tasks/unlink-all/:challengeId', () => {
it('fails if no keep query', async () => {
await expect(user.post(`/tasks/unlink-all/${challenge._id}`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('invalidReqParams'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('invalidReqParams'),
+ });
});
it('fails if invalid challenge id', async () => {
await expect(user.post('/tasks/unlink-all/123?keep=remove-all'))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('invalidReqParams'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('invalidReqParams'),
+ });
});
it('fails on an unbroken challenge', async () => {
await user.post(`/tasks/challenge/${challenge._id}`, tasksToTest.daily);
await expect(user.post(`/tasks/unlink-all/${challenge._id}?keep=remove-all`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('cantOnlyUnlinkChalTask'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('cantOnlyUnlinkChalTask'),
+ });
});
it('unlinks all tasks from a challenge and deletes them on keep=remove-all', async () => {
@@ -87,7 +87,7 @@ describe('POST /tasks/unlink-all/:challengeId', () => {
const daily = await user.post(`/tasks/challenge/${challenge._id}`, tasksToTest.daily);
const anotherUser = await generateUser();
await user.post(`/groups/${guild._id}/invite`, {
- uuids: [anotherUser._id],
+ uuids: [anotherUser._id],
});
// Have the second user join the group and challenge
await anotherUser.post(`/groups/${guild._id}/join`);
diff --git a/test/api/v3/integration/tasks/POST-tasks_unlink-one_taskId.test.js b/test/api/v3/integration/tasks/POST-tasks_unlink-one_taskId.test.js
index 570f46c92e..fb67ec1451 100644
--- a/test/api/v3/integration/tasks/POST-tasks_unlink-one_taskId.test.js
+++ b/test/api/v3/integration/tasks/POST-tasks_unlink-one_taskId.test.js
@@ -43,50 +43,50 @@ describe('POST /tasks/unlink-one/:taskId', () => {
it('fails if no keep query', async () => {
const daily = await user.post(`/tasks/challenge/${challenge._id}`, tasksToTest.daily);
await expect(user.post(`/tasks/unlink-one/${daily._id}`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('invalidReqParams'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('invalidReqParams'),
+ });
});
it('fails if invalid task id', async () => {
await expect(user.post('/tasks/unlink-one/123?keep=remove'))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('invalidReqParams'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('invalidReqParams'),
+ });
});
it('fails on task not found', async () => {
await expect(user.post(`/tasks/unlink-one/${generateUUID()}?keep=keep`))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('taskNotFound'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('taskNotFound'),
+ });
});
it('fails on task unlinked to challenge', async () => {
let daily = await user.post('/tasks/user', tasksToTest.daily);
await expect(user.post(`/tasks/unlink-one/${daily._id}?keep=keep`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('cantOnlyUnlinkChalTask'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('cantOnlyUnlinkChalTask'),
+ });
});
it('fails on unbroken challenge', async () => {
await user.post(`/tasks/challenge/${challenge._id}`, tasksToTest.daily);
let [daily] = await user.get('/tasks/user');
await expect(user.post(`/tasks/unlink-one/${daily._id}?keep=keep`))
- .to.eventually.be.rejected.and.eql({
- code: 400,
- error: 'BadRequest',
- message: t('cantOnlyUnlinkChalTask'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 400,
+ error: 'BadRequest',
+ message: t('cantOnlyUnlinkChalTask'),
+ });
});
it('unlinks a task from a challenge and saves it on keep=keep', async () => {
diff --git a/test/api/v3/integration/tasks/PUT-tasks_id.test.js b/test/api/v3/integration/tasks/PUT-tasks_id.test.js
index b2b802f837..aba6c254cf 100644
--- a/test/api/v3/integration/tasks/PUT-tasks_id.test.js
+++ b/test/api/v3/integration/tasks/PUT-tasks_id.test.js
@@ -46,7 +46,7 @@ describe('PUT /tasks/:id', () => {
expect(savedTask.userId).to.equal(task.userId);
expect(savedTask.history).to.eql(task.history);
expect(savedTask.createdAt).to.equal(task.createdAt);
- expect(savedTask.updatedAt).to.be.greaterThan(task.updatedAt);
+ expect(new Date(savedTask.updatedAt)).to.be.greaterThan(new Date(task.updatedAt));
expect(savedTask.challenge).to.eql(task.challenge);
expect(savedTask.completed).to.eql(task.completed);
expect(savedTask.streak).to.equal(savedTask.streak); // it's an habit, dailies can change it
@@ -54,7 +54,7 @@ describe('PUT /tasks/:id', () => {
});
it('ignores invalid fields', async () => {
- let savedTask = await user.put(`/tasks/${task._id}`, {
+ let savedTask = await user.put(`/tasks/${task._id}`, {
notValid: true,
});
@@ -133,7 +133,7 @@ describe('PUT /tasks/:id', () => {
expect(savedChallengeUserTask.text).to.equal(challengeUserTask.text);
expect(savedChallengeUserTask.history).to.eql(challengeUserTask.history);
expect(savedChallengeUserTask.createdAt).to.equal(challengeUserTask.createdAt);
- expect(savedChallengeUserTask.updatedAt).to.be.greaterThan(challengeUserTask.updatedAt);
+ expect(new Date(savedChallengeUserTask.updatedAt)).to.be.greaterThan(new Date(challengeUserTask.updatedAt));
expect(savedChallengeUserTask.challenge).to.eql(challengeUserTask.challenge);
expect(savedChallengeUserTask.completed).to.equal(challengeUserTask.completed);
expect(savedChallengeUserTask.dateCompleted).to.equal(challengeUserTask.dateCompleted);
diff --git a/test/api/v3/integration/tasks/challenges/POST-tasks_challenge_challengeId_taskId_checklist.test.js b/test/api/v3/integration/tasks/challenges/POST-tasks_challenge_challengeId_taskId_checklist.test.js
index 06bc7b68b2..ec4d09f7b3 100644
--- a/test/api/v3/integration/tasks/challenges/POST-tasks_challenge_challengeId_taskId_checklist.test.js
+++ b/test/api/v3/integration/tasks/challenges/POST-tasks_challenge_challengeId_taskId_checklist.test.js
@@ -40,11 +40,11 @@ describe('POST /tasks/:taskId/checklist/', () => {
ignored: false,
_id: 123,
}))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('onlyChalLeaderEditTasks'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('onlyChalLeaderEditTasks'),
+ });
});
it('adds a checklist item to a daily', async () => {
diff --git a/test/api/v3/integration/tasks/challenges/PUT-tasks_challenge_challengeId.test.js b/test/api/v3/integration/tasks/challenges/PUT-tasks_challenge_challengeId.test.js
index bd3be00508..94d96367b8 100644
--- a/test/api/v3/integration/tasks/challenges/PUT-tasks_challenge_challengeId.test.js
+++ b/test/api/v3/integration/tasks/challenges/PUT-tasks_challenge_challengeId.test.js
@@ -98,7 +98,7 @@ describe('PUT /tasks/:id', () => {
expect(savedTask.userId).to.equal(task.userId);
expect(savedTask.history).to.eql(task.history);
expect(savedTask.createdAt).to.equal(task.createdAt);
- expect(savedTask.updatedAt).to.be.greaterThan(task.updatedAt);
+ expect(new Date(savedTask.updatedAt)).to.be.greaterThan(new Date(task.updatedAt));
expect(savedTask.challenge._id).to.equal(task.challenge._id);
expect(savedTask.completed).to.equal(task.completed);
expect(savedTask.streak).to.equal(task.streak);
diff --git a/test/api/v3/integration/tasks/challenges/PUT-tasks_challenge_challengeId_tasksId_checklist_itemId.test.js b/test/api/v3/integration/tasks/challenges/PUT-tasks_challenge_challengeId_tasksId_checklist_itemId.test.js
index 4dc2ceaa3e..cce7ce79f3 100644
--- a/test/api/v3/integration/tasks/challenges/PUT-tasks_challenge_challengeId_tasksId_checklist_itemId.test.js
+++ b/test/api/v3/integration/tasks/challenges/PUT-tasks_challenge_challengeId_tasksId_checklist_itemId.test.js
@@ -28,11 +28,11 @@ describe('PUT /tasks/:taskId/checklist/:itemId', () => {
completed: true,
_id: 123, // ignored
}))
- .to.eventually.be.rejected.and.eql({
- code: 404,
- error: 'NotFound',
- message: t('checklistItemNotFound'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 404,
+ error: 'NotFound',
+ message: t('checklistItemNotFound'),
+ });
});
it('returns error when user is not a member of the challenge', async () => {
@@ -53,11 +53,11 @@ describe('PUT /tasks/:taskId/checklist/:itemId', () => {
completed: true,
_id: 123, // ignored
}))
- .to.eventually.be.rejected.and.eql({
- code: 401,
- error: 'NotAuthorized',
- message: t('onlyChalLeaderEditTasks'),
- });
+ .to.eventually.be.rejected.and.eql({
+ code: 401,
+ error: 'NotAuthorized',
+ message: t('onlyChalLeaderEditTasks'),
+ });
});
it('updates a checklist item on dailies', async () => {
diff --git a/test/api/v3/integration/tasks/groups/tags/POST-tasks_taskId_tags.test.js b/test/api/v3/integration/tasks/groups/tags/POST-tasks_taskId_tags.test.js
index bfa5f31840..ead583d122 100644
--- a/test/api/v3/integration/tasks/groups/tags/POST-tasks_taskId_tags.test.js
+++ b/test/api/v3/integration/tasks/groups/tags/POST-tasks_taskId_tags.test.js
@@ -3,6 +3,7 @@ import {
translate as t,
} from '../../../../../../helpers/api-integration/v3';
import { v4 as generateUUID } from 'uuid';
+
// Currently we do not support adding tags to group original tasks, but if we do in the future, these tests will check
xdescribe('POST group /tasks/:taskId/tags/:tagId', () => {
let user, guild, task;
diff --git a/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js b/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js
index 9453757530..d8cd074bc7 100644
--- a/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js
+++ b/test/api/v3/integration/user/POST-user_class_cast_spellId.test.js
@@ -187,6 +187,22 @@ describe('POST /user/class/cast/:spellId', () => {
expect(group.chat[0].uuid).to.equal('system');
});
+ it('cast bulk', async () => {
+ let { group, groupLeader } = await createAndPopulateGroup({
+ groupDetails: { type: 'party', privacy: 'private' },
+ members: 1,
+ });
+
+ await groupLeader.update({'stats.mp': 200, 'stats.class': 'wizard', 'stats.lvl': 13});
+ await groupLeader.post('/user/class/cast/earth', {quantity: 2});
+
+ await sleep(1);
+ await group.sync();
+
+ expect(group.chat[0]).to.exist;
+ expect(group.chat[0].uuid).to.equal('system');
+ });
+
it('searing brightness does not affect challenge or group tasks', async () => {
let guild = await generateGroup(user);
let challenge = await generateChallenge(user, guild);
diff --git a/test/api/v3/integration/user/POST-user_release_both.test.js b/test/api/v3/integration/user/POST-user_release_both.test.js
index 047ea5a2c9..ce8e5246dd 100644
--- a/test/api/v3/integration/user/POST-user_release_both.test.js
+++ b/test/api/v3/integration/user/POST-user_release_both.test.js
@@ -54,9 +54,9 @@ describe('POST /user/release-both', () => {
expect(response.message).to.equal(t('mountsAndPetsReleased'));
expect(user.balance).to.equal(0);
- expect(user.items.currentMount).to.be.empty;
- expect(user.items.currentPet).to.be.empty;
- expect(user.items.pets[animal]).to.be.empty;
+ expect(user.items.currentMount).to.equal('');
+ expect(user.items.currentPet).to.equal('');
+ expect(user.items.pets[animal]).to.equal(0);
expect(user.items.mounts[animal]).to.equal(null);
expect(user.achievements.beastMasterCount).to.equal(1);
expect(user.achievements.mountMasterCount).to.equal(1);
diff --git a/test/api/v3/integration/user/auth/DELETE-user_auth_social_network.test.js b/test/api/v3/integration/user/auth/DELETE-user_auth_social_network.test.js
index ae4fde82a9..55c5522322 100644
--- a/test/api/v3/integration/user/auth/DELETE-user_auth_social_network.test.js
+++ b/test/api/v3/integration/user/auth/DELETE-user_auth_social_network.test.js
@@ -41,7 +41,7 @@ describe('DELETE social registration', () => {
let response = await user.del('/user/auth/social/facebook');
expect(response).to.eql({});
await user.sync();
- expect(user.auth.facebook).to.be.empty;
+ expect(user.auth.facebook).to.be.undefined;
});
it('succeeds if user has a google registration', async () => {
@@ -54,7 +54,7 @@ describe('DELETE social registration', () => {
let response = await user.del('/user/auth/social/facebook');
expect(response).to.eql({});
await user.sync();
- expect(user.auth.facebook).to.be.empty;
+ expect(user.auth.facebook).to.be.undefined;
});
});
@@ -79,7 +79,7 @@ describe('DELETE social registration', () => {
let response = await user.del('/user/auth/social/google');
expect(response).to.eql({});
await user.sync();
- expect(user.auth.google).to.be.empty;
+ expect(user.auth.google).to.be.undefined;
});
it('succeeds if user has a facebook registration', async () => {
@@ -92,7 +92,7 @@ describe('DELETE social registration', () => {
let response = await user.del('/user/auth/social/google');
expect(response).to.eql({});
await user.sync();
- expect(user.auth.google).to.be.empty;
+ expect(user.auth.goodl).to.be.undefined;
});
});
});
diff --git a/test/api/v3/integration/user/auth/POST-register_local.test.js b/test/api/v3/integration/user/auth/POST-register_local.test.js
index 259d848c05..1ad091a79e 100644
--- a/test/api/v3/integration/user/auth/POST-register_local.test.js
+++ b/test/api/v3/integration/user/auth/POST-register_local.test.js
@@ -579,7 +579,7 @@ describe('POST /user/auth/local/register', () => {
it('adds a user to a guild on an invite of type other than party', async () => {
let { group, groupLeader } = await createAndPopulateGroup({
- groupDetails: { type: 'guild', privacy: 'private' },
+ groupDetails: { type: 'guild', privacy: 'private' },
});
let invite = encrypt(JSON.stringify({
diff --git a/test/api/v3/integration/webhook/PUT-user_update_webhook.test.js b/test/api/v3/integration/webhook/PUT-user_update_webhook.test.js
index 2e02562b5f..994eff6750 100644
--- a/test/api/v3/integration/webhook/PUT-user_update_webhook.test.js
+++ b/test/api/v3/integration/webhook/PUT-user_update_webhook.test.js
@@ -34,7 +34,7 @@ describe('PUT /user/webhook/:id', () => {
});
it('returns an error if validation fails', async () => {
- await expect(user.put(`/user/webhook/${webhookToUpdate.id}`, { url: 'foo', enabled: true })).to.eventually.be.rejected.and.eql({
+ await expect(user.put(`/user/webhook/${webhookToUpdate.id}`, { url: 'foo_invalid', enabled: true })).to.eventually.be.rejected.and.eql({
code: 400,
error: 'BadRequest',
message: 'User validation failed',
diff --git a/test/api/v3/integration/world-state/GET-world-state.test.js b/test/api/v3/integration/world-state/GET-world-state.test.js
index fac08ad639..5c91062769 100644
--- a/test/api/v3/integration/world-state/GET-world-state.test.js
+++ b/test/api/v3/integration/world-state/GET-world-state.test.js
@@ -19,7 +19,7 @@ describe('GET /world-state', () => {
await updateDocument('groups', {_id: TAVERN_ID}, {quest: {active: true, key: 'dysheartener', progress: {hp: 50000, rage: 9999}}});
const res = await requester().get('/world-state');
- expect(res).to.have.deep.property('worldBoss');
+ expect(res).to.have.nested.property('worldBoss');
expect(res.worldBoss).to.eql({
active: true,
diff --git a/test/api/v3/unit/libs/apiMessages.js b/test/api/v3/unit/libs/apiMessages.js
index 09ff86f5ba..3d2ac2fad1 100644
--- a/test/api/v3/unit/libs/apiMessages.js
+++ b/test/api/v3/unit/libs/apiMessages.js
@@ -14,7 +14,7 @@ describe('API Messages', () => {
let vars = {a: 1};
sandbox.stub(_, 'clone').returns({});
apiMessages('guildsOnlyPaginate', vars);
- expect(_.clone).to.have.been.called.once;
+ expect(_.clone).to.have.been.calledOnce;
expect(_.clone).to.have.been.calledWith(vars);
});
@@ -23,9 +23,9 @@ describe('API Messages', () => {
let stub = sinon.stub().returns('string');
sandbox.stub(_, 'template').returns(stub);
apiMessages('guildsOnlyPaginate', vars);
- expect(_.template).to.have.been.called.once;
+ expect(_.template).to.have.been.calledOnce;
expect(_.template).to.have.been.calledWith(message);
- expect(stub).to.have.been.called.once;
+ expect(stub).to.have.been.calledOnce;
expect(stub).to.have.been.calledWith(vars);
});
});
diff --git a/test/api/v3/unit/libs/collectionManipulators.test.js b/test/api/v3/unit/libs/collectionManipulators.test.js
index a2bc6e71c4..2736b37502 100644
--- a/test/api/v3/unit/libs/collectionManipulators.test.js
+++ b/test/api/v3/unit/libs/collectionManipulators.test.js
@@ -1,6 +1,6 @@
import mongoose from 'mongoose';
import {
- removeFromArray,
+ removeFromArray,
} from '../../../../../website/server/libs/collectionManipulators';
describe('Collection Manipulators', () => {
diff --git a/test/api/v3/unit/libs/cron.test.js b/test/api/v3/unit/libs/cron.test.js
index 2fefcbf483..76990aa20a 100644
--- a/test/api/v3/unit/libs/cron.test.js
+++ b/test/api/v3/unit/libs/cron.test.js
@@ -181,9 +181,9 @@ describe('cron', () => {
cron({user, tasksByType, daysMissed, analytics});
expect(user.purchased.plan.customerId).to.not.exist;
- expect(user.purchased.plan.consecutive.gemCapExtra).to.be.empty;
- expect(user.purchased.plan.consecutive.count).to.be.empty;
- expect(user.purchased.plan.consecutive.offset).to.be.empty;
+ expect(user.purchased.plan.consecutive.gemCapExtra).to.equal(0);
+ expect(user.purchased.plan.consecutive.count).to.equal(0);
+ expect(user.purchased.plan.consecutive.offset).to.equal(0);
});
});
@@ -1027,7 +1027,7 @@ describe('cron', () => {
cron({user, tasksByType, daysMissed, analytics});
expect(user.party.quest.progress.up).to.equal(0);
expect(user.party.quest.progress.down).to.equal(0);
- expect(user.party.quest.progress.collectedItems).to.be.empty;
+ expect(user.party.quest.progress.collectedItems).to.equal(0);
});
it('applies the user progress', () => {
diff --git a/test/api/v3/unit/libs/email.test.js b/test/api/v3/unit/libs/email.test.js
index 1597ccee73..ebfa2ac6ea 100644
--- a/test/api/v3/unit/libs/email.test.js
+++ b/test/api/v3/unit/libs/email.test.js
@@ -1,27 +1,11 @@
/* eslint-disable global-require */
-import request from 'request';
+import got from 'got';
import nconf from 'nconf';
import nodemailer from 'nodemailer';
-import Bluebird from 'bluebird';
import requireAgain from 'require-again';
import logger from '../../../../../website/server/libs/logger';
import { TAVERN_ID } from '../../../../../website/server/models/group';
-
-function defer () {
- let resolve;
- let reject;
-
- let promise = new Bluebird((resolveParam, rejectParam) => {
- resolve = resolveParam;
- reject = rejectParam;
- });
-
- return {
- resolve,
- reject,
- promise,
- };
-}
+import { defer } from '../../../../helpers/api-unit.helper';
function getUser () {
return {
@@ -158,7 +142,7 @@ describe('emails', () => {
describe('sendTxnEmail', () => {
beforeEach(() => {
- sandbox.stub(request, 'post');
+ sandbox.stub(got, 'post').returns(defer().promise);
});
afterEach(() => {
@@ -176,8 +160,9 @@ describe('emails', () => {
};
sendTxnEmail(mailingInfo, emailType);
- expect(request.post).to.be.calledWith(sinon.match({
- json: {
+ expect(got.post).to.be.calledWith('undefined/job', sinon.match({
+ json: true,
+ body: {
data: {
emailType: sinon.match.same(emailType),
to: sinon.match((value) => {
@@ -199,7 +184,7 @@ describe('emails', () => {
};
sendTxnEmail(mailingInfo, emailType);
- expect(request.post).not.to.be.called;
+ expect(got.post).not.to.be.called;
});
it('uses getUserInfo in case of user data', () => {
@@ -210,8 +195,9 @@ describe('emails', () => {
let mailingInfo = getUser();
sendTxnEmail(mailingInfo, emailType);
- expect(request.post).to.be.calledWith(sinon.match({
- json: {
+ expect(got.post).to.be.calledWith('undefined/job', sinon.match({
+ json: true,
+ body: {
data: {
emailType: sinon.match.same(emailType),
to: sinon.match(val => val[0]._id === mailingInfo._id),
@@ -232,8 +218,9 @@ describe('emails', () => {
let variables = [1, 2, 3];
sendTxnEmail(mailingInfo, emailType, variables);
- expect(request.post).to.be.calledWith(sinon.match({
- json: {
+ expect(got.post).to.be.calledWith('undefined/job', sinon.match({
+ json: true,
+ body: {
data: {
variables: sinon.match((value) => {
return value[0].name === 'BASE_URL';
diff --git a/test/api/v3/unit/libs/payments/amazon/checkout.test.js b/test/api/v3/unit/libs/payments/amazon/checkout.test.js
index 9e74cdb145..0581c76772 100644
--- a/test/api/v3/unit/libs/payments/amazon/checkout.test.js
+++ b/test/api/v3/unit/libs/payments/amazon/checkout.test.js
@@ -132,11 +132,11 @@ describe('Amazon Payments - Checkout', () => {
};
await expect(amzLib.checkout({gift, user, orderReferenceId, headers}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- message: 'Amount must be at least 1.',
- name: 'BadRequest',
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ message: 'Amount must be at least 1.',
+ name: 'BadRequest',
+ });
});
it('should error if user cannot get gems gems', async () => {
diff --git a/test/api/v3/unit/libs/payments/amazon/subscribe.test.js b/test/api/v3/unit/libs/payments/amazon/subscribe.test.js
index 8095f90c63..930c64d06a 100644
--- a/test/api/v3/unit/libs/payments/amazon/subscribe.test.js
+++ b/test/api/v3/unit/libs/payments/amazon/subscribe.test.js
@@ -123,11 +123,11 @@ describe('Amazon Payments - Subscribe', () => {
groupId,
headers,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- name: 'BadRequest',
- message: i18n.t('missingSubscriptionCode'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ name: 'BadRequest',
+ message: i18n.t('missingSubscriptionCode'),
+ });
});
it('should throw an error if we are missing a billingAgreementId', async () => {
@@ -138,11 +138,11 @@ describe('Amazon Payments - Subscribe', () => {
groupId,
headers,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- name: 'BadRequest',
- message: 'Missing req.body.billingAgreementId',
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ name: 'BadRequest',
+ message: 'Missing req.body.billingAgreementId',
+ });
});
it('should throw an error when coupon code is missing', async () => {
@@ -156,11 +156,11 @@ describe('Amazon Payments - Subscribe', () => {
groupId,
headers,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- name: 'BadRequest',
- message: i18n.t('couponCodeRequired'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ name: 'BadRequest',
+ message: i18n.t('couponCodeRequired'),
+ });
});
it('should throw an error when coupon code is invalid', async () => {
@@ -182,11 +182,11 @@ describe('Amazon Payments - Subscribe', () => {
groupId,
headers,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 401,
- name: 'NotAuthorized',
- message: i18n.t('invalidCoupon'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 401,
+ name: 'NotAuthorized',
+ message: i18n.t('invalidCoupon'),
+ });
cc.validate.restore();
});
diff --git a/test/api/v3/unit/libs/payments/group-plans/group-payments-create.test.js b/test/api/v3/unit/libs/payments/group-plans/group-payments-create.test.js
index 96bcde4134..72489aa4df 100644
--- a/test/api/v3/unit/libs/payments/group-plans/group-payments-create.test.js
+++ b/test/api/v3/unit/libs/payments/group-plans/group-payments-create.test.js
@@ -305,7 +305,7 @@ describe('Purchasing a group plan for group', () => {
await api.createSubscription(data);
- expect(sender.sendTxn).to.be.calledFourTimes;
+ expect(sender.sendTxn).to.have.callCount(4);
expect(sender.sendTxn.args[0][0]._id).to.equal(TECH_ASSISTANCE_EMAIL);
expect(sender.sendTxn.args[0][1]).to.equal('admin-user-subscription-details');
expect(sender.sendTxn.args[1][0]._id).to.equal(recipient._id);
@@ -338,7 +338,7 @@ describe('Purchasing a group plan for group', () => {
await api.createSubscription(data);
- expect(sender.sendTxn).to.be.calledFourTimes;
+ expect(sender.sendTxn).to.have.callCount(4);
expect(sender.sendTxn.args[0][0]._id).to.equal(TECH_ASSISTANCE_EMAIL);
expect(sender.sendTxn.args[0][1]).to.equal('admin-user-subscription-details');
expect(sender.sendTxn.args[1][0]._id).to.equal(recipient._id);
diff --git a/test/api/v3/unit/libs/payments/paypal/checkout.test.js b/test/api/v3/unit/libs/payments/paypal/checkout.test.js
index 9ed40c1ad8..aaa83535ee 100644
--- a/test/api/v3/unit/libs/payments/paypal/checkout.test.js
+++ b/test/api/v3/unit/libs/payments/paypal/checkout.test.js
@@ -71,11 +71,11 @@ describe('checkout', () => {
};
await expect(paypalPayments.checkout({gift}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- message: 'Amount must be at least 1.',
- name: 'BadRequest',
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ message: 'Amount must be at least 1.',
+ name: 'BadRequest',
+ });
});
it('should error if the user cannot get gems', async () => {
diff --git a/test/api/v3/unit/libs/payments/stripe/cancel-subscription.test.js b/test/api/v3/unit/libs/payments/stripe/cancel-subscription.test.js
index 2e09014a39..d062ad0b89 100644
--- a/test/api/v3/unit/libs/payments/stripe/cancel-subscription.test.js
+++ b/test/api/v3/unit/libs/payments/stripe/cancel-subscription.test.js
@@ -42,11 +42,11 @@ describe('cancel subscription', () => {
user,
groupId: undefined,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 401,
- name: 'NotAuthorized',
- message: i18n.t('missingSubscription'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 401,
+ name: 'NotAuthorized',
+ message: i18n.t('missingSubscription'),
+ });
});
it('throws an error if the group is not found', async () => {
@@ -54,11 +54,11 @@ describe('cancel subscription', () => {
user,
groupId: 'fake-group',
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 404,
- name: 'NotFound',
- message: i18n.t('groupNotFound'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 404,
+ name: 'NotFound',
+ message: i18n.t('groupNotFound'),
+ });
});
it('throws an error if user is not the group leader', async () => {
@@ -70,11 +70,11 @@ describe('cancel subscription', () => {
user: nonLeader,
groupId,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 401,
- name: 'NotAuthorized',
- message: i18n.t('onlyGroupLeaderCanManageSubscription'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 401,
+ name: 'NotAuthorized',
+ message: i18n.t('onlyGroupLeaderCanManageSubscription'),
+ });
});
describe('success', () => {
diff --git a/test/api/v3/unit/libs/payments/stripe/checkout-subscription.test.js b/test/api/v3/unit/libs/payments/stripe/checkout-subscription.test.js
index d1d908c7fa..7271b1dbd3 100644
--- a/test/api/v3/unit/libs/payments/stripe/checkout-subscription.test.js
+++ b/test/api/v3/unit/libs/payments/stripe/checkout-subscription.test.js
@@ -88,11 +88,11 @@ describe('checkout with subscription', () => {
headers,
coupon,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- name: 'BadRequest',
- message: 'Missing req.body.id',
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ name: 'BadRequest',
+ message: 'Missing req.body.id',
+ });
});
it('should throw an error when coupon code is missing', async () => {
@@ -108,11 +108,11 @@ describe('checkout with subscription', () => {
headers,
coupon,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- name: 'BadRequest',
- message: i18n.t('couponCodeRequired'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ name: 'BadRequest',
+ message: i18n.t('couponCodeRequired'),
+ });
});
it('should throw an error when coupon code is invalid', async () => {
@@ -136,11 +136,11 @@ describe('checkout with subscription', () => {
headers,
coupon,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- name: 'BadRequest',
- message: i18n.t('invalidCoupon'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ name: 'BadRequest',
+ message: i18n.t('invalidCoupon'),
+ });
cc.validate.restore();
});
diff --git a/test/api/v3/unit/libs/payments/stripe/checkout.test.js b/test/api/v3/unit/libs/payments/stripe/checkout.test.js
index f784bca300..b8f398ef6e 100644
--- a/test/api/v3/unit/libs/payments/stripe/checkout.test.js
+++ b/test/api/v3/unit/libs/payments/stripe/checkout.test.js
@@ -57,11 +57,11 @@ describe('checkout', () => {
headers,
coupon,
}, stripe))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- message: 'Amount must be at least 1.',
- name: 'BadRequest',
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ message: 'Amount must be at least 1.',
+ name: 'BadRequest',
+ });
});
diff --git a/test/api/v3/unit/libs/payments/stripe/edit-subscription.test.js b/test/api/v3/unit/libs/payments/stripe/edit-subscription.test.js
index 9c58c4bae5..40153f8496 100644
--- a/test/api/v3/unit/libs/payments/stripe/edit-subscription.test.js
+++ b/test/api/v3/unit/libs/payments/stripe/edit-subscription.test.js
@@ -43,11 +43,11 @@ describe('edit subscription', () => {
user,
groupId: undefined,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 401,
- name: 'NotAuthorized',
- message: i18n.t('missingSubscription'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 401,
+ name: 'NotAuthorized',
+ message: i18n.t('missingSubscription'),
+ });
});
it('throws an error if a token is not provided', async () => {
@@ -55,11 +55,11 @@ describe('edit subscription', () => {
user,
groupId: undefined,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 400,
- name: 'BadRequest',
- message: 'Missing req.body.id',
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 400,
+ name: 'BadRequest',
+ message: 'Missing req.body.id',
+ });
});
it('throws an error if the group is not found', async () => {
@@ -68,11 +68,11 @@ describe('edit subscription', () => {
user,
groupId: 'fake-group',
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 404,
- name: 'NotFound',
- message: i18n.t('groupNotFound'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 404,
+ name: 'NotFound',
+ message: i18n.t('groupNotFound'),
+ });
});
it('throws an error if user is not the group leader', async () => {
@@ -85,11 +85,11 @@ describe('edit subscription', () => {
user: nonLeader,
groupId,
}))
- .to.eventually.be.rejected.and.to.eql({
- httpCode: 401,
- name: 'NotAuthorized',
- message: i18n.t('onlyGroupLeaderCanManageSubscription'),
- });
+ .to.eventually.be.rejected.and.to.eql({
+ httpCode: 401,
+ name: 'NotAuthorized',
+ message: i18n.t('onlyGroupLeaderCanManageSubscription'),
+ });
});
describe('success', () => {
diff --git a/test/api/v3/unit/libs/payments/stripe/handle-webhook.test.js b/test/api/v3/unit/libs/payments/stripe/handle-webhook.test.js
index 762e840c8a..f8786b2718 100644
--- a/test/api/v3/unit/libs/payments/stripe/handle-webhook.test.js
+++ b/test/api/v3/unit/libs/payments/stripe/handle-webhook.test.js
@@ -34,7 +34,7 @@ describe('Stripe - Webhooks', () => {
it('logs an error if an unsupported webhook event is passed', async () => {
const error = new Error(`Missing handler for Stripe webhook ${eventType}`);
await stripePayments.handleWebhooks({requestBody: event}, stripe);
- expect(logger.error).to.have.been.called.once;
+ expect(logger.error).to.have.been.calledOnce;
const calledWith = logger.error.getCall(0).args;
expect(calledWith[0].message).to.equal(error.message);
@@ -43,7 +43,7 @@ describe('Stripe - Webhooks', () => {
it('retrieves and validates the event from Stripe', async () => {
await stripePayments.handleWebhooks({requestBody: event}, stripe);
- expect(stripe.events.retrieve).to.have.been.called.once;
+ expect(stripe.events.retrieve).to.have.been.calledOnce;
expect(stripe.events.retrieve).to.have.been.calledWith(event.id);
});
});
@@ -70,7 +70,7 @@ describe('Stripe - Webhooks', () => {
await stripePayments.handleWebhooks({requestBody: {}}, stripe);
- expect(stripe.events.retrieve).to.have.been.called.once;
+ expect(stripe.events.retrieve).to.have.been.calledOnce;
expect(stripe.customers.del).to.not.have.been.called;
expect(payments.cancelSubscription).to.not.have.been.called;
stripe.events.retrieve.restore();
diff --git a/test/api/v3/unit/libs/taskManager.js b/test/api/v3/unit/libs/taskManager.js
index 546fcbe19f..14dc8feb49 100644
--- a/test/api/v3/unit/libs/taskManager.js
+++ b/test/api/v3/unit/libs/taskManager.js
@@ -54,7 +54,7 @@ describe('taskManager', () => {
expect(newTask.type).to.equal(testHabit.type);
expect(newTask.up).to.equal(testHabit.up);
expect(newTask.down).to.equal(testHabit.down);
- expect(newTask.createdAt).isNotEmtpy;
+ expect(newTask.createdAt).to.exist;
});
it('gets user tasks', async () => {
@@ -75,7 +75,7 @@ describe('taskManager', () => {
expect(task.type).to.equal(testHabit.type);
expect(task.up).to.equal(testHabit.up);
expect(task.down).to.equal(testHabit.down);
- expect(task.createdAt).isNotEmtpy;
+ expect(task.createdAt).to.exist;
});
it('creates group tasks', async () => {
@@ -89,7 +89,7 @@ describe('taskManager', () => {
expect(newTask.type).to.equal(testHabit.type);
expect(newTask.up).to.equal(testHabit.up);
expect(newTask.down).to.equal(testHabit.down);
- expect(newTask.createdAt).isNotEmtpy;
+ expect(newTask.createdAt).to.exist;
expect(newTask.group.id).to.equal(group._id);
});
@@ -111,7 +111,7 @@ describe('taskManager', () => {
expect(task.type).to.equal(testHabit.type);
expect(task.up).to.equal(testHabit.up);
expect(task.down).to.equal(testHabit.down);
- expect(task.createdAt).isNotEmtpy;
+ expect(task.createdAt).to.exist;
expect(task.group.id).to.equal(group._id);
});
@@ -126,7 +126,7 @@ describe('taskManager', () => {
expect(newTask.type).to.equal(testHabit.type);
expect(newTask.up).to.equal(testHabit.up);
expect(newTask.down).to.equal(testHabit.down);
- expect(newTask.createdAt).isNotEmtpy;
+ expect(newTask.createdAt).to.exist;
expect(newTask.challenge.id).to.equal(challenge._id);
});
@@ -148,7 +148,7 @@ describe('taskManager', () => {
expect(task.type).to.equal(testHabit.type);
expect(task.up).to.equal(testHabit.up);
expect(task.down).to.equal(testHabit.down);
- expect(task.createdAt).isNotEmtpy;
+ expect(task.createdAt).to.exist;
expect(task.challenge.id).to.equal(challenge._id);
});
@@ -171,7 +171,7 @@ describe('taskManager', () => {
expect(syncableTask.updatedAt).to.not.exist;
});
- it('moves tasks to a specified position', async() => {
+ it('moves tasks to a specified position', async () => {
let order = ['task-id-1', 'task-id-2'];
moveTask(order, 'task-id-2', 0);
diff --git a/test/api/v3/unit/libs/webhooks.test.js b/test/api/v3/unit/libs/webhooks.test.js
index 49c3d0e24f..467ce9bd8a 100644
--- a/test/api/v3/unit/libs/webhooks.test.js
+++ b/test/api/v3/unit/libs/webhooks.test.js
@@ -1,16 +1,17 @@
-import request from 'request';
+import got from 'got';
import {
WebhookSender,
taskScoredWebhook,
groupChatReceivedWebhook,
taskActivityWebhook,
} from '../../../../../website/server/libs/webhook';
+import { defer } from '../../../../helpers/api-unit.helper';
describe('webhooks', () => {
let webhooks;
beforeEach(() => {
- sandbox.stub(request, 'post');
+ sandbox.stub(got, 'post').returns(defer().promise);
webhooks = [{
id: 'taskActivity',
@@ -59,8 +60,9 @@ describe('webhooks', () => {
sendWebhook.send([{id: 'custom-webhook', url: 'http://custom-url.com', enabled: true, type: 'custom'}], body);
expect(WebhookSender.defaultTransformData).to.be.calledOnce;
- expect(request.post).to.be.calledOnce;
- expect(request.post).to.be.calledWithMatch({
+ expect(got.post).to.be.calledOnce;
+ expect(got.post).to.be.calledWithMatch('http://custom-url.com', {
+ json: true,
body,
});
});
@@ -81,8 +83,9 @@ describe('webhooks', () => {
sendWebhook.send([{id: 'custom-webhook', url: 'http://custom-url.com', enabled: true, type: 'custom'}], body);
expect(WebhookSender.defaultTransformData).to.not.be.called;
- expect(request.post).to.be.calledOnce;
- expect(request.post).to.be.calledWithMatch({
+ expect(got.post).to.be.calledOnce;
+ expect(got.post).to.be.calledWithMatch('http://custom-url.com', {
+ json: true,
body: {
foo: 'bar',
baz: 'biz',
@@ -117,7 +120,7 @@ describe('webhooks', () => {
sendWebhook.send([{id: 'custom-webhook', url: 'http://custom-url.com', enabled: true, type: 'custom'}], body);
expect(WebhookSender.defaultWebhookFilter).to.not.be.called;
- expect(request.post).to.not.be.called;
+ expect(got.post).to.not.be.called;
});
it('can pass in a webhook filter function that filters on data', () => {
@@ -136,10 +139,8 @@ describe('webhooks', () => {
{ id: 'other-custom-webhook', url: 'http://other-custom-url.com', enabled: true, type: 'custom', options: { foo: 'foo' }},
], body);
- expect(request.post).to.be.calledOnce;
- expect(request.post).to.be.calledWithMatch({
- url: 'http://custom-url.com',
- });
+ expect(got.post).to.be.calledOnce;
+ expect(got.post).to.be.calledWithMatch('http://custom-url.com');
});
it('ignores disabled webhooks', () => {
@@ -151,7 +152,7 @@ describe('webhooks', () => {
sendWebhook.send([{id: 'custom-webhook', url: 'http://custom-url.com', enabled: false, type: 'custom'}], body);
- expect(request.post).to.not.be.called;
+ expect(got.post).to.not.be.called;
});
it('ignores webhooks with invalid urls', () => {
@@ -163,7 +164,7 @@ describe('webhooks', () => {
sendWebhook.send([{id: 'custom-webhook', url: 'httxp://custom-url!!', enabled: true, type: 'custom'}], body);
- expect(request.post).to.not.be.called;
+ expect(got.post).to.not.be.called;
});
it('ignores webhooks of other types', () => {
@@ -178,9 +179,8 @@ describe('webhooks', () => {
{ id: 'other-webhook', url: 'http://other-url.com', enabled: true, type: 'other'},
], body);
- expect(request.post).to.be.calledOnce;
- expect(request.post).to.be.calledWithMatch({
- url: 'http://custom-url.com',
+ expect(got.post).to.be.calledOnce;
+ expect(got.post).to.be.calledWithMatch('http://custom-url.com', {
body,
json: true,
});
@@ -198,14 +198,12 @@ describe('webhooks', () => {
{ id: 'other-custom-webhook', url: 'http://other-url.com', enabled: true, type: 'custom'},
], body);
- expect(request.post).to.be.calledTwice;
- expect(request.post).to.be.calledWithMatch({
- url: 'http://custom-url.com',
+ expect(got.post).to.be.calledTwice;
+ expect(got.post).to.be.calledWithMatch('http://custom-url.com', {
body,
json: true,
});
- expect(request.post).to.be.calledWithMatch({
- url: 'http://other-url.com',
+ expect(got.post).to.be.calledWithMatch('http://other-url.com', {
body,
json: true,
});
@@ -252,8 +250,9 @@ describe('webhooks', () => {
it('sends task and stats data', () => {
taskScoredWebhook.send(webhooks, data);
- expect(request.post).to.be.calledOnce;
- expect(request.post).to.be.calledWithMatch({
+ expect(got.post).to.be.calledOnce;
+ expect(got.post).to.be.calledWithMatch(webhooks[0].url, {
+ json: true,
body: {
type: 'scored',
user: {
@@ -283,7 +282,7 @@ describe('webhooks', () => {
taskScoredWebhook.send(webhooks, data);
- expect(request.post).to.not.be.called;
+ expect(got.post).to.not.be.called;
});
});
@@ -304,8 +303,9 @@ describe('webhooks', () => {
taskActivityWebhook.send(webhooks, data);
- expect(request.post).to.be.calledOnce;
- expect(request.post).to.be.calledWithMatch({
+ expect(got.post).to.be.calledOnce;
+ expect(got.post).to.be.calledWithMatch(webhooks[0].url, {
+ json: true,
body: {
type,
task: data.task,
@@ -319,7 +319,7 @@ describe('webhooks', () => {
taskActivityWebhook.send(webhooks, data);
- expect(request.post).to.not.be.called;
+ expect(got.post).to.not.be.called;
});
});
});
@@ -340,8 +340,9 @@ describe('webhooks', () => {
groupChatReceivedWebhook.send(webhooks, data);
- expect(request.post).to.be.calledOnce;
- expect(request.post).to.be.calledWithMatch({
+ expect(got.post).to.be.calledOnce;
+ expect(got.post).to.be.calledWithMatch(webhooks[webhooks.length - 1].url, {
+ json: true,
body: {
group: {
id: 'group-id',
@@ -370,7 +371,7 @@ describe('webhooks', () => {
groupChatReceivedWebhook.send(webhooks, data);
- expect(request.post).to.not.be.called;
+ expect(got.post).to.not.be.called;
});
});
});
diff --git a/test/api/v3/unit/middlewares/cors.test.js b/test/api/v3/unit/middlewares/cors.test.js
index 8ece1e9ca2..8cf6dbc3ff 100644
--- a/test/api/v3/unit/middlewares/cors.test.js
+++ b/test/api/v3/unit/middlewares/cors.test.js
@@ -23,7 +23,7 @@ describe('cors middleware', () => {
'Access-Control-Allow-Headers': 'Content-Type,Accept,Content-Encoding,X-Requested-With,x-api-user,x-api-key,x-client',
});
expect(res.sendStatus).to.not.have.been.called;
- expect(next).to.have.been.called.once;
+ expect(next).to.have.been.calledOnce;
});
it('responds immediately if method is OPTIONS', () => {
diff --git a/test/api/v3/unit/middlewares/cronMiddleware.js b/test/api/v3/unit/middlewares/cronMiddleware.js
index fd38079691..12209b1a87 100644
--- a/test/api/v3/unit/middlewares/cronMiddleware.js
+++ b/test/api/v3/unit/middlewares/cronMiddleware.js
@@ -36,12 +36,12 @@ describe('cron middleware', () => {
});
user.save()
- .then(savedUser => {
- res.locals.user = savedUser;
- res.analytics = analyticsService;
- done();
- })
- .catch(done);
+ .then(savedUser => {
+ res.locals.user = savedUser;
+ res.analytics = analyticsService;
+ done();
+ })
+ .catch(done);
});
afterEach(() => {
diff --git a/test/api/v3/unit/middlewares/maintenanceMode.test.js b/test/api/v3/unit/middlewares/maintenanceMode.test.js
index 857fb2c941..566d572206 100644
--- a/test/api/v3/unit/middlewares/maintenanceMode.test.js
+++ b/test/api/v3/unit/middlewares/maintenanceMode.test.js
@@ -22,7 +22,7 @@ describe('maintenance mode middleware', () => {
attachMaintenanceMode(req, res, next);
- expect(next).to.have.been.called.once;
+ expect(next).to.have.been.calledOnce;
expect(res.status).to.not.have.been.called;
});
diff --git a/test/api/v3/unit/middlewares/redirects.js b/test/api/v3/unit/middlewares/redirects.js
index ed210c169a..184d60b706 100644
--- a/test/api/v3/unit/middlewares/redirects.js
+++ b/test/api/v3/unit/middlewares/redirects.js
@@ -43,7 +43,7 @@ describe('redirects middleware', () => {
attachRedirects.forceSSL(req, res, next);
- expect(res.redirect).to.be.notCalled;
+ expect(res.redirect).to.have.not.been.called;
});
it('does not redirect outside of production environments', () => {
@@ -57,7 +57,7 @@ describe('redirects middleware', () => {
attachRedirects.forceSSL(req, res, next);
- expect(res.redirect).to.be.notCalled;
+ expect(res.redirect).to.have.not.been.called;
});
it('does not redirect if base URL is not https', () => {
@@ -71,7 +71,7 @@ describe('redirects middleware', () => {
attachRedirects.forceSSL(req, res, next);
- expect(res.redirect).to.be.notCalled;
+ expect(res.redirect).to.have.not.been.called;
});
});
@@ -108,7 +108,7 @@ describe('redirects middleware', () => {
attachRedirects.forceHabitica(req, res, next);
- expect(res.redirect).to.be.notCalled;
+ expect(res.redirect).to.have.not.been.called;
});
it('does not redirect if env is set to ignore redirection', () => {
@@ -125,7 +125,7 @@ describe('redirects middleware', () => {
attachRedirects.forceHabitica(req, res, next);
- expect(res.redirect).to.be.notCalled;
+ expect(res.redirect).to.have.not.been.called;
});
it('does not redirect if request hostname matches base URL host', () => {
@@ -142,7 +142,7 @@ describe('redirects middleware', () => {
attachRedirects.forceHabitica(req, res, next);
- expect(res.redirect).to.be.notCalled;
+ expect(res.redirect).to.have.not.been.called;
});
it('does not redirect if request is an API URL', () => {
@@ -159,7 +159,7 @@ describe('redirects middleware', () => {
attachRedirects.forceHabitica(req, res, next);
- expect(res.redirect).to.be.notCalled;
+ expect(res.redirect).to.have.not.been.called;
});
it('does not redirect if request method is not GET', () => {
@@ -176,7 +176,7 @@ describe('redirects middleware', () => {
attachRedirects.forceHabitica(req, res, next);
- expect(res.redirect).to.be.notCalled;
+ expect(res.redirect).to.have.not.been.called;
});
});
});
diff --git a/test/api/v3/unit/models/challenge.test.js b/test/api/v3/unit/models/challenge.test.js
index 18e7de7bcf..a27d8b65a7 100644
--- a/test/api/v3/unit/models/challenge.test.js
+++ b/test/api/v3/unit/models/challenge.test.js
@@ -65,7 +65,7 @@ describe('Challenge Model', () => {
each(tasksToTest, (taskValue, taskType) => {
context(`${taskType}`, () => {
- beforeEach(async() => {
+ beforeEach(async () => {
task = new Tasks[`${taskType}`](Tasks.Task.sanitize(taskValue));
task.challenge.id = challenge._id;
await task.save();
@@ -194,7 +194,7 @@ describe('Challenge Model', () => {
});
expect(syncedTask).to.exist;
- expect(syncedTask.challenge._id).to.be.empty;
+ expect(syncedTask.challenge._id).to.be.undefined;
});
});
});
diff --git a/test/api/v3/unit/models/group_tasks.test.js b/test/api/v3/unit/models/group_tasks.test.js
index 331b91ac1b..76e7666c96 100644
--- a/test/api/v3/unit/models/group_tasks.test.js
+++ b/test/api/v3/unit/models/group_tasks.test.js
@@ -64,7 +64,7 @@ describe('Group Task Methods', () => {
each(tasksToTest, (taskValue, taskType) => {
context(`${taskType}`, () => {
- beforeEach(async() => {
+ beforeEach(async () => {
task = new Tasks[`${taskType}`](Tasks.Task.sanitize(taskValue));
task.group.id = guild._id;
await task.save();
@@ -127,7 +127,7 @@ describe('Group Task Methods', () => {
expect(syncedTask.checklist[0].text).to.equal(task.checklist[0].text);
});
- describe('syncs updated info', async() => {
+ describe('syncs updated info', async () => {
let newMember;
beforeEach(async () => {
@@ -274,7 +274,7 @@ describe('Group Task Methods', () => {
expect(task.group.assignedUsers).to.not.contain(leader._id);
expect(updatedSyncedTask).to.exist;
- expect(updatedSyncedTask.group._id).to.be.empty;
+ expect(updatedSyncedTask.group._id).to.be.undefined;
});
});
});
diff --git a/test/api/v3/unit/models/task.test.js b/test/api/v3/unit/models/task.test.js
index ddab40b26f..fc3ab9a513 100644
--- a/test/api/v3/unit/models/task.test.js
+++ b/test/api/v3/unit/models/task.test.js
@@ -54,7 +54,7 @@ describe('Task Model', () => {
each(tasksToTest, (taskValue, taskType) => {
context(`${taskType}`, () => {
- beforeEach(async() => {
+ beforeEach(async () => {
task = new Tasks[`${taskType}`](Tasks.Task.sanitize(taskValue));
task.challenge.id = challenge._id;
task.history = generateHistory(396);
diff --git a/test/api/v3/unit/models/user.test.js b/test/api/v3/unit/models/user.test.js
index 7305401d5a..63d99193b6 100644
--- a/test/api/v3/unit/models/user.test.js
+++ b/test/api/v3/unit/models/user.test.js
@@ -120,7 +120,7 @@ describe('User Model', () => {
expect(User.pushNotification({_id: user._id}, 'CRON', null, 'INVALID_SEEN')).to.eventually.be.rejected;
});
- it('adds notifications without data for all given users via static method', async() => {
+ it('adds notifications without data for all given users via static method', async () => {
let user = new User();
let otherUser = new User();
await Bluebird.all([user.save(), otherUser.save()]);
diff --git a/test/client/e2e/specs/test.js b/test/client/e2e/specs/test.js
index e3e19d4d96..da58561b29 100644
--- a/test/client/e2e/specs/test.js
+++ b/test/client/e2e/specs/test.js
@@ -9,7 +9,7 @@ module.exports = {
const devServer = browser.globals.devServerURL;
browser
- .url(devServer)
+ .url(devServer)
.waitForElementVisible('#app', 5000)
.assert.elementPresent('.logo')
.assert.containsText('h1', 'Hello Vue!')
diff --git a/test/client/unit/karma.conf.js b/test/client/unit/karma.conf.js
index 6007b6b450..7bc7b3800e 100644
--- a/test/client/unit/karma.conf.js
+++ b/test/client/unit/karma.conf.js
@@ -6,7 +6,7 @@
// Necessary for babel to respect the env version of .babelrc which is necessary
// Because inject-loader does not work with ["es2015", { modules: false }] that we use
// in order to let webpack2 handle the imports
-
+process.env.CHROME_BIN = require('puppeteer').executablePath(); // eslint-disable-line no-process-env
process.env.BABEL_ENV = process.env.NODE_ENV; // eslint-disable-line no-process-env
const webpackConfig = require('../../../webpack/webpack.test.conf');
@@ -16,7 +16,7 @@ module.exports = function (config) {
// 1. install corresponding karma launcher
// http://karma-runner.github.io/0.13/config/browsers.html
// 2. add it to the `browsers` array below.
- browsers: ['PhantomJS'],
+ browsers: ['ChromeHeadless'],
frameworks: ['mocha', 'sinon-stub-promise', 'sinon-chai', 'chai-as-promised', 'chai'],
reporters: ['spec', 'coverage'],
files: ['./index.js'],
diff --git a/test/client/unit/specs/components/groups/membersModal.js b/test/client/unit/specs/components/groups/membersModal.js
index 79d57e70a3..43617bdc06 100644
--- a/test/client/unit/specs/components/groups/membersModal.js
+++ b/test/client/unit/specs/components/groups/membersModal.js
@@ -1,7 +1,7 @@
import Vue from 'vue';
import MembersModalComponent from 'client/components/groups/membersModal.vue';
-
-describe('Members Modal Component', () => {
+/* eslint-disable no-skipped-tests */
+describe.skip('Members Modal Component', () => {
describe('Party Sort', () => {
let CTor;
let vm;
@@ -29,3 +29,4 @@ describe('Members Modal Component', () => {
});
});
});
+/* eslint-enable no-skipped-tests */
\ No newline at end of file
diff --git a/test/client/unit/specs/libs/i18n.js b/test/client/unit/specs/libs/i18n.js
index 0137fefe0d..8a23a89b63 100644
--- a/test/client/unit/specs/libs/i18n.js
+++ b/test/client/unit/specs/libs/i18n.js
@@ -14,7 +14,7 @@ describe('i18n plugin', () => {
});
it('adds $t to Vue.prototype', () => {
- expect(Vue.prototype.$t).to.be.a.function;
+ expect(Vue.prototype.$t).to.exist;
});
it('$t is a proxy for common/i18n.t', () => {
diff --git a/test/client/unit/specs/mixins/groupsUtilities.js b/test/client/unit/specs/mixins/groupsUtilities.js
index 2f9f17d012..cdfe6e5ea4 100644
--- a/test/client/unit/specs/mixins/groupsUtilities.js
+++ b/test/client/unit/specs/mixins/groupsUtilities.js
@@ -23,7 +23,7 @@ describe('Groups Utilities Mixin', () => {
describe('isMemberOfGroup', () => {
it('registers as a method', () => {
- expect(instance.isMemberOfGroup).to.be.a.function;
+ expect(instance.isMemberOfGroup).to.exist;
});
it('returns true when the group is the Tavern', () => {
diff --git a/test/client/unit/specs/store/actions/shops.js b/test/client/unit/specs/store/actions/shops.js
index 2d49f880a9..516bdaacdc 100644
--- a/test/client/unit/specs/store/actions/shops.js
+++ b/test/client/unit/specs/store/actions/shops.js
@@ -49,7 +49,7 @@ describe('shops actions', () => {
quantity: 1,
});
- expect(store.state.user.data.item.equipped.armor_rogue_1).to.equal(true);
+ expect(store.state.user.data.items.gear.equipped.armor).to.equal('armor_rogue_1');
});
});
});
diff --git a/test/common/libs/taskClasses.test.js b/test/common/libs/taskClasses.test.js
deleted file mode 100644
index dbfa6881a6..0000000000
--- a/test/common/libs/taskClasses.test.js
+++ /dev/null
@@ -1,82 +0,0 @@
-import taskClasses from '../../../website/common/script/libs/taskClasses';
-
-describe('taskClasses', () => {
- let task = {};
- let filters = {};
- let result;
-
- describe('a todo task', () => {
- beforeEach(() => {
- task = { type: 'todo', _editing: false, tags: [] };
- });
-
- it('is hidden', () => {
- filters = { a: true };
- result = taskClasses(task, filters, 0, Number(new Date()), false, true);
- expect(result).to.eql('hidden');
- });
- it('is beingEdited', () => {
- task._editing = true;
- result = taskClasses(task, filters);
- expect(result.split(' ').indexOf('beingEdited')).to.not.eql(-1);
- });
- it('is completed', () => {
- task.completed = true;
- result = taskClasses(task, filters);
- expect(result.split(' ').indexOf('completed')).to.not.eql(-1);
- task.completed = false;
- result = taskClasses(task, filters);
- expect(result.split(' ').indexOf('completed')).to.eql(-1);
- expect(result.split(' ').indexOf('uncompleted')).to.not.eql(-1);
- });
- });
-
- describe('a daily task', () => {
- it('is completed', () => {
- task = { type: 'daily' };
- result = taskClasses(task);
- expect(result.split(' ').indexOf('completed')).to.not.eql(-1);
- });
-
- it('is uncompleted'); // this requires stubbing the internal dependency shouldDo in taskClasses
- });
-
- describe('a habit', () => {
- it('that is wide', () => {
- task = { type: 'habit', up: true, down: true };
- result = taskClasses(task);
- expect(result.split(' ').indexOf('habit-wide')).to.not.eql(-1);
- });
- it('that is narrow', () => {
- task = { type: 'habit' };
- result = taskClasses(task);
- expect(result.split(' ').indexOf('habit-narrow')).to.not.eql(-1);
- });
- });
-
- describe('varies based on priority', () => {
- it('trivial', () => {
- task.priority = 0.1;
- result = taskClasses(task);
- expect(result.split(' ').indexOf('difficulty-trivial')).to.not.eql(-1);
- });
- it('hard', () => {
- task.priority = 2;
- result = taskClasses(task);
- expect(result.split(' ').indexOf('difficulty-hard')).to.not.eql(-1);
- });
- });
-
- describe('varies based on value', () => {
- it('color-worst', () => {
- task.value = -30;
- result = taskClasses(task);
- expect(result.split(' ').indexOf('color-worst')).to.not.eql(-1);
- });
- it('color-neutral', () => {
- task.value = 0;
- result = taskClasses(task);
- expect(result.split(' ').indexOf('color-neutral')).to.not.eql(-1);
- });
- });
-});
diff --git a/test/common/ops/releaseBoth.js b/test/common/ops/releaseBoth.js
index 880f62a316..72411e419b 100644
--- a/test/common/ops/releaseBoth.js
+++ b/test/common/ops/releaseBoth.js
@@ -72,7 +72,7 @@ describe('shared.ops.releaseBoth', () => {
let message = releaseBoth(user)[1];
expect(message).to.equal(i18n.t('mountsAndPetsReleased'));
- expect(user.items.pets[animal]).to.be.empty;
+ expect(user.items.pets[animal]).to.equal(0);
expect(user.items.mounts[animal]).to.equal(null);
});
diff --git a/test/helpers/api-unit.helper.js b/test/helpers/api-unit.helper.js
index ebfea46dad..d32423dfb9 100644
--- a/test/helpers/api-unit.helper.js
+++ b/test/helpers/api-unit.helper.js
@@ -108,3 +108,19 @@ export function generateDaily (user) {
return task;
}
+
+export function defer () {
+ let resolve;
+ let reject;
+
+ let promise = new Promise((resolveParam, rejectParam) => {
+ resolve = resolveParam;
+ reject = rejectParam;
+ });
+
+ return {
+ resolve,
+ reject,
+ promise,
+ };
+}
diff --git a/test/mocha.opts b/test/mocha.opts
index f7bf61a268..63c3988a56 100644
--- a/test/mocha.opts
+++ b/test/mocha.opts
@@ -2,7 +2,6 @@
--reporter spec
--timeout 8000
--check-leaks
---growl
--globals io
-r babel-polyfill
--require babel-register
diff --git a/webpack/webpack.base.conf.js b/webpack/webpack.base.conf.js
index 773d3bbd80..5da0df5a57 100644
--- a/webpack/webpack.base.conf.js
+++ b/webpack/webpack.base.conf.js
@@ -98,7 +98,14 @@ const baseConfig = {
test: /\.svg$/,
use: [
{ loader: 'svg-inline-loader' },
- { loader: 'svgo-loader' },
+ {
+ loader: 'svgo-loader',
+ options: {
+ plugins: [
+ {removeViewBox: false},
+ ],
+ },
+ },
],
exclude: [path.resolve(projectRoot, 'website/client/assets/svg/for-css')],
},
@@ -112,7 +119,14 @@ const baseConfig = {
name: utils.assetsPath('svg/[name].[hash:7].[ext]'),
},
},
- { loader: 'svgo-loader' },
+ {
+ loader: 'svgo-loader',
+ options: {
+ plugins: [
+ {removeViewBox: false},
+ ],
+ },
+ },
],
include: [path.resolve(projectRoot, 'website/client/assets/svg/for-css')],
},
diff --git a/website/client/app.vue b/website/client/app.vue
index 10778ef381..c1c877dfa0 100644
--- a/website/client/app.vue
+++ b/website/client/app.vue
@@ -229,9 +229,12 @@ export default {
return Promise.resolve(error);
}
+ const errorData = error.response.data;
+ const errorMessage = errorData.message || errorData;
+
this.$store.dispatch('snackbars:add', {
title: 'Habitica',
- text: error.response.data,
+ text: errorMessage,
type: 'error',
timeout: true,
});
@@ -436,6 +439,7 @@ export default {
+
diff --git a/website/client/assets/css/sprites/spritesmith-largeSprites-0.css b/website/client/assets/css/sprites/spritesmith-largeSprites-0.css
index 4f617b4250..79fa55c7cc 100644
--- a/website/client/assets/css/sprites/spritesmith-largeSprites-0.css
+++ b/website/client/assets/css/sprites/spritesmith-largeSprites-0.css
@@ -1,12 +1,12 @@
.promo_armoire_backgrounds_201802 {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -142px -664px;
+ background-position: 0px -524px;
width: 141px;
height: 441px;
}
.promo_cupid_potions {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -425px -664px;
+ background-position: -142px -524px;
width: 138px;
height: 441px;
}
@@ -16,65 +16,35 @@
width: 730px;
height: 170px;
}
-.promo_habit_birthday_2018 {
- background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -441px -171px;
- width: 432px;
- height: 144px;
-}
-.promo_ios {
+.promo_mystery_201802 {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
background-position: 0px -327px;
- width: 325px;
- height: 336px;
-}
-.promo_mystery_201801 {
- background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -654px -327px;
- width: 376px;
+ width: 372px;
height: 196px;
}
-.promo_starry_potions {
+.promo_seasonalshop_broken {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: 0px -664px;
- width: 141px;
- height: 441px;
+ background-position: -751px -171px;
+ width: 198px;
+ height: 147px;
}
.promo_take_this {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -874px -171px;
+ background-position: -950px -171px;
width: 114px;
height: 87px;
}
.promo_valentines {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -564px -860px;
+ background-position: -441px -171px;
width: 309px;
height: 147px;
}
-.promo_winter_customizations {
+.scene_coding {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -284px -664px;
- width: 140px;
- height: 441px;
-}
-.scene_lady_glaciate {
- background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -874px -860px;
- width: 282px;
- height: 147px;
-}
-.scene_setting_up_todos {
- background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -564px -664px;
- width: 240px;
- height: 195px;
-}
-.scene_task_list {
- background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -805px -664px;
- width: 240px;
- height: 195px;
+ background-position: -373px -327px;
+ width: 150px;
+ height: 150px;
}
.scene_tavern {
background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
@@ -82,9 +52,3 @@
width: 440px;
height: 326px;
}
-.scene_yesterdailies_repeatables {
- background-image: url('~assets/images/sprites/spritesmith-largeSprites-0.png');
- background-position: -326px -327px;
- width: 327px;
- height: 276px;
-}
diff --git a/website/client/assets/css/sprites/spritesmith-main-10.css b/website/client/assets/css/sprites/spritesmith-main-10.css
index 0db0545651..b1b58b56c0 100644
--- a/website/client/assets/css/sprites/spritesmith-main-10.css
+++ b/website/client/assets/css/sprites/spritesmith-main-10.css
@@ -4,45 +4,57 @@
width: 221px;
height: 39px;
}
+.quest_dilatoryDistress1 {
+ background-image: url('~assets/images/sprites/spritesmith-main-10.png');
+ background-position: -1102px -1112px;
+ width: 210px;
+ height: 210px;
+}
+.quest_dilatoryDistress2 {
+ background-image: url('~assets/images/sprites/spritesmith-main-10.png');
+ background-position: -1757px -1047px;
+ width: 150px;
+ height: 150px;
+}
.quest_dilatoryDistress3 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: 0px -452px;
+ background-position: -1100px -660px;
width: 219px;
height: 219px;
}
.quest_dustbunnies {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -440px -1112px;
+ background-position: -440px 0px;
width: 219px;
height: 219px;
}
.quest_egg {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -362px;
+ background-position: -1757px -537px;
width: 165px;
height: 207px;
}
.quest_evilsanta {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -1023px;
+ background-position: -1757px -1349px;
width: 118px;
height: 131px;
}
.quest_evilsanta2 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -880px -672px;
+ background-position: -440px -232px;
width: 219px;
height: 219px;
}
.quest_falcon {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -440px 0px;
+ background-position: -660px 0px;
width: 219px;
height: 219px;
}
.quest_ferret {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: 0px -232px;
+ background-position: -660px -220px;
width: 219px;
height: 219px;
}
@@ -54,19 +66,19 @@
}
.quest_ghost_stag {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -440px -232px;
+ background-position: -220px -452px;
width: 219px;
height: 219px;
}
.quest_goldenknight1 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -660px 0px;
+ background-position: -440px -452px;
width: 219px;
height: 219px;
}
.quest_goldenknight2 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: 0px -1510px;
+ background-position: -251px -1510px;
width: 250px;
height: 150px;
}
@@ -84,121 +96,121 @@
}
.quest_guineapig {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -440px -452px;
+ background-position: -880px -440px;
width: 219px;
height: 219px;
}
.quest_harpy {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -660px -452px;
+ background-position: 0px -672px;
width: 219px;
height: 219px;
}
.quest_hedgehog {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1102px -1112px;
+ background-position: -1313px -1112px;
width: 219px;
height: 186px;
}
.quest_hippo {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -880px -220px;
+ background-position: -440px -672px;
width: 219px;
height: 219px;
}
.quest_horse {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -880px -440px;
+ background-position: -660px -672px;
width: 219px;
height: 219px;
}
.quest_kraken {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1308px -1332px;
+ background-position: -874px -1332px;
width: 216px;
height: 177px;
}
.quest_lostMasterclasser1 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -220px -672px;
+ background-position: -1100px 0px;
width: 219px;
height: 219px;
}
.quest_lostMasterclasser2 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -440px -672px;
+ background-position: -1100px -220px;
width: 219px;
height: 219px;
}
.quest_lostMasterclasser3 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -660px -672px;
+ background-position: -1100px -440px;
width: 219px;
height: 219px;
}
.quest_mayhemMistiflying1 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -721px;
+ background-position: -1757px -745px;
width: 150px;
height: 150px;
}
.quest_mayhemMistiflying2 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -220px 0px;
+ background-position: 0px -892px;
width: 219px;
height: 219px;
}
.quest_mayhemMistiflying3 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1100px 0px;
+ background-position: -220px -892px;
width: 219px;
height: 219px;
}
.quest_monkey {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1100px -220px;
+ background-position: -440px -892px;
width: 219px;
height: 219px;
}
.quest_moon1 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1540px -434px;
+ background-position: -1540px -651px;
width: 216px;
height: 216px;
}
.quest_moon2 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1100px -440px;
+ background-position: -880px -892px;
width: 219px;
height: 219px;
}
.quest_moon3 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1100px -660px;
+ background-position: -1100px -892px;
width: 219px;
height: 219px;
}
.quest_moonstone1 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: 0px -892px;
+ background-position: -1320px 0px;
width: 219px;
height: 219px;
}
.quest_moonstone2 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -220px -892px;
+ background-position: -1320px -220px;
width: 219px;
height: 219px;
}
.quest_moonstone3 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -440px -892px;
+ background-position: -1320px -440px;
width: 219px;
height: 219px;
}
.quest_nudibranch {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1540px -1085px;
+ background-position: -1540px -434px;
width: 216px;
height: 216px;
}
@@ -210,7 +222,7 @@
}
.quest_owl {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1100px -892px;
+ background-position: 0px -1112px;
width: 219px;
height: 219px;
}
@@ -222,55 +234,55 @@
}
.quest_penguin {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -178px;
+ background-position: -1757px -353px;
width: 190px;
height: 183px;
}
.quest_pterodactyl {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1320px 0px;
+ background-position: -220px -1112px;
width: 219px;
height: 219px;
}
.quest_rat {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1320px -220px;
+ background-position: -1320px -880px;
width: 219px;
height: 219px;
}
.quest_rock {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1540px -868px;
+ background-position: -1540px -1085px;
width: 216px;
height: 216px;
}
.quest_rooster {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1525px -1332px;
+ background-position: -1757px 0px;
width: 213px;
height: 174px;
}
.quest_sabretooth {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1320px -660px;
+ background-position: -660px -892px;
width: 219px;
height: 219px;
}
.quest_sheep {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1320px -880px;
+ background-position: 0px -452px;
width: 219px;
height: 219px;
}
.quest_slime {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: 0px -1112px;
+ background-position: 0px -232px;
width: 219px;
height: 219px;
}
.quest_sloth {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -220px -1112px;
+ background-position: -880px 0px;
width: 219px;
height: 219px;
}
@@ -282,37 +294,37 @@
}
.quest_snake {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1091px -1332px;
+ background-position: -1308px -1332px;
width: 216px;
height: 177px;
}
.quest_spider {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -251px -1510px;
+ background-position: 0px -1510px;
width: 250px;
height: 150px;
}
.quest_stoikalmCalamity1 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -570px;
+ background-position: -1757px -1198px;
width: 150px;
height: 150px;
}
.quest_stoikalmCalamity2 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -220px -232px;
+ background-position: -1320px -660px;
width: 219px;
height: 219px;
}
.quest_stoikalmCalamity3 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1320px -440px;
+ background-position: -440px -1112px;
width: 219px;
height: 219px;
}
.quest_taskwoodsTerror1 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -872px;
+ background-position: -1757px -896px;
width: 150px;
height: 150px;
}
@@ -324,43 +336,43 @@
}
.quest_taskwoodsTerror3 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -880px -892px;
+ background-position: -220px 0px;
width: 219px;
height: 219px;
}
.quest_treeling {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -874px -1332px;
+ background-position: -440px -1332px;
width: 216px;
height: 177px;
}
.quest_trex {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px 0px;
+ background-position: -1757px -175px;
width: 204px;
height: 177px;
}
.quest_trex_undead {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1322px -1112px;
+ background-position: -1525px -1332px;
width: 216px;
height: 177px;
}
.quest_triceratops {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: 0px -672px;
+ background-position: -880px -672px;
width: 219px;
height: 219px;
}
.quest_turtle {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -880px 0px;
+ background-position: -220px -672px;
width: 219px;
height: 219px;
}
.quest_unicorn {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -220px -452px;
+ background-position: -880px -220px;
width: 219px;
height: 219px;
}
@@ -372,205 +384,115 @@
}
.quest_vice2 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -660px -220px;
+ background-position: -660px -452px;
width: 219px;
height: 219px;
}
.quest_vice3 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -440px -1332px;
+ background-position: -1091px -1332px;
width: 216px;
height: 177px;
}
.quest_whale {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -660px -892px;
+ background-position: -220px -232px;
width: 219px;
height: 219px;
}
.quest_yarn {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1540px -651px;
+ background-position: -1540px -868px;
width: 216px;
height: 216px;
}
.quest_atom1_soapBars {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -1500px;
+ background-position: -1908px -1099px;
width: 48px;
height: 51px;
}
.quest_dilatoryDistress1_blueFins {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1908px -622px;
+ background-position: -1908px -806px;
width: 51px;
height: 48px;
}
.quest_dilatoryDistress1_fireCoral {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1895px -1155px;
+ background-position: -1908px -896px;
width: 48px;
height: 51px;
}
.quest_egg_plainEgg {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1875px -1431px;
+ background-position: -1908px -948px;
width: 48px;
height: 51px;
}
.quest_evilsanta2_branches {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1826px -1431px;
+ background-position: -1908px -1047px;
width: 48px;
height: 51px;
}
.quest_evilsanta2_tracks {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1876px -1092px;
+ background-position: -1908px -745px;
width: 54px;
height: 60px;
}
.quest_goldenknight1_testimony {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1895px -1293px;
+ background-position: -1908px -1198px;
width: 48px;
height: 51px;
}
.quest_lostMasterclasser1_ancientTome {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1923px -405px;
+ background-position: -1923px -666px;
width: 33px;
height: 42px;
}
.quest_lostMasterclasser1_forbiddenTome {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1923px -448px;
+ background-position: -1923px -623px;
width: 33px;
height: 42px;
}
.quest_lostMasterclasser1_hiddenTome {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1923px -362px;
+ background-position: -1923px -580px;
width: 33px;
height: 42px;
}
.quest_mayhemMistiflying2_mistifly1 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1895px -1362px;
+ background-position: -1876px -1401px;
width: 48px;
height: 51px;
}
.quest_mayhemMistiflying2_mistifly2 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1908px -570px;
+ background-position: -1876px -1349px;
width: 48px;
height: 51px;
}
.quest_mayhemMistiflying2_mistifly3 {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1895px -1224px;
+ background-position: -1908px -1250px;
width: 48px;
height: 51px;
}
.quest_moon1_shard {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1908px -671px;
+ background-position: -1923px -537px;
width: 42px;
height: 42px;
}
.quest_moonstone1_moonstone {
background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1923px -491px;
+ background-position: -1923px -709px;
width: 30px;
height: 30px;
}
-.quest_stoikalmCalamity2_icicleCoin {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1908px -721px;
- width: 48px;
- height: 51px;
-}
-.quest_taskwoodsTerror2_brownie {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1908px -773px;
- width: 48px;
- height: 51px;
-}
-.quest_taskwoodsTerror2_dryad {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1908px -872px;
- width: 48px;
- height: 51px;
-}
-.quest_taskwoodsTerror2_pixie {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1908px -924px;
- width: 48px;
- height: 51px;
-}
-.quest_vice2_lightCrystal {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1908px -825px;
- width: 40px;
- height: 40px;
-}
-.inventory_quest_scroll_armadillo {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1826px -1362px;
- width: 68px;
- height: 68px;
-}
-.inventory_quest_scroll_atom1 {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1826px -1293px;
- width: 68px;
- height: 68px;
-}
-.inventory_quest_scroll_atom1_locked {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -1362px;
- width: 68px;
- height: 68px;
-}
-.inventory_quest_scroll_atom2 {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1826px -1224px;
- width: 68px;
- height: 68px;
-}
-.inventory_quest_scroll_atom2_locked {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -1293px;
- width: 68px;
- height: 68px;
-}
-.inventory_quest_scroll_atom3 {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1826px -1155px;
- width: 68px;
- height: 68px;
-}
-.inventory_quest_scroll_atom3_locked {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -1224px;
- width: 68px;
- height: 68px;
-}
-.inventory_quest_scroll_axolotl {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -1155px;
- width: 68px;
- height: 68px;
-}
-.inventory_quest_scroll_badger {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1876px -1023px;
- width: 68px;
- height: 68px;
-}
-.inventory_quest_scroll_basilist {
- background-image: url('~assets/images/sprites/spritesmith-main-10.png');
- background-position: -1757px -1431px;
- width: 68px;
- height: 68px;
-}
diff --git a/website/client/assets/css/sprites/spritesmith-main-11.css b/website/client/assets/css/sprites/spritesmith-main-11.css
index f685245aae..fca783e8a2 100644
--- a/website/client/assets/css/sprites/spritesmith-main-11.css
+++ b/website/client/assets/css/sprites/spritesmith-main-11.css
@@ -1,1764 +1,1854 @@
+.quest_stoikalmCalamity2_icicleCoin {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1684px -121px;
+ width: 48px;
+ height: 51px;
+}
+.quest_taskwoodsTerror2_brownie {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1684px -69px;
+ width: 48px;
+ height: 51px;
+}
+.quest_taskwoodsTerror2_dryad {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1684px -173px;
+ width: 48px;
+ height: 51px;
+}
+.quest_taskwoodsTerror2_pixie {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1684px -225px;
+ width: 48px;
+ height: 51px;
+}
+.quest_vice2_lightCrystal {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1684px -862px;
+ width: 40px;
+ height: 40px;
+}
+.inventory_quest_scroll_armadillo {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1035px -1571px;
+ width: 68px;
+ height: 68px;
+}
+.inventory_quest_scroll_atom1 {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1173px -1571px;
+ width: 68px;
+ height: 68px;
+}
+.inventory_quest_scroll_atom1_locked {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1104px -1571px;
+ width: 68px;
+ height: 68px;
+}
+.inventory_quest_scroll_atom2 {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1311px -1571px;
+ width: 68px;
+ height: 68px;
+}
+.inventory_quest_scroll_atom2_locked {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1242px -1571px;
+ width: 68px;
+ height: 68px;
+}
+.inventory_quest_scroll_atom3 {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1449px -1571px;
+ width: 68px;
+ height: 68px;
+}
+.inventory_quest_scroll_atom3_locked {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1380px -1571px;
+ width: 68px;
+ height: 68px;
+}
+.inventory_quest_scroll_axolotl {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1518px -1571px;
+ width: 68px;
+ height: 68px;
+}
+.inventory_quest_scroll_badger {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1587px -1571px;
+ width: 68px;
+ height: 68px;
+}
+.inventory_quest_scroll_basilist {
+ background-image: url('~assets/images/sprites/spritesmith-main-11.png');
+ background-position: -1684px 0px;
+ width: 68px;
+ height: 68px;
+}
.inventory_quest_scroll_beetle {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -690px;
+ background-position: 0px -1226px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_bunny {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -276px;
+ background-position: -69px -1226px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_butterfly {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -759px;
+ background-position: -138px -1226px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_cheetah {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -828px;
+ background-position: -207px -1226px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_cow {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -897px;
+ background-position: -276px -1226px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_dilatoryDistress1 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -1035px;
+ background-position: -1408px -414px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_dilatoryDistress2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -1173px;
+ background-position: -1477px -897px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_dilatoryDistress2_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -1104px;
+ background-position: -1477px -828px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_dilatoryDistress3 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -1311px;
+ background-position: -1477px -1035px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_dilatoryDistress3_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -1242px;
+ background-position: -1477px -966px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_dilatory_derby {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -966px;
+ background-position: -345px -1226px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_dustbunnies {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -1380px;
+ background-position: -1477px -1104px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_egg {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -1449px;
+ background-position: -1477px -1173px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_evilsanta {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -1518px;
+ background-position: -1477px -1242px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_evilsanta2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -1608px;
+ background-position: -1477px -1311px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_falcon {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -69px -1608px;
+ background-position: 0px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_ferret {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -138px -1608px;
+ background-position: -69px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_frog {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -207px -1608px;
+ background-position: -138px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_ghost_stag {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1380px -1401px;
+ background-position: -207px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_goldenknight1 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -69px;
+ background-position: -345px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_goldenknight1_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px 0px;
+ background-position: -276px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_goldenknight2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -207px;
+ background-position: -483px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_goldenknight2_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -138px;
+ background-position: -414px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_goldenknight3 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -345px;
+ background-position: -621px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_goldenknight3_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -276px;
+ background-position: -552px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_gryphon {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -414px;
+ background-position: -690px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_guineapig {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -483px;
+ background-position: -759px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_harpy {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -552px;
+ background-position: -828px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_hedgehog {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -621px;
+ background-position: -897px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_hippo {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -1166px;
+ background-position: -1684px -277px;
width: 48px;
height: 51px;
}
.inventory_quest_scroll_horse {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -759px;
+ background-position: -1035px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_kraken {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -828px;
+ background-position: -1104px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_lostMasterclasser1 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -966px;
+ background-position: -1242px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_lostMasterclasser1_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -897px;
+ background-position: -1173px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_lostMasterclasser2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -1104px;
+ background-position: -1380px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_lostMasterclasser2_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -1035px;
+ background-position: -1311px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_lostMasterclasser3 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -1242px;
+ background-position: -1546px 0px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_lostMasterclasser3_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -1173px;
+ background-position: -1449px -1433px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_lostMasterclasser4 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -1380px;
+ background-position: -1546px -138px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_lostMasterclasser4_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1477px -1311px;
+ background-position: -1546px -69px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_mayhemMistiflying1 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -1470px;
+ background-position: -1546px -207px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_mayhemMistiflying2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -138px -1470px;
+ background-position: -1546px -345px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_mayhemMistiflying2_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -69px -1470px;
+ background-position: -1546px -276px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_mayhemMistiflying3 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -276px -1470px;
+ background-position: -1546px -483px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_mayhemMistiflying3_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -207px -1470px;
+ background-position: -1546px -414px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_monkey {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -345px -1470px;
+ background-position: -1546px -552px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moon1 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -483px -1470px;
+ background-position: -1546px -690px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moon1_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -414px -1470px;
+ background-position: -1546px -621px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moon2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -621px -1470px;
+ background-position: -1546px -828px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moon2_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -552px -1470px;
+ background-position: -1546px -759px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moon3 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -759px -1470px;
+ background-position: -1546px -966px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moon3_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -690px -1470px;
+ background-position: -1546px -897px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moonstone1 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -897px -1470px;
+ background-position: -1546px -1104px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moonstone1_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -828px -1470px;
+ background-position: -1546px -1035px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moonstone2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1035px -1470px;
+ background-position: -1546px -1242px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moonstone2_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -966px -1470px;
+ background-position: -1546px -1173px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moonstone3 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1173px -1470px;
+ background-position: -1546px -1380px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_moonstone3_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1104px -1470px;
+ background-position: -1546px -1311px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_nudibranch {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1242px -1470px;
+ background-position: 0px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_octopus {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1311px -1470px;
+ background-position: -69px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_owl {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1380px -1470px;
+ background-position: -138px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_peacock {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1449px -1470px;
+ background-position: -207px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_penguin {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px 0px;
+ background-position: -276px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_pterodactyl {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -69px;
+ background-position: -345px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_rat {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -138px;
+ background-position: -414px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_rock {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -207px;
+ background-position: -483px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_rooster {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -276px;
+ background-position: -552px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_sabretooth {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -345px;
+ background-position: -621px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_sheep {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -414px;
+ background-position: -690px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_slime {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -483px;
+ background-position: -759px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_sloth {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -552px;
+ background-position: -828px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_snail {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -621px;
+ background-position: -897px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_snake {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -690px;
+ background-position: -966px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_spider {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -759px;
+ background-position: -1035px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_stoikalmCalamity1 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -828px;
+ background-position: -1104px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_stoikalmCalamity2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -966px;
+ background-position: -1242px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_stoikalmCalamity2_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -897px;
+ background-position: -1173px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_stoikalmCalamity3 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -1104px;
+ background-position: -1380px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_stoikalmCalamity3_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -1035px;
+ background-position: -1311px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_taskwoodsTerror1 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -1173px;
+ background-position: -1449px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_taskwoodsTerror2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -1311px;
+ background-position: -1615px 0px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_taskwoodsTerror2_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -1242px;
+ background-position: -1518px -1502px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_taskwoodsTerror3 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -1449px;
+ background-position: -1615px -138px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_taskwoodsTerror3_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1546px -1380px;
+ background-position: -1615px -69px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_treeling {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -1539px;
+ background-position: -1615px -207px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_trex {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -138px -1539px;
+ background-position: -1615px -345px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_trex_undead {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -69px -1539px;
+ background-position: -1615px -276px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_triceratops {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -207px -1539px;
+ background-position: -1615px -414px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_turtle {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -276px -1539px;
+ background-position: -1615px -483px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_unicorn {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -345px -1539px;
+ background-position: -1615px -552px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_vice1 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -483px -1539px;
+ background-position: -1615px -690px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_vice1_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -414px -1539px;
+ background-position: -1615px -621px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_vice2 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -621px -1539px;
+ background-position: -1615px -828px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_vice2_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -552px -1539px;
+ background-position: -1615px -759px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_vice3 {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -759px -1539px;
+ background-position: -1615px -966px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_vice3_locked {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -690px -1539px;
+ background-position: -1615px -897px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_whale {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -828px -1539px;
+ background-position: -1615px -1035px;
width: 68px;
height: 68px;
}
.inventory_quest_scroll_yarn {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -897px -1539px;
+ background-position: -1615px -1104px;
width: 68px;
height: 68px;
}
.quest_bundle_farmFriends {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -966px -1539px;
+ background-position: -1615px -1173px;
width: 68px;
height: 68px;
}
.quest_bundle_featheredFriends {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1035px -1539px;
+ background-position: -1615px -1242px;
width: 68px;
height: 68px;
}
.quest_bundle_splashyPals {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1104px -1539px;
+ background-position: -1615px -1311px;
width: 68px;
height: 68px;
}
.quest_bundle_winterQuests {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1173px -1539px;
+ background-position: -1615px -1380px;
width: 68px;
height: 68px;
}
.quest_bundle_witchyFamiliars {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1242px -1539px;
+ background-position: -1615px -1449px;
width: 68px;
height: 68px;
}
.shop_gem {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1311px -1539px;
+ background-position: 0px -1571px;
width: 68px;
height: 68px;
}
.shop_opaquePotion {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1380px -1539px;
+ background-position: -69px -1571px;
width: 68px;
height: 68px;
}
.shop_potion {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1449px -1539px;
+ background-position: -138px -1571px;
width: 68px;
height: 68px;
}
.shop_seafoam {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1518px -1539px;
+ background-position: -207px -1571px;
width: 68px;
height: 68px;
}
.shop_shinySeed {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px 0px;
+ background-position: -276px -1571px;
width: 68px;
height: 68px;
}
.shop_snowball {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -69px;
+ background-position: -345px -1571px;
width: 68px;
height: 68px;
}
.shop_spookySparkles {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -138px;
+ background-position: -414px -1571px;
width: 68px;
height: 68px;
}
.shop_mounts_MagicalBee-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -207px;
+ background-position: -483px -1571px;
width: 68px;
height: 68px;
}
.shop_mounts_Mammoth-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -276px;
+ background-position: -552px -1571px;
width: 68px;
height: 68px;
}
.shop_mounts_MantisShrimp-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -345px;
+ background-position: -621px -1571px;
width: 68px;
height: 68px;
}
.shop_mounts_Phoenix-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -414px;
+ background-position: -690px -1571px;
width: 68px;
height: 68px;
}
.shop_pets_MagicalBee-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -483px;
+ background-position: -759px -1571px;
width: 68px;
height: 68px;
}
.shop_pets_Mammoth-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -552px;
+ background-position: -828px -1571px;
width: 68px;
height: 68px;
}
.shop_pets_MantisShrimp-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -621px;
+ background-position: -897px -1571px;
width: 68px;
height: 68px;
}
.shop_pets_Phoenix-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1615px -690px;
+ background-position: -966px -1571px;
width: 68px;
height: 68px;
}
.shop_backStab {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -560px -442px;
+ background-position: -1684px -780px;
width: 40px;
height: 40px;
}
.shop_brightness {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -707px -530px;
+ background-position: -1684px -739px;
width: 40px;
height: 40px;
}
.shop_defensiveStance {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -666px -530px;
+ background-position: -1684px -698px;
width: 40px;
height: 40px;
}
.shop_earth {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -813px -636px;
+ background-position: -1684px -329px;
width: 40px;
height: 40px;
}
.shop_fireball {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -772px -636px;
+ background-position: -1684px -616px;
width: 40px;
height: 40px;
}
.shop_frost {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -919px -742px;
+ background-position: -1684px -985px;
width: 40px;
height: 40px;
}
.shop_heal {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1380px -1608px;
+ background-position: -1684px -534px;
width: 40px;
height: 40px;
}
.shop_healAll {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1025px -848px;
+ background-position: -1684px -493px;
width: 40px;
height: 40px;
}
.shop_intimidate {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -984px -848px;
+ background-position: -1684px -452px;
width: 40px;
height: 40px;
}
.shop_mpheal {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1131px -954px;
+ background-position: -1684px -411px;
width: 40px;
height: 40px;
}
.shop_pickPocket {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px -954px;
+ background-position: -1684px -657px;
width: 40px;
height: 40px;
}
.shop_protectAura {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1237px -1060px;
+ background-position: -1684px -370px;
width: 40px;
height: 40px;
}
.shop_smash {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -1060px;
+ background-position: -1684px -821px;
width: 40px;
height: 40px;
}
.shop_stealth {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1351px -1166px;
+ background-position: -1684px -903px;
width: 40px;
height: 40px;
}
.shop_toolsOfTrade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -878px -742px;
+ background-position: -1684px -944px;
width: 40px;
height: 40px;
}
.shop_valorousPresence {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -601px -442px;
+ background-position: -1684px -575px;
width: 40px;
height: 40px;
}
.Pet_Egg_Armadillo {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -276px -1608px;
+ background-position: -414px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Axolotl {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -345px -1608px;
+ background-position: -483px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Badger {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -414px -1608px;
+ background-position: -552px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_BearCub {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -483px -1608px;
+ background-position: -621px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Beetle {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -552px -1608px;
+ background-position: -690px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Bunny {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -621px -1608px;
+ background-position: -759px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Butterfly {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -690px -1608px;
+ background-position: -828px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Cactus {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -759px -1608px;
+ background-position: -897px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Cheetah {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -828px -1608px;
+ background-position: -966px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Cow {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -897px -1608px;
+ background-position: -1035px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Cuttlefish {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -966px -1608px;
+ background-position: -1104px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Deer {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1035px -1608px;
+ background-position: -1173px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Dragon {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1104px -1608px;
+ background-position: -1242px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Egg {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1173px -1608px;
+ background-position: -1311px -1226px;
width: 68px;
height: 68px;
}
.Pet_Egg_Falcon {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1242px -1608px;
+ background-position: 0px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Ferret {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -636px -1226px;
+ background-position: -69px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_FlyingPig {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -705px -1226px;
+ background-position: -138px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Fox {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -774px -1226px;
+ background-position: -207px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Frog {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -843px -1226px;
+ background-position: -276px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Gryphon {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -912px -1226px;
+ background-position: -345px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_GuineaPig {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -981px -1226px;
+ background-position: -414px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Hedgehog {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1050px -1226px;
+ background-position: -483px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Hippo {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1119px -1226px;
+ background-position: -552px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Horse {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1188px -1226px;
+ background-position: -621px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_LionCub {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1257px -1226px;
+ background-position: -690px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Monkey {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1326px -1226px;
+ background-position: -759px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Nudibranch {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -1332px;
+ background-position: -828px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Octopus {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -69px -1332px;
+ background-position: -897px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Owl {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -138px -1332px;
+ background-position: -966px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_PandaCub {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -207px -1332px;
+ background-position: -1035px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Parrot {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -276px -1332px;
+ background-position: -1104px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Peacock {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -345px -1332px;
+ background-position: -1173px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Penguin {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -414px -1332px;
+ background-position: -1242px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_PolarBear {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -483px -1332px;
+ background-position: -1311px -1295px;
width: 68px;
height: 68px;
}
.Pet_Egg_Pterodactyl {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -552px -1332px;
+ background-position: -1408px 0px;
width: 68px;
height: 68px;
}
.Pet_Egg_Rat {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -621px -1332px;
+ background-position: -1408px -69px;
width: 68px;
height: 68px;
}
.Pet_Egg_Rock {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -690px -1332px;
+ background-position: -1408px -138px;
width: 68px;
height: 68px;
}
.Pet_Egg_Rooster {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -759px -1332px;
+ background-position: -1408px -207px;
width: 68px;
height: 68px;
}
.Pet_Egg_Sabretooth {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -828px -1332px;
+ background-position: -1408px -276px;
width: 68px;
height: 68px;
}
.Pet_Egg_Seahorse {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -897px -1332px;
+ background-position: -1408px -345px;
width: 68px;
height: 68px;
}
.Pet_Egg_Sheep {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -966px -1332px;
+ background-position: -966px -1433px;
width: 68px;
height: 68px;
}
.Pet_Egg_Slime {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1035px -1332px;
+ background-position: -1408px -483px;
width: 68px;
height: 68px;
}
.Pet_Egg_Sloth {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1104px -1332px;
+ background-position: -1408px -552px;
width: 68px;
height: 68px;
}
.Pet_Egg_Snail {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1173px -1332px;
+ background-position: -1408px -621px;
width: 68px;
height: 68px;
}
.Pet_Egg_Snake {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1242px -1332px;
+ background-position: -1408px -690px;
width: 68px;
height: 68px;
}
.Pet_Egg_Spider {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1311px -1332px;
+ background-position: -1408px -759px;
width: 68px;
height: 68px;
}
.Pet_Egg_TRex {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -138px;
+ background-position: -1408px -966px;
width: 68px;
height: 68px;
}
.Pet_Egg_TigerCub {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px 0px;
+ background-position: -1408px -828px;
width: 68px;
height: 68px;
}
.Pet_Egg_Treeling {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -69px;
+ background-position: -1408px -897px;
width: 68px;
height: 68px;
}
.Pet_Egg_Triceratops {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -207px;
+ background-position: -1408px -1035px;
width: 68px;
height: 68px;
}
.Pet_Egg_Turtle {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1311px -1608px;
+ background-position: -1408px -1104px;
width: 68px;
height: 68px;
}
.Pet_Egg_Unicorn {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -345px;
+ background-position: -1408px -1173px;
width: 68px;
height: 68px;
}
.Pet_Egg_Whale {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -414px;
+ background-position: -1408px -1242px;
width: 68px;
height: 68px;
}
.Pet_Egg_Wolf {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -483px;
+ background-position: 0px -1364px;
width: 68px;
height: 68px;
}
.Pet_Egg_Yarn {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -552px;
+ background-position: -69px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -621px;
+ background-position: -138px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -690px;
+ background-position: -207px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -759px;
+ background-position: -276px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -828px;
+ background-position: -345px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -897px;
+ background-position: -414px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -966px;
+ background-position: -483px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -1035px;
+ background-position: -552px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -1104px;
+ background-position: -621px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -1173px;
+ background-position: -690px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Cake_Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -1242px;
+ background-position: -759px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1408px -1311px;
+ background-position: -828px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -1401px;
+ background-position: -897px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -69px -1401px;
+ background-position: -966px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -138px -1401px;
+ background-position: -1035px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -207px -1401px;
+ background-position: -1104px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -276px -1401px;
+ background-position: -1173px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -345px -1401px;
+ background-position: -1242px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -414px -1401px;
+ background-position: -1311px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -483px -1401px;
+ background-position: -1380px -1364px;
width: 68px;
height: 68px;
}
.Pet_Food_Candy_Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -552px -1401px;
+ background-position: -1477px 0px;
width: 68px;
height: 68px;
}
.Pet_Food_Chocolate {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -621px -1401px;
+ background-position: -1477px -69px;
width: 68px;
height: 68px;
}
.Pet_Food_CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -690px -1401px;
+ background-position: -1477px -138px;
width: 68px;
height: 68px;
}
.Pet_Food_CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -759px -1401px;
+ background-position: -1477px -207px;
width: 68px;
height: 68px;
}
.Pet_Food_Fish {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -828px -1401px;
+ background-position: -1477px -276px;
width: 68px;
height: 68px;
}
.Pet_Food_Honey {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -897px -1401px;
+ background-position: -1477px -345px;
width: 68px;
height: 68px;
}
.Pet_Food_Meat {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -966px -1401px;
+ background-position: -1477px -414px;
width: 68px;
height: 68px;
}
.Pet_Food_Milk {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1035px -1401px;
+ background-position: -1477px -483px;
width: 68px;
height: 68px;
}
.Pet_Food_Potatoe {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1104px -1401px;
+ background-position: -1477px -552px;
width: 68px;
height: 68px;
}
.Pet_Food_RottenMeat {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1173px -1401px;
+ background-position: -1477px -621px;
width: 68px;
height: 68px;
}
.Pet_Food_Saddle {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1242px -1401px;
+ background-position: -1477px -690px;
width: 68px;
height: 68px;
}
.Pet_Food_Strawberry {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1311px -1401px;
+ background-position: -1477px -759px;
width: 68px;
height: 68px;
}
.Mount_Body_Armadillo-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -1120px;
+ background-position: -530px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Armadillo-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -1226px;
+ background-position: -560px -336px;
width: 105px;
height: 105px;
}
.Mount_Body_Armadillo-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -1226px;
+ background-position: 0px -484px;
width: 105px;
height: 105px;
}
.Mount_Body_Armadillo-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -424px -1226px;
+ background-position: -106px -484px;
width: 105px;
height: 105px;
}
.Mount_Body_Armadillo-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -560px -230px;
+ background-position: -212px -484px;
width: 105px;
height: 105px;
}
.Mount_Body_Armadillo-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -560px -336px;
+ background-position: -318px -484px;
width: 105px;
height: 105px;
}
.Mount_Body_Armadillo-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -484px;
+ background-position: -424px -484px;
width: 105px;
height: 105px;
}
.Mount_Body_Armadillo-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -484px;
+ background-position: -530px -484px;
width: 105px;
height: 105px;
}
.Mount_Body_Armadillo-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -484px;
+ background-position: -666px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Armadillo-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -484px;
+ background-position: -666px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -424px -484px;
+ background-position: -666px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -530px -484px;
+ background-position: -666px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -666px 0px;
+ background-position: -666px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -666px -106px;
+ background-position: 0px -590px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -666px -212px;
+ background-position: -106px -590px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -666px -318px;
+ background-position: -212px -590px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -666px -424px;
+ background-position: -318px -590px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -590px;
+ background-position: -424px -590px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -590px;
+ background-position: -530px -590px;
width: 105px;
height: 105px;
}
.Mount_Body_Axolotl-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -590px;
+ background-position: -636px -590px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -590px;
+ background-position: -772px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -424px -590px;
+ background-position: -772px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -530px -590px;
+ background-position: -772px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -636px -590px;
+ background-position: -772px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -772px 0px;
+ background-position: -772px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -772px -106px;
+ background-position: -772px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -772px -212px;
+ background-position: 0px -696px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -772px -318px;
+ background-position: -106px -696px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -772px -424px;
+ background-position: -212px -696px;
width: 105px;
height: 105px;
}
.Mount_Body_Badger-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -772px -530px;
+ background-position: -318px -696px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -696px;
+ background-position: -424px -696px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -696px;
+ background-position: -530px -696px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -696px;
+ background-position: -636px -696px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -696px;
+ background-position: -742px -696px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -424px -696px;
+ background-position: -878px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -530px -696px;
+ background-position: -878px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -636px -696px;
+ background-position: -878px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -742px -696px;
+ background-position: -878px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -878px 0px;
+ background-position: -878px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -878px -106px;
+ background-position: -878px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -878px -212px;
+ background-position: -878px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -878px -318px;
+ background-position: 0px -802px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -878px -424px;
+ background-position: -106px -802px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Polar {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -878px -530px;
+ background-position: -212px -802px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -878px -636px;
+ background-position: -318px -802px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -802px;
+ background-position: -424px -802px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -802px;
+ background-position: -530px -802px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -802px;
+ background-position: -636px -802px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -802px;
+ background-position: -742px -802px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -424px -802px;
+ background-position: -560px -230px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -121px 0px;
+ background-position: 0px 0px;
width: 120px;
height: 120px;
}
.Mount_Body_BearCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -636px -802px;
+ background-position: -984px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -742px -802px;
+ background-position: -984px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_BearCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -848px -802px;
+ background-position: -984px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -984px 0px;
+ background-position: -984px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -984px -106px;
+ background-position: -984px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -530px -1226px;
+ background-position: -984px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -984px -318px;
+ background-position: -984px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -984px -424px;
+ background-position: 0px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -984px -530px;
+ background-position: -106px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -984px -636px;
+ background-position: -212px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -984px -742px;
+ background-position: -318px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -908px;
+ background-position: -424px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Beetle-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -908px;
+ background-position: -530px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -908px;
+ background-position: -636px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -908px;
+ background-position: -742px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -424px -908px;
+ background-position: -848px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -530px -908px;
+ background-position: -954px -908px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -636px -908px;
+ background-position: -1090px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -742px -908px;
+ background-position: -1090px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -848px -908px;
+ background-position: -1090px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -954px -908px;
+ background-position: -1090px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px 0px;
+ background-position: -1090px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Bunny-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px -106px;
+ background-position: -1090px -530px;
width: 105px;
height: 105px;
}
@@ -1782,433 +1872,397 @@
}
.Mount_Body_Butterfly-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -245px;
+ background-position: -348px 0px;
width: 105px;
height: 123px;
}
.Mount_Body_Butterfly-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -348px 0px;
+ background-position: 0px -245px;
width: 105px;
height: 123px;
}
.Mount_Body_Butterfly-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -454px -124px;
+ background-position: -106px -245px;
width: 105px;
height: 123px;
}
.Mount_Body_Butterfly-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -245px;
+ background-position: -212px -245px;
width: 105px;
height: 123px;
}
.Mount_Body_Butterfly-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -245px;
+ background-position: -318px -245px;
width: 105px;
height: 123px;
}
.Mount_Body_Butterfly-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -245px;
+ background-position: -454px 0px;
width: 105px;
height: 123px;
}
.Mount_Body_Butterfly-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -454px 0px;
+ background-position: -454px -124px;
width: 105px;
height: 123px;
}
.Mount_Body_Cactus-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -1014px;
+ background-position: -742px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -424px -1014px;
+ background-position: -848px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -530px -1014px;
+ background-position: -954px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -636px -1014px;
+ background-position: -1060px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -742px -1014px;
+ background-position: -1196px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -848px -1014px;
+ background-position: -1196px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -954px -1014px;
+ background-position: -1196px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1060px -1014px;
+ background-position: -1196px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px 0px;
+ background-position: -1196px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -106px;
+ background-position: -1196px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -212px;
+ background-position: -1196px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -318px;
+ background-position: -1196px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -424px;
+ background-position: -1196px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -530px;
+ background-position: -1196px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -636px;
+ background-position: 0px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -742px;
+ background-position: -106px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -848px;
+ background-position: -212px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1196px -954px;
+ background-position: -318px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -1120px;
+ background-position: -424px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px 0px;
+ background-position: -121px 0px;
width: 120px;
height: 120px;
}
.Mount_Body_Cactus-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -1120px;
+ background-position: -636px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -1120px;
+ background-position: -742px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cactus-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -424px -1120px;
+ background-position: -848px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -530px -1120px;
+ background-position: -954px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -636px -1120px;
+ background-position: -1060px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -742px -1120px;
+ background-position: -1166px -1120px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -848px -1120px;
+ background-position: -1302px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -954px -1120px;
+ background-position: -1302px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1060px -1120px;
+ background-position: -1302px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1166px -1120px;
+ background-position: -1302px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px 0px;
+ background-position: -1302px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -106px;
+ background-position: -1302px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Cheetah-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -212px;
+ background-position: -1302px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -318px;
+ background-position: -1302px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -424px;
+ background-position: -1302px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -530px;
+ background-position: -1302px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -636px;
+ background-position: -1302px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -742px;
+ background-position: -636px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -848px;
+ background-position: -530px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -954px;
+ background-position: -424px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1302px -1060px;
+ background-position: -318px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -1226px;
+ background-position: -212px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cow-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -1226px;
+ background-position: -106px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Cuttlefish-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -424px -369px;
+ background-position: -560px 0px;
width: 105px;
height: 114px;
}
.Mount_Body_Cuttlefish-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -560px 0px;
+ background-position: -424px -369px;
width: 105px;
height: 114px;
}
.Mount_Body_Cuttlefish-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -560px -115px;
+ background-position: -318px -369px;
width: 105px;
height: 114px;
}
.Mount_Body_Cuttlefish-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -242px -124px;
+ background-position: -212px -369px;
width: 105px;
height: 114px;
}
.Mount_Body_Cuttlefish-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -348px -124px;
+ background-position: -106px -369px;
width: 105px;
height: 114px;
}
.Mount_Body_Cuttlefish-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -454px -248px;
+ background-position: 0px -369px;
width: 105px;
height: 114px;
}
.Mount_Body_Cuttlefish-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -369px;
+ background-position: -242px -124px;
width: 105px;
height: 114px;
}
.Mount_Body_Cuttlefish-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -369px;
+ background-position: -454px -248px;
width: 105px;
height: 114px;
}
.Mount_Body_Cuttlefish-White {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -369px;
+ background-position: -348px -124px;
width: 105px;
height: 114px;
}
.Mount_Body_Cuttlefish-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -318px -369px;
+ background-position: -560px -115px;
width: 105px;
height: 114px;
}
.Mount_Body_Deer-Base {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px -530px;
+ background-position: 0px -1014px;
width: 105px;
height: 105px;
}
.Mount_Body_Deer-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px -424px;
+ background-position: -1090px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Deer-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px -318px;
+ background-position: -1090px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Deer-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px -212px;
+ background-position: -1090px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Deer-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -530px -802px;
+ background-position: -848px -802px;
width: 105px;
height: 105px;
}
.Mount_Body_Deer-Red {
background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -212px -1014px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Deer-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -106px -1014px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Deer-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: 0px -1014px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Deer-White {
- background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px -848px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Deer-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px -742px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Dragon-Aquatic {
- background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -984px -212px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Dragon-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-11.png');
- background-position: -1090px -636px;
+ background-position: -984px 0px;
width: 105px;
height: 105px;
}
diff --git a/website/client/assets/css/sprites/spritesmith-main-12.css b/website/client/assets/css/sprites/spritesmith-main-12.css
index bb1475a655..c37b689c33 100644
--- a/website/client/assets/css/sprites/spritesmith-main-12.css
+++ b/website/client/assets/css/sprites/spritesmith-main-12.css
@@ -1,102 +1,138 @@
-.Mount_Body_Dragon-CottonCandyBlue {
+.Mount_Body_Deer-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -530px;
+ background-position: -560px -318px;
width: 105px;
height: 105px;
}
-.Mount_Body_Dragon-CottonCandyPink {
+.Mount_Body_Deer-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -212px -1108px;
width: 105px;
height: 105px;
}
-.Mount_Body_Dragon-Cupid {
+.Mount_Body_Deer-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -742px -790px;
+ background-position: -984px -424px;
width: 105px;
height: 105px;
}
-.Mount_Body_Dragon-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1090px -318px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Dragon-Ember {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1090px -742px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Dragon-Fairy {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1090px -848px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Dragon-Floral {
+.Mount_Body_Deer-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: 0px -1002px;
width: 105px;
height: 105px;
}
-.Mount_Body_Dragon-Ghost {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -1002px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Dragon-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -1002px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Dragon-Holly {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -1002px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Dragon-Peppermint {
+.Mount_Body_Dragon-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -424px -1002px;
width: 105px;
height: 105px;
}
-.Mount_Body_Dragon-Red {
+.Mount_Body_Dragon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -530px -1002px;
width: 105px;
height: 105px;
}
-.Mount_Body_Dragon-RoyalPurple {
+.Mount_Body_Dragon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -636px -1002px;
width: 105px;
height: 105px;
}
-.Mount_Body_Dragon-Shade {
+.Mount_Body_Dragon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -742px -1002px;
width: 105px;
height: 105px;
}
+.Mount_Body_Dragon-Cupid {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -848px -1002px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -954px -1002px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Ember {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -1060px -1002px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Fairy {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -1196px 0px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Floral {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -1196px -106px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Ghost {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -1196px -212px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -1514px -424px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Holly {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -1514px -636px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Peppermint {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -1514px -1060px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -1514px -1166px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-RoyalPurple {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -1514px -1272px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Dragon-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-12.png');
+ background-position: -433px -357px;
+ width: 105px;
+ height: 105px;
+}
.Mount_Body_Dragon-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1272px -1320px;
+ background-position: -560px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Dragon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px 0px;
+ background-position: -560px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Dragon-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -424px;
+ background-position: -560px -212px;
width: 105px;
height: 105px;
}
@@ -108,313 +144,313 @@
}
.Mount_Body_Dragon-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -636px;
+ background-position: 0px -472px;
width: 105px;
height: 105px;
}
.Mount_Body_Dragon-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -433px -357px;
+ background-position: -106px -472px;
width: 105px;
height: 105px;
}
.Mount_Body_Dragon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -560px 0px;
+ background-position: -212px -472px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -560px -106px;
+ background-position: -318px -472px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -560px -212px;
+ background-position: -424px -472px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -560px -318px;
+ background-position: -530px -472px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -472px;
+ background-position: -666px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -472px;
+ background-position: -666px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -472px;
+ background-position: -666px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -472px;
+ background-position: -666px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -472px;
+ background-position: -666px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -472px;
+ background-position: 0px -578px;
width: 105px;
height: 105px;
}
.Mount_Body_Egg-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -666px 0px;
+ background-position: -106px -578px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -666px -106px;
+ background-position: -212px -578px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -666px -212px;
+ background-position: -318px -578px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -666px -318px;
+ background-position: -424px -578px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -666px -424px;
+ background-position: -530px -578px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -578px;
+ background-position: -636px -578px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -578px;
+ background-position: -772px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -578px;
+ background-position: -772px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -578px;
+ background-position: -772px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -578px;
+ background-position: -772px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Falcon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -578px;
+ background-position: -772px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -636px -578px;
+ background-position: -772px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -772px 0px;
+ background-position: 0px -684px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -772px -106px;
+ background-position: -106px -684px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -772px -212px;
+ background-position: -212px -684px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -772px -318px;
+ background-position: -318px -684px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -772px -424px;
+ background-position: -424px -684px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -772px -530px;
+ background-position: -530px -684px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -684px;
+ background-position: -636px -684px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -684px;
+ background-position: -742px -684px;
width: 105px;
height: 105px;
}
.Mount_Body_Ferret-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -684px;
+ background-position: -878px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -684px;
+ background-position: -878px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -684px;
+ background-position: -878px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -684px;
+ background-position: -878px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -636px -684px;
+ background-position: -878px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -742px -684px;
+ background-position: -878px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -878px 0px;
+ background-position: -878px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -878px -106px;
+ background-position: 0px -790px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -878px -212px;
+ background-position: -106px -790px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -878px -318px;
+ background-position: -212px -790px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -878px -424px;
+ background-position: -318px -790px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -878px -530px;
+ background-position: -424px -790px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -878px -636px;
+ background-position: -530px -790px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -790px;
+ background-position: -636px -790px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -790px;
+ background-position: -742px -790px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -790px;
+ background-position: -848px -790px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -790px;
+ background-position: -984px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -790px;
+ background-position: -984px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -790px;
+ background-position: -984px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -636px -790px;
+ background-position: -984px -318px;
width: 105px;
height: 105px;
}
@@ -426,133 +462,133 @@
}
.Mount_Body_FlyingPig-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -848px -790px;
+ background-position: -984px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -984px 0px;
+ background-position: -984px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_FlyingPig-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -984px -106px;
+ background-position: -984px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -984px -212px;
+ background-position: 0px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -984px -318px;
+ background-position: -106px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -984px -424px;
+ background-position: -212px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -984px -530px;
+ background-position: -318px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -984px -636px;
+ background-position: -424px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -984px -742px;
+ background-position: -530px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -896px;
+ background-position: -636px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -896px;
+ background-position: -742px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -896px;
+ background-position: -848px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -896px;
+ background-position: -954px -896px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -896px;
+ background-position: -1090px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -896px;
+ background-position: -1090px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -636px -896px;
+ background-position: -1090px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -742px -896px;
+ background-position: -1090px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -848px -896px;
+ background-position: -1090px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -954px -896px;
+ background-position: -1090px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1090px 0px;
+ background-position: -1090px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1090px -106px;
+ background-position: -1090px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1090px -212px;
+ background-position: -1090px -848px;
width: 105px;
height: 105px;
}
@@ -564,19 +600,19 @@
}
.Mount_Body_Fox-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1090px -424px;
+ background-position: -106px -1002px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1090px -530px;
+ background-position: -212px -1002px;
width: 105px;
height: 105px;
}
.Mount_Body_Fox-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1090px -636px;
+ background-position: -318px -1002px;
width: 105px;
height: 105px;
}
@@ -642,313 +678,313 @@
}
.Mount_Body_Gryphon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -848px -1002px;
+ background-position: -1196px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -954px -1002px;
+ background-position: -1196px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1060px -1002px;
+ background-position: -1196px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px 0px;
+ background-position: -1196px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px -106px;
+ background-position: -1196px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px -212px;
+ background-position: -1196px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px -318px;
+ background-position: -1196px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px -424px;
+ background-position: 0px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px -530px;
+ background-position: -106px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px -636px;
+ background-position: -327px -357px;
width: 105px;
height: 105px;
}
.Mount_Body_Gryphon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px -742px;
+ background-position: -318px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px -848px;
+ background-position: -424px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1196px -954px;
+ background-position: -530px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -1108px;
+ background-position: -636px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -1108px;
+ background-position: -742px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -327px -357px;
+ background-position: -848px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -1108px;
+ background-position: -954px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -1108px;
+ background-position: -1060px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -1108px;
+ background-position: -1166px -1108px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -636px -1108px;
+ background-position: -1302px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_GuineaPig-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -742px -1108px;
+ background-position: -1302px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -848px -1108px;
+ background-position: -1302px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -954px -1108px;
+ background-position: -1302px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1060px -1108px;
+ background-position: -1302px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1166px -1108px;
+ background-position: -1302px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px 0px;
+ background-position: -1302px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -106px;
+ background-position: -1302px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -212px;
+ background-position: -1302px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -318px;
+ background-position: -1302px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -424px;
+ background-position: -1302px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_Hedgehog-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -530px;
+ background-position: 0px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -636px;
+ background-position: -106px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -742px;
+ background-position: -212px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -848px;
+ background-position: -318px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -954px;
+ background-position: -424px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1302px -1060px;
+ background-position: -530px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -1214px;
+ background-position: -636px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -1214px;
+ background-position: -742px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -1214px;
+ background-position: -848px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -1214px;
+ background-position: -954px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippo-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -1214px;
+ background-position: -1060px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Hippogriff-Hopeful {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -1214px;
+ background-position: -1166px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -636px -1214px;
+ background-position: -1272px -1214px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -742px -1214px;
+ background-position: -1408px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -848px -1214px;
+ background-position: -1408px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -954px -1214px;
+ background-position: -1408px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1060px -1214px;
+ background-position: -1408px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1166px -1214px;
+ background-position: -1408px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1272px -1214px;
+ background-position: -1408px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px 0px;
+ background-position: -1408px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -106px;
+ background-position: -1408px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Horse-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -212px;
+ background-position: -1408px -848px;
width: 105px;
height: 105px;
}
@@ -966,115 +1002,115 @@
}
.Mount_Body_Jackalope-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -318px;
+ background-position: -1408px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -636px;
+ background-position: 0px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -742px;
+ background-position: -106px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -848px;
+ background-position: -212px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -954px;
+ background-position: -318px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -1060px;
+ background-position: -424px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -1166px;
+ background-position: -530px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -1320px;
+ background-position: -636px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Ethereal {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -1320px;
+ background-position: -742px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -1320px;
+ background-position: -848px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -1320px;
+ background-position: -954px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -1320px;
+ background-position: -1060px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -1320px;
+ background-position: -1166px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -636px -1320px;
+ background-position: -1272px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -742px -1320px;
+ background-position: -1378px -1320px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -848px -1320px;
+ background-position: -1514px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -954px -1320px;
+ background-position: -1514px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1060px -1320px;
+ background-position: -1514px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1166px -1320px;
+ background-position: -1514px -318px;
width: 105px;
height: 105px;
}
@@ -1086,7 +1122,7 @@
}
.Mount_Body_LionCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1378px -1320px;
+ background-position: -1514px -530px;
width: 105px;
height: 105px;
}
@@ -1098,19 +1134,19 @@
}
.Mount_Body_LionCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -106px;
+ background-position: -1514px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -212px;
+ background-position: -1514px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_LionCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -318px;
+ background-position: -1514px -954px;
width: 105px;
height: 105px;
}
@@ -1134,335 +1170,299 @@
}
.Mount_Body_Monkey-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -742px;
+ background-position: 0px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Monkey-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -848px;
+ background-position: -106px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Monkey-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -954px;
+ background-position: -212px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Monkey-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -1060px;
+ background-position: -318px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Monkey-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -1166px;
+ background-position: -424px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Monkey-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1514px -1272px;
+ background-position: -530px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Monkey-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -1426px;
+ background-position: -636px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Monkey-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -1426px;
+ background-position: -742px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Monkey-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -1426px;
+ background-position: -848px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Monkey-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -1426px;
+ background-position: -954px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -1426px;
+ background-position: -1060px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -1426px;
+ background-position: -1166px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -636px -1426px;
+ background-position: -1272px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -742px -1426px;
+ background-position: -1378px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -848px -1426px;
+ background-position: -1484px -1426px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -954px -1426px;
+ background-position: -1620px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1060px -1426px;
+ background-position: -1620px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1166px -1426px;
+ background-position: -1620px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1272px -1426px;
+ background-position: -1620px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Nudibranch-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1378px -1426px;
+ background-position: -1620px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1484px -1426px;
+ background-position: -1620px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px 0px;
+ background-position: -1620px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -106px;
+ background-position: -1620px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -212px;
+ background-position: -1620px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -318px;
+ background-position: -1620px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -424px;
+ background-position: -1620px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -530px;
+ background-position: -1620px -1166px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -636px;
+ background-position: -1620px -1272px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -742px;
+ background-position: -1620px -1378px;
width: 105px;
height: 105px;
}
.Mount_Body_Octopus-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -848px;
+ background-position: 0px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Orca-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -954px;
+ background-position: -106px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -1060px;
+ background-position: -212px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -1166px;
+ background-position: -318px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -1272px;
+ background-position: -424px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1620px -1378px;
+ background-position: -530px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: 0px -1532px;
+ background-position: -636px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-Red {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -106px -1532px;
+ background-position: -742px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -212px -1532px;
+ background-position: -848px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -318px -1532px;
+ background-position: -954px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-White {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -424px -1532px;
+ background-position: -1060px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_Owl-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -530px -1532px;
+ background-position: -1166px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -636px -1532px;
+ background-position: -1272px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -742px -1532px;
+ background-position: -1378px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -848px -1532px;
+ background-position: -1484px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -954px -1532px;
+ background-position: -1590px -1532px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1060px -1532px;
+ background-position: -1726px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1166px -1532px;
+ background-position: -1726px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1272px -1532px;
+ background-position: -1408px -1166px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1378px -1532px;
+ background-position: -1408px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-Floral {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1484px -1532px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_PandaCub-Ghost {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1590px -1532px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_PandaCub-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1726px 0px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_PandaCub-Holly {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1726px -106px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_PandaCub-Peppermint {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -530px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_PandaCub-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-12.png');
- background-position: -1408px -424px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_PandaCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-12.png');
background-position: -1726px -212px;
width: 105px;
diff --git a/website/client/assets/css/sprites/spritesmith-main-13.css b/website/client/assets/css/sprites/spritesmith-main-13.css
index 765894a2e5..dc403b7342 100644
--- a/website/client/assets/css/sprites/spritesmith-main-13.css
+++ b/website/client/assets/css/sprites/spritesmith-main-13.css
@@ -1,24 +1,60 @@
-.Mount_Body_PandaCub-Shade {
+.Mount_Body_PandaCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -983px;
+ background-position: -1104px -318px;
width: 105px;
height: 105px;
}
-.Mount_Body_PandaCub-Shimmer {
+.Mount_Body_PandaCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
background-position: -1210px -636px;
width: 105px;
height: 105px;
}
+.Mount_Body_PandaCub-Holly {
+ background-image: url('~assets/images/sprites/spritesmith-main-13.png');
+ background-position: -530px -983px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_PandaCub-Peppermint {
+ background-image: url('~assets/images/sprites/spritesmith-main-13.png');
+ background-position: -636px -983px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_PandaCub-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-13.png');
+ background-position: -742px -983px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_PandaCub-RoyalPurple {
+ background-image: url('~assets/images/sprites/spritesmith-main-13.png');
+ background-position: -848px -983px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_PandaCub-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-13.png');
+ background-position: -954px -983px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_PandaCub-Shimmer {
+ background-image: url('~assets/images/sprites/spritesmith-main-13.png');
+ background-position: -1104px 0px;
+ width: 105px;
+ height: 105px;
+}
.Mount_Body_PandaCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -998px -848px;
+ background-position: -1104px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -983px;
+ background-position: -1104px -212px;
width: 105px;
height: 105px;
}
@@ -30,445 +66,445 @@
}
.Mount_Body_PandaCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -983px;
+ background-position: -1104px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -318px -983px;
+ background-position: -1272px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_PandaCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -424px -983px;
+ background-position: -1528px -1272px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -530px -983px;
+ background-position: -1528px -1378px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -636px -983px;
+ background-position: 0px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -742px -983px;
+ background-position: -106px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -848px -983px;
+ background-position: -212px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -636px -1407px;
+ background-position: -318px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -636px;
+ background-position: -424px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -742px;
+ background-position: -530px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -848px;
+ background-position: -636px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -954px;
+ background-position: -742px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Parrot-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -1060px;
+ background-position: -348px -544px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -1166px;
+ background-position: -454px -544px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -1272px;
+ background-position: -560px -544px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -1378px;
+ background-position: -680px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -1513px;
+ background-position: -680px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -1513px;
+ background-position: -680px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -348px -544px;
+ background-position: -680px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -454px -544px;
+ background-position: -680px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -560px -544px;
+ background-position: -680px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -680px 0px;
+ background-position: 0px -665px;
width: 105px;
height: 105px;
}
.Mount_Body_Peacock-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -680px -106px;
+ background-position: -106px -665px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -680px -212px;
+ background-position: -212px -665px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -680px -318px;
+ background-position: -318px -665px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -680px -424px;
+ background-position: -424px -665px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -680px -530px;
+ background-position: -530px -665px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -665px;
+ background-position: -636px -665px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -665px;
+ background-position: -786px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -665px;
+ background-position: -786px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -318px -665px;
+ background-position: -786px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -424px -665px;
+ background-position: -786px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Penguin-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -530px -665px;
+ background-position: -786px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Phoenix-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -636px -665px;
+ background-position: -786px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -786px 0px;
+ background-position: -786px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -786px -106px;
+ background-position: 0px -771px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -786px -212px;
+ background-position: -106px -771px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -786px -318px;
+ background-position: -212px -771px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -786px -424px;
+ background-position: -318px -771px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -786px -530px;
+ background-position: -424px -771px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -786px -636px;
+ background-position: -530px -771px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -771px;
+ background-position: -636px -771px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -771px;
+ background-position: -742px -771px;
width: 105px;
height: 105px;
}
.Mount_Body_Pterodactyl-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -771px;
+ background-position: -892px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -318px -771px;
+ background-position: -892px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -424px -771px;
+ background-position: -892px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -530px -771px;
+ background-position: -892px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -636px -771px;
+ background-position: -892px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -742px -771px;
+ background-position: -892px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -892px 0px;
+ background-position: -892px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -892px -106px;
+ background-position: -892px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -892px -212px;
+ background-position: 0px -877px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -892px -318px;
+ background-position: -106px -877px;
width: 105px;
height: 105px;
}
.Mount_Body_Rat-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -892px -424px;
+ background-position: -212px -877px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -892px -530px;
+ background-position: -318px -877px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -892px -636px;
+ background-position: -424px -877px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -892px -742px;
+ background-position: -530px -877px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -877px;
+ background-position: -636px -877px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -877px;
+ background-position: -742px -877px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -877px;
+ background-position: -848px -877px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -318px -877px;
+ background-position: -998px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -424px -877px;
+ background-position: -998px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -530px -877px;
+ background-position: -998px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Rock-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -636px -877px;
+ background-position: -998px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -742px -877px;
+ background-position: -998px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -848px -877px;
+ background-position: -998px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -998px 0px;
+ background-position: -998px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -998px -106px;
+ background-position: -998px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -998px -212px;
+ background-position: -998px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -998px -318px;
+ background-position: 0px -983px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -998px -424px;
+ background-position: -106px -983px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -998px -530px;
+ background-position: -212px -983px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -998px -636px;
+ background-position: -318px -983px;
width: 105px;
height: 105px;
}
.Mount_Body_Rooster-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -998px -742px;
+ background-position: -424px -983px;
width: 105px;
height: 105px;
}
@@ -534,421 +570,421 @@
}
.Mount_Body_Seahorse-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -954px -983px;
+ background-position: -1104px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Seahorse-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px 0px;
+ background-position: -1104px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Seahorse-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px -106px;
+ background-position: -1104px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Seahorse-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px -212px;
+ background-position: -1104px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Seahorse-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px -318px;
+ background-position: -1104px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Seahorse-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px -424px;
+ background-position: 0px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Seahorse-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px -530px;
+ background-position: -106px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Seahorse-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px -636px;
+ background-position: -212px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Seahorse-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px -742px;
+ background-position: -318px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Seahorse-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px -848px;
+ background-position: -424px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1104px -954px;
+ background-position: -530px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -1089px;
+ background-position: -636px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -1089px;
+ background-position: -742px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -1089px;
+ background-position: -848px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -318px -1089px;
+ background-position: -954px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -424px -1089px;
+ background-position: -1060px -1089px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -530px -1089px;
+ background-position: -1210px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -636px -1089px;
+ background-position: -1210px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -742px -1089px;
+ background-position: -1210px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Sheep-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -848px -1089px;
+ background-position: -1210px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -954px -1089px;
+ background-position: -1210px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1060px -1089px;
+ background-position: -1210px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px 0px;
+ background-position: -242px -544px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px -106px;
+ background-position: -1210px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px -212px;
+ background-position: -1210px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px -318px;
+ background-position: -1210px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px -424px;
+ background-position: -1210px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px -530px;
+ background-position: 0px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -242px -544px;
+ background-position: -106px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Slime-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px -742px;
+ background-position: -212px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px -848px;
+ background-position: -318px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px -954px;
+ background-position: -424px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1210px -1060px;
+ background-position: -530px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -1195px;
+ background-position: -636px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -1195px;
+ background-position: -742px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -1195px;
+ background-position: -848px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -318px -1195px;
+ background-position: -954px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -424px -1195px;
+ background-position: -1060px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -530px -1195px;
+ background-position: -1166px -1195px;
width: 105px;
height: 105px;
}
.Mount_Body_Sloth-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -636px -1195px;
+ background-position: -1316px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -742px -1195px;
+ background-position: -1316px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -848px -1195px;
+ background-position: -1316px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -954px -1195px;
+ background-position: -1316px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1060px -1195px;
+ background-position: -1316px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1166px -1195px;
+ background-position: -1316px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px 0px;
+ background-position: -1316px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -106px;
+ background-position: -1316px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -212px;
+ background-position: -1316px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -318px;
+ background-position: -1316px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Snail-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -424px;
+ background-position: -1316px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -530px;
+ background-position: -1316px -1166px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -636px;
+ background-position: 0px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -742px;
+ background-position: -106px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -848px;
+ background-position: -212px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -954px;
+ background-position: -318px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -1060px;
+ background-position: -424px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1316px -1166px;
+ background-position: -530px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -1301px;
+ background-position: -636px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -1301px;
+ background-position: -742px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Snake-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -1301px;
+ background-position: -848px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -318px -1301px;
+ background-position: -954px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -424px -1301px;
+ background-position: -1060px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -530px -1301px;
+ background-position: -1166px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -636px -1301px;
+ background-position: -1272px -1301px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -742px -1301px;
+ background-position: -1422px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -848px -1301px;
+ background-position: -1422px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -954px -1301px;
+ background-position: -1422px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1060px -1301px;
+ background-position: -1422px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1166px -1301px;
+ background-position: -1422px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Spider-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1272px -1301px;
+ background-position: -1422px -530px;
width: 105px;
height: 105px;
}
@@ -1014,115 +1050,115 @@
}
.Mount_Body_TigerCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px 0px;
+ background-position: -1422px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -106px;
+ background-position: -1422px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -212px;
+ background-position: -1422px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -318px;
+ background-position: -1422px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -424px;
+ background-position: -1422px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -530px;
+ background-position: -1422px -1166px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -636px;
+ background-position: -1422px -1272px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -742px;
+ background-position: 0px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -848px;
+ background-position: -106px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -954px;
+ background-position: -212px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -1060px;
+ background-position: -318px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -1166px;
+ background-position: -424px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1422px -1272px;
+ background-position: -530px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -1407px;
+ background-position: -636px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -1407px;
+ background-position: -742px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -1407px;
+ background-position: -848px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -318px -1407px;
+ background-position: -954px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -424px -1407px;
+ background-position: -1060px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -530px -1407px;
+ background-position: -1166px -1407px;
width: 105px;
height: 105px;
}
@@ -1134,269 +1170,233 @@
}
.Mount_Body_TigerCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -742px -1407px;
+ background-position: -1378px -1407px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -848px -1407px;
+ background-position: -1528px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_TigerCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -954px -1407px;
+ background-position: -1528px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1060px -1407px;
+ background-position: -1528px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1166px -1407px;
+ background-position: -1528px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1272px -1407px;
+ background-position: -1528px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1378px -1407px;
+ background-position: -1528px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px 0px;
+ background-position: -1528px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -106px;
+ background-position: -1528px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -212px;
+ background-position: -1528px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -318px;
+ background-position: -1528px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -424px;
+ background-position: -1528px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_Treeling-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1528px -530px;
+ background-position: -1528px -1166px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -1513px;
+ background-position: -848px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -318px -1513px;
+ background-position: -954px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -424px -1513px;
+ background-position: -1060px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -530px -1513px;
+ background-position: -1166px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -636px -1513px;
+ background-position: -1272px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -742px -1513px;
+ background-position: -1378px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -848px -1513px;
+ background-position: -1484px -1513px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -954px -1513px;
+ background-position: -1634px 0px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1060px -1513px;
+ background-position: -1634px -106px;
width: 105px;
height: 105px;
}
.Mount_Body_Triceratops-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1166px -1513px;
+ background-position: -1634px -212px;
width: 105px;
height: 105px;
}
.Mount_Body_Turkey-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1272px -1513px;
+ background-position: -1634px -318px;
width: 105px;
height: 105px;
}
.Mount_Body_Turkey-Gilded {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1378px -1513px;
+ background-position: -1634px -424px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1484px -1513px;
+ background-position: -1634px -530px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px 0px;
+ background-position: -1634px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -106px;
+ background-position: -1634px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -212px;
+ background-position: -1634px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -318px;
+ background-position: -1634px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-Red {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -424px;
+ background-position: -1634px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -530px;
+ background-position: -1634px -1166px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -636px;
+ background-position: -1634px -1272px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-White {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -742px;
+ background-position: -1634px -1378px;
width: 105px;
height: 105px;
}
.Mount_Body_Turtle-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -848px;
+ background-position: -1634px -1484px;
width: 105px;
height: 105px;
}
.Mount_Body_Unicorn-Base {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -954px;
+ background-position: 0px -1619px;
width: 105px;
height: 105px;
}
.Mount_Body_Unicorn-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -1060px;
+ background-position: -106px -1619px;
width: 105px;
height: 105px;
}
.Mount_Body_Unicorn-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -1166px;
+ background-position: -212px -1619px;
width: 105px;
height: 105px;
}
.Mount_Body_Unicorn-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -1272px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Unicorn-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -1378px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Unicorn-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -1634px -1484px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Unicorn-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: 0px -1619px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Unicorn-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -106px -1619px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Unicorn-White {
- background-image: url('~assets/images/sprites/spritesmith-main-13.png');
- background-position: -212px -1619px;
- width: 105px;
- height: 105px;
-}
-.Mount_Body_Unicorn-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-13.png');
background-position: -318px -1619px;
width: 105px;
diff --git a/website/client/assets/css/sprites/spritesmith-main-14.css b/website/client/assets/css/sprites/spritesmith-main-14.css
index 11a8d9fc77..1fa5d0ad2c 100644
--- a/website/client/assets/css/sprites/spritesmith-main-14.css
+++ b/website/client/assets/css/sprites/spritesmith-main-14.css
@@ -1,24 +1,60 @@
-.Mount_Body_Whale-Base {
+.Mount_Body_Unicorn-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1331px -106px;
+ background-position: -1331px -1060px;
width: 105px;
height: 105px;
}
-.Mount_Body_Whale-CottonCandyBlue {
+.Mount_Body_Unicorn-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
background-position: -848px -1122px;
width: 105px;
height: 105px;
}
+.Mount_Body_Unicorn-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-14.png');
+ background-position: 0px -1228px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Unicorn-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-14.png');
+ background-position: -106px -1228px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Unicorn-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-14.png');
+ background-position: -212px -1228px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Unicorn-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-14.png');
+ background-position: -1437px -954px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Whale-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-14.png');
+ background-position: -1543px -742px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Body_Whale-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-14.png');
+ background-position: -1543px -848px;
+ width: 105px;
+ height: 105px;
+}
.Mount_Body_Whale-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1331px -212px;
+ background-position: -1543px -954px;
width: 105px;
height: 105px;
}
.Mount_Body_Whale-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1331px -318px;
+ background-position: -1225px -212px;
width: 105px;
height: 105px;
}
@@ -36,25 +72,25 @@
}
.Mount_Body_Whale-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -742px -1016px;
+ background-position: -1331px -636px;
width: 105px;
height: 105px;
}
.Mount_Body_Whale-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1060px -1122px;
+ background-position: -1331px -742px;
width: 105px;
height: 105px;
}
.Mount_Body_Whale-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1166px -1122px;
+ background-position: -1331px -848px;
width: 105px;
height: 105px;
}
.Mount_Body_Whale-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1331px 0px;
+ background-position: -1331px -954px;
width: 105px;
height: 105px;
}
@@ -198,361 +234,361 @@
}
.Mount_Body_Yarn-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1331px -636px;
+ background-position: -1543px -1060px;
width: 105px;
height: 105px;
}
.Mount_Body_Yarn-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1331px -742px;
+ background-position: -1543px -1166px;
width: 105px;
height: 105px;
}
.Mount_Body_Yarn-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -318px;
+ background-position: -1543px -1272px;
width: 105px;
height: 105px;
}
.Mount_Body_Yarn-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -106px;
+ background-position: 0px -1440px;
width: 105px;
height: 105px;
}
.Mount_Body_Yarn-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -212px;
+ background-position: -106px -1440px;
width: 105px;
height: 105px;
}
.Mount_Body_Yarn-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -318px;
+ background-position: -212px -1440px;
width: 105px;
height: 105px;
}
.Mount_Body_Yarn-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -424px;
+ background-position: -318px -1440px;
width: 105px;
height: 105px;
}
.Mount_Body_Yarn-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -530px;
+ background-position: -424px -1546px;
width: 105px;
height: 105px;
}
.Mount_Body_Yarn-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -636px;
+ background-position: -907px -451px;
width: 105px;
height: 105px;
}
.Mount_Body_Yarn-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -742px;
+ background-position: -907px -557px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -848px;
+ background-position: -907px -663px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -954px;
+ background-position: 0px -804px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -1060px;
+ background-position: -106px -804px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -1272px;
+ background-position: -212px -804px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -907px -451px;
+ background-position: -318px -804px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -907px -557px;
+ background-position: -424px -804px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -907px -663px;
+ background-position: -530px -804px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: 0px -804px;
+ background-position: -636px -804px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -106px -804px;
+ background-position: -742px -804px;
width: 105px;
height: 105px;
}
.Mount_Head_Armadillo-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -212px -804px;
+ background-position: -848px -804px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -318px -804px;
+ background-position: -1013px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -424px -804px;
+ background-position: -1013px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -530px -804px;
+ background-position: -1013px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -636px -804px;
+ background-position: -1013px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -742px -804px;
+ background-position: -1013px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -848px -804px;
+ background-position: -1013px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1013px 0px;
+ background-position: -1013px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1013px -106px;
+ background-position: -1013px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1013px -212px;
+ background-position: 0px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Axolotl-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1013px -318px;
+ background-position: -106px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1013px -424px;
+ background-position: -212px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1013px -530px;
+ background-position: -318px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1013px -636px;
+ background-position: -424px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1013px -742px;
+ background-position: -530px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: 0px -910px;
+ background-position: -636px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -106px -910px;
+ background-position: -742px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -212px -910px;
+ background-position: -848px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -318px -910px;
+ background-position: -954px -910px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -424px -910px;
+ background-position: -1119px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Badger-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -530px -910px;
+ background-position: -1119px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -636px -910px;
+ background-position: -1119px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -742px -910px;
+ background-position: -1119px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -848px -910px;
+ background-position: -1119px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -954px -910px;
+ background-position: -1119px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1119px 0px;
+ background-position: -1119px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1119px -106px;
+ background-position: -1119px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1119px -212px;
+ background-position: -1119px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1119px -318px;
+ background-position: 0px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1119px -424px;
+ background-position: -106px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1119px -530px;
+ background-position: -212px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1119px -636px;
+ background-position: -318px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1119px -742px;
+ background-position: -424px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1119px -848px;
+ background-position: -530px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Polar {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: 0px -1016px;
+ background-position: -636px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -106px -1016px;
+ background-position: -742px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -212px -1016px;
+ background-position: -848px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -318px -1016px;
+ background-position: -954px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -424px -1016px;
+ background-position: -1060px -1016px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -530px -1016px;
+ background-position: -1225px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -636px -1016px;
+ background-position: -1225px -106px;
width: 105px;
height: 105px;
}
@@ -564,139 +600,139 @@
}
.Mount_Head_BearCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -848px -1016px;
+ background-position: -1225px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -954px -1016px;
+ background-position: -1225px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_BearCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1060px -1016px;
+ background-position: -1225px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px 0px;
+ background-position: -1225px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px -106px;
+ background-position: -1225px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px -212px;
+ background-position: -1225px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px -318px;
+ background-position: -1225px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px -424px;
+ background-position: 0px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px -530px;
+ background-position: -106px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px -636px;
+ background-position: -212px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px -742px;
+ background-position: -318px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px -848px;
+ background-position: -424px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Beetle-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1225px -954px;
+ background-position: -530px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: 0px -1122px;
+ background-position: -636px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -106px -1122px;
+ background-position: -742px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -212px -1122px;
+ background-position: -907px -345px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -318px -1122px;
+ background-position: -954px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -424px -1122px;
+ background-position: -1060px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -530px -1122px;
+ background-position: -1166px -1122px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -636px -1122px;
+ background-position: -1331px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -742px -1122px;
+ background-position: -1331px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -907px -345px;
+ background-position: -1331px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Bunny-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -954px -1122px;
+ background-position: -1331px -318px;
width: 105px;
height: 105px;
}
@@ -762,115 +798,115 @@
}
.Mount_Head_Cactus-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1331px -848px;
+ background-position: -318px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1331px -954px;
+ background-position: -424px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1331px -1060px;
+ background-position: -530px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: 0px -1228px;
+ background-position: -636px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -106px -1228px;
+ background-position: -742px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -212px -1228px;
+ background-position: -848px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -318px -1228px;
+ background-position: -954px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -424px -1228px;
+ background-position: -1060px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -530px -1228px;
+ background-position: -1166px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -636px -1228px;
+ background-position: -1272px -1228px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -742px -1228px;
+ background-position: -1437px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -848px -1228px;
+ background-position: -1437px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -954px -1228px;
+ background-position: -1437px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1060px -1228px;
+ background-position: -1437px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1166px -1228px;
+ background-position: -1437px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1272px -1228px;
+ background-position: -1437px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px 0px;
+ background-position: -1437px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -106px;
+ background-position: -1437px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -212px;
+ background-position: -1437px -848px;
width: 105px;
height: 105px;
}
@@ -882,139 +918,139 @@
}
.Mount_Head_Cactus-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -424px;
+ background-position: -1437px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -530px;
+ background-position: -1437px -1166px;
width: 105px;
height: 105px;
}
.Mount_Head_Cactus-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -636px;
+ background-position: 0px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -742px;
+ background-position: -106px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -848px;
+ background-position: -212px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -954px;
+ background-position: -318px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -1060px;
+ background-position: -424px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1437px -1166px;
+ background-position: -530px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: 0px -1334px;
+ background-position: -636px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -106px -1334px;
+ background-position: -742px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -212px -1334px;
+ background-position: -848px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -318px -1334px;
+ background-position: -954px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cheetah-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -424px -1334px;
+ background-position: -1060px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -530px -1334px;
+ background-position: -1166px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -636px -1334px;
+ background-position: -1272px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -742px -1334px;
+ background-position: -1378px -1334px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -848px -1334px;
+ background-position: -1543px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -954px -1334px;
+ background-position: -1543px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1060px -1334px;
+ background-position: -1543px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1166px -1334px;
+ background-position: -1543px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1272px -1334px;
+ background-position: -1543px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1378px -1334px;
+ background-position: -1543px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Cow-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px 0px;
+ background-position: -1543px -636px;
width: 105px;
height: 105px;
}
@@ -1080,175 +1116,175 @@
}
.Mount_Head_Deer-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -1166px;
+ background-position: -424px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Deer-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1543px -1272px;
+ background-position: -530px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Deer-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: 0px -1440px;
+ background-position: -636px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Deer-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -106px -1440px;
+ background-position: -742px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Deer-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -212px -1440px;
+ background-position: -848px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Deer-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -318px -1440px;
+ background-position: -954px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Deer-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -424px -1440px;
+ background-position: -1060px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Deer-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -530px -1440px;
+ background-position: -1166px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Deer-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -636px -1440px;
+ background-position: -1272px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Deer-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -742px -1440px;
+ background-position: -1378px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -848px -1440px;
+ background-position: -1484px -1440px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -954px -1440px;
+ background-position: -1649px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1060px -1440px;
+ background-position: -1649px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1166px -1440px;
+ background-position: -1649px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1272px -1440px;
+ background-position: -1649px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1378px -1440px;
+ background-position: -1649px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1484px -1440px;
+ background-position: -1649px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px 0px;
+ background-position: -1649px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -106px;
+ background-position: -1649px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -212px;
+ background-position: -1649px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -318px;
+ background-position: -1649px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -424px;
+ background-position: -1649px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -530px;
+ background-position: -1649px -1166px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -636px;
+ background-position: -1649px -1272px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -742px;
+ background-position: -1649px -1378px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -848px;
+ background-position: 0px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -954px;
+ background-position: -106px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -1060px;
+ background-position: -212px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -1166px;
+ background-position: -318px -1546px;
width: 105px;
height: 105px;
}
@@ -1260,119 +1296,83 @@
}
.Mount_Head_Dragon-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1649px -1378px;
+ background-position: -530px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: 0px -1546px;
+ background-position: -636px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Dragon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -106px -1546px;
+ background-position: -742px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-Base {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -212px -1546px;
+ background-position: -848px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -318px -1546px;
+ background-position: -954px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -424px -1546px;
+ background-position: -1060px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -530px -1546px;
+ background-position: -1166px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -636px -1546px;
+ background-position: -1272px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-Red {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -742px -1546px;
+ background-position: -1378px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -848px -1546px;
+ background-position: -1484px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -954px -1546px;
+ background-position: -1590px -1546px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-White {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1060px -1546px;
+ background-position: -1755px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Egg-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1166px -1546px;
+ background-position: -1755px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Falcon-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1272px -1546px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Falcon-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1378px -1546px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Falcon-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1484px -1546px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Falcon-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1590px -1546px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Falcon-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1755px 0px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Falcon-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-14.png');
- background-position: -1755px -106px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Falcon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-14.png');
background-position: -1755px -212px;
width: 105px;
diff --git a/website/client/assets/css/sprites/spritesmith-main-15.css b/website/client/assets/css/sprites/spritesmith-main-15.css
index 1d50bd4e72..acf1264cf7 100644
--- a/website/client/assets/css/sprites/spritesmith-main-15.css
+++ b/website/client/assets/css/sprites/spritesmith-main-15.css
@@ -1,195 +1,231 @@
-.Mount_Head_Falcon-Skeleton {
+.Mount_Head_Falcon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -321px -357px;
+ background-position: -318px -578px;
width: 105px;
height: 105px;
}
-.Mount_Head_Falcon-White {
+.Mount_Head_Falcon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -212px -1108px;
width: 105px;
height: 105px;
}
-.Mount_Head_Falcon-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -742px -684px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Ferret-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -878px -318px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Ferret-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -878px -424px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Ferret-CottonCandyPink {
+.Mount_Head_Falcon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -878px -530px;
width: 105px;
height: 105px;
}
-.Mount_Head_Ferret-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -878px -636px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Ferret-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -790px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Ferret-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -790px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Ferret-Shade {
+.Mount_Head_Falcon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -212px -790px;
width: 105px;
height: 105px;
}
-.Mount_Head_Ferret-Skeleton {
+.Mount_Head_Falcon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -318px -790px;
width: 105px;
height: 105px;
}
-.Mount_Head_Ferret-White {
+.Mount_Head_Falcon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -424px -790px;
width: 105px;
height: 105px;
}
-.Mount_Head_Ferret-Zombie {
+.Mount_Head_Falcon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -530px -790px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Aquatic {
+.Mount_Head_Falcon-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -1060px;
+ background-position: -636px -790px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Base {
+.Mount_Head_Falcon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -1214px;
+ background-position: -742px -790px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-CottonCandyBlue {
+.Mount_Head_Ferret-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -848px -790px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Ferret-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -984px 0px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Ferret-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -984px -106px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Ferret-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -984px -212px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Ferret-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -530px -1214px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -1214px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_FlyingPig-Cupid {
+.Mount_Head_Ferret-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -742px -1214px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Desert {
+.Mount_Head_Ferret-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -106px;
+ background-position: -1166px -1214px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Ember {
+.Mount_Head_Ferret-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -1272px -1214px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Ferret-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -1408px 0px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Ferret-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -1620px -742px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_FlyingPig-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -427px -357px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Fairy {
+.Mount_Head_FlyingPig-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -560px 0px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Floral {
+.Mount_Head_FlyingPig-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -560px -106px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Ghost {
+.Mount_Head_FlyingPig-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -560px -212px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Golden {
+.Mount_Head_FlyingPig-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -560px -318px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Holly {
+.Mount_Head_FlyingPig-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -472px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Peppermint {
+.Mount_Head_FlyingPig-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -106px -472px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Red {
+.Mount_Head_FlyingPig-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -212px -472px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-RoyalPurple {
+.Mount_Head_FlyingPig-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -318px -472px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Shade {
+.Mount_Head_FlyingPig-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -424px -472px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Shimmer {
+.Mount_Head_FlyingPig-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -530px -472px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Skeleton {
+.Mount_Head_FlyingPig-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -666px 0px;
width: 105px;
height: 105px;
}
-.Mount_Head_FlyingPig-Spooky {
+.Mount_Head_FlyingPig-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -666px -106px;
width: 105px;
height: 105px;
}
+.Mount_Head_FlyingPig-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -666px -212px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_FlyingPig-RoyalPurple {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -666px -318px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_FlyingPig-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -666px -424px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_FlyingPig-Shimmer {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: 0px -578px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_FlyingPig-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -106px -578px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_FlyingPig-Spooky {
+ background-image: url('~assets/images/sprites/spritesmith-main-15.png');
+ background-position: -212px -578px;
+ width: 105px;
+ height: 105px;
+}
.Mount_Head_FlyingPig-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: 0px -121px;
@@ -198,133 +234,133 @@
}
.Mount_Head_FlyingPig-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -666px -318px;
+ background-position: -424px -578px;
width: 105px;
height: 105px;
}
.Mount_Head_FlyingPig-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -666px -424px;
+ background-position: -530px -578px;
width: 105px;
height: 105px;
}
.Mount_Head_FlyingPig-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -578px;
+ background-position: -636px -578px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -578px;
+ background-position: -772px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -212px -578px;
+ background-position: -772px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -318px -578px;
+ background-position: -772px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -424px -578px;
+ background-position: -772px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -530px -578px;
+ background-position: -772px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -578px;
+ background-position: -772px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -772px 0px;
+ background-position: 0px -684px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -772px -106px;
+ background-position: -106px -684px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -772px -212px;
+ background-position: -212px -684px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -772px -318px;
+ background-position: -318px -684px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -772px -424px;
+ background-position: -424px -684px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -772px -530px;
+ background-position: -530px -684px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -684px;
+ background-position: -636px -684px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -684px;
+ background-position: -742px -684px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -212px -684px;
+ background-position: -878px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -318px -684px;
+ background-position: -878px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -424px -684px;
+ background-position: -878px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -530px -684px;
+ background-position: -878px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -684px;
+ background-position: -878px -424px;
width: 105px;
height: 105px;
}
@@ -336,19 +372,19 @@
}
.Mount_Head_Fox-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -878px 0px;
+ background-position: -878px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -878px -106px;
+ background-position: 0px -790px;
width: 105px;
height: 105px;
}
.Mount_Head_Fox-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -878px -212px;
+ background-position: -106px -790px;
width: 105px;
height: 105px;
}
@@ -414,313 +450,313 @@
}
.Mount_Head_Gryphon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -790px;
+ background-position: -984px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -742px -790px;
+ background-position: -984px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -848px -790px;
+ background-position: -984px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -984px 0px;
+ background-position: -984px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -984px -106px;
+ background-position: -984px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -984px -212px;
+ background-position: 0px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -984px -318px;
+ background-position: -106px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -984px -424px;
+ background-position: -212px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -984px -530px;
+ background-position: -318px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -984px -636px;
+ background-position: -424px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_Gryphon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -984px -742px;
+ background-position: -530px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -896px;
+ background-position: -636px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -896px;
+ background-position: -742px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -212px -896px;
+ background-position: -848px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -318px -896px;
+ background-position: -954px -896px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -424px -896px;
+ background-position: -1090px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -530px -896px;
+ background-position: -1090px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -896px;
+ background-position: -1090px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -742px -896px;
+ background-position: -1090px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -848px -896px;
+ background-position: -1090px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_GuineaPig-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -954px -896px;
+ background-position: -1090px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1090px 0px;
+ background-position: -1090px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1090px -106px;
+ background-position: -1090px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1090px -212px;
+ background-position: -1090px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1090px -318px;
+ background-position: 0px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1090px -424px;
+ background-position: -106px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1090px -530px;
+ background-position: -212px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1090px -636px;
+ background-position: -318px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1090px -742px;
+ background-position: -424px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1090px -848px;
+ background-position: -530px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hedgehog-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -1002px;
+ background-position: -636px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -1002px;
+ background-position: -742px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -212px -1002px;
+ background-position: -848px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -318px -1002px;
+ background-position: -954px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -424px -1002px;
+ background-position: -1060px -1002px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -530px -1002px;
+ background-position: -1196px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -1002px;
+ background-position: -1196px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -742px -1002px;
+ background-position: -1196px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -848px -1002px;
+ background-position: -1196px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -954px -1002px;
+ background-position: -1196px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippo-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1060px -1002px;
+ background-position: -1196px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Hippogriff-Hopeful {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px 0px;
+ background-position: -1196px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px -106px;
+ background-position: -1196px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px -212px;
+ background-position: -1196px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px -318px;
+ background-position: -1196px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px -424px;
+ background-position: 0px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px -530px;
+ background-position: -106px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px -636px;
+ background-position: -321px -357px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px -742px;
+ background-position: -318px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px -848px;
+ background-position: -424px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1196px -954px;
+ background-position: -530px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_Horse-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -1108px;
+ background-position: -636px -1108px;
width: 105px;
height: 105px;
}
@@ -738,115 +774,115 @@
}
.Mount_Head_Jackalope-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -1108px;
+ background-position: -742px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -424px -1108px;
+ background-position: -1060px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -530px -1108px;
+ background-position: -1166px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -1108px;
+ background-position: -1302px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -742px -1108px;
+ background-position: -1302px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -848px -1108px;
+ background-position: -1302px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -954px -1108px;
+ background-position: -1302px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1060px -1108px;
+ background-position: -1302px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Ethereal {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1166px -1108px;
+ background-position: -1302px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px 0px;
+ background-position: -1302px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -106px;
+ background-position: -1302px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -212px;
+ background-position: -1302px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -318px;
+ background-position: -1302px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -424px;
+ background-position: -1302px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -530px;
+ background-position: 0px -1214px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -636px;
+ background-position: -106px -1214px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -742px;
+ background-position: -212px -1214px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -848px;
+ background-position: -318px -1214px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1302px -954px;
+ background-position: -424px -1214px;
width: 105px;
height: 105px;
}
@@ -858,7 +894,7 @@
}
.Mount_Head_LionCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -1214px;
+ background-position: -636px -1214px;
width: 105px;
height: 105px;
}
@@ -870,19 +906,19 @@
}
.Mount_Head_LionCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -212px -1214px;
+ background-position: -848px -1214px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -318px -1214px;
+ background-position: -954px -1214px;
width: 105px;
height: 105px;
}
.Mount_Head_LionCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -424px -1214px;
+ background-position: -1060px -1214px;
width: 105px;
height: 105px;
}
@@ -906,361 +942,361 @@
}
.Mount_Head_Monkey-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -848px -1214px;
+ background-position: -1408px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Monkey-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -954px -1214px;
+ background-position: -1408px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Monkey-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1060px -1214px;
+ background-position: -1408px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Monkey-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1166px -1214px;
+ background-position: -1408px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Monkey-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1272px -1214px;
+ background-position: -1408px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Monkey-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px 0px;
+ background-position: -1408px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Monkey-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -106px;
+ background-position: -1408px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Monkey-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -212px;
+ background-position: -1408px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Monkey-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -318px;
+ background-position: -1408px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Monkey-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -424px;
+ background-position: -1408px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -530px;
+ background-position: -1408px -1166px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -636px;
+ background-position: 0px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -742px;
+ background-position: -106px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -848px;
+ background-position: -212px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -954px;
+ background-position: -318px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -1060px;
+ background-position: -424px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1408px -1166px;
+ background-position: -530px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -1320px;
+ background-position: -636px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -1320px;
+ background-position: -742px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Nudibranch-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -212px -1320px;
+ background-position: -848px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -318px -1320px;
+ background-position: -954px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -424px -1320px;
+ background-position: -1060px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -530px -1320px;
+ background-position: -1166px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -1320px;
+ background-position: -1272px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -742px -1320px;
+ background-position: -1378px -1320px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -848px -1320px;
+ background-position: -1514px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -954px -1320px;
+ background-position: -1514px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1060px -1320px;
+ background-position: -1514px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1166px -1320px;
+ background-position: -1514px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Octopus-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1272px -1320px;
+ background-position: -1514px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Orca-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1378px -1320px;
+ background-position: -1514px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px 0px;
+ background-position: -1514px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -106px;
+ background-position: -1514px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -212px;
+ background-position: -1514px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -318px;
+ background-position: -1514px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -424px;
+ background-position: -1514px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -530px;
+ background-position: -1514px -1166px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -636px;
+ background-position: -1514px -1272px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -742px;
+ background-position: 0px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -848px;
+ background-position: -106px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_Owl-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -954px;
+ background-position: -212px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -1060px;
+ background-position: -318px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -1166px;
+ background-position: -424px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1514px -1272px;
+ background-position: -530px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -1426px;
+ background-position: -636px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -1426px;
+ background-position: -742px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -212px -1426px;
+ background-position: -848px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -318px -1426px;
+ background-position: -954px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -424px -1426px;
+ background-position: -1060px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -530px -1426px;
+ background-position: -1166px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -1426px;
+ background-position: -1272px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -742px -1426px;
+ background-position: -1378px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -848px -1426px;
+ background-position: -1484px -1426px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -954px -1426px;
+ background-position: -1620px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1060px -1426px;
+ background-position: -1620px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1166px -1426px;
+ background-position: -1620px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1272px -1426px;
+ background-position: -1620px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1378px -1426px;
+ background-position: -1620px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1484px -1426px;
+ background-position: -1620px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px 0px;
+ background-position: -1620px -636px;
width: 105px;
height: 105px;
}
@@ -1272,199 +1308,163 @@
}
.Mount_Head_PandaCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -212px;
+ background-position: -1620px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -318px;
+ background-position: -1620px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_PandaCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -424px;
+ background-position: -1620px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -530px;
+ background-position: -1620px -1166px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -636px;
+ background-position: -1620px -1272px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -742px;
+ background-position: -1620px -1378px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -848px;
+ background-position: 0px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -954px;
+ background-position: -106px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -1060px;
+ background-position: -212px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -1166px;
+ background-position: -318px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -1272px;
+ background-position: -424px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1620px -1378px;
+ background-position: -530px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Parrot-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: 0px -1532px;
+ background-position: -636px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -106px -1532px;
+ background-position: -742px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -212px -1532px;
+ background-position: -848px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -318px -1532px;
+ background-position: -954px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -424px -1532px;
+ background-position: -1060px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -530px -1532px;
+ background-position: -1166px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-Red {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -636px -1532px;
+ background-position: -1272px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -742px -1532px;
+ background-position: -1378px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -848px -1532px;
+ background-position: -1484px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-White {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -954px -1532px;
+ background-position: -1590px -1532px;
width: 105px;
height: 105px;
}
.Mount_Head_Peacock-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1060px -1532px;
+ background-position: -1726px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Penguin-Base {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1166px -1532px;
+ background-position: -1726px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Penguin-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1272px -1532px;
+ background-position: -954px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_Penguin-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1378px -1532px;
+ background-position: -848px -1108px;
width: 105px;
height: 105px;
}
.Mount_Head_Penguin-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1484px -1532px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Penguin-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1590px -1532px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Penguin-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1726px 0px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Penguin-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -1726px -106px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Penguin-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-15.png');
background-position: -1726px -212px;
width: 105px;
height: 105px;
}
-.Mount_Head_Penguin-White {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -318px -1108px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Penguin-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-15.png');
- background-position: -666px -212px;
- width: 105px;
- height: 105px;
-}
diff --git a/website/client/assets/css/sprites/spritesmith-main-16.css b/website/client/assets/css/sprites/spritesmith-main-16.css
index 767d06ab57..8c48941aa3 100644
--- a/website/client/assets/css/sprites/spritesmith-main-16.css
+++ b/website/client/assets/css/sprites/spritesmith-main-16.css
@@ -1,252 +1,288 @@
-.Mount_Head_Phoenix-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -816px -575px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Pterodactyl-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -318px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Pterodactyl-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -816px -681px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Pterodactyl-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: 0px -816px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Pterodactyl-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -106px -816px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Pterodactyl-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -212px -816px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Pterodactyl-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -318px -816px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Pterodactyl-Shade {
+.Mount_Head_Penguin-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
background-position: -424px -816px;
width: 105px;
height: 105px;
}
-.Mount_Head_Pterodactyl-Skeleton {
+.Mount_Head_Penguin-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -1240px -530px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Penguin-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
background-position: -530px -816px;
width: 105px;
height: 105px;
}
-.Mount_Head_Pterodactyl-White {
+.Mount_Head_Penguin-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
background-position: -636px -816px;
width: 105px;
height: 105px;
}
-.Mount_Head_Pterodactyl-Zombie {
+.Mount_Head_Penguin-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
background-position: -742px -816px;
width: 105px;
height: 105px;
}
+.Mount_Head_Penguin-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -922px 0px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Phoenix-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -922px -106px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -922px -212px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -922px -318px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -922px -424px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -922px -530px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -318px -1346px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -1452px -424px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -1452px -530px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -1452px -636px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -1452px -742px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Pterodactyl-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-16.png');
+ background-position: -1452px -848px;
+ width: 105px;
+ height: 105px;
+}
.Mount_Head_Rat-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -954px;
+ background-position: -1452px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Rat-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1166px -1346px;
+ background-position: -1452px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_Rat-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1272px -1346px;
+ background-position: -1452px -1166px;
width: 105px;
height: 105px;
}
.Mount_Head_Rat-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px 0px;
+ background-position: -1452px -1272px;
width: 105px;
height: 105px;
}
.Mount_Head_Rat-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -106px;
+ background-position: 0px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Rat-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -212px;
+ background-position: -1664px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Rat-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -318px;
+ background-position: -1664px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Rat-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -424px;
+ background-position: -1664px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Rat-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -530px;
+ background-position: -1664px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Rat-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -636px;
+ background-position: -1664px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -742px;
+ background-position: -1664px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -954px -1558px;
+ background-position: -1664px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1060px -1558px;
+ background-position: -1664px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1166px -1558px;
+ background-position: -1664px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1272px -1558px;
+ background-position: -1664px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1378px -1558px;
+ background-position: -1664px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1484px -1558px;
+ background-position: -1664px -1166px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px 0px;
+ background-position: -1664px -1272px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -106px;
+ background-position: -665px -680px;
width: 105px;
height: 105px;
}
.Mount_Head_Rock-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -212px;
+ background-position: -816px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -318px;
+ background-position: -816px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -424px;
+ background-position: -816px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -530px;
+ background-position: -816px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -636px;
+ background-position: -816px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -742px;
+ background-position: -816px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -848px;
+ background-position: -816px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -954px;
+ background-position: 0px -816px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -816px -257px;
+ background-position: -106px -816px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -816px -363px;
+ background-position: -212px -816px;
width: 105px;
height: 105px;
}
.Mount_Head_Rooster-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -816px -469px;
+ background-position: -318px -816px;
width: 105px;
height: 105px;
}
.Mount_Head_Sabretooth-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -544px -408px;
+ background-position: -544px -136px;
width: 135px;
height: 135px;
}
@@ -306,421 +342,421 @@
}
.Mount_Head_Seahorse-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -952px 0px;
+ background-position: -922px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Seahorse-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -952px -106px;
+ background-position: -922px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Seahorse-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -952px -212px;
+ background-position: 0px -922px;
width: 105px;
height: 105px;
}
.Mount_Head_Seahorse-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -952px -318px;
+ background-position: -106px -922px;
width: 105px;
height: 105px;
}
.Mount_Head_Seahorse-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -952px -424px;
+ background-position: -212px -922px;
width: 105px;
height: 105px;
}
.Mount_Head_Seahorse-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -952px -530px;
+ background-position: -318px -922px;
width: 105px;
height: 105px;
}
.Mount_Head_Seahorse-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -952px -636px;
+ background-position: -424px -922px;
width: 105px;
height: 105px;
}
.Mount_Head_Seahorse-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -952px -742px;
+ background-position: -530px -922px;
width: 105px;
height: 105px;
}
.Mount_Head_Seahorse-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: 0px -922px;
+ background-position: -636px -922px;
width: 105px;
height: 105px;
}
.Mount_Head_Seahorse-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -106px -922px;
+ background-position: -742px -922px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -212px -922px;
+ background-position: -848px -922px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -318px -922px;
+ background-position: -1028px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -424px -922px;
+ background-position: -1028px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -530px -922px;
+ background-position: -1028px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -636px -922px;
+ background-position: -1028px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -742px -922px;
+ background-position: -1028px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -848px -922px;
+ background-position: -1028px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1058px 0px;
+ background-position: -1028px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1058px -106px;
+ background-position: -1028px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Sheep-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1058px -212px;
+ background-position: -1028px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1058px -318px;
+ background-position: 0px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1058px -424px;
+ background-position: -106px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1058px -530px;
+ background-position: -212px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1058px -636px;
+ background-position: -318px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1058px -742px;
+ background-position: -424px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1058px -848px;
+ background-position: -530px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: 0px -1028px;
+ background-position: -636px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -106px -1028px;
+ background-position: -742px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -212px -1028px;
+ background-position: -848px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Slime-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -318px -1028px;
+ background-position: -954px -1028px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -424px -1028px;
+ background-position: -1134px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -530px -1028px;
+ background-position: -1134px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -636px -1028px;
+ background-position: -1134px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -742px -1028px;
+ background-position: -1134px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -848px -1028px;
+ background-position: -1134px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -954px -1028px;
+ background-position: -1134px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px 0px;
+ background-position: -1134px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px -106px;
+ background-position: -1134px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px -212px;
+ background-position: -1134px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Sloth-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px -318px;
+ background-position: -1134px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px -424px;
+ background-position: 0px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px -530px;
+ background-position: -106px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px -636px;
+ background-position: -212px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px -742px;
+ background-position: -318px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px -848px;
+ background-position: -424px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1164px -954px;
+ background-position: -530px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: 0px -1134px;
+ background-position: -636px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -106px -1134px;
+ background-position: -742px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -212px -1134px;
+ background-position: -848px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snail-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -318px -1134px;
+ background-position: -954px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -424px -1134px;
+ background-position: -1060px -1134px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -530px -1134px;
+ background-position: -1240px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -636px -1134px;
+ background-position: -1240px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -742px -1134px;
+ background-position: -1240px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -848px -1134px;
+ background-position: -1240px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -954px -1134px;
+ background-position: -1240px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1060px -1134px;
+ background-position: -1664px -1378px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px 0px;
+ background-position: -1240px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -106px;
+ background-position: -1240px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Snake-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -212px;
+ background-position: -1240px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1694px -1060px;
+ background-position: -1240px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -424px;
+ background-position: -1240px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -530px;
+ background-position: 0px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -636px;
+ background-position: -106px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -742px;
+ background-position: -212px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -848px;
+ background-position: -318px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -954px;
+ background-position: -424px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1270px -1060px;
+ background-position: -530px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: 0px -1240px;
+ background-position: -636px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_Spider-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -106px -1240px;
+ background-position: -742px -1240px;
width: 105px;
height: 105px;
}
@@ -756,7 +792,7 @@
}
.Mount_Head_TRex-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -544px -136px;
+ background-position: 0px 0px;
width: 135px;
height: 135px;
}
@@ -768,7 +804,7 @@
}
.Mount_Head_TRex-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: 0px 0px;
+ background-position: -544px -408px;
width: 135px;
height: 135px;
}
@@ -786,451 +822,451 @@
}
.Mount_Head_TigerCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -212px -1240px;
+ background-position: -848px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -318px -1240px;
+ background-position: -954px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -424px -1240px;
+ background-position: -1060px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -530px -1240px;
+ background-position: -1166px -1240px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -636px -1240px;
+ background-position: -1346px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -742px -1240px;
+ background-position: -1346px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -848px -1240px;
+ background-position: -1346px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -954px -1240px;
+ background-position: -1346px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1060px -1240px;
+ background-position: -1346px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1166px -1240px;
+ background-position: -1346px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px 0px;
+ background-position: -1346px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -106px;
+ background-position: -1346px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -212px;
+ background-position: -1346px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -318px;
+ background-position: -1346px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -424px;
+ background-position: -1346px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -530px;
+ background-position: -1346px -1166px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -636px;
+ background-position: 0px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -742px;
+ background-position: -106px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -848px;
+ background-position: -212px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -816px -136px;
+ background-position: -544px -680px;
width: 120px;
height: 120px;
}
.Mount_Head_TigerCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -1060px;
+ background-position: -424px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1376px -1166px;
+ background-position: -530px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_TigerCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: 0px -1346px;
+ background-position: -636px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -106px -1346px;
+ background-position: -742px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -212px -1346px;
+ background-position: -848px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -318px -1346px;
+ background-position: -954px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -424px -1346px;
+ background-position: -1060px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -530px -1346px;
+ background-position: -1166px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -636px -1346px;
+ background-position: -1272px -1346px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -742px -1346px;
+ background-position: -1452px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -848px -1346px;
+ background-position: -1452px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -954px -1346px;
+ background-position: -1452px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Treeling-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1060px -1346px;
+ background-position: -1452px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -848px;
+ background-position: -106px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -954px;
+ background-position: -212px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -1060px;
+ background-position: -318px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -1166px;
+ background-position: -424px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1482px -1272px;
+ background-position: -530px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: 0px -1452px;
+ background-position: -636px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -106px -1452px;
+ background-position: -742px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -212px -1452px;
+ background-position: -848px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -318px -1452px;
+ background-position: -954px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Triceratops-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -424px -1452px;
+ background-position: -1060px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Turkey-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -530px -1452px;
+ background-position: -1166px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Turkey-Gilded {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -636px -1452px;
+ background-position: -1272px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -742px -1452px;
+ background-position: -1378px -1452px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -848px -1452px;
+ background-position: -1558px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -954px -1452px;
+ background-position: -1558px -106px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1060px -1452px;
+ background-position: -1558px -212px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1166px -1452px;
+ background-position: -1558px -318px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1272px -1452px;
+ background-position: -1558px -424px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1378px -1452px;
+ background-position: -1558px -530px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px 0px;
+ background-position: -1558px -636px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -106px;
+ background-position: -1558px -742px;
width: 105px;
height: 105px;
}
.Mount_Head_Turtle-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -212px;
+ background-position: -1558px -848px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -318px;
+ background-position: -1558px -954px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -424px;
+ background-position: -1558px -1060px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -530px;
+ background-position: -1558px -1166px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -636px;
+ background-position: -1558px -1272px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -742px;
+ background-position: -1558px -1378px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -848px;
+ background-position: 0px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -954px;
+ background-position: -106px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -1060px;
+ background-position: -212px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -1166px;
+ background-position: -318px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Unicorn-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -1272px;
+ background-position: -424px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-Base {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -1588px -1378px;
+ background-position: -530px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: 0px -1558px;
+ background-position: -636px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -106px -1558px;
+ background-position: -742px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -212px -1558px;
+ background-position: -848px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -318px -1558px;
+ background-position: -954px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-Red {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -424px -1558px;
+ background-position: -1060px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -530px -1558px;
+ background-position: -1166px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -636px -1558px;
+ background-position: -1272px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-White {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -742px -1558px;
+ background-position: -1378px -1558px;
width: 105px;
height: 105px;
}
.Mount_Head_Whale-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -848px -1558px;
+ background-position: -1484px -1558px;
width: 105px;
height: 105px;
}
@@ -1302,35 +1338,17 @@
}
.Mount_Head_Wolf-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -408px -680px;
+ background-position: -408px -272px;
width: 135px;
height: 135px;
}
.Mount_Head_Wolf-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -544px -680px;
+ background-position: -408px -680px;
width: 135px;
height: 135px;
}
.Mount_Head_Wolf-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -680px -680px;
- width: 135px;
- height: 135px;
-}
-.Mount_Head_Wolf-RoyalPurple {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -408px -272px;
- width: 135px;
- height: 135px;
-}
-.Mount_Head_Wolf-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-16.png');
- background-position: -816px 0px;
- width: 135px;
- height: 135px;
-}
-.Mount_Head_Wolf-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-16.png');
background-position: -136px 0px;
width: 135px;
diff --git a/website/client/assets/css/sprites/spritesmith-main-17.css b/website/client/assets/css/sprites/spritesmith-main-17.css
index f91b3fcdf1..06a9c8c5ef 100644
--- a/website/client/assets/css/sprites/spritesmith-main-17.css
+++ b/website/client/assets/css/sprites/spritesmith-main-17.css
@@ -1,1938 +1,1914 @@
-.Mount_Head_Wolf-Skeleton {
+.Mount_Head_Wolf-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
background-position: 0px 0px;
width: 135px;
height: 135px;
}
-.Mount_Head_Wolf-Spooky {
+.Mount_Head_Wolf-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
background-position: -136px 0px;
width: 135px;
height: 135px;
}
-.Mount_Head_Wolf-StarryNight {
+.Mount_Head_Wolf-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -272px -136px;
+ background-position: -272px -272px;
width: 135px;
height: 135px;
}
-.Mount_Head_Wolf-Thunderstorm {
+.Mount_Head_Wolf-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
background-position: 0px -136px;
width: 135px;
height: 135px;
}
-.Mount_Head_Wolf-White {
+.Mount_Head_Wolf-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
background-position: -136px -136px;
width: 135px;
height: 135px;
}
-.Mount_Head_Wolf-Zombie {
+.Mount_Head_Wolf-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
background-position: -272px 0px;
width: 135px;
height: 135px;
}
-.Mount_Head_Yarn-Base {
+.Mount_Head_Wolf-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -212px -272px;
- width: 105px;
- height: 105px;
+ background-position: -272px -136px;
+ width: 135px;
+ height: 135px;
}
-.Mount_Head_Yarn-CottonCandyBlue {
+.Mount_Head_Wolf-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
background-position: 0px -272px;
- width: 105px;
- height: 105px;
+ width: 135px;
+ height: 135px;
}
-.Mount_Head_Yarn-CottonCandyPink {
+.Mount_Head_Wolf-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -106px -272px;
- width: 105px;
- height: 105px;
+ background-position: -136px -272px;
+ width: 135px;
+ height: 135px;
}
-.Mount_Head_Yarn-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -318px -378px;
- width: 105px;
- height: 105px;
-}
-.Mount_Head_Yarn-Golden {
+.Mount_Head_Yarn-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
background-position: -408px 0px;
width: 105px;
height: 105px;
}
-.Mount_Head_Yarn-Red {
+.Mount_Head_Yarn-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-17.png');
+ background-position: -514px -212px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Yarn-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
background-position: -408px -106px;
width: 105px;
height: 105px;
}
-.Mount_Head_Yarn-Shade {
+.Mount_Head_Yarn-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
background-position: -408px -212px;
width: 105px;
height: 105px;
}
+.Mount_Head_Yarn-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-17.png');
+ background-position: 0px -408px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Yarn-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-17.png');
+ background-position: -106px -408px;
+ width: 105px;
+ height: 105px;
+}
+.Mount_Head_Yarn-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-17.png');
+ background-position: -212px -408px;
+ width: 105px;
+ height: 105px;
+}
.Mount_Head_Yarn-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -378px;
+ background-position: -318px -408px;
width: 105px;
height: 105px;
}
.Mount_Head_Yarn-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -106px -378px;
+ background-position: -514px 0px;
width: 105px;
height: 105px;
}
.Mount_Head_Yarn-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -212px -378px;
+ background-position: -514px -106px;
width: 105px;
height: 105px;
}
.Mount_Icon_Aether-Invisible {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -318px -272px;
+ background-position: -514px -318px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -424px -378px;
+ background-position: -424px -408px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -514px 0px;
+ background-position: 0px -514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -514px -100px;
+ background-position: -82px -514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -514px -200px;
+ background-position: -164px -514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -514px -300px;
+ background-position: -246px -514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -484px;
+ background-position: -328px -514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -484px;
+ background-position: -410px -514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -484px;
+ background-position: -492px -514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -484px;
+ background-position: -620px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Armadillo-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -484px;
+ background-position: -620px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -484px;
+ background-position: -620px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -484px;
+ background-position: -620px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -596px 0px;
+ background-position: -620px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -596px -100px;
+ background-position: -620px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -596px -200px;
+ background-position: -702px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -596px -300px;
+ background-position: -702px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -596px -400px;
+ background-position: -702px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -678px 0px;
+ background-position: -702px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -678px -100px;
+ background-position: -702px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Axolotl-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -678px -200px;
+ background-position: -702px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -678px -300px;
+ background-position: 0px -614px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -678px -400px;
+ background-position: -82px -614px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -584px;
+ background-position: -164px -614px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -584px;
+ background-position: -246px -614px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -584px;
+ background-position: -328px -614px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -584px;
+ background-position: -410px -614px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -584px;
+ background-position: -492px -614px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -584px;
+ background-position: -574px -614px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -584px;
+ background-position: -656px -614px;
width: 81px;
height: 99px;
}
.Mount_Icon_Badger-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -584px;
+ background-position: -784px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -584px;
+ background-position: -784px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -760px 0px;
+ background-position: -784px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -760px -100px;
+ background-position: -784px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -760px -200px;
+ background-position: -784px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -760px -300px;
+ background-position: -784px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -760px -400px;
+ background-position: -784px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -760px -500px;
+ background-position: 0px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -684px;
+ background-position: -82px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -684px;
+ background-position: -164px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -684px;
+ background-position: -246px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -684px;
+ background-position: -328px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -684px;
+ background-position: -410px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -684px;
+ background-position: -492px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Polar {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -684px;
+ background-position: -574px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -684px;
+ background-position: -656px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -684px;
+ background-position: -738px -714px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -684px;
+ background-position: -866px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -842px 0px;
+ background-position: -866px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -842px -100px;
+ background-position: -866px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -842px -200px;
+ background-position: -866px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -842px -300px;
+ background-position: -866px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -842px -400px;
+ background-position: -866px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -842px -500px;
+ background-position: -866px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_BearCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -842px -600px;
+ background-position: -866px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -784px;
+ background-position: 0px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -784px;
+ background-position: -82px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -784px;
+ background-position: -164px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -784px;
+ background-position: -246px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -784px;
+ background-position: -328px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -784px;
+ background-position: -410px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -784px;
+ background-position: -492px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -784px;
+ background-position: -574px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -784px;
+ background-position: -656px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Beetle-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -784px;
+ background-position: -738px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -820px -784px;
+ background-position: -820px -814px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -924px 0px;
+ background-position: -948px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -924px -100px;
+ background-position: -948px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -924px -200px;
+ background-position: -948px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -924px -300px;
+ background-position: -948px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -924px -400px;
+ background-position: -948px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -924px -500px;
+ background-position: -948px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -924px -600px;
+ background-position: -948px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -924px -700px;
+ background-position: -948px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Bunny-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -884px;
+ background-position: -948px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -884px;
+ background-position: 0px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -884px;
+ background-position: -82px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -884px;
+ background-position: -164px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -884px;
+ background-position: -246px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -884px;
+ background-position: -328px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -884px;
+ background-position: -410px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -884px;
+ background-position: -492px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -884px;
+ background-position: -574px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -884px;
+ background-position: -656px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Butterfly-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -820px -884px;
+ background-position: -738px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -902px -884px;
+ background-position: -820px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1006px 0px;
+ background-position: -902px -914px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1006px -100px;
+ background-position: -1030px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1006px -200px;
+ background-position: -1030px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1006px -300px;
+ background-position: -1030px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1006px -400px;
+ background-position: -1030px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1006px -500px;
+ background-position: -1030px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1006px -600px;
+ background-position: -1030px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1006px -700px;
+ background-position: -1030px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1006px -800px;
+ background-position: -1030px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -984px;
+ background-position: -1030px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -984px;
+ background-position: -1030px -900px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -984px;
+ background-position: -1112px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -984px;
+ background-position: -1112px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -984px;
+ background-position: -1112px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -984px;
+ background-position: -1112px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -984px;
+ background-position: -1112px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -984px;
+ background-position: -1112px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -984px;
+ background-position: -1112px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -984px;
+ background-position: -1112px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -820px -984px;
+ background-position: -1112px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -902px -984px;
+ background-position: -1112px -900px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cactus-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -984px -984px;
+ background-position: 0px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px 0px;
+ background-position: -82px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px -100px;
+ background-position: -164px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px -200px;
+ background-position: -246px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px -300px;
+ background-position: -328px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px -400px;
+ background-position: -410px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px -500px;
+ background-position: -492px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px -600px;
+ background-position: -574px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px -700px;
+ background-position: -656px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px -800px;
+ background-position: -738px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cheetah-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1088px -900px;
+ background-position: -820px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px 0px;
+ background-position: -902px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px -100px;
+ background-position: -984px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px -200px;
+ background-position: -1066px -1014px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px -300px;
+ background-position: -1194px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px -400px;
+ background-position: -1194px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px -500px;
+ background-position: -1194px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px -600px;
+ background-position: -1194px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px -700px;
+ background-position: -1194px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px -800px;
+ background-position: -1194px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cow-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1170px -900px;
+ background-position: -1194px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -1084px;
+ background-position: -1194px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -1084px;
+ background-position: -1194px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -1084px;
+ background-position: -1194px -900px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -1084px;
+ background-position: -1194px -1000px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -1084px;
+ background-position: 0px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -1084px;
+ background-position: -82px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -1084px;
+ background-position: -164px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -1084px;
+ background-position: -246px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -1084px;
+ background-position: -328px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Cuttlefish-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -1084px;
+ background-position: -410px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -820px -1084px;
+ background-position: -492px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -902px -1084px;
+ background-position: -574px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -984px -1084px;
+ background-position: -1686px -1200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1066px -1084px;
+ background-position: -738px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1148px -1084px;
+ background-position: -820px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px 0px;
+ background-position: -902px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -100px;
+ background-position: -984px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1066px -1584px;
+ background-position: -1066px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -300px;
+ background-position: -1148px -1114px;
width: 81px;
height: 99px;
}
.Mount_Icon_Deer-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -400px;
+ background-position: -1276px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -500px;
+ background-position: -1276px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -600px;
+ background-position: -1276px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -700px;
+ background-position: -1276px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -800px;
+ background-position: -1276px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -900px;
+ background-position: -1276px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -1000px;
+ background-position: -1276px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -1184px;
+ background-position: -1276px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -1184px;
+ background-position: -1276px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -1184px;
+ background-position: -1276px -900px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -1184px;
+ background-position: -1276px -1000px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -1184px;
+ background-position: -1276px -1100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -1184px;
+ background-position: 0px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -1184px;
+ background-position: -82px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -1184px;
+ background-position: -164px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -1184px;
+ background-position: -246px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -1184px;
+ background-position: -328px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -820px -1184px;
+ background-position: -410px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -902px -1184px;
+ background-position: -492px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -984px -1184px;
+ background-position: -574px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1066px -1184px;
+ background-position: -656px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1148px -1184px;
+ background-position: -738px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1230px -1184px;
+ background-position: -820px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Dragon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px 0px;
+ background-position: -902px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -100px;
+ background-position: -984px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -200px;
+ background-position: -1066px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -300px;
+ background-position: -1148px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -400px;
+ background-position: -1230px -1214px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -500px;
+ background-position: -1358px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -600px;
+ background-position: -1358px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -700px;
+ background-position: -1358px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -800px;
+ background-position: -1358px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -900px;
+ background-position: -1358px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Egg-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -1000px;
+ background-position: -1358px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1334px -1100px;
+ background-position: -1358px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -1284px;
+ background-position: -1358px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -1284px;
+ background-position: -1358px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -1284px;
+ background-position: -1358px -900px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -1284px;
+ background-position: -1358px -1000px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -1284px;
+ background-position: -1358px -1100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -1284px;
+ background-position: -1358px -1200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -1284px;
+ background-position: 0px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -1284px;
+ background-position: -82px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Falcon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -1284px;
+ background-position: -164px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -1284px;
+ background-position: -246px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -820px -1284px;
+ background-position: -328px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -902px -1284px;
+ background-position: -410px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -984px -1284px;
+ background-position: -492px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1066px -1284px;
+ background-position: -574px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1148px -1284px;
+ background-position: -656px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1230px -1284px;
+ background-position: -738px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1312px -1284px;
+ background-position: -820px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px 0px;
+ background-position: -902px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_Ferret-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -100px;
+ background-position: -984px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -200px;
+ background-position: -1066px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -300px;
+ background-position: -1148px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -400px;
+ background-position: -1230px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -500px;
+ background-position: -1312px -1314px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -600px;
+ background-position: -1440px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -700px;
+ background-position: -1440px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -800px;
+ background-position: -1440px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -900px;
+ background-position: -1440px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -1000px;
+ background-position: -1440px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -1100px;
+ background-position: -1440px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1416px -1200px;
+ background-position: -1440px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -1384px;
+ background-position: -1440px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -1384px;
+ background-position: -1440px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -1384px;
+ background-position: -1440px -900px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -1384px;
+ background-position: -1440px -1000px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -1384px;
+ background-position: -1440px -1100px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -1384px;
+ background-position: -1440px -1200px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -1384px;
+ background-position: -1440px -1300px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -1384px;
+ background-position: 0px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -1384px;
+ background-position: -82px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -1384px;
+ background-position: -164px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -820px -1384px;
+ background-position: -246px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_FlyingPig-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -902px -1384px;
+ background-position: -328px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -984px -1384px;
+ background-position: -410px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1066px -1384px;
+ background-position: -492px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1148px -1384px;
+ background-position: -574px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1230px -1384px;
+ background-position: -656px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1312px -1384px;
+ background-position: -738px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1394px -1384px;
+ background-position: -820px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px 0px;
+ background-position: -902px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -100px;
+ background-position: -984px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -200px;
+ background-position: -1066px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -300px;
+ background-position: -1148px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -400px;
+ background-position: -1230px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -500px;
+ background-position: -1312px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -600px;
+ background-position: -1394px -1414px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -700px;
+ background-position: -1522px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -800px;
+ background-position: -1522px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -900px;
+ background-position: -1522px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -1000px;
+ background-position: -1522px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -1100px;
+ background-position: -1522px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -1200px;
+ background-position: -1522px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1498px -1300px;
+ background-position: -1522px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px 0px;
+ background-position: -1522px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -100px;
+ background-position: -1522px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_Fox-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -200px;
+ background-position: -1522px -900px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -300px;
+ background-position: -1522px -1000px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -400px;
+ background-position: -1522px -1100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -500px;
+ background-position: -1522px -1200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -600px;
+ background-position: -1522px -1300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -700px;
+ background-position: -1522px -1400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -800px;
+ background-position: -1604px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -900px;
+ background-position: -1604px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -1000px;
+ background-position: -1604px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -1100px;
+ background-position: -1604px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Frog-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -1200px;
+ background-position: -1604px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1580px -1300px;
+ background-position: -1604px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -1484px;
+ background-position: -1604px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -1484px;
+ background-position: -1604px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -1484px;
+ background-position: -1604px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -1484px;
+ background-position: -1604px -900px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -1484px;
+ background-position: -1604px -1000px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -1484px;
+ background-position: -1604px -1100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -1484px;
+ background-position: -1604px -1200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -1484px;
+ background-position: -1604px -1300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -1484px;
+ background-position: -1604px -1400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Gryphon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -1484px;
+ background-position: 0px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -820px -1484px;
+ background-position: -82px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -902px -1484px;
+ background-position: -164px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -984px -1484px;
+ background-position: -246px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1066px -1484px;
+ background-position: -328px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1148px -1484px;
+ background-position: -410px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1230px -1484px;
+ background-position: -492px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1312px -1484px;
+ background-position: -574px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1394px -1484px;
+ background-position: -656px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1476px -1484px;
+ background-position: -738px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_GuineaPig-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1558px -1484px;
+ background-position: -820px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px 0px;
+ background-position: -902px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -100px;
+ background-position: -984px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -200px;
+ background-position: -1066px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -300px;
+ background-position: -1148px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -400px;
+ background-position: -1230px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -500px;
+ background-position: -1312px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -600px;
+ background-position: -1394px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -700px;
+ background-position: -1476px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -800px;
+ background-position: -1558px -1514px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hedgehog-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -900px;
+ background-position: -1686px 0px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -1000px;
+ background-position: -1686px -100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -1100px;
+ background-position: -1686px -200px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -1200px;
+ background-position: -1686px -300px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -1300px;
+ background-position: -1686px -400px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1662px -1400px;
+ background-position: -1686px -500px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-Red {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: 0px -1584px;
+ background-position: -1686px -600px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -82px -1584px;
+ background-position: -1686px -700px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -164px -1584px;
+ background-position: -1686px -800px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-White {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -246px -1584px;
+ background-position: -1686px -900px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippo-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -328px -1584px;
+ background-position: -1686px -1000px;
width: 81px;
height: 99px;
}
.Mount_Icon_Hippogriff-Hopeful {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -410px -1584px;
+ background-position: -1686px -1100px;
width: 81px;
height: 99px;
}
.Mount_Icon_Horse-Base {
background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -492px -1584px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Horse-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -574px -1584px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Horse-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -656px -1584px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Horse-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -738px -1584px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Horse-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -820px -1584px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Horse-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -902px -1584px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Horse-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -984px -1584px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Horse-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-17.png');
- background-position: -1252px -200px;
+ background-position: -656px -1114px;
width: 81px;
height: 99px;
}
diff --git a/website/client/assets/css/sprites/spritesmith-main-18.css b/website/client/assets/css/sprites/spritesmith-main-18.css
index 1e67970578..c2aee93139 100644
--- a/website/client/assets/css/sprites/spritesmith-main-18.css
+++ b/website/client/assets/css/sprites/spritesmith-main-18.css
@@ -1,2004 +1,1998 @@
-.Mount_Icon_Horse-White {
+.Mount_Icon_Horse-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
background-position: -82px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Horse-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -1100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_JackOLantern-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_JackOLantern-Ghost {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Jackalope-RoyalPurple {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Aquatic {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Cupid {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Ember {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Ethereal {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Fairy {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Floral {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Ghost {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Holly {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Peppermint {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-RoyalPurple {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Shimmer {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Spooky {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-StarryNight {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Thunderstorm {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_LionCub-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_MagicalBee-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Mammoth-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -1070px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_MantisShrimp-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Monkey-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Nudibranch-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Octopus-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Orca-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -200px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Owl-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Owl-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Owl-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Owl-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Owl-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Owl-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Owl-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Owl-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Owl-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Owl-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Aquatic {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Cupid {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Ember {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Fairy {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Floral {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Ghost {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Holly {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Peppermint {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-RoyalPurple {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Shimmer {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Spooky {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-StarryNight {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Thunderstorm {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_PandaCub-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Parrot-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Peacock-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Penguin-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Phoenix-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Pterodactyl-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rat-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rock-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -1100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Rooster-Zombie {
+.Mount_Icon_Horse-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
background-position: -82px -1100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-Base {
+.Mount_Icon_Horse-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px 0px;
+ background-position: -164px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-CottonCandyBlue {
+.Mount_Icon_Horse-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -1100px;
+ background-position: 0px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-CottonCandyPink {
+.Mount_Icon_Horse-Red {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -1100px;
+ background-position: -82px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-Desert {
+.Mount_Icon_Horse-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -1100px;
+ background-position: -164px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-Golden {
+.Mount_Icon_Horse-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -1100px;
+ background-position: -246px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-Red {
+.Mount_Icon_Horse-White {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -1100px;
+ background-position: -246px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-Shade {
+.Mount_Icon_Horse-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -1100px;
+ background-position: 0px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-Skeleton {
+.Mount_Icon_JackOLantern-Base {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -1100px;
+ background-position: -164px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-White {
+.Mount_Icon_JackOLantern-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -1100px;
+ background-position: -246px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sabretooth-Zombie {
+.Mount_Icon_Jackalope-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -1100px;
+ background-position: -82px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-Base {
+.Mount_Icon_LionCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -1100px;
+ background-position: -328px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-CottonCandyBlue {
+.Mount_Icon_LionCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -1100px;
+ background-position: -328px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-CottonCandyPink {
+.Mount_Icon_LionCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -1100px;
+ background-position: -328px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-Desert {
+.Mount_Icon_LionCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px 0px;
+ background-position: 0px -300px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-Golden {
+.Mount_Icon_LionCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -100px;
+ background-position: -82px -300px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-Red {
+.Mount_Icon_LionCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -200px;
+ background-position: -164px -300px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-Shade {
+.Mount_Icon_LionCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -300px;
+ background-position: -246px -300px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-Skeleton {
+.Mount_Icon_LionCub-Ethereal {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -400px;
+ background-position: -328px -300px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-White {
+.Mount_Icon_LionCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -500px;
+ background-position: -410px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Seahorse-Zombie {
+.Mount_Icon_LionCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -600px;
+ background-position: -410px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sheep-Base {
+.Mount_Icon_LionCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -700px;
+ background-position: -410px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sheep-CottonCandyBlue {
+.Mount_Icon_LionCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -800px;
+ background-position: -410px -300px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sheep-CottonCandyPink {
+.Mount_Icon_LionCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -900px;
+ background-position: -492px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sheep-Desert {
+.Mount_Icon_LionCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -1000px;
+ background-position: -492px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sheep-Golden {
+.Mount_Icon_LionCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -1100px;
+ background-position: -492px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sheep-Red {
+.Mount_Icon_LionCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -1200px;
+ background-position: -492px -300px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sheep-Shade {
+.Mount_Icon_LionCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -1200px;
+ background-position: 0px -400px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sheep-Skeleton {
+.Mount_Icon_LionCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -1200px;
+ background-position: -82px -400px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Sheep-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sheep-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Slime-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Sloth-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -1100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snail-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -1100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Snake-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Spider-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TRex-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Aquatic {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Cupid {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Ember {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Fairy {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Floral {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Ghost {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Holly {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Peppermint {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-RoyalPurple {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Shimmer {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -1100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Spooky {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-StarryNight {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Thunderstorm {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_TigerCub-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Treeling-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -700px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -800px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -900px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -1000px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -1100px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -1200px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -1300px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Triceratops-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -1400px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turkey-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: 0px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turkey-Gilded {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -82px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -164px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -246px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -328px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -410px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -492px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -574px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -738px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -820px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Turtle-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -902px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -984px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1066px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1148px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1230px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1312px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1394px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1476px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1558px -1500px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px 0px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Unicorn-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -656px -600px;
- width: 81px;
- height: 99px;
-}
-.Mount_Icon_Whale-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -635px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Whale-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -287px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Whale-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -374px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Whale-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -461px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Whale-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -548px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Whale-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -1157px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Whale-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -722px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Whale-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -809px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Whale-White {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -896px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Whale-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-18.png');
- background-position: -1640px -983px;
- width: 78px;
- height: 86px;
-}
-.Mount_Icon_Wolf-Aquatic {
+.Mount_Icon_LionCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
background-position: -164px -400px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Base {
+.Mount_Icon_LionCub-Spooky {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_LionCub-StarryNight {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_LionCub-Thunderstorm {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_LionCub-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_LionCub-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_MagicalBee-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Mammoth-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -787px;
+ width: 78px;
+ height: 86px;
+}
+.Mount_Icon_MantisShrimp-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Monkey-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Nudibranch-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Octopus-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Orca-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -700px;
+ width: 78px;
+ height: 86px;
+}
+.Mount_Icon_Owl-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Owl-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Owl-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Owl-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Owl-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Owl-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Owl-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Owl-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Owl-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Owl-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Aquatic {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Cupid {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Ember {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Fairy {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Floral {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Ghost {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Holly {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Peppermint {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-RoyalPurple {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Shimmer {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Spooky {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-StarryNight {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Thunderstorm {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_PandaCub-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Parrot-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Peacock-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Penguin-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Phoenix-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Pterodactyl-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rat-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rock-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Rooster-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sabretooth-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Seahorse-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sheep-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Slime-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Sloth-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snail-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Snake-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Spider-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TRex-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Aquatic {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Cupid {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Ember {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Fairy {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Floral {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Ghost {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Holly {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Peppermint {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-RoyalPurple {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Shimmer {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Spooky {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-StarryNight {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Thunderstorm {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_TigerCub-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Treeling-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: 0px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -82px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -164px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -246px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -328px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -410px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Triceratops-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -492px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turkey-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turkey-Gilded {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -656px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -820px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -902px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -984px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1066px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1148px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1230px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1312px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1394px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Turtle-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1476px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Unicorn-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1558px -1500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Unicorn-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Unicorn-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-18.png');
background-position: -1640px -100px;
width: 81px;
height: 99px;
}
+.Mount_Icon_Unicorn-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Unicorn-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Unicorn-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Unicorn-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Unicorn-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Unicorn-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -738px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Unicorn-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -574px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Mount_Icon_Whale-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -874px;
+ width: 78px;
+ height: 86px;
+}
+.Mount_Icon_Whale-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -961px;
+ width: 78px;
+ height: 86px;
+}
+.Mount_Icon_Whale-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -1048px;
+ width: 78px;
+ height: 86px;
+}
+.Mount_Icon_Whale-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-18.png');
+ background-position: -1640px -1135px;
+ width: 78px;
+ height: 86px;
+}
diff --git a/website/client/assets/css/sprites/spritesmith-main-19.css b/website/client/assets/css/sprites/spritesmith-main-19.css
index 4eee8bf4b3..fb2ae1570d 100644
--- a/website/client/assets/css/sprites/spritesmith-main-19.css
+++ b/website/client/assets/css/sprites/spritesmith-main-19.css
@@ -1,1197 +1,1245 @@
-.Mount_Icon_Wolf-CottonCandyBlue {
+.Mount_Icon_Whale-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -574px -1203px;
- width: 81px;
- height: 99px;
+ background-position: -1640px -1135px;
+ width: 78px;
+ height: 86px;
}
-.Mount_Icon_Wolf-CottonCandyPink {
+.Mount_Icon_Whale-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -82px -1103px;
- width: 81px;
- height: 99px;
+ background-position: -1640px -700px;
+ width: 78px;
+ height: 86px;
}
-.Mount_Icon_Wolf-Cupid {
+.Mount_Icon_Whale-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -164px 0px;
- width: 81px;
- height: 99px;
+ background-position: -1640px -1048px;
+ width: 78px;
+ height: 86px;
}
-.Mount_Icon_Wolf-Desert {
+.Mount_Icon_Whale-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: 0px -103px;
- width: 81px;
- height: 99px;
+ background-position: -1640px -961px;
+ width: 78px;
+ height: 86px;
}
-.Mount_Icon_Wolf-Ember {
+.Mount_Icon_Whale-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -82px -103px;
- width: 81px;
- height: 99px;
+ background-position: -1640px -874px;
+ width: 78px;
+ height: 86px;
}
-.Mount_Icon_Wolf-Fairy {
+.Mount_Icon_Whale-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -164px -103px;
- width: 81px;
- height: 99px;
+ background-position: -1640px -787px;
+ width: 78px;
+ height: 86px;
}
-.Mount_Icon_Wolf-Floral {
+.Mount_Icon_Wolf-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Ghost {
+.Mount_Icon_Wolf-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Golden {
+.Mount_Icon_Wolf-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -203px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Holly {
+.Mount_Icon_Wolf-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -203px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Peppermint {
+.Mount_Icon_Wolf-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -203px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Red {
+.Mount_Icon_Wolf-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -203px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-RoyalPurple {
+.Mount_Icon_Wolf-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Shade {
+.Mount_Icon_Wolf-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Shimmer {
+.Mount_Icon_Wolf-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Skeleton {
+.Mount_Icon_Wolf-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -303px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Spooky {
+.Mount_Icon_Wolf-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -303px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-StarryNight {
+.Mount_Icon_Wolf-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -303px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Thunderstorm {
+.Mount_Icon_Wolf-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -303px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-White {
+.Mount_Icon_Wolf-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -303px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Wolf-Zombie {
+.Mount_Icon_Wolf-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-Base {
+.Mount_Icon_Wolf-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-CottonCandyBlue {
+.Mount_Icon_Wolf-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-CottonCandyPink {
+.Mount_Icon_Wolf-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -300px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-Desert {
+.Mount_Icon_Wolf-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px 0px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-Golden {
+.Mount_Icon_Wolf-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -100px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-Red {
+.Mount_Icon_Wolf-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -200px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-Shade {
+.Mount_Icon_Wolf-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -300px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-Skeleton {
+.Mount_Icon_Wolf-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -403px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-White {
+.Mount_Icon_Yarn-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -403px;
width: 81px;
height: 99px;
}
-.Mount_Icon_Yarn-Zombie {
+.Mount_Icon_Yarn-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -403px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-Base {
+.Mount_Icon_Yarn-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -403px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-CottonCandyBlue {
+.Mount_Icon_Yarn-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -403px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-CottonCandyPink {
+.Mount_Icon_Yarn-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -403px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-Desert {
+.Mount_Icon_Yarn-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -403px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-Golden {
+.Mount_Icon_Yarn-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px 0px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-Red {
+.Mount_Icon_Yarn-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -100px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-Shade {
+.Mount_Icon_Yarn-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -200px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-Skeleton {
+.Mount_Icon_Yarn-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -300px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-White {
+.Pet-Armadillo-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -400px;
width: 81px;
height: 99px;
}
-.Pet-Armadillo-Zombie {
+.Pet-Armadillo-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -503px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-Base {
+.Pet-Armadillo-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -503px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-CottonCandyBlue {
+.Pet-Armadillo-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -503px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-CottonCandyPink {
+.Pet-Armadillo-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -503px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-Desert {
+.Pet-Armadillo-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -503px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-Golden {
+.Pet-Armadillo-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -503px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-Red {
+.Pet-Armadillo-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -503px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-Shade {
+.Pet-Armadillo-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -503px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-Skeleton {
+.Pet-Armadillo-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px 0px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-White {
+.Pet-Axolotl-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -100px;
width: 81px;
height: 99px;
}
-.Pet-Axolotl-Zombie {
+.Pet-Axolotl-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -200px;
width: 81px;
height: 99px;
}
-.Pet-Badger-Base {
+.Pet-Axolotl-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -300px;
width: 81px;
height: 99px;
}
-.Pet-Badger-CottonCandyBlue {
+.Pet-Axolotl-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -400px;
width: 81px;
height: 99px;
}
-.Pet-Badger-CottonCandyPink {
+.Pet-Axolotl-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -500px;
width: 81px;
height: 99px;
}
-.Pet-Badger-Desert {
+.Pet-Axolotl-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -603px;
width: 81px;
height: 99px;
}
-.Pet-Badger-Golden {
+.Pet-Axolotl-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -603px;
width: 81px;
height: 99px;
}
-.Pet-Badger-Red {
+.Pet-Axolotl-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -603px;
width: 81px;
height: 99px;
}
-.Pet-Badger-Shade {
+.Pet-Axolotl-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -603px;
width: 81px;
height: 99px;
}
-.Pet-Badger-Skeleton {
+.Pet-Axolotl-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -603px;
width: 81px;
height: 99px;
}
-.Pet-Badger-White {
+.Pet-Badger-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -603px;
width: 81px;
height: 99px;
}
-.Pet-Badger-Zombie {
+.Pet-Badger-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -603px;
width: 81px;
height: 99px;
}
-.Pet-Bear-Veteran {
+.Pet-Badger-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -603px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Aquatic {
+.Pet-Badger-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -603px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Base {
+.Pet-Badger-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px 0px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-CottonCandyBlue {
+.Pet-Badger-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -100px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-CottonCandyPink {
+.Pet-Badger-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -200px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Cupid {
+.Pet-Badger-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -300px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Desert {
+.Pet-Badger-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -400px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Ember {
+.Pet-Badger-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -500px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Fairy {
+.Pet-Bear-Veteran {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -600px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Floral {
+.Pet-BearCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Ghost {
+.Pet-BearCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Golden {
+.Pet-BearCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Holly {
+.Pet-BearCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Peppermint {
+.Pet-BearCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Polar {
+.Pet-BearCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Red {
+.Pet-BearCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-RoyalPurple {
+.Pet-BearCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Shade {
+.Pet-BearCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Shimmer {
+.Pet-BearCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -703px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Skeleton {
+.Pet-BearCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px 0px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Spooky {
+.Pet-BearCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -100px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-StarryNight {
+.Pet-BearCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -200px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Thunderstorm {
+.Pet-BearCub-Polar {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -300px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-White {
+.Pet-BearCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -400px;
width: 81px;
height: 99px;
}
-.Pet-BearCub-Zombie {
+.Pet-BearCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -500px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-Base {
+.Pet-BearCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -600px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-CottonCandyBlue {
+.Pet-BearCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -700px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-CottonCandyPink {
+.Pet-BearCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px 0px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-Desert {
+.Pet-BearCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -100px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-Golden {
+.Pet-BearCub-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -200px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-Red {
+.Pet-BearCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -300px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-Shade {
+.Pet-BearCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -400px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-Skeleton {
+.Pet-BearCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -500px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-White {
+.Pet-Beetle-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -600px;
width: 81px;
height: 99px;
}
-.Pet-Beetle-Zombie {
+.Pet-Beetle-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -700px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-Base {
+.Pet-Beetle-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -803px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-CottonCandyBlue {
+.Pet-Beetle-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -803px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-CottonCandyPink {
+.Pet-Beetle-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -803px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-Desert {
+.Pet-Beetle-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -803px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-Golden {
+.Pet-Beetle-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -803px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-Red {
+.Pet-Beetle-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -803px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-Shade {
+.Pet-Beetle-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -803px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-Skeleton {
+.Pet-Beetle-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -803px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-White {
+.Pet-Bunny-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -803px;
width: 81px;
height: 99px;
}
-.Pet-Bunny-Zombie {
+.Pet-Bunny-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -803px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-Base {
+.Pet-Bunny-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -803px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-CottonCandyBlue {
+.Pet-Bunny-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -803px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-CottonCandyPink {
+.Pet-Bunny-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px 0px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-Desert {
+.Pet-Bunny-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -100px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-Golden {
+.Pet-Bunny-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -200px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-Red {
+.Pet-Bunny-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -300px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-Shade {
+.Pet-Bunny-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -400px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-Skeleton {
+.Pet-Bunny-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -500px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-White {
+.Pet-Butterfly-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -600px;
width: 81px;
height: 99px;
}
-.Pet-Butterfly-Zombie {
+.Pet-Butterfly-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -700px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Aquatic {
+.Pet-Butterfly-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -800px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Base {
+.Pet-Butterfly-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-CottonCandyBlue {
+.Pet-Butterfly-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-CottonCandyPink {
+.Pet-Butterfly-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Cupid {
+.Pet-Butterfly-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Desert {
+.Pet-Butterfly-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Ember {
+.Pet-Butterfly-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Fairy {
+.Pet-Butterfly-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Floral {
+.Pet-Cactus-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Ghost {
+.Pet-Cactus-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Golden {
+.Pet-Cactus-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Holly {
+.Pet-Cactus-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Peppermint {
+.Pet-Cactus-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Red {
+.Pet-Cactus-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -903px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-RoyalPurple {
+.Pet-Cactus-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px 0px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Shade {
+.Pet-Cactus-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -100px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Shimmer {
+.Pet-Cactus-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -200px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Skeleton {
+.Pet-Cactus-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -300px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Spooky {
+.Pet-Cactus-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -400px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-StarryNight {
+.Pet-Cactus-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -500px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Thunderstorm {
+.Pet-Cactus-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -600px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-White {
+.Pet-Cactus-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -700px;
width: 81px;
height: 99px;
}
-.Pet-Cactus-Zombie {
+.Pet-Cactus-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -800px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-Base {
+.Pet-Cactus-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -900px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-CottonCandyBlue {
+.Pet-Cactus-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-CottonCandyPink {
+.Pet-Cactus-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-Desert {
+.Pet-Cactus-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-Golden {
+.Pet-Cactus-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-Red {
+.Pet-Cactus-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-Shade {
+.Pet-Cactus-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-Skeleton {
+.Pet-Cactus-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-White {
+.Pet-Cheetah-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cheetah-Zombie {
+.Pet-Cheetah-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cow-Base {
+.Pet-Cheetah-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cow-CottonCandyBlue {
+.Pet-Cheetah-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cow-CottonCandyPink {
+.Pet-Cheetah-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cow-Desert {
+.Pet-Cheetah-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cow-Golden {
+.Pet-Cheetah-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -1003px;
width: 81px;
height: 99px;
}
-.Pet-Cow-Red {
+.Pet-Cheetah-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px 0px;
width: 81px;
height: 99px;
}
-.Pet-Cow-Shade {
+.Pet-Cheetah-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -100px;
width: 81px;
height: 99px;
}
-.Pet-Cow-Skeleton {
+.Pet-Cheetah-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -200px;
width: 81px;
height: 99px;
}
-.Pet-Cow-White {
+.Pet-Cow-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -300px;
width: 81px;
height: 99px;
}
-.Pet-Cow-Zombie {
+.Pet-Cow-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -400px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-Base {
+.Pet-Cow-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -500px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-CottonCandyBlue {
+.Pet-Cow-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -600px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-CottonCandyPink {
+.Pet-Cow-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -700px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-Desert {
+.Pet-Cow-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -800px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-Golden {
+.Pet-Cow-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -900px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-Red {
+.Pet-Cow-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-Shade {
+.Pet-Cow-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-Skeleton {
+.Pet-Cow-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px 0px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-White {
+.Pet-Cuttlefish-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Cuttlefish-Zombie {
+.Pet-Cuttlefish-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-Base {
+.Pet-Cuttlefish-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-CottonCandyBlue {
+.Pet-Cuttlefish-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-CottonCandyPink {
+.Pet-Cuttlefish-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-Desert {
+.Pet-Cuttlefish-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -574px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-Golden {
+.Pet-Cuttlefish-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -656px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-Red {
+.Pet-Cuttlefish-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -738px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-Shade {
+.Pet-Cuttlefish-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -820px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-Skeleton {
+.Pet-Cuttlefish-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -902px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-White {
+.Pet-Deer-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -984px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Deer-Zombie {
+.Pet-Deer-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1066px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Aquatic {
+.Pet-Deer-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1148px -1103px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Base {
+.Pet-Deer-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px 0px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-CottonCandyBlue {
+.Pet-Deer-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -100px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-CottonCandyPink {
+.Pet-Deer-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -200px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Cupid {
+.Pet-Deer-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -300px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Desert {
+.Pet-Deer-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -400px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Ember {
+.Pet-Deer-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -500px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Fairy {
+.Pet-Deer-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -600px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Floral {
+.Pet-Dragon-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -700px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Ghost {
+.Pet-Dragon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -800px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Golden {
+.Pet-Dragon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -900px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Holly {
+.Pet-Dragon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Hydra {
+.Pet-Dragon-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -1230px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Peppermint {
+.Pet-Dragon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px -1203px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Red {
+.Pet-Dragon-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -82px -1203px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-RoyalPurple {
+.Pet-Dragon-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -164px -1203px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Shade {
+.Pet-Dragon-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -246px -1203px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Shimmer {
+.Pet-Dragon-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -328px -1203px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Skeleton {
+.Pet-Dragon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -410px -1203px;
width: 81px;
height: 99px;
}
-.Pet-Dragon-Spooky {
+.Pet-Dragon-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: -492px -1203px;
width: 81px;
height: 99px;
}
+.Pet-Dragon-Hydra {
+ background-image: url('~assets/images/sprites/spritesmith-main-19.png');
+ background-position: -574px -1203px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Dragon-Peppermint {
+ background-image: url('~assets/images/sprites/spritesmith-main-19.png');
+ background-position: -656px -1203px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Dragon-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-19.png');
+ background-position: -738px -1203px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Dragon-RoyalPurple {
+ background-image: url('~assets/images/sprites/spritesmith-main-19.png');
+ background-position: -820px -1203px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Dragon-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-19.png');
+ background-position: -902px -1203px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Dragon-Shimmer {
+ background-image: url('~assets/images/sprites/spritesmith-main-19.png');
+ background-position: -984px -1203px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Dragon-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-19.png');
+ background-position: -1066px -1203px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Dragon-Spooky {
+ background-image: url('~assets/images/sprites/spritesmith-main-19.png');
+ background-position: -1148px -1203px;
+ width: 81px;
+ height: 99px;
+}
.Pet-Dragon-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
background-position: 0px 0px;
@@ -1200,793 +1248,751 @@
}
.Pet-Dragon-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -656px -1203px;
+ background-position: -1312px 0px;
width: 81px;
height: 99px;
}
.Pet-Dragon-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -738px -1203px;
+ background-position: -1312px -100px;
width: 81px;
height: 99px;
}
.Pet-Dragon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -820px -1203px;
+ background-position: -1312px -200px;
width: 81px;
height: 99px;
}
.Pet-Egg-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -902px -1203px;
+ background-position: -1312px -300px;
width: 81px;
height: 99px;
}
.Pet-Egg-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -984px -1203px;
+ background-position: -1312px -400px;
width: 81px;
height: 99px;
}
.Pet-Egg-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1066px -1203px;
+ background-position: -1312px -500px;
width: 81px;
height: 99px;
}
.Pet-Egg-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1148px -1203px;
+ background-position: -1312px -600px;
width: 81px;
height: 99px;
}
.Pet-Egg-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1230px -1203px;
+ background-position: -1312px -700px;
width: 81px;
height: 99px;
}
.Pet-Egg-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px 0px;
+ background-position: -1312px -800px;
width: 81px;
height: 99px;
}
.Pet-Egg-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -100px;
+ background-position: -1312px -900px;
width: 81px;
height: 99px;
}
.Pet-Egg-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -200px;
+ background-position: -1312px -1000px;
width: 81px;
height: 99px;
}
.Pet-Egg-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -300px;
+ background-position: -1312px -1100px;
width: 81px;
height: 99px;
}
.Pet-Egg-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -400px;
+ background-position: -1312px -1200px;
width: 81px;
height: 99px;
}
.Pet-Falcon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -500px;
+ background-position: -1394px 0px;
width: 81px;
height: 99px;
}
.Pet-Falcon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -600px;
+ background-position: -1394px -100px;
width: 81px;
height: 99px;
}
.Pet-Falcon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -700px;
+ background-position: -1394px -200px;
width: 81px;
height: 99px;
}
.Pet-Falcon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -800px;
+ background-position: -1394px -300px;
width: 81px;
height: 99px;
}
.Pet-Falcon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -900px;
+ background-position: -1394px -400px;
width: 81px;
height: 99px;
}
.Pet-Falcon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -1000px;
+ background-position: -1394px -500px;
width: 81px;
height: 99px;
}
.Pet-Falcon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -1100px;
+ background-position: -1394px -600px;
width: 81px;
height: 99px;
}
.Pet-Falcon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -1200px;
+ background-position: -1394px -700px;
width: 81px;
height: 99px;
}
.Pet-Falcon-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px 0px;
+ background-position: -1394px -800px;
width: 81px;
height: 99px;
}
.Pet-Falcon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -100px;
+ background-position: -1394px -900px;
width: 81px;
height: 99px;
}
.Pet-Ferret-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -200px;
+ background-position: -1394px -1000px;
width: 81px;
height: 99px;
}
.Pet-Ferret-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -300px;
+ background-position: -1394px -1100px;
width: 81px;
height: 99px;
}
.Pet-Ferret-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -400px;
+ background-position: -1394px -1200px;
width: 81px;
height: 99px;
}
.Pet-Ferret-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -500px;
+ background-position: 0px -1303px;
width: 81px;
height: 99px;
}
.Pet-Ferret-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -600px;
+ background-position: -82px -1303px;
width: 81px;
height: 99px;
}
.Pet-Ferret-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -700px;
+ background-position: -164px -1303px;
width: 81px;
height: 99px;
}
.Pet-Ferret-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -800px;
+ background-position: -246px -1303px;
width: 81px;
height: 99px;
}
.Pet-Ferret-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -900px;
+ background-position: -328px -1303px;
width: 81px;
height: 99px;
}
.Pet-Ferret-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -1000px;
+ background-position: -410px -1303px;
width: 81px;
height: 99px;
}
.Pet-Ferret-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -1100px;
+ background-position: -492px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -1200px;
+ background-position: -574px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: 0px -1303px;
+ background-position: -656px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -82px -1303px;
+ background-position: -738px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -164px -1303px;
+ background-position: -820px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -246px -1303px;
+ background-position: -902px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -328px -1303px;
+ background-position: -984px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -410px -1303px;
+ background-position: -1066px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -492px -1303px;
+ background-position: -1148px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -574px -1303px;
+ background-position: -1230px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -656px -1303px;
+ background-position: -1312px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -738px -1303px;
+ background-position: -1394px -1303px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -820px -1303px;
+ background-position: -1476px 0px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -902px -1303px;
+ background-position: -1476px -100px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -984px -1303px;
+ background-position: -1476px -200px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1066px -1303px;
+ background-position: -1476px -300px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1148px -1303px;
+ background-position: -1476px -400px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1230px -1303px;
+ background-position: -1476px -500px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -1303px;
+ background-position: -1476px -600px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -1303px;
+ background-position: -1476px -700px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px 0px;
+ background-position: -1476px -800px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -100px;
+ background-position: -1476px -900px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -200px;
+ background-position: -1476px -1000px;
width: 81px;
height: 99px;
}
.Pet-FlyingPig-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -300px;
+ background-position: -1476px -1100px;
width: 81px;
height: 99px;
}
.Pet-Fox-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -400px;
+ background-position: -1476px -1200px;
width: 81px;
height: 99px;
}
.Pet-Fox-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -500px;
+ background-position: -1476px -1300px;
width: 81px;
height: 99px;
}
.Pet-Fox-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -600px;
+ background-position: 0px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -700px;
+ background-position: -82px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -800px;
+ background-position: -164px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -900px;
+ background-position: -246px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -1000px;
+ background-position: -328px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -1100px;
+ background-position: -410px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -1200px;
+ background-position: -492px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -1300px;
+ background-position: -574px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: 0px -1403px;
+ background-position: -656px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -82px -1403px;
+ background-position: -738px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -164px -1403px;
+ background-position: -820px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -246px -1403px;
+ background-position: -902px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -328px -1403px;
+ background-position: -984px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -410px -1403px;
+ background-position: -1066px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -492px -1403px;
+ background-position: -1148px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -574px -1403px;
+ background-position: -1230px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -656px -1403px;
+ background-position: -1312px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -738px -1403px;
+ background-position: -1394px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -820px -1403px;
+ background-position: -1476px -1403px;
width: 81px;
height: 99px;
}
.Pet-Fox-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -902px -1403px;
+ background-position: -1558px 0px;
width: 81px;
height: 99px;
}
.Pet-Fox-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -984px -1403px;
+ background-position: -1558px -100px;
width: 81px;
height: 99px;
}
.Pet-Frog-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1066px -1403px;
+ background-position: -1558px -200px;
width: 81px;
height: 99px;
}
.Pet-Frog-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1148px -1403px;
+ background-position: -1558px -300px;
width: 81px;
height: 99px;
}
.Pet-Frog-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1230px -1403px;
+ background-position: -1558px -400px;
width: 81px;
height: 99px;
}
.Pet-Frog-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -1403px;
+ background-position: -1558px -500px;
width: 81px;
height: 99px;
}
.Pet-Frog-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -1403px;
+ background-position: -1558px -600px;
width: 81px;
height: 99px;
}
.Pet-Frog-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -1403px;
+ background-position: -1558px -700px;
width: 81px;
height: 99px;
}
.Pet-Frog-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px 0px;
+ background-position: -1558px -800px;
width: 81px;
height: 99px;
}
.Pet-Frog-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -100px;
+ background-position: -1558px -900px;
width: 81px;
height: 99px;
}
.Pet-Frog-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -200px;
+ background-position: -1558px -1000px;
width: 81px;
height: 99px;
}
.Pet-Frog-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -300px;
+ background-position: -1558px -1100px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -400px;
+ background-position: -1558px -1200px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -500px;
+ background-position: -1558px -1300px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -600px;
+ background-position: -1558px -1400px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -700px;
+ background-position: 0px -1503px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -800px;
+ background-position: -82px -1503px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -900px;
+ background-position: -164px -1503px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -1000px;
+ background-position: -246px -1503px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -1100px;
+ background-position: -328px -1503px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -1200px;
+ background-position: -410px -1503px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -1300px;
+ background-position: -492px -1503px;
width: 81px;
height: 99px;
}
.Pet-Gryphon-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -1400px;
+ background-position: -574px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: 0px -1503px;
+ background-position: -656px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -82px -1503px;
+ background-position: -738px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -164px -1503px;
+ background-position: -820px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -246px -1503px;
+ background-position: -902px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -328px -1503px;
+ background-position: -984px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -410px -1503px;
+ background-position: -1066px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -492px -1503px;
+ background-position: -1148px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -574px -1503px;
+ background-position: -1230px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -656px -1503px;
+ background-position: -1312px -1503px;
width: 81px;
height: 99px;
}
.Pet-GuineaPig-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -738px -1503px;
+ background-position: -1394px -1503px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -820px -1503px;
+ background-position: -1476px -1503px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -902px -1503px;
+ background-position: -1558px -1503px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -984px -1503px;
+ background-position: -1640px 0px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1066px -1503px;
+ background-position: -1640px -100px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1148px -1503px;
+ background-position: -1640px -200px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-Red {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1230px -1503px;
+ background-position: -1640px -300px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1312px -1503px;
+ background-position: -1640px -400px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1394px -1503px;
+ background-position: -1640px -500px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-White {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1476px -1503px;
+ background-position: -1640px -600px;
width: 81px;
height: 99px;
}
.Pet-Hedgehog-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1558px -1503px;
+ background-position: -82px -1103px;
width: 81px;
height: 99px;
}
.Pet-Hippo-Base {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px 0px;
+ background-position: -164px -103px;
width: 81px;
height: 99px;
}
.Pet-Hippo-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -100px;
+ background-position: -82px -103px;
width: 81px;
height: 99px;
}
.Pet-Hippo-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -200px;
+ background-position: 0px -103px;
width: 81px;
height: 99px;
}
.Pet-Hippo-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -300px;
+ background-position: -164px 0px;
width: 81px;
height: 99px;
}
.Pet-Hippo-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Hippo-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -500px;
- width: 81px;
- height: 99px;
-}
-.Pet-Hippo-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -600px;
- width: 81px;
- height: 99px;
-}
-.Pet-Hippo-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -700px;
- width: 81px;
- height: 99px;
-}
-.Pet-Hippo-White {
- background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -800px;
- width: 81px;
- height: 99px;
-}
-.Pet-Hippo-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -900px;
- width: 81px;
- height: 99px;
-}
-.Pet-Hippogriff-Hopeful {
- background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -1000px;
- width: 81px;
- height: 99px;
-}
-.Pet-Horse-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-19.png');
- background-position: -1640px -1100px;
+ background-position: -1230px -1203px;
width: 81px;
height: 99px;
}
diff --git a/website/client/assets/css/sprites/spritesmith-main-20.css b/website/client/assets/css/sprites/spritesmith-main-20.css
index 606082cbe1..ed50406eb4 100644
--- a/website/client/assets/css/sprites/spritesmith-main-20.css
+++ b/website/client/assets/css/sprites/spritesmith-main-20.css
@@ -1,1990 +1,1990 @@
-.Pet-Horse-CottonCandyBlue {
+.Pet-Hippo-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px 0px;
width: 81px;
height: 99px;
}
-.Pet-Horse-CottonCandyPink {
+.Pet-Hippo-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Horse-Desert {
+.Pet-Hippo-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px 0px;
width: 81px;
height: 99px;
}
-.Pet-Horse-Golden {
+.Pet-Hippo-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -100px;
width: 81px;
height: 99px;
}
-.Pet-Horse-Red {
+.Pet-Hippo-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -100px;
width: 81px;
height: 99px;
}
-.Pet-Horse-Shade {
+.Pet-Hippogriff-Hopeful {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -100px;
width: 81px;
height: 99px;
}
-.Pet-Horse-Skeleton {
+.Pet-Horse-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px 0px;
width: 81px;
height: 99px;
}
-.Pet-Horse-White {
+.Pet-Horse-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -100px;
width: 81px;
height: 99px;
}
-.Pet-Horse-Zombie {
+.Pet-Horse-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -200px;
width: 81px;
height: 99px;
}
-.Pet-JackOLantern-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -164px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-JackOLantern-Ghost {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -246px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Jackalope-RoyalPurple {
+.Pet-Horse-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -200px;
width: 81px;
height: 99px;
}
-.Pet-Lion-Veteran {
+.Pet-Horse-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -164px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Horse-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -246px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Horse-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px 0px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Aquatic {
+.Pet-Horse-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -100px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Base {
+.Pet-Horse-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -200px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-CottonCandyBlue {
+.Pet-Horse-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -300px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -82px -300px;
- width: 81px;
- height: 99px;
-}
-.Pet-LionCub-Cupid {
+.Pet-JackOLantern-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -300px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Desert {
+.Pet-JackOLantern-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -300px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Ember {
+.Pet-Jackalope-RoyalPurple {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -82px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Lion-Veteran {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -300px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Fairy {
+.Pet-LionCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px 0px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Floral {
+.Pet-LionCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -100px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Ghost {
+.Pet-LionCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -200px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Golden {
+.Pet-LionCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -300px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Holly {
+.Pet-LionCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px 0px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Peppermint {
+.Pet-LionCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -100px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Red {
+.Pet-LionCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -200px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-RoyalPurple {
+.Pet-LionCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -300px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Shade {
+.Pet-LionCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -400px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Shimmer {
+.Pet-LionCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -400px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Skeleton {
+.Pet-LionCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -400px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Spooky {
+.Pet-LionCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -400px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-StarryNight {
+.Pet-LionCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -400px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Thunderstorm {
+.Pet-LionCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -400px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-White {
+.Pet-LionCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -400px;
width: 81px;
height: 99px;
}
-.Pet-LionCub-Zombie {
+.Pet-LionCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px 0px;
width: 81px;
height: 99px;
}
-.Pet-MagicalBee-Base {
+.Pet-LionCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -100px;
width: 81px;
height: 99px;
}
-.Pet-Mammoth-Base {
+.Pet-LionCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -200px;
width: 81px;
height: 99px;
}
-.Pet-MantisShrimp-Base {
+.Pet-LionCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -300px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-Base {
+.Pet-LionCub-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -400px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-CottonCandyBlue {
+.Pet-LionCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -500px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-CottonCandyPink {
+.Pet-LionCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -500px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-Desert {
+.Pet-LionCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -500px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-Golden {
+.Pet-MagicalBee-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -500px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-Red {
+.Pet-Mammoth-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -500px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-Shade {
+.Pet-MantisShrimp-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -500px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-Skeleton {
+.Pet-Monkey-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -500px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-White {
+.Pet-Monkey-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -500px;
width: 81px;
height: 99px;
}
-.Pet-Monkey-Zombie {
+.Pet-Monkey-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px 0px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-Base {
+.Pet-Monkey-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -100px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-CottonCandyBlue {
+.Pet-Monkey-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -200px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-CottonCandyPink {
+.Pet-Monkey-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -300px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-Desert {
+.Pet-Monkey-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -400px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-Golden {
+.Pet-Monkey-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -500px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-Red {
+.Pet-Monkey-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -600px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-Shade {
+.Pet-Monkey-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -600px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-Skeleton {
+.Pet-Nudibranch-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -600px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-White {
+.Pet-Nudibranch-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -600px;
width: 81px;
height: 99px;
}
-.Pet-Nudibranch-Zombie {
+.Pet-Nudibranch-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -600px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-Base {
+.Pet-Nudibranch-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -600px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-CottonCandyBlue {
+.Pet-Nudibranch-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -600px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-CottonCandyPink {
+.Pet-Nudibranch-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -600px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-Desert {
+.Pet-Nudibranch-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -600px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-Golden {
+.Pet-Nudibranch-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px 0px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-Red {
+.Pet-Nudibranch-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -100px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-Shade {
+.Pet-Nudibranch-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -200px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-Skeleton {
+.Pet-Octopus-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -300px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-White {
+.Pet-Octopus-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -400px;
width: 81px;
height: 99px;
}
-.Pet-Octopus-Zombie {
+.Pet-Octopus-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -500px;
width: 81px;
height: 99px;
}
-.Pet-Orca-Base {
+.Pet-Octopus-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -600px;
width: 81px;
height: 99px;
}
-.Pet-Owl-Base {
+.Pet-Octopus-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -700px;
width: 81px;
height: 99px;
}
-.Pet-Owl-CottonCandyBlue {
+.Pet-Octopus-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -700px;
width: 81px;
height: 99px;
}
-.Pet-Owl-CottonCandyPink {
+.Pet-Octopus-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -700px;
width: 81px;
height: 99px;
}
-.Pet-Owl-Desert {
+.Pet-Octopus-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -700px;
width: 81px;
height: 99px;
}
-.Pet-Owl-Golden {
+.Pet-Octopus-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -700px;
width: 81px;
height: 99px;
}
-.Pet-Owl-Red {
+.Pet-Octopus-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -700px;
width: 81px;
height: 99px;
}
-.Pet-Owl-Shade {
+.Pet-Orca-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -700px;
width: 81px;
height: 99px;
}
-.Pet-Owl-Skeleton {
+.Pet-Owl-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -700px;
width: 81px;
height: 99px;
}
-.Pet-Owl-White {
+.Pet-Owl-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -700px;
width: 81px;
height: 99px;
}
-.Pet-Owl-Zombie {
+.Pet-Owl-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -700px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Aquatic {
+.Pet-Owl-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px 0px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Base {
+.Pet-Owl-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -100px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-CottonCandyBlue {
+.Pet-Owl-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -200px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-CottonCandyPink {
+.Pet-Owl-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -300px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Cupid {
+.Pet-Owl-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -400px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Desert {
+.Pet-Owl-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -500px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Ember {
+.Pet-Owl-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -600px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Fairy {
+.Pet-PandaCub-Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -700px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Floral {
+.Pet-PandaCub-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Ghost {
+.Pet-PandaCub-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Golden {
+.Pet-PandaCub-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Holly {
+.Pet-PandaCub-Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Peppermint {
+.Pet-PandaCub-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Red {
+.Pet-PandaCub-Ember {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-RoyalPurple {
+.Pet-PandaCub-Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Shade {
+.Pet-PandaCub-Floral {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Shimmer {
+.Pet-PandaCub-Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Skeleton {
+.Pet-PandaCub-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Spooky {
+.Pet-PandaCub-Holly {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -800px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-StarryNight {
+.Pet-PandaCub-Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px 0px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Thunderstorm {
+.Pet-PandaCub-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -100px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-White {
+.Pet-PandaCub-RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -200px;
width: 81px;
height: 99px;
}
-.Pet-PandaCub-Zombie {
+.Pet-PandaCub-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -300px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-Base {
+.Pet-PandaCub-Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -400px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-CottonCandyBlue {
+.Pet-PandaCub-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -500px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-CottonCandyPink {
+.Pet-PandaCub-Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -600px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-Desert {
+.Pet-PandaCub-StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -700px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-Golden {
+.Pet-PandaCub-Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -800px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-Red {
+.Pet-PandaCub-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px 0px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-Shade {
+.Pet-PandaCub-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -100px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-Skeleton {
+.Pet-Parrot-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -200px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-White {
+.Pet-Parrot-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -300px;
width: 81px;
height: 99px;
}
-.Pet-Parrot-Zombie {
+.Pet-Parrot-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -400px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-Base {
+.Pet-Parrot-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -500px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-CottonCandyBlue {
+.Pet-Parrot-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -600px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-CottonCandyPink {
+.Pet-Parrot-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -700px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-Desert {
+.Pet-Parrot-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -800px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-Golden {
+.Pet-Parrot-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -900px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-Red {
+.Pet-Parrot-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -900px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-Shade {
+.Pet-Parrot-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -900px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-Skeleton {
+.Pet-Peacock-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -900px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-White {
+.Pet-Peacock-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -900px;
width: 81px;
height: 99px;
}
-.Pet-Peacock-Zombie {
+.Pet-Peacock-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -900px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-Base {
+.Pet-Peacock-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -900px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-CottonCandyBlue {
+.Pet-Peacock-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -900px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-CottonCandyPink {
+.Pet-Peacock-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -900px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-Desert {
+.Pet-Peacock-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -900px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-Golden {
+.Pet-Peacock-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -900px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-Red {
+.Pet-Peacock-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -900px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-Shade {
+.Pet-Peacock-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -900px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-Skeleton {
+.Pet-Penguin-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px 0px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-White {
+.Pet-Penguin-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -100px;
width: 81px;
height: 99px;
}
-.Pet-Penguin-Zombie {
+.Pet-Penguin-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -200px;
width: 81px;
height: 99px;
}
-.Pet-Phoenix-Base {
+.Pet-Penguin-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -300px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-Base {
+.Pet-Penguin-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -400px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-CottonCandyBlue {
+.Pet-Penguin-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -500px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-CottonCandyPink {
+.Pet-Penguin-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -600px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-Desert {
+.Pet-Penguin-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -700px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-Golden {
+.Pet-Penguin-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -800px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-Red {
+.Pet-Penguin-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -900px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-Shade {
+.Pet-Phoenix-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-Skeleton {
+.Pet-Pterodactyl-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-White {
+.Pet-Pterodactyl-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Pterodactyl-Zombie {
+.Pet-Pterodactyl-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-Base {
+.Pet-Pterodactyl-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-CottonCandyBlue {
+.Pet-Pterodactyl-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-CottonCandyPink {
+.Pet-Pterodactyl-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-Desert {
+.Pet-Pterodactyl-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-Golden {
+.Pet-Pterodactyl-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-Red {
+.Pet-Pterodactyl-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-Shade {
+.Pet-Pterodactyl-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-Skeleton {
+.Pet-Rat-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-White {
+.Pet-Rat-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rat-Zombie {
+.Pet-Rat-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rock-Base {
+.Pet-Rat-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px 0px;
width: 81px;
height: 99px;
}
-.Pet-Rock-CottonCandyBlue {
+.Pet-Rat-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -100px;
width: 81px;
height: 99px;
}
-.Pet-Rock-CottonCandyPink {
+.Pet-Rat-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -200px;
width: 81px;
height: 99px;
}
-.Pet-Rock-Desert {
+.Pet-Rat-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -300px;
width: 81px;
height: 99px;
}
-.Pet-Rock-Golden {
+.Pet-Rat-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -400px;
width: 81px;
height: 99px;
}
-.Pet-Rock-Red {
+.Pet-Rat-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -500px;
width: 81px;
height: 99px;
}
-.Pet-Rock-Shade {
+.Pet-Rat-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -600px;
width: 81px;
height: 99px;
}
-.Pet-Rock-Skeleton {
+.Pet-Rock-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -700px;
width: 81px;
height: 99px;
}
-.Pet-Rock-White {
+.Pet-Rock-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -800px;
width: 81px;
height: 99px;
}
-.Pet-Rock-Zombie {
+.Pet-Rock-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -900px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-Base {
+.Pet-Rock-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-CottonCandyBlue {
+.Pet-Rock-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-CottonCandyPink {
+.Pet-Rock-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px 0px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-Desert {
+.Pet-Rock-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-Golden {
+.Pet-Rock-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-Red {
+.Pet-Rock-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-Shade {
+.Pet-Rock-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-Skeleton {
+.Pet-Rooster-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-White {
+.Pet-Rooster-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Rooster-Zombie {
+.Pet-Rooster-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-Base {
+.Pet-Rooster-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-CottonCandyBlue {
+.Pet-Rooster-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-CottonCandyPink {
+.Pet-Rooster-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-Desert {
+.Pet-Rooster-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-Golden {
+.Pet-Rooster-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-Red {
+.Pet-Rooster-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-Shade {
+.Pet-Rooster-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px 0px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-Skeleton {
+.Pet-Sabretooth-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -100px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-White {
+.Pet-Sabretooth-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -200px;
width: 81px;
height: 99px;
}
-.Pet-Sabretooth-Zombie {
+.Pet-Sabretooth-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -300px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-Base {
+.Pet-Sabretooth-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -400px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-CottonCandyBlue {
+.Pet-Sabretooth-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -500px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-CottonCandyPink {
+.Pet-Sabretooth-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -600px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-Desert {
+.Pet-Sabretooth-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -700px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-Golden {
+.Pet-Sabretooth-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -800px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-Red {
+.Pet-Sabretooth-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -900px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-Shade {
+.Pet-Sabretooth-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-Skeleton {
+.Pet-Seahorse-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-White {
+.Pet-Seahorse-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Seahorse-Zombie {
+.Pet-Seahorse-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-Base {
+.Pet-Seahorse-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-CottonCandyBlue {
+.Pet-Seahorse-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-CottonCandyPink {
+.Pet-Seahorse-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-Desert {
+.Pet-Seahorse-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-Golden {
+.Pet-Seahorse-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-Red {
+.Pet-Seahorse-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-Shade {
+.Pet-Seahorse-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-Skeleton {
+.Pet-Sheep-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-White {
+.Pet-Sheep-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sheep-Zombie {
+.Pet-Sheep-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Slime-Base {
+.Pet-Sheep-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Slime-CottonCandyBlue {
+.Pet-Sheep-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Slime-CottonCandyPink {
+.Pet-Sheep-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Slime-Desert {
+.Pet-Sheep-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Slime-Golden {
+.Pet-Sheep-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px 0px;
width: 81px;
height: 99px;
}
-.Pet-Slime-Red {
+.Pet-Sheep-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -100px;
width: 81px;
height: 99px;
}
-.Pet-Slime-Shade {
+.Pet-Sheep-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -200px;
width: 81px;
height: 99px;
}
-.Pet-Slime-Skeleton {
+.Pet-Slime-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -300px;
width: 81px;
height: 99px;
}
-.Pet-Slime-White {
+.Pet-Slime-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -400px;
width: 81px;
height: 99px;
}
-.Pet-Slime-Zombie {
+.Pet-Slime-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -500px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-Base {
+.Pet-Slime-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -600px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-CottonCandyBlue {
+.Pet-Slime-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -700px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-CottonCandyPink {
+.Pet-Slime-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -800px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-Desert {
+.Pet-Slime-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -900px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-Golden {
+.Pet-Slime-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-Red {
+.Pet-Slime-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-Shade {
+.Pet-Slime-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-Skeleton {
+.Pet-Sloth-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px 0px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-White {
+.Pet-Sloth-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -100px;
width: 81px;
height: 99px;
}
-.Pet-Sloth-Zombie {
+.Pet-Sloth-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -200px;
width: 81px;
height: 99px;
}
-.Pet-Snail-Base {
+.Pet-Sloth-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -300px;
width: 81px;
height: 99px;
}
-.Pet-Snail-CottonCandyBlue {
+.Pet-Sloth-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -400px;
width: 81px;
height: 99px;
}
-.Pet-Snail-CottonCandyPink {
+.Pet-Sloth-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -500px;
width: 81px;
height: 99px;
}
-.Pet-Snail-Desert {
+.Pet-Sloth-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -600px;
width: 81px;
height: 99px;
}
-.Pet-Snail-Golden {
+.Pet-Sloth-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -700px;
width: 81px;
height: 99px;
}
-.Pet-Snail-Red {
+.Pet-Sloth-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -800px;
width: 81px;
height: 99px;
}
-.Pet-Snail-Shade {
+.Pet-Sloth-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -900px;
width: 81px;
height: 99px;
}
-.Pet-Snail-Skeleton {
+.Pet-Snail-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Snail-White {
+.Pet-Snail-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -1100px;
width: 81px;
height: 99px;
}
-.Pet-Snail-Zombie {
+.Pet-Snail-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -1200px;
width: 81px;
height: 99px;
}
-.Pet-Snake-Base {
+.Pet-Snail-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Snake-CottonCandyBlue {
+.Pet-Snail-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Snake-CottonCandyPink {
+.Pet-Snail-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Snake-Desert {
+.Pet-Snail-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Snake-Golden {
+.Pet-Snail-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Snake-Red {
+.Pet-Snail-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Snake-Shade {
+.Pet-Snail-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Snake-Skeleton {
+.Pet-Snake-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Snake-White {
+.Pet-Snake-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Snake-Zombie {
+.Pet-Snake-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Spider-Base {
+.Pet-Snake-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Spider-CottonCandyBlue {
+.Pet-Snake-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Spider-CottonCandyPink {
+.Pet-Snake-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Spider-Desert {
+.Pet-Snake-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Spider-Golden {
+.Pet-Snake-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Spider-Red {
+.Pet-Snake-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Spider-Shade {
+.Pet-Snake-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Spider-Skeleton {
+.Pet-Spider-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Spider-White {
+.Pet-Spider-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px 0px;
width: 81px;
height: 99px;
}
-.Pet-Spider-Zombie {
+.Pet-Spider-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px -100px;
width: 81px;
height: 99px;
}
-.Pet-TRex-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -300px;
- width: 81px;
- height: 99px;
-}
-.Pet-TRex-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TRex-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -500px;
- width: 81px;
- height: 99px;
-}
-.Pet-TRex-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -600px;
- width: 81px;
- height: 99px;
-}
-.Pet-TRex-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -700px;
- width: 81px;
- height: 99px;
-}
-.Pet-TRex-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -800px;
- width: 81px;
- height: 99px;
-}
-.Pet-TRex-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -900px;
- width: 81px;
- height: 99px;
-}
-.Pet-TRex-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -1000px;
- width: 81px;
- height: 99px;
-}
-.Pet-TRex-White {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -1100px;
- width: 81px;
- height: 99px;
-}
-.Pet-TRex-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -1200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Tiger-Veteran {
+.Pet-Spider-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px -200px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-Aquatic {
+.Pet-Spider-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px -300px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-Base {
+.Pet-Spider-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px -400px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-CottonCandyBlue {
+.Pet-Spider-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px -500px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-CottonCandyPink {
+.Pet-Spider-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px -600px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-Cupid {
+.Pet-Spider-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px -700px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-Desert {
+.Pet-Spider-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px -800px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-Ember {
+.Pet-TRex-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1476px -900px;
+ background-position: -1558px -1000px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-Fairy {
+.Pet-TRex-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1476px -1000px;
+ background-position: -1558px -1100px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-Floral {
+.Pet-TRex-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1476px -1100px;
+ background-position: -1558px -1200px;
width: 81px;
height: 99px;
}
-.Pet-TigerCub-Ghost {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1476px -1200px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1476px -1300px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Holly {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: 0px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Peppermint {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -82px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -164px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-RoyalPurple {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -246px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -328px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Shimmer {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -410px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -492px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Spooky {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -574px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-StarryNight {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -656px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Thunderstorm {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -738px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-White {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -820px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-TigerCub-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -902px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -984px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1066px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1148px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1230px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1312px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1394px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1476px -1400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px 0px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-White {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -100px;
- width: 81px;
- height: 99px;
-}
-.Pet-Treeling-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-20.png');
- background-position: -1558px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Triceratops-Base {
+.Pet-TRex-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1558px -1300px;
width: 81px;
height: 99px;
}
-.Pet-Triceratops-CottonCandyBlue {
+.Pet-TRex-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1558px -1400px;
width: 81px;
height: 99px;
}
-.Pet-Triceratops-CottonCandyPink {
+.Pet-TRex-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: 0px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Triceratops-Desert {
+.Pet-TRex-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -82px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Triceratops-Golden {
+.Pet-TRex-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -164px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Triceratops-Red {
+.Pet-TRex-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -246px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Triceratops-Shade {
+.Pet-TRex-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -328px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Triceratops-Skeleton {
+.Pet-Tiger-Veteran {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1476px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Aquatic {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1476px -1000px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1476px -1100px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1476px -1200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1476px -1300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Cupid {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: 0px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -82px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Ember {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -164px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Fairy {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -246px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Floral {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -328px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Ghost {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -410px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -492px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Holly {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -574px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Peppermint {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -656px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -738px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-RoyalPurple {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -820px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -902px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Shimmer {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -984px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1066px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Spooky {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1148px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-StarryNight {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1230px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Thunderstorm {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1312px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1394px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-TigerCub-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1476px -1400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px -600px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px -700px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px -800px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Treeling-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-20.png');
+ background-position: -1558px -900px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Triceratops-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -410px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Triceratops-White {
+.Pet-Triceratops-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -492px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Triceratops-Zombie {
+.Pet-Triceratops-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -574px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turkey-Base {
+.Pet-Triceratops-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -656px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turkey-Gilded {
+.Pet-Triceratops-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -738px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-Base {
+.Pet-Triceratops-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -820px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-CottonCandyBlue {
+.Pet-Triceratops-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -902px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-CottonCandyPink {
+.Pet-Triceratops-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -984px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-Desert {
+.Pet-Triceratops-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1066px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-Golden {
+.Pet-Triceratops-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1148px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-Red {
+.Pet-Turkey-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1230px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-Shade {
+.Pet-Turkey-Gilded {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1312px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-Skeleton {
+.Pet-Turtle-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1394px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-White {
+.Pet-Turtle-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1476px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Turtle-Zombie {
+.Pet-Turtle-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1558px -1500px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-Base {
+.Pet-Turtle-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px 0px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-CottonCandyBlue {
+.Pet-Turtle-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -100px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-CottonCandyPink {
+.Pet-Turtle-Red {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -200px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-Desert {
+.Pet-Turtle-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -300px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-Golden {
+.Pet-Turtle-Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -400px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-Red {
+.Pet-Turtle-White {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -500px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-Shade {
+.Pet-Turtle-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -600px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-Skeleton {
+.Pet-Unicorn-Base {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -700px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-White {
+.Pet-Unicorn-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -800px;
width: 81px;
height: 99px;
}
-.Pet-Unicorn-Zombie {
+.Pet-Unicorn-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -900px;
width: 81px;
height: 99px;
}
-.Pet-Whale-Base {
+.Pet-Unicorn-Desert {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -1000px;
width: 81px;
height: 99px;
}
-.Pet-Whale-CottonCandyBlue {
+.Pet-Unicorn-Golden {
background-image: url('~assets/images/sprites/spritesmith-main-20.png');
background-position: -1640px -1100px;
width: 81px;
diff --git a/website/client/assets/css/sprites/spritesmith-main-21.css b/website/client/assets/css/sprites/spritesmith-main-21.css
index de302c3bc4..f47492ac96 100644
--- a/website/client/assets/css/sprites/spritesmith-main-21.css
+++ b/website/client/assets/css/sprites/spritesmith-main-21.css
@@ -1,396 +1,438 @@
-.Pet-Whale-CottonCandyPink {
+.Pet-Unicorn-Red {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
background-position: -82px 0px;
width: 81px;
height: 99px;
}
-.Pet-Whale-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -410px -400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Whale-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -164px 0px;
- width: 81px;
- height: 99px;
-}
-.Pet-Whale-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: 0px -100px;
- width: 81px;
- height: 99px;
-}
-.Pet-Whale-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -82px -100px;
- width: 81px;
- height: 99px;
-}
-.Pet-Whale-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -164px -100px;
- width: 81px;
- height: 99px;
-}
-.Pet-Whale-White {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -246px 0px;
- width: 81px;
- height: 99px;
-}
-.Pet-Whale-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -246px -100px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Aquatic {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: 0px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -82px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -164px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -246px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Cupid {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -328px 0px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -328px -100px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Ember {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -328px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Fairy {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: 0px -300px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Floral {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -82px -300px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Ghost {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -164px -300px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Golden {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -246px -300px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Holly {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -328px -300px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Peppermint {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -410px 0px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Red {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -410px -100px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-RoyalPurple {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -410px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Shade {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -410px -300px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Shimmer {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -492px 0px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Skeleton {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -492px -100px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Spooky {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -492px -200px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-StarryNight {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -492px -300px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Thunderstorm {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: 0px -400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Veteran {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -82px -400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-White {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -164px -400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Wolf-Zombie {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -246px -400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Yarn-Base {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -328px -400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Yarn-CottonCandyBlue {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: 0px 0px;
- width: 81px;
- height: 99px;
-}
-.Pet-Yarn-CottonCandyPink {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -492px -400px;
- width: 81px;
- height: 99px;
-}
-.Pet-Yarn-Desert {
- background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -574px 0px;
- width: 81px;
- height: 99px;
-}
-.Pet-Yarn-Golden {
+.Pet-Unicorn-Shade {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
background-position: -574px -100px;
width: 81px;
height: 99px;
}
-.Pet-Yarn-Red {
+.Pet-Unicorn-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -164px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Unicorn-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: 0px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Unicorn-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -82px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -164px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -246px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -246px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: 0px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -82px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -164px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -246px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -328px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -328px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Whale-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -328px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Aquatic {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: 0px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Base {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -82px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-CottonCandyBlue {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -164px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-CottonCandyPink {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -246px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Cupid {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -328px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -410px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Ember {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -410px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Fairy {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -410px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Floral {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -410px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Ghost {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -492px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -492px -100px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Holly {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -492px -200px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Peppermint {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -492px -300px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: 0px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-RoyalPurple {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -82px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -164px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Shimmer {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -246px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -328px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Spooky {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -410px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-StarryNight {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -492px -400px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Thunderstorm {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -574px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-Veteran {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: 0px 0px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Wolf-White {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
background-position: -574px -200px;
width: 81px;
height: 99px;
}
-.Pet-Yarn-Shade {
+.Pet-Wolf-Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
background-position: -574px -300px;
width: 81px;
height: 99px;
}
-.Pet-Yarn-Skeleton {
+.Pet-Yarn-Base {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
background-position: -574px -400px;
width: 81px;
height: 99px;
}
-.Pet-Yarn-White {
+.Pet-Yarn-CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
background-position: 0px -500px;
width: 81px;
height: 99px;
}
-.Pet-Yarn-Zombie {
+.Pet-Yarn-CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
background-position: -82px -500px;
width: 81px;
height: 99px;
}
+.Pet-Yarn-Desert {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -164px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Yarn-Golden {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -246px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Yarn-Red {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -328px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Yarn-Shade {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -410px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Yarn-Skeleton {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -492px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Yarn-White {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -574px -500px;
+ width: 81px;
+ height: 99px;
+}
+.Pet-Yarn-Zombie {
+ background-image: url('~assets/images/sprites/spritesmith-main-21.png');
+ background-position: -656px 0px;
+ width: 81px;
+ height: 99px;
+}
.Pet_HatchingPotion_Aquatic {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -233px -500px;
+ background-position: -656px -169px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Base {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -656px -345px;
+ background-position: -345px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_CottonCandyBlue {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -302px -500px;
+ background-position: -656px -238px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_CottonCandyPink {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -371px -500px;
+ background-position: -656px -307px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Cupid {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -440px -500px;
+ background-position: -656px -376px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Desert {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -509px -500px;
+ background-position: -656px -445px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Ember {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -578px -500px;
+ background-position: -656px -514px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Fairy {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -656px 0px;
+ background-position: 0px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Floral {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -656px -69px;
+ background-position: -69px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Ghost {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -656px -138px;
+ background-position: -138px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Golden {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -656px -207px;
+ background-position: -207px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Holly {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -656px -276px;
+ background-position: -276px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Peppermint {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -164px -500px;
+ background-position: -656px -100px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Purple {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -656px -414px;
+ background-position: -414px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Red {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -656px -483px;
+ background-position: -483px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_RoyalPurple {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: 0px -600px;
+ background-position: -552px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Shade {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -69px -600px;
+ background-position: -621px -600px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Shimmer {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -138px -600px;
+ background-position: 0px -669px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Skeleton {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -207px -600px;
+ background-position: -69px -669px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Spooky {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -276px -600px;
+ background-position: -138px -669px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_StarryNight {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -345px -600px;
+ background-position: -207px -669px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Thunderstorm {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -414px -600px;
+ background-position: -276px -669px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_White {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -483px -600px;
+ background-position: -345px -669px;
width: 68px;
height: 68px;
}
.Pet_HatchingPotion_Zombie {
background-image: url('~assets/images/sprites/spritesmith-main-21.png');
- background-position: -552px -600px;
+ background-position: -414px -669px;
width: 68px;
height: 68px;
}
diff --git a/website/client/assets/css/sprites/spritesmith-main-7.css b/website/client/assets/css/sprites/spritesmith-main-7.css
index a2db50936f..290469556f 100644
--- a/website/client/assets/css/sprites/spritesmith-main-7.css
+++ b/website/client/assets/css/sprites/spritesmith-main-7.css
@@ -1,312 +1,312 @@
.slim_armor_mystery_201503 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px -91px;
+ background-position: -364px -1107px;
width: 90px;
height: 90px;
}
.back_mystery_201504 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -1092px;
+ background-position: -1318px -819px;
width: 90px;
height: 90px;
}
.broad_armor_mystery_201504 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -455px -1210px;
+ background-position: -728px -1198px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201504 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -1104px;
+ background-position: -1409px -966px;
width: 68px;
height: 68px;
}
.shop_back_mystery_201504 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -1173px;
+ background-position: -1409px -1035px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201504 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -1392px;
+ background-position: -1409px -1242px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201504 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -937px;
+ background-position: -728px -743px;
width: 90px;
height: 90px;
}
.head_mystery_201505 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -91px -1210px;
+ background-position: -954px 0px;
width: 90px;
height: 90px;
}
.shop_head_mystery_201505 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -69px -1392px;
+ background-position: 0px -1358px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201505 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1518px -1599px;
+ background-position: -1685px 0px;
width: 68px;
height: 68px;
}
.shop_weapon_mystery_201505 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1449px -1599px;
+ background-position: -1587px -1565px;
width: 68px;
height: 68px;
}
.weapon_mystery_201505 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -846px;
+ background-position: 0px -1107px;
width: 90px;
height: 90px;
}
.broad_armor_mystery_201506 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -472px -197px;
+ background-position: -273px -455px;
width: 90px;
height: 105px;
}
.eyewear_mystery_201506 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -91px -467px;
+ background-position: -587px -106px;
width: 90px;
height: 105px;
}
.shop_armor_mystery_201506 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1380px -1599px;
+ background-position: -1518px -1565px;
width: 68px;
height: 68px;
}
.shop_eyewear_mystery_201506 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1311px -1599px;
+ background-position: -1449px -1565px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201506 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1242px -1599px;
+ background-position: -1380px -1565px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201506 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -273px -467px;
+ background-position: -182px -455px;
width: 90px;
height: 105px;
}
.back_mystery_201507 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -578px -212px;
+ background-position: -91px -455px;
width: 90px;
height: 105px;
}
.eyewear_mystery_201507 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -578px -318px;
+ background-position: 0px -455px;
width: 90px;
height: 105px;
}
.shop_back_mystery_201507 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1173px -1599px;
+ background-position: -1311px -1565px;
width: 68px;
height: 68px;
}
.shop_eyewear_mystery_201507 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1104px -1599px;
+ background-position: -1242px -1565px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201507 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1035px -1599px;
+ background-position: -1173px -1565px;
width: 68px;
height: 68px;
}
.broad_armor_mystery_201508 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -188px -664px;
+ background-position: -769px -455px;
width: 93px;
height: 90px;
}
.head_mystery_201508 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -658px -664px;
+ background-position: -769px -364px;
width: 93px;
height: 90px;
}
.shop_armor_mystery_201508 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -966px -1599px;
+ background-position: -1104px -1565px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201508 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -897px -1599px;
+ background-position: -1035px -1565px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201508 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -828px -1599px;
+ background-position: -966px -1565px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201508 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -760px 0px;
+ background-position: -769px -273px;
width: 93px;
height: 90px;
}
.broad_armor_mystery_201509 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px -455px;
+ background-position: -91px -925px;
width: 90px;
height: 90px;
}
.head_mystery_201509 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px -546px;
+ background-position: -182px -925px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201509 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -759px -1599px;
+ background-position: -897px -1565px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201509 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -690px -1599px;
+ background-position: -828px -1565px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201509 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -621px -1599px;
+ background-position: -759px -1565px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201509 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -546px -937px;
+ background-position: -455px -1016px;
width: 90px;
height: 90px;
}
.back_mystery_201510 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -573px;
+ background-position: -472px -264px;
width: 105px;
height: 90px;
}
.headAccessory_mystery_201510 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -470px -664px;
+ background-position: -769px -182px;
width: 93px;
height: 90px;
}
.shop_back_mystery_201510 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -552px -1599px;
+ background-position: -690px -1565px;
width: 68px;
height: 68px;
}
.shop_headAccessory_mystery_201510 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -483px -1599px;
+ background-position: -621px -1565px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201510 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -414px -1599px;
+ background-position: -552px -1565px;
width: 68px;
height: 68px;
}
.broad_armor_mystery_201511 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -1119px;
+ background-position: -819px -1107px;
width: 90px;
height: 90px;
}
.head_mystery_201511 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -364px -1119px;
+ background-position: -1001px -1107px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201511 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -345px -1599px;
+ background-position: -483px -1565px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201511 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -276px -1599px;
+ background-position: -414px -1565px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201511 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -207px -1599px;
+ background-position: -345px -1565px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201511 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -182px;
+ background-position: -1227px -728px;
width: 90px;
height: 90px;
}
.broad_armor_mystery_201512 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -273px;
+ background-position: -1227px -1092px;
width: 90px;
height: 90px;
}
.head_mystery_201512 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -637px;
+ background-position: 0px -1198px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201512 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -138px -1599px;
+ background-position: -276px -1565px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201512 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -69px -1599px;
+ background-position: -207px -1565px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201512 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -1599px;
+ background-position: -138px -1565px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201512 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -1210px;
+ background-position: -637px -1198px;
width: 90px;
height: 90px;
}
@@ -324,799 +324,799 @@
}
.shop_head_mystery_201601 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -1518px;
+ background-position: -69px -1565px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201601 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -1449px;
+ background-position: 0px -1565px;
width: 68px;
height: 68px;
}
.shop_shield_mystery_201601 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -1380px;
+ background-position: -1616px -1449px;
width: 68px;
height: 68px;
}
.back_mystery_201602 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1092px -1210px;
+ background-position: -1318px -364px;
width: 90px;
height: 90px;
}
.head_mystery_201602 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1183px -1210px;
+ background-position: -1318px -455px;
width: 90px;
height: 90px;
}
.shop_back_mystery_201602 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -1311px;
+ background-position: -1616px -1380px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201602 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -1242px;
+ background-position: -621px -1427px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201602 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -1173px;
+ background-position: -552px -1427px;
width: 68px;
height: 68px;
}
.broad_armor_mystery_201603 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -669px -482px;
+ background-position: -678px -391px;
width: 90px;
height: 90px;
}
.head_mystery_201603 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -669px -573px;
+ background-position: -678px -482px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201603 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -1104px;
+ background-position: -483px -1427px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201603 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -1035px;
+ background-position: -414px -1427px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201603 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -966px;
+ background-position: -345px -1427px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201603 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -273px -755px;
+ background-position: -273px -743px;
width: 90px;
height: 90px;
}
.broad_armor_mystery_201604 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -760px -455px;
+ background-position: -769px -91px;
width: 93px;
height: 90px;
}
.head_mystery_201604 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -664px;
+ background-position: -769px 0px;
width: 93px;
height: 90px;
}
.shop_armor_mystery_201604 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -897px;
+ background-position: -276px -1427px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201604 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -828px;
+ background-position: -207px -1427px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201604 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -138px -1461px;
+ background-position: -138px -1427px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201604 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -94px -664px;
+ background-position: -515px -561px;
width: 93px;
height: 90px;
}
.broad_armor_mystery_201605 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -854px -91px;
+ background-position: -863px -91px;
width: 90px;
height: 90px;
}
.head_mystery_201605 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -854px -182px;
+ background-position: -863px -182px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201605 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -69px -1461px;
+ background-position: -69px -1427px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201605 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -1461px;
+ background-position: 0px -1427px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201605 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -1380px;
+ background-position: -1478px -1311px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201605 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -854px -546px;
+ background-position: -863px -546px;
width: 90px;
height: 90px;
}
.broad_armor_mystery_201606 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -578px -106px;
+ background-position: -587px -318px;
width: 90px;
height: 105px;
}
.head_mystery_201606 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -854px -728px;
+ background-position: -863px -728px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201606 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -1311px;
+ background-position: -1478px -1242px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201606 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -1242px;
+ background-position: -1478px -1173px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201606 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -1173px;
+ background-position: -1478px -1104px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201606 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -472px -91px;
+ background-position: -587px -212px;
width: 90px;
height: 105px;
}
.broad_armor_mystery_201607 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -364px -846px;
+ background-position: -364px -834px;
width: 90px;
height: 90px;
}
.head_mystery_201607 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -455px -846px;
+ background-position: -455px -834px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201607 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -1104px;
+ background-position: -1478px -1035px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201607 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -1035px;
+ background-position: -1478px -966px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201607 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -966px;
+ background-position: -1478px -897px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201607 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -819px -846px;
+ background-position: -819px -834px;
width: 90px;
height: 90px;
}
.back_mystery_201608 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -760px -182px;
+ background-position: -564px -652px;
width: 93px;
height: 90px;
}
.head_mystery_201608 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -760px -273px;
+ background-position: -470px -652px;
width: 93px;
height: 90px;
}
.shop_back_mystery_201608 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -897px;
+ background-position: -1478px -828px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201608 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -828px;
+ background-position: -1478px -759px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201608 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -759px;
+ background-position: -1478px -690px;
width: 68px;
height: 68px;
}
.broad_armor_mystery_201609 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -760px -364px;
+ background-position: -376px -652px;
width: 93px;
height: 90px;
}
.head_mystery_201609 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -760px -91px;
+ background-position: -282px -652px;
width: 93px;
height: 90px;
}
.shop_armor_mystery_201609 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -690px;
+ background-position: -1478px -621px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201609 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -621px;
+ background-position: -1478px -552px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201609 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -552px;
+ background-position: -1478px -483px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201609 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -760px -546px;
+ background-position: -188px -652px;
width: 93px;
height: 90px;
}
.broad_armor_mystery_201610 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -669px 0px;
+ background-position: -678px 0px;
width: 90px;
height: 99px;
}
.head_mystery_201610 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -669px -100px;
+ background-position: -678px -100px;
width: 90px;
height: 99px;
}
.shop_armor_mystery_201610 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -483px;
+ background-position: -1478px -414px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201610 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -414px;
+ background-position: -1478px -345px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201610 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -345px;
+ background-position: -1478px -276px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201610 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -669px -200px;
+ background-position: -678px -200px;
width: 90px;
height: 99px;
}
.head_mystery_201611 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -637px -937px;
+ background-position: -637px -925px;
width: 90px;
height: 90px;
}
.shop_head_mystery_201611 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -276px;
+ background-position: -1478px -207px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201611 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -207px;
+ background-position: -1478px -138px;
width: 68px;
height: 68px;
}
.shop_weapon_mystery_201611 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -138px;
+ background-position: -1478px -69px;
width: 68px;
height: 68px;
}
.weapon_mystery_201611 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px 0px;
+ background-position: -1045px 0px;
width: 90px;
height: 90px;
}
.broad_armor_mystery_201612 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -91px;
+ background-position: -1045px -91px;
width: 90px;
height: 90px;
}
.head_mystery_201612 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -182px;
+ background-position: -1045px -182px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201612 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px -69px;
+ background-position: -1478px 0px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201612 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1469px 0px;
+ background-position: -1380px -1358px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201612 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1380px -1392px;
+ background-position: -1311px -1358px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201612 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -546px;
+ background-position: -1045px -546px;
width: 90px;
height: 90px;
}
.eyewear_mystery_201701 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -472px -303px;
+ background-position: -587px -424px;
width: 90px;
height: 105px;
}
.shield_mystery_201701 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -467px;
+ background-position: -587px 0px;
width: 90px;
height: 105px;
}
.shop_eyewear_mystery_201701 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1311px -1392px;
+ background-position: -1242px -1358px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201701 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1242px -1392px;
+ background-position: -1173px -1358px;
width: 68px;
height: 68px;
}
.shop_shield_mystery_201701 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1173px -1392px;
+ background-position: -1104px -1358px;
width: 68px;
height: 68px;
}
.back_mystery_201702 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -91px -1028px;
+ background-position: -91px -1016px;
width: 90px;
height: 90px;
}
.head_mystery_201702 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -182px -1028px;
+ background-position: -182px -1016px;
width: 90px;
height: 90px;
}
.shop_back_mystery_201702 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1104px -1392px;
+ background-position: -1035px -1358px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201702 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1035px -1392px;
+ background-position: -966px -1358px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201702 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -966px -1392px;
+ background-position: -897px -1358px;
width: 68px;
height: 68px;
}
.broad_armor_mystery_201703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -546px -1028px;
+ background-position: -546px -1016px;
width: 90px;
height: 90px;
}
.head_mystery_201703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -637px -1028px;
+ background-position: -637px -1016px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -897px -1392px;
+ background-position: -828px -1358px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -828px -1392px;
+ background-position: -759px -1358px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -759px -1392px;
+ background-position: -690px -1358px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1001px -1028px;
+ background-position: -1001px -1016px;
width: 90px;
height: 90px;
}
.back_mystery_201704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px 0px;
+ background-position: -1136px 0px;
width: 90px;
height: 90px;
}
.broad_armor_mystery_201704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -91px;
+ background-position: -1136px -91px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_201704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -690px -1392px;
+ background-position: -621px -1358px;
width: 68px;
height: 68px;
}
.shop_back_mystery_201704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -621px -1392px;
+ background-position: -552px -1358px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -552px -1392px;
+ background-position: -483px -1358px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -455px;
+ background-position: -1136px -455px;
width: 90px;
height: 90px;
}
.body_mystery_201705 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -546px;
+ background-position: -1136px -546px;
width: 90px;
height: 90px;
}
.head_mystery_201705 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -637px;
+ background-position: -1136px -637px;
width: 90px;
height: 90px;
}
.shop_body_mystery_201705 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -483px -1392px;
+ background-position: -414px -1358px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201705 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -414px -1392px;
+ background-position: -345px -1358px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201705 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -345px -1392px;
+ background-position: -276px -1358px;
width: 68px;
height: 68px;
}
.back_mystery_201706 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -342px -288px;
+ background-position: -115px -364px;
width: 111px;
height: 90px;
}
.body_mystery_201706 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -230px -288px;
+ background-position: -227px -364px;
width: 111px;
height: 90px;
}
.shop_back_mystery_201706 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -276px -1392px;
+ background-position: -207px -1358px;
width: 68px;
height: 68px;
}
.shop_body_mystery_201706 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -207px -1392px;
+ background-position: -138px -1358px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201706 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -138px -1392px;
+ background-position: -69px -1358px;
width: 68px;
height: 68px;
}
.broad_armor_mystery_201707 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -364px -467px;
+ background-position: -470px -455px;
width: 105px;
height: 90px;
}
.head_mystery_201707 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -470px -467px;
+ background-position: -364px -455px;
width: 105px;
height: 90px;
}
.shop_armor_mystery_201707 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -578px -530px;
+ background-position: -1685px -138px;
width: 40px;
height: 40px;
}
.shop_head_mystery_201707 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -619px -530px;
+ background-position: -1685px -179px;
width: 40px;
height: 40px;
}
.shop_set_mystery_201707 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -1311px;
+ background-position: -1409px -1173px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201707 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -472px 0px;
+ background-position: -472px -355px;
width: 105px;
height: 90px;
}
.shield_mystery_201708 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -910px -1119px;
+ background-position: -910px -1107px;
width: 90px;
height: 90px;
}
.shop_set_mystery_201708 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -1242px;
+ background-position: -1409px -1104px;
width: 68px;
height: 68px;
}
.shop_shield_mystery_201708 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -472px -409px;
+ background-position: -1685px -220px;
width: 40px;
height: 40px;
}
.shop_weapon_mystery_201708 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -513px -409px;
+ background-position: -1685px -261px;
width: 40px;
height: 40px;
}
.weapon_mystery_201708 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -91px;
+ background-position: -1227px -91px;
width: 90px;
height: 90px;
}
.back_mystery_201709 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -288px;
+ background-position: -115px -273px;
width: 114px;
height: 90px;
}
.shield_mystery_201709 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -357px 0px;
+ background-position: 0px -273px;
width: 114px;
height: 90px;
}
.shop_back_mystery_201709 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -1035px;
+ background-position: -1409px -897px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201709 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -966px;
+ background-position: -1409px -828px;
width: 68px;
height: 68px;
}
.shop_shield_mystery_201709 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -897px;
+ background-position: -1409px -759px;
width: 68px;
height: 68px;
}
.broad_armor_mystery_201710 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -282px -664px;
+ background-position: 0px -652px;
width: 93px;
height: 90px;
}
.head_mystery_201710 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -376px -664px;
+ background-position: -658px -652px;
width: 93px;
height: 90px;
}
.shop_armor_mystery_201710 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -828px;
+ background-position: -1409px -690px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201710 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -759px;
+ background-position: -1409px -621px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201710 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -690px;
+ background-position: -1409px -276px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201710 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -564px -664px;
+ background-position: -94px -652px;
width: 93px;
height: 90px;
}
.body_mystery_201711 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -103px -91px;
+ background-position: -115px -91px;
width: 114px;
height: 90px;
}
.broad_armor_mystery_201711 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -115px -197px;
+ background-position: -242px 0px;
width: 114px;
height: 90px;
}
.shop_armor_mystery_201711 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -621px;
+ background-position: -1409px -207px;
width: 68px;
height: 68px;
}
.shop_body_mystery_201711 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -552px;
+ background-position: -1409px -138px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201711 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -483px;
+ background-position: -1409px -69px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201711 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -197px;
+ background-position: -242px -91px;
width: 114px;
height: 90px;
}
.broad_armor_mystery_201712 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -242px -91px;
+ background-position: -357px 0px;
width: 114px;
height: 90px;
}
.head_mystery_201712 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -242px 0px;
+ background-position: -357px -182px;
width: 114px;
height: 90px;
}
.shop_armor_mystery_201712 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -414px;
+ background-position: -1104px -1289px;
width: 68px;
height: 68px;
}
.shop_head_mystery_201712 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -345px;
+ background-position: -1035px -1289px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201712 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -276px;
+ background-position: -966px -1289px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_201712 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -357px -182px;
+ background-position: -230px -273px;
width: 114px;
height: 90px;
}
.back_mystery_201801 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -230px -197px;
+ background-position: 0px -364px;
width: 114px;
height: 90px;
}
@@ -1128,1279 +1128,1285 @@
}
.shop_back_mystery_201801 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1308px -1301px;
+ background-position: -552px -1289px;
width: 68px;
height: 68px;
}
.shop_headAccessory_mystery_201801 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1239px -1301px;
+ background-position: -483px -1289px;
width: 68px;
height: 68px;
}
.shop_set_mystery_201801 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1170px -1301px;
+ background-position: -414px -1289px;
width: 68px;
height: 68px;
}
+.broad_armor_mystery_201802 {
+ background-image: url('~assets/images/sprites/spritesmith-main-7.png');
+ background-position: -230px -182px;
+ width: 114px;
+ height: 90px;
+}
+.head_mystery_201802 {
+ background-image: url('~assets/images/sprites/spritesmith-main-7.png');
+ background-position: -115px -182px;
+ width: 114px;
+ height: 90px;
+}
+.shield_mystery_201802 {
+ background-image: url('~assets/images/sprites/spritesmith-main-7.png');
+ background-position: 0px -182px;
+ width: 114px;
+ height: 90px;
+}
+.shop_armor_mystery_201802 {
+ background-image: url('~assets/images/sprites/spritesmith-main-7.png');
+ background-position: -345px -1289px;
+ width: 68px;
+ height: 68px;
+}
+.shop_head_mystery_201802 {
+ background-image: url('~assets/images/sprites/spritesmith-main-7.png');
+ background-position: -276px -1289px;
+ width: 68px;
+ height: 68px;
+}
+.shop_set_mystery_201802 {
+ background-image: url('~assets/images/sprites/spritesmith-main-7.png');
+ background-position: -207px -1289px;
+ width: 68px;
+ height: 68px;
+}
+.shop_shield_mystery_201802 {
+ background-image: url('~assets/images/sprites/spritesmith-main-7.png');
+ background-position: -678px -573px;
+ width: 68px;
+ height: 68px;
+}
+.slim_armor_mystery_201802 {
+ background-image: url('~assets/images/sprites/spritesmith-main-7.png');
+ background-position: 0px -91px;
+ width: 114px;
+ height: 90px;
+}
.broad_armor_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -273px;
+ background-position: -1318px -1001px;
width: 90px;
height: 90px;
}
.eyewear_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -364px;
+ background-position: -1318px -1092px;
width: 90px;
height: 90px;
}
.head_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -455px;
+ background-position: -769px -546px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1101px -1301px;
+ background-position: -1173px -1427px;
width: 68px;
height: 68px;
}
.shop_eyewear_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -756px -1301px;
+ background-position: -609px -561px;
width: 68px;
height: 68px;
}
.shop_head_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -687px -1301px;
+ background-position: 0px -1289px;
width: 68px;
height: 68px;
}
.shop_set_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -618px -1301px;
+ background-position: -69px -1289px;
width: 68px;
height: 68px;
}
.shop_weapon_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -273px -1301px;
+ background-position: -138px -1289px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -1001px;
+ background-position: -1318px -728px;
width: 90px;
height: 90px;
}
.weapon_mystery_301404 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -760px -637px;
+ background-position: -1318px -637px;
width: 90px;
height: 90px;
}
.eyewear_mystery_301405 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -1183px;
+ background-position: -1318px -546px;
width: 90px;
height: 90px;
}
.headAccessory_mystery_301405 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -91px -1301px;
+ background-position: -1318px -91px;
width: 90px;
height: 90px;
}
.head_mystery_301405 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -1301px;
+ background-position: -1318px -182px;
width: 90px;
height: 90px;
}
.shield_mystery_301405 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -910px;
+ background-position: -1318px 0px;
width: 90px;
height: 90px;
}
.shop_eyewear_mystery_301405 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1311px -1461px;
+ background-position: -621px -1289px;
width: 68px;
height: 68px;
}
.shop_headAccessory_mystery_301405 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -411px -1301px;
+ background-position: -759px -1289px;
width: 68px;
height: 68px;
}
.shop_head_mystery_301405 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -342px -1301px;
+ background-position: -690px -1289px;
width: 68px;
height: 68px;
}
.shop_set_mystery_301405 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -480px -1301px;
+ background-position: -828px -1289px;
width: 68px;
height: 68px;
}
.shop_shield_mystery_301405 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -549px -1301px;
+ background-position: -897px -1289px;
width: 68px;
height: 68px;
}
.broad_armor_mystery_301703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -819px;
+ background-position: -910px -1198px;
width: 90px;
height: 90px;
}
.eyewear_mystery_301703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -728px;
+ background-position: -819px -1198px;
width: 90px;
height: 90px;
}
.head_mystery_301703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -345px -379px;
+ background-position: -472px 0px;
width: 114px;
height: 87px;
}
.shop_armor_mystery_301703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -825px -1301px;
+ background-position: -1173px -1289px;
width: 68px;
height: 68px;
}
.shop_eyewear_mystery_301703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -894px -1301px;
+ background-position: -1242px -1289px;
width: 68px;
height: 68px;
}
.shop_head_mystery_301703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -963px -1301px;
+ background-position: -1311px -1289px;
width: 68px;
height: 68px;
}
.shop_set_mystery_301703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1032px -1301px;
+ background-position: -1409px 0px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_301703 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -546px;
+ background-position: -364px -1198px;
width: 90px;
height: 90px;
}
.broad_armor_mystery_301704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -182px;
+ background-position: -273px -1198px;
width: 90px;
height: 90px;
}
.head_mystery_301704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -91px;
+ background-position: -182px -1198px;
width: 90px;
height: 90px;
}
.shield_mystery_301704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px 0px;
+ background-position: -1227px -1001px;
width: 90px;
height: 90px;
}
.shop_armor_mystery_301704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px 0px;
+ background-position: -1409px -345px;
width: 68px;
height: 68px;
}
.shop_head_mystery_301704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -69px;
+ background-position: -1409px -414px;
width: 68px;
height: 68px;
}
.shop_set_mystery_301704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -138px;
+ background-position: -1409px -483px;
width: 68px;
height: 68px;
}
.shop_shield_mystery_301704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1400px -207px;
+ background-position: -1409px -552px;
width: 68px;
height: 68px;
}
.slim_armor_mystery_301704 {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -910px -1210px;
+ background-position: -1227px -910px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -819px -1210px;
+ background-position: -1227px -819px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -728px -1210px;
+ background-position: -1227px -546px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -364px -1210px;
+ background-position: -1227px -455px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -273px -1210px;
+ background-position: -1227px -364px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -182px -1210px;
+ background-position: -1227px 0px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -1001px;
+ background-position: -1092px -1107px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -209px -573px;
+ background-position: -309px -561px;
width: 102px;
height: 90px;
}
.broad_armor_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -819px;
+ background-position: -728px -1107px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -546px;
+ background-position: -637px -1107px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -455px;
+ background-position: -546px -1107px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -364px;
+ background-position: -273px -1107px;
width: 90px;
height: 90px;
}
.broad_armor_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -115px -379px;
+ background-position: -472px -176px;
width: 114px;
height: 87px;
}
.broad_armor_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1092px -1119px;
+ background-position: -91px -1107px;
width: 90px;
height: 90px;
}
.broad_armor_special_springMage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1001px -1119px;
+ background-position: -1136px -910px;
width: 90px;
height: 90px;
}
.broad_armor_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -728px -1119px;
+ background-position: -1136px -819px;
width: 90px;
height: 90px;
}
.broad_armor_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -637px -1119px;
+ background-position: -1136px -728px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -1028px;
+ background-position: -819px -925px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -910px;
+ background-position: -728px -925px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -819px;
+ background-position: -455px -925px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -455px;
+ background-position: -364px -925px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -364px;
+ background-position: -273px -925px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -273px;
+ background-position: -954px -819px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -518px -573px;
+ background-position: -206px -561px;
width: 102px;
height: 90px;
}
.headAccessory_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -819px -937px;
+ background-position: -954px -637px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -728px -937px;
+ background-position: -954px -364px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -455px -937px;
+ background-position: -954px -273px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -364px -937px;
+ background-position: -954px -182px;
width: 90px;
height: 90px;
}
.headAccessory_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -273px -937px;
+ background-position: -728px -834px;
width: 90px;
height: 90px;
}
.headAccessory_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px -819px;
+ background-position: -637px -834px;
width: 90px;
height: 90px;
}
.headAccessory_special_springMage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px -728px;
+ background-position: -546px -834px;
width: 90px;
height: 90px;
}
.headAccessory_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px -637px;
+ background-position: -182px -834px;
width: 90px;
height: 90px;
}
.headAccessory_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px -364px;
+ background-position: -91px -834px;
width: 90px;
height: 90px;
}
.head_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -546px -1119px;
+ background-position: -1136px -364px;
width: 90px;
height: 90px;
}
.head_special_spring2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -273px -1119px;
+ background-position: -1136px -273px;
width: 90px;
height: 90px;
}
.head_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -182px -1119px;
+ background-position: -1136px -182px;
width: 90px;
height: 90px;
}
.head_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -91px -1119px;
+ background-position: -910px -1016px;
width: 90px;
height: 90px;
}
.head_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -910px;
+ background-position: -819px -1016px;
width: 90px;
height: 90px;
}
.head_special_spring2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -819px;
+ background-position: -728px -1016px;
width: 90px;
height: 90px;
}
.head_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -415px -573px;
+ background-position: 0px -561px;
width: 102px;
height: 90px;
}
.head_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -364px;
+ background-position: -364px -1016px;
width: 90px;
height: 90px;
}
.head_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -273px;
+ background-position: -273px -1016px;
width: 90px;
height: 90px;
}
.head_special_spring2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -182px;
+ background-position: 0px -1016px;
width: 90px;
height: 90px;
}
.head_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -910px -1028px;
+ background-position: -1045px -910px;
width: 90px;
height: 90px;
}
.head_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -819px -1028px;
+ background-position: -1045px -819px;
width: 90px;
height: 90px;
}
.head_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -728px -1028px;
+ background-position: -1045px -455px;
width: 90px;
height: 90px;
}
.head_special_springMage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -455px -1028px;
+ background-position: -1045px -364px;
width: 90px;
height: 90px;
}
.head_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -364px -1028px;
+ background-position: -1045px -273px;
width: 90px;
height: 90px;
}
.head_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -273px -1028px;
+ background-position: -910px -925px;
width: 90px;
height: 90px;
}
.shield_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px -273px;
+ background-position: 0px -834px;
width: 90px;
height: 90px;
}
.shield_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px -182px;
+ background-position: -863px -455px;
width: 90px;
height: 90px;
}
.shield_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -728px -846px;
+ background-position: -863px -364px;
width: 90px;
height: 90px;
}
.shield_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -637px -846px;
+ background-position: -863px -273px;
width: 90px;
height: 90px;
}
.shield_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -312px -573px;
+ background-position: -103px -561px;
width: 102px;
height: 90px;
}
.shield_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -182px -846px;
+ background-position: -637px -743px;
width: 90px;
height: 90px;
}
.shield_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -91px -846px;
+ background-position: -546px -743px;
width: 90px;
height: 90px;
}
.shield_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -115px -288px;
+ background-position: -345px -273px;
width: 114px;
height: 90px;
}
.shield_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -230px -379px;
+ background-position: -339px -364px;
width: 114px;
height: 87px;
}
.shield_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -854px -364px;
+ background-position: 0px -743px;
width: 90px;
height: 90px;
}
.shield_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -854px -273px;
+ background-position: -678px -300px;
width: 90px;
height: 90px;
}
.shield_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -728px -755px;
+ background-position: -769px -637px;
width: 90px;
height: 90px;
}
.shop_armor_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -207px -1461px;
+ background-position: -690px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -276px -1461px;
+ background-position: -759px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -345px -1461px;
+ background-position: -828px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -414px -1461px;
+ background-position: -897px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -483px -1461px;
+ background-position: -966px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -552px -1461px;
+ background-position: -1035px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -621px -1461px;
+ background-position: -1104px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -690px -1461px;
+ background-position: -1685px -69px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -759px -1461px;
+ background-position: -1242px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -828px -1461px;
+ background-position: -1311px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -897px -1461px;
+ background-position: -1380px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -966px -1461px;
+ background-position: -1449px -1427px;
width: 68px;
height: 68px;
}
.shop_armor_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1035px -1461px;
+ background-position: -1547px 0px;
width: 68px;
height: 68px;
}
.shop_armor_special_springMage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1104px -1461px;
+ background-position: -1547px -69px;
width: 68px;
height: 68px;
}
.shop_armor_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1173px -1461px;
+ background-position: -1547px -138px;
width: 68px;
height: 68px;
}
.shop_armor_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1242px -1461px;
+ background-position: -1547px -207px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -897px;
+ background-position: -1547px -1380px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -966px;
+ background-position: 0px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -1035px;
+ background-position: -69px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -1104px;
+ background-position: -138px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -1173px;
+ background-position: -207px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -1242px;
+ background-position: -276px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -1311px;
+ background-position: -345px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -1380px;
+ background-position: -414px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -1449px;
+ background-position: -483px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -1530px;
+ background-position: -552px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -69px -1530px;
+ background-position: -621px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -138px -1530px;
+ background-position: -690px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -207px -1530px;
+ background-position: -759px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_springMage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -276px -1530px;
+ background-position: -828px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -345px -1530px;
+ background-position: -897px -1496px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -414px -1530px;
+ background-position: -966px -1496px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1587px -1599px;
+ background-position: -1547px -276px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1380px -1461px;
+ background-position: -1547px -345px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1449px -1461px;
+ background-position: -1547px -414px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px 0px;
+ background-position: -1547px -483px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -69px;
+ background-position: -1547px -552px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -138px;
+ background-position: -1547px -621px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -207px;
+ background-position: -1547px -690px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -276px;
+ background-position: -1547px -759px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -345px;
+ background-position: -1547px -828px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -414px;
+ background-position: -1547px -897px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -483px;
+ background-position: -1547px -966px;
width: 68px;
height: 68px;
}
.shop_head_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -552px;
+ background-position: -1547px -1035px;
width: 68px;
height: 68px;
}
.shop_head_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -621px;
+ background-position: -1547px -1104px;
width: 68px;
height: 68px;
}
.shop_head_special_springMage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -690px;
+ background-position: -1547px -1173px;
width: 68px;
height: 68px;
}
.shop_head_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -759px;
+ background-position: -1547px -1242px;
width: 68px;
height: 68px;
}
.shop_head_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1538px -828px;
+ background-position: -1547px -1311px;
width: 68px;
height: 68px;
}
.shop_shield_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -483px -1530px;
+ background-position: -1035px -1496px;
width: 68px;
height: 68px;
}
.shop_shield_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -552px -1530px;
+ background-position: -1104px -1496px;
width: 68px;
height: 68px;
}
.shop_shield_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -621px -1530px;
+ background-position: -1173px -1496px;
width: 68px;
height: 68px;
}
.shop_shield_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -690px -1530px;
+ background-position: -1242px -1496px;
width: 68px;
height: 68px;
}
.shop_shield_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -759px -1530px;
+ background-position: -1311px -1496px;
width: 68px;
height: 68px;
}
.shop_shield_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -828px -1530px;
+ background-position: -1380px -1496px;
width: 68px;
height: 68px;
}
.shop_shield_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -897px -1530px;
+ background-position: -1449px -1496px;
width: 68px;
height: 68px;
}
.shop_shield_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -966px -1530px;
+ background-position: -1518px -1496px;
width: 68px;
height: 68px;
}
.shop_shield_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1035px -1530px;
+ background-position: -1616px 0px;
width: 68px;
height: 68px;
}
.shop_shield_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1104px -1530px;
+ background-position: -1616px -69px;
width: 68px;
height: 68px;
}
.shop_shield_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1173px -1530px;
+ background-position: -1616px -138px;
width: 68px;
height: 68px;
}
.shop_shield_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1242px -1530px;
+ background-position: -1616px -207px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1311px -1530px;
+ background-position: -1616px -276px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1380px -1530px;
+ background-position: -1616px -345px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1449px -1530px;
+ background-position: -1616px -414px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1518px -1530px;
+ background-position: -1616px -483px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px 0px;
+ background-position: -1616px -552px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -69px;
+ background-position: -1616px -621px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -138px;
+ background-position: -1616px -690px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -207px;
+ background-position: -1616px -759px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -276px;
+ background-position: -1616px -828px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -345px;
+ background-position: -1616px -897px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -414px;
+ background-position: -1616px -966px;
width: 68px;
height: 68px;
}
.shop_weapon_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -483px;
+ background-position: -1616px -1035px;
width: 68px;
height: 68px;
}
.shop_weapon_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -552px;
+ background-position: -1616px -1104px;
width: 68px;
height: 68px;
}
.shop_weapon_special_springMage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -621px;
+ background-position: -1616px -1173px;
width: 68px;
height: 68px;
}
.shop_weapon_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -690px;
+ background-position: -1616px -1242px;
width: 68px;
height: 68px;
}
.shop_weapon_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1607px -759px;
+ background-position: -1616px -1311px;
width: 68px;
height: 68px;
}
.slim_armor_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -637px -755px;
+ background-position: -1318px -910px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -546px -755px;
+ background-position: -1318px -273px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -182px -755px;
+ background-position: -1183px -1198px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -91px -755px;
+ background-position: -1092px -1198px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -755px;
+ background-position: -546px -1198px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -669px -391px;
+ background-position: -455px -1198px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -669px -300px;
+ background-position: -91px -1198px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1309px -637px;
+ background-position: -1227px -637px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1001px -1210px;
+ background-position: -1227px -273px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -637px -1210px;
+ background-position: -1227px -182px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -546px -1210px;
+ background-position: -455px -1107px;
width: 90px;
height: 90px;
}
.slim_armor_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -379px;
+ background-position: -472px -88px;
width: 114px;
height: 87px;
}
.slim_armor_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -910px;
+ background-position: -182px -1107px;
width: 90px;
height: 90px;
}
.slim_armor_special_springMage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -728px;
+ background-position: -1045px -728px;
width: 90px;
height: 90px;
}
.slim_armor_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px 0px;
+ background-position: -1045px -637px;
width: 90px;
height: 90px;
}
.slim_armor_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -819px -1119px;
+ background-position: -546px -925px;
width: 90px;
height: 90px;
}
.weapon_special_spring2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -455px -1119px;
+ background-position: -954px -728px;
width: 90px;
height: 90px;
}
.weapon_special_spring2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -1001px;
+ background-position: -954px -546px;
width: 90px;
height: 90px;
}
.weapon_special_spring2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1127px -728px;
+ background-position: -954px -455px;
width: 90px;
height: 90px;
}
.weapon_special_spring2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -728px;
+ background-position: -273px -834px;
width: 90px;
height: 90px;
}
.weapon_special_spring2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -182px -937px;
+ background-position: -863px -637px;
width: 90px;
height: 90px;
}
.weapon_special_spring2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -91px -937px;
+ background-position: -863px 0px;
width: 90px;
height: 90px;
}
.weapon_special_spring2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -106px -573px;
+ background-position: -412px -561px;
width: 102px;
height: 90px;
}
.weapon_special_spring2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -945px 0px;
+ background-position: -91px -743px;
width: 90px;
height: 90px;
}
.weapon_special_spring2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -546px -846px;
+ background-position: -1001px -1198px;
width: 90px;
height: 90px;
}
.weapon_special_spring2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -273px -846px;
+ background-position: -1136px -1001px;
width: 90px;
height: 90px;
}
.weapon_special_spring2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -854px -455px;
+ background-position: 0px -925px;
width: 90px;
height: 90px;
}
.weapon_special_spring2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -854px 0px;
+ background-position: -954px -91px;
width: 90px;
height: 90px;
}
.weapon_special_springHealer {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -455px -755px;
+ background-position: -455px -743px;
width: 90px;
height: 90px;
}
.weapon_special_springMage {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1218px -1092px;
+ background-position: -364px -743px;
width: 90px;
height: 90px;
}
.weapon_special_springRogue {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -1036px -637px;
+ background-position: -182px -743px;
width: 90px;
height: 90px;
}
.weapon_special_springWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -910px -937px;
- width: 90px;
- height: 90px;
-}
-.body_special_summer2015Healer {
- background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -854px -637px;
- width: 90px;
- height: 90px;
-}
-.body_special_summer2015Mage {
- background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -364px -755px;
- width: 90px;
- height: 90px;
-}
-.body_special_summer2015Rogue {
- background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: 0px -91px;
- width: 102px;
- height: 105px;
-}
-.body_special_summer2015Warrior {
- background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -578px -424px;
- width: 90px;
- height: 105px;
-}
-.body_special_summerHealer {
- background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -578px 0px;
- width: 90px;
- height: 105px;
-}
-.body_special_summerMage {
- background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -182px -467px;
- width: 90px;
- height: 105px;
-}
-.broad_armor_special_summer2015Healer {
- background-image: url('~assets/images/sprites/spritesmith-main-7.png');
- background-position: -182px -1301px;
+ background-position: -1318px -1183px;
width: 90px;
height: 90px;
}
diff --git a/website/client/assets/css/sprites/spritesmith-main-8.css b/website/client/assets/css/sprites/spritesmith-main-8.css
index 3802610b60..0f5a7a32d1 100644
--- a/website/client/assets/css/sprites/spritesmith-main-8.css
+++ b/website/client/assets/css/sprites/spritesmith-main-8.css
@@ -1,150 +1,192 @@
+.body_special_summer2015Healer {
+ background-image: url('~assets/images/sprites/spritesmith-main-8.png');
+ background-position: -182px -1270px;
+ width: 90px;
+ height: 90px;
+}
+.body_special_summer2015Mage {
+ background-image: url('~assets/images/sprites/spritesmith-main-8.png');
+ background-position: -1363px -819px;
+ width: 90px;
+ height: 90px;
+}
+.body_special_summer2015Rogue {
+ background-image: url('~assets/images/sprites/spritesmith-main-8.png');
+ background-position: -454px -318px;
+ width: 102px;
+ height: 105px;
+}
+.body_special_summer2015Warrior {
+ background-image: url('~assets/images/sprites/spritesmith-main-8.png');
+ background-position: -902px 0px;
+ width: 90px;
+ height: 105px;
+}
+.body_special_summerHealer {
+ background-image: url('~assets/images/sprites/spritesmith-main-8.png');
+ background-position: -993px -106px;
+ width: 90px;
+ height: 105px;
+}
+.body_special_summerMage {
+ background-image: url('~assets/images/sprites/spritesmith-main-8.png');
+ background-position: -993px -424px;
+ width: 90px;
+ height: 105px;
+}
+.broad_armor_special_summer2015Healer {
+ background-image: url('~assets/images/sprites/spritesmith-main-8.png');
+ background-position: -91px -1179px;
+ width: 90px;
+ height: 90px;
+}
.broad_armor_special_summer2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -91px;
+ background-position: -1272px 0px;
width: 90px;
height: 90px;
}
.broad_armor_special_summer2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -315px -318px;
+ background-position: -212px -318px;
width: 102px;
height: 105px;
}
.broad_armor_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -364px -803px;
+ background-position: 0px -891px;
width: 90px;
height: 105px;
}
.broad_armor_special_summer2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -990px -318px;
+ background-position: -273px -891px;
width: 90px;
height: 105px;
}
.broad_armor_special_summer2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -899px -636px;
+ background-position: -728px -891px;
width: 90px;
height: 105px;
}
.broad_armor_special_summer2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -91px -803px;
+ background-position: -455px -891px;
width: 90px;
height: 105px;
}
.broad_armor_special_summer2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -990px -212px;
+ background-position: -364px -891px;
width: 90px;
height: 105px;
}
.broad_armor_special_summer2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px 0px;
+ background-position: -115px 0px;
width: 114px;
height: 105px;
}
.broad_armor_special_summer2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -364px;
+ background-position: -1092px -1270px;
width: 90px;
height: 90px;
}
.broad_armor_special_summer2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -230px -109px;
+ background-position: -106px -318px;
width: 105px;
height: 105px;
}
.broad_armor_special_summer2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -230px -530px;
+ background-position: -424px -424px;
width: 114px;
height: 90px;
}
.broad_armor_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -990px -530px;
+ background-position: -182px -891px;
width: 90px;
height: 105px;
}
.broad_armor_special_summerMage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -990px -106px;
+ background-position: -91px -891px;
width: 90px;
height: 105px;
}
.broad_armor_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -672px -712px;
+ background-position: -787px -364px;
width: 111px;
height: 90px;
}
.broad_armor_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -560px -712px;
+ background-position: -787px -455px;
width: 111px;
height: 90px;
}
.eyewear_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -224px -712px;
+ background-position: -336px -712px;
width: 111px;
height: 90px;
}
.eyewear_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -112px -712px;
+ background-position: -448px -712px;
width: 111px;
height: 90px;
}
.head_special_summer2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -819px;
+ background-position: -1181px -910px;
width: 90px;
height: 90px;
}
.head_special_summer2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -182px -1091px;
+ background-position: -1181px -1001px;
width: 90px;
height: 90px;
}
.head_special_summer2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -103px -424px;
+ background-position: -315px -318px;
width: 102px;
height: 105px;
}
.head_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -273px -803px;
+ background-position: -902px -742px;
width: 90px;
height: 105px;
}
.head_special_summer2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -546px;
+ background-position: -1272px -182px;
width: 90px;
height: 90px;
}
.head_special_summer2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -910px -1000px;
+ background-position: -91px -1270px;
width: 90px;
height: 90px;
}
.head_special_summer2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -109px -106px;
+ background-position: -230px 0px;
width: 108px;
height: 108px;
}
.head_special_summer2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -91px -1091px;
+ background-position: -910px -1270px;
width: 90px;
height: 90px;
}
@@ -156,73 +198,73 @@
}
.head_special_summer2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1092px -1091px;
+ background-position: -91px -997px;
width: 90px;
height: 90px;
}
.head_special_summer2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -339px -209px;
+ background-position: -230px -109px;
width: 105px;
height: 105px;
}
.head_special_summer2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -460px -530px;
+ background-position: -557px -91px;
width: 114px;
height: 90px;
}
.head_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -182px -803px;
+ background-position: -902px -636px;
width: 90px;
height: 105px;
}
.head_special_summerMage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -899px -106px;
+ background-position: -902px -106px;
width: 90px;
height: 105px;
}
.head_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -787px 0px;
+ background-position: -672px -712px;
width: 111px;
height: 90px;
}
.head_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -787px -364px;
+ background-position: -560px -712px;
width: 111px;
height: 90px;
}
.Healer_Summer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -899px 0px;
+ background-position: -993px 0px;
width: 90px;
height: 105px;
}
.Mage_Summer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -990px -424px;
+ background-position: -993px -530px;
width: 90px;
height: 105px;
}
.SummerRogue14 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -787px -273px;
+ background-position: 0px -712px;
width: 111px;
height: 90px;
}
.SummerWarrior14 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -787px -182px;
+ background-position: -787px -546px;
width: 111px;
height: 90px;
}
.shield_special_summer2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -455px;
+ background-position: -1181px 0px;
width: 90px;
height: 90px;
}
@@ -234,481 +276,481 @@
}
.shield_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -899px -530px;
+ background-position: -993px -636px;
width: 90px;
height: 105px;
}
.shield_special_summer2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -728px;
+ background-position: 0px -1179px;
width: 90px;
height: 90px;
}
.shield_special_summer2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -230px 0px;
+ background-position: -109px -106px;
width: 108px;
height: 108px;
}
.shield_special_summer2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -424px;
+ background-position: -103px -424px;
width: 102px;
height: 105px;
}
.shield_special_summer2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -215px;
+ background-position: -115px -215px;
width: 114px;
height: 102px;
}
.shield_special_summer2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -339px -103px;
+ background-position: 0px -318px;
width: 105px;
height: 105px;
}
.shield_special_summer2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -672px -91px;
+ background-position: 0px -621px;
width: 114px;
height: 90px;
}
.shield_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -899px -424px;
+ background-position: -819px -891px;
width: 90px;
height: 105px;
}
.shield_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -712px;
+ background-position: -224px -712px;
width: 111px;
height: 90px;
}
.shield_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -787px -546px;
+ background-position: -787px -91px;
width: 111px;
height: 90px;
}
.shop_armor_special_summer2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -690px;
+ background-position: -1683px -345px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -621px;
+ background-position: -1683px -276px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -552px;
+ background-position: -1683px -207px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1587px -1571px;
+ background-position: -1683px -138px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1518px -1571px;
+ background-position: -1683px -69px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1449px -1571px;
+ background-position: -1683px 0px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1380px -1571px;
+ background-position: -1587px -1590px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1311px -1571px;
+ background-position: -1518px -1590px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1242px -1571px;
+ background-position: -966px -1590px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1173px -1571px;
+ background-position: -897px -1590px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1104px -1571px;
+ background-position: -828px -1590px;
width: 68px;
height: 68px;
}
.shop_armor_special_summer2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -552px -1571px;
+ background-position: -759px -1590px;
width: 68px;
height: 68px;
}
.shop_armor_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -483px -1571px;
+ background-position: -690px -1590px;
width: 68px;
height: 68px;
}
.shop_armor_special_summerMage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -414px -1571px;
+ background-position: -621px -1590px;
width: 68px;
height: 68px;
}
.shop_armor_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -345px -1571px;
+ background-position: -552px -1590px;
width: 68px;
height: 68px;
}
.shop_armor_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -276px -1571px;
+ background-position: -483px -1590px;
width: 68px;
height: 68px;
}
.shop_body_special_summer2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -207px -1571px;
+ background-position: -414px -1590px;
width: 68px;
height: 68px;
}
.shop_body_special_summer2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -138px -1571px;
+ background-position: -345px -1590px;
width: 68px;
height: 68px;
}
.shop_body_special_summer2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -69px -1571px;
+ background-position: -276px -1590px;
width: 68px;
height: 68px;
}
.shop_body_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -1571px;
+ background-position: -207px -1590px;
width: 68px;
height: 68px;
}
.shop_body_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -1449px;
+ background-position: -138px -1590px;
width: 68px;
height: 68px;
}
.shop_body_special_summerMage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -1380px;
+ background-position: -69px -1590px;
width: 68px;
height: 68px;
}
.shop_eyewear_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -1311px;
+ background-position: 0px -1590px;
width: 68px;
height: 68px;
}
.shop_eyewear_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -1242px;
+ background-position: -1614px -1518px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -1173px;
+ background-position: -1614px -1449px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -1104px;
+ background-position: -1614px -1380px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -1035px;
+ background-position: -1614px -1311px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -966px;
+ background-position: -1614px -1242px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -897px;
+ background-position: -1614px -1173px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -828px;
+ background-position: -1614px -1104px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -759px;
+ background-position: -1614px -1035px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -690px;
+ background-position: -1614px -966px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -621px;
+ background-position: -1614px -897px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -552px;
+ background-position: -1614px -828px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -483px;
+ background-position: -1614px -759px;
width: 68px;
height: 68px;
}
.shop_head_special_summer2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -414px;
+ background-position: -1614px -690px;
width: 68px;
height: 68px;
}
.shop_head_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -345px;
+ background-position: -1614px -621px;
width: 68px;
height: 68px;
}
.shop_head_special_summerMage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -276px;
+ background-position: -1614px -552px;
width: 68px;
height: 68px;
}
.shop_head_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -207px;
+ background-position: -1614px -483px;
width: 68px;
height: 68px;
}
.shop_head_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -138px;
+ background-position: -1614px -414px;
width: 68px;
height: 68px;
}
.shop_shield_special_summer2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px -69px;
+ background-position: -1614px -345px;
width: 68px;
height: 68px;
}
.shop_shield_special_summer2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1605px 0px;
+ background-position: -1614px -276px;
width: 68px;
height: 68px;
}
.shop_shield_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1518px -1502px;
+ background-position: -1614px -207px;
width: 68px;
height: 68px;
}
.shop_shield_special_summer2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1449px -1502px;
+ background-position: -1614px -138px;
width: 68px;
height: 68px;
}
.shop_shield_special_summer2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1380px -1502px;
+ background-position: -1614px -69px;
width: 68px;
height: 68px;
}
.shop_shield_special_summer2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1311px -1502px;
+ background-position: -1614px 0px;
width: 68px;
height: 68px;
}
.shop_shield_special_summer2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1242px -1502px;
+ background-position: -1518px -1521px;
width: 68px;
height: 68px;
}
.shop_shield_special_summer2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1173px -1502px;
+ background-position: -1449px -1521px;
width: 68px;
height: 68px;
}
.shop_shield_special_summer2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1104px -1502px;
+ background-position: -1380px -1521px;
width: 68px;
height: 68px;
}
.shop_shield_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1035px -1502px;
+ background-position: -1311px -1521px;
width: 68px;
height: 68px;
}
.shop_shield_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -966px -1502px;
+ background-position: -1242px -1521px;
width: 68px;
height: 68px;
}
.shop_shield_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -897px -1502px;
+ background-position: -1173px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -828px -1502px;
+ background-position: -1104px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -759px -1502px;
+ background-position: -1035px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -690px -1502px;
+ background-position: -966px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -621px -1502px;
+ background-position: -1272px -1183px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -552px -1502px;
+ background-position: -1363px -1274px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -483px -1502px;
+ background-position: -1454px -1377px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -910px;
+ background-position: -1454px -1308px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -1001px;
+ background-position: -1454px -1239px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -1092px;
+ background-position: -1454px -1170px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -1183px;
+ background-position: -1454px -1101px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -1236px;
+ background-position: -1454px -1032px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summer2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -1167px;
+ background-position: -1454px -963px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -1098px;
+ background-position: -1454px -894px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summerMage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -1029px;
+ background-position: -1454px -825px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -960px;
+ background-position: -1454px -756px;
width: 68px;
height: 68px;
}
.shop_weapon_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -891px;
+ background-position: -1454px -687px;
width: 68px;
height: 68px;
}
.slim_armor_special_summer2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -546px -1000px;
+ background-position: -910px -1088px;
width: 90px;
height: 90px;
}
.slim_armor_special_summer2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -637px -1000px;
+ background-position: -1001px -1088px;
width: 90px;
height: 90px;
}
@@ -720,25 +762,25 @@
}
.slim_armor_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -455px -803px;
+ background-position: -902px -212px;
width: 90px;
height: 105px;
}
.slim_armor_special_summer2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -728px -803px;
+ background-position: -902px -318px;
width: 90px;
height: 105px;
}
.slim_armor_special_summer2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -819px -803px;
+ background-position: -902px -424px;
width: 90px;
height: 105px;
}
.slim_armor_special_summer2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -990px 0px;
+ background-position: -902px -530px;
width: 90px;
height: 105px;
}
@@ -750,85 +792,85 @@
}
.slim_armor_special_summer2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -115px 0px;
+ background-position: 0px 0px;
width: 114px;
height: 105px;
}
.slim_armor_special_summer2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -273px;
+ background-position: -1181px -637px;
width: 90px;
height: 90px;
}
.slim_armor_special_summer2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -106px -318px;
+ background-position: -339px -209px;
width: 105px;
height: 105px;
}
.slim_armor_special_summer2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -557px 0px;
+ background-position: -672px -91px;
width: 114px;
height: 90px;
}
.slim_armor_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -899px -212px;
+ background-position: -993px -212px;
width: 90px;
height: 105px;
}
.slim_armor_special_summerMage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -899px -318px;
+ background-position: -993px -318px;
width: 90px;
height: 105px;
}
.slim_armor_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -787px -455px;
+ background-position: -784px -712px;
width: 111px;
height: 90px;
}
.slim_armor_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -787px -91px;
+ background-position: -112px -712px;
width: 111px;
height: 90px;
}
.weapon_special_summer2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -910px;
+ background-position: -182px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_summer2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -1091px;
+ background-position: -273px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_summer2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -212px -318px;
+ background-position: 0px -424px;
width: 102px;
height: 105px;
}
.weapon_special_summer2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -803px;
+ background-position: -993px -742px;
width: 90px;
height: 105px;
}
.weapon_special_summer2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -273px -1091px;
+ background-position: -546px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_summer2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -364px -1091px;
+ background-position: -637px -1179px;
width: 90px;
height: 90px;
}
@@ -840,13 +882,13 @@
}
.weapon_special_summer2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -454px -318px;
+ background-position: -206px -424px;
width: 102px;
height: 105px;
}
.weapon_special_summer2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -115px -215px;
+ background-position: 0px -215px;
width: 114px;
height: 102px;
}
@@ -858,1105 +900,1105 @@
}
.weapon_special_summer2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -318px;
+ background-position: -339px -103px;
width: 105px;
height: 105px;
}
.weapon_special_summer2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -557px -91px;
+ background-position: -672px -182px;
width: 114px;
height: 90px;
}
.weapon_special_summerHealer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -546px -803px;
+ background-position: -546px -891px;
width: 90px;
height: 105px;
}
.weapon_special_summerMage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -637px -803px;
+ background-position: -637px -891px;
width: 90px;
height: 105px;
}
.weapon_special_summerRogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -336px -712px;
+ background-position: -787px -273px;
width: 111px;
height: 90px;
}
.weapon_special_summerWarrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -448px -712px;
+ background-position: -787px -182px;
width: 111px;
height: 90px;
}
.back_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -784px -712px;
+ background-position: 0px -803px;
width: 114px;
height: 87px;
}
.body_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -273px;
+ background-position: -1272px -546px;
width: 90px;
height: 90px;
}
.broad_armor_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -364px;
+ background-position: -1272px -637px;
width: 90px;
height: 90px;
}
.head_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -455px;
+ background-position: -1272px -728px;
width: 90px;
height: 90px;
}
.shield_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -587px -909px;
+ background-position: -1084px -455px;
width: 93px;
height: 90px;
}
.shop_armor_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -822px;
+ background-position: -1454px -618px;
width: 68px;
height: 68px;
}
.shop_back_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -753px;
+ background-position: -1454px -549px;
width: 68px;
height: 68px;
}
.shop_body_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -684px;
+ background-position: -1454px -480px;
width: 68px;
height: 68px;
}
.shop_head_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -615px;
+ background-position: -1454px -411px;
width: 68px;
height: 68px;
}
.shop_shield_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -1173px;
+ background-position: -1545px -1311px;
width: 68px;
height: 68px;
}
.shop_weapon_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -546px;
+ background-position: -1454px -342px;
width: 68px;
height: 68px;
}
.slim_armor_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -91px -1182px;
+ background-position: -273px -1270px;
width: 90px;
height: 90px;
}
.weapon_special_takeThis {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -182px -1182px;
+ background-position: -364px -1270px;
width: 90px;
height: 90px;
}
.broad_armor_special_candycane {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -273px -1182px;
+ background-position: -455px -1270px;
width: 90px;
height: 90px;
}
.broad_armor_special_ski {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -364px -1182px;
+ background-position: -546px -1270px;
width: 90px;
height: 90px;
}
.broad_armor_special_snowflake {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -455px -1182px;
+ background-position: -637px -1270px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -546px -1182px;
+ background-position: -728px -1270px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -637px -1182px;
+ background-position: -819px -1270px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -575px -530px;
+ background-position: -1084px 0px;
width: 96px;
height: 90px;
}
.broad_armor_special_winter2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -819px -1182px;
+ background-position: -1001px -1270px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -493px -909px;
+ background-position: -1084px -819px;
width: 93px;
height: 90px;
}
.broad_armor_special_winter2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1001px -1182px;
+ background-position: -1183px -1270px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1092px -1182px;
+ background-position: -1363px 0px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1183px -1182px;
+ background-position: -1363px -91px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px 0px;
+ background-position: -1363px -182px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -91px;
+ background-position: -1363px -273px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -182px;
+ background-position: -1363px -364px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -273px;
+ background-position: -1363px -455px;
width: 90px;
height: 90px;
}
.broad_armor_special_winter2018Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -436px -424px;
+ background-position: -672px -455px;
width: 114px;
height: 90px;
}
.broad_armor_special_winter2018Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -321px -424px;
+ background-position: -672px -364px;
width: 114px;
height: 90px;
}
.broad_armor_special_winter2018Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -672px 0px;
+ background-position: -672px -273px;
width: 114px;
height: 90px;
}
.broad_armor_special_winter2018Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -345px -530px;
+ background-position: -557px 0px;
width: 114px;
height: 90px;
}
.broad_armor_special_yeti {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -728px;
+ background-position: -1363px -910px;
width: 90px;
height: 90px;
}
.head_special_candycane {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -819px;
+ background-position: -1363px -1001px;
width: 90px;
height: 90px;
}
.head_special_nye {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -910px;
+ background-position: -1363px -1092px;
width: 90px;
height: 90px;
}
.head_special_nye2014 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -1001px;
+ background-position: -1363px -1183px;
width: 90px;
height: 90px;
}
.head_special_nye2015 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -1092px;
+ background-position: 0px -1361px;
width: 90px;
height: 90px;
}
.head_special_nye2016 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -1273px;
+ background-position: -91px -1361px;
width: 90px;
height: 90px;
}
.head_special_nye2017 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -91px -1273px;
+ background-position: -182px -1361px;
width: 90px;
height: 90px;
}
.head_special_ski {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -990px -636px;
+ background-position: -273px -1361px;
width: 90px;
height: 90px;
}
.head_special_snowflake {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -273px -1273px;
+ background-position: -364px -1361px;
width: 90px;
height: 90px;
}
.head_special_winter2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -364px -1273px;
+ background-position: -455px -1361px;
width: 90px;
height: 90px;
}
.head_special_winter2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -455px -1273px;
+ background-position: -546px -1361px;
width: 90px;
height: 90px;
}
.head_special_winter2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -202px -909px;
+ background-position: -1084px -273px;
width: 96px;
height: 90px;
}
.head_special_winter2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -637px -1273px;
+ background-position: -728px -1361px;
width: 90px;
height: 90px;
}
.head_special_winter2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -681px -909px;
+ background-position: -1084px -728px;
width: 93px;
height: 90px;
}
.head_special_winter2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -819px -1273px;
+ background-position: -910px -1361px;
width: 90px;
height: 90px;
}
.head_special_winter2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -910px -1273px;
+ background-position: -1001px -1361px;
width: 90px;
height: 90px;
}
.head_special_winter2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1001px -1273px;
+ background-position: -1092px -1361px;
width: 90px;
height: 90px;
}
.head_special_winter2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1092px -1273px;
+ background-position: -1183px -1361px;
width: 90px;
height: 90px;
}
.head_special_winter2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1183px -1273px;
+ background-position: -1274px -1361px;
width: 90px;
height: 90px;
}
.head_special_winter2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1274px -1273px;
+ background-position: -1454px 0px;
width: 90px;
height: 90px;
}
.head_special_winter2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px 0px;
+ background-position: -1454px -91px;
width: 90px;
height: 90px;
}
.head_special_winter2018Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -557px -182px;
+ background-position: -787px 0px;
width: 114px;
height: 90px;
}
.head_special_winter2018Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -530px;
+ background-position: -557px -182px;
width: 114px;
height: 90px;
}
.head_special_winter2018Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -557px -364px;
+ background-position: -557px -273px;
width: 114px;
height: 90px;
}
.head_special_winter2018Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -557px -273px;
+ background-position: -672px 0px;
width: 114px;
height: 90px;
}
.head_special_yeti {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -1182px;
+ background-position: -1272px -1092px;
width: 90px;
height: 90px;
}
.shield_special_ski {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -909px;
+ background-position: -910px -891px;
width: 104px;
height: 90px;
}
.shield_special_snowflake {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -910px;
+ background-position: -1272px -910px;
width: 90px;
height: 90px;
}
.shield_special_winter2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -819px;
+ background-position: -819px -1088px;
width: 90px;
height: 90px;
}
.shield_special_winter2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -299px -909px;
+ background-position: -1084px -182px;
width: 96px;
height: 90px;
}
.shield_special_winter2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -637px;
+ background-position: -637px -1088px;
width: 90px;
height: 90px;
}
.shield_special_winter2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -869px -909px;
+ background-position: -1084px -637px;
width: 93px;
height: 90px;
}
.shield_special_winter2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -364px -1000px;
+ background-position: -455px -1088px;
width: 90px;
height: 90px;
}
.shield_special_winter2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -273px -1000px;
+ background-position: -364px -1088px;
width: 90px;
height: 90px;
}
.shield_special_winter2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -182px -1000px;
+ background-position: -273px -1088px;
width: 90px;
height: 90px;
}
.shield_special_winter2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -105px -909px;
+ background-position: -575px -530px;
width: 96px;
height: 90px;
}
.shield_special_winter2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -1000px;
+ background-position: -91px -1088px;
width: 90px;
height: 90px;
}
.shield_special_winter2018Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -115px -530px;
+ background-position: -557px -364px;
width: 114px;
height: 90px;
}
.shield_special_winter2018Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -672px -182px;
+ background-position: 0px -530px;
width: 114px;
height: 90px;
}
.shield_special_winter2018Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -672px -273px;
+ background-position: -115px -530px;
width: 114px;
height: 90px;
}
.shield_special_yeti {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -546px;
+ background-position: -819px -997px;
width: 90px;
height: 90px;
}
.shop_armor_special_candycane {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -787px -637px;
+ background-position: -1181px -1092px;
width: 68px;
height: 68px;
}
.shop_armor_special_ski {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -672px -546px;
+ background-position: -1084px -910px;
width: 68px;
height: 68px;
}
.shop_armor_special_snowflake {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -557px -455px;
+ background-position: -787px -637px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -910px -803px;
+ background-position: -672px -546px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1092px -1000px;
+ background-position: -557px -455px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1183px -1091px;
+ background-position: -115px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1274px -1182px;
+ background-position: -184px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1365px -1273px;
+ background-position: -253px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -1364px;
+ background-position: -322px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -69px -1364px;
+ background-position: -391px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -138px -1364px;
+ background-position: -460px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -207px -1364px;
+ background-position: -529px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -276px -1364px;
+ background-position: -598px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -345px -1364px;
+ background-position: -667px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -414px -1364px;
+ background-position: -736px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2018Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -483px -1364px;
+ background-position: -805px -803px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2018Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -552px -1364px;
+ background-position: -1015px -891px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2018Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -621px -1364px;
+ background-position: -1092px -997px;
width: 68px;
height: 68px;
}
.shop_armor_special_winter2018Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -690px -1364px;
+ background-position: -1092px -1088px;
width: 68px;
height: 68px;
}
.shop_armor_special_yeti {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -759px -1364px;
+ background-position: -1183px -1179px;
width: 68px;
height: 68px;
}
.shop_head_special_candycane {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -828px -1364px;
+ background-position: -1274px -1270px;
width: 68px;
height: 68px;
}
.shop_head_special_nye {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -897px -1364px;
+ background-position: -1365px -1361px;
width: 68px;
height: 68px;
}
.shop_head_special_nye2014 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -966px -1364px;
+ background-position: 0px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_nye2015 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1035px -1364px;
+ background-position: -69px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_nye2016 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1104px -1364px;
+ background-position: -138px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_nye2017 {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1173px -1364px;
+ background-position: -207px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_ski {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1242px -1364px;
+ background-position: -276px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_snowflake {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1311px -1364px;
+ background-position: -345px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1380px -1364px;
+ background-position: -414px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1449px -1364px;
+ background-position: -483px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -1433px;
+ background-position: -552px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -69px -1433px;
+ background-position: -621px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -138px -1433px;
+ background-position: -690px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -207px -1433px;
+ background-position: -759px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -276px -1433px;
+ background-position: -828px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -345px -1433px;
+ background-position: -897px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -414px -1433px;
+ background-position: -966px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -483px -1433px;
+ background-position: -1035px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -552px -1433px;
+ background-position: -1104px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -621px -1433px;
+ background-position: -1173px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2018Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -690px -1433px;
+ background-position: -1242px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2018Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -759px -1433px;
+ background-position: -1311px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2018Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -828px -1433px;
+ background-position: -1380px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_winter2018Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -897px -1433px;
+ background-position: -1449px -1452px;
width: 68px;
height: 68px;
}
.shop_head_special_yeti {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -966px -1433px;
+ background-position: -1545px 0px;
width: 68px;
height: 68px;
}
.shop_shield_special_ski {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1035px -1433px;
+ background-position: -1545px -69px;
width: 68px;
height: 68px;
}
.shop_shield_special_snowflake {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1104px -1433px;
+ background-position: -1545px -138px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1173px -1433px;
+ background-position: -1545px -207px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1242px -1433px;
+ background-position: -1545px -276px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1311px -1433px;
+ background-position: -1545px -345px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1380px -1433px;
+ background-position: -1545px -414px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1449px -1433px;
+ background-position: -1545px -483px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px 0px;
+ background-position: -1545px -552px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -69px;
+ background-position: -1545px -621px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -138px;
+ background-position: -1545px -690px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -207px;
+ background-position: -1545px -759px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2018Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -276px;
+ background-position: -1545px -828px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2018Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -345px;
+ background-position: -1545px -897px;
width: 68px;
height: 68px;
}
.shop_shield_special_winter2018Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -414px;
+ background-position: -1545px -966px;
width: 68px;
height: 68px;
}
.shop_shield_special_yeti {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -483px;
+ background-position: -1545px -1035px;
width: 68px;
height: 68px;
}
.shop_weapon_special_candycane {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -552px;
+ background-position: -1545px -1104px;
width: 68px;
height: 68px;
}
.shop_weapon_special_ski {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -621px;
+ background-position: -1545px -1173px;
width: 68px;
height: 68px;
}
.shop_weapon_special_snowflake {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -690px;
+ background-position: -1545px -1242px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -759px;
+ background-position: -1454px -273px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -828px;
+ background-position: -1545px -1380px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -897px;
+ background-position: -1545px -1449px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -966px;
+ background-position: 0px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -1035px;
+ background-position: -69px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -1104px;
+ background-position: -138px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -759px;
+ background-position: -207px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -1242px;
+ background-position: -276px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -1311px;
+ background-position: -345px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1536px -1380px;
+ background-position: -414px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -1502px;
+ background-position: -483px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -69px -1502px;
+ background-position: -552px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2018Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -138px -1502px;
+ background-position: -621px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2018Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -207px -1502px;
+ background-position: -690px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2018Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -276px -1502px;
+ background-position: -759px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_winter2018Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -345px -1502px;
+ background-position: -828px -1521px;
width: 68px;
height: 68px;
}
.shop_weapon_special_yeti {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -414px -1502px;
+ background-position: -897px -1521px;
width: 68px;
height: 68px;
}
.slim_armor_special_candycane {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -455px;
+ background-position: -728px -997px;
width: 90px;
height: 90px;
}
.slim_armor_special_ski {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -364px;
+ background-position: -637px -997px;
width: 90px;
height: 90px;
}
.slim_armor_special_snowflake {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -273px;
+ background-position: -546px -997px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -182px;
+ background-position: -455px -997px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -91px;
+ background-position: -364px -997px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2015Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -396px -909px;
+ background-position: -1084px -91px;
width: 96px;
height: 90px;
}
.slim_armor_special_winter2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -990px -818px;
+ background-position: -182px -997px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -963px -909px;
+ background-position: -1084px -364px;
width: 93px;
height: 90px;
}
.slim_armor_special_winter2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -364px;
+ background-position: 0px -997px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -273px;
+ background-position: -1454px -182px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -182px;
+ background-position: -819px -1361px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -91px;
+ background-position: -637px -1361px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -728px -1273px;
+ background-position: -1363px -728px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -546px -1273px;
+ background-position: -1363px -637px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -182px -1273px;
+ background-position: -1363px -546px;
width: 90px;
height: 90px;
}
.slim_armor_special_winter2018Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -206px -424px;
+ background-position: -230px -530px;
width: 114px;
height: 90px;
}
.slim_armor_special_winter2018Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -672px -364px;
+ background-position: -345px -530px;
width: 114px;
height: 90px;
}
.slim_armor_special_winter2018Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -460px -621px;
+ background-position: -460px -530px;
width: 114px;
height: 90px;
}
.slim_armor_special_winter2018Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -575px -621px;
+ background-position: -309px -424px;
width: 114px;
height: 90px;
}
.slim_armor_special_yeti {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -910px -1182px;
+ background-position: 0px -1270px;
width: 90px;
height: 90px;
}
.weapon_special_candycane {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -728px -1182px;
+ background-position: -1272px -1001px;
width: 90px;
height: 90px;
}
.weapon_special_ski {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -1001px;
+ background-position: -1272px -819px;
width: 90px;
height: 90px;
}
.weapon_special_snowflake {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -728px;
+ background-position: -1272px -455px;
width: 90px;
height: 90px;
}
.weapon_special_winter2015Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -546px;
+ background-position: -1272px -364px;
width: 90px;
height: 90px;
}
.weapon_special_winter2015Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px -182px;
+ background-position: -1272px -273px;
width: 90px;
height: 90px;
}
@@ -1968,61 +2010,61 @@
}
.weapon_special_winter2015Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1263px 0px;
+ background-position: -1272px -91px;
width: 90px;
height: 90px;
}
.weapon_special_winter2016Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -775px -909px;
+ background-position: -1084px -546px;
width: 93px;
height: 90px;
}
.weapon_special_winter2016Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1001px -1091px;
+ background-position: -1092px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_winter2016Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -910px -1091px;
+ background-position: -1001px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_winter2016Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -819px -1091px;
+ background-position: -910px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_winter2017Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -728px -1091px;
+ background-position: -819px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_winter2017Mage {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -637px -1091px;
+ background-position: -728px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_winter2017Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -546px -1091px;
+ background-position: -455px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_winter2017Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -455px -1091px;
+ background-position: -364px -1179px;
width: 90px;
height: 90px;
}
.weapon_special_winter2018Healer {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -345px -621px;
+ background-position: -115px -621px;
width: 114px;
height: 90px;
}
@@ -2034,271 +2076,211 @@
}
.weapon_special_winter2018Rogue {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -115px -621px;
+ background-position: -345px -621px;
width: 114px;
height: 90px;
}
.weapon_special_winter2018Warrior {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: 0px -621px;
+ background-position: -575px -621px;
width: 114px;
height: 90px;
}
.weapon_special_yeti {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -637px;
+ background-position: -1181px -819px;
width: 90px;
height: 90px;
}
.back_special_wondercon_black {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -546px;
+ background-position: -1181px -728px;
width: 90px;
height: 90px;
}
.back_special_wondercon_red {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -455px;
+ background-position: -1181px -546px;
width: 90px;
height: 90px;
}
.body_special_wondercon_black {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -364px;
+ background-position: -1181px -455px;
width: 90px;
height: 90px;
}
.body_special_wondercon_gold {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -182px;
+ background-position: -1181px -364px;
width: 90px;
height: 90px;
}
.body_special_wondercon_red {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px -91px;
+ background-position: -1181px -273px;
width: 90px;
height: 90px;
}
.eyewear_special_wondercon_black {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1172px 0px;
+ background-position: -1181px -182px;
width: 90px;
height: 90px;
}
.eyewear_special_wondercon_red {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1001px -1000px;
+ background-position: -1181px -91px;
width: 90px;
height: 90px;
}
.shop_back_special_wondercon_black {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -621px -1571px;
+ background-position: -1035px -1590px;
width: 68px;
height: 68px;
}
.shop_back_special_wondercon_red {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -690px -1571px;
+ background-position: -1104px -1590px;
width: 68px;
height: 68px;
}
.shop_body_special_wondercon_black {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -759px -1571px;
+ background-position: -1173px -1590px;
width: 68px;
height: 68px;
}
.shop_body_special_wondercon_gold {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -828px -1571px;
+ background-position: -1242px -1590px;
width: 68px;
height: 68px;
}
.shop_body_special_wondercon_red {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -897px -1571px;
+ background-position: -1311px -1590px;
width: 68px;
height: 68px;
}
.shop_eyewear_special_wondercon_black {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -966px -1571px;
+ background-position: -1380px -1590px;
width: 68px;
height: 68px;
}
.shop_eyewear_special_wondercon_red {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1035px -1571px;
+ background-position: -1449px -1590px;
width: 68px;
height: 68px;
}
.eyewear_special_aetherMask {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -672px -455px;
+ background-position: -460px -621px;
width: 114px;
height: 90px;
}
.eyewear_special_blackTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -819px -1000px;
+ background-position: -728px -1088px;
width: 90px;
height: 90px;
}
.customize-option.eyewear_special_blackTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -844px -1015px;
+ background-position: -753px -1103px;
width: 60px;
height: 60px;
}
.eyewear_special_blueTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -728px -1000px;
+ background-position: -546px -1088px;
width: 90px;
height: 90px;
}
.customize-option.eyewear_special_blueTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -753px -1015px;
+ background-position: -571px -1103px;
width: 60px;
height: 60px;
}
.eyewear_special_greenTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -455px -1000px;
+ background-position: -182px -1088px;
width: 90px;
height: 90px;
}
.customize-option.eyewear_special_greenTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -480px -1015px;
+ background-position: -207px -1103px;
width: 60px;
height: 60px;
}
.eyewear_special_pinkTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -91px -1000px;
+ background-position: 0px -1088px;
width: 90px;
height: 90px;
}
.customize-option.eyewear_special_pinkTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -116px -1015px;
+ background-position: -25px -1103px;
width: 60px;
height: 60px;
}
.eyewear_special_redTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -819px;
+ background-position: -1001px -997px;
width: 90px;
height: 90px;
}
.customize-option.eyewear_special_redTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1106px -834px;
+ background-position: -1026px -1012px;
width: 60px;
height: 60px;
}
.eyewear_special_whiteTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -728px;
+ background-position: -910px -997px;
width: 90px;
height: 90px;
}
.customize-option.eyewear_special_whiteTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1106px -743px;
+ background-position: -935px -1012px;
width: 60px;
height: 60px;
}
.eyewear_special_yellowTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px -637px;
+ background-position: -273px -997px;
width: 90px;
height: 90px;
}
.customize-option.eyewear_special_yellowTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1106px -652px;
+ background-position: -298px -1012px;
width: 60px;
height: 60px;
}
.shop_eyewear_special_aetherMask {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px 0px;
+ background-position: -1683px -414px;
width: 68px;
height: 68px;
}
.shop_eyewear_special_blackTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -69px;
+ background-position: -1683px -483px;
width: 68px;
height: 68px;
}
.shop_eyewear_special_blueTopFrame {
background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -138px;
+ background-position: -1683px -552px;
width: 68px;
height: 68px;
}
-.shop_eyewear_special_greenTopFrame {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -207px;
- width: 68px;
- height: 68px;
-}
-.shop_eyewear_special_pinkTopFrame {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -276px;
- width: 68px;
- height: 68px;
-}
-.shop_eyewear_special_redTopFrame {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -345px;
- width: 68px;
- height: 68px;
-}
-.shop_eyewear_special_whiteTopFrame {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -414px;
- width: 68px;
- height: 68px;
-}
-.shop_eyewear_special_yellowTopFrame {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1674px -483px;
- width: 68px;
- height: 68px;
-}
-.head_0 {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1081px 0px;
- width: 90px;
- height: 90px;
-}
-.customize-option.head_0 {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1106px -15px;
- width: 60px;
- height: 60px;
-}
-.head_healer_1 {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -990px -727px;
- width: 90px;
- height: 90px;
-}
-.head_healer_2 {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1354px -637px;
- width: 90px;
- height: 90px;
-}
-.head_healer_3 {
- background-image: url('~assets/images/sprites/spritesmith-main-8.png');
- background-position: -1445px -455px;
- width: 90px;
- height: 90px;
-}
diff --git a/website/client/assets/css/sprites/spritesmith-main-9.css b/website/client/assets/css/sprites/spritesmith-main-9.css
index a853d33e39..9115fca8c7 100644
--- a/website/client/assets/css/sprites/spritesmith-main-9.css
+++ b/website/client/assets/css/sprites/spritesmith-main-9.css
@@ -1,1836 +1,1896 @@
+.shop_eyewear_special_greenTopFrame {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -759px -1508px;
+ width: 68px;
+ height: 68px;
+}
+.shop_eyewear_special_pinkTopFrame {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -1506px -828px;
+ width: 68px;
+ height: 68px;
+}
+.shop_eyewear_special_redTopFrame {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -1575px -69px;
+ width: 68px;
+ height: 68px;
+}
+.shop_eyewear_special_whiteTopFrame {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -1575px -138px;
+ width: 68px;
+ height: 68px;
+}
+.shop_eyewear_special_yellowTopFrame {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -1575px -207px;
+ width: 68px;
+ height: 68px;
+}
+.head_0 {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -1233px -728px;
+ width: 90px;
+ height: 90px;
+}
+.customize-option.head_0 {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -1258px -743px;
+ width: 60px;
+ height: 60px;
+}
+.head_healer_1 {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -819px -1348px;
+ width: 90px;
+ height: 90px;
+}
+.head_healer_2 {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -637px -1348px;
+ width: 90px;
+ height: 90px;
+}
+.head_healer_3 {
+ background-image: url('~assets/images/sprites/spritesmith-main-9.png');
+ background-position: -546px -1348px;
+ width: 90px;
+ height: 90px;
+}
.head_healer_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -414px -1105px;
+ background-position: -273px -1348px;
width: 90px;
height: 90px;
}
.head_healer_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1183px -1378px;
+ background-position: -182px -1348px;
width: 90px;
height: 90px;
}
.head_rogue_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -546px;
+ background-position: -91px -1348px;
width: 90px;
height: 90px;
}
.head_rogue_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -273px;
+ background-position: 0px -1348px;
width: 90px;
height: 90px;
}
.head_rogue_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -364px;
+ background-position: -1415px -1183px;
width: 90px;
height: 90px;
}
.head_rogue_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -455px;
+ background-position: -1415px -1092px;
width: 90px;
height: 90px;
}
.head_rogue_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -546px;
+ background-position: -1415px -1001px;
width: 90px;
height: 90px;
}
.head_special_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -637px;
+ background-position: -1415px -910px;
width: 90px;
height: 90px;
}
.head_special_bardHat {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -728px;
+ background-position: -1415px -819px;
width: 90px;
height: 90px;
}
.head_special_clandestineCowl {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -910px;
+ background-position: -1415px -728px;
width: 90px;
height: 90px;
}
.head_special_dandyHat {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -1001px;
+ background-position: -1415px -455px;
width: 90px;
height: 90px;
}
.head_special_fireCoralCirclet {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -182px -1287px;
+ background-position: -1415px -364px;
width: 90px;
height: 90px;
}
.head_special_kabuto {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -273px -1287px;
+ background-position: -1415px -273px;
width: 90px;
height: 90px;
}
.head_special_lunarWarriorHelm {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -910px;
+ background-position: -1415px -182px;
width: 90px;
height: 90px;
}
.head_special_mammothRiderHelm {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -1183px;
+ background-position: -1415px -91px;
width: 90px;
height: 90px;
}
.head_special_namingDay2017 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -491px;
+ background-position: -1183px -1257px;
width: 90px;
height: 90px;
}
.head_special_pageHelm {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -582px;
+ background-position: -1001px -1257px;
width: 90px;
height: 90px;
}
.head_special_pyromancersTurban {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -673px;
+ background-position: 0px -1075px;
width: 90px;
height: 90px;
}
.head_special_roguishRainbowMessengerHood {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -764px;
+ background-position: -637px -1166px;
width: 90px;
height: 90px;
}
.head_special_snowSovereignCrown {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -855px;
+ background-position: -1142px -819px;
width: 90px;
height: 90px;
}
.head_special_spikedHelm {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -946px;
+ background-position: -1142px -910px;
width: 90px;
height: 90px;
}
.head_special_turkeyHelmBase {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -190px -963px;
+ background-position: -662px -794px;
width: 114px;
height: 90px;
}
.head_warrior_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -505px -1105px;
+ background-position: -91px -1075px;
width: 90px;
height: 90px;
}
.head_warrior_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -687px -1105px;
+ background-position: -182px -1075px;
width: 90px;
height: 90px;
}
.head_warrior_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -778px -1105px;
+ background-position: -273px -1075px;
width: 90px;
height: 90px;
}
.head_warrior_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -869px -1105px;
+ background-position: -455px -1075px;
width: 90px;
height: 90px;
}
.head_warrior_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -960px -1105px;
+ background-position: -546px -1075px;
width: 90px;
height: 90px;
}
.head_wizard_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1051px -1105px;
+ background-position: -1001px -1075px;
width: 90px;
height: 90px;
}
.head_wizard_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -1105px;
+ background-position: -1092px -1075px;
width: 90px;
height: 90px;
}
.head_wizard_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -273px;
+ background-position: -910px -1166px;
width: 90px;
height: 90px;
}
.head_wizard_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -364px;
+ background-position: -819px -1257px;
width: 90px;
height: 90px;
}
.head_wizard_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -455px;
+ background-position: -910px -1257px;
width: 90px;
height: 90px;
}
.shop_head_healer_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -897px -1538px;
+ background-position: -1575px -276px;
width: 68px;
height: 68px;
}
.shop_head_healer_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -1518px;
+ background-position: -1575px -345px;
width: 68px;
height: 68px;
}
.shop_head_healer_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -1607px;
+ background-position: -1575px -414px;
width: 68px;
height: 68px;
}
.shop_head_healer_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -138px -1607px;
+ background-position: -1575px -483px;
width: 68px;
height: 68px;
}
.shop_head_healer_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -207px -1607px;
+ background-position: -1575px -552px;
width: 68px;
height: 68px;
}
.shop_head_rogue_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -276px -1607px;
+ background-position: -1575px -1173px;
width: 68px;
height: 68px;
}
.shop_head_rogue_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -621px -1607px;
+ background-position: -1575px -1242px;
width: 68px;
height: 68px;
}
.shop_head_rogue_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -690px -1607px;
+ background-position: -1575px -1311px;
width: 68px;
height: 68px;
}
.shop_head_rogue_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -759px -1607px;
+ background-position: -1575px -1380px;
width: 68px;
height: 68px;
}
.shop_head_rogue_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -828px -1607px;
+ background-position: 0px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -897px -1607px;
+ background-position: -69px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -966px -1607px;
+ background-position: -138px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1035px -1607px;
+ background-position: -207px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_bardHat {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1104px -1607px;
+ background-position: -276px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_clandestineCowl {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1173px -1607px;
+ background-position: -345px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_dandyHat {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -1607px;
+ background-position: -414px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_fireCoralCirclet {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1311px -1607px;
+ background-position: -483px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_kabuto {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1380px -1607px;
+ background-position: -552px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_lunarWarriorHelm {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1449px -1607px;
+ background-position: -621px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_mammothRiderHelm {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1587px -1607px;
+ background-position: -690px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_namingDay2017 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -1078px;
+ background-position: -1713px -1479px;
width: 40px;
height: 40px;
}
.shop_head_special_pageHelm {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px 0px;
+ background-position: -828px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_pyromancersTurban {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -69px;
+ background-position: -897px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_roguishRainbowMessengerHood {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -138px;
+ background-position: -966px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_snowSovereignCrown {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -207px;
+ background-position: -1035px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_spikedHelm {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -276px;
+ background-position: -1104px -1508px;
width: 68px;
height: 68px;
}
.shop_head_special_turkeyHelmBase {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -345px;
+ background-position: -1173px -1508px;
width: 68px;
height: 68px;
}
.shop_head_warrior_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -414px;
+ background-position: -1242px -1508px;
width: 68px;
height: 68px;
}
.shop_head_warrior_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -483px;
+ background-position: -1311px -1508px;
width: 68px;
height: 68px;
}
.shop_head_warrior_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -552px -1607px;
+ background-position: -1380px -1508px;
width: 68px;
height: 68px;
}
.shop_head_warrior_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -414px -1607px;
+ background-position: -1449px -1508px;
width: 68px;
height: 68px;
}
.shop_head_warrior_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -966px -1538px;
+ background-position: -1173px -1439px;
width: 68px;
height: 68px;
}
.shop_head_wizard_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -828px -1538px;
+ background-position: -1242px -1439px;
width: 68px;
height: 68px;
}
.shop_head_wizard_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -759px -1538px;
+ background-position: -1311px -1439px;
width: 68px;
height: 68px;
}
.shop_head_wizard_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -690px -1538px;
+ background-position: -1380px -1439px;
width: 68px;
height: 68px;
}
.shop_head_wizard_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -621px -1538px;
+ background-position: -1449px -1439px;
width: 68px;
height: 68px;
}
.shop_head_wizard_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -552px -1538px;
+ background-position: -1575px 0px;
width: 68px;
height: 68px;
}
.headAccessory_special_bearEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -728px;
+ background-position: -1092px -1257px;
width: 90px;
height: 90px;
}
.customize-option.headAccessory_special_bearEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1267px -743px;
+ background-position: -1117px -1272px;
width: 60px;
height: 60px;
}
.headAccessory_special_cactusEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -819px;
+ background-position: -1415px 0px;
width: 90px;
height: 90px;
}
.customize-option.headAccessory_special_cactusEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1267px -834px;
+ background-position: -1440px -15px;
width: 60px;
height: 60px;
}
.headAccessory_special_foxEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -910px;
+ background-position: -364px -1348px;
width: 90px;
height: 90px;
}
.customize-option.headAccessory_special_foxEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1267px -925px;
+ background-position: -389px -1363px;
width: 60px;
height: 60px;
}
.headAccessory_special_lionEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -1001px;
+ background-position: -910px -1348px;
width: 90px;
height: 90px;
}
.customize-option.headAccessory_special_lionEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1267px -1016px;
+ background-position: -935px -1363px;
width: 60px;
height: 60px;
}
.headAccessory_special_pandaEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -1092px;
+ background-position: -1001px -1348px;
width: 90px;
height: 90px;
}
.customize-option.headAccessory_special_pandaEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1267px -1107px;
+ background-position: -1026px -1363px;
width: 60px;
height: 60px;
}
.headAccessory_special_pigEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -1196px;
+ background-position: -1142px 0px;
width: 90px;
height: 90px;
}
.customize-option.headAccessory_special_pigEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -25px -1211px;
+ background-position: -1167px -15px;
width: 60px;
height: 60px;
}
.headAccessory_special_tigerEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -91px -1196px;
+ background-position: -1142px -91px;
width: 90px;
height: 90px;
}
.customize-option.headAccessory_special_tigerEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -116px -1211px;
+ background-position: -1167px -106px;
width: 60px;
height: 60px;
}
.headAccessory_special_wolfEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -182px -1196px;
+ background-position: -1142px -182px;
width: 90px;
height: 90px;
}
.customize-option.headAccessory_special_wolfEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -207px -1211px;
+ background-position: -1167px -197px;
width: 60px;
height: 60px;
}
.shop_headAccessory_special_bearEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -483px -1538px;
+ background-position: -1575px -621px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_cactusEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -414px -1538px;
+ background-position: -1575px -690px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_foxEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -345px -1538px;
+ background-position: -1575px -759px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_lionEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -276px -1538px;
+ background-position: -1575px -828px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_pandaEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -207px -1538px;
+ background-position: -1575px -897px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_pigEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -138px -1538px;
+ background-position: -1575px -966px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_tigerEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -69px -1538px;
+ background-position: -1575px -1035px;
width: 68px;
height: 68px;
}
.shop_headAccessory_special_wolfEars {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -1538px;
+ background-position: -1575px -1104px;
width: 68px;
height: 68px;
}
.shield_healer_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1001px -1196px;
+ background-position: -1142px -273px;
width: 90px;
height: 90px;
}
.shield_healer_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1092px -1196px;
+ background-position: -1142px -364px;
width: 90px;
height: 90px;
}
.shield_healer_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1183px -1196px;
+ background-position: -1142px -455px;
width: 90px;
height: 90px;
}
.shield_healer_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px 0px;
+ background-position: -1142px -546px;
width: 90px;
height: 90px;
}
.shield_healer_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -91px;
+ background-position: -1142px -637px;
width: 90px;
height: 90px;
}
.shield_rogue_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -182px;
+ background-position: -1142px -728px;
width: 90px;
height: 90px;
}
.shield_rogue_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -104px -1105px;
+ background-position: -694px -933px;
width: 103px;
height: 90px;
}
.shield_rogue_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -1105px;
+ background-position: -590px -933px;
width: 103px;
height: 90px;
}
.shield_rogue_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -764px -824px;
+ background-position: -851px -643px;
width: 114px;
height: 90px;
}
.shield_rogue_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -400px;
+ background-position: -1004px -933px;
width: 96px;
height: 90px;
}
.shield_rogue_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -649px -824px;
+ background-position: -317px -794px;
width: 114px;
height: 90px;
}
.shield_rogue_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -994px -824px;
+ background-position: -432px -794px;
width: 114px;
height: 90px;
}
.shield_special_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -819px;
+ background-position: -364px -1075px;
width: 90px;
height: 90px;
}
.shield_special_diamondStave {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -208px -1105px;
+ background-position: -798px -933px;
width: 102px;
height: 90px;
}
.shield_special_goldenknight {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -305px -963px;
+ background-position: -777px -794px;
width: 111px;
height: 90px;
}
.shield_special_lootBag {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -1092px;
+ background-position: -637px -1075px;
width: 90px;
height: 90px;
}
.shield_special_mammothRiderHorn {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1333px -1183px;
+ background-position: -728px -1075px;
width: 90px;
height: 90px;
}
.shield_special_moonpearlShield {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -1287px;
+ background-position: -819px -1075px;
width: 90px;
height: 90px;
}
.shield_special_roguishRainbowMessage {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -91px -1287px;
+ background-position: -910px -1075px;
width: 90px;
height: 90px;
}
.shield_special_wakizashi {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -417px -963px;
+ background-position: -889px -794px;
width: 114px;
height: 87px;
}
.shield_special_wintryMirror {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -532px -963px;
+ background-position: -1004px -794px;
width: 114px;
height: 87px;
}
.shield_warrior_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -364px -1287px;
+ background-position: -1233px 0px;
width: 90px;
height: 90px;
}
.shield_warrior_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -455px -1287px;
+ background-position: -1233px -91px;
width: 90px;
height: 90px;
}
.shield_warrior_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -546px -1287px;
+ background-position: -1233px -182px;
width: 90px;
height: 90px;
}
.shield_warrior_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -637px -1287px;
+ background-position: -1233px -273px;
width: 90px;
height: 90px;
}
.shield_warrior_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -728px -1287px;
+ background-position: -1233px -364px;
width: 90px;
height: 90px;
}
.shop_shield_healer_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -1449px;
+ background-position: -1518px -1508px;
width: 68px;
height: 68px;
}
.shop_shield_healer_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -1380px;
+ background-position: -414px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_healer_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -1311px;
+ background-position: -552px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_healer_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -1242px;
+ background-position: -621px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_healer_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -1173px;
+ background-position: -759px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_rogue_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -1104px;
+ background-position: -828px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_rogue_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -1035px;
+ background-position: -897px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_rogue_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -966px;
+ background-position: -1035px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_rogue_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -897px;
+ background-position: -1173px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_rogue_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -828px;
+ background-position: -1242px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_rogue_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -759px;
+ background-position: -1311px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_rogue_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -690px;
+ background-position: -1380px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_special_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -621px;
+ background-position: -1449px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_special_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -552px;
+ background-position: -1518px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_special_diamondStave {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -483px;
+ background-position: -1587px -1577px;
width: 68px;
height: 68px;
}
.shop_shield_special_goldenknight {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -414px;
+ background-position: -1713px 0px;
width: 68px;
height: 68px;
}
.shop_shield_special_lootBag {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -345px;
+ background-position: -1713px -69px;
width: 68px;
height: 68px;
}
.shop_shield_special_mammothRiderHorn {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -276px;
+ background-position: -1713px -138px;
width: 68px;
height: 68px;
}
.shop_shield_special_moonpearlShield {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -207px;
+ background-position: -1713px -207px;
width: 68px;
height: 68px;
}
.shop_shield_special_roguishRainbowMessage {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -138px;
+ background-position: -1713px -276px;
width: 68px;
height: 68px;
}
.shop_shield_special_wakizashi {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px -69px;
+ background-position: -1713px -345px;
width: 68px;
height: 68px;
}
.shop_shield_special_wintryMirror {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1584px 0px;
+ background-position: -1713px -414px;
width: 68px;
height: 68px;
}
.shop_shield_warrior_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1449px -1469px;
+ background-position: -1713px -483px;
width: 68px;
height: 68px;
}
.shop_shield_warrior_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1380px -1469px;
+ background-position: -1713px -552px;
width: 68px;
height: 68px;
}
.shop_shield_warrior_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1311px -1469px;
+ background-position: -1713px -621px;
width: 68px;
height: 68px;
}
.shop_shield_warrior_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -1469px;
+ background-position: -1713px -690px;
width: 68px;
height: 68px;
}
.shop_shield_warrior_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1173px -1469px;
+ background-position: -1713px -759px;
width: 68px;
height: 68px;
}
.shop_weapon_healer_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1104px -1469px;
+ background-position: -1713px -828px;
width: 68px;
height: 68px;
}
.shop_weapon_healer_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1035px -1469px;
+ background-position: -1713px -897px;
width: 68px;
height: 68px;
}
.shop_weapon_healer_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -966px -1469px;
+ background-position: -1713px -966px;
width: 68px;
height: 68px;
}
.shop_weapon_healer_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -897px -1469px;
+ background-position: -1415px -1274px;
width: 68px;
height: 68px;
}
.shop_weapon_healer_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -828px -1469px;
+ background-position: -1324px -1183px;
width: 68px;
height: 68px;
}
.shop_weapon_healer_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -759px -1469px;
+ background-position: -1233px -1092px;
width: 68px;
height: 68px;
}
.shop_weapon_healer_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -690px -1469px;
+ background-position: -1142px -1001px;
width: 68px;
height: 68px;
}
.shop_weapon_rogue_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -828px;
+ background-position: -660px -544px;
width: 68px;
height: 68px;
}
.shop_weapon_rogue_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -1380px;
+ background-position: -1506px 0px;
width: 68px;
height: 68px;
}
.shop_weapon_rogue_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1380px -1538px;
+ background-position: -1506px -69px;
width: 68px;
height: 68px;
}
.shop_weapon_rogue_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1518px -1607px;
+ background-position: -1506px -138px;
width: 68px;
height: 68px;
}
.shop_weapon_rogue_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1274px -1378px;
+ background-position: -1506px -207px;
width: 68px;
height: 68px;
}
.shop_weapon_rogue_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1343px -1378px;
+ background-position: -1506px -276px;
width: 68px;
height: 68px;
}
.shop_weapon_rogue_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1412px -1378px;
+ background-position: -1506px -345px;
width: 68px;
height: 68px;
}
.shop_weapon_special_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px 0px;
+ background-position: -1506px -414px;
width: 68px;
height: 68px;
}
.shop_weapon_special_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -69px;
+ background-position: -1506px -483px;
width: 68px;
height: 68px;
}
.shop_weapon_special_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -138px;
+ background-position: -1506px -552px;
width: 68px;
height: 68px;
}
.shop_weapon_special_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -207px;
+ background-position: -1506px -621px;
width: 68px;
height: 68px;
}
.shop_weapon_special_aetherCrystals {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -276px;
+ background-position: -1506px -690px;
width: 68px;
height: 68px;
}
.shop_weapon_special_bardInstrument {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -345px;
+ background-position: -1506px -759px;
width: 68px;
height: 68px;
}
.shop_weapon_special_critical {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -414px;
+ background-position: -1713px -1035px;
width: 68px;
height: 68px;
}
.shop_weapon_special_fencingFoil {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -483px;
+ background-position: -1506px -897px;
width: 68px;
height: 68px;
}
.shop_weapon_special_lunarScythe {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -552px;
+ background-position: -1506px -966px;
width: 68px;
height: 68px;
}
.shop_weapon_special_mammothRiderSpear {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -621px;
+ background-position: -1506px -1035px;
width: 68px;
height: 68px;
}
.shop_weapon_special_nomadsScimitar {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -690px;
+ background-position: -1506px -1104px;
width: 68px;
height: 68px;
}
.shop_weapon_special_pageBanner {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -759px;
+ background-position: -1506px -1173px;
width: 68px;
height: 68px;
}
.shop_weapon_special_roguishRainbowMessage {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -552px;
+ background-position: -1506px -1242px;
width: 68px;
height: 68px;
}
.shop_weapon_special_skeletonKey {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -897px;
+ background-position: -1506px -1311px;
width: 68px;
height: 68px;
}
.shop_weapon_special_tachi {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -966px;
+ background-position: 0px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_special_taskwoodsLantern {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -1035px;
+ background-position: -69px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_special_tridentOfCrashingTides {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -1104px;
+ background-position: -138px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_warrior_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -1173px;
+ background-position: -207px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_warrior_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -1242px;
+ background-position: -276px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_warrior_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -1311px;
+ background-position: -345px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_warrior_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1515px -1380px;
+ background-position: -414px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_warrior_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -1469px;
+ background-position: -483px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_warrior_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -69px -1469px;
+ background-position: -552px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_warrior_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -138px -1469px;
+ background-position: -621px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_wizard_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -207px -1469px;
+ background-position: -690px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_wizard_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -276px -1469px;
+ background-position: -759px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_wizard_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -345px -1469px;
+ background-position: -828px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_wizard_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -414px -1469px;
+ background-position: -897px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_wizard_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -483px -1469px;
+ background-position: -966px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_wizard_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -552px -1469px;
+ background-position: -1035px -1439px;
width: 68px;
height: 68px;
}
.shop_weapon_wizard_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -621px -1469px;
+ background-position: -1104px -1439px;
width: 68px;
height: 68px;
}
.weapon_healer_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1092px -1378px;
+ background-position: -1233px -455px;
width: 90px;
height: 90px;
}
.weapon_healer_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1001px -1378px;
+ background-position: -1233px -546px;
width: 90px;
height: 90px;
}
.weapon_healer_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -910px -1378px;
+ background-position: -1233px -637px;
width: 90px;
height: 90px;
}
.weapon_healer_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -819px -1378px;
+ background-position: -1092px -1348px;
width: 90px;
height: 90px;
}
.weapon_healer_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -728px -1378px;
+ background-position: -1233px -819px;
width: 90px;
height: 90px;
}
.weapon_healer_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -637px -1378px;
+ background-position: -1233px -910px;
width: 90px;
height: 90px;
}
.weapon_healer_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -546px -1378px;
+ background-position: -1233px -1001px;
width: 90px;
height: 90px;
}
.weapon_rogue_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -455px -1378px;
+ background-position: 0px -1166px;
width: 90px;
height: 90px;
}
.weapon_rogue_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -364px -1378px;
+ background-position: -91px -1166px;
width: 90px;
height: 90px;
}
.weapon_rogue_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -273px -1378px;
+ background-position: -182px -1166px;
width: 90px;
height: 90px;
}
.weapon_rogue_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -182px -1378px;
+ background-position: -273px -1166px;
width: 90px;
height: 90px;
}
.weapon_rogue_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -91px -1378px;
+ background-position: -364px -1166px;
width: 90px;
height: 90px;
}
.weapon_rogue_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -1378px;
+ background-position: -455px -1166px;
width: 90px;
height: 90px;
}
.weapon_rogue_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -1274px;
+ background-position: -546px -1166px;
width: 90px;
height: 90px;
}
.weapon_special_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -311px -1105px;
+ background-position: -901px -933px;
width: 102px;
height: 90px;
}
.weapon_special_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -1092px;
+ background-position: -728px -1166px;
width: 90px;
height: 90px;
}
.weapon_special_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -1001px;
+ background-position: -819px -1166px;
width: 90px;
height: 90px;
}
.weapon_special_aetherCrystals {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -879px -824px;
+ background-position: -547px -794px;
width: 114px;
height: 90px;
}
.weapon_special_bardInstrument {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -819px;
+ background-position: -1001px -1166px;
width: 90px;
height: 90px;
}
.weapon_special_fencingFoil {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -728px;
+ background-position: -1092px -1166px;
width: 90px;
height: 90px;
}
.weapon_special_lunarScythe {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -637px;
+ background-position: -1183px -1166px;
width: 90px;
height: 90px;
}
.weapon_special_mammothRiderSpear {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -546px;
+ background-position: -1324px 0px;
width: 90px;
height: 90px;
}
.weapon_special_nomadsScimitar {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -455px;
+ background-position: -1324px -91px;
width: 90px;
height: 90px;
}
.weapon_special_pageBanner {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -364px;
+ background-position: -1324px -182px;
width: 90px;
height: 90px;
}
.weapon_special_roguishRainbowMessage {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -273px;
+ background-position: -1324px -273px;
width: 90px;
height: 90px;
}
.weapon_special_skeletonKey {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -182px;
+ background-position: -1324px -364px;
width: 90px;
height: 90px;
}
.weapon_special_tachi {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px -91px;
+ background-position: -1324px -455px;
width: 90px;
height: 90px;
}
.weapon_special_taskwoodsLantern {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1424px 0px;
+ background-position: -1324px -546px;
width: 90px;
height: 90px;
}
.weapon_special_tridentOfCrashingTides {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1274px -1287px;
+ background-position: -1324px -637px;
width: 90px;
height: 90px;
}
.weapon_warrior_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1183px -1287px;
+ background-position: -1324px -728px;
width: 90px;
height: 90px;
}
.weapon_warrior_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1092px -1287px;
+ background-position: -1324px -819px;
width: 90px;
height: 90px;
}
.weapon_warrior_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1001px -1287px;
+ background-position: -1324px -910px;
width: 90px;
height: 90px;
}
.weapon_warrior_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -910px -1287px;
+ background-position: -1324px -1001px;
width: 90px;
height: 90px;
}
.weapon_warrior_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -819px -1287px;
+ background-position: -1324px -1092px;
width: 90px;
height: 90px;
}
.weapon_warrior_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -910px -1196px;
+ background-position: 0px -1257px;
width: 90px;
height: 90px;
}
.weapon_warrior_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -819px -1196px;
+ background-position: -91px -1257px;
width: 90px;
height: 90px;
}
.weapon_wizard_0 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -728px -1196px;
+ background-position: -182px -1257px;
width: 90px;
height: 90px;
}
.weapon_wizard_1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -637px -1196px;
+ background-position: -273px -1257px;
width: 90px;
height: 90px;
}
.weapon_wizard_2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -546px -1196px;
+ background-position: -364px -1257px;
width: 90px;
height: 90px;
}
.weapon_wizard_3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -455px -1196px;
+ background-position: -455px -1257px;
width: 90px;
height: 90px;
}
.weapon_wizard_4 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -364px -1196px;
+ background-position: -546px -1257px;
width: 90px;
height: 90px;
}
.weapon_wizard_5 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -273px -1196px;
+ background-position: -637px -1257px;
width: 90px;
height: 90px;
}
.weapon_wizard_6 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -637px;
+ background-position: -728px -1257px;
width: 90px;
height: 90px;
}
.Pet_Currency_Gem {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -1449px;
+ background-position: -483px -1577px;
width: 68px;
height: 68px;
}
.Pet_Currency_Gem1x {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1774px -840px;
+ background-position: -1765px -1323px;
width: 15px;
height: 13px;
}
.Pet_Currency_Gem2x {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1751px -1235px;
+ background-position: -1604px -1478px;
width: 30px;
height: 26px;
}
.PixelPaw-Gold {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -840px;
+ background-position: -1713px -1323px;
width: 51px;
height: 51px;
}
.PixelPaw {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -892px;
+ background-position: -1713px -1375px;
width: 51px;
height: 51px;
}
.PixelPaw002 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -944px;
+ background-position: -1713px -1427px;
width: 51px;
height: 51px;
}
.avatar_floral_healer {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px 0px;
+ background-position: -190px -933px;
width: 99px;
height: 99px;
}
.avatar_floral_rogue {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -300px;
+ background-position: -290px -933px;
width: 99px;
height: 99px;
}
.avatar_floral_warrior {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -100px;
+ background-position: -390px -933px;
width: 99px;
height: 99px;
}
.avatar_floral_wizard {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -200px;
+ background-position: -490px -933px;
width: 99px;
height: 99px;
}
.empty_bottles {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -785px;
+ background-position: -1713px -1268px;
width: 64px;
height: 54px;
}
.ghost {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -182px;
+ background-position: -1274px -1257px;
width: 90px;
height: 90px;
}
.inventory_present {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -276px;
+ background-position: -1644px -828px;
width: 68px;
height: 68px;
}
.inventory_present_01 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1035px -1538px;
+ background-position: -1644px 0px;
width: 68px;
height: 68px;
}
.inventory_present_02 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1104px -1538px;
+ background-position: -1644px -69px;
width: 68px;
height: 68px;
}
.inventory_present_03 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1173px -1538px;
+ background-position: -1644px -138px;
width: 68px;
height: 68px;
}
.inventory_present_04 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -1538px;
+ background-position: -1644px -207px;
width: 68px;
height: 68px;
}
.inventory_present_05 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1311px -1538px;
+ background-position: -1644px -276px;
width: 68px;
height: 68px;
}
.inventory_present_06 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -660px -544px;
+ background-position: -1644px -345px;
width: 68px;
height: 68px;
}
.inventory_present_07 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1449px -1538px;
+ background-position: -1644px -414px;
width: 68px;
height: 68px;
}
.inventory_present_08 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1518px -1538px;
+ background-position: -1644px -483px;
width: 68px;
height: 68px;
}
.inventory_present_09 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px 0px;
+ background-position: -1644px -552px;
width: 68px;
height: 68px;
}
.inventory_present_10 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -69px;
+ background-position: -1644px -621px;
width: 68px;
height: 68px;
}
.inventory_present_11 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -138px;
+ background-position: -1644px -690px;
width: 68px;
height: 68px;
}
.inventory_present_12 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -207px;
+ background-position: -1644px -759px;
width: 68px;
height: 68px;
}
.inventory_special_birthday {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -345px;
+ background-position: -1644px -897px;
width: 68px;
height: 68px;
}
.inventory_special_congrats {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -414px;
+ background-position: -1644px -966px;
width: 68px;
height: 68px;
}
.inventory_special_fortify {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -483px;
+ background-position: -1644px -1035px;
width: 68px;
height: 68px;
}
.inventory_special_getwell {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -552px;
+ background-position: -1644px -1104px;
width: 68px;
height: 68px;
}
.inventory_special_goodluck {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -621px;
+ background-position: -1644px -1173px;
width: 68px;
height: 68px;
}
.inventory_special_greeting {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -690px;
+ background-position: -1644px -1242px;
width: 68px;
height: 68px;
}
.inventory_special_nye {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -759px;
+ background-position: -1644px -1311px;
width: 68px;
height: 68px;
}
.inventory_special_opaquePotion {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -828px;
+ background-position: -1644px -1380px;
width: 68px;
height: 68px;
}
.inventory_special_seafoam {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -897px;
+ background-position: -1644px -1449px;
width: 68px;
height: 68px;
}
.inventory_special_shinySeed {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -966px;
+ background-position: 0px -1577px;
width: 68px;
height: 68px;
}
.inventory_special_snowball {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -1035px;
+ background-position: -69px -1577px;
width: 68px;
height: 68px;
}
.inventory_special_spookySparkles {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -1104px;
+ background-position: -138px -1577px;
width: 68px;
height: 68px;
}
.inventory_special_thankyou {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -1173px;
+ background-position: -207px -1577px;
width: 68px;
height: 68px;
}
.inventory_special_trinket {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -1242px;
+ background-position: -276px -1577px;
width: 68px;
height: 68px;
}
.inventory_special_valentine {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1653px -1311px;
+ background-position: -345px -1577px;
width: 68px;
height: 68px;
}
.knockout {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -647px -963px;
+ background-position: -1183px -1348px;
width: 120px;
height: 47px;
}
.pet_key {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -69px -1607px;
+ background-position: -690px -1577px;
width: 68px;
height: 68px;
}
.rebirth_orb {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -345px -1607px;
+ background-position: -966px -1577px;
width: 68px;
height: 68px;
}
.seafoam_star {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px -91px;
+ background-position: -1415px -546px;
width: 90px;
height: 90px;
}
.shop_armoire {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -483px -1607px;
+ background-position: -1104px -1577px;
width: 68px;
height: 68px;
}
.snowman {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1242px 0px;
+ background-position: -1415px -637px;
width: 90px;
height: 90px;
}
.zzz {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -1037px;
+ background-position: -1713px -1561px;
width: 40px;
height: 40px;
}
.zzz_light {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -996px;
+ background-position: -1713px -1520px;
width: 40px;
height: 40px;
}
.notif_inventory_present_01 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -1148px;
+ background-position: -1575px -1478px;
width: 28px;
height: 28px;
}
.notif_inventory_present_02 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -1235px;
+ background-position: -1604px -1449px;
width: 28px;
height: 28px;
}
.notif_inventory_present_03 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1751px -1206px;
+ background-position: -1575px -1449px;
width: 28px;
height: 28px;
}
.notif_inventory_present_04 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -1206px;
+ background-position: -1673px -1547px;
width: 28px;
height: 28px;
}
.notif_inventory_present_05 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1751px -1177px;
+ background-position: -1644px -1547px;
width: 28px;
height: 28px;
}
.notif_inventory_present_06 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -1177px;
+ background-position: -1644px -1518px;
width: 28px;
height: 28px;
}
.notif_inventory_present_07 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1751px -1148px;
+ background-position: -1742px -1602px;
width: 28px;
height: 28px;
}
.notif_inventory_present_08 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1751px -1119px;
+ background-position: -1713px -1602px;
width: 28px;
height: 28px;
}
.notif_inventory_present_09 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -1119px;
+ background-position: -1750px -1229px;
width: 28px;
height: 28px;
}
.notif_inventory_present_10 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1759px -746px;
+ background-position: -1750px -1200px;
width: 28px;
height: 28px;
}
.notif_inventory_present_11 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1759px -717px;
+ background-position: -1750px -1171px;
width: 28px;
height: 28px;
}
.notif_inventory_present_12 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1759px -688px;
+ background-position: -1673px -1518px;
width: 28px;
height: 28px;
}
.notif_inventory_special_birthday {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1763px -1078px;
+ background-position: -1506px -1380px;
width: 20px;
height: 24px;
}
.notif_inventory_special_congrats {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1764px -1264px;
+ background-position: -1548px -1380px;
width: 20px;
height: 22px;
}
.notif_inventory_special_getwell {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -1289px;
+ background-position: -1506px -1405px;
width: 20px;
height: 22px;
}
.notif_inventory_special_goodluck {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1763px -1037px;
+ background-position: -1754px -1520px;
width: 20px;
height: 26px;
}
.notif_inventory_special_greeting {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1743px -1289px;
+ background-position: -1527px -1405px;
width: 20px;
height: 22px;
}
.notif_inventory_special_nye {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1763px -996px;
+ background-position: -1754px -1479px;
width: 24px;
height: 26px;
}
.notif_inventory_special_thankyou {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -1264px;
+ background-position: -1754px -1561px;
width: 20px;
height: 24px;
}
.notif_inventory_special_valentine {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1743px -1264px;
+ background-position: -1527px -1380px;
width: 20px;
height: 24px;
}
.npc_alex {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -967px -504px;
+ background-position: -967px -214px;
width: 162px;
height: 138px;
}
.npc_aprilFool {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -528px -824px;
+ background-position: -196px -794px;
width: 120px;
height: 120px;
}
.npc_bailey {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -621px;
+ background-position: -1713px -1104px;
width: 63px;
height: 66px;
}
.npc_daniel {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -392px -824px;
+ background-position: -967px -631px;
width: 135px;
height: 123px;
}
@@ -1848,37 +1908,37 @@
}
.npc_justin_head {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1722px -688px;
+ background-position: -1713px -1171px;
width: 36px;
height: 96px;
}
.npc_matt {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -824px;
+ background-position: -459px -643px;
width: 195px;
height: 138px;
}
.npc_sabe {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -596px -1105px;
+ background-position: -728px -1348px;
width: 90px;
height: 90px;
}
.npc_timetravelers {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -196px -824px;
+ background-position: -655px -643px;
width: 195px;
height: 138px;
}
.npc_timetravelers_active {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -676px -643px;
+ background-position: 0px -794px;
width: 195px;
height: 138px;
}
.npc_tyler {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -872px -643px;
+ background-position: -455px -1348px;
width: 90px;
height: 90px;
}
@@ -1890,13 +1950,13 @@
}
.seasonalshop_closed {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -967px -365px;
+ background-position: -967px -353px;
width: 162px;
height: 138px;
}
.seasonalshop_open {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -967px -643px;
+ background-position: -967px -492px;
width: 162px;
height: 138px;
}
@@ -1908,79 +1968,79 @@
}
.banner_flair_dysheartener {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -1142px -1037px;
+ background-position: -967px -755px;
width: 69px;
height: 18px;
}
.phobia_dysheartener {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -527px -220px;
+ background-position: -747px -422px;
width: 201px;
height: 195px;
}
.quest_armadillo {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -527px 0px;
+ background-position: -440px -423px;
width: 219px;
height: 219px;
}
.quest_atom1 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -217px -643px;
+ background-position: 0px -643px;
width: 250px;
height: 150px;
}
.quest_atom2 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -468px -643px;
+ background-position: -251px -643px;
width: 207px;
height: 138px;
}
.quest_atom3 {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -643px;
+ background-position: -307px -220px;
width: 216px;
height: 180px;
}
.quest_axolotl {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -440px -423px;
+ background-position: -747px 0px;
width: 219px;
height: 219px;
}
.quest_badger {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -203px;
+ background-position: -220px -423px;
width: 219px;
height: 219px;
}
.quest_basilist {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -963px;
+ background-position: 0px -933px;
width: 189px;
height: 141px;
}
.quest_beetle {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -747px -431px;
+ background-position: -747px -220px;
width: 204px;
height: 201px;
}
.quest_bunny {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -307px -220px;
+ background-position: -527px -220px;
width: 210px;
height: 186px;
}
.quest_butterfly {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -220px -423px;
+ background-position: -527px 0px;
width: 219px;
height: 219px;
}
.quest_cheetah {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: 0px -423px;
+ background-position: -307px 0px;
width: 219px;
height: 219px;
}
@@ -1992,25 +2052,13 @@
}
.quest_dilatory {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -747px 0px;
+ background-position: 0px -203px;
width: 219px;
height: 219px;
}
-.quest_dilatoryDistress1 {
- background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -747px -220px;
- width: 210px;
- height: 210px;
-}
-.quest_dilatoryDistress2 {
- background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -967px -214px;
- width: 150px;
- height: 150px;
-}
.quest_dilatory_derby {
background-image: url('~assets/images/sprites/spritesmith-main-9.png');
- background-position: -307px 0px;
+ background-position: 0px -423px;
width: 219px;
height: 219px;
}
diff --git a/website/client/assets/images/npc/broken/rage-strike-seasonalShop-scaled@2x.png b/website/client/assets/images/npc/broken/rage-strike-seasonalShop-scaled@2x.png
new file mode 100644
index 0000000000..1e8775f93d
Binary files /dev/null and b/website/client/assets/images/npc/broken/rage-strike-seasonalShop-scaled@2x.png differ
diff --git a/website/client/assets/images/npc/broken/seasonal_shop_broken_background.png b/website/client/assets/images/npc/broken/seasonal_shop_broken_background.png
new file mode 100644
index 0000000000..0c4a79919c
Binary files /dev/null and b/website/client/assets/images/npc/broken/seasonal_shop_broken_background.png differ
diff --git a/website/client/assets/images/npc/broken/seasonal_shop_broken_layer.png b/website/client/assets/images/npc/broken/seasonal_shop_broken_layer.png
new file mode 100644
index 0000000000..f071210b10
Binary files /dev/null and b/website/client/assets/images/npc/broken/seasonal_shop_broken_layer.png differ
diff --git a/website/client/assets/images/npc/broken/seasonal_shop_broken_npc.png b/website/client/assets/images/npc/broken/seasonal_shop_broken_npc.png
new file mode 100644
index 0000000000..897faf3154
Binary files /dev/null and b/website/client/assets/images/npc/broken/seasonal_shop_broken_npc.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-largeSprites-0.png b/website/client/assets/images/sprites/spritesmith-largeSprites-0.png
index 2b2972012f..63979ed9ee 100644
Binary files a/website/client/assets/images/sprites/spritesmith-largeSprites-0.png and b/website/client/assets/images/sprites/spritesmith-largeSprites-0.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-10.png b/website/client/assets/images/sprites/spritesmith-main-10.png
index 3b459b44b5..89a0823223 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-10.png and b/website/client/assets/images/sprites/spritesmith-main-10.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-11.png b/website/client/assets/images/sprites/spritesmith-main-11.png
index f33f3f7d49..2bd5de4e9f 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-11.png and b/website/client/assets/images/sprites/spritesmith-main-11.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-12.png b/website/client/assets/images/sprites/spritesmith-main-12.png
index 249e3fbb60..7a768320d8 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-12.png and b/website/client/assets/images/sprites/spritesmith-main-12.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-13.png b/website/client/assets/images/sprites/spritesmith-main-13.png
index 5504810649..951e7b9713 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-13.png and b/website/client/assets/images/sprites/spritesmith-main-13.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-14.png b/website/client/assets/images/sprites/spritesmith-main-14.png
index 2831283a9f..f9b9ff4a65 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-14.png and b/website/client/assets/images/sprites/spritesmith-main-14.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-15.png b/website/client/assets/images/sprites/spritesmith-main-15.png
index a37eddd876..0e6c99f287 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-15.png and b/website/client/assets/images/sprites/spritesmith-main-15.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-16.png b/website/client/assets/images/sprites/spritesmith-main-16.png
index d88e9f36aa..2bd3c6492c 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-16.png and b/website/client/assets/images/sprites/spritesmith-main-16.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-17.png b/website/client/assets/images/sprites/spritesmith-main-17.png
index 8942b2743d..49391a1846 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-17.png and b/website/client/assets/images/sprites/spritesmith-main-17.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-18.png b/website/client/assets/images/sprites/spritesmith-main-18.png
index 95f758a887..667fb83a86 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-18.png and b/website/client/assets/images/sprites/spritesmith-main-18.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-19.png b/website/client/assets/images/sprites/spritesmith-main-19.png
index b76a3c4d01..eaa28b044a 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-19.png and b/website/client/assets/images/sprites/spritesmith-main-19.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-20.png b/website/client/assets/images/sprites/spritesmith-main-20.png
index 8f4800025f..afd00c666c 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-20.png and b/website/client/assets/images/sprites/spritesmith-main-20.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-21.png b/website/client/assets/images/sprites/spritesmith-main-21.png
index da1355da2d..64e9023150 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-21.png and b/website/client/assets/images/sprites/spritesmith-main-21.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-7.png b/website/client/assets/images/sprites/spritesmith-main-7.png
index becd596016..1113863d2d 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-7.png and b/website/client/assets/images/sprites/spritesmith-main-7.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-8.png b/website/client/assets/images/sprites/spritesmith-main-8.png
index 4c03abd2a2..af9a33b9ee 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-8.png and b/website/client/assets/images/sprites/spritesmith-main-8.png differ
diff --git a/website/client/assets/images/sprites/spritesmith-main-9.png b/website/client/assets/images/sprites/spritesmith-main-9.png
index 8a09f58701..11773267dc 100644
Binary files a/website/client/assets/images/sprites/spritesmith-main-9.png and b/website/client/assets/images/sprites/spritesmith-main-9.png differ
diff --git a/website/client/assets/images/world-boss/heart-translucent-shadow-notification@3x.png b/website/client/assets/images/world-boss/heart-translucent-shadow-notification@3x.png
new file mode 100755
index 0000000000..28c4700f77
Binary files /dev/null and b/website/client/assets/images/world-boss/heart-translucent-shadow-notification@3x.png differ
diff --git a/website/client/assets/images/world-boss/mantis-static-notification@3x.png b/website/client/assets/images/world-boss/mantis-static-notification@3x.png
new file mode 100755
index 0000000000..3dbe6ad91d
Binary files /dev/null and b/website/client/assets/images/world-boss/mantis-static-notification@3x.png differ
diff --git a/website/client/assets/images/world-boss/rage_strike-market@2x.png b/website/client/assets/images/world-boss/rage_strike-market@2x.png
new file mode 100644
index 0000000000..3f98a6ed9c
Binary files /dev/null and b/website/client/assets/images/world-boss/rage_strike-market@2x.png differ
diff --git a/website/client/assets/images/world-boss/rage_strike-quests@2x.png b/website/client/assets/images/world-boss/rage_strike-quests@2x.png
new file mode 100644
index 0000000000..1501155b56
Binary files /dev/null and b/website/client/assets/images/world-boss/rage_strike-quests@2x.png differ
diff --git a/website/client/assets/images/world-boss/rage_strike-seasonalShop@2x.png b/website/client/assets/images/world-boss/rage_strike-seasonalShop@2x.png
new file mode 100644
index 0000000000..1b74cef647
Binary files /dev/null and b/website/client/assets/images/world-boss/rage_strike-seasonalShop@2x.png differ
diff --git a/website/client/assets/images/rage_strike2x.png b/website/client/assets/images/world-boss/rage_strike@2x.png
similarity index 100%
rename from website/client/assets/images/rage_strike2x.png
rename to website/client/assets/images/world-boss/rage_strike@2x.png
diff --git a/website/client/assets/scss/item.scss b/website/client/assets/scss/item.scss
index 01021ec567..9b8bd68e79 100644
--- a/website/client/assets/scss/item.scss
+++ b/website/client/assets/scss/item.scss
@@ -19,6 +19,10 @@
margin-bottom: 8px;
}
+.item.pet-slot {
+ margin: 0 2px;
+}
+
.item {
position: relative;
width: 94px;
diff --git a/website/client/components/chat/copyAsTodoModal.vue b/website/client/components/chat/copyAsTodoModal.vue
index 7e61dd3523..b347fe13fe 100644
--- a/website/client/components/chat/copyAsTodoModal.vue
+++ b/website/client/components/chat/copyAsTodoModal.vue
@@ -38,7 +38,7 @@ export default {
},
mounted () {
this.$root.$on('habitica::copy-as-todo', message => {
- const notes = `${message.user} wrote in [${this.groupName}](${baseUrl}/groups/guild/${this.groupId})`;
+ const notes = `${message.user || 'system message'}${message.user ? ' wrote' : ''} in [${this.groupName}](${baseUrl}/groups/guild/${this.groupId})`;
const newTask = {
text: message.text,
type: 'todo',
diff --git a/website/client/components/groups/membersModal.vue b/website/client/components/groups/membersModal.vue
index eb0199fc03..8b63c6b21a 100644
--- a/website/client/components/groups/membersModal.vue
+++ b/website/client/components/groups/membersModal.vue
@@ -432,10 +432,10 @@ export default {
if (!lastMember) return;
let newMembers = await this.$store.state.memberModalOptions.fetchMoreMembers({
- challengeId: this.challengeId,
- groupId: this.groupId,
- lastMemberId: lastMember._id,
- includeAllPublicFields: true,
+ challengeId: this.challengeId,
+ groupId: this.groupId,
+ lastMemberId: lastMember._id,
+ includeAllPublicFields: true,
});
this.members = this.members.concat(newMembers);
diff --git a/website/client/components/groups/tavern.vue b/website/client/components/groups/tavern.vue
index 0314ade398..7ed00400dd 100644
--- a/website/client/components/groups/tavern.vue
+++ b/website/client/components/groups/tavern.vue
@@ -1,6 +1,7 @@
.row
world-boss-info-modal
+ world-boss-rage-modal
.col-12.col-sm-8.clearfix.standard-page
.row
.col-6.title-details
@@ -37,8 +38,10 @@
.corner-decoration(:style="{top: '-2px', left: '-2px'}")
.corner-decoration(:style="{bottom: '-2px', right: '-2px'}")
.corner-decoration(:style="{bottom: '-2px', left: '-2px'}")
- .text-center.float-bar
- strong.reduce.boss-event(:style="{background: questData.colors.dark}") {{ $t('worldBossEvent') }}
+ .text-center.float-bar.d-flex.align-items-center
+ span.diamond
+ span.strong.reduce(:style="{background: questData.colors.dark}") {{ $t('worldBossEvent') }}
+ span.diamond
.boss-gradient.pb-3.pt-3
p.text-center.reduce(:style="{color: questData.colors.extralight}") {{ $t(`${questData.key}ArtCredit`) }}
.quest-boss(:class="'background_' + questData.key")
@@ -66,15 +69,19 @@
.svg-icon.boss-icon(v-html="icons.rageIcon")
span.reduce.ml-1.pt-1 {{ $t('bossRage', {currentRage: bossCurrentRage(), maxRage: questData.boss.rage.value.toLocaleString()}) }}
.row.d-flex.align-items-center.mb-2.mt-2
- .col-sm-5.d-flex
- strong {{ $t('rageStrikes') }}
- .svg-icon.boss-icon.information-icon.ml-2(v-html="icons.informationIcon", v-b-tooltip.hover.top="questData.boss.rage.description()")
- .col-sm-2
- img.rage-strike(src="~assets/images/rage_strike2x.png")
- .col-sm-2
- img.rage-strike(src="~assets/images/rage_strike2x.png")
- .col-sm-2
- img.rage-strike(src="~assets/images/rage_strike2x.png")
+ .col-sm-4.d-flex
+ strong.mr-2 {{ $t('rageStrikes') }}
+ .svg-icon.boss-icon.information-icon.m-auto(v-html="icons.informationIcon", v-b-tooltip.hover.top="questData.boss.rage.description()")
+ .col-sm-8.d-flex.align-items-center.justify-content-center
+ .m-auto(@click="showWorldBossRage('seasonalShop')")
+ img.rage-strike(src="~assets/images/world-boss/rage_strike@2x.png", v-if="!group.quest.extra.worldDmg.seasonalShop")
+ img.rage-strike-active(src="~assets/images/world-boss/rage_strike-seasonalShop@2x.png", v-if="group.quest.extra.worldDmg.seasonalShop")
+ .m-auto
+ img.rage-strike(src="~assets/images/world-boss/rage_strike@2x.png", v-if="!group.quest.extra.worldDmg.market")
+ img.rage-strike-active(src="~assets/images/world-boss/rage_strike-market@2x.png", v-if="group.quest.extra.worldDmg.market")
+ .m-auto
+ img.rage-strike(src="~assets/images/world-boss/rage_strike@2x.png", v-if="!group.quest.extra.worldDmg.quests")
+ img.rage-strike-active(src="~assets/images/world-boss/rage_strike-quests@2x.png", v-if="group.quest.extra.worldDmg.quests")
.boss-description.p-3(:style="{'border-color': questData.colors.extralight}", @click="sections.worldBoss = !sections.worldBoss")
strong.float-left {{ $t('worldBossDescription') }}
.float-right
@@ -448,12 +455,12 @@
.float-bar {
position: relative;
- top: -.75em;
- }
-
- .boss-event {
- padding: .5em 3em .5em 3em;
+ top: -16px;
+ width: 162px;
+ height: 28px;
border-radius: 2px;
+ background-color: inherit;
+ margin: auto;
}
.corner-decoration {
@@ -469,6 +476,17 @@
transform: rotate(180deg);
}
+ .diamond {
+ margin: auto;
+ display: inline-block;
+ width: 6px;
+ height: 6px;
+ -webkit-transform: rotate(-45deg);
+ transform: rotate(-45deg);
+ background-color: #dc4069;
+ border: solid 2px #931f4d;
+ }
+
.reduce {
font-size: 12px;
}
@@ -478,6 +496,12 @@
height: auto;
}
+ .rage-strike-active {
+ max-width: 75px;
+ height: auto;
+ cursor: pointer;
+ }
+
.world-boss-info-button {
width: 100%;
background-color: $gray-500;
@@ -485,6 +509,7 @@
font-size: 14px;
color: $blue-10;
padding: 1em;
+ cursor: pointer;
}
@@ -497,7 +522,8 @@ import { TAVERN_ID } from '../../../common/script/constants';
import chatMessage from '../chat/chatMessages';
import autocomplete from '../chat/autoComplete';
import communityGuidelines from './communityGuidelines';
-import worldBossInfoModal from '../worldBossInfoModal';
+import worldBossInfoModal from '../world-boss/worldBossInfoModal';
+import worldBossRageModal from '../world-boss/worldBossRageModal';
import challengeIcon from 'assets/svg/challenge.svg';
import chevronIcon from 'assets/svg/chevron-red.svg';
@@ -529,6 +555,7 @@ export default {
autocomplete,
communityGuidelines,
worldBossInfoModal,
+ worldBossRageModal,
},
data () {
return {
@@ -731,6 +758,11 @@ export default {
showWorldBossInfo () {
this.$root.$emit('bv::show::modal', 'world-boss-info');
},
+ showWorldBossRage (npc) {
+ if (this.group.quest.extra.worldDmg[npc]) {
+ this.$root.$emit('bv::show::modal', 'world-boss-rage');
+ }
+ },
},
};
diff --git a/website/client/components/header/notifications/worldBoss.vue b/website/client/components/header/notifications/worldBoss.vue
new file mode 100644
index 0000000000..5674304cc3
--- /dev/null
+++ b/website/client/components/header/notifications/worldBoss.vue
@@ -0,0 +1,179 @@
+
+base-notification(
+ :can-remove="false",
+ :notification="{}",
+ :read-after-click="false",
+ @click="action"
+)
+ .background(slot="content")
+ .text
+ .title {{ $t('worldBoss') }}
+ .sub-title {{ $t('questDysheartenerText') }}
+ .d-flex.align-items-center.justify-content-left
+ div
+ .left-hearts
+ .float-right
+ .quest_dysheartener_notification
+ .phobia_dysheartener_notification
+ .health-bar.d-flex.align-items-center.justify-content-center
+ .svg-icon(v-html="icons.health")
+ .boss-health-wrap
+ .boss-health-bar(:style="{width: (parseInt(bossHp) / questData.boss.hp) * 100 + '%'}")
+ .pending-damage
+ .svg-icon(v-html="icons.sword")
+ span +{{parseInt(user.party.quest.progress.up) || 0}}
+
+
+
+
+
diff --git a/website/client/components/header/notificationsDropdown.vue b/website/client/components/header/notificationsDropdown.vue
index a2849fa0bb..eb5e6d124f 100644
--- a/website/client/components/header/notificationsDropdown.vue
+++ b/website/client/components/header/notificationsDropdown.vue
@@ -3,9 +3,9 @@ menu-dropdown.item-notifications(:right="true", @toggled="handleOpenStatusChange
div(slot="dropdown-toggle")
div(v-b-tooltip.hover.bottom="$t('notifications')")
message-count(
- v-if='notificationsCount > 0',
- :count="notificationsCount",
- :top="true",
+ v-if='notificationsCount > 0',
+ :count="notificationsCount",
+ :top="true",
:gray="!hasUnseenNotifications",
)
.top-menu-icon.svg-icon.notifications(v-html="icons.notifications")
@@ -15,6 +15,7 @@ menu-dropdown.item-notifications(:right="true", @toggled="handleOpenStatusChange
)
h4.dropdown-title(v-once) {{ $t('notifications') }}
a.small-link.standard-link(@click="dismissAll", :disabled="notificationsCount === 0") {{ $t('dismissAll') }}
+ world-boss
component(
:is="notification.type",
:key="notification.id",
@@ -28,46 +29,45 @@ menu-dropdown.item-notifications(:right="true", @toggled="handleOpenStatusChange
.svg-icon(v-html="icons.success")
h2 You're all caught up!
p The notification fairies give you a raucous round of applause! Well done!
-
diff --git a/website/client/store/actions/common.js b/website/client/store/actions/common.js
index ae242fea7b..e3e2ac8428 100644
--- a/website/client/store/actions/common.js
+++ b/website/client/store/actions/common.js
@@ -8,9 +8,9 @@ export function equip (store, params) {
equipOp(user, {params});
axios
.post(`/api/v3/user/equip/${params.type}/${params.key}`);
- // TODO
- // .then((res) => console.log('equip', res))
- // .catch((err) => console.error('equip', err));
+ // TODO
+ // .then((res) => console.log('equip', res))
+ // .catch((err) => console.error('equip', err));
}
export function hatch (store, params) {
@@ -18,9 +18,9 @@ export function hatch (store, params) {
hatchOp(user, {params});
axios
.post(`/api/v3/user/hatch/${params.egg}/${params.hatchingPotion}`);
- // TODO
- // .then((res) => console.log('equip', res))
- // .catch((err) => console.error('equip', err));
+ // TODO
+ // .then((res) => console.log('equip', res))
+ // .catch((err) => console.error('equip', err));
}
export async function feed (store, params) {
diff --git a/website/client/store/actions/index.js b/website/client/store/actions/index.js
index bbf917552a..4fc0b035f3 100644
--- a/website/client/store/actions/index.js
+++ b/website/client/store/actions/index.js
@@ -15,6 +15,7 @@ import * as tags from './tags';
import * as hall from './hall';
import * as shops from './shops';
import * as snackbars from './snackbars';
+import * as worldState from './world-state';
// Actions should be named as 'actionName' and can be accessed as 'namespace:actionName'
// Example: fetch in user.js -> 'user:fetch'
@@ -35,6 +36,7 @@ const actions = flattenAndNamespace({
hall,
shops,
snackbars,
+ worldState,
});
export default actions;
diff --git a/website/client/store/actions/shops.js b/website/client/store/actions/shops.js
index 554694f499..46480de461 100644
--- a/website/client/store/actions/shops.js
+++ b/website/client/store/actions/shops.js
@@ -69,16 +69,16 @@ async function buyArmoire (store, params) {
// @TODO: We might need to abstract notifications to library rather than mixin
const notificationOptions = isExperience ?
- {
- text: `+ ${item.value}`,
- type: 'xp',
- flavorMessage: message,
- } :
- {
- text: message,
- type: 'drop',
- icon: getDropClass({type: item.type, key: item.dropKey}),
- };
+ {
+ text: `+ ${item.value}`,
+ type: 'xp',
+ flavorMessage: message,
+ } :
+ {
+ text: message,
+ type: 'drop',
+ icon: getDropClass({type: item.type, key: item.dropKey}),
+ };
store.dispatch('snackbars:add', {
title: '',
diff --git a/website/client/store/actions/world-state.js b/website/client/store/actions/world-state.js
new file mode 100644
index 0000000000..924335992f
--- /dev/null
+++ b/website/client/store/actions/world-state.js
@@ -0,0 +1,7 @@
+import axios from 'axios';
+
+export async function getWorldState () {
+ const url = '/api/v3/world-state';
+ const response = await axios.get(url);
+ return response.data.data;
+}
diff --git a/website/common/locales/bg/character.json b/website/common/locales/bg/character.json
index ee68a5bbfc..cb41d0cdf7 100644
--- a/website/common/locales/bg/character.json
+++ b/website/common/locales/bg/character.json
@@ -64,6 +64,7 @@
"classBonusText": "Вашият клас (воин, ако не сте отключили или избрали друг клас) използва собствената си екипировка по-ефективно, отколкото тази на другите класове. Екипирана броня за сегашния Ви клас дава 50% повече точки към показателя, който предоставя.",
"classEquipBonus": "Класов бонус",
"battleGear": "Бойно снаряжение",
+ "gear": "Gear",
"battleGearText": "Това е снаряжението, което носите в битка; то влияе върху числата, когато взаимодействате със задачите си.",
"autoEquipBattleGear": "Автоматично екипиране на новите предмети",
"costume": "Костюм",
diff --git a/website/common/locales/bg/faq.json b/website/common/locales/bg/faq.json
index 65ed401d66..a3e7003eda 100644
--- a/website/common/locales/bg/faq.json
+++ b/website/common/locales/bg/faq.json
@@ -22,8 +22,8 @@
"webFaqAnswer4": "Има няколко неща, които могат да Ви нанесат щети. Първо, ако не изпълните своите ежедневни задачи през деня, и ако не ги отметнете на екрана, който Ви се появи на следващата сутрин, тези незавършени ежедневни задачи ще Ви наранят. Второ, ако щракнете върху лош навик, ще поемете щети. И накрая, ако се биете срещу главатар заедно с групата си и някой от нея не е изпълнил всичките си ежедневни задачи, главатарят ще Ви нападне. Основният начин да оздравеете е да качите ниво, тъй като така възстановявате изцяло здравето си. Може също така да си купите лековита отвара от колоната с награди, използвайки златото си. Освен това, след ниво 10 може да изберете да станете лечител и да придобиете умения за лечение. Ако в групата Ви има лечител, той също може да Ви излекува. Научете повече като изберете „Група“ от лентата за навигация.",
"faqQuestion5": "Как да играя Хабитика с приятелите си?",
"iosFaqAnswer5": "Най-добрият начин е да си направите група! Групите могат заедно да изпълняват мисии, да се бият с чудовища и да използват уменията си, за да се подкрепят. Идете в Меню > Група и щракнете „Създаване на нова група“, ако все още нямате такава. След това докоснете списъка с членовете и докоснете „Покана“ в горния десен ъгъл, за да добавите приятелите си, като въведете техните потребителски идентификатори (низ от цифри и букви, които може да откриете в „Настройки > Подробности за профила“ в приложението, или в „Настройки > ППИ“ в уеб сайта). В уеб сайта можете да поканите приятелите си и чрез е-писмо; тази възможност ще бъде добавена и към приложението в някое бъдещо обновление.\n\nВ уеб сайта, вие и приятелите Ви можете също да се присъединявате към гилдии, които представляват обществени стаи за разговори. Гилдиите ще бъдат добавени към приложението в някое бъдещо обновление!",
- "androidFaqAnswer5": "Най-добрият начин е да си направите група! Групите могат заедно да изпълняват мисии, да се бият с чудовища и да използват уменията си, за да се подкрепят. Ако все още нямата група, идете в [уеб сайта(https://habitica.com/), за да си направите. Също така можете заедно да се присъединявате към гилдии (Общност > Гилдии). Гилдиите представляват стаи за разговори, концентрирани върху споделен интерес или преследването на обща цел и могат да бъдат обществени или частни. Можете да се присъедините към колкото желаете гилдии, но групата Ви може да бъде само една.\n\nЗа повече подробности, вижте страниците в уикито за [Групите](http://habitrpg.wikia.com/wiki/Party) и [Гилдиите](http://habitrpg.wikia.com/wiki/Guilds).",
- "webFaqAnswer5": "Най-добрият начин е да си направите група като щракнете върху „Група“ в лентата за навигация! Групите могат заедно да изпълняват мисии, да се бият с чудовища и да използват уменията си, за да се подкрепят. Можете също заедно да се присъединявате към гилдии („Общност > Гилдии“ в лентата за навигация). Гилдиите са стаи за разговори, организирани около общ интерес или преследването на обща цел, и могат да бъдат обществени или частни. Можете да се присъедините към колкото искате гилдии, но само към една група. За по-подробна информация, прегледайте страниците в уикито относно [Групите](http://habitrpg.wikia.com/wiki/Party) и [Гилдиите](http://habitrpg.wikia.com/wiki/Guilds).",
+ "androidFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to the [website](https://habitica.com/) to create one if you don't already have a Party. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n\n For more detailed info, check out the wiki pages on [Parties](http://habitica.wikia.com/wiki/Party) and [Guilds](http://habitica.wikia.com/wiki/Guilds).",
+ "webFaqAnswer5": "The best way is to invite them to a Party with you by clicking \"Party\" in the navigation bar! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join Guilds together (click on \"Guilds\" in the navigation bar). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many Guilds as you'd like, but only one Party. For more detailed info, check out the wiki pages on [Parties](http://habitica.wikia.com/wiki/Party) and [Guilds](http://habitica.wikia.com/wiki/Guilds).",
"faqQuestion6": "Как да се сдобия с любимец или превоз?",
"iosFaqAnswer6": "Когато достигнете ниво 3 се отключва системата за падане на предмети. Всеки път когато завършите задача, ще имате шанс да Ви се падне яйце, излюпваща отвара или храна. Тези неща ще се съхраняват в Меню > Предмети.\n\nЗа да се излюпи любимец Ви трябва яйце и излюпваща отвара. Докоснете яйцето, за да определите какво искате да се излюпи и изберете „Излюпване“. След това изберете излюпваща отвара, за да определите цвета! Идете в Меню > Любимци, за да екипирате новия си любимец като го докоснете.\n\nМожете да превърнете любимците си в превози като ги храните от Меню > Любимци. Докоснете любимец и изберете „Хранене“! Ще трябва да нахраните любимеца си много пъти, преди той да се превърне в превоз, но ако разберете каква е любимата му храна, той ще расте по-бързо. Опитайте чрез проба и грешка или [вижте информацията наготово тук](http://habitica.wikia.com/wiki/Food#Food_Preferences). След като вече имате превоз, идете в Меню > Превози и го докоснете, за да го екипирате.\n\nМоже да получите яйца за любимци от мисии, ако завършите някои конкретни мисии. (Вижте по-надолу, за да научите повече относно мисиите.)",
"androidFaqAnswer6": "Когато достигнете ниво 3 се отключва системата за падане на предмети. Всеки път когато завършите задача, ще имате шанс да Ви се падне яйце, излюпваща отвара или храна. Тези неща ще се съхраняват в Меню > Предмети.\n\nЗа да се излюпи любимец Ви трябва яйце и излюпваща отвара. Докоснете яйцето, за да определите какво искате да се излюпи от него, и изберете „Излюпване с отвара“. След това изберете излюпваща отвара, за да определите цвета! За да екипирате новия си любимец, идете в Меню > Конюшня > Любимци, изберете вид, а след това желания любимец и изберете „Използване“ (героят Ви няма да се обнови, за да видите промяната).\n\nМожете да превърнете любимците си в превози, като ги храните от Меню > Конюшня [ > Любимци ]. Докоснете любимец и изберете „Хранене“! Ще трябва да нахраните любимеца си много пъти, преди той да се превърне в превоз, но ако разберете каква е любимата му храна, той ще расте по-бързо. Опитайте чрез проба и грешка, или [вижте информацията наготово тук](http://habitica.wikia.com/wiki/Food#Food_Preferences). За да екипирате превоза си, идете в Меню > Конюшня > Превози, изберете вид, а след това желания превози, и изберете „Използване“ (героят Ви няма да се обнови, за да видите промяната).\n\nМоже да получите яйца за любимци от мисии, ако завършите някои конкретни мисии. (Вижте по-надолу, за да научите повече относно мисиите.)",
diff --git a/website/common/locales/bg/gear.json b/website/common/locales/bg/gear.json
index 1eec39eace..a2ca9c0c61 100644
--- a/website/common/locales/bg/gear.json
+++ b/website/common/locales/bg/gear.json
@@ -612,6 +612,8 @@
"armorMystery201711Notes": "Този удобен пуловер ще Ви държи топло докато се носите из облаците! Не променя показателите. Предмет за абонати: ноември 2017 г.",
"armorMystery201712Text": "Броня на майстор-свещар",
"armorMystery201712Notes": "Топлината и светлината произведени от тази вълшебна броня ще стоплят сърцето Ви, но няма да изгорят кожата Ви! Не променя показателите. Предмет за абонати: декември 2017 г.",
+ "armorMystery201802Text": "Love Bug Armor",
+ "armorMystery201802Notes": "This shiny armor reflects your strength of heart and infuses it into any Habiticans nearby who may need encouragement! Confers no benefit. February 2018 Subscriber Item.",
"armorMystery301404Text": "Изтънчен костюм",
"armorMystery301404Notes": "Спретнат и елегантен! Не променя показателите. Предмет за абонати: февруари 3015 г.",
"armorMystery301703Text": "Изтънчена паунова рокля",
@@ -984,6 +986,8 @@
"headMystery201710Notes": "С този шлем ще изглеждате страховито… но пък няма да имате добро 3-измерно зрение! Не променя показателите. Предмет за абонати: октомври 2017 г.",
"headMystery201712Text": "Корона на майстор-свещар",
"headMystery201712Notes": "Тази корона ще донесе светлина и топлина и в най-тъмната зимна нощ. Не променя показателите. Предмет за абонати: декември 2017 г.",
+ "headMystery201802Text": "Love Bug Helm",
+ "headMystery201802Notes": "The antennae on this helm act as cute dowsing rods, detecting feelings of love and support nearby. Confers no benefit. February 2018 Subscriber Item.",
"headMystery301404Text": "Украсен цилиндър",
"headMystery301404Notes": "Украсен цилиндър за най-изтънчените и високопоставени членове на обществото. Не променя показателите. Предмет за абонати: януари 3015 г.",
"headMystery301405Text": "Обикновен цилиндър",
@@ -1228,6 +1232,8 @@
"shieldMystery201708Notes": "Този як щит от разтопена скала Ви защитава от лошите навици, но няма да изгори ръцете Ви. Не променя показателите. Предмет за абонати: август 2017 г.",
"shieldMystery201709Text": "Магьоснически наръчник",
"shieldMystery201709Notes": "Тази книга ще Ви води по пътя Ви към усвояването на магията. Не променя показателите. Предмет за абонати: октомври 2017 г.",
+ "shieldMystery201802Text": "Love Bug Shield",
+ "shieldMystery201802Notes": "Although it may look like brittle candy, this shield is resistant to even the strongest Shattering Heartbreak attacks! Confers no benefit. February 2018 Subscriber Item.",
"shieldMystery301405Text": "Часовников щит",
"shieldMystery301405Notes": "Времето е на Ваша страна с този внушителен часовников щит! Не променя показателите. Предмет за абонати: юни 3015 г.",
"shieldMystery301704Text": "Пърхащо ветрило",
diff --git a/website/common/locales/bg/generic.json b/website/common/locales/bg/generic.json
index a16e91eaa0..1f97ddd3a5 100644
--- a/website/common/locales/bg/generic.json
+++ b/website/common/locales/bg/generic.json
@@ -136,6 +136,7 @@
"audioTheme_airuTheme": "Айру",
"audioTheme_beatscribeNesTheme": "Бийтскрайб — конзола „NES“",
"audioTheme_arashiTheme": "Араши",
+ "audioTheme_triumphTheme": "Triumph Theme",
"audioTheme_lunasolTheme": "Лунасол",
"audioTheme_spacePenguinTheme": "КосмоПингвин",
"audioTheme_maflTheme": "МАФЛ",
diff --git a/website/common/locales/bg/groups.json b/website/common/locales/bg/groups.json
index dbc5821c63..2fd05cac0f 100644
--- a/website/common/locales/bg/groups.json
+++ b/website/common/locales/bg/groups.json
@@ -202,7 +202,6 @@
"partyOnName": "Купонът продължава",
"partyUpText": "Присъединил(а) се към група с още един човек! Забавлявайте се, докато заедно се биете с чудовища и се подкрепяте взаимно.",
"partyOnText": "Присъединил(а) се към група с поне четири човека! Радвайте се на допълнителната отговорност, докато се съюзявате с приятелите си, за да побеждавате враговете си!",
- "largeGroupNote": "Забележка: тази гилдия вече е твърде голяма, за да поддържа известяване! Ще трябва да проверявате всеки ден за нови съобщения.",
"groupIdRequired": "„groupId“ трябва да бъде правилно форматиран идентификатор UUID",
"groupNotFound": "Групата не е намерена или нямате достъп.",
"groupTypesRequired": "Трябва да подадете правилен низ за заявка в „type“.",
@@ -220,11 +219,11 @@
"inviteMissingUuid": "В поканата липсва потребителски идентификатор",
"inviteMustNotBeEmpty": "Поканата не трябва да бъде празна.",
"partyMustbePrivate": "Групите трябва да бъдат частни",
- "userAlreadyInGroup": "Потребителят вече членува в тази група.",
+ "userAlreadyInGroup": "UserID: <%= userId %>, User \"<%= username %>\" already in that group.",
"cannotInviteSelfToGroup": "Не можете да поканите себе си в група.",
- "userAlreadyInvitedToGroup": "Потребителят вече е поканен в тази група.",
- "userAlreadyPendingInvitation": "Потребителят вече изчаква покана.",
- "userAlreadyInAParty": "Потребителят вече членува в група.",
+ "userAlreadyInvitedToGroup": "UserID: <%= userId %>, User \"<%= username %>\" already invited to that group.",
+ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.",
+ "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.",
"userWithIDNotFound": "Не е намерен потребител с идентификатора „<%= userId %>“.",
"userHasNoLocalRegistration": "Потребителят няма местна регистрация (потребителско име, е-поща, парола).",
"uuidsMustBeAnArray": "Поканите чрез потребителски идентификатор трябва да бъдат масив.",
@@ -417,11 +416,13 @@
"managerAdded": "Управителят е добавен успешно",
"managerRemoved": "Управителят е премахнат успешно.",
"leaderChanged": "Водачът беше сменен",
+ "groupNoNotifications": "This Guild does not have notifications due to member size. Be sure to check back often for replies to your messages!",
"whatIsWorldBoss": "Какво е световен главатар?",
"worldBossDesc": "Световният главатар е специално събитие, при което цялата общност на Хабитика работи заедно, за да победи могъщо чудовище, използвайки задачите си! След побеждаването му всички потребители на Хабитика получават награда, дори и онези, които са почивали в странноприемницата, или които изобщо не са използвали Хабитика по време на мисията.",
"worldBossLink": "Прочетете повече относно предишните световни главатари на Хабитика в Уикито.",
"worldBossBullet1": "Завършете задачите си, за да нанесете щети на световния главатар.",
"worldBossBullet2": "Главатарят няма да Ви нанесе щети за пропуснатите задачи, но яростомерът му ще се запълни. Ако лентата се запълни, главатарят ще нападне някой от продавачите на Хабитика!",
"worldBossBullet3": "Можете да продължите с нормалните главатари от мисиите си, като щетите ще се прилагат и на двамата главатари.",
- "worldBossBullet4": "Проверявайте в кръчмата, за да видите напредъка за световния главатар и яростните удари."
+ "worldBossBullet4": "Проверявайте в кръчмата, за да видите напредъка за световния главатар и яростните удари.",
+ "worldBoss": "World Boss"
}
\ No newline at end of file
diff --git a/website/common/locales/bg/limited.json b/website/common/locales/bg/limited.json
index ae9d495676..3dbb852b28 100644
--- a/website/common/locales/bg/limited.json
+++ b/website/common/locales/bg/limited.json
@@ -34,6 +34,7 @@
"seasonalShopFallText": "Честит Есенен фестивал!! Искате ли да си купите редки предмети? Те ще бъдат налични само до 31 октомври!",
"seasonalShopWinterText": "Честито Приказно зимно събитие!! Искате ли да си купите редки предмети? Те ще бъдат налични само до 31 януари!",
"seasonalShopFallTextBroken": "О… добре дошли в сезонния магазин… В момента предлагаме стоки от есенното сезонно издание, или нещо такова… Всичко тук ще бъде налично за купуване по време на Есенния фестивал всяка година, но магазинът ще бъде отворен само до 31-ви октомври… предполагам, че няма да е лошо да се запасите сега, или ще трябва да чакате… и чакате… и чакате… *въздишка*",
+ "seasonalShopBrokenText": "Павилионът ми!!!!!!! Декорациите ми!!!! О, Обезсърчителят унищожи всичко :( Моля Ви, помогнете да го победим в кръчмата, за да мога да построя всичко отново!",
"seasonalShopRebirth": "Ако сте купили някой от тези предмети преди време, но в момента не го притежавате, можете да го закупите отново в колонката с награди. Първоначално ще можете да закупувате само предметите за класа Ви (воин, по подразбиране), но не се безпокойте — останалите класово-специфични предмети ще се появят, ако превключите към съответния клас.",
"candycaneSet": "Захарна пръчка (магьосник)",
"skiSet": "Ски-убиец (мошеник)",
diff --git a/website/common/locales/bg/questscontent.json b/website/common/locales/bg/questscontent.json
index 7bc0b27d57..89f26b434c 100644
--- a/website/common/locales/bg/questscontent.json
+++ b/website/common/locales/bg/questscontent.json
@@ -570,7 +570,10 @@
"questDysheartenerCompletionChat": "Обезсърчителят е ПОБЕДЕН!\n\nЗаедно, всички в Хабитика нанасят последен удар на задачите си. Обезсърчителят изревава и отстъпва. „Какво има, Обезсърчителю?“ — пита AnnDeLune, с блясък в очите. — „Обезкуражен ли си?“\n\nПо черупките на Обезсърчителя се появяват светещи розови пукнатини, и той се разпада в розов пушек. Ново чувство на жизненост и решителност залива страната и от небето започват да валят сладки неща.\n\nТълпата се радва, хората се прегръщат, а любимците им нападат сладките. Изведнъж, радостен хор от песни огласява въздуха, и из въздуха се появяват блестящи силуети.\n\nОтново съживеният ни оптимизъм е привлякъл ято Обнадеждени хипогрифи! Грациозните същества кацат леко на земята, разрошвайки перата си, наперено и с интерес. „Изглежда имаме нови приятели, които ще поддържат духа ни, дори когато задачите ни ни отчайват.“ — казва Lemoness.\n\nBeffymaroo вече гали пернатите пухкавковци. — „Може би те ще ни помогнат да поправим повредените части от Хабитика!“\n\nПрипявайки, хипогрифите повеждат всички хабитиканци, за да могат заедно да възстановят обичния ни дом.",
"questDysheartenerBossRageTitle": "Сърцеразбиване",
"questDysheartenerBossRageDescription": "Яростомерът се запълва, когато хабитиканците пропускат ежедневните си задачи. Ако се запълни докрай, Обезсърчителят ще отприщи своето Сърцеразбиване върху някой от продавачите на Хабитика, така че не пропускайте задачите си!",
- "questDysheartenerBossRageSeasonal": "Обезсърчителят използва СЪРЦЕРАЗБИВАНЕ!`\n\nО, не! След като се нахрани с неизпълнените ни ежедневни задачи, Обезсърчителят вече има силата да нанесе своята атака – Сърцеразбиване. С пронизителен писък, той стоварва тънките си предни крака върху беседката, в която се намира Сезонният магазин! Магическата ударна вълна натрошава дъските и Сезонната магьосница се натъжава от гледката.\n\nБързо, да продължаваме да изпълняваме ежедневните си задачи, за да не ни удари отново чудовището!",
+ "questDysheartenerBossRageSeasonal": "Обезсърчителят използва СЪРЦЕРАЗБИВАНЕ!`\n\nО, не! След като се нахрани с неизпълнените ни ежедневни задачи, Обезсърчителят вече има силата да нанесе своята атака – Сърцеразбиване. С пронизителен писък, той стоварва тънките си предни крака върху павилиона, в която се намира Сезонният магазин! Магическата ударна вълна натрошава дъските и Сезонната магьосница се натъжава от гледката.\n\nБързо, да продължаваме да изпълняваме ежедневните си задачи, за да не ни удари отново чудовището!",
+ "seasonalShopRageStrikeHeader": "Сезонният магазин беше атакуван!",
+ "seasonalShopRageStrikeLead": "Лесли е сърцеразбита!",
+ "seasonalShopRageStrikeRecap": "На 21 февруари любимата ни сезонна магьосница – Лесли, беше съсипана, след като Обезсърчителят разруши Сезонния магазин. Бързо, свършете задачите си, за да победим чудовището и да ѝ помогнем да го построи отново!",
"questDysheartenerBossRageMarket": "Обезсърчителят използва СЪРЦЕРАЗБИВАНЕ!`\n\nО, не! След като се нахранва с неизпълнените ни ежедневни задачи, Обезсърчителят нанася още едно Сърцеразбиване, разбивайки стените и пода на пазара! Камъните му започват да падат, а Алекс Търговеца се разплаква, виждайки как стоката му е напълно унищожена.\n\nНе трябва да позволяваме на това да стане отново! Изпълнявайте ежедневните си задачи, за да не ни удари отново Обезсърчителят!",
"questDysheartenerBossRageQuests": "Обезсърчителят използва СЪРЦЕРАЗБИВАНЕ!`\n\nОоо! Отново оставихме ежедневните си задачи неизпълнени, и Обезсърчителят използва тази енергия, зад а нанесе последен удар на любимите ни продавачи. Земята около Пазителя на мисиите е опустошена от Сърцеразбиването, а Иън не може да понесе гледката. Толкова сме близо до победата над това чудовище… Побързайте! Не спирайте сега!",
"questDysheartenerDropHippogriffPet": "Обнадежден хипогриф (любимец)",
diff --git a/website/common/locales/bg/subscriber.json b/website/common/locales/bg/subscriber.json
index ea50893427..f9df47b988 100644
--- a/website/common/locales/bg/subscriber.json
+++ b/website/common/locales/bg/subscriber.json
@@ -139,6 +139,7 @@
"mysterySet201711": "Комплект на килимния летец",
"mysterySet201712": "Комплект на майстора-свещар",
"mysterySet201801": "Комплект на снежната фея",
+ "mysterySet201802": "Love Bug Set",
"mysterySet301404": "Стандартен изтънчен комплект",
"mysterySet301405": "Комплект изтънчени принадлежности",
"mysterySet301703": "Изтънчен паунов комплект",
diff --git a/website/common/locales/cs/achievements.json b/website/common/locales/cs/achievements.json
index a937a19082..08592c37d2 100644
--- a/website/common/locales/cs/achievements.json
+++ b/website/common/locales/cs/achievements.json
@@ -3,6 +3,6 @@
"onwards": "Kupředu!",
"levelup": "Díky dosažení tvých cílů v reálném životě jsi se dostal na vyšší úroveň, a jsi díky tomu plně uzdraven!",
"reachedLevel": "Dosáhl jsi úrovně <%= level %>",
- "achievementLostMasterclasser": "Quest Completionist: Masterclasser Series",
- "achievementLostMasterclasserText": "Completed all sixteen quests in the Masterclasser Quest Series and solved the mystery of the Lost Masterclasser!"
+ "achievementLostMasterclasser": "Dokončení výprav: Série Mistra třídy",
+ "achievementLostMasterclasserText": "Splň všech šestnáct výprav ve sérii výprav Mistra třídy a vyřeš záhadu Ztraceného Mistra!"
}
diff --git a/website/common/locales/cs/character.json b/website/common/locales/cs/character.json
index 5ddde72f2d..c69c55e531 100644
--- a/website/common/locales/cs/character.json
+++ b/website/common/locales/cs/character.json
@@ -64,6 +64,7 @@
"classBonusText": "Tvé povolání (Válečník, pokud jsi neodemkl nebo nevybral jiné povolání) využívá svoje vlastní vybavení efektivněji, než vybavení pro jiné povolání. Nasazené vybavení ti přidává 50% bonus k poskytované vlastnosti.",
"classEquipBonus": "Bonus třídy",
"battleGear": "Bojová výzbroj",
+ "gear": "Gear",
"battleGearText": "Tohle je tvé vybavení, které máš na sobě do bitvy; ovlivňuje čísla, když pracuješ se svými úkoly.",
"autoEquipBattleGear": "Automaticky použít nové vybavení",
"costume": "Kostým",
@@ -215,9 +216,9 @@
"headAccess": "Příslušenství na hlavu",
"backAccess": "Příslušenství na záda",
"bodyAccess": "Příslušenství na tělo",
- "mainHand": "Main-Hand",
- "offHand": "Off-Hand",
+ "mainHand": "Hlavní ruka",
+ "offHand": "Druhá ruka",
"pointsAvailable": "Dostupné body",
- "pts": "pts",
+ "pts": "Body",
"statsObjectRequired": "Je požadována aktualizace atributů"
}
\ No newline at end of file
diff --git a/website/common/locales/cs/communityguidelines.json b/website/common/locales/cs/communityguidelines.json
index 448e5dd176..3694a69b6e 100644
--- a/website/common/locales/cs/communityguidelines.json
+++ b/website/common/locales/cs/communityguidelines.json
@@ -43,7 +43,7 @@
"commGuideList02H": "Rozporuplné či kontroverzní diskuze by měly být hlášeny moderátorům pomocí označení týkajících se zpráv. Pokud si myslíš, že konverzace začíná být napjatá, příliš emocionální, nebo může někomu ublížit, přestaň se v ní zapojovat. Místo toho zprávy označ, aby jsi nám dal vědět. Moderátoři zareagují jak rychle to jen půjde. Naší prací je tě chránit. Pokud myslíš, že screenshoty by byly nápomocné, prosím, pošli nám je na email <%= hrefCommunityManagerEmail %>.",
"commGuideList02I": "Nespamujte. Spamování může zahrnovat, kromě jiného: zasílání stejného komentáře nebo dotazu na různá místa, zasílání odkazů bez vysvětlení nebo kontextu, zasílání nesmyslných zpráv, zasílání velkého množství zpráv v řadě. Žádost o drahokamy nebo předplatné ve veřejném prostoru nebo soukromých zprávách je považováno za spam.",
"commGuideList02J": "Prosíme vyhněte se postování textů ve fontu obřích nadpisů v prostorech veřejného chatu, obzvláště v Krčmě. Podobně jako KDYŽ PÍŠETE VŠECHNO S CAPS LOCKEM, vypadá to, jako kdybyste řvali, a narušuje to pohodovou atmosféru.",
- "commGuideList02K": "We highly discourage the exchange of personal information - particularly information that can be used to identify you - in public chat spaces. Identifying information can include but is not limited to: your address, your email address, and your API token/password. This is for your safety! Staff or moderators may remove such posts at their discretion. If you are asked for personal information in a private Guild, Party, or PM, we highly recommend that you politely refuse and alert the staff and moderators by either 1) flagging the message if it is in a Party or private Guild, or 2) taking screenshots and emailing Lemoness at <%= hrefCommunityManagerEmail %> if the message is a PM.",
+ "commGuideList02K": "Velmi odrazujeme výměnu osobních informací - zejména informací, které mohou být použity ke tvé identifikaci - ve veřejných chatových prostorách. Identifikační informace mohou mimo jiné zahrnovat: tvoji adresu, e-mailovou adresu a token / heslo API. Toto je pro tvoji bezpečnost! Personál nebo moderátoři mohou tyto příspěvky odstranit podle svého uvážení. Pokud jsi požádán o osobní informace v soukromém cechu, družině, nebo zprávě, důrazně doporučujeme, aby jsi zdvořile odmítl, a informoval personál a moderátory, a to buď: 1) Označením zprávy, pokud je v družině nebo soukromém cechu, nebo 2) pořízením screenshotů a posláním je Lemoness na <%= hrefCommunityManagerEmail %>, pokud se jedná o zprávu ve schránce.",
"commGuidePara019": "V soukromém prostoru mají uživatelé větší volnost diskutovat na libovolná témata, která však stále musí být v souladu s Pravidly užití, včetně zákazu diskriminačního, násilného nebo výhružného obsahu. Upozorňujeme, že jména výzev se zobrazují na profilu vítěze, proto MUSÍ být názvy Výzev tvořeny v souladu s pravidly pro veřejný prostor, přestože se vyskytují v soukromém prostoru.",
"commGuidePara020": "Soukromé zprávy (SZ) mají pár dalších zásad. Pokud tě někdo zablokoval, nekontaktuj je jiným způsobem, aby tě odblokoval. Dále, neměl bys posílat soukromé zprávy někomu, kdo žádá o pomoc (veřejné odpovědi na žádosti o pomoc mohou pomoc i jiným v komunitě). Nakonec, neposílej nikomu soukromé zprávy, ve kterých prosíš o drahokamy nebo předplatné, jelikož by to mohlo být považováno za spam.",
"commGuidePara020A": "Jestli uvidíš příspěvek, který věříš, že porušuje směrnice veřejného prostoru, které jsou načrtnuty nahoře, nebo jestli uvidíš příspěvek, který ti udělal starostil nebo se kvůli němu cítíš nepříjemně, můžeš to přivést k pozornosti moderátorů a personálu tím, že je označíš, aby ho nahlásili. Člen personálu nebo moderátor se pokusí tuto situaci vyřešit tak rychle, jak jen to bude možné. Prosím všimni si, že označování nevinných příspěvků naschvál je porušení těchto směrnic (podívej se dolů do sekce \"Porušení\"). Osobní zprávy nemohou být momentálně označeny, takže pokud chceš nahlásit osobní zprávu, udělej si screenshot a pošli ho emailem Lemonessovi na <%= hrefCommunityManagerEmail %>.",
@@ -56,14 +56,14 @@
"commGuideHeadingPublicGuilds": "Veřejné cechy",
"commGuidePara029": "Veřejné cechy jsou hodně jako krčma, akorát místo obecných diskuzí se v nich mluví na specifické téma. Chat ve veřejném cechu by se měl soustředit na téma. Například, členové cechu řečníků se asi nebudou bavit o zahradničení, a cech přemožitelů draků asi nebude mít zájem o luštění starých run. Některé cechy jsou laxnější než jiné, ale i tak, drž se tématu!",
"commGuidePara031": "Některé veřejné cechy budou obsahovat citlivá témata jako je deprese, náboženství, politika, atd. To je v pořádku pokud konverzace neporušují Pravidla a podmínky nebo Pravidla veřejných prostor a pokud budou k tématu.",
- "commGuidePara033": "Public Guilds may NOT contain 18+ content. If they plan to regularly discuss sensitive content, they should say so in the Guild title. This is to keep Habitica safe and comfortable for everyone.
If the guild in question has different kinds of sensitive issues, it is respectful to your fellow Habiticans to place your comment behind a warning (ex. \"Warning: references self-harm\"). These may be characterized as trigger warnings and/or content notes, and guilds may have their own rules in addition to those given here. If possible, please use markdown to hide the potentially sensitive content below line breaks so that those who may wish to avoid reading it can scroll past it without seeing the content. Habitica staff and moderators may still remove this material at their discretion. Additionally, the sensitive material should be topical -- bringing up self-harm in a guild focused on fighting depression may make sense, but may be less appropriate in a music guild. If you see someone who is repeatedly violating this guideline, especially after several requests, please flag the posts and email <%= hrefCommunityManagerEmail %> with screenshots.",
+ "commGuidePara033": "Veřejné cechy by NEMĚLY obsahovat 18+ obsah. Pokud mají v úmyslu často diskutovat citlivá témata, mělo by to být uvedeno v názvu cechu. Toto opatření je zde proto, aby byli na Habitice všichni v bezpečí, a cítili se zde dobře.
Pokud by takový cech obsahoval jiné druhy citlivých témat, bylo by slušné ostatní Habiťany varovat (např. \"Varování: diskuze je o sebepoškozování\"). Toto může být charakterizováno jako spouštěcí varování, a/nebo obsahové poznámky, a cechy mohou mít svá vlastní pravidla kromě těch, které jsou zde uvedeny. Pokud je to možné, prosím, použij formátování pro skrytí potencionálního citlivého příspěvku pod řádkem, aby se ti, kteří si přejí se tento obsah nečíst, jím mohli proscrollovat bez vidění onoho obsahu. Personál a moderátoři Habitici mohou stejně tento materiál odstranit dle svého uvážení. Navíc, citlivé téma by mělo být relevantní k cechu - začít mluvit o sebepoškozování v cechu o boji s depresí se může zdát jako dobrý nápad, ale už to nemusí být správné rozhodnutí v cechu o muzice. Pokud uvidíš, jak tohle pravidlo někdo neustále poškozuje, zejména když byl několikrát napomenut, prosím, označ tento post a pošli nám email na <%= hrefCommunityManagerEmail %> se screenshoty.",
"commGuidePara035": "Žádný cech, ať už veřejný nebo soukromý by neměl být založen za účelem útoku na skupinu nebo jednotlivce. Vytvoření takového cechu je důvodem k okamžitému banu. Bojuj proti špatným návykům, nebo proti dalším dobrodruhům!",
"commGuidePara037": "Všechny výzvy v krčmě a výzvy veřejných cechů se musí těmito pravidly řídit také.",
"commGuideHeadingBackCorner": "Zadní koutek",
- "commGuidePara038": "Sometimes a conversation will get too heated or sensitive to be continued in a Public Space without making users uncomfortable. In that case, the conversation will be directed to the Back Corner Guild. Note that being directed to the Back Corner is not at all a punishment! In fact, many Habiticans like to hang out there and discuss things at length.",
- "commGuidePara039": "The Back Corner Guild is a free public space to discuss sensitive subjects, and it is carefully moderated. It is not a place for general discussions or conversations. The Public Space Guidelines still apply, as do all of the Terms and Conditions. Just because we are wearing long cloaks and clustering in a corner doesn't mean that anything goes! Now pass me that smoldering candle, will you?",
+ "commGuidePara038": "Někdy se konverzace může stát příliš napjatou nebo citlivou natolik, aby se v ní už nemohlo pokračovat ve veřejném prostoru, aniž by nebyla někomu nepříjemná. V takovém případě by se měla konverzace přesunout do cechu Zadního Koutku (the Back Corner Guild). Přemístění do Zadního koutku není v žádném případě trest! Naopak, Habiťané tam rádi chodí vést dlouhé diskuze.",
+ "commGuidePara039": "Cech Zadního Koutku (The Back Corner Guild) je bezplatný veřejný prostor pro diskuzi citlivých témat, a je pečlivě moderován. Není to místo pro všeobecnou diskuzi nebo konverzace. Stále tu platí pravidla pro veřejné prostory, stejně tak i Pravidla a podmínky. Jen protože nosíme dlouhé kabáty a držíme se v koutě neznamená, že pravidla neplatí! A teď mi podej tu doutnající svíčku, můžeš?",
"commGuideHeadingTrello": "Trello fóra",
- "commGuidePara040": "Trello serves as an open forum for suggestions and discussion of site features. Habitica is ruled by the people in the form of valiant contributors -- we all build the site together. Trello lends structure to our system. Out of consideration for this, try your best to contain all your thoughts into one comment, instead of commenting many times in a row on the same card. If you think of something new, feel free to edit your original comments. Please, take pity on those of us who receive a notification for every new comment. Our inboxes can only withstand so much.",
+ "commGuidePara040": "Trello slouží jako otevřené fórum pro návrhy a pro diskuze funkcí stránky. Zemi Habitica vládnou lidé ve formě udatných přispěvatelů - my všichni budujeme tuto stránku společně. Trello nám poskytuje strukturu pro náš systém. Tak tedy prosíme snaž se sepsat všechny své myšlenky do jednoho komentáře místo několik komentářů na jedné kartě. Pokud vymyslíš něco nového, můžeš svůj komentář kdykoliv upravit. Prosím, slituj se nad námi. S každým komentářem dostaneme upozornění a naše inboxy pak praskají ve švech.",
"commGuidePara041": "Habitica používá čtyři různé Trello komise:",
"commGuideList03A": "Hlavní fórum je místo pro požadavky a kde se hlasuje o nových funkcích.",
"commGuideList03B": "Mobilní fórum je místo pro požadavky a kde se hlasuje o nových funkcích pro aplikace pro mobily.",
@@ -83,14 +83,14 @@
"commGuideList04B": "Být otevřený o svém návrhu na změnu",
"commGuideList04C": "Diskutovat o kolizi změn na diskuzní stránce stránky",
"commGuideList04D": "Upozornit adminy na nevyřešený konflikt",
- "commGuideList04DRev": "Mentioning any unresolved conflict in the Wizards of the Wiki guild for additional discussion, or if the conflict has become abusive, contacting moderators (see below) or emailing Lemoness at <%= hrefCommunityManagerEmail %>",
+ "commGuideList04DRev": "Zmínění jakéhokoli nevyřešeného konfliktu v cechu Wizards of the Wiki pro další diskusi nebo v případě, že se konflikt stal urážlivým, kontaktování moderátorů (viz. níže), nebo zaslání e-mailu Lemoness na <%= hrefCommunityManagerEmail %>",
"commGuideList04E": "Nespamovat či sabotovat stránky z osobních důvodů",
- "commGuideList04F": "Reading Guidance for Scribes before making any changes",
- "commGuideList04G": "Using an impartial tone within wiki pages",
+ "commGuideList04F": "Přečti si Vodítko pro Písaře (Guidance for Scribes) před provedením jakýchkoliv změn.",
+ "commGuideList04G": "Používat nestranný tón na Wiki stránkách",
"commGuideList04H": "Zajištění, že obsah wiki je relevatní celému Habitica a neprotěžuje konkrétní cech nebo družinu (takové informace mohou být přesunuty do fór)",
"commGuidePara049": "Následující lidé jsou současnými wiki administrátory:",
- "commGuidePara049A": "The following moderators can make emergency edits in situations where a moderator is needed and the above admins are unavailable:",
- "commGuidePara018": "Wiki Administrators Emeritus are:",
+ "commGuidePara049A": "Následující moderátoři mohou provádět naléhavé úpravy v situacích, kde je moderátor potřeba, a vyšší admini nejsou k dispozici. ",
+ "commGuidePara018": "Vysloužilí administrátoři Wiki jsou:",
"commGuideHeadingInfractionsEtc": "Porušení, důsledky a náprava",
"commGuideHeadingInfractions": "Porušení",
"commGuidePara050": "Habiťané si pomáhají, respektují se a udržují komunitu zábavnou a přátelskou. Avšak, jednou za čas, něco, co některý Habiťan udělá, může porušovat jedno z uvedených pravidel. Když se to stane, moderátoři zakročí jak uznají za vhodné aby zemi Habitica ochránili.",
@@ -101,17 +101,17 @@
"commGuideList05A": "Porušení Pravidel a podmínek",
"commGuideList05B": "Nenávistná prohlášení/obrázky, harašení/stalking, kyberšikana, klení a trolling",
"commGuideList05C": "Porušení podmínky",
- "commGuideList05D": "Impersonation of Staff or Moderators",
+ "commGuideList05D": "Vydávání se za moderátora nebo personál",
"commGuideList05E": "Opakovaná mírnější porušení",
- "commGuideList05F": "Creation of a duplicate account to avoid consequences (for example, making a new account to chat after having chat privileges revoked)",
- "commGuideList05G": "Intentional deception of Staff or Moderators in order to avoid consequences or to get another user in trouble",
+ "commGuideList05F": "Vytvoření duplikátního účtu, aby jsi se vyhnul následkům (například vytvoření nového účtu poté, co ti byl zablokován přístup na chat)",
+ "commGuideList05G": "Úmyslné podvádění personálu nebo moderátorů, aby jsi se vyhnul následkům, nebo aby jsi dostal jiného uživatele do potíží.",
"commGuideHeadingModerateInfractions": "Mírnější porušení",
"commGuidePara054": "Lehčí porušení pravidel neohrožuje naši komunitu, ale mohou být velmi nepříjemná. Lehčí porušení pravidel budou mít lehčí následky. Pokud se ale porušení nakupí, budou i jejich následky vážnější.",
"commGuidePara055": "Následují příklady mírnějších porušení. Toto není úplný seznam.",
- "commGuideList06A": "Ignoring or Disrespecting a Mod. This includes publicly complaining about moderators or other users/publicly glorifying or defending banned users. If you are concerned about one of the rules or Mods, please contact Lemoness via email (<%= hrefCommunityManagerEmail %>).",
+ "commGuideList06A": "Ignorování nebo nerespektování moderátora. To zahrnuje i veřejné stížnosti o moderátorech nebo další uživatelích/veřejné obhajování nebo oslavování zabanovaných uživatelů. Pokud se ti nezdá nějaké pravidlo nebo chování moderátora, prosím, kontaktuj Lemoness přes email (<%= hrefCommunityManagerEmail %>).",
"commGuideList06B": "Hraní si na moderátora. Jen pro upřesnění: přátelské připomenutí pravidel není na škodu. Hraní si na moderátora zahrnuje nařizování, vyžadování a/nebo trvání na to, aby někdo udělal co jsi popsal k napravení chyby. Můžeš někoho upozornit na to, že někdo spáchal přestupek, ale prosím nevyžaduj nějakou akci. Například říct \"Abys věděl, vulgarity jsou v Krčmě zakázané, tak by asi bylo lepší to smazat\" je lepší než říct \"Budu tě muset požádat o smazání příspěvku.\"",
- "commGuideList06C": "Repeatedly Violating Public Space Guidelines",
- "commGuideList06D": "Repeatedly Committing Minor Infractions",
+ "commGuideList06C": "Opakované porušování Pravidel veřejného prostoru",
+ "commGuideList06D": "Opakované páchání menších porušení",
"commGuideHeadingMinorInfractions": "Lehčí porušení",
"commGuidePara056": "Lehčí porušení, i když je vidíme neradi, mají lehčí důsledky. Pokud se budou opakovat, mohou časem vést k vážnějším důsledkům.",
"commGuidePara057": "Následují příklady lehčích porušení. Toto není kompletní seznam.",
@@ -120,19 +120,19 @@
"commGuideHeadingConsequences": "Důsledky",
"commGuidePara058": "V zemi Habitica - stejně jako v reálném životě - každý čin má svůj důsledek, ať je to lepší forma po cvičení, kazy po jezení hodně cukru, nebo dobrá známka z testu, protože jsi studoval.",
"commGuidePara059": "Stejně tak každé porušení má přímé důsledky. Některé důsledky jsou uvedeny dole.",
- "commGuidePara060": "If your infraction has a moderate or severe consequence, there will be a post from a staff member or moderator in the forum in which the infraction occurred explaining:",
+ "commGuidePara060": "Pokud tvé porušení má mírné nebo těžší následky, bude na fórum, kde došlo k porušení, přidán příspěvek od člena personálu nebo moderátora vysvětlující:",
"commGuideList08A": "jaké bylo tvé porušení",
"commGuideList08B": "jaký je jeho důsledek",
"commGuideList08C": "co udělat pro nápravu a znovuzískání statusu, pokud to je vůbec možné.",
"commGuidePara060A": "Jestliže si to situace vyžádá, můžeš dostat PM (osobní zprávu) nebo email ještě navíc k příspěvku ve fóru, kde se porušení vyskytlo.",
- "commGuidePara060B": "If your account is banned (a severe consequence), you will not be able to log into Habitica and will receive an error message upon attempting to log in. If you wish to apologize or make a plea for reinstatement, please email Lemoness at <%= hrefCommunityManagerEmail %> with your UUID (which will be given in the error message). It is your responsibility to reach out if you desire reconsideration or reinstatement.",
+ "commGuidePara060B": "Pokud je tvůj účet zablokován (z vážného důsledku), nebudeš se moci přihlásit do programu Habitica, a obdržíš chybovou zprávu během pokusu o přihlášení. Pokud si přeješ se omluvit nebo požádat o obnovení, prosím, pošli email Lemoness na <%= hrefCommunityManagerEmail %> s tvým UUID (které ti bude dáno v chybové zprávě). Je tvojí povinností nás oslovit, pokud si přeješ věci přehodnotit, nebo obnovit účet.",
"commGuideHeadingSevereConsequences": "Příklady vážných důsledků",
"commGuideList09A": "Bany účtu (viz. výše)",
"commGuideList09B": "vymazání účtu",
"commGuideList09C": "Permanentní zmražení postupu na žebříčku přispěvatelů",
"commGuideHeadingModerateConsequences": "Příklady mírnějších důsledků",
"commGuideList10A": "Omezená práva veřejného chatu",
- "commGuideList10A1": "If your actions result in revocation of your chat privileges, a Moderator or Staff member will PM you and/or post in the forum in which you were muted to notify you of the reason for your muting and the length of time for which you will be muted. At the end of that period, you will receive your chat privileges back, provided you are willing to correct the behavior for which you were muted and comply with the Community Guidelines.",
+ "commGuideList10A1": "Pokud tvé akce vedou k odebrání tvých chatových práv, moderátor nebo člen personálu ti pošle soukromou zprávu a/nebo příspěvek ve fóru, ve kterém jsi byl vypnut, aby ti oznámil důvod tvého vypnutí a dobu, po kterou budeš blokován. Na konci této doby ti budou práva k chatu vrácena za předpokladu, že jsi ochotný napravit chování, pro které jsi byl ztlumen, a budeš dodržovat Zásady komunity.",
"commGuideList10B": "Omezená práva soukromého chatu",
"commGuideList10C": "Omezená práva tvoření cechu/družin",
"commGuideList10D": "Dočasné zmražení postupu na žebříčku přispěvatelů",
@@ -146,7 +146,7 @@
"commGuideList11E": "Změny (moderátoři/zaměstnanci mohou měnit problémový obsah)",
"commGuideHeadingRestoration": "Obnovení",
"commGuidePara061": "Habitica je země zasvěcená sebezlepšování a věříme ve druhé šance. Pokud spácháš přestupek a bude to pro tebe mít důsledky, dívej se na to jako na šanci zhodnotit své činy a šanci stát se lepším členem komunity.",
- "commGuidePara062": "The announcement, message, and/or email that you receive explaining the consequences of your actions (or, in the case of minor consequences, the Mod/Staff announcement) is a good source of information. Cooperate with any restrictions which have been imposed, and endeavor to meet the requirements to have any penalties lifted.",
+ "commGuidePara062": "Oznámení, zpráva, a/nebo email, který ti byl zaslán, ve kterém vysvětlujeme důsledky tvých činů (nebo, v případě lehčích přestupků, oznámení moderátora/zaměstnance), je dobrým zdrojem informací. Spolupracuj s omezeními, které na tebe byli uvaleny a snaž se dosáhnout podmínek, abys jich byl zbaven.",
"commGuidePara063": "Pokud nerozumíš důsledkům nebo svému přestupku, požádej zaměstnance/moderátory o rady, aby ses mohl přestupkům v budoucnosti vyhnout.",
"commGuideHeadingContributing": "Přispět programu Habitica",
"commGuidePara064": "Habitica je open-source projekt, což znamená že kterýkoliv z Habiťanů může přispět! Ti, kteří přispějí, budou odměněni následujícími stupni přispěvatelů:",
@@ -164,7 +164,7 @@
"commGuideList13C": "Úrovně nezačínají odznovu v každé oblasti. Při zjišťování obtížnosti přihlížíme a všechny tvé příspěvky, tak aby lidé, kteří udělají pár obrázků, pak spraví malou chybu, pak se porýpou ve wiki, nepostupovali výše rychleji než lidé, kteří tvrdě dřou na jednom úkolu. To udržuje věci fér!",
"commGuideList13D": "Uživatelé v podmínce nemohou povýšení na vyšší úroveň. Moderátoři mají právo zmrazit uživatelův postup za přestupky. Pokud se tak stane, uživatel bude vždy informován o rozhodnutí a jak to napravit. Úrovně mohou být také odebrány jako důsledek závažného porušení pravidel nebo jako důsledek podmínky.",
"commGuideHeadingFinal": "Poslední část",
- "commGuidePara067": "So there you have it, brave Habitican -- the Community Guidelines! Wipe that sweat off of your brow and give yourself some XP for reading it all. If you have any questions or concerns about these Community Guidelines, please email Lemoness (<%= hrefCommunityManagerEmail %>) and she will be happy to help clarify things.",
+ "commGuidePara067": "Tak takhle to je, odvážný Habiťane - Zásady komunity! Setři si pot z čela a přidej si pár zkušenostních bodů za tu práci se čtením. Pokud máš jakékoliv otázky nebo obavy o těchto Zásad komunity, prosím, pošli email Lemoness (<%= hrefCommunityManagerEmail %>) a ona ti ráda vše vysvětlí.",
"commGuidePara068": "Nyní kupředu, chrabrý dobrodruhu, a přemož nějaké Denní úkoly!",
"commGuideHeadingLinks": "Užitečné odkazy",
"commGuidePara069": "Následují talentovaní umělci přispěli ilustracemi:",
diff --git a/website/common/locales/cs/faq.json b/website/common/locales/cs/faq.json
index 25ac5aec6c..3eb5651745 100644
--- a/website/common/locales/cs/faq.json
+++ b/website/common/locales/cs/faq.json
@@ -6,15 +6,15 @@
"webFaqAnswer0": "Nejprve si zadáš nějaký úkol, který chceš splnit v reálném životě. Až ho splníš a odškrtneš, dostaneš Zkušenostní body a zlato. Zlato se používá na nákup vybavení nebo jiných předmětů a vlastních odměn. Díky zkušenosti budeš získávat vyšší a vyšší úrovně a odemykat obsah, jakým jsou třeba Mazlíčci, Dovednosti, nebo Výpravy! Pro více informací se podívej na přehled krok-za-krokem v [Nápověda -> Přehled pro nové uživatele] (https://habitica.com/static/overview).",
"faqQuestion1": "Jak si přidám úkoly?",
"iosFaqAnswer1": "Dobré zvyky (ty s +), jsou věci, které můžeš plnit kolikrát chceš, například jedení zeleniny. Zlozvyky (ty s -) jsou věci, kterým se chceš vyhnout, třeba kousání nehtů. Zvyky s + a - jsou takové věci, kde můžeš udělat dobré či špatné rozhodnutí, jako třeba když jdeš po schodech vs. jízda výtahem. Dobré zvyky tě za splnění odmění Zkušenostmi a zlatem. Zlozvyky ti uberou Zdraví.\n\nDenní úkoly jsou věci, které musíš dělat každý den, jako třeba čištění zubů nebo kontrola emailu. Můžeš si nastavit ve které dny máš plnit které denní úkoly tak, že na ně ťukneš. Pokud naplánovaný Denní úkol nesplníš, odečte se ti přes noc Zdraví. Dávej pozor, aby sis nepřidal moc Denních úkolů najednou!\n\nÚkolníček obsahuje tvoje naplánované úkoly. Když je splníš, přinesou ti Zkušenost a zlato. Za nesplněné úkoly v Úkolníčku nikdy neztratíš Zdraví. Můžeš jim přiřadit datum splnění tím, že na ně ťukneš.",
- "androidFaqAnswer1": "Good Habits (the ones with a +) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a -) are tasks that you should avoid, like biting nails. Habits with a + and a - have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award experience and gold. Bad Habits subtract health.\n\n Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by tapping to edit it. If you skip a Daily that is due, your character will take damage overnight. Be careful not to add too many Dailies at once!\n\n To-Dos are your To-Do list. Completing a To-Do earns you gold and experience. You never lose health from To-Dos. You can add a due date to a To-Do by tapping to edit.",
- "webFaqAnswer1": "* Good Habits (the ones with a :heavy_plus_sign:) are tasks that you can do many times a day, such as eating vegetables. Bad Habits (the ones with a :heavy_minus_sign:) are tasks that you should avoid, like biting nails. Habits with a :heavy_plus_sign: and a :heavy_minus_sign: have a good choice and a bad choice, like taking the stairs vs. taking the elevator. Good Habits award Experience and Gold. Bad Habits subtract Health.\n* Dailies are tasks that you have to do every day, like brushing your teeth or checking your email. You can adjust the days that a Daily is due by clicking the pencil item to edit it. If you skip a Daily that is due, your avatar will take damage overnight. Be careful not to add too many Dailies at once!\n* To-Dos are your To-Do list. Completing a To-Do earns you Gold and Experience. You never lose Health from To-Dos. You can add a due date to a To-Do by clicking the pencil icon to edit.",
+ "androidFaqAnswer1": "Dobré zvyky (ty s +), jsou věci, které můžeš plnit kolikrát chceš, například jedení zeleniny. Zlozvyky (ty s -) jsou věci, kterým se chceš vyhnout, třeba kousání nehtů. Zvyky s + a - jsou takové věci, kde můžeš udělat dobré či špatné rozhodnutí, jako třeba když jdeš po schodech vs. jízda výtahem. Dobré zvyky tě za splnění odmění Zkušenostmi a zlatem. Zlozvyky ti uberou Zdraví.\n\nDenní úkoly jsou věci, které musíš dělat každý den, jako třeba čištění zubů nebo kontrola emailu. Můžeš si nastavit ve které dny máš plnit které denní úkoly tak, že na ně ťukneš. Pokud naplánovaný Denní úkol nesplníš, odečte se ti přes noc Zdraví. Dávej pozor, aby sis nepřidal moc Denních úkolů najednou!\n\nÚkolníček obsahuje tvoje naplánované úkoly. Když je splníš, přinesou ti Zkušenost a zlato. Za nesplněné úkoly v Úkolníčku nikdy neztratíš Zdraví. Můžeš jim přiřadit datum splnění tím, že na ně ťukneš.",
+ "webFaqAnswer1": "* Dobré zvyky (ty s +), jsou věci, které můžeš plnit kolikrát chceš, například jedení zeleniny. Zlozvyky (ty s -) jsou věci, kterým se chceš vyhnout, třeba kousání nehtů. Zvyky s + a - jsou takové věci, kde můžeš udělat dobré či špatné rozhodnutí, jako třeba když jdeš po schodech vs. jízda výtahem. Dobré zvyky tě za splnění odmění Zkušenostmi a zlatem. Zlozvyky ti uberou Zdraví.\n* Denní úkoly jsou věci, které musíš dělat každý den, jako třeba čištění zubů nebo kontrola emailu. Můžeš si nastavit ve které dny máš plnit které denní úkoly tak, že klikneš na ikonku tužky pro úpravu.. Pokud naplánovaný Denní úkol nesplníš, odečte se ti přes noc Zdraví. Dávej pozor, aby sis nepřidal moc Denních úkolů najednou!\n* Úkolníček obsahuje tvoje naplánované úkoly. Když je splníš, přinesou ti Zkušenost a zlato. Za nesplněné úkoly v Úkolníčku nikdy neztratíš Zdraví. Můžeš jim přiřadit datum splnění tím, že klikneš na ikonku tužky pro úpravu.",
"faqQuestion2": "Co jsou ukázkové úkoly?",
"iosFaqAnswer2": "Wiki má čtyři seznamy ukázkových úkolů, kterými se můžeš inspirovat:\n
\n* [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)",
"androidFaqAnswer2": "Habitica wiki má čtyři seznamy ukázkových úkolů pro inspiraci:\n
\n * [Ukázkové zvyky](http://habitica.wikia.com/wiki/Sample_Habits)\n * [Ukázkové Denní úkoly](http://habitica.wikia.com/wiki/Sample_Dailies)\n * [Ukázkové úkoly(http://habitica.wikia.com/wiki/Sample_To-Dos)\n * [Ukázkové vlastní odměny](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)",
"webFaqAnswer2": "Wiki má čtyři seznamy ukázkových úkolů, kterými se můžeš inspirovat:\n [Sample Habits](http://habitica.wikia.com/wiki/Sample_Habits)\n* [Sample Dailies](http://habitica.wikia.com/wiki/Sample_Dailies)\n* [Sample To-Dos](http://habitica.wikia.com/wiki/Sample_To-Dos)\n* [Sample Custom Rewards](http://habitica.wikia.com/wiki/Sample_Custom_Rewards)",
"faqQuestion3": "Proč moje úkoly mění barvu?",
"iosFaqAnswer3": "Tvé úkoly mění barvu v závislosti na tom, jak dobře si v nich vedeš! Každý nový úkol začíná na neutrální žluté. Plň Denní úkoly a Zvyky často a začnou modrat. Když nesplníš Denní úkol nebo se poddáš zlozvyku, začnou tvé úkoly červenat. Čím červenější úkol bude, tím více odměn za něj získáš, ale pokud to je Denní úkol nebo Zvyk, tak tím více ti ublíží! Tento systém tě pomáhá motivovat a plnit úkoly, se kterými máš problém.",
- "androidFaqAnswer3": "Your tasks change color based on how well you are currently accomplishing them! Each new task starts out as a neutral yellow. Perform Dailies or positive Habits more frequently and they move toward blue. Miss a Daily or give in to a bad Habit and the task moves toward red. The redder a task, the more rewards it will give you, but if it's a Daily or bad Habit, the more it will hurt you! This helps motivate you to complete the tasks that are giving you trouble.",
+ "androidFaqAnswer3": "Tvé úkoly mění barvu v závislosti na tom, jak dobře si v nich vedeš! Každý nový úkol začíná na neutrální žluté. Plň Denní úkoly a Zvyky často a začnou modrat. Když nesplníš Denní úkol nebo se poddáš zlozvyku, začnou tvé úkoly červenat. Čím červenější úkol bude, tím více odměn za něj získáš, ale pokud to je Denní úkol nebo Zvyk, tak tím více ti ublíží! Tento systém tě pomáhá motivovat a plnit úkoly, se kterými máš problém.",
"webFaqAnswer3": "Tvé úkoly mění barvu v závislosti na tom, jak dobře si v nich vedeš! Každý nový úkol začíná na neutrální žluté. Plň Denní úkoly a Zvyky často a začnou modrat. Když nesplníš Denní úkol nebo se poddáš zlozvyku, začnou tvé úkoly červenat. Čím červenější úkol bude, tím více odměn za něj získáš, ale pokud to je Denní úkol nebo Zvyk, tak tím více ti ublíží! Tento systém tě pomáhá motivovat a plnit úkoly, se kterými máš problém.",
"faqQuestion4": "Proč má postava ztratila Zdraví a jak ho mohu získat zpátky?",
"iosFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight and didn't check them off in the screen that popped up the next morning, those unfinished Dailies will damage you. Second, if you tap a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your Party and one of your Party mates did not complete all their Dailies, the Boss will attack you.\n\n The main way to heal is to gain a level, which restores all your health. You can also buy a Health Potion with gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. If you are in a Party with a Healer, they can heal you as well.",
@@ -22,8 +22,8 @@
"webFaqAnswer4": "There are several things that can cause you to take damage. First, if you left Dailies incomplete overnight and didn't check them off in the screen that popped up the next morning, those unfinished Dailies will damage you. Second, if you click a bad Habit, it will damage you. Finally, if you are in a Boss Battle with your party and one of your party mates did not complete all their Dailies, the Boss will attack you. The main way to heal is to gain a level, which restores all your Health. You can also buy a Health Potion with Gold from the Rewards column. Plus, at level 10 or above, you can choose to become a Healer, and then you will learn healing skills. Other Healers can heal you as well if you are in a Party with them. Learn more by clicking \"Party\" in the navigation bar.",
"faqQuestion5": "Jak můžu hrát hru Habitica s přáteli?",
"iosFaqAnswer5": "Nejlepším způsobem je pozvat je do tvé Družiny! Družiny se mohou vydávat na výpravy, bojovat proti příšerám, a navzájem se podporovat. Jdi do Menu > Družina a klikni na \"Vytvořit novou družinu\", pokud ještě žádnou nemáš. Pak ťukni na Pozvat v pravém horním rohu a pozvi přátele zadáním jejich uživatelského ID (řetězec čísel a písmen, který v aplikaci najdou v nastavení > Detaily účtu, nebo v Nastavení > API na stránce). Na stránce také můžeš pozvat přátele přes email. Do aplikace tuto možnost přidáme výhledově.\n\nNa stránce se také můžeš přidat do Cechů, což jsou veřejné chaty. Cechy budou do aplikace přidány v nějaké z příštích aktualizací!",
- "androidFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to the [website](https://habitica.com/) to create one if you don't already have a Party. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n\n For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).",
- "webFaqAnswer5": "The best way is to invite them to a Party with you by clicking \"Party\" in the navigation bar! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join Guilds together (click on \"Guilds\" in the navigation bar). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many Guilds as you'd like, but only one Party. For more detailed info, check out the wiki pages on [Parties](http://habitrpg.wikia.com/wiki/Party) and [Guilds](http://habitrpg.wikia.com/wiki/Guilds).",
+ "androidFaqAnswer5": "The best way is to invite them to a Party with you! Parties can go on quests, battle monsters, and cast skills to support each other. Go to the [website](https://habitica.com/) to create one if you don't already have a Party. You can also join guilds together (Social > Guilds). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many guilds as you'd like, but only one party.\n\n For more detailed info, check out the wiki pages on [Parties](http://habitica.wikia.com/wiki/Party) and [Guilds](http://habitica.wikia.com/wiki/Guilds).",
+ "webFaqAnswer5": "The best way is to invite them to a Party with you by clicking \"Party\" in the navigation bar! Parties can go on quests, battle monsters, and cast skills to support each other. You can also join Guilds together (click on \"Guilds\" in the navigation bar). Guilds are chat rooms focusing on a shared interest or the pursuit of a common goal, and can be public or private. You can join as many Guilds as you'd like, but only one Party. For more detailed info, check out the wiki pages on [Parties](http://habitica.wikia.com/wiki/Party) and [Guilds](http://habitica.wikia.com/wiki/Guilds).",
"faqQuestion6": "Jak získám Mazlíčka nebo Zvíře?",
"iosFaqAnswer6": "Ve 3. úrovni odemkneš systém nálezů. Pokaždé, když splní úkol, naskytne se ti náhodná šance nalézt vejce, líhnoucí lektvar, nebo jídlo. Budou se ti ukládat v Menu > Předměty.\n\nAbys mohl vylíhnout mazlíčka, musíš mít vejce a líhnoucí lektvar. Ťukni na vejce, aby bylo jasné, kterého mazlíčka chceš vylíhnout, a vyber \"Vylíhnout vejce\". Poté si vyber líhnoucí lektvar a tím zvolíš bravu mazlíčka! Jdi do Menu > Mazlíčci a kliknutím můžeš svého mazlíčka přidat ke své postavě.\n\nTaké můžeš z mazlíčků vykrmit Zvířata v Menu > Mazlíčci. Ťukni na mazlíčka a poté vyber \"Nakrmit mazlíčka!\" Budeš ho muset nakrmit několikrát, aby vyrostl ve velké zvíře, ale když zjistíš, které jídlo mu chutná, poroste rychleji. Zkus metodu pokus a omyl, nebo [použij tenhle tahák](http://habitica.wikia.com/wiki/Food#Food_Preferences). Jakmile zvíře vykrmíš, jdi do Menu > Zvířata a ťuknutím si ho tvoje postava osedlá.\n\nTaké můžeš získat vejce z výprav po jejich dokončení. (O výpravách více níže.)",
"androidFaqAnswer6": "At level 3, you will unlock the Drop System. Every time you complete a task, you'll have a random chance at receiving an egg, a hatching potion, or a piece of food. They will be stored in Menu > Items.\n\n To hatch a Pet, you'll need an egg and a hatching potion. Tap on the egg to determine the species you want to hatch, and select \"Hatch with potion.\" Then choose a hatching potion to determine its color! To equip your new Pet, go to Menu > Stable > Pets, select a species, click on the desired Pet, and select \"Use\"(Your avatar doesn't update to reflect the change). \n\n You can also grow your Pets into Mounts by feeding them under Menu > Stable [ > Pets ]. Tap on a Pet, and then select \"Feed\"! You'll have to feed a pet many times before it becomes a Mount, but if you can figure out its favorite food, it will grow more quickly. Use trial and error, or [see the spoilers here](http://habitica.wikia.com/wiki/Food#Food_Preferences). To equip your Mount, go to Menu > Stable > Mounts, select a species, click on the desired Mount, and select \"Use\"(Your avatar doesn't update to reflect the change).\n\n You can also get eggs for Quest Pets by completing certain Quests. (See below to learn more about Quests.)",
diff --git a/website/common/locales/cs/front.json b/website/common/locales/cs/front.json
index d28a249425..1e4cad8faf 100644
--- a/website/common/locales/cs/front.json
+++ b/website/common/locales/cs/front.json
@@ -295,22 +295,22 @@
"heroIdRequired": "\"heroId\" musí být platné UUID.",
"cannotFulfillReq": "Tvůj požadavek nemůže být splněn. Pokud chyba přetrvává, napiš e-mail na admin@habitica.com",
"modelNotFound": "This model does not exist.",
- "signUpWithSocial": "Sign up with <%= social %>",
- "loginWithSocial": "Log in with <%= social %>",
- "confirmPassword": "Confirm Password",
- "usernameLimitations": "Login Name must be 1 to 20 characters long, containing only letters a to z, or numbers 0 to 9, or hyphens, or underscores.",
- "usernamePlaceholder": "e.g., HabitRabbit",
- "emailPlaceholder": "e.g., rabbit@example.com",
- "passwordPlaceholder": "e.g., ******************",
- "confirmPasswordPlaceholder": "Make sure it's the same password!",
- "joinHabitica": "Join Habitica",
- "alreadyHaveAccountLogin": "Already have a Habitica account? Log in.",
- "dontHaveAccountSignup": "Don’t have a Habitica account? Sign up.",
- "motivateYourself": "Motivate yourself to achieve your goals.",
+ "signUpWithSocial": "Zaregistruj se pomocí <%= social %>",
+ "loginWithSocial": "Přihlaš se pomocí <%= social %>",
+ "confirmPassword": "Potvrdit heslo",
+ "usernameLimitations": "Přihlašovací jméno musí být dlouhé 1 až 20 znaků, obsahující pouze písmena od a do z, nebo čísla 0 až 9, nebo pomlčky či podtržítka.",
+ "usernamePlaceholder": "např., HabitKrálík",
+ "emailPlaceholder": "např., kralik@priklad.com",
+ "passwordPlaceholder": "např., ******************",
+ "confirmPasswordPlaceholder": "Ujisti se, že se jedná o stejné heslo!",
+ "joinHabitica": "Vydej se do země Habitica",
+ "alreadyHaveAccountLogin": "Již máš Habitica účet? Přihlaš se.",
+ "dontHaveAccountSignup": "Ještě nemáš Habitica účet? Zaregistruj se.",
+ "motivateYourself": "Motivuj se k dosáhnutí svých cílů.",
"timeToGetThingsDone": "It's time to have fun when you get things done! Join over 2.5 million Habiticans and improve your life one task at a time.",
- "singUpForFree": "Sign Up For Free",
- "or": "OR",
- "gamifyYourLife": "Gamify Your Life",
+ "singUpForFree": "Zaregistruj se zdarma",
+ "or": "NEBO",
+ "gamifyYourLife": "Ať je život hrou",
"aboutHabitica": "Habitica is a free habit-building and productivity app that treats your real life like a game. With in-game rewards and punishments to motivate you and a strong social network to inspire you, Habitica can help you achieve your goals to become healthy, hard-working, and happy.",
"trackYourGoals": "Track Your Habits and Goals",
"trackYourGoalsDesc": "Stay accountable by tracking and managing your Habits, Daily goals, and To-Do list with Habitica’s easy-to-use mobile apps and web interface.",
@@ -325,13 +325,13 @@
"schoolAndWorkDesc": "Whether you're preparing a report for your teacher or your boss, it's easy to keep track of your progress as you tackle your toughest tasks.",
"muchmuchMore": "And much, much more!",
"muchmuchMoreDesc": "Our fully customizable task list means that you can shape Habitica to fit your personal goals. Work on creative projects, emphasize self-care, or pursue a different dream -- it's all up to you.",
- "levelUpAnywhere": "Level Up Anywhere",
- "levelUpAnywhereDesc": "Our mobile apps make it simple to keep track of your tasks on-the-go. Accomplish your goals with a single tap, no matter where you are.",
- "joinMany": "Join over 2,000,000 people having fun while accomplishing their goals!",
- "joinToday": "Join Habitica Today",
- "signup": "Sign Up",
- "getStarted": "Get Started",
- "mobileApps": "Mobile Apps",
- "learnMore": "Learn More",
- "useMobileApps": "Habitica is not optimized for a mobile browser. We recommend downloading our mobile apps."
+ "levelUpAnywhere": "Postupuj na další úroveň kdekoliv",
+ "levelUpAnywhereDesc": "Naše mobilní aplikace ti zjednoduší držet přehled o svých úkolech i na cestách. Dosahuj svých cílů s jednoduchým klepnutím bez ohledu na to, kde jsi.",
+ "joinMany": "Přidej se k 2,000,000 lidí, kteří se již baví při dosahování svých cílů!",
+ "joinToday": "Vydej se do země Habitica ještě dnes",
+ "signup": "Zaregistruj se",
+ "getStarted": "Začni",
+ "mobileApps": "Mobilní aplikace",
+ "learnMore": "Zjisti více",
+ "useMobileApps": "Habitica není optimalizována pro mobilní prohlížeče. Doporučujeme si stáhnout naší mobilní aplikaci."
}
\ No newline at end of file
diff --git a/website/common/locales/cs/gear.json b/website/common/locales/cs/gear.json
index 0f2466027f..d1c26e97bd 100644
--- a/website/common/locales/cs/gear.json
+++ b/website/common/locales/cs/gear.json
@@ -19,7 +19,7 @@
"sortByStr": "SÍL",
"sortByInt": "INT",
"weapon": "zbraň",
- "weaponCapitalized": "Main-Hand Item",
+ "weaponCapitalized": "Předmět v hlavní ruce",
"weaponBase0Text": "Žádná zbraň",
"weaponBase0Notes": "Žádná zbraň",
"weaponWarrior0Text": "Tréninkový meč",
@@ -109,17 +109,17 @@
"weaponSpecialNomadsScimitarText": "Nomádův Scimitar",
"weaponSpecialNomadsScimitarNotes": "Zahnutá čepel tohoto Scimitaru je perfektní pro útočení na Úkoly ze zad jezdeckého zvířete. Zvyšuje inteligenci o <%= int %>.",
"weaponSpecialFencingFoilText": "Šermířský Fleret",
- "weaponSpecialFencingFoilNotes": "Should anyone dare to impugn your honor, you'll be ready with this fine foil! Increases Strength by <%= str %>.",
+ "weaponSpecialFencingFoilNotes": "Ať už tě kdokoliv odváží napadnout tvoji čest, budeš připraven s tímto skvělým fleretem. Zvyšuje sílu o <%= str %>.",
"weaponSpecialTachiText": "Tachi",
- "weaponSpecialTachiNotes": "This light and curved sword will shred your tasks to ribbons! Increases Strength by <%= str %>.",
- "weaponSpecialAetherCrystalsText": "Aether Crystals",
+ "weaponSpecialTachiNotes": "Tento lehký a zakřivený meč rozseká tvé úkoly na cucky! Zvyšuje sílu o <%= str %>.",
+ "weaponSpecialAetherCrystalsText": "Éterový Krystal",
"weaponSpecialAetherCrystalsNotes": "These bracers and crystals once belonged to the Lost Masterclasser herself. Increases all Stats by <%= attrs %>.",
"weaponSpecialYetiText": "Kopí krotitele Yettiho",
"weaponSpecialYetiNotes": "Toto kopí umožňuje svému uživateli velet jakémukoliv Yettimu. Zvyšuje sílu o <%= str %>. Limitovaná edice zimního vybavení 2013-2014!",
"weaponSpecialSkiText": "Lyžovražedná hůl",
"weaponSpecialSkiNotes": "Zbraň schopná ničení hord nepřátel! Také pomáhá svému uživateli dělat pěkně souběžné obraty. Zvyšuje sílu o <%= str %>. Limitovaná edice Zimního vybavení 2013-2014!",
"weaponSpecialCandycaneText": "Cukrátková hůl",
- "weaponSpecialCandycaneNotes": "A powerful mage's staff. Powerfully DELICIOUS, we mean! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2013-2014 Winter Gear.",
+ "weaponSpecialCandycaneNotes": "Mocná kouzelnická hůl. Mocně VYNIKAJÍCÍ, máme na mysli! Zvyšuje inteligenci o <%= int %> a vnímání o <%= per %>. Limitovaná edice 2013-2014 Zimního vybavení.",
"weaponSpecialSnowflakeText": "Vločková hůlka",
"weaponSpecialSnowflakeNotes": "Tato hůlka září nekonečnou léčebnou silou. Zvyšuje Inteligenci o <%= int %>. Limitovaná edice Zimního vybavení 2013-2014!",
"weaponSpecialSpringRogueText": "Hákové drápy",
@@ -195,19 +195,19 @@
"weaponSpecialSpring2016HealerText": "Hůlka jarních květin",
"weaponSpecialSpring2016HealerNotes": "S zamáváním a mrknutím, necháš rozkvést louky a lesy! Nebo trefit nepříjemné myši do hlavy. Přidá <%= int %> bodů k Inteligenci. Limitovaná edice 2016 Jarní výbava.",
"weaponSpecialSummer2016RogueText": "Elektrická tyč",
- "weaponSpecialSummer2016RogueNotes": "Anyone who battles you is in for a shocking surprise... Increases Strength by <%= str %>. Limited Edition 2016 Summer Gear.",
+ "weaponSpecialSummer2016RogueNotes": "Každého, kdo s tebou bude bojovat, čeká šokující překvapení... Zvyšuje sílu o <%= str %>. Limitovaná edice 2016 Letní výbavy.",
"weaponSpecialSummer2016WarriorText": "Zahnutý meč",
- "weaponSpecialSummer2016WarriorNotes": "Bite those tough tasks with this hooked sword! Increases Strength by <%= str %>. Limited Edition 2016 Summer Gear.",
+ "weaponSpecialSummer2016WarriorNotes": "Zakousni se do těch těžkých úkolů s tímto zakřiveným mečem! Zvyšuje sílu o <%= str %>. Limitovaná edice 2016 Letní výbavy.",
"weaponSpecialSummer2016MageText": "Seafoam Staff",
"weaponSpecialSummer2016MageNotes": "All the power of the seas filters through this staff. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2016 Summer Gear.",
- "weaponSpecialSummer2016HealerText": "Healing Trident",
- "weaponSpecialSummer2016HealerNotes": "One spike harms, the other heals. Increases Intelligence by <%= int %>. Limited Edition 2016 Summer Gear.",
- "weaponSpecialFall2016RogueText": "Spiderbite Dagger",
- "weaponSpecialFall2016RogueNotes": "Feel the sting of the spider's bite! Increases Strength by <%= str %>. Limited Edition 2016 Autumn Gear.",
- "weaponSpecialFall2016WarriorText": "Attacking Roots",
- "weaponSpecialFall2016WarriorNotes": "Attack your tasks with these twisting roots! Increases Strength by <%= str %>. Limited Edition 2016 Autumn Gear.",
- "weaponSpecialFall2016MageText": "Ominous Orb",
- "weaponSpecialFall2016MageNotes": "Don't ask this orb to tell your future... Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2016 Autumn Gear.",
+ "weaponSpecialSummer2016HealerText": "Léčivý Trojzubec",
+ "weaponSpecialSummer2016HealerNotes": "Jeden hrot zraňuje, druhý léčí. Zvyšuje Inteligenci o <%= int %>. Limitovaná edice 2015 Letní výbavy.",
+ "weaponSpecialFall2016RogueText": "Dýka Pavoučího kousnutí",
+ "weaponSpecialFall2016RogueNotes": "Pociť bodnutí pavoučího zakousnutí! Zvyšuje Sílu o <%= str %>. Limitovaná edice 2016 Podzimní výbavy.",
+ "weaponSpecialFall2016WarriorText": "Útočící Kořeny",
+ "weaponSpecialFall2016WarriorNotes": "Zaútoč na tvé úkoly s těmito zakroucenými kořeny! Zvyšuje Sílu o <%= str %>. Limitovaná edice 2016 Podzimní výbavy.",
+ "weaponSpecialFall2016MageText": "Zlověstná Koule",
+ "weaponSpecialFall2016MageNotes": "Této koule se na svoji budoucnost raději neptej... Zvyšuje Inteligenci o <%= int %> a Vnímání o <%= per %>. Limitovaná edice 2016 Podzimní výbavy.",
"weaponSpecialFall2016HealerText": "Venomous Serpent",
"weaponSpecialFall2016HealerNotes": "One bite harms, and another bite heals. Increases Intelligence by <%= int %>. Limited Edition 2016 Autumn Gear.",
"weaponSpecialWinter2017RogueText": "Ice Axe",
@@ -612,6 +612,8 @@
"armorMystery201711Notes": "This cozy sweater set will help keep you warm as you ride through the sky! Confers no benefit. November 2017 Subscriber Item.",
"armorMystery201712Text": "Candlemancer Armor",
"armorMystery201712Notes": "The heat and light generated by this magic armor will warm your heart but never burn your skin! Confers no benefit. December 2017 Subscriber Item.",
+ "armorMystery201802Text": "Love Bug Armor",
+ "armorMystery201802Notes": "This shiny armor reflects your strength of heart and infuses it into any Habiticans nearby who may need encouragement! Confers no benefit. February 2018 Subscriber Item.",
"armorMystery301404Text": "Steampunk oblek",
"armorMystery301404Notes": "Elegantní a fešácký, joj! Nepřináší žádný benefit. Předmět pro předplatitele únor 3015.",
"armorMystery301703Text": "Steampunk Peacock Gown",
@@ -984,6 +986,8 @@
"headMystery201710Notes": "This helm makes you look intimidating... but it won't do any favors for your depth perception! Confers no benefit. October 2017 Subscriber Item.",
"headMystery201712Text": "Candlemancer Crown",
"headMystery201712Notes": "This crown will bring light and warmth to even the darkest winter night. Confers no benefit. December 2017 Subscriber Item.",
+ "headMystery201802Text": "Love Bug Helm",
+ "headMystery201802Notes": "The antennae on this helm act as cute dowsing rods, detecting feelings of love and support nearby. Confers no benefit. February 2018 Subscriber Item.",
"headMystery301404Text": "Fešný cylindr",
"headMystery301404Notes": "Fešný cylindr pro ty největší džentlmeny. Předmět pro předplatitele leden 2015. Nepřináší žádný benefit.",
"headMystery301405Text": "Obyčejný cylindr",
@@ -1228,6 +1232,8 @@
"shieldMystery201708Notes": "This rugged shield of molten rock protects you from bad Habits but won't singe your hands. Confers no benefit. August 2017 Subscriber Item.",
"shieldMystery201709Text": "Sorcery Handbook",
"shieldMystery201709Notes": "This book will guide you through your forays into sorcery. Confers no benefit. September 2017 Subscriber Item.",
+ "shieldMystery201802Text": "Love Bug Shield",
+ "shieldMystery201802Notes": "Although it may look like brittle candy, this shield is resistant to even the strongest Shattering Heartbreak attacks! Confers no benefit. February 2018 Subscriber Item.",
"shieldMystery301405Text": "Štít z hodin",
"shieldMystery301405Notes": "Čas je na tvé straně s tímhle štítem z hodin! Nepřináší žádný benefit. Předmět pro předplatitele červen 3015.",
"shieldMystery301704Text": "Fluttery Fan",
@@ -1419,7 +1425,7 @@
"headAccessoryArmoireComicalArrowText": "Komický šíp",
"headAccessoryArmoireComicalArrowNotes": "This whimsical item doesn't provide a Stat boost, but it sure is good for a laugh! Confers no benefit. Enchanted Armoire: Independent Item.",
"eyewear": "Brýle",
- "eyewearCapitalized": "Eyewear",
+ "eyewearCapitalized": "Brýle",
"eyewearBase0Text": "Žádné vybavení pro oči",
"eyewearBase0Notes": "Žádné vybavení pro oči.",
"eyewearSpecialBlackTopFrameText": "černé standardní brýle",
@@ -1436,8 +1442,8 @@
"eyewearSpecialWhiteTopFrameNotes": "Brýle s bílými obroučkami. Nepřináší žádné výhody.",
"eyewearSpecialYellowTopFrameText": "žluté standardní brýle",
"eyewearSpecialYellowTopFrameNotes": "Brýle s žlutými obroučkami. Nepřináší žádné výhody.",
- "eyewearSpecialAetherMaskText": "Aether Mask",
- "eyewearSpecialAetherMaskNotes": "This mask has a mysterious history. Increases Intelligence by <%= int %>.",
+ "eyewearSpecialAetherMaskText": "Éterová Maska",
+ "eyewearSpecialAetherMaskNotes": "Tato maska má tajemnou minulost. Zvyšuje Inteligenci o <%= int %>.",
"eyewearSpecialSummerRogueText": "Ničemné brýle",
"eyewearSpecialSummerRogueNotes": "Člověk nemusí být mořský červ aby poznal, že je stylová! Nepřidává žádný bonus. Limitovaná edice 2014 Letní Výbava.",
"eyewearSpecialSummerWarriorText": "Úžasná páska na oko",
@@ -1452,8 +1458,8 @@
"eyewearMystery201506Notes": "Tento neonový šnorchl umožňuje svému nositeli vidět pod vodou. Nepřináší žádný benefit. Předmět pro předplatitele červen 2015.",
"eyewearMystery201507Text": "Čupr sluneční brýle",
"eyewearMystery201507Notes": "Díky těmto slunečním brýlím budeš cool i v tom největším vedru. Nepřináší žádný benefit. Předmět pro předplatitele červenec 2015.",
- "eyewearMystery201701Text": "Timeless Shades",
- "eyewearMystery201701Notes": "These sunglasses will protect your eyes from harmful rays and will look stylish no matter where you find yourself in time! Confers no benefit. January 2017 Subscriber Item.",
+ "eyewearMystery201701Text": "Nadčasové Sluneční Brýle",
+ "eyewearMystery201701Notes": "Tyto sluneční brýle ochrání tvé oči před škodlivými paprsky a budou vypadat skvěle, ať už se objevíš kdekoliv a kdykoliv! Nepřináší žádný benefit. Leden 2017 - Předmět pro předplatitele.",
"eyewearMystery301404Text": "Brýle na oči",
"eyewearMystery301404Notes": "Nic na oči nemůže být trendovějšího než brýle - možná tedy kromě monoklu. Nepřináší žádný benefit. Předmět pro předplatitele duben 3015.",
"eyewearMystery301405Text": "Monokl",
diff --git a/website/common/locales/cs/generic.json b/website/common/locales/cs/generic.json
index c9468bbcba..18d9524694 100644
--- a/website/common/locales/cs/generic.json
+++ b/website/common/locales/cs/generic.json
@@ -136,6 +136,7 @@
"audioTheme_airuTheme": "Airu's Theme",
"audioTheme_beatscribeNesTheme": "Beatscribe's NES Theme",
"audioTheme_arashiTheme": "Arashi's Theme",
+ "audioTheme_triumphTheme": "Triumph Theme",
"audioTheme_lunasolTheme": "Lunasol Theme",
"audioTheme_spacePenguinTheme": "SpacePenguin's Theme",
"audioTheme_maflTheme": "MAFL Theme",
diff --git a/website/common/locales/cs/groups.json b/website/common/locales/cs/groups.json
index f5235fb2d1..5f60235c9e 100644
--- a/website/common/locales/cs/groups.json
+++ b/website/common/locales/cs/groups.json
@@ -3,8 +3,8 @@
"tavernChat": "Chat v krčmě",
"innCheckOut": "Odhlásit se z hostince",
"innCheckIn": "Odpočívat v hostinci",
- "innText": "You're resting in the Inn! While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day. Be warned: If you are participating in a Boss Quest, the Boss will still damage you for your Party mates' missed Dailies unless they are also in the Inn! Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn.",
- "innTextBroken": "You're resting in the Inn, I guess... While checked-in, your Dailies won't hurt you at the day's end, but they will still refresh every day... If you are participating in a Boss Quest, the Boss will still damage you for your Party mates' missed Dailies... unless they are also in the Inn... Also, your own damage to the Boss (or items collected) will not be applied until you check out of the Inn... so tired...",
+ "innText": "Odpočíváš v Hostinci! Zatímco tu budeš, tvé Denní úkoly ti na konci dne nijak neublíží, ale vždy se resetují. Ale pozor: pokud jsi v boji s příšerou, ublíží ti nesplněné úkoly tvých přátel v družině, pokud také nejsou v Hostinci! Navíc, jakákoliv újma, kterou uštědříš příšeře (nebo nasbírané předměty) se ti nepřipíšou dokud se z Hostince neodhlásíš.",
+ "innTextBroken": "Odpočíváš v Hostinci, asi... Zatímco tu budeš, tvé Denní úkoly ti na konci dne nijak neublíží, ale vždy se resetují... Pokud jsi v boji s příšerou, ublíží ti nesplněné úkoly tvých přátel v družině... Pokud také nejsou v Hostinci... Navíc, jakákoliv újma, kterou uštědříš příšeře (nebo nasbírané předměty) se ti nepřipíšou dokud se z Hostince neodhlásíš... Jsem tak unavený...",
"helpfulLinks": "Pomocné odkazy",
"communityGuidelinesLink": "Zásady komunity",
"lookingForGroup": "Hledá se skupina (družina) příspěvky",
@@ -32,13 +32,13 @@
"communityGuidelines": "zásady komunity",
"communityGuidelinesRead1": "Prosíme, přečti si naše",
"communityGuidelinesRead2": "než začneš chatovat.",
- "bannedWordUsed": "Oops! Looks like this post contains a swearword, religious oath, or reference to an addictive substance or adult topic. Habitica has users from all backgrounds, so we keep our chat very clean. Feel free to edit your message so you can post it!",
+ "bannedWordUsed": "Oops! Vypadá to, že příspěvek obsahuje sprosté slovo, náboženskou přísahu, nebo referenci na návykovou látku či dospělé téma. Habitica má uživatele z různých prostředí a věkových kategorií, takže se snažíme držet náš chat co nejvíce přístupný. Nebojte se tedy upravit svoji zprávu tak, aby jste ji mohli zveřejnit!",
"bannedSlurUsed": "Tvůj příspěvek obsahoval nevhodný jazyk, takže ti byl zrušen přístup na chat.",
"party": "Družina",
"createAParty": "Vytvořit družinu",
"updatedParty": "Nastavení družiny aktualizováno.",
"errorNotInParty": "Nejsi v družině",
- "noPartyText": "You are either not in a Party or your Party is taking a while to load. You can either create one and invite friends, or if you want to join an existing Party, have them enter your Unique User ID below and then come back here to look for the invitation:",
+ "noPartyText": "Nejsi členem družiny, nebo načítání tvé družiny trvá déle než obvykle. Můžeš družinu založit a pozvat do ní přátele, nebo se stát členem již existující družiny, a v tom případě je nech zadat následující Uživatelské ID a poté se sem vrať přijmout pozvánku:",
"LFG": "K prezentování tvé Družiny, nebo abys našel novou, ke které se přidáš, navštiv cech <%= linkStart %>Party Wanted (Looking for Group)<%= linkEnd %>.",
"wantExistingParty": "Chceš se přidat k existující družině? Pak navštiv cech <%= linkStart %>Party Wanted Guild<%= linkEnd %> a zveřejni toto Uživatelské ID:",
"joinExistingParty": "Přidej se k družině někoho jiného",
@@ -48,31 +48,31 @@
"userId": "Uživatelské ID",
"invite": "Pozvat",
"leave": "Odejít",
- "invitedToParty": "You were invited to join the Party <%= party %>",
- "invitedToPrivateGuild": "You were invited to join the private Guild <%= guild %>",
- "invitedToPublicGuild": "You were invited to join the Guild <%= guild %>",
- "partyInvitationsText": "You have <%= numberInvites %> Party invitations! Choose wisely, because you can only be in one Party at a time.",
- "joinPartyConfirmationText": "Are you sure you want to join the Party \"<%= partyName %>\"? You can only be in one Party at a time. If you join, all other Party invitations will be rejected.",
- "invitationAcceptedHeader": "Your Invitation has been Accepted",
- "invitationAcceptedBody": "<%= username %> accepted your invitation to <%= groupName %>!",
+ "invitedToParty": "Byl jsi pozván do družiny <%= party %>",
+ "invitedToPrivateGuild": "Byl jsi pozván do soukromého cechu <%= guild %>",
+ "invitedToPublicGuild": "Byl jsi pozván do cechu <%= guild %>",
+ "partyInvitationsText": "Máš <%= numberInvites %>pozvánek do družiny. Vybírej pečlivě, protože můžeš být pouze v 1 družině najednou.",
+ "joinPartyConfirmationText": "Jsi si jistý, že se chceš přidat do družiny \"<%= partyName %>\"? Můžeš být pouze v jedné družině najednou. Pokud se přidáš, všechny ostatní pozvánky do družiny budou odmítnuty.",
+ "invitationAcceptedHeader": "Tvá pozvánka byla přijata",
+ "invitationAcceptedBody": "<%= username %> přijal tvoji pozvánku do <%= groupName %>!",
"joinNewParty": "Přidej se k nové družině",
"declineInvitation": "Odmítni pozvání",
- "partyLoading1": "Your Party is being summoned. Please wait...",
- "partyLoading2": "Your Party is coming in from battle. Please wait...",
- "partyLoading3": "Your Party is gathering. Please wait...",
- "partyLoading4": "Your Party is materializing. Please wait...",
+ "partyLoading1": "Tvoje družina je povolán. Prosím, čekejte...",
+ "partyLoading2": "Tvoje družina přichází z bitvy. Prosím čekejte...",
+ "partyLoading3": "Tvoje družina se shromažďuje. Prosím, čekej...",
+ "partyLoading4": "Tvoje družina se zhmotňuje. Prosím čekejte...",
"systemMessage": "Systémová zpráva",
- "newMsgGuild": "<%= name %> has new posts",
- "newMsgParty": "Your Party, <%= name %>, has new posts",
+ "newMsgGuild": "<%= name %> má nový příspěvek",
+ "newMsgParty": "Tvá družina, <%= name %>, má nový příspěvek",
"chat": "Chat",
"sendChat": "Poslat zprávu",
"toolTipMsg": "Aktualizovat seznam zpráv",
"sendChatToolTip": "You can send a chat from the keyboard by tabbing to the 'Send Chat' button and pressing Enter or by pressing Control (Command on a Mac) + Enter.",
- "syncPartyAndChat": "Sync Party and Chat",
+ "syncPartyAndChat": "Synchronizovat družinu a chat",
"guildBankPop1": "Banka cechu",
"guildBankPop2": "Drahokamy, které může vůdce cechu použít jako ceny pro výzvy.",
"guildGems": "Drahokamy cechu",
- "group": "Group",
+ "group": "Skupina",
"editGroup": "Upravit družinu",
"newGroupName": "<%= groupType %> jméno",
"groupName": "Jméno družiny",
@@ -82,8 +82,8 @@
"logoUrl": "Adresa loga",
"assignLeader": "Zvolit vůdce družiny",
"members": "Členové",
- "memberList": "Member List",
- "partyList": "Order for Party members in header",
+ "memberList": "Seznam členů",
+ "partyList": "Seřadit členy družiny v hlavičce",
"banTip": "Vykopnout člena",
"moreMembers": "více členů",
"invited": "Pozván",
@@ -96,11 +96,11 @@
"search": "Vyhledávání",
"publicGuilds": "Veřejné cechy",
"createGuild": "Vytvořit cech",
- "createGuild2": "Create",
+ "createGuild2": "Vytvořit",
"guild": "Cech",
"guilds": "Cechy",
"guildsLink": "Spolky",
- "sureKick": "Do you really want to remove this member from the Party/Guild?",
+ "sureKick": "Opravdu chceš tohoto člena odebrat z družiny/cechu?",
"optionalMessage": "Nepovinná zpráva",
"yesRemove": "Ano, odstraň je",
"foreverAlone": "Nemůže se ti líbit tvoje vlastní zpráva. Nebuď takový.",
@@ -202,7 +202,6 @@
"partyOnName": "Velká družina",
"partyUpText": "Joined a Party with another person! Have fun battling monsters and supporting each other.",
"partyOnText": "Joined a Party with at least four people! Enjoy your increased accountability as you unite with your friends to vanquish your foes!",
- "largeGroupNote": "Note: This Guild is now too large to support notifications! Be sure to check back every day to see new messages.",
"groupIdRequired": "„groupId\" musí být platné UUID",
"groupNotFound": "Group not found or you don't have access.",
"groupTypesRequired": "You must supply a valid \"type\" query string.",
@@ -220,11 +219,11 @@
"inviteMissingUuid": "Missing user id in invite",
"inviteMustNotBeEmpty": "Invite must not be empty.",
"partyMustbePrivate": "Družiny musí být soukromé.",
- "userAlreadyInGroup": "Uživatel již je ve skupině.",
+ "userAlreadyInGroup": "UserID: <%= userId %>, User \"<%= username %>\" already in that group.",
"cannotInviteSelfToGroup": "You cannot invite yourself to a group.",
- "userAlreadyInvitedToGroup": "Uživatel byl již pozván do skupiny.",
- "userAlreadyPendingInvitation": "Uživatel přijal pozvánku.",
- "userAlreadyInAParty": "User already in a Party.",
+ "userAlreadyInvitedToGroup": "UserID: <%= userId %>, User \"<%= username %>\" already invited to that group.",
+ "userAlreadyPendingInvitation": "UserID: <%= userId %>, User \"<%= username %>\" already pending invitation.",
+ "userAlreadyInAParty": "UserID: <%= userId %>, User \"<%= username %>\" already in a party.",
"userWithIDNotFound": "Uživatel s id „<%= userId %>\" nenalezen.",
"userHasNoLocalRegistration": "User does not have a local registration (username, email, password).",
"uuidsMustBeAnArray": "User ID invites must be an array.",
@@ -417,11 +416,13 @@
"managerAdded": "Manager added successfully",
"managerRemoved": "Manager removed successfully",
"leaderChanged": "Leader has been changed",
+ "groupNoNotifications": "This Guild does not have notifications due to member size. Be sure to check back often for replies to your messages!",
"whatIsWorldBoss": "What is a World Boss?",
"worldBossDesc": "A World Boss is a special event that brings the Habitica community together to take down a powerful monster with their tasks! All Habitica users are rewarded upon its defeat, even those who have been resting in the Inn or have not used Habitica for the entirety of the quest.",
"worldBossLink": "Read more about the previous World Bosses of Habitica on the Wiki.",
"worldBossBullet1": "Complete tasks to damage the World Boss",
"worldBossBullet2": "The World Boss won’t damage you for missed tasks, but its Rage meter will go up. If the bar fills up, the Boss will attack one of Habitica’s shopkeepers!",
"worldBossBullet3": "You can continue with normal Quest Bosses, damage will apply to both",
- "worldBossBullet4": "Check the Tavern regularly to see World Boss progress and Rage attacks"
+ "worldBossBullet4": "Check the Tavern regularly to see World Boss progress and Rage attacks",
+ "worldBoss": "World Boss"
}
\ No newline at end of file
diff --git a/website/common/locales/cs/limited.json b/website/common/locales/cs/limited.json
index 6df490f0a0..0ed2f46e01 100644
--- a/website/common/locales/cs/limited.json
+++ b/website/common/locales/cs/limited.json
@@ -34,6 +34,7 @@
"seasonalShopFallText": "Happy Fall Festival!! Would you like to buy some rare items? They’ll only be available until October 31st!",
"seasonalShopWinterText": "Happy Winter Wonderland!! Would you like to buy some rare items? They’ll only be available until January 31st!",
"seasonalShopFallTextBroken": "Eh... vítej v Sezonním obchodě... Zrovna tu máme podzimní Sezonní edici zboží nebo tak... Všechno zde je možné zakoupit v průběhu Podzimního estivalu každý rok, ale máme otevřeno pouze do 31. října... asi si nakup teď, nebo budeš muset čekat... a čekat... a čekat *ugh*",
+ "seasonalShopBrokenText": "My pavilion!!!!!!! My decorations!!!! Oh, the Dysheartener's destroyed everything :( Please help defeat it in the Tavern so I can rebuild!",
"seasonalShopRebirth": "If you bought any of this equipment in the past but don't currently own it, you can repurchase it in the Rewards Column. Initially, you'll only be able to purchase the items for your current class (Warrior by default), but fear not, the other class-specific items will become available if you switch to that class.",
"candycaneSet": "Cukrátková hůl (mág)",
"skiSet": "Lyžovrah (zloděj)",
diff --git a/website/common/locales/cs/loadingscreentips.json b/website/common/locales/cs/loadingscreentips.json
index 481b57dc3c..aa5062cb5c 100644
--- a/website/common/locales/cs/loadingscreentips.json
+++ b/website/common/locales/cs/loadingscreentips.json
@@ -1,17 +1,17 @@
{
"tipTitle": "Tip #<%= tipNumber %>",
"tip1": "Kontroluj úkoly na cestách s mobilní aplikací Habitica.",
- "tip2": "Click any equipment to see a preview, or equip it instantly by clicking the star in its upper-left corner!",
+ "tip2": "Klikni na jakékoliv vybavení pro náhled, nebo jej okamžitě vybav kliknutím na hvězdičku v jeho horním levém rohu!",
"tip3": "Používej emoji pro rychlé odlišení svých úkolů.",
"tip4": "Napiš # na začátek názvu úkolu a bude obrovský!",
- "tip5": "It’s best to use skills that cause buffs in the morning so they last longer.",
- "tip6": "Hover over a task and click the dots to access advanced task controls, such as the ability to push tasks to the top/bottom of your list.",
- "tip7": "Some backgrounds connect perfectly if Party members use the same background. Ex: Mountain Lake, Pagodas, and Rolling Hills.",
- "tip8": "Send a Message to someone by clicking their name in chat and then clicking the envelope icon at the top of their profile!",
- "tip9": "Use the filters + search bar in the Inventories, Shops, Guilds, and Challenges to quickly find what you want.",
+ "tip5": "Nejlepší je použít dovednosti, které dočasně zlepšují vlastnosti, hned ráno, aby vydržely déle.",
+ "tip6": "Přejeď ukazatelem přes úkol a klikni na tečky pro přístup k pokročilému nastavení úkolu, jako je například možnost posunout úkoly nahoru/dolu ve tvém seznamu.",
+ "tip7": "Některá pozadí na sebe perfektně navazují, když členové družiny používají stejné pozadí. Např.: Horské jezero, Pagody a Kopce.",
+ "tip8": "Pošli někomu zprávu pomocí kliknutí na jejich jméno v chatu, a poté kliknutím na ikonku obálky nahoře v jejich profilu!",
+ "tip9": "Používej filtry + vyhledávací lištu v inventáři, obchodech, cechách, a ve výzvách, aby jsi rychle našel to, co chceš.",
"tip10": "Soutěžením ve výzvách můžeš vyhrát drahokamy. Nové výzvy jsou přidávány každý den!",
- "tip11": "Having more than four Party members increases accountability!",
- "tip12": "Add checklists to your To-Dos to multiply your rewards!",
+ "tip11": "S více než čtyřmi členy družiny zvyšuješ odpovědnost!",
+ "tip12": "Přidej seznam do tvého úkolníčku, aby jsi znásobil odměnu!",
"tip13": "Click “Filters” on your task page to make an unwieldy task list very manageable!",
"tip14": "Můžeš přidat hlavičku nebo inspirační citát do tvého seznamu jako zvyk bez žádných (+/-).",
"tip15": "Complete all the Masterclasser Quest-lines to learn about Habitica’s secret lore.",
diff --git a/website/common/locales/cs/pets.json b/website/common/locales/cs/pets.json
index 337957cd67..32012fdf65 100644
--- a/website/common/locales/cs/pets.json
+++ b/website/common/locales/cs/pets.json
@@ -27,8 +27,8 @@
"royalPurpleGryphon": "Vznešený fialový gryf",
"phoenix": "Fénix",
"magicalBee": "Magická včela",
- "hopefulHippogriffPet": "Hopeful Hippogriff",
- "hopefulHippogriffMount": "Hopeful Hippogriff",
+ "hopefulHippogriffPet": "Nadějný Gryf",
+ "hopefulHippogriffMount": "Nadějný Gryf",
"royalPurpleJackalope": "Královský Fialový Zajdalen",
"invisibleAether": "Neviditelný Éter",
"rarePetPop1": "Klikni na zlatou packu pro více informací o tom, jak získat toto vzácné zvíře za přispívání programu Habitica!",
diff --git a/website/common/locales/cs/questscontent.json b/website/common/locales/cs/questscontent.json
index 5f96a5460b..9774818e59 100644
--- a/website/common/locales/cs/questscontent.json
+++ b/website/common/locales/cs/questscontent.json
@@ -1,11 +1,11 @@
{
"questEvilSantaText": "Santa - Lovec kožešin",
"questEvilSantaNotes": "Hluboko na ledových pláních slyšíš zoufalý řev. Sleduješ vrčení přerušované chichotáním a dojdeš na mýtinu v lese, kde uvidíš velkou lední medvědici. Spoutaná v kleci bojuje o život. Nahoře na kleci tančí zlomyslný malý skrček ve zbytcích vánočního kostýmu. Poraž Santu, lovce kožešin, a zachraň to zvíře!",
- "questEvilSantaCompletion": "Trapper Santa squeals in anger, and bounces off into the night. The grateful she-bear, through roars and growls, tries to tell you something. You take her back to the stables, where Matt Boch the Beast Master listens to her tale with a gasp of horror. She has a cub! He ran off into the icefields when mama bear was captured.",
+ "questEvilSantaCompletion": "Lovec kožešin Santa kvičí vzteky a odskakuje do noci. Vděčná medvědice se ti skrz řev a vrčení snaží něco říct. Vezmeš jí zpět do stájí, kde zaříkávač Matt Boch vyslechne její příběh lapajíc po dechu hrůzou. Ona má mládě! Uteklo do ledových plání, když mámu medvědici zajali.",
"questEvilSantaBoss": "Santa - Lovec kožešin",
"questEvilSantaDropBearCubPolarMount": "Lední medvěd (zkrocený)",
"questEvilSanta2Text": "Najdi mládě",
- "questEvilSanta2Notes": "When Trapper Santa captured the polar bear mount, her cub ran off into the icefields. You hear twig-snaps and snow crunch through the crystalline sound of the forest. Paw prints! You start racing to follow the trail. Find all the prints and broken twigs, and retrieve the cub!",
+ "questEvilSanta2Notes": "Když Lovec kožešin Santa zajal polární medvědici, její mládě odběhlo do ledových plání. Slyšíš praskání větviček a křupání sněhu skrze krystalický zvuk lesa. Otisky tlapek! Vystřelíš do rychlého běhu následujíc stopu. Najdi všechny otisky a polámané větvičky a dostaň mládě zpět!",
"questEvilSanta2Completion": "Našel jsi mládě! Bude navždy s tebou.",
"questEvilSanta2CollectTracks": "Stopy",
"questEvilSanta2CollectBranches": "Polámané větvičky",
@@ -21,46 +21,46 @@
"questHedgehogCompletion": "Tvá družina ježka úspěšně uklidnila! Po navrácení do své normální velikosti, spěchá rychle ke svým vejcím. Vrací se pištící a dává vám nějaká svá vejce. Doufejme, že těmhle ježkům bude mléko chutnat více!",
"questHedgehogBoss": "Ježobluda",
"questHedgehogDropHedgehogEgg": "Ježek (Vejce)",
- "questHedgehogUnlockText": "Unlocks purchasable Hedgehog eggs in the Market",
+ "questHedgehogUnlockText": "Odemyká vejce ježka na Trhu",
"questGhostStagText": "Duch jara",
"questGhostStagNotes": "Ach, jaro. To roční období, kdy se zas začne příroda vybarvovat. Pryč jsou sněhy a zima. Kde dřív byl led, tam se nyní rostliny probouzí k životu. Zelené listy plní stromy, trávě se vrací její původní živý odstín, duha květin se zvedá na pláních a mystická bílá mlha zakrývá zem! ... Počkat. Mystická mlha? \"Ale ne,\" říká Inventrix s obavami, \"Zdá se, že nějaký přízrak je zdrojem této mlhy. Ou, a míří přímo k tobě.\"",
"questGhostStagCompletion": "Přízrak, na první pohled nezraněn, sklání nos k zemi. Uklidňující hlas obklopí tvou družinu. \"Omlouvám se za své chování. Právě jsem se probudil ze spánku a zdá se, že mi trochu přeskočilo. Prosím, přijměte tato vejce na důkaz mé omluvy.\" Shluk vajec se objeví na trávě před přízrakem. Bez jakéhokoliv dalšího slova přízrak prchá pryč do lesa a květiny za ním opadávají.",
"questGhostStagBoss": "Přízračný jelen",
"questGhostStagDropDeerEgg": "Jelen (Vejce)",
- "questGhostStagUnlockText": "Unlocks purchasable Deer eggs in the Market",
+ "questGhostStagUnlockText": "Odemyká vejce jelena na Trhu",
"questRatText": "Myší král",
"questRatNotes": "Nepořádek! Napříč zemí Habitica se válejí obří hromady nesplněných úkolů. Problém je tak vážný, že se všude objevily hordy myší. Všimneš si, že @Pandah jednu z nich láskyplně hladí. Vysvětlí ti, že myši jsou jemná stvoření živící se nesplněnými úkoly. Skutečným problémem je, že nesplněné úkoly spadly do stoky a vytvořily nebezpečnou jámu, kterou je třeba pročistit. Když se spouštíš do stoky, zaútočí na tebe obří myš s krvavě červenýma očima a děravými žlutými zuby a brání svojí hordu. Schoulíš se strachy, nebo se proslulému králi myší postavíš?",
"questRatCompletion": "Tvůj poslední úder vysává sílu obrovité myši a její oči zešednou. Bestie se rozpadá na mnoho malinkých myší, které se bázlivě rozprchnou. Všimneš si, že za tebou stojí @Pandah a kdysi mocnou příšeru sleduje. Vysvětlí ti, že obyvatelé země Habitica byly tvou odvahou inspirováni a rychle dokončují všechny své nesplněné úkoly. Varuje tě, že musíš být na pozoru, protože když začneme být lhostejní, král myší se může vrátit. Za odměnu ti @Pandah nabízí několik myších vajec. Všimla si tvého znepokojeného výrazu a usmívá se: \"Jsou z nich skvělí mazlíčci.\"",
"questRatBoss": "Myší král",
"questRatDropRatEgg": "Myšák (vejce)",
- "questRatUnlockText": "Unlocks purchasable Rat eggs in the Market",
+ "questRatUnlockText": "Odemyká vejce myšáka na Trhu",
"questOctopusText": "Volání Octothulu",
"questOctopusNotes": "@Urse, vyděšený mladý písař, tě požádal o pomoc při průzkumu záhadné jeskyně na břehu moře. Mezi třpytícími se tůňkami se tkví obrovská brána ze stalaktitů a stalagmitů. Když se k té bráně přibližujete, začne se u ní točit tmavý vodní vír. Užasle zíráte jak se z něj vynořuje sépiovitý drak. \"Ulepený zplozenec hvězd se probudil,\" zaječí @Urse šíleně. \"Po všech těch věcích je velký Octothulu znovu volný a lační po potěšení!\"",
"questOctopusCompletion": "S posledním zásahem, se potvora vytratila do víru, ze kterého vzešla. Nejste si jistý jak se @Urse cítí, zda-li je šťastný, protože jste vyhráli nebo smutný, protože bestie zmizela. Bez jediného slova váš společník ukazuje na tři obrovská slizká vejce v nedalekém přílivovém jezírku, nacházejícím se v hroudě zlatých mincí. „Snad jsou to jen vajíčka nějakých chobotnic\", nervózně podotknete. Když se vracíte domu, @Urse šíleně čmárá do deníku, a vy tušíte, že tohle není naposledy co slyšíte o monstru zvaném „Octothulu\".",
"questOctopusBoss": "Octothulu",
"questOctopusDropOctopusEgg": "Chobotnice (Vejce)",
- "questOctopusUnlockText": "Unlocks purchasable Octopus eggs in the Market",
+ "questOctopusUnlockText": "Odemyká vejce chobotnice na Trhu",
"questHarpyText": "Pomoc! Harpyje!",
"questHarpyNotes": "Chrabrý dobrodruh @UncommonCriminal zmizel v lese, když sledoval stopu okřídleného monstra, které bylo spatřeno před několika dny. Zrovna chcete začít hledat, když ti na ruce přistane zraněný papoušek s ošklivou jizvou přes jeho krásná peříčka. K jeho nožce je připevněn vzkaz, který vysvětluje, že @UncommonCriminal byl zahat zlou harpyjí při obranně papoušků a naléhavě potřebuje vaši pomoc. Budete sledovat papouška, přemůžete Harpyji a zachráníte @UncommonCriminal?",
"questHarpyCompletion": "Poslední zásah harpyji srazí k zemi a všude kolem létá peří. Rychle vylezete do jejího hnízda, kde najdete @UncommonCriminal obklopeného papouščími vejci. Jako tým rychle přenesete vajíčka do nedalekých hnízd. Zjizvený papoušek, který vás našel, hlasitě zapíská a upustí několik vajec do vašich rukou. \"Kvůli útoku harpyje potřebují tato vejce ochranu,\" vysvětluje @UcommonCriminal. \"Zdá se, že jste se stali čestnými papoušky.\"",
"questHarpyBoss": "Harpyje",
"questHarpyDropParrotEgg": "Papoušek (vajíčko)",
- "questHarpyUnlockText": "Unlocks purchasable Parrot eggs in the Market",
+ "questHarpyUnlockText": "Odemyká vejce papouška na Trhu",
"questRoosterText": "Kohoutí řádění",
"questRoosterNotes": "Léta používal farmář @extrajordanary kohouty jako budíček. Ale nyní se objevil obrovský kohout, který kokrhá hlasitěji než kterýkoliv kohout před ním - a budí všechny v zemi Habitica! Habiťané trpící nedostatkem spánkem zápolí se svými denními úkoly. @Pandoro se rozhodne, že nastal čas to kokrhání zastavit. \"Prosím, je tu někdo, kdo dokáže naučit toho kohouta kokrhat tišeji?\" Přihlásíte se dobrovolně a jednoho rána se ke kohoutu přiblížíte - ale on se otočí mávajíce svými obřími křídly, ukazuje své ostré drápy a kokrhá bojový pokřik.",
"questRoosterCompletion": "S finesou a silou jste zkrotili to divoké zvíře. Jeho uši, předtím zacpané peřím a napůl zapomenutými úkoly, jsou nyní úplně čisté. Potichu na vás zakokrhá a nabídne vám zobák k pohlazení. Následující den jste připraveni pokračovat dále v cestě, ale @EmeraldOx k vám běží se zakrytým košíkem. \"Počkejte! Ráno jsem šel do kurníku a našel jsem tato vejce u dveří. Myslím, že ten kohout chce, abyste si je vzali.\" Odkryjete košík a uvidíte jemně zabarvená vejce.",
"questRoosterBoss": "Kohout",
"questRoosterDropRoosterEgg": "Kohout (vejce)",
- "questRoosterUnlockText": "Unlocks purchasable Rooster eggs in the Market",
+ "questRoosterUnlockText": "Odemyká vejce kohouta na Trhu",
"questSpiderText": "Ledový Arachnid",
"questSpiderNotes": "Počasí je stále chladnější a na oknech Habiťanů se objevují ledové pavučinky.... Až na @Arcosine, jehož okna jsou úplně zamrzlá, protože u něj přebývá Mrazivý pavouk. Ajéje.",
"questSpiderCompletion": "Ledový pavouk padá na zem a zanechává za sebou malou kupičku ledu a několik kouzelných váčků s vajíčky. @Arcosine vám je až skoro moc rychle nabídne jako odměnu -- možná byste z nich mohli vychovat hodné pavoučí mazlíčky?",
"questSpiderBoss": "Pavouk",
"questSpiderDropSpiderEgg": "Pavouk (vejce)",
- "questSpiderUnlockText": "Unlocks purchasable Spider eggs in the Market",
- "questGroupVice": "Vice the Shadow Wyrm",
+ "questSpiderUnlockText": "Odemyká vejce pavouka na Trhu",
+ "questGroupVice": "Zlořád, Stínový Drak",
"questVice1Text": "Zlořád, část 1: Osvoboď se od vlivu draka",
- "questVice1Notes": "
They say there lies a terrible evil in the caverns of Mt. Habitica. A monster whose presence twists the wills of the strong heroes of the land, turning them towards bad habits and laziness! The beast is a grand dragon of immense power and comprised of the shadows themselves: Vice, the treacherous Shadow Wyrm. Brave Habiteers, stand up and defeat this foul beast once and for all, but only if you believe you can stand against its immense power.
How can you expect to fight the beast if it already has control over you? Don't fall victim to laziness and vice! Work hard to fight against the dragon's dark influence and dispel his hold on you!
", + "questVice1Notes": "Říká se, že v jeskyních hory Habitica leží zlo. Stvůra, jejíž přítomnost svádí silné hrdiny země k lenosti a špatným zvykům! Tou stvůrou je obrovský ze stínů zrozený drak nepředstavitelné síly: Zlořád, zrádný Stínový Drak. Chrabří Habiťané, postavte se mu a zdolejte tuto příšernou stvůru jednou provždy. Ale pouze pokud věříte, že se dokážete postavit jeho nezměrné síle.
Jak chceš bojovat se stvůrou, když už nad tebou má moc? Nepodlehni lenosti a zlozvykům! Tvrdě pracuj, abys mohl odolat drakovu temnému vlivu a přemohl jeho vliv na tebe!
", "questVice1Boss": "Zlořádův stín", "questVice1DropVice2Quest": "Zlořád část 2 (svitek)", "questVice2Text": "Zlořád, část 2: Najdi drakovo doupě", @@ -69,22 +69,22 @@ "questVice2DropVice3Quest": "Zlořád část 3. (svitek)", "questVice3Text": "Zlořád, část 3: Zlořád se probouzí", "questVice3Notes": "Po dlouhém snažení objevila tvá družina Zlořádovo doupě. Mohutná stvůra se zadívá na tvou družinu s nelibostí. Kolem vás se točí stíny a v hlavě slyšíte hlas \"Více bláznivých obyvatel země Habitica mě přišlo zastavit? Roztomilé. Přišel by sem jen blázen.\" Šupinatý titán stáhne hlavu zpět a připaví se k útoku. Tohle je vaše šance! Dejte mu vše, co ve vás je a přemožte ho jednou pro vždy!", - "questVice3Completion": "The shadows dissipate from the cavern and a steely silence falls. My word, you've done it! You have defeated Vice! You and your party may finally breathe a sigh of relief. Enjoy your victory, brave Habiteers, but take the lessons you've learned from battling Vice and move forward. There are still Habits to be done and potentially worse evils to conquer!", + "questVice3Completion": "Stíny se rozptýlí z jeskyně a padne železné ticho. Páni, dokázali jste to! Porazili jste Zlořáda! Ty a tvá družina si můžete konečně vydechnout. Užijte si své vítězství, chrabří Habiťané, ale vezměte si k srdci lekce, které jste dostali v boji se Zlořádem a jděte dál. Stále tu jsou zvyky, které musí být splněny a potenciálně horší zla ke zdolání!", "questVice3Boss": "Zlořád, stínový drak", "questVice3DropWeaponSpecial2": "Dračí hůl Stephena Webera", "questVice3DropDragonEgg": "Drak (vejce)", "questVice3DropShadeHatchingPotion": "Stínový líhnoucí lektvar", - "questGroupMoonstone": "Recidivate Rising", - "questMoonstone1Text": "Recidivate, Part 1: The Moonstone Chain", - "questMoonstone1Notes": "A terrible affliction has struck Habiticans. Bad Habits thought long-dead are rising back up with a vengeance. Dishes lie unwashed, textbooks linger unread, and procrastination runs rampant!Oh no, a World Boss is attacking Habitica! Head to the Tavern to see it now. If you're on mobile, make sure that you have the latest versions downloaded to get the full experience!
- -~*~
-The sun is rising on Valentine's Day when a shocking crash splinters the air. A blaze of sickly pink light lances through all the buildings, and bricks crumble as a deep crack rips through Habit City's main street. An unearthly shrieking rises through the air, shattering windows as a hulking form slithers forth from the oozing earth.
-Mandibles snap and a carapace glitters; legs upon legs unfurl in the air. The crowd begins to scream as the insectoid creature rears up, revealing itself to be none other than that cruelest of creatures: the fearsome Dysheartener itself. It howls in anticipation and lunges forward, hungering to gnaw on the hopes of hard-working Habiticans. With each rasping scrape of its spiny forelegs, you feel a vise of despair tightening in your chest.
-"Take heart, everyone!" Lemoness shouts. "It probably thinks that we're easy targets because so many of us have daunting New Year's Resolutions, but it's about to discover that Habiticans know how to stick to their goals!"
-AnnDeLune raises her staff. "Let's tackle our tasks and take this monster down!"
-~*~
-Complete Habits, Dailies and To-Dos to damage the World Boss! Incomplete Dailies fill the Rage Strike Bar. When the Rage Strike bar is full, the World Boss will attack one of Habitica's shopkeepers. A World Boss will never damage individual players or accounts in any way. Only active accounts who are not resting in the Inn will have their incomplete Dailies tallied.
-*If you’d prefer not to see the World Boss due to a phobia, check out the Phobia Protection Extension (and set it to hide “Beetles”) :)
-The February Subscriber Items have been revealed: The Love Bug Set!! It's a special three-piece set in honor of our ongoing battle with the Dysheartener. You only have until February 28 to receive the item set when you subscribe. If you're already an active subscriber, reload the site and then head to Inventory > Items to claim your gear!
+Subscribers also receive the ability to buy Gems for Gold -- the longer you subscribe, the more Gems you can buy per month! There are other perks as well, such as longer access to uncompressed data and a cute Jackalope pet. Best of all, subscriptions let us keep Habitica running. Thank you very much for your support -- it means a lot to us.
+ +There's a new Behind the Scenes post on the Habitica blog! Ever wonder what goes into bringing a World Boss to Habitica? Check out this post for a behind the scenes glimpse of how the team makes these events happen. It's all fun and no spoilers (we promise)!
+