2023 November Content Prebuild (#14954)

* feat(content): October sub items

* feat(content): October bgs and armoire

* feat(content): add Dune Buddy achievement

* feat(releases): timed Backgrounds and Armoire

* feat(content): timed release achievement

* feat(content): November subscriber items

* feat(content): November pet quest bundle

* feat(content): November magic hatching potions

* feat(content): November backgrounds and armoire

* feat(content): new achievement code -- needs work

* update package.lock on local/origin repos

* fix(content): added October headgear info and November set name

* fix(typo): spelling is important

* feat(content): added logic to allow for pets & mounts to be in one achievement and fixed issues with image

* fix(armoire): correct month

* fix(armoire): deprecate armoireEmpty flag

---------

Co-authored-by: SabreCat <sabe@habitica.com>
Co-authored-by: Sabe Jones <sabrecat@gmail.com>
This commit is contained in:
Natalie 2023-11-07 09:55:50 -05:00 committed by GitHub
parent 1892d6288a
commit a80ef78be0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
24 changed files with 354 additions and 143 deletions

View file

@ -0,0 +1,124 @@
/* eslint-disable no-console */
const MIGRATION_NAME = '20231114_pet_group_achievements';
import { model as User } from '../../../website/server/models/user';
const progressCount = 1000;
let count = 0;
async function updateUser (user) {
count++;
let set = {
migration: MIGRATION_NAME,
};
if (user && user.items && user.items.pets) {
const pets = user.items.pets;
if (pets['Cactus-Zombie'] > 0
&& pets['Cactus-Skeleton'] > 0
&& pets['Cactus-Base'] > 0
&& pets['Cactus-Desert'] > 0
&& pets['Cactus-Red'] > 0
&& pets['Cactus-Shade'] > 0
&& pets['Cactus-White']> 0
&& pets['Cactus-Golden'] > 0
&& pets['Cactus-CottonCandyBlue'] > 0
&& pets['Cactus-CottonCandyPink'] > 0
&& pets['Hedgehog-Zombie'] > 0
&& pets['Hedgehog-Skeleton'] > 0
&& pets['Hedgehog-Base'] > 0
&& pets['Hedgehog-Desert'] > 0
&& pets['Hedgehog-Red'] > 0
&& pets['Hedgehog-Shade'] > 0
&& pets['Hedgehog-White'] > 0
&& pets['Hedgehog-Golder'] > 0
&& pets['Hedgehog-CottonCandyBlue'] > 0
&& pets['Hedgehog-CottonCandyPink'] > 0
&& pets['Rock-Zombie'] > 0
&& pets['Rock-Skeleton'] > 0
&& pets['Rock-Base'] > 0
&& pets['Rock-Desert'] > 0
&& pets['Rock-Red'] > 0
&& pets['Rock-Shade'] > 0
&& pets['Rock-White'] > 0
&& pets['Rock-Golden'] > 0
&& pets['Rock-CottonCandyBlue'] > 0
&& pets['Rock-CottonCandyPink'] > 0 ) {
set['achievements.roughRider'] = true;
}
}
if (user && user.items && user.items.mounts) {
const mounts = user.items.mounts;
if (mounts['Cactus-Zombie']
&& mounts['Cactus-Skeleton']
&& mounts['Cactus-Base']
&& mounts['Cactus-Desert']
&& mounts['Cactus-Red']
&& mounts['Cactus-Shade']
&& mounts['Cactus-White']
&& mounts['Cactus-Golden']
&& mounts['Cactus-CottonCandyPink']
&& mounts['Cactus-CottonCandyBlue']
&& mounts['Hedgehog-Zombie']
&& mounts['Hedgehog-Skeleton']
&& mounts['Hedgehog-Base']
&& mounts['Hedgehog-Desert']
&& mounts['Hedgehog-Red']
&& mounts['Hedgehog-Shade']
&& mounts['Hedgehog-White']
&& mounts['Hedgehog-Golden']
&& mounts['Hedgehog-CottonCandyPink']
&& mounts['Hedgehog-CottonCandyBlue']
&& mounts['Rock-Zombie']
&& mounts['Rock-Skeleton']
&& mounts['Rock-Base']
&& mounts['Rock-Desert']
&& mounts['Rock-Red']
&& mounts['Rock-Shade']
&& mounts['Rock-White']
&& mounts['Rock-Golden']
&& mounts['Rock-CottonCandyPink']
&& mounts['Rock-CottonCandyBlue'] ) {
set['achievements.roughRider'] = true;
}
}
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
return await User.update({ _id: user._id }, { $set: set }).exec();
}
module.exports = async function processUsers () {
let query = {
migration: { $ne: MIGRATION_NAME },
'auth.timestamps.loggedin': { $gt: new Date('2023-02-01') },
};
const fields = {
_id: 1,
items: 1,
};
while (true) { // eslint-disable-line no-constant-condition
const users = await User // eslint-disable-line no-await-in-loop
.find(query)
.limit(250)
.sort({_id: 1})
.select(fields)
.lean()
.exec();
if (users.length === 0) {
console.warn('All appropriate users found and modified.');
console.warn(`\n${count} users processed\n`);
break;
} else {
query._id = {
$gt: users[users.length - 1]._id,
};
}
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
}
};

92
package-lock.json generated
View file

@ -3323,7 +3323,7 @@
"array-flatten": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz",
"integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg=="
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI="
},
"array-includes": {
"version": "3.1.1",
@ -4005,7 +4005,7 @@
"bin-pack": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/bin-pack/-/bin-pack-1.0.2.tgz",
"integrity": "sha512-aOk0SxEon5LF9cMxQFViSKb4qccG6rs7XKyMXIb1J8f8LA2acTIWnHdT0IOTe4gYBbqgjdbuTZ5f+UP+vlh4Mw=="
"integrity": "sha1-wqAU7b8L7XCjKSBi7UZXe5YSBnk="
},
"bin-version": {
"version": "3.1.0",
@ -4789,7 +4789,7 @@
"co": {
"version": "4.6.0",
"resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz",
"integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==",
"integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=",
"dev": true
},
"coa": {
@ -5053,7 +5053,7 @@
"contentstream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/contentstream/-/contentstream-1.0.0.tgz",
"integrity": "sha512-jqWbfFZFG9tZbdej7+TzXI4kanABh3BLtTWY6NxqTK5zo6iTIeo5aq4iRVfYsLQ0y8ccQqmJR/J4NeMmEdnR2w==",
"integrity": "sha1-C9z6RtowRkqGzo+n7OVlQQ3G+aU=",
"requires": {
"readable-stream": "~1.0.33-1"
},
@ -5061,7 +5061,7 @@
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.0.34",
@ -5132,7 +5132,7 @@
"cookie-signature": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz",
"integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ=="
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw="
},
"cookiejar": {
"version": "2.1.4",
@ -5368,7 +5368,7 @@
"cwise-compiler": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/cwise-compiler/-/cwise-compiler-1.1.3.tgz",
"integrity": "sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==",
"integrity": "sha1-9NZnQQ6FDToxOn0tt7HlBbsDTMU=",
"requires": {
"uniq": "^1.0.0"
}
@ -5393,7 +5393,7 @@
"data-uri-to-buffer": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz",
"integrity": "sha512-Cp+jOa8QJef5nXS5hU7M1DWzXPEIoVR3kbV0dQuVGwROZg8bGf1DcCnkmajBTnvghTtSNMUdRrPjgaT6ZQucbw=="
"integrity": "sha1-GK6XmmoMqZSwYlhTkW0mYruuCxo="
},
"debug": {
"version": "4.1.1",
@ -5989,7 +5989,7 @@
"encodeurl": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
"integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w=="
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k="
},
"end-of-stream": {
"version": "1.4.4",
@ -6011,7 +6011,7 @@
"ent": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz",
"integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA=="
"integrity": "sha1-6WQhkyWiHQX0RGai9obtbOX13R0="
},
"entities": {
"version": "2.0.3",
@ -6161,7 +6161,7 @@
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow=="
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg="
},
"escape-string-regexp": {
"version": "1.0.5",
@ -6536,7 +6536,7 @@
"etag": {
"version": "1.8.1",
"resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
"integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg=="
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc="
},
"event-stream": {
"version": "3.3.4",
@ -7253,7 +7253,7 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
},
"on-finished": {
"version": "2.4.1",
@ -7318,7 +7318,7 @@
"first-chunk-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/first-chunk-stream/-/first-chunk-stream-1.0.0.tgz",
"integrity": "sha512-ArRi5axuv66gEsyl3UuK80CzW7t56hem73YGNYxNWTGNKFJUadSb9Gu9SHijYEUi8ulQMf1bJomYNwSCPHhtTQ=="
"integrity": "sha1-Wb+1DNkF9g18OUzT2ayqtOatk04="
},
"flagged-respawn": {
"version": "1.0.1",
@ -7473,7 +7473,7 @@
"fresh": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
"integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q=="
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac="
},
"from": {
"version": "0.1.7",
@ -7769,7 +7769,7 @@
"gif-encoder": {
"version": "0.4.3",
"resolved": "https://registry.npmjs.org/gif-encoder/-/gif-encoder-0.4.3.tgz",
"integrity": "sha512-HMfSa+EIng62NbDhM63QGYoc49/m8DcZ9hhBtw+CXX9mKboSpeFVxjZ2WEWaMFZ14MUjfACK7jsrxrJffIVrCg==",
"integrity": "sha1-iitP6MqJWkjjoLbLs0CgpqNXGJk=",
"requires": {
"readable-stream": "~1.1.9"
},
@ -7777,7 +7777,7 @@
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ=="
"integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8="
},
"readable-stream": {
"version": "1.1.14",
@ -7855,7 +7855,7 @@
"github-from-package": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz",
"integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==",
"integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=",
"dev": true
},
"glob": {
@ -8635,7 +8635,7 @@
"handlebars-layouts": {
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/handlebars-layouts/-/handlebars-layouts-3.1.4.tgz",
"integrity": "sha512-2llBmvnj8ueOfxNHdRzJOcgalzZjYVd9+WAl93kPYmlX4WGx7FTHTzNxhK+i9YKY2OSjzfehgpLiIwP/OJr6tw=="
"integrity": "sha1-JrO+uTG0uHffv35v6vQFjuYiiwI="
},
"har-schema": {
"version": "2.0.0",
@ -8872,7 +8872,7 @@
"ignore-by-default": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz",
"integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk="
"integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA=="
},
"image-size": {
"version": "1.0.2",
@ -9224,7 +9224,7 @@
"iota-array": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
"integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA=="
"integrity": "sha1-ge9X/l0FgUzVjCSDYyqZwwoOgIc="
},
"ipaddr.js": {
"version": "1.9.1",
@ -9564,7 +9564,7 @@
"async": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz",
"integrity": "sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w==",
"integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=",
"dev": true
},
"nopt": {
@ -10047,7 +10047,7 @@
"layout": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/layout/-/layout-2.2.0.tgz",
"integrity": "sha512-+kdgg25XW11BA4cl9vF+SH01HaBipld2Nf/PlU2kSYncAbdUbDoahzrlh6yhR93N/wR2TGgcFoxebzR1LKmZUg==",
"integrity": "sha1-MeRL/BjdEBmz/7II5AKku/4uavQ=",
"requires": {
"bin-pack": "~1.0.1"
}
@ -10197,7 +10197,7 @@
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
"dev": true
},
"lodash.includes": {
@ -10347,7 +10347,7 @@
"lru-cache": {
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.0.2.tgz",
"integrity": "sha512-uQw9OqphAGiZhkuPlpFGmdTU2tEuhxTourM/19qGJrxBPHAr/f8BT1a0i/lOclESnGatdJG/UCkP9kZB/Lh1iw==",
"integrity": "sha1-HRdnnAac2l0ECZGgnbwsDbN35V4=",
"requires": {
"pseudomap": "^1.0.1",
"yallist": "^2.0.0"
@ -10356,7 +10356,7 @@
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
}
}
},
@ -10606,7 +10606,7 @@
"merge-descriptors": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
"integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w=="
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E="
},
"merge-stream": {
"version": "2.0.0",
@ -10932,7 +10932,7 @@
"module-details-from-path": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz",
"integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A=="
"integrity": "sha1-EUyUlnPiqKNenTV4hSeqN7Z52is="
},
"moment": {
"version": "2.29.4",
@ -11449,7 +11449,7 @@
"ndarray-ops": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/ndarray-ops/-/ndarray-ops-1.2.2.tgz",
"integrity": "sha512-BppWAFRjMYF7N/r6Ie51q6D4fs0iiGmeXIACKY66fLpnwIui3Wc3CXiD/30mgLbDjPpSLrsqcp3Z62+IcHZsDw==",
"integrity": "sha1-WeiNLDKn7ryxvGkPrhQVeVV6YU4=",
"requires": {
"cwise-compiler": "^1.0.0"
}
@ -11457,7 +11457,7 @@
"ndarray-pack": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/ndarray-pack/-/ndarray-pack-1.2.1.tgz",
"integrity": "sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==",
"integrity": "sha1-jK6+qqJNXs9w/4YCBjeXfajuWFo=",
"requires": {
"cwise-compiler": "^1.1.2",
"ndarray": "^1.0.13"
@ -11539,7 +11539,7 @@
"node-bitmap": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/node-bitmap/-/node-bitmap-0.0.1.tgz",
"integrity": "sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA=="
"integrity": "sha1-GA6scAPgxwdhjvMTaPYvhLKmkJE="
},
"node-fetch": {
"version": "2.6.7",
@ -11644,13 +11644,13 @@
"noop-logger": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
"integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==",
"integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=",
"dev": true
},
"nopt": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz",
"integrity": "sha1-bd0hvSoxQXuScn3Vhfim83YI6+4=",
"integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==",
"requires": {
"abbrev": "1"
}
@ -11745,7 +11745,7 @@
"obj-extend": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/obj-extend/-/obj-extend-0.1.0.tgz",
"integrity": "sha512-or9c7Ue2wWCun41DuLP3+LKEUjSZcDSxfCM4HZQSX9tcjLL/yuzTW7MmtVNs+MmN16uDRpDrFmFK/WVSm4vklg=="
"integrity": "sha1-u0SKR3X7les0p4H5CLusLfI9u1s="
},
"object-assign": {
"version": "4.1.1",
@ -12089,7 +12089,7 @@
"parse-data-uri": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/parse-data-uri/-/parse-data-uri-0.2.0.tgz",
"integrity": "sha512-uOtts8NqDcaCt1rIsO3VFDRsAfgE4c6osG4d9z3l4dCBlxYFzni6Di/oNU270SDrjkfZuUvLZx1rxMyqh46Y9w==",
"integrity": "sha1-vwTYUd1ch7CrI45dAazklLYEtMk=",
"requires": {
"data-uri-to-buffer": "0.0.3"
}
@ -12223,7 +12223,7 @@
"path-to-regexp": {
"version": "0.1.7",
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ=="
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"path-type": {
"version": "2.0.0",
@ -12397,7 +12397,7 @@
"pngjs-nozlib": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/pngjs-nozlib/-/pngjs-nozlib-1.0.0.tgz",
"integrity": "sha512-N1PggqLp9xDqwAoKvGohmZ3m4/N9xpY0nDZivFqQLcpLHmliHnCp9BuNCsOeqHWMuEEgFjpEaq9dZq6RZyy0fA=="
"integrity": "sha1-nmTWAs/pzOTZ1Zl9BodCmnPwt9c="
},
"posix-character-classes": {
"version": "0.1.1",
@ -13110,7 +13110,7 @@
"resolve-from": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-2.0.0.tgz",
"integrity": "sha512-qpFcKaXsq8+oRoLilkwyc7zHGF5i9Q2/25NIgLQQ/+VVv9rU4qvr6nXVAw1DsnXJyQkZsR4Ytfbtg5ehfcUssQ==",
"integrity": "sha1-lICrIOlP+h2egKgEx+oUdhGWa1c=",
"dev": true
}
}
@ -13440,7 +13440,7 @@
"ms": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
"integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
}
}
},
@ -13982,7 +13982,7 @@
"concat-stream": {
"version": "1.5.2",
"resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz",
"integrity": "sha512-H6xsIBfQ94aESBG8jGHXQ7i5AEpy5ZeVaLDOisDICiTCKpqEfr34/KmTrspKQNoLKNu9gTkovlpQcUi630AKiQ==",
"integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=",
"requires": {
"inherits": "~2.0.1",
"readable-stream": "~2.0.0",
@ -13992,7 +13992,7 @@
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"integrity": "sha512-yN0WQmuCX63LP/TMvAg31nvT6m4vDqJEiiv2CAZqWOGNWutc9DfDk1NPYYmKUFmaVM2UwDowH4u5AHWYP/jxKw=="
"integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M="
},
"readable-stream": {
"version": "2.0.6",
@ -14328,7 +14328,7 @@
"stubs": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/stubs/-/stubs-3.0.0.tgz",
"integrity": "sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw=="
"integrity": "sha1-6NK6H6nJBXAwPAMLaQD31fiavls="
},
"style-loader": {
"version": "3.3.1",
@ -14853,7 +14853,7 @@
"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="
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog=="
},
"to-object-path": {
"version": "0.3.0",
@ -15319,7 +15319,7 @@
"punycode": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
"integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw=="
"integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0="
}
}
},
@ -15519,12 +15519,12 @@
"clone": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
"integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="
"integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
},
"clone-stats": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
"integrity": "sha512-dhUqc57gSMCo6TX85FLfe51eC/s+Im2MLkAgJwfaRRexR2tA4dd3eLEW4L6efzHc2iNorrRRXITifnDLlRrhaA=="
"integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE="
},
"replace-ext": {
"version": "0.0.1",

View file

@ -4928,17 +4928,17 @@
"tr46": {
"version": "0.0.3",
"resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
"integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="
"integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
},
"webidl-conversions": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
"integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="
"integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
},
"whatwg-url": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
"integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==",
"integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
"requires": {
"tr46": "~0.0.3",
"webidl-conversions": "^3.0.0"
@ -14016,7 +14016,7 @@
"app-root-dir": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/app-root-dir/-/app-root-dir-1.0.2.tgz",
"integrity": "sha512-jlpIfsOoNoafl92Sz//64uQHGSyMrD2vYG5d8o2a4qGvyNCvXur7bzIsWtAC/6flI2RYAp3kv8rsfBtaLm7w0g=="
"integrity": "sha1-OBh+wt6nV3//Az/8sSFyaS/24Rg="
},
"aproba": {
"version": "1.2.0",
@ -15726,7 +15726,7 @@
"brorand": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz",
"integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w=="
"integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8="
},
"browser-process-hrtime": {
"version": "1.0.0",
@ -15879,12 +15879,12 @@
"buffer-xor": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz",
"integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ=="
"integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk="
},
"builtin-status-codes": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz",
"integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ=="
"integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug="
},
"cacache": {
"version": "12.0.3",
@ -16167,7 +16167,7 @@
"character-parser": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/character-parser/-/character-parser-2.2.0.tgz",
"integrity": "sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==",
"integrity": "sha1-x84o821LzZdE5f/CxfzeHHMmH8A=",
"requires": {
"is-regex": "^1.0.3"
}
@ -16185,7 +16185,7 @@
"check-error": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz",
"integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA=="
"integrity": "sha1-V00xLt2Iu13YkS6Sht1sCu1KrII="
},
"check-types": {
"version": "8.0.3",
@ -16743,7 +16743,7 @@
"console-control-strings": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz",
"integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ=="
"integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4="
},
"consolidate": {
"version": "0.15.1",
@ -16765,7 +16765,7 @@
"constants-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz",
"integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ=="
"integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U="
},
"contains-path": {
"version": "0.1.0",
@ -17348,7 +17348,7 @@
"de-indent": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz",
"integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg=="
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0="
},
"debug": {
"version": "4.1.1",
@ -17634,7 +17634,7 @@
"delegates": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
"integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o="
},
"depd": {
"version": "1.1.2",
@ -17838,7 +17838,7 @@
"doctypes": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/doctypes/-/doctypes-1.1.0.tgz",
"integrity": "sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ=="
"integrity": "sha1-6oCxBqh1OHdOijpKWv4pPeSJ4Kk="
},
"dom-converter": {
"version": "0.2.0",
@ -19721,7 +19721,7 @@
"get-func-name": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz",
"integrity": "sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig=="
"integrity": "sha1-6td0q+5y4gQJQzoGY2YCPdaIekE="
},
"get-intrinsic": {
"version": "1.0.2",
@ -20011,7 +20011,7 @@
"has-glob": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/has-glob/-/has-glob-1.0.0.tgz",
"integrity": "sha512-D+8A457fBShSEI3tFCj65PAbT++5sKiFtdCdOam0gnfBgw9D277OERk+HM9qYJXmdVLZ/znez10SqHN0BBQ50g==",
"integrity": "sha1-mqqe7b/7G6OZCnsAEPtnjuAIEgc=",
"requires": {
"is-glob": "^3.0.0"
},
@ -20019,7 +20019,7 @@
"is-glob": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
"integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==",
"integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
"requires": {
"is-extglob": "^2.1.0"
}
@ -20074,7 +20074,7 @@
"has-unicode": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz",
"integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ=="
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
},
"has-value": {
"version": "1.0.0",
@ -20262,7 +20262,7 @@
"hmac-drbg": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz",
"integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==",
"integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=",
"requires": {
"hash.js": "^1.0.3",
"minimalistic-assert": "^1.0.0",
@ -20568,7 +20568,7 @@
"https-browserify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz",
"integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg=="
"integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM="
},
"https-proxy-agent": {
"version": "5.0.1",
@ -21423,7 +21423,7 @@
"is-window": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-window/-/is-window-1.0.2.tgz",
"integrity": "sha512-uj00kdXyZb9t9RcAUAwMZAnkBUwdYGhYlt7djMXhfyhUCzwNba50tIiBKR7q0l7tdoBtFVw/3JmLY6fI3rmZmg=="
"integrity": "sha1-LIlspT25feRdPDMTOmXYyfVjSA0="
},
"is-windows": {
"version": "1.0.2",
@ -21581,12 +21581,12 @@
"js-string-escape": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz",
"integrity": "sha512-Smw4xcfIQ5LVjAOuJCvN/zIodzA/BBSsluuoSykP+lUvScIi4U6RJLfwHet5cxFnCswUjISV8oAXaqaJDY3chg=="
"integrity": "sha1-4mJbrbwNZ8dTPp7cEGjFh65BN+8="
},
"js-stringify": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/js-stringify/-/js-stringify-1.0.2.tgz",
"integrity": "sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g=="
"integrity": "sha1-Fzb939lyTyijaCrcYjCufk6Weds="
},
"js-tokens": {
"version": "4.0.0",
@ -22050,7 +22050,7 @@
"jsdom-global": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/jsdom-global/-/jsdom-global-3.0.2.tgz",
"integrity": "sha512-t1KMcBkz/pT5JrvcJbpUR2u/w1kO9jXctaaGJ0vZDzwFnIvGWw9IDSRciT83kIs8Bnw4qpOl8bQK08V01YgMPg=="
"integrity": "sha1-a9KZwTsMRiay2iwDk81DhdYGrLk="
},
"jsesc": {
"version": "2.5.2",
@ -22122,7 +22122,7 @@
"jstransformer": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/jstransformer/-/jstransformer-1.0.0.tgz",
"integrity": "sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==",
"integrity": "sha1-7Yvwkh4vPx7U1cGkT2hwntJHIsM=",
"requires": {
"is-promise": "^2.0.0",
"promise": "^7.0.1"
@ -22242,7 +22242,7 @@
"find-cache-dir": {
"version": "0.1.1",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-0.1.1.tgz",
"integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==",
"integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=",
"requires": {
"commondir": "^1.0.1",
"mkdirp": "^0.5.1",
@ -22252,7 +22252,7 @@
"find-up": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
"integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==",
"integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
"requires": {
"path-exists": "^2.0.0",
"pinkie-promise": "^2.0.0"
@ -22261,7 +22261,7 @@
"path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
"integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==",
"integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
"requires": {
"pinkie-promise": "^2.0.0"
}
@ -22269,7 +22269,7 @@
"pkg-dir": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-1.0.0.tgz",
"integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==",
"integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=",
"requires": {
"find-up": "^1.0.0"
}
@ -22328,7 +22328,7 @@
"lodash.kebabcase": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz",
"integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g=="
"integrity": "sha1-hImxyw0p/4gZXM7KRI/21swpXDY="
},
"lodash.mapvalues": {
"version": "4.6.0",
@ -22860,7 +22860,7 @@
"minimalistic-crypto-utils": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz",
"integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg=="
"integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo="
},
"minimatch": {
"version": "3.0.4",
@ -23820,7 +23820,7 @@
"node-dir": {
"version": "0.1.17",
"resolved": "https://registry.npmjs.org/node-dir/-/node-dir-0.1.17.tgz",
"integrity": "sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==",
"integrity": "sha1-X1Zl2TNRM1yqvvjxxVRRbPXx5OU=",
"requires": {
"minimatch": "^3.0.2"
}
@ -23902,7 +23902,7 @@
"punycode": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz",
"integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ=="
"integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4="
}
}
},
@ -24301,7 +24301,7 @@
"os-browserify": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz",
"integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A=="
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc="
},
"os-homedir": {
"version": "1.0.2",
@ -25323,7 +25323,7 @@
"pretty-hrtime": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
"integrity": "sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A=="
"integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE="
},
"prismjs": {
"version": "1.17.1",
@ -25864,7 +25864,7 @@
"querystring-es3": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz",
"integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA=="
"integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM="
},
"querystringify": {
"version": "2.2.0",
@ -27084,7 +27084,7 @@
"serve-favicon": {
"version": "2.5.0",
"resolved": "https://registry.npmjs.org/serve-favicon/-/serve-favicon-2.5.0.tgz",
"integrity": "sha512-FMW2RvqNr03x+C0WxTyu6sOv21oOjkq5j8tjquWccwa6ScNyGFOGJVpuS1NmTVGBAHS07xnSKotgf2ehQmf9iA==",
"integrity": "sha1-k10kDN/g9YBTB/3+ln2IlCosvPA=",
"requires": {
"etag": "~1.8.1",
"fresh": "0.5.2",
@ -28410,7 +28410,7 @@
"strip-indent": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz",
"integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA=="
"integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g="
},
"strip-json-comments": {
"version": "3.1.1",
@ -28530,7 +28530,7 @@
"svg-tags": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz",
"integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA=="
"integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q="
},
"svg-url-loader": {
"version": "7.1.1",
@ -29011,7 +29011,7 @@
"to-arraybuffer": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz",
"integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA=="
"integrity": "sha1-fSKbH8xjfkZsoIEYCDanqr/4P0M="
},
"to-fast-properties": {
"version": "2.0.0",
@ -29064,12 +29064,12 @@
"token-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/token-stream/-/token-stream-1.0.0.tgz",
"integrity": "sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg=="
"integrity": "sha1-zCAOqyYT9BZtJ/+a/HylbUnfbrQ="
},
"toposort": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
"integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg=="
"integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA="
},
"tough-cookie": {
"version": "4.1.2",
@ -29100,7 +29100,7 @@
"trim": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz",
"integrity": "sha512-YzQV+TZg4AxpKxaTHK3c3D+kRDCGVEE7LemdlQZoQXn0iennk10RsIoY6ikzAqJTc9Xjl9C1/waHom/J86ziAQ=="
"integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0="
},
"trim-newlines": {
"version": "1.0.0",
@ -29287,7 +29287,7 @@
"tty-browserify": {
"version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
"integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw=="
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY="
},
"tunnel-agent": {
"version": "0.6.0",
@ -29757,7 +29757,7 @@
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw=="
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4="
}
}
},
@ -29793,7 +29793,7 @@
"uuid-browser": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/uuid-browser/-/uuid-browser-3.1.0.tgz",
"integrity": "sha512-dsNgbLaTrd6l3MMxTtouOCFw4CBFc/3a+GgYA2YyrJvyQ1u6q4pcu3ktLoUZ/VN/Aw9WsauazbgsgdfVWgAKQg=="
"integrity": "sha1-DwWkCu90+eWVHiDvv0SxGHHlZBA="
},
"v8-compile-cache": {
"version": "2.1.0",
@ -29874,7 +29874,7 @@
"void-elements": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/void-elements/-/void-elements-3.1.0.tgz",
"integrity": "sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w=="
"integrity": "sha1-YU9/v42AHwu18GYfWy9XhXUOTwk="
},
"vue": {
"version": "2.7.10",
@ -31535,7 +31535,7 @@
"cross-spawn": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz",
"integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==",
"integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=",
"requires": {
"lru-cache": "^4.0.1",
"shebang-command": "^1.2.0",
@ -31545,7 +31545,7 @@
"execa": {
"version": "0.8.0",
"resolved": "https://registry.npmjs.org/execa/-/execa-0.8.0.tgz",
"integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==",
"integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=",
"requires": {
"cross-spawn": "^5.0.1",
"get-stream": "^3.0.0",
@ -31559,7 +31559,7 @@
"get-stream": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz",
"integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ=="
"integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ="
},
"lru-cache": {
"version": "4.1.5",
@ -31573,12 +31573,12 @@
"normalize-path": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-1.0.0.tgz",
"integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA=="
"integrity": "sha1-MtDkcvkf80VwHBWoMRAY07CpA3k="
},
"yallist": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
"integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A=="
"integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI="
}
}
},

View file

@ -339,7 +339,6 @@ export default {
userMp: 'user.data.stats.mp',
userNotifications: 'user.data.notifications',
userAchievements: 'user.data.achievements', // @TODO: does this watch deeply?
armoireEmpty: 'user.data.flags.armoireEmpty',
questCompleted: 'user.data.party.quest.completed',
}),
userClassSelect () {
@ -410,10 +409,6 @@ export default {
if (this.user.needsCron) return;
this.handleUserNotifications(after);
},
armoireEmpty (after, before) {
if (after === before || after === false) return;
this.$root.$emit('bv::show::modal', 'armoire-empty');
},
questCompleted () {
if (!this.questCompleted) return;
this.$root.$emit('bv::show::modal', 'quest-completed');

View file

@ -246,6 +246,11 @@ export default {
}),
};
},
mounted () {
if (this.notification.type === 'drop' && this.notification.emptied) {
this.$root.$emit('bv::show::modal', 'armoire-empty');
}
},
computed: {
message () {
if (this.notification.flavorMessage) {

View file

@ -87,6 +87,9 @@ async function buyArmoire (store, params) {
icon: getDropClass({ type: item.type, key: item.dropKey }),
};
if (resData.armoire.emptied) {
notificationOptions.emptied = resData.armoire.emptied;
}
store.dispatch('snackbars:add', {
title: '',
timeout: true,

View file

@ -156,5 +156,8 @@
"achievementBonelessBossModalText": "You collected all the invertebrate pets!",
"achievementDuneBuddy": "Dune Buddy",
"achievementDuneBuddyText": "Has hatched all standard colors of desert dwelling pets: Armadillo, Cactus, Fox, Frog, Snake, and Spider!",
"achievementDuneBuddyNotes": "You collected all the desert dwelling pets!"
"achievementDuneBuddyNotes": "You collected all the desert dwelling pets!",
"achievementRoughRider": "Rough Rider",
"achievementRoughRiderText": "Has hatched all basic colors of the uncomfortable pets and mounts: Cactus, Hedgehog, and Rock!",
"achievementRoughRiderNotes": "You collected all the basic colors of the uncomfortable pets and mounts!"
}

View file

@ -923,6 +923,14 @@
"backgroundJackOLanternStacksText": "Jack O'Lantern Stacks",
"backgroundJackOLanternStacksNotes": "Admire a field of Jack OLantern Stacks.",
"backgrounds112023": "SET 114: Released November 2023",
"backgroundGiantCatText": "Giant Cat",
"backgroundGiantCatNotes": "Take a nap with a Giant Cat.",
"backgroundBarrelCellarText": "Barrel Cellar",
"backgroundBarrelCellarNotes": "Look for culinary delights in a Barrel Cellar.",
"backgroundAutumnTreeTunnelText": "Autumn Tree Tunnel",
"backgroundAutumnTreeTunnelNotes": "Take in the beauty of an Autumn Tree Tunnel.",
"timeTravelBackgrounds": "Steampunk Backgrounds",
"backgroundAirshipText": "Airship",
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",

View file

@ -154,6 +154,7 @@
"mysterySet202307": "Perilous Kraken Set",
"mysterySet202308": "Purple Protagonist Set",
"mysterySet202309": "Colossal Comet Moth Set",
"mysterySet202309": "All-Seeing Spellbinder Set",
"mysterySet202310": "Ghostlight Wraith Set",
"mysterySet202311": "All-Seeing Spellbinder Set",
"mysterySet301404": "Steampunk Standard Set",

View file

@ -197,6 +197,7 @@ const animalSetAchievs = {
icon: 'achievement-duneBuddy',
titleKey: 'achievementDuneBuddy',
textKey: 'achievementDuneBuddyText',
release: '2023-10-17T08:00-04:00',
},
plantParent: {
icon: 'achievement-plantParent',
@ -213,6 +214,12 @@ const animalSetAchievs = {
titleKey: 'achievementReptacularRumble',
textKey: 'achievementReptacularRumbleText',
},
roughRider: {
icon: 'achievement-roughRider',
titleKey: 'achievementRoughRider',
textKey: 'achievementRoughRiderText',
release: '2023-11-14T08:00-05:00',
},
woodlandWizard: {
icon: 'achievement-woodlandWizard',
titleKey: 'achievementWoodlandWizard',

View file

@ -1,10 +1,12 @@
import forOwn from 'lodash/forOwn';
import camelCase from 'lodash/camelCase';
import forOwn from 'lodash/forOwn';
import moment from 'moment';
import omitBy from 'lodash/omitBy';
import upperFirst from 'lodash/upperFirst';
import t from '../translation';
/* eslint-disable camelcase */
const backgrounds = {
const plannedBackgrounds = {
backgrounds062014: {
beach: { },
fairy_ring: { },
@ -585,6 +587,11 @@ const backgrounds = {
monstrous_cave: { },
jack_o_lantern_stacks: { },
},
backgrounds112023: {
giant_cat: { },
barrel_cellar: { },
autumn_tree_tunnel: { },
},
eventBackgrounds: {
birthday_bash: {
price: 0,
@ -627,8 +634,16 @@ const backgrounds = {
};
/* eslint-enable quote-props */
const releaseDates = {
backgrounds102023: '2023-10-10T08:00-04:00',
backgrounds112023: '2023-11-07T08:00-05:00',
};
const flat = {};
const backgrounds = omitBy(plannedBackgrounds, (bgSet, key) => releaseDates[key]
&& moment().isBefore(releaseDates[key]));
forOwn(backgrounds, (backgroundsInSet, set) => {
forOwn(backgroundsInSet, (background, bgKey) => {
background.key = bgKey;

View file

@ -163,8 +163,9 @@ const bundles = {
'rock',
'yarn',
],
event: EVENTS.bundle202311,
canBuy () {
return moment().isBetween('2021-03-16T08:00-05:00', '2021-03-31T20:00-05:00');
return moment().isBetween(EVENTS.bundle202311.start, EVENTS.bundle202311.end);
},
type: 'quests',
value: 7,

View file

@ -120,6 +120,16 @@ const ANIMAL_SET_ACHIEVEMENTS = {
achievementKey: 'reptacularRumble',
notificationType: 'ACHIEVEMENT_ANIMAL_SET',
},
roughRider: {
type: 'petMount',
species: [
'Cactus',
'Hedgehog',
'Rock',
],
achievementKey: 'roughRider',
notificationType: 'ACHIEVEMENT_ANIMAL_SET',
},
woodlandWizard: {
type: 'pet',
species: [

View file

@ -10,11 +10,19 @@ const gemsPromo = {
export const EVENTS = {
noEvent: {
start: '2023-11-01T00:00-05:00',
start: '2023-12-01T00:00-05:00',
end: '2023-12-21T08:00-05:00',
season: 'normal',
npcImageSuffix: '',
},
potions202311: {
start: '2023-11-14T08:00-04:00',
end: '2023-11-30T23:59-04:00',
},
bundle202311: {
start: '2023-11-09T08:00-04:00',
end: '2023-11-30T23:59-04:00',
},
spooky_extra_gems: {
start: '2023-10-24T08:00-04:00',
end: '2023-10-31T23:59-04:00',

View file

@ -1,6 +1,7 @@
import defaults from 'lodash/defaults';
import find from 'lodash/find';
import forEach from 'lodash/forEach';
import moment from 'moment';
import upperFirst from 'lodash/upperFirst';
import { ownsItem } from '../gear-helper';
import { ATTRIBUTES } from '../../../constants';
@ -1248,6 +1249,10 @@ const shield = {
int: 4,
set: 'cleaningSuppliesTwo',
},
saucepan: {
per: 10,
set: 'cookingImplementsTwo',
},
};
const headAccessory = {
@ -1709,6 +1714,15 @@ const weapon = {
int: 3,
set: 'somethingSpooky',
},
rollingPin: {
str: 10,
set: 'cookingImplementsTwo',
},
};
const releaseDates = {
somethingSpooky: '2023-10-10T08:00-04:00',
cookingImplementsTwo: '2023-11-07T08:00-05:00',
};
forEach({
@ -1744,6 +1758,7 @@ forEach({
notes = t(`${setKey}Armoire${upperFirst(gearKey)}Notes`);
}
defaults(gearItem, {
released: releaseDates[gearItem.set] ? moment().isAfter(releaseDates[gearItem.set]) : true,
canOwn: ownsItem(`${setKey}_armoire_${gearKey}`),
notes,
text: t(`${setKey}Armoire${upperFirst(gearKey)}Text`),

View file

@ -127,13 +127,13 @@ const premium = {
value: 2,
text: t('hatchingPotionEmber'),
limited: true,
event: EVENTS.bundle202211,
event: EVENTS.potions202311,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndNovember'),
previousDate: t('novemberYYYY', { year: 2021 }),
previousDate: t('januaryYYYY', { year: 2023 }),
}),
canBuy () {
return moment().isBetween(EVENTS.bundle202211.start, EVENTS.bundle202211.end);
return moment().isBetween(EVENTS.potions202311.start, EVENTS.potions202311.end);
},
},
Thunderstorm: {
@ -257,13 +257,13 @@ const premium = {
value: 2,
text: t('hatchingPotionFrost'),
limited: true,
event: EVENTS.bundle202211,
event: EVENTS.potions202311,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateEndNovember'),
previousDate: t('novemberYYYY', { year: 2020 }),
previousDate: t('novemberYYYY', { year: 2022 }),
}),
canBuy () {
return moment().isBetween(EVENTS.bundle202211.start, EVENTS.bundle202211.end);
return moment().isBetween(EVENTS.potions202311.start, EVENTS.potions202311.end);
},
},
IcySnow: {
@ -449,13 +449,13 @@ const premium = {
value: 2,
text: t('hatchingPotionAutumnLeaf'),
limited: true,
event: EVENTS.birthday10,
event: EVENTS.potions202311,
_addlNotes: t('eventAvailabilityReturning', {
availableDate: t('dateStartFebruary'),
previousDate: t('novemberYYYY', { year: 2021 }),
availableDate: t('dateEndNovember'),
previousDate: t('januaryYYYY', { year: 2023 }),
}),
canBuy () {
return moment().isBetween(EVENTS.birthday10.start, EVENTS.birthday10.end);
return moment().isBetween(EVENTS.potions202311.start, EVENTS.potions202311.end);
},
},
BlackPearl: {

View file

@ -99,8 +99,8 @@ api.potion = {
api.armoire = {
type: 'armoire',
text: t('armoireText'),
notes (user, count) {
if (user.flags.armoireEmpty) {
notes (count) {
if (count === 0) {
return t('armoireNotesEmpty')();
}
return `${t('armoireNotesFull')()} ${count}`;

View file

@ -45,19 +45,19 @@ const featuredItems = {
];
},
quests () {
if (moment().isBetween(EVENTS.bundle202310.start, EVENTS.bundle202310.end)) {
if (moment().isBetween(EVENTS.bundle202311.start, EVENTS.bundle202311.end)) {
return [
{
type: 'bundles',
path: 'bundles.sandySidekicks',
path: 'bundles.oddballs',
},
{
type: 'quests',
path: 'quests.beetle',
path: 'quests.gryphon',
},
{
type: 'quests',
path: 'quests.frog',
path: 'quests.armadillo',
},
];
}

View file

@ -1,5 +1,6 @@
import each from 'lodash/each';
import filter from 'lodash/filter';
import has from 'lodash/has';
import keys from 'lodash/keys';
import size from 'lodash/size';
import content from './content/index';
@ -50,7 +51,9 @@ export function remainingGearInSet (userGear = {}, set) {
const gear = filter(content.gear.flat, item => {
const setMatches = item.klass === set;
const hasItem = userGear[item.key];
if (has(item, 'released')) {
return item.released && setMatches && !hasItem;
}
return setMatches && !hasItem;
});

View file

@ -1,4 +1,5 @@
import get from 'lodash/get';
import moment from 'moment';
import content from '../content/index';
import i18n from '../i18n';
@ -35,15 +36,18 @@ function contribText (contrib, backer, language) {
}
function _add (result, data) {
result[data.key] = {
title: data.title,
text: data.text,
icon: data.icon,
earned: data.earned,
value: data.value,
index: index += 1,
optionalCount: data.optionalCount,
};
const thisContent = achievsContent[data.key];
if (!thisContent || !thisContent.release || moment().isAfter(thisContent.release)) {
result[data.key] = {
title: data.title,
text: data.text,
icon: data.icon,
earned: data.earned,
value: data.value,
index: index += 1,
optionalCount: data.optionalCount,
};
}
}
function _addSimpleWithCustomPath (result, user, data) {
@ -224,6 +228,7 @@ function _getBasicAchievements (user, language) {
_addSimple(result, user, { path: 'dinosaurDynasty', language });
_addSimple(result, user, { path: 'bonelessBoss', language });
_addSimple(result, user, { path: 'duneBuddy', language });
_addSimple(result, user, { path: 'roughRider', language });
_addSimpleWithMasterCount(result, user, { path: 'beastMaster', language });
_addSimpleWithMasterCount(result, user, { path: 'mountMaster', language });

View file

@ -292,7 +292,7 @@ export default function getItemInfo (user, type, item, officialPinnedItems, lang
itemInfo = {
key: item.key,
text: item.text(language),
notes: item.notes(user, count.remainingGearInSet(user.items.gear.owned, 'armoire')), // TODO count
notes: item.notes(count.remainingGearInSet(user.items.gear.owned, 'armoire')),
value: item.value,
currency: 'gold',
purchaseType: 'armoire',

View file

@ -2,7 +2,6 @@ import filter from 'lodash/filter';
import isEmpty from 'lodash/isEmpty';
import pick from 'lodash/pick';
import content from '../../content/index';
import * as count from '../../count';
import splitWhitespace from '../../libs/splitWhitespace';
import {
NotAuthorized,
@ -33,7 +32,7 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d
let result = {};
const armoireResult = randomValFns.trueRandom();
const eligibleEquipment = filter(content.gear.flat, eligible => eligible.klass === 'armoire' && !user.items.gear.owned[eligible.key]);
const eligibleEquipment = filter(content.gear.flat, eligible => eligible.klass === 'armoire' && eligible.released && !user.items.gear.owned[eligible.key]);
const armoireHasEquipment = !isEmpty(eligibleEquipment);
if (
@ -83,6 +82,7 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d
}
_gearResult (user, eligibleEquipment) {
const emptied = eligibleEquipment.length === 1;
eligibleEquipment.sort();
const drop = randomVal(eligibleEquipment);
@ -102,10 +102,6 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d
dropText: drop.text(this.req.language),
});
if (count.remainingGearInSet(user.items.gear.owned, 'armoire') === 0) {
user.flags.armoireEmpty = true;
}
removeItemByPath(user, `gear.flat.${drop.key}`);
if (this.analytics) {
@ -116,6 +112,7 @@ export class BuyArmoireOperation extends AbstractGoldItemOperation { // eslint-d
type: 'gear',
dropKey: drop.key,
dropText: drop.text(this.req.language),
emptied,
};
return {

View file

@ -86,16 +86,26 @@ export default function hatch (user, req = {}, analytics) {
if (content.dropHatchingPotions[hatchingPotion]) {
forEach(content.animalSetAchievements, achievement => {
if (!user.achievements[achievement.achievementKey]) {
if (achievement.type === 'pet') {
if (achievement.type === 'pet' || achievement.type === 'petMount') {
let achieved = true;
forEach(achievement.species, species => {
if (!achieved) return;
const petIndex = findIndex(
keys(content.dropHatchingPotions),
color => !user.items.pets[`${species}-${color}`],
color => !user.items.pets[`${species}-${color}`] || user.items.pets[`${species}-${color}`] === -1,
);
if (petIndex !== -1) achieved = false;
});
if (achievement.type === 'petMount') {
forEach(achievement.species, species => {
if (!achieved) return;
const mountIndex = findIndex(
keys(content.dropHatchingPotions),
color => !user.items.mounts[`${species}-${color}`],
);
if (mountIndex !== -1) achieved = false;
});
}
if (achieved) {
user.achievements[achievement.achievementKey] = true;
if (user.addNotification) {

View file

@ -157,6 +157,7 @@ export const UserSchema = new Schema({
dinosaurDynasty: Boolean,
bonelessBoss: Boolean,
duneBuddy: Boolean,
roughRider: Boolean,
// Onboarding Guide
createdTask: Boolean,
completedTask: Boolean,