mirror of
https://github.com/HabitRPG/habitica.git
synced 2026-05-20 11:39:52 -05:00
Compare commits
60 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 85dfb0cccb | |||
| 20d31ed8c8 | |||
| 39ff6cbe05 | |||
| 1bf2efa885 | |||
| 4b45a6389c | |||
| 5ba7d2395e | |||
| 972f23e235 | |||
| 9f599b0c8e | |||
| b937c2df0b | |||
| 9c4396027a | |||
| 2bab20d032 | |||
| cb2ee670e3 | |||
| b65d23d535 | |||
| 007cdf0ca2 | |||
| 1e4799bac6 | |||
| 47222445ad | |||
| 126b382da1 | |||
| ec78831a81 | |||
| 9bfb2afd9c | |||
| 389124b83f | |||
| eb25330296 | |||
| 29892ff5e3 | |||
| 99a31b322a | |||
| 1884c6c751 | |||
| 9456477953 | |||
| e3512a2bdd | |||
| 6ce3f84458 | |||
| 484c3cbac8 | |||
| c199beaf8c | |||
| 553aa01c25 | |||
| 8d1b10e458 | |||
| 0eaee9b1e4 | |||
| 41bbc475ab | |||
| d6e03c765e | |||
| dd6503d5ef | |||
| 36e5f39d7c | |||
| d48e4a664f | |||
| 661b30e807 | |||
| 026e819271 | |||
| 1fab19acf4 | |||
| 5743fb86b0 | |||
| 5443bf2459 | |||
| c0d5566417 | |||
| ded71b46c5 | |||
| 9693ad321c | |||
| dd3679f329 | |||
| f3029953dc | |||
| 01881b2fd8 | |||
| 11a22d0f5d | |||
| 5f9bf07045 | |||
| 719c03e2f5 | |||
| 379afa9554 | |||
| dbc23e89b8 | |||
| 0c6e254742 | |||
| 8327e69bdd | |||
| 2d953f4f59 | |||
| 7118d63949 | |||
| 20af8d038e | |||
| 3d9dfbb5e1 | |||
| ae0b966f45 |
+1
-1
Submodule habitica-images updated: 8ee6f312cb...acb3ede81d
Generated
+216
-138
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"version": "5.34.2",
|
||||
"version": "5.36.5",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "habitica",
|
||||
"version": "5.34.2",
|
||||
"version": "5.36.5",
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.22.10",
|
||||
@@ -56,7 +56,7 @@
|
||||
"method-override": "^3.0.0",
|
||||
"moment": "^2.29.4",
|
||||
"moment-recur": "^1.0.7",
|
||||
"mongoose": "^7.8.3",
|
||||
"mongoose": "^8.9.5",
|
||||
"morgan": "^1.10.0",
|
||||
"nconf": "^0.12.1",
|
||||
"node-gcm": "^1.0.5",
|
||||
@@ -87,7 +87,7 @@
|
||||
"xml2js": "^0.6.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"axios": "^1.7.4",
|
||||
"axios": "^1.8.2",
|
||||
"chai": "^4.3.7",
|
||||
"chai-as-promised": "^7.1.1",
|
||||
"chai-moment": "^0.1.0",
|
||||
@@ -1699,9 +1699,10 @@
|
||||
"integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA=="
|
||||
},
|
||||
"node_modules/@babel/runtime": {
|
||||
"version": "7.23.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz",
|
||||
"integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==",
|
||||
"version": "7.26.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.26.10.tgz",
|
||||
"integrity": "sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"regenerator-runtime": "^0.14.0"
|
||||
},
|
||||
@@ -3047,7 +3048,7 @@
|
||||
"version": "1.1.9",
|
||||
"resolved": "https://registry.npmjs.org/@mongodb-js/saslprep/-/saslprep-1.1.9.tgz",
|
||||
"integrity": "sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==",
|
||||
"optional": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"sparse-bitfield": "^3.0.3"
|
||||
}
|
||||
@@ -3677,14 +3678,15 @@
|
||||
"node_modules/@types/webidl-conversions": {
|
||||
"version": "7.0.3",
|
||||
"resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.3.tgz",
|
||||
"integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA=="
|
||||
"integrity": "sha512-CiJJvcRtIgzadHCYXw7dqEnMNRjhGZlYK05Mj9OyktqV8uVT8fD2BFOB7S1uwBE3Kj2Z+4UyPmFw/Ixgw/LAlA==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@types/whatwg-url": {
|
||||
"version": "8.2.2",
|
||||
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-8.2.2.tgz",
|
||||
"integrity": "sha512-FtQu10RWgn3D9U4aazdwIE2yzphmTJREDqNdODHrbrZmmMqI0vMheC/6NE/J1Yveaj8H+ela+YwWTjq5PGmuhA==",
|
||||
"version": "11.0.5",
|
||||
"resolved": "https://registry.npmjs.org/@types/whatwg-url/-/whatwg-url-11.0.5.tgz",
|
||||
"integrity": "sha512-coYR071JRaHa+xoEvvYqvnIHaVqaYrLPbsufM9BF63HkwI5Lgmy2QR8Q5K/lYDYo5AK82wOvSOS0UsLTpTG7uQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/node": "*",
|
||||
"@types/webidl-conversions": "*"
|
||||
}
|
||||
},
|
||||
@@ -4786,10 +4788,11 @@
|
||||
"integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg=="
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.7.4",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.7.4.tgz",
|
||||
"integrity": "sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==",
|
||||
"version": "1.8.2",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.8.2.tgz",
|
||||
"integrity": "sha512-ls4GYBm5aig9vWx8AWDSGLpnpDQRtWAfrjU+EuytuODrFBkqesN2RkOQCBzrA1RQNHw1SmRMSDDDSwzNAYQ6Rg==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
"form-data": "^4.0.0",
|
||||
@@ -6401,10 +6404,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/bson": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/bson/-/bson-6.3.0.tgz",
|
||||
"integrity": "sha512-balJfqwwTBddxfnidJZagCBPP/f48zj9Sdp3OJswREOgsJzHiQSaOIAtApSgDQFYgHqAvFkp53AFSqjMDZoTFw==",
|
||||
"dev": true,
|
||||
"version": "6.10.2",
|
||||
"resolved": "https://registry.npmjs.org/bson/-/bson-6.10.2.tgz",
|
||||
"integrity": "sha512-5afhLTjqDSA3akH56E+/2J6kTDuSIlBxyXPdQslj9hcIgOUE378xdOfZvC/9q3LifJNI6KR/juZ+d0NRNYBwXg==",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=16.20.1"
|
||||
}
|
||||
@@ -13360,28 +13363,6 @@
|
||||
"resolved": "https://registry.npmjs.org/iota-array/-/iota-array-1.0.0.tgz",
|
||||
"integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA=="
|
||||
},
|
||||
"node_modules/ip-address": {
|
||||
"version": "9.0.5",
|
||||
"resolved": "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz",
|
||||
"integrity": "sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==",
|
||||
"dependencies": {
|
||||
"jsbn": "1.1.0",
|
||||
"sprintf-js": "^1.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 12"
|
||||
}
|
||||
},
|
||||
"node_modules/ip-address/node_modules/jsbn": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz",
|
||||
"integrity": "sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A=="
|
||||
},
|
||||
"node_modules/ip-address/node_modules/sprintf-js": {
|
||||
"version": "1.1.3",
|
||||
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz",
|
||||
"integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA=="
|
||||
},
|
||||
"node_modules/ipaddr.js": {
|
||||
"version": "1.9.1",
|
||||
"resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
|
||||
@@ -14296,9 +14277,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/kareem": {
|
||||
"version": "2.5.1",
|
||||
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.5.1.tgz",
|
||||
"integrity": "sha512-7jFxRVm+jD+rkq3kY0iZDJfsO2/t4BBPeEb2qKn2lR/9KhuksYk5hxzfRYWMPV8P/x2d0kHD306YyWLzjjH+uA==",
|
||||
"version": "2.6.3",
|
||||
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.6.3.tgz",
|
||||
"integrity": "sha512-C3iHfuGUXK2u8/ipq9LfjFfXFxAZMQJJq7vLS45r3D9Y2xQ/m4S8zaR4zMLFWh9AsNPXmcFfUDhTEO8UIC/V6Q==",
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
"node": ">=12.0.0"
|
||||
}
|
||||
@@ -14307,7 +14289,7 @@
|
||||
"version": "1.1.7",
|
||||
"resolved": "https://registry.npmjs.org/kerberos/-/kerberos-1.1.7.tgz",
|
||||
"integrity": "sha512-1zXg4rARjsh/VMz2jjZeTfRHbJTVNR6f2DYHbLvtUSOW1satj33Fvc7vOJ0YVWB9+/9ITJWd1QKp4w217SsiFA==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"hasInstallScript": true,
|
||||
"dependencies": {
|
||||
"bindings": "^1.5.0",
|
||||
@@ -14965,8 +14947,7 @@
|
||||
"node_modules/memory-pager": {
|
||||
"version": "1.5.0",
|
||||
"resolved": "https://registry.npmjs.org/memory-pager/-/memory-pager-1.5.0.tgz",
|
||||
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==",
|
||||
"optional": true
|
||||
"integrity": "sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg=="
|
||||
},
|
||||
"node_modules/meow": {
|
||||
"version": "3.7.0",
|
||||
@@ -15475,43 +15456,47 @@
|
||||
}
|
||||
},
|
||||
"node_modules/mongodb-connection-string-url": {
|
||||
"version": "2.6.0",
|
||||
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
|
||||
"integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
|
||||
"version": "3.0.2",
|
||||
"resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-3.0.2.tgz",
|
||||
"integrity": "sha512-rMO7CGo/9BFwyZABcKAWL8UJwH/Kc2x0g72uhDWzG48URRax5TCIcJ7Rc3RZqffZzO/Gwff/jyKwCU9TN8gehA==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@types/whatwg-url": "^8.2.1",
|
||||
"whatwg-url": "^11.0.0"
|
||||
"@types/whatwg-url": "^11.0.2",
|
||||
"whatwg-url": "^14.1.0 || ^13.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mongodb-connection-string-url/node_modules/tr46": {
|
||||
"version": "3.0.0",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz",
|
||||
"integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==",
|
||||
"version": "5.0.0",
|
||||
"resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz",
|
||||
"integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"punycode": "^2.1.1"
|
||||
"punycode": "^2.3.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/mongodb-connection-string-url/node_modules/webidl-conversions": {
|
||||
"version": "7.0.0",
|
||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
|
||||
"integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==",
|
||||
"license": "BSD-2-Clause",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
}
|
||||
},
|
||||
"node_modules/mongodb-connection-string-url/node_modules/whatwg-url": {
|
||||
"version": "11.0.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz",
|
||||
"integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==",
|
||||
"version": "14.1.0",
|
||||
"resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.1.0.tgz",
|
||||
"integrity": "sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"tr46": "^3.0.0",
|
||||
"tr46": "^5.0.0",
|
||||
"webidl-conversions": "^7.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/mongodb-core": {
|
||||
@@ -15596,55 +15581,64 @@
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose": {
|
||||
"version": "7.8.3",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-7.8.3.tgz",
|
||||
"integrity": "sha512-eFnbkKgyVrICoHB6tVJ4uLanS7d5AIo/xHkEbQeOv6g2sD7gh/1biRwvFifsmbtkIddQVNr3ROqHik6gkknN3g==",
|
||||
"version": "8.9.7",
|
||||
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-8.9.7.tgz",
|
||||
"integrity": "sha512-mvNXmU0V8qZzMR/qoK2mjT4Ti2ALdtfS0teK+twxhlGkwzOD76V02/zWajTu2MJ7QyEmZe9OWvnJsIY0iAuX3Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"bson": "^5.5.0",
|
||||
"kareem": "2.5.1",
|
||||
"mongodb": "5.9.2",
|
||||
"bson": "^6.10.1",
|
||||
"kareem": "2.6.3",
|
||||
"mongodb": "~6.12.0",
|
||||
"mpath": "0.9.0",
|
||||
"mquery": "5.0.0",
|
||||
"ms": "2.1.3",
|
||||
"sift": "16.0.1"
|
||||
"sift": "17.1.3"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.20.1"
|
||||
"node": ">=16.20.1"
|
||||
},
|
||||
"funding": {
|
||||
"type": "opencollective",
|
||||
"url": "https://opencollective.com/mongoose"
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose/node_modules/bson": {
|
||||
"version": "5.5.1",
|
||||
"resolved": "https://registry.npmjs.org/bson/-/bson-5.5.1.tgz",
|
||||
"integrity": "sha512-ix0EwukN2EpC0SRWIj/7B5+A6uQMQy6KMREI9qQqvgpkV2frH63T0UDVd1SYedL6dNCmDBYB3QtXi4ISk9YT+g==",
|
||||
"node_modules/mongoose/node_modules/kerberos": {
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/kerberos/-/kerberos-2.2.1.tgz",
|
||||
"integrity": "sha512-Vlyv1tjAPb0y2VIJ03dKkUjsneGIBuTkH24uGRx6/DrKpFlVuGPmct3m5aEotljVUlw7PAGWABwR5aNeW7y8Zw==",
|
||||
"hasInstallScript": true,
|
||||
"license": "Apache-2.0",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"node-addon-api": "^6.1.0",
|
||||
"prebuild-install": "^7.1.2"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.20.1"
|
||||
"node": ">=12.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose/node_modules/mongodb": {
|
||||
"version": "5.9.2",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-5.9.2.tgz",
|
||||
"integrity": "sha512-H60HecKO4Bc+7dhOv4sJlgvenK4fQNqqUIlXxZYQNbfEWSALGAwGoyJd/0Qwk4TttFXUOHJ2ZJQe/52ScaUwtQ==",
|
||||
"version": "6.12.0",
|
||||
"resolved": "https://registry.npmjs.org/mongodb/-/mongodb-6.12.0.tgz",
|
||||
"integrity": "sha512-RM7AHlvYfS7jv7+BXund/kR64DryVI+cHbVAy9P61fnb1RcWZqOW1/Wj2YhqMCx+MuYhqTRGv7AwHBzmsCKBfA==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"bson": "^5.5.0",
|
||||
"mongodb-connection-string-url": "^2.6.0",
|
||||
"socks": "^2.7.1"
|
||||
"@mongodb-js/saslprep": "^1.1.9",
|
||||
"bson": "^6.10.1",
|
||||
"mongodb-connection-string-url": "^3.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=14.20.1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
"@mongodb-js/saslprep": "^1.1.0"
|
||||
"node": ">=16.20.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@aws-sdk/credential-providers": "^3.188.0",
|
||||
"@mongodb-js/zstd": "^1.0.0",
|
||||
"kerberos": "^1.0.0 || ^2.0.0",
|
||||
"mongodb-client-encryption": ">=2.3.0 <3",
|
||||
"snappy": "^7.2.2"
|
||||
"@mongodb-js/zstd": "^1.1.0 || ^2.0.0",
|
||||
"gcp-metadata": "^5.2.0",
|
||||
"kerberos": "^2.0.1",
|
||||
"mongodb-client-encryption": ">=6.0.0 <7",
|
||||
"snappy": "^7.2.2",
|
||||
"socks": "^2.7.1"
|
||||
},
|
||||
"peerDependenciesMeta": {
|
||||
"@aws-sdk/credential-providers": {
|
||||
@@ -15653,6 +15647,9 @@
|
||||
"@mongodb-js/zstd": {
|
||||
"optional": true
|
||||
},
|
||||
"gcp-metadata": {
|
||||
"optional": true
|
||||
},
|
||||
"kerberos": {
|
||||
"optional": true
|
||||
},
|
||||
@@ -15661,6 +15658,9 @@
|
||||
},
|
||||
"snappy": {
|
||||
"optional": true
|
||||
},
|
||||
"socks": {
|
||||
"optional": true
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15669,6 +15669,105 @@
|
||||
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
},
|
||||
"node_modules/mongoose/node_modules/napi-build-utils": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz",
|
||||
"integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/mongoose/node_modules/node-abi": {
|
||||
"version": "3.74.0",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.74.0.tgz",
|
||||
"integrity": "sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"semver": "^7.3.5"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose/node_modules/node-addon-api": {
|
||||
"version": "6.1.0",
|
||||
"resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz",
|
||||
"integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true
|
||||
},
|
||||
"node_modules/mongoose/node_modules/prebuild-install": {
|
||||
"version": "7.1.3",
|
||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz",
|
||||
"integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==",
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"detect-libc": "^2.0.0",
|
||||
"expand-template": "^2.0.3",
|
||||
"github-from-package": "0.0.0",
|
||||
"minimist": "^1.2.3",
|
||||
"mkdirp-classic": "^0.5.3",
|
||||
"napi-build-utils": "^2.0.0",
|
||||
"node-abi": "^3.3.0",
|
||||
"pump": "^3.0.0",
|
||||
"rc": "^1.2.7",
|
||||
"simple-get": "^4.0.0",
|
||||
"tar-fs": "^2.0.0",
|
||||
"tunnel-agent": "^0.6.0"
|
||||
},
|
||||
"bin": {
|
||||
"prebuild-install": "bin.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose/node_modules/semver": {
|
||||
"version": "7.7.1",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz",
|
||||
"integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==",
|
||||
"license": "ISC",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver.js"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=10"
|
||||
}
|
||||
},
|
||||
"node_modules/mongoose/node_modules/simple-get": {
|
||||
"version": "4.0.1",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz",
|
||||
"integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==",
|
||||
"funding": [
|
||||
{
|
||||
"type": "github",
|
||||
"url": "https://github.com/sponsors/feross"
|
||||
},
|
||||
{
|
||||
"type": "patreon",
|
||||
"url": "https://www.patreon.com/feross"
|
||||
},
|
||||
{
|
||||
"type": "consulting",
|
||||
"url": "https://feross.org/support"
|
||||
}
|
||||
],
|
||||
"license": "MIT",
|
||||
"optional": true,
|
||||
"peer": true,
|
||||
"dependencies": {
|
||||
"decompress-response": "^6.0.0",
|
||||
"once": "^1.3.1",
|
||||
"simple-concat": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/monk": {
|
||||
"version": "7.3.4",
|
||||
"resolved": "https://registry.npmjs.org/monk/-/monk-7.3.4.tgz",
|
||||
@@ -16082,7 +16181,7 @@
|
||||
"version": "2.30.1",
|
||||
"resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.1.tgz",
|
||||
"integrity": "sha512-/2D0wOQPgaUWzVSVgRMx+trKJRC2UG4SUc4oCJoXx9Uxjtp0Vy3/kt7zcbxHF8+Z/pK3UloLWzBISg72brfy1w==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"semver": "^5.4.1"
|
||||
}
|
||||
@@ -16091,7 +16190,7 @@
|
||||
"version": "5.7.2",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz",
|
||||
"integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"semver": "bin/semver"
|
||||
}
|
||||
@@ -16281,7 +16380,7 @@
|
||||
"version": "0.1.1",
|
||||
"resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz",
|
||||
"integrity": "sha512-6kM8CLXvuW5crTxsAtva2YLrRrDaiTIkIePWs9moLHqbFWT94WpNFjwS/5dfLfECg5i/lkmw3aoqVidxt23TEQ==",
|
||||
"devOptional": true
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/nopt": {
|
||||
"version": "1.0.10",
|
||||
@@ -17896,7 +17995,7 @@
|
||||
"version": "6.1.2",
|
||||
"resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-6.1.2.tgz",
|
||||
"integrity": "sha512-PzYWIKZeP+967WuKYXlTOhYBgGOvTRSfaKI89XnfJ0ansRAH7hDU45X+K+FZeI1Wb/7p/NnuctPH3g0IqKUuSQ==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"detect-libc": "^1.0.3",
|
||||
"expand-template": "^2.0.3",
|
||||
@@ -17924,7 +18023,7 @@
|
||||
"version": "2.1.1",
|
||||
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
|
||||
"integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
@@ -17933,13 +18032,13 @@
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
|
||||
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
|
||||
"devOptional": true
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/prebuild-install/node_modules/are-we-there-yet": {
|
||||
"version": "1.1.7",
|
||||
"resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz",
|
||||
"integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"delegates": "^1.0.0",
|
||||
"readable-stream": "^2.0.6"
|
||||
@@ -17949,7 +18048,7 @@
|
||||
"version": "1.0.3",
|
||||
"resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz",
|
||||
"integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"bin": {
|
||||
"detect-libc": "bin/detect-libc.js"
|
||||
},
|
||||
@@ -17961,7 +18060,7 @@
|
||||
"version": "2.7.4",
|
||||
"resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz",
|
||||
"integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"aproba": "^1.0.3",
|
||||
"console-control-strings": "^1.0.0",
|
||||
@@ -17977,7 +18076,7 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
|
||||
"integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"number-is-nan": "^1.0.0"
|
||||
},
|
||||
@@ -17989,13 +18088,13 @@
|
||||
"version": "1.0.0",
|
||||
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
|
||||
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==",
|
||||
"devOptional": true
|
||||
"dev": true
|
||||
},
|
||||
"node_modules/prebuild-install/node_modules/npmlog": {
|
||||
"version": "4.1.2",
|
||||
"resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz",
|
||||
"integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"are-we-there-yet": "~1.1.2",
|
||||
"console-control-strings": "~1.1.0",
|
||||
@@ -18007,7 +18106,7 @@
|
||||
"version": "2.3.8",
|
||||
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz",
|
||||
"integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"core-util-is": "~1.0.0",
|
||||
"inherits": "~2.0.3",
|
||||
@@ -18022,7 +18121,7 @@
|
||||
"version": "1.1.1",
|
||||
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
|
||||
"integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"safe-buffer": "~5.1.0"
|
||||
}
|
||||
@@ -18031,7 +18130,7 @@
|
||||
"version": "1.0.2",
|
||||
"resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
|
||||
"integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"code-point-at": "^1.0.0",
|
||||
"is-fullwidth-code-point": "^1.0.0",
|
||||
@@ -18045,7 +18144,7 @@
|
||||
"version": "3.0.1",
|
||||
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
|
||||
"integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"ansi-regex": "^2.0.0"
|
||||
},
|
||||
@@ -18103,9 +18202,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/prismjs": {
|
||||
"version": "1.29.0",
|
||||
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.29.0.tgz",
|
||||
"integrity": "sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==",
|
||||
"version": "1.30.0",
|
||||
"resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.30.0.tgz",
|
||||
"integrity": "sha512-DEvV2ZF2r2/63V+tK8hQvrR2ZGn10srHbXviTlcv7Kpzw8jWiNTqbVgjO3IY8RxrrOUF8VPMQQFysYYYv0YZxw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6"
|
||||
}
|
||||
@@ -19576,9 +19676,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/sift": {
|
||||
"version": "16.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sift/-/sift-16.0.1.tgz",
|
||||
"integrity": "sha512-Wv6BjQ5zbhW7VFefWusVP33T/EM0vYikCaQ2qR8yULbsilAT8/wQaXvuQ3ptGLpoKx+lihJE3y2UTgKDyyNHZQ=="
|
||||
"version": "17.1.3",
|
||||
"resolved": "https://registry.npmjs.org/sift/-/sift-17.1.3.tgz",
|
||||
"integrity": "sha512-Rtlj66/b0ICeFzYTuNvX/EF1igRbbnGSvEyT79McoZa/DeGhMyC5pWKOEsZKnpkqtSeovd5FL/bjHWC3CIIvCQ==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/signal-exit": {
|
||||
"version": "3.0.7",
|
||||
@@ -19608,7 +19709,7 @@
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.1.tgz",
|
||||
"integrity": "sha512-CQ5LTKGfCpvE1K0n2us+kuMPbk/q0EKl82s4aheV9oXjFEz6W/Y7oQFVJuU6QG77hRT4Ghb5RURteF5vnWjupA==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"decompress-response": "^4.2.0",
|
||||
"once": "^1.3.1",
|
||||
@@ -19619,7 +19720,7 @@
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz",
|
||||
"integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"dependencies": {
|
||||
"mimic-response": "^2.0.0"
|
||||
},
|
||||
@@ -19631,7 +19732,7 @@
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz",
|
||||
"integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==",
|
||||
"devOptional": true,
|
||||
"dev": true,
|
||||
"engines": {
|
||||
"node": ">=8"
|
||||
},
|
||||
@@ -19772,15 +19873,6 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/smart-buffer": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz",
|
||||
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==",
|
||||
"engines": {
|
||||
"node": ">= 6.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/snapdragon": {
|
||||
"version": "0.8.2",
|
||||
"resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
|
||||
@@ -19900,19 +19992,6 @@
|
||||
"node": ">=0.10.0"
|
||||
}
|
||||
},
|
||||
"node_modules/socks": {
|
||||
"version": "2.8.3",
|
||||
"resolved": "https://registry.npmjs.org/socks/-/socks-2.8.3.tgz",
|
||||
"integrity": "sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==",
|
||||
"dependencies": {
|
||||
"ip-address": "^9.0.5",
|
||||
"smart-buffer": "^4.2.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">= 10.0.0",
|
||||
"npm": ">= 3.0.0"
|
||||
}
|
||||
},
|
||||
"node_modules/sort-keys": {
|
||||
"version": "1.1.2",
|
||||
"resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz",
|
||||
@@ -19990,7 +20069,6 @@
|
||||
"version": "3.0.3",
|
||||
"resolved": "https://registry.npmjs.org/sparse-bitfield/-/sparse-bitfield-3.0.3.tgz",
|
||||
"integrity": "sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==",
|
||||
"optional": true,
|
||||
"dependencies": {
|
||||
"memory-pager": "^1.0.2"
|
||||
}
|
||||
|
||||
+5
-5
@@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||
"version": "5.34.2",
|
||||
"version": "5.36.5",
|
||||
"main": "./website/server/index.js",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.22.10",
|
||||
@@ -51,7 +51,7 @@
|
||||
"method-override": "^3.0.0",
|
||||
"moment": "^2.29.4",
|
||||
"moment-recur": "^1.0.7",
|
||||
"mongoose": "^7.8.3",
|
||||
"mongoose": "^8.9.5",
|
||||
"morgan": "^1.10.0",
|
||||
"nconf": "^0.12.1",
|
||||
"node-gcm": "^1.0.5",
|
||||
@@ -109,14 +109,14 @@
|
||||
"start": "gulp nodemon",
|
||||
"start:simple": "node ./website/server/index.js",
|
||||
"debug": "gulp nodemon --inspect",
|
||||
"mongo:dev": "run-rs -v 5.0.23 -l ubuntu1804 --keep --dbpath mongodb-data --number 1 --quiet",
|
||||
"mongo:test": "run-rs -v 5.0.23 -l ubuntu1804 --keep --dbpath mongodb-data-testing --number 1 --quiet",
|
||||
"mongo:dev": "run-rs -v 7.0.21 -l ubuntu2404 --keep --dbpath mongodb-data --number 1 --quiet",
|
||||
"mongo:test": "run-rs -v 7.0.21 -l ubuntu2404 --keep --dbpath mongodb-data-testing --number 1 --quiet",
|
||||
"postinstall": "git config --global url.\"https://\".insteadOf git:// && gulp build && cd website/client && npm install",
|
||||
"apidoc": "gulp apidoc",
|
||||
"heroku-postbuild": ".heroku/report_deploy.sh"
|
||||
},
|
||||
"devDependencies": {
|
||||
"axios": "^1.7.4",
|
||||
"axios": "^1.8.2",
|
||||
"chai": "^4.3.7",
|
||||
"chai-as-promised": "^7.1.1",
|
||||
"chai-moment": "^0.1.0",
|
||||
|
||||
@@ -71,15 +71,14 @@ async function deleteHabiticaData (user, email) {
|
||||
}
|
||||
|
||||
async function processEmailAddress (email) {
|
||||
const emailRegex = new RegExp(`^${email}$`, 'i');
|
||||
const localUsers = await User.find(
|
||||
{ 'auth.local.email': emailRegex },
|
||||
{ 'auth.local.email': email },
|
||||
{ _id: 1, apiToken: 1, auth: 1 },
|
||||
).exec();
|
||||
|
||||
const socialUsers = await User.find(
|
||||
{
|
||||
'auth.local.email': { $not: emailRegex },
|
||||
'auth.local.email': { $ne: email },
|
||||
$or: [
|
||||
{ 'auth.facebook.emails.value': email },
|
||||
{ 'auth.google.emails.value': email },
|
||||
|
||||
+253
-122
@@ -2,13 +2,22 @@
|
||||
import moment from 'moment';
|
||||
import nconf from 'nconf';
|
||||
import requireAgain from 'require-again';
|
||||
import { recoverCron, cron } from '../../../../website/server/libs/cron';
|
||||
import { v4 as generateUUID } from 'uuid';
|
||||
import {
|
||||
generateRes,
|
||||
generateReq,
|
||||
generateTodo,
|
||||
generateDaily,
|
||||
} from '../../../helpers/api-unit.helper';
|
||||
import { cron, cronWrapper } from '../../../../website/server/libs/cron';
|
||||
import { model as User } from '../../../../website/server/models/user';
|
||||
import * as Tasks from '../../../../website/server/models/task';
|
||||
import common from '../../../../website/common';
|
||||
import * as analytics from '../../../../website/server/libs/analyticsService';
|
||||
import { model as Group } from '../../../../website/server/models/group';
|
||||
|
||||
// const scoreTask = common.ops.scoreTask;
|
||||
const CRON_TIMEOUT_WAIT = new Date(5 * 60 * 1000).getTime();
|
||||
const CRON_TIMEOUT_UNIT = new Date(60 * 1000).getTime();
|
||||
|
||||
const pathToCronLib = '../../../../website/server/libs/cron';
|
||||
|
||||
@@ -1200,7 +1209,7 @@ describe('cron', async () => {
|
||||
it('increments perfect day achievement if all (at least 1) due dailies were completed', async () => {
|
||||
daysMissed = 1;
|
||||
tasksByType.dailys[0].completed = true;
|
||||
tasksByType.dailys[0].startDate = moment(new Date()).subtract({ days: 1 });
|
||||
tasksByType.dailys[0].isDue = true;
|
||||
|
||||
await cron({
|
||||
user, tasksByType, daysMissed, analytics,
|
||||
@@ -1212,7 +1221,7 @@ describe('cron', async () => {
|
||||
it('does not increment perfect day achievement if no due dailies', async () => {
|
||||
daysMissed = 1;
|
||||
tasksByType.dailys[0].completed = true;
|
||||
tasksByType.dailys[0].startDate = moment(new Date()).add({ days: 1 });
|
||||
tasksByType.dailys[0].isDue = false;
|
||||
|
||||
await cron({
|
||||
user, tasksByType, daysMissed, analytics,
|
||||
@@ -1224,7 +1233,7 @@ describe('cron', async () => {
|
||||
it('gives perfect day buff if all (at least 1) due dailies were completed', async () => {
|
||||
daysMissed = 1;
|
||||
tasksByType.dailys[0].completed = true;
|
||||
tasksByType.dailys[0].startDate = moment(new Date()).subtract({ days: 1 });
|
||||
tasksByType.dailys[0].isDue = true;
|
||||
|
||||
const previousBuffs = user.stats.buffs.toObject();
|
||||
|
||||
@@ -1242,7 +1251,7 @@ describe('cron', async () => {
|
||||
user.preferences.sleep = true;
|
||||
daysMissed = 1;
|
||||
tasksByType.dailys[0].completed = true;
|
||||
tasksByType.dailys[0].startDate = moment(new Date()).subtract({ days: 1 });
|
||||
tasksByType.dailys[0].isDue = true;
|
||||
|
||||
const previousBuffs = user.stats.buffs.toObject();
|
||||
|
||||
@@ -1259,7 +1268,7 @@ describe('cron', async () => {
|
||||
it('clears buffs if user does not have a perfect day (no due dailys)', async () => {
|
||||
daysMissed = 1;
|
||||
tasksByType.dailys[0].completed = true;
|
||||
tasksByType.dailys[0].startDate = moment(new Date()).add({ days: 1 });
|
||||
tasksByType.dailys[0].isDue = false;
|
||||
|
||||
user.stats.buffs = {
|
||||
str: 1,
|
||||
@@ -1488,78 +1497,6 @@ describe('cron', async () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('notifications', async () => {
|
||||
it('adds a user notification', async () => {
|
||||
const mpBefore = user.stats.mp;
|
||||
tasksByType.dailys[0].completed = true;
|
||||
|
||||
const statsComputedRes = common.statsComputed(user);
|
||||
const stubbedStatsComputed = sinon.stub(common, 'statsComputed');
|
||||
stubbedStatsComputed.returns(Object.assign(statsComputedRes, { maxMP: 100 }));
|
||||
|
||||
daysMissed = 1;
|
||||
const hpBefore = user.stats.hp;
|
||||
tasksByType.dailys[0].startDate = moment(new Date()).subtract({ days: 1 });
|
||||
|
||||
await cron({
|
||||
user, tasksByType, daysMissed, analytics,
|
||||
});
|
||||
|
||||
expect(user.notifications.length).to.be.greaterThan(0);
|
||||
expect(user.notifications[1].type).to.equal('CRON');
|
||||
expect(user.notifications[1].data).to.eql({
|
||||
hp: user.stats.hp - hpBefore,
|
||||
mp: user.stats.mp - mpBefore,
|
||||
});
|
||||
|
||||
common.statsComputed.restore();
|
||||
});
|
||||
|
||||
it('condenses multiple notifications into one', async () => {
|
||||
const mpBefore1 = user.stats.mp;
|
||||
tasksByType.dailys[0].completed = true;
|
||||
|
||||
const statsComputedRes = common.statsComputed(user);
|
||||
const stubbedStatsComputed = sinon.stub(common, 'statsComputed');
|
||||
stubbedStatsComputed.returns(Object.assign(statsComputedRes, { maxMP: 100 }));
|
||||
|
||||
daysMissed = 1;
|
||||
const hpBefore1 = user.stats.hp;
|
||||
tasksByType.dailys[0].startDate = moment(new Date()).subtract({ days: 1 });
|
||||
|
||||
await cron({
|
||||
user, tasksByType, daysMissed, analytics,
|
||||
});
|
||||
|
||||
expect(user.notifications.length).to.be.greaterThan(0);
|
||||
expect(user.notifications[1].type).to.equal('CRON');
|
||||
expect(user.notifications[1].data).to.eql({
|
||||
hp: user.stats.hp - hpBefore1,
|
||||
mp: user.stats.mp - mpBefore1,
|
||||
});
|
||||
|
||||
const notifsBefore2 = user.notifications.length;
|
||||
const hpBefore2 = user.stats.hp;
|
||||
const mpBefore2 = user.stats.mp;
|
||||
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
|
||||
await cron({
|
||||
user, tasksByType, daysMissed, analytics,
|
||||
});
|
||||
|
||||
expect(user.notifications.length - notifsBefore2).to.equal(0);
|
||||
expect(user.notifications[0].type).to.not.equal('CRON');
|
||||
expect(user.notifications[1].type).to.equal('CRON');
|
||||
expect(user.notifications[1].data).to.eql({
|
||||
hp: user.stats.hp - hpBefore2 - (hpBefore2 - hpBefore1),
|
||||
mp: user.stats.mp - mpBefore2 - (mpBefore2 - mpBefore1),
|
||||
});
|
||||
expect(user.notifications[0].type).to.not.equal('CRON');
|
||||
common.statsComputed.restore();
|
||||
});
|
||||
});
|
||||
|
||||
describe('private messages', async () => {
|
||||
let lastMessageId;
|
||||
|
||||
@@ -1606,7 +1543,7 @@ describe('cron', async () => {
|
||||
await cron({
|
||||
user, tasksByType, daysMissed, analytics,
|
||||
});
|
||||
expect(user.notifications.length).to.be.greaterThan(1);
|
||||
expect(user.notifications.length).to.eql(1);
|
||||
expect(user.notifications[0].type).to.eql('LOGIN_INCENTIVE');
|
||||
});
|
||||
|
||||
@@ -1820,64 +1757,258 @@ describe('cron', async () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe('recoverCron', async () => {
|
||||
let locals; let status; let
|
||||
execStub;
|
||||
describe('cron wrapper', () => {
|
||||
let res; let
|
||||
req;
|
||||
let user;
|
||||
|
||||
beforeEach(async () => {
|
||||
execStub = sandbox.stub();
|
||||
sandbox.stub(User, 'findOne').returns({ exec: execStub });
|
||||
|
||||
status = { times: 0 };
|
||||
locals = {
|
||||
user: new User({
|
||||
auth: {
|
||||
local: {
|
||||
username: 'username',
|
||||
lowerCaseUsername: 'username',
|
||||
email: 'email@example.com',
|
||||
salt: 'salt',
|
||||
hashed_password: 'hashed_password', // eslint-disable-line camelcase
|
||||
},
|
||||
},
|
||||
}),
|
||||
};
|
||||
res = generateRes();
|
||||
req = generateReq();
|
||||
user = await res.locals.user.save();
|
||||
res.analytics = analytics;
|
||||
});
|
||||
|
||||
afterEach(async () => {
|
||||
afterEach(() => {
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
it('throws an error if user cannot be found', async () => {
|
||||
execStub.returns(Promise.resolve(null));
|
||||
it('calls next when user is not attached', async () => {
|
||||
res.locals.user = null;
|
||||
await cronWrapper(req, res);
|
||||
});
|
||||
|
||||
it('calls next when days have not been missed', async () => {
|
||||
await cronWrapper(req, res);
|
||||
});
|
||||
|
||||
it('should clear todos older than 30 days for free users', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const task = generateTodo(user);
|
||||
task.dateCompleted = moment(new Date()).subtract({ days: 31 });
|
||||
task.completed = true;
|
||||
await task.save();
|
||||
await user.save();
|
||||
|
||||
await cronWrapper(req, res);
|
||||
const taskRes = await Tasks.Task.findOne({ _id: task._id });
|
||||
expect(taskRes).to.not.exist;
|
||||
});
|
||||
|
||||
it('should not clear todos older than 30 days for subscribed users', async () => {
|
||||
user.purchased.plan.customerId = 'subscribedId';
|
||||
user.purchased.plan.dateUpdated = moment('012013', 'MMYYYY');
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const task = generateTodo(user);
|
||||
task.dateCompleted = moment(new Date()).subtract({ days: 31 });
|
||||
task.completed = true;
|
||||
await Promise.all([task.save(), user.save()]);
|
||||
|
||||
await cronWrapper(req, res);
|
||||
const taskRes = await Tasks.Task.findOne({ _id: task._id });
|
||||
expect(taskRes).to.exist;
|
||||
});
|
||||
|
||||
it('should clear todos older than 90 days for subscribed users', async () => {
|
||||
user.purchased.plan.customerId = 'subscribedId';
|
||||
user.purchased.plan.dateUpdated = moment('012013', 'MMYYYY');
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
|
||||
const task = generateTodo(user);
|
||||
task.dateCompleted = moment(new Date()).subtract({ days: 91 });
|
||||
task.completed = true;
|
||||
await task.save();
|
||||
await user.save();
|
||||
|
||||
await cronWrapper(req, res);
|
||||
const taskRes = await Tasks.Task.findOne({ _id: task._id });
|
||||
expect(taskRes).to.not.exist;
|
||||
});
|
||||
|
||||
it('should call next if user was not modified after cron', async () => {
|
||||
const hpBefore = user.stats.hp;
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
await user.save();
|
||||
|
||||
await cronWrapper(req, res);
|
||||
expect(hpBefore).to.equal(user.stats.hp);
|
||||
});
|
||||
|
||||
it('runs cron if previous cron was incomplete', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 1 });
|
||||
user.auth.timestamps.loggedin = moment(new Date()).subtract({ days: 4 });
|
||||
const now = new Date();
|
||||
await user.save();
|
||||
|
||||
await cronWrapper(req, res);
|
||||
expect(moment(now).isSame(user.lastCron, 'day'));
|
||||
expect(moment(now).isSame(user.auth.timestamps.loggedin, 'day'));
|
||||
});
|
||||
|
||||
it('updates user.auth.timestamps.loggedin and lastCron', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const now = new Date();
|
||||
await user.save();
|
||||
|
||||
await cronWrapper(req, res);
|
||||
expect(moment(now).isSame(user.lastCron, 'day'));
|
||||
expect(moment(now).isSame(user.auth.timestamps.loggedin, 'day'));
|
||||
});
|
||||
|
||||
it('does damage for missing dailies', async () => {
|
||||
const hpBefore = user.stats.hp;
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const daily = generateDaily(user);
|
||||
daily.startDate = moment(new Date()).subtract({ days: 2 });
|
||||
await daily.save();
|
||||
await user.save();
|
||||
|
||||
await cronWrapper(req, res);
|
||||
const updatedUser = await User.findOne({ _id: user._id });
|
||||
expect(updatedUser.stats.hp).to.be.lessThan(hpBefore);
|
||||
});
|
||||
|
||||
it('updates tasks', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const todo = generateTodo(user);
|
||||
const todoValueBefore = todo.value;
|
||||
await Promise.all([todo.save(), user.save()]);
|
||||
|
||||
await cronWrapper(req, res);
|
||||
const todoFound = await Tasks.Task.findOne({ _id: todo._id });
|
||||
expect(todoFound.value).to.be.lessThan(todoValueBefore);
|
||||
});
|
||||
|
||||
it('updates large number of tasks', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const todo = generateTodo(user);
|
||||
const todoValueBefore = todo.value;
|
||||
const start = new Date();
|
||||
const saves = [todo.save(), user.save()];
|
||||
for (let i = 0; i < 200; i += 1) {
|
||||
const newTodo = generateTodo(user);
|
||||
newTodo.value = i;
|
||||
saves.push(newTodo.save());
|
||||
}
|
||||
await Promise.all(saves);
|
||||
|
||||
await cronWrapper(req, res);
|
||||
const duration = new Date() - start;
|
||||
expect(duration).to.be.lessThan(1000);
|
||||
const todoFound = await Tasks.Task.findOne({ _id: todo._id });
|
||||
expect(moment(start).isSame(user.lastCron, 'day'));
|
||||
expect(moment(start).isSame(user.auth.timestamps.loggedin, 'day'));
|
||||
expect(todoFound.value).to.be.lessThan(todoValueBefore);
|
||||
});
|
||||
|
||||
it('fails entire cron if one task is failing', async () => {
|
||||
const lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
user.lastCron = lastCron;
|
||||
const todo = generateTodo(user);
|
||||
const todoValueBefore = todo.value;
|
||||
const badTodo = generateTodo(user);
|
||||
badTodo.text = 'bad todo';
|
||||
badTodo.attribute = 'bad';
|
||||
await Promise.all([badTodo.save({ validateBeforeSave: false }), todo.save(), user.save()]);
|
||||
|
||||
try {
|
||||
await recoverCron(status, locals);
|
||||
throw new Error('no exception when user cannot be found');
|
||||
await cronWrapper(req, res);
|
||||
} catch (err) {
|
||||
expect(err.message).to.eql(`User ${locals.user._id} not found while recovering.`);
|
||||
expect(err).to.exist;
|
||||
}
|
||||
const todoFound = await Tasks.Task.findOne({ _id: todo._id });
|
||||
expect(moment(lastCron).isSame(user.lastCron, 'day'));
|
||||
expect(todoFound.value).to.be.equal(todoValueBefore);
|
||||
});
|
||||
|
||||
it('applies quest progress', async () => {
|
||||
const hpBefore = user.stats.hp;
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const daily = generateDaily(user);
|
||||
daily.startDate = moment(new Date()).subtract({ days: 2 });
|
||||
await daily.save();
|
||||
|
||||
const questKey = 'dilatory';
|
||||
user.party.quest.key = questKey;
|
||||
|
||||
const party = new Group({
|
||||
type: 'party',
|
||||
name: generateUUID(),
|
||||
leader: user._id,
|
||||
});
|
||||
party.quest.members[user._id] = true;
|
||||
party.quest.key = questKey;
|
||||
await party.save();
|
||||
|
||||
user.party._id = party._id;
|
||||
await user.save();
|
||||
|
||||
party.startQuest(user);
|
||||
|
||||
await cronWrapper(req, res);
|
||||
const updatedUser = await User.findOne({ _id: user._id });
|
||||
expect(updatedUser.stats.hp).to.be.lessThan(hpBefore);
|
||||
});
|
||||
|
||||
it('cronSignature less than 5 minutes ago should error', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const now = new Date();
|
||||
await User.updateOne({
|
||||
_id: user._id,
|
||||
}, {
|
||||
$set: {
|
||||
_cronSignature: now.getTime() - CRON_TIMEOUT_WAIT + CRON_TIMEOUT_UNIT,
|
||||
},
|
||||
}).exec();
|
||||
await user.save();
|
||||
try {
|
||||
await cronWrapper(req, res);
|
||||
} catch (err) {
|
||||
expect(err).to.exist;
|
||||
}
|
||||
});
|
||||
|
||||
it('increases status.times count and reruns up to 4 times', async () => {
|
||||
execStub.returns(Promise.resolve({ _cronSignature: 'RUNNING_CRON' }));
|
||||
execStub.onCall(4).returns(Promise.resolve({ _cronSignature: 'NOT_RUNNING' }));
|
||||
it('cronSignature longer than an hour ago should allow cron', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const now = new Date();
|
||||
await User.updateOne({
|
||||
_id: user._id,
|
||||
}, {
|
||||
$set: {
|
||||
_cronSignature: now.getTime() - CRON_TIMEOUT_WAIT - CRON_TIMEOUT_UNIT,
|
||||
},
|
||||
}).exec();
|
||||
await user.save();
|
||||
|
||||
await recoverCron(status, locals);
|
||||
|
||||
expect(status.times).to.eql(4);
|
||||
expect(locals.user).to.eql({ _cronSignature: 'NOT_RUNNING' });
|
||||
await cronWrapper(req, res);
|
||||
expect(moment(now).isSame(user.auth.timestamps.loggedin, 'day'));
|
||||
expect(user._cronSignature).to.be.equal('NOT_RUNNING');
|
||||
});
|
||||
|
||||
it('throws an error if recoverCron runs 5 times', async () => {
|
||||
execStub.returns(Promise.resolve({ _cronSignature: 'RUNNING_CRON' }));
|
||||
it('cron should not run more than once', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
await user.save();
|
||||
|
||||
try {
|
||||
await recoverCron(status, locals);
|
||||
throw new Error('no exception when recoverCron runs 5 times');
|
||||
} catch (err) {
|
||||
expect(status.times).to.eql(5);
|
||||
expect(err.message).to.eql(`Impossible to recover from cron for user ${locals.user._id}.`);
|
||||
}
|
||||
const result = await Promise.allSettled([
|
||||
cronWrapper(req, res),
|
||||
cronWrapper(req, res),
|
||||
new Promise((resolve, reject) => {
|
||||
setTimeout(async () => {
|
||||
try {
|
||||
const runResult = await cronWrapper(req, res);
|
||||
if (runResult !== null) {
|
||||
reject(new Error('cron ran more than once'));
|
||||
} else {
|
||||
resolve();
|
||||
}
|
||||
} catch (err) {
|
||||
reject(err);
|
||||
}
|
||||
}, 200);
|
||||
}),
|
||||
]);
|
||||
|
||||
expect(result.filter(r => r.status === 'fulfilled')).to.have.lengthOf(2);
|
||||
expect(result.filter(r => r.status === 'rejected')).to.have.lengthOf(1);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -171,23 +171,23 @@ describe('emails', () => {
|
||||
expect(got.post).not.to.be.called;
|
||||
});
|
||||
|
||||
it('throws error when mail target is only a string', () => {
|
||||
it('throws error when mail target is only a string', async () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = 'my email';
|
||||
|
||||
expect(sendTxn(mailingInfo, emailType)).to.throw;
|
||||
await expect(sendTxn(mailingInfo, emailType)).to.be.rejectedWith('Argument Error mailingInfoArray: does not contain email or _id');
|
||||
});
|
||||
|
||||
it('throws error when mail target has no _id or email', () => {
|
||||
it('throws error when mail target has no _id or email', async () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
|
||||
};
|
||||
|
||||
expect(sendTxn(mailingInfo, emailType)).to.throw;
|
||||
await expect(sendTxn(mailingInfo, emailType)).to.be.rejectedWith('Argument Error mailingInfoArray: does not contain email or _id');
|
||||
});
|
||||
|
||||
it('throws error when variables not an array', () => {
|
||||
it('throws error when variables not an array', async () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
name: 'my name',
|
||||
@@ -195,9 +195,10 @@ describe('emails', () => {
|
||||
};
|
||||
const variables = {};
|
||||
|
||||
expect(sendTxn(mailingInfo, emailType, variables)).to.throw;
|
||||
await expect(sendTxn(mailingInfo, emailType, variables)).to.be.rejectedWith('Argument Error variables: is not an array');
|
||||
});
|
||||
it('throws error when variables array not contain name/content', () => {
|
||||
|
||||
it('throws error when variables array not contain name/content', async () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
name: 'my name',
|
||||
@@ -209,8 +210,9 @@ describe('emails', () => {
|
||||
},
|
||||
];
|
||||
|
||||
expect(sendTxn(mailingInfo, emailType, variables)).to.throw;
|
||||
await expect(sendTxn(mailingInfo, emailType, variables)).to.be.rejectedWith('Argument Error variables: does not contain name or content');
|
||||
});
|
||||
|
||||
it('throws no error when variables array contain name but no content', () => {
|
||||
const emailType = 'an email type';
|
||||
const mailingInfo = {
|
||||
|
||||
@@ -1,5 +1,4 @@
|
||||
import os from 'os';
|
||||
import nconf from 'nconf';
|
||||
import requireAgain from 'require-again';
|
||||
|
||||
const pathToMongoLib = '../../../../website/server/libs/mongodb';
|
||||
@@ -29,22 +28,4 @@ describe('mongodb', () => {
|
||||
expect(string).to.equal('mongodb://hostname:3030');
|
||||
});
|
||||
});
|
||||
|
||||
describe('getDefaultConnectionOptions', () => {
|
||||
it('returns development config when IS_PROD is false', () => {
|
||||
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(false);
|
||||
const mongoLibOverride = requireAgain(pathToMongoLib);
|
||||
|
||||
const options = mongoLibOverride.getDefaultConnectionOptions();
|
||||
expect(options).to.have.all.keys(['useNewUrlParser', 'useUnifiedTopology']);
|
||||
});
|
||||
|
||||
it('returns production config when IS_PROD is true', () => {
|
||||
sandbox.stub(nconf, 'get').withArgs('IS_PROD').returns(true);
|
||||
const mongoLibOverride = requireAgain(pathToMongoLib);
|
||||
|
||||
const options = mongoLibOverride.getDefaultConnectionOptions();
|
||||
expect(options).to.have.all.keys(['useNewUrlParser', 'useUnifiedTopology']);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,332 +0,0 @@
|
||||
import moment from 'moment';
|
||||
import { v4 as generateUUID } from 'uuid';
|
||||
import {
|
||||
generateRes,
|
||||
generateReq,
|
||||
generateTodo,
|
||||
generateDaily,
|
||||
} from '../../../helpers/api-unit.helper';
|
||||
import cronMiddleware from '../../../../website/server/middlewares/cron';
|
||||
import { model as User } from '../../../../website/server/models/user';
|
||||
import { model as Group } from '../../../../website/server/models/group';
|
||||
import * as Tasks from '../../../../website/server/models/task';
|
||||
import * as analyticsService from '../../../../website/server/libs/analyticsService';
|
||||
import * as cronLib from '../../../../website/server/libs/cron';
|
||||
|
||||
const CRON_TIMEOUT_WAIT = new Date(60 * 60 * 1000).getTime();
|
||||
const CRON_TIMEOUT_UNIT = new Date(60 * 1000).getTime();
|
||||
|
||||
describe('cron middleware', () => {
|
||||
let res; let
|
||||
req;
|
||||
let user;
|
||||
|
||||
beforeEach(async () => {
|
||||
res = generateRes();
|
||||
req = generateReq();
|
||||
user = await res.locals.user.save();
|
||||
res.analytics = analyticsService;
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
sandbox.restore();
|
||||
});
|
||||
|
||||
it('calls next when user is not attached', done => {
|
||||
res.locals.user = null;
|
||||
cronMiddleware(req, res, done);
|
||||
});
|
||||
|
||||
it('calls next when days have not been missed', done => {
|
||||
cronMiddleware(req, res, done);
|
||||
});
|
||||
|
||||
it('should clear todos older than 30 days for free users', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const task = generateTodo(user);
|
||||
task.dateCompleted = moment(new Date()).subtract({ days: 31 });
|
||||
task.completed = true;
|
||||
await task.save();
|
||||
await user.save();
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
|
||||
Tasks.Task.findOne({ _id: task }).then(foundTask => {
|
||||
expect(foundTask).to.not.exist;
|
||||
resolve();
|
||||
});
|
||||
|
||||
return null;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should not clear todos older than 30 days for subscribed users', async () => {
|
||||
user.purchased.plan.customerId = 'subscribedId';
|
||||
user.purchased.plan.dateUpdated = moment('012013', 'MMYYYY');
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const task = generateTodo(user);
|
||||
task.dateCompleted = moment(new Date()).subtract({ days: 31 });
|
||||
task.completed = true;
|
||||
await task.save();
|
||||
await user.save();
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
Tasks.Task.findOne({ _id: task }).then(foundTask => {
|
||||
expect(foundTask).to.exist;
|
||||
return resolve();
|
||||
});
|
||||
return null;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should clear todos older than 90 days for subscribed users', async () => {
|
||||
user.purchased.plan.customerId = 'subscribedId';
|
||||
user.purchased.plan.dateUpdated = moment('012013', 'MMYYYY');
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
|
||||
const task = generateTodo(user);
|
||||
task.dateCompleted = moment(new Date()).subtract({ days: 91 });
|
||||
task.completed = true;
|
||||
await task.save();
|
||||
await user.save();
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
Tasks.Task.findOne({ _id: task }).then(foundTask => {
|
||||
expect(foundTask).to.not.exist;
|
||||
return resolve();
|
||||
});
|
||||
return null;
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('should call next if user was not modified after cron', async () => {
|
||||
const hpBefore = user.stats.hp;
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
await user.save();
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
expect(hpBefore).to.equal(user.stats.hp);
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('runs cron if previous cron was incomplete', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 1 });
|
||||
user.auth.timestamps.loggedin = moment(new Date()).subtract({ days: 4 });
|
||||
const now = new Date();
|
||||
await user.save();
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
expect(moment(now).isSame(user.lastCron, 'day'));
|
||||
expect(moment(now).isSame(user.auth.timestamps.loggedin, 'day'));
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('updates user.auth.timestamps.loggedin and lastCron', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const now = new Date();
|
||||
await user.save();
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
expect(moment(now).isSame(user.lastCron, 'day'));
|
||||
expect(moment(now).isSame(user.auth.timestamps.loggedin, 'day'));
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('does damage for missing dailies', async () => {
|
||||
const hpBefore = user.stats.hp;
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const daily = generateDaily(user);
|
||||
daily.startDate = moment(new Date()).subtract({ days: 2 });
|
||||
await daily.save();
|
||||
await user.save();
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
return User.findOne({ _id: user._id }).then(updatedUser => {
|
||||
expect(updatedUser.stats.hp).to.be.lessThan(hpBefore);
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('updates tasks', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const todo = generateTodo(user);
|
||||
const todoValueBefore = todo.value;
|
||||
await Promise.all([todo.save(), user.save()]);
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
return Tasks.Task.findOne({ _id: todo._id }).then(todoFound => {
|
||||
expect(todoFound.value).to.be.lessThan(todoValueBefore);
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('applies quest progress', async () => {
|
||||
const hpBefore = user.stats.hp;
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const daily = generateDaily(user);
|
||||
daily.startDate = moment(new Date()).subtract({ days: 2 });
|
||||
await daily.save();
|
||||
|
||||
const questKey = 'dilatory';
|
||||
user.party.quest.key = questKey;
|
||||
|
||||
const party = new Group({
|
||||
type: 'party',
|
||||
name: generateUUID(),
|
||||
leader: user._id,
|
||||
});
|
||||
party.quest.members[user._id] = true;
|
||||
party.quest.key = questKey;
|
||||
await party.save();
|
||||
|
||||
user.party._id = party._id;
|
||||
await user.save();
|
||||
|
||||
party.startQuest(user);
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
return User.findOne({ _id: user._id }).then(updatedUser => {
|
||||
expect(updatedUser.stats.hp).to.be.lessThan(hpBefore);
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('recovers from failed cron and does not error when user is already cronning', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
await user.save();
|
||||
|
||||
const updatedUser = user.toObject();
|
||||
updatedUser.matchedCount = 0;
|
||||
|
||||
sandbox.spy(cronLib, 'recoverCron');
|
||||
|
||||
sandbox.stub(User, 'updateOne')
|
||||
.withArgs({
|
||||
_id: user._id,
|
||||
$or: [
|
||||
{ _cronSignature: 'NOT_RUNNING' },
|
||||
{ _cronSignature: { $lt: sinon.match.number } },
|
||||
],
|
||||
})
|
||||
.returns({
|
||||
exec () {
|
||||
return Promise.resolve(updatedUser);
|
||||
},
|
||||
});
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
expect(cronLib.recoverCron).to.be.calledOnce;
|
||||
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('cronSignature less than an hour ago should error', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const now = new Date();
|
||||
await User.updateOne({
|
||||
_id: user._id,
|
||||
}, {
|
||||
$set: {
|
||||
_cronSignature: now.getTime() - CRON_TIMEOUT_WAIT + CRON_TIMEOUT_UNIT,
|
||||
},
|
||||
}).exec();
|
||||
await user.save();
|
||||
const expectedErrMessage = `Impossible to recover from cron for user ${user._id}.`;
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (!err) return reject(new Error('Cron should have failed.'));
|
||||
expect(err.message).to.be.equal(expectedErrMessage);
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('cronSignature longer than an hour ago should allow cron', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
const now = new Date();
|
||||
await User.updateOne({
|
||||
_id: user._id,
|
||||
}, {
|
||||
$set: {
|
||||
_cronSignature: now.getTime() - CRON_TIMEOUT_WAIT - CRON_TIMEOUT_UNIT,
|
||||
},
|
||||
}).exec();
|
||||
await user.save();
|
||||
|
||||
await new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
expect(moment(now).isSame(user.auth.timestamps.loggedin, 'day'));
|
||||
expect(user._cronSignature).to.be.equal('NOT_RUNNING');
|
||||
return resolve();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
it('cron should not run more than once', async () => {
|
||||
user.lastCron = moment(new Date()).subtract({ days: 2 });
|
||||
await user.save();
|
||||
|
||||
sandbox.spy(cronLib, 'cron');
|
||||
|
||||
await Promise.all([new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
return resolve();
|
||||
});
|
||||
}), new Promise((resolve, reject) => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
return resolve();
|
||||
});
|
||||
}), new Promise((resolve, reject) => {
|
||||
setTimeout(() => {
|
||||
cronMiddleware(req, res, err => {
|
||||
if (err) return reject(err);
|
||||
return resolve();
|
||||
});
|
||||
}, 400);
|
||||
}),
|
||||
]);
|
||||
|
||||
expect(cronLib.cron).to.be.calledOnce;
|
||||
});
|
||||
});
|
||||
@@ -10,6 +10,7 @@ describe('GET /heroes/:heroId', () => {
|
||||
const heroFields = [
|
||||
'_id', 'id', 'auth', 'balance', 'contributor', 'flags', 'items',
|
||||
'lastCron', 'party', 'preferences', 'profile', 'purchased', 'secret', 'achievements',
|
||||
'stats',
|
||||
];
|
||||
|
||||
before(async () => {
|
||||
|
||||
@@ -11,6 +11,7 @@ describe('PUT /heroes/:heroId', () => {
|
||||
const heroFields = [
|
||||
'_id', 'auth', 'balance', 'contributor', 'flags', 'items', 'lastCron',
|
||||
'party', 'preferences', 'profile', 'purchased', 'secret', 'permissions', 'achievements',
|
||||
'stats',
|
||||
];
|
||||
|
||||
before(async () => {
|
||||
|
||||
@@ -101,34 +101,6 @@ describe('GET /tasks/user', () => {
|
||||
expect(allCompletedTodos[allCompletedTodos.length - 1].text).to.equal('todo to complete 2');
|
||||
});
|
||||
|
||||
it('returns only some completed todos if req.query.type is "completedTodos" or "_allCompletedTodos"', async () => {
|
||||
const LIMIT = 30;
|
||||
const numberOfTodos = LIMIT + 1;
|
||||
const todosInput = [];
|
||||
|
||||
for (let i = 0; i < numberOfTodos; i += 1) {
|
||||
todosInput[i] = { text: `todo to complete ${i}`, type: 'todo' };
|
||||
}
|
||||
const todos = await user.post('/tasks/user', todosInput);
|
||||
await user.sync();
|
||||
const initialTodoCount = user.tasksOrder.todos.length;
|
||||
|
||||
for (let i = 0; i < numberOfTodos; i += 1) {
|
||||
const id = todos[i]._id;
|
||||
|
||||
await user.post(`/tasks/${id}/score/up`); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
await user.sync();
|
||||
|
||||
expect(user.tasksOrder.todos.length).to.equal(initialTodoCount - numberOfTodos);
|
||||
|
||||
const completedTodos = await user.get('/tasks/user?type=completedTodos');
|
||||
expect(completedTodos.length).to.equal(LIMIT);
|
||||
|
||||
const allCompletedTodos = await user.get('/tasks/user?type=_allCompletedTodos');
|
||||
expect(allCompletedTodos.length).to.equal(numberOfTodos);
|
||||
});
|
||||
|
||||
it('returns dailies with isDue for the date specified', async () => {
|
||||
// @TODO Add required format
|
||||
const startDate = moment().subtract('1', 'days').toISOString();
|
||||
|
||||
@@ -190,7 +190,7 @@ describe('Content Schedule', () => {
|
||||
const date = new Date('2024-04-15');
|
||||
const matchers = getAllScheduleMatchingGroups(date);
|
||||
expect(matchers.premiumHatchingPotions).to.exist;
|
||||
expect(matchers.premiumHatchingPotions.items.length).to.equal(5);
|
||||
expect(matchers.premiumHatchingPotions.items.length).to.equal(6);
|
||||
expect(matchers.premiumHatchingPotions.items.indexOf('Veggie')).to.not.equal(-1);
|
||||
expect(matchers.premiumHatchingPotions.items.indexOf('Porcelain')).to.not.equal(-1);
|
||||
});
|
||||
|
||||
@@ -74,15 +74,10 @@ export async function getDocument (collectionName, doc) {
|
||||
}
|
||||
|
||||
before(done => {
|
||||
mongoose.connection.on('open', err => {
|
||||
if (err) return done(err);
|
||||
return resetHabiticaDB()
|
||||
.then(() => {
|
||||
done();
|
||||
})
|
||||
.catch(error => {
|
||||
throw error;
|
||||
});
|
||||
mongoose.connection.once('open', async err => {
|
||||
if (err) throw err;
|
||||
await resetHabiticaDB();
|
||||
done();
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
Generated
+53
-49
@@ -137,12 +137,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/code-frame": {
|
||||
"version": "7.23.5",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz",
|
||||
"integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==",
|
||||
"version": "7.26.2",
|
||||
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz",
|
||||
"integrity": "sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/highlight": "^7.23.4",
|
||||
"chalk": "^2.4.2"
|
||||
"@babel/helper-validator-identifier": "^7.25.9",
|
||||
"js-tokens": "^4.0.0",
|
||||
"picocolors": "^1.0.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -445,17 +447,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-string-parser": {
|
||||
"version": "7.23.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
|
||||
"integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz",
|
||||
"integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helper-validator-identifier": {
|
||||
"version": "7.22.20",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
|
||||
"integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
|
||||
"version": "7.25.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz",
|
||||
"integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
@@ -482,13 +486,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/helpers": {
|
||||
"version": "7.23.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.6.tgz",
|
||||
"integrity": "sha512-wCfsbN4nBidDRhpDhvcKlzHWCTlgJYUUdSJfzXb2NuBssDSIjc3xcb+znA7l+zYsFljAcGM0aFkN40cR3lXiGA==",
|
||||
"version": "7.26.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.26.10.tgz",
|
||||
"integrity": "sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/template": "^7.22.15",
|
||||
"@babel/traverse": "^7.23.6",
|
||||
"@babel/types": "^7.23.6"
|
||||
"@babel/template": "^7.26.9",
|
||||
"@babel/types": "^7.26.10"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -508,9 +512,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/parser": {
|
||||
"version": "7.23.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz",
|
||||
"integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==",
|
||||
"version": "7.26.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.10.tgz",
|
||||
"integrity": "sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/types": "^7.26.10"
|
||||
},
|
||||
"bin": {
|
||||
"parser": "bin/babel-parser.js"
|
||||
},
|
||||
@@ -1773,9 +1781,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/runtime-corejs2": {
|
||||
"version": "7.23.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.23.6.tgz",
|
||||
"integrity": "sha512-k8QKC2DmBqkwJDOLa4biAZjoCGPQIaAoA1HvHtZ+gR2E9AauudikJOB34h4ETEavN5UG21X0KPdM3IvBRxM0CA==",
|
||||
"version": "7.26.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.26.10.tgz",
|
||||
"integrity": "sha512-JfoPiD7f/vvd/PaOfu5cr9CyzwDMPg4T0nX3MQr6IgTq49DhjvUcmjmjA7j6+xih1Evq+QKZnge1SoIlYozv/Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"core-js": "^2.6.12",
|
||||
"regenerator-runtime": "^0.14.0"
|
||||
@@ -1792,13 +1801,14 @@
|
||||
"hasInstallScript": true
|
||||
},
|
||||
"node_modules/@babel/template": {
|
||||
"version": "7.22.15",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz",
|
||||
"integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==",
|
||||
"version": "7.26.9",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.26.9.tgz",
|
||||
"integrity": "sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/code-frame": "^7.22.13",
|
||||
"@babel/parser": "^7.22.15",
|
||||
"@babel/types": "^7.22.15"
|
||||
"@babel/code-frame": "^7.26.2",
|
||||
"@babel/parser": "^7.26.9",
|
||||
"@babel/types": "^7.26.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -1825,13 +1835,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/types": {
|
||||
"version": "7.23.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
|
||||
"integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
|
||||
"version": "7.26.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.10.tgz",
|
||||
"integrity": "sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/helper-string-parser": "^7.23.4",
|
||||
"@babel/helper-validator-identifier": "^7.22.20",
|
||||
"to-fast-properties": "^2.0.0"
|
||||
"@babel/helper-string-parser": "^7.25.9",
|
||||
"@babel/helper-validator-identifier": "^7.25.9"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
@@ -7650,9 +7660,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/http-proxy-middleware": {
|
||||
"version": "2.0.6",
|
||||
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz",
|
||||
"integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==",
|
||||
"version": "2.0.9",
|
||||
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.9.tgz",
|
||||
"integrity": "sha512-c1IyJYLYppU574+YI7R4QyX2ystMtVXZwIdzazUIPIJsHuWNd+mho2j+bKoHftndicGj9yh+xjd+l0yj7VeT1Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@types/http-proxy": "^1.17.8",
|
||||
"http-proxy": "^1.18.1",
|
||||
@@ -11856,9 +11867,10 @@
|
||||
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA=="
|
||||
},
|
||||
"node_modules/serialize-javascript": {
|
||||
"version": "6.0.1",
|
||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz",
|
||||
"integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==",
|
||||
"version": "6.0.2",
|
||||
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz",
|
||||
"integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
|
||||
"license": "BSD-3-Clause",
|
||||
"dependencies": {
|
||||
"randombytes": "^2.1.0"
|
||||
}
|
||||
@@ -12788,14 +12800,6 @@
|
||||
"node": ">=0.6.0"
|
||||
}
|
||||
},
|
||||
"node_modules/to-fast-properties": {
|
||||
"version": "2.0.0",
|
||||
"resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
|
||||
"integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
|
||||
"engines": {
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/to-regex-range": {
|
||||
"version": "5.0.1",
|
||||
"resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
|
||||
|
||||
@@ -22,7 +22,8 @@
|
||||
height: 219px;
|
||||
}
|
||||
|
||||
.Pet_HatchingPotion_Dessert, .Pet_HatchingPotion_Veggie, .Pet_HatchingPotion_Windup, .Pet_HatchingPotion_VirtualPet, .Pet_HatchingPotion_Fungi {
|
||||
.Pet_HatchingPotion_Dessert, .Pet_HatchingPotion_Veggie, .Pet_HatchingPotion_Windup,
|
||||
.Pet_HatchingPotion_VirtualPet, .Pet_HatchingPotion_Fungi, .Pet_HatchingPotion_Cryptid {
|
||||
width: 68px;
|
||||
height: 68px;
|
||||
}
|
||||
@@ -47,6 +48,10 @@
|
||||
background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Fungi.gif") no-repeat;
|
||||
}
|
||||
|
||||
.Pet_HatchingPotion_Cryptid {
|
||||
background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Cryptid.gif") no-repeat;
|
||||
}
|
||||
|
||||
.Gems {
|
||||
display:inline-block;
|
||||
margin-right:5px;
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -19,7 +19,7 @@
|
||||
top: -16px !important;
|
||||
}
|
||||
|
||||
$foolPets: Veggie, Dessert, VirtualPet, TeaShop, Fungi;
|
||||
$foolPets: Veggie, Dessert, VirtualPet, TeaShop, Fungi, Cryptid;
|
||||
|
||||
@each $foolPet in $foolPets {
|
||||
.Pet.Pet-FlyingPig-#{$foolPet} {
|
||||
|
||||
@@ -92,8 +92,6 @@ export default {
|
||||
params: { userIdentifier },
|
||||
}).catch(failure => {
|
||||
if (isNavigationFailure(failure, NavigationFailureType.duplicated)) {
|
||||
// the admin has requested that the same user be displayed again so reload the page
|
||||
// (e.g., if they changed their mind about changes they were making)
|
||||
this.$router.go();
|
||||
}
|
||||
});
|
||||
@@ -101,14 +99,16 @@ export default {
|
||||
|
||||
async loadUser (userIdentifier) {
|
||||
const id = userIdentifier || this.user._id;
|
||||
|
||||
this.$router.push({
|
||||
if (this.$router.currentRoute.name === 'adminPanelUser') {
|
||||
await this.$router.push({
|
||||
name: 'adminPanel',
|
||||
});
|
||||
}
|
||||
await this.$router.push({
|
||||
name: 'adminPanelUser',
|
||||
params: { userIdentifier: id },
|
||||
}).catch(failure => {
|
||||
if (isNavigationFailure(failure, NavigationFailureType.duplicated)) {
|
||||
// the admin has requested that the same user be displayed again so reload the page
|
||||
// (e.g., if they changed their mind about changes they were making)
|
||||
this.$router.go();
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,6 +1,15 @@
|
||||
import VueRouter from 'vue-router';
|
||||
|
||||
const { isNavigationFailure, NavigationFailureType } = VueRouter;
|
||||
|
||||
export default {
|
||||
methods: {
|
||||
async saveHero ({ hero, msg = 'User', clearData }) {
|
||||
async saveHero ({
|
||||
hero,
|
||||
msg = 'User',
|
||||
clearData,
|
||||
reloadData,
|
||||
}) {
|
||||
await this.$store.dispatch('hall:updateHero', { heroDetails: hero });
|
||||
await this.$store.dispatch('snackbars:add', {
|
||||
title: '',
|
||||
@@ -14,6 +23,20 @@ export default {
|
||||
// The admin should re-fetch the data if they need to keep working on that user.
|
||||
this.$emit('clear-data');
|
||||
this.$router.push({ name: 'adminPanel' });
|
||||
} else if (reloadData) {
|
||||
if (this.$router.currentRoute.name === 'adminPanelUser') {
|
||||
await this.$router.push({
|
||||
name: 'adminPanel',
|
||||
});
|
||||
}
|
||||
await this.$router.push({
|
||||
name: 'adminPanelUser',
|
||||
params: { userIdentifier: hero._id },
|
||||
}).catch(failure => {
|
||||
if (isNavigationFailure(failure, NavigationFailureType.duplicated)) {
|
||||
this.$router.go();
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
},
|
||||
|
||||
@@ -7,7 +7,11 @@
|
||||
>
|
||||
Could not find any matching users.
|
||||
</div>
|
||||
<loading-spinner class="mx-auto mb-2" dark-color="true" v-if="isSearching" />
|
||||
<loading-spinner
|
||||
v-if="isSearching"
|
||||
class="mx-auto mb-2"
|
||||
dark-color="true"
|
||||
/>
|
||||
<div
|
||||
v-if="users.length > 0"
|
||||
class="list-group"
|
||||
@@ -59,6 +63,10 @@ export default {
|
||||
components: {
|
||||
LoadingSpinner,
|
||||
},
|
||||
beforeRouteUpdate (to, from, next) {
|
||||
this.userIdentifier = to.params.userIdentifier;
|
||||
next();
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
userIdentifier: '',
|
||||
@@ -70,10 +78,6 @@ export default {
|
||||
computed: {
|
||||
...mapState({ user: 'user.data' }),
|
||||
},
|
||||
beforeRouteUpdate (to, from, next) {
|
||||
this.userIdentifier = to.params.userIdentifier;
|
||||
next();
|
||||
},
|
||||
watch: {
|
||||
userIdentifier () {
|
||||
this.isSearching = true;
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
<li
|
||||
v-for="item in achievements"
|
||||
:key="item.path"
|
||||
v-b-tooltip.hover="item.notes"
|
||||
>
|
||||
<form @submit.prevent="saveItem(item)">
|
||||
<span
|
||||
@@ -27,7 +28,7 @@
|
||||
{{ item.value }}
|
||||
</span>
|
||||
:
|
||||
{{ itemText(item) }}
|
||||
{{ item.text || item.key }} - <i> {{ item.key }} </i>
|
||||
</span>
|
||||
|
||||
<div
|
||||
@@ -68,6 +69,7 @@
|
||||
<li
|
||||
v-for="item in nestedAchievements[achievementType]"
|
||||
:key="item.path"
|
||||
v-b-tooltip.hover="item.notes"
|
||||
>
|
||||
<form @submit.prevent="saveItem(item)">
|
||||
<span
|
||||
@@ -78,7 +80,7 @@
|
||||
{{ item.value }}
|
||||
</span>
|
||||
:
|
||||
{{ itemText(item) }}
|
||||
{{ item.text || item.key }} - <i> {{ item.key }} </i>
|
||||
</span>
|
||||
|
||||
<div
|
||||
@@ -143,79 +145,28 @@ function getText (achievementItem) {
|
||||
}
|
||||
const { titleKey } = achievementItem;
|
||||
if (titleKey !== undefined) {
|
||||
return i18n.t(titleKey, 'en');
|
||||
return i18n.t(titleKey);
|
||||
}
|
||||
const { singularTitleKey } = achievementItem;
|
||||
if (singularTitleKey !== undefined) {
|
||||
return i18n.t(singularTitleKey, 'en');
|
||||
return i18n.t(singularTitleKey);
|
||||
}
|
||||
return achievementItem.key;
|
||||
}
|
||||
|
||||
function collateItemData (self) {
|
||||
const achievements = [];
|
||||
const nestedAchievements = {};
|
||||
const basePath = 'achievements';
|
||||
const ownedAchievements = self.hero.achievements;
|
||||
const allAchievements = content.achievements;
|
||||
|
||||
for (const key of Object.keys(ownedAchievements)) {
|
||||
const value = ownedAchievements[key];
|
||||
if (typeof value === 'object') {
|
||||
nestedAchievements[key] = [];
|
||||
for (const nestedKey of Object.keys(value)) {
|
||||
const valueIsInteger = self.integerTypes.includes(key);
|
||||
let text = nestedKey;
|
||||
if (allAchievements[key] && allAchievements[key][nestedKey]) {
|
||||
text = getText(allAchievements[key][nestedKey]);
|
||||
}
|
||||
nestedAchievements[key].push({
|
||||
key: nestedKey,
|
||||
text,
|
||||
achievementType: key,
|
||||
modified: false,
|
||||
path: `${basePath}.${key}.${nestedKey}`,
|
||||
value: value[nestedKey],
|
||||
valueIsInteger,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
const valueIsInteger = self.integerTypes.includes(key);
|
||||
achievements.push({
|
||||
key,
|
||||
text: getText(allAchievements[key]),
|
||||
modified: false,
|
||||
path: `${basePath}.${key}`,
|
||||
value: ownedAchievements[key],
|
||||
valueIsInteger,
|
||||
});
|
||||
}
|
||||
function getNotes (achievementItem, count) {
|
||||
if (achievementItem === undefined) {
|
||||
return '';
|
||||
}
|
||||
|
||||
for (const key of Object.keys(allAchievements)) {
|
||||
if (key !== '' && !key.endsWith('UltimateGear') && !key.endsWith('Quest')) {
|
||||
if (ownedAchievements[key] === undefined) {
|
||||
const valueIsInteger = self.integerTypes.includes(key);
|
||||
achievements.push({
|
||||
key,
|
||||
text: getText(allAchievements[key]),
|
||||
modified: false,
|
||||
path: `${basePath}.${key}`,
|
||||
value: valueIsInteger ? 0 : false,
|
||||
valueIsInteger,
|
||||
neverOwned: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
const { textKey } = achievementItem;
|
||||
if (textKey !== undefined) {
|
||||
return i18n.t(textKey, { count });
|
||||
}
|
||||
|
||||
self.achievements = achievements;
|
||||
self.nestedAchievements = nestedAchievements;
|
||||
}
|
||||
|
||||
function resetData (self) {
|
||||
collateItemData(self);
|
||||
self.nestedAchievementKeys.forEach(itemType => { self.expandItemType[itemType] = false; });
|
||||
const { singularTextKey } = achievementItem;
|
||||
if (singularTextKey !== undefined) {
|
||||
return i18n.t(singularTextKey, { count });
|
||||
}
|
||||
return '';
|
||||
}
|
||||
|
||||
export default {
|
||||
@@ -241,26 +192,34 @@ export default {
|
||||
},
|
||||
nestedAchievementKeys: ['quests', 'ultimateGearSets'],
|
||||
integerTypes: ['streak', 'perfect', 'birthday', 'habiticaDays', 'habitSurveys', 'habitBirthdays',
|
||||
'valentine', 'congrats', 'shinySeed', 'goodluck', 'thankyou', 'seafoam', 'snowball', 'quests'],
|
||||
'valentine', 'congrats', 'shinySeed', 'goodluck', 'thankyou', 'seafoam', 'snowball', 'quests',
|
||||
'rebirths', 'rebirthLevel', 'greeting', 'spookySparkles', 'nye', 'costumeContests', 'congrats',
|
||||
'getwell', 'beastMasterCount', 'mountMasterCount', 'triadBingoCount',
|
||||
],
|
||||
cardTypes: ['greeting', 'birthday', 'valentine', 'goodluck', 'thankyou', 'greeting', 'nye',
|
||||
'congrats', 'getwell'],
|
||||
achievements: [],
|
||||
nestedAchievements: {},
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
resetCounter () {
|
||||
resetData(this);
|
||||
this.resetData();
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
resetData(this);
|
||||
this.resetData();
|
||||
},
|
||||
methods: {
|
||||
async saveItem (item) {
|
||||
// prepare the item's new value and path for being saved
|
||||
this.hero.achievementPath = item.path;
|
||||
this.hero.achievementVal = item.value;
|
||||
|
||||
await this.saveHero({ hero: this.hero, msg: item.path });
|
||||
await this.saveHero({
|
||||
hero: {
|
||||
_id: this.hero._id,
|
||||
achievementPath: item.path,
|
||||
achievementVal: item.value,
|
||||
},
|
||||
msg: item.path,
|
||||
});
|
||||
item.modified = false;
|
||||
},
|
||||
enableValueChange (item) {
|
||||
@@ -270,14 +229,84 @@ export default {
|
||||
item.value = !item.value;
|
||||
}
|
||||
},
|
||||
itemText (item) {
|
||||
if (item.key === 'npc') {
|
||||
return this.$t('npcAchievementName', { key: this.hero.backer && this.hero.backer.npc });
|
||||
resetData () {
|
||||
this.collateItemData();
|
||||
this.nestedAchievementKeys.forEach(itemType => { this.expandItemType[itemType] = false; });
|
||||
},
|
||||
collateItemData () {
|
||||
const achievements = [];
|
||||
const nestedAchievements = {};
|
||||
const basePath = 'achievements';
|
||||
const ownedAchievements = this.hero.achievements;
|
||||
const allAchievements = content.achievements;
|
||||
|
||||
const ownedKeys = Object.keys(ownedAchievements).sort();
|
||||
for (const key of ownedKeys) {
|
||||
const value = ownedAchievements[key];
|
||||
let contentKey = key;
|
||||
if (this.cardTypes.indexOf(key) !== -1) {
|
||||
contentKey += 'Cards';
|
||||
}
|
||||
if (typeof value === 'object') {
|
||||
nestedAchievements[key] = [];
|
||||
for (const nestedKey of Object.keys(value)) {
|
||||
const valueIsInteger = this.integerTypes.includes(key);
|
||||
let text = nestedKey;
|
||||
if (allAchievements[key] && allAchievements[key][contentKey]) {
|
||||
text = getText(allAchievements[key][contentKey]);
|
||||
}
|
||||
let notes = '';
|
||||
if (allAchievements[key] && allAchievements[key][contentKey]) {
|
||||
notes = getNotes(allAchievements[key][contentKey], ownedAchievements[key]);
|
||||
}
|
||||
nestedAchievements[key].push({
|
||||
key: nestedKey,
|
||||
text,
|
||||
notes,
|
||||
achievementType: key,
|
||||
modified: false,
|
||||
path: `${basePath}.${key}.${nestedKey}`,
|
||||
value: value[nestedKey],
|
||||
valueIsInteger,
|
||||
});
|
||||
}
|
||||
} else {
|
||||
const valueIsInteger = this.integerTypes.includes(key);
|
||||
achievements.push({
|
||||
key,
|
||||
text: getText(allAchievements[contentKey]),
|
||||
notes: getNotes(allAchievements[contentKey], ownedAchievements[key]),
|
||||
modified: false,
|
||||
path: `${basePath}.${key}`,
|
||||
value: ownedAchievements[key],
|
||||
valueIsInteger,
|
||||
});
|
||||
}
|
||||
}
|
||||
if (item.key === 'kickstarter') {
|
||||
return this.$t('kickstartName', { key: this.hero.backer && this.hero.backer.tier });
|
||||
|
||||
const allKeys = Object.keys(allAchievements).sort();
|
||||
|
||||
for (const key of allKeys) {
|
||||
if (key !== '' && !key.endsWith('UltimateGear') && !key.endsWith('Quest')) {
|
||||
const ownedKey = key.replace('Cards', '');
|
||||
if (ownedAchievements[ownedKey] === undefined) {
|
||||
const valueIsInteger = this.integerTypes.includes(ownedKey);
|
||||
achievements.push({
|
||||
key: ownedKey,
|
||||
text: getText(allAchievements[key]),
|
||||
notes: getNotes(allAchievements[key], 0),
|
||||
modified: false,
|
||||
path: `${basePath}.${ownedKey}`,
|
||||
value: valueIsInteger ? 0 : false,
|
||||
valueIsInteger,
|
||||
neverOwned: true,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
return item.text || item.key;
|
||||
|
||||
this.achievements = achievements;
|
||||
this.nestedAchievements = nestedAchievements;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -1,5 +1,12 @@
|
||||
<template>
|
||||
<form @submit.prevent="saveHero({ hero, msg: 'Contributor details', clearData: true })">
|
||||
<form
|
||||
@submit.prevent="saveHero({ hero: {
|
||||
_id: hero._id,
|
||||
contributor: hero.contributor,
|
||||
secret: hero.secret,
|
||||
permissions: hero.permissions,
|
||||
}, msg: 'Contributor details', clearData: true })"
|
||||
>
|
||||
<div class="card mt-2">
|
||||
<div class="card-header">
|
||||
<h3
|
||||
@@ -8,6 +15,12 @@
|
||||
@click="expand = !expand"
|
||||
>
|
||||
Contributor Details
|
||||
<b
|
||||
v-if="hasUnsavedChanges && !expand"
|
||||
class="text-warning float-right"
|
||||
>
|
||||
Unsaved changes
|
||||
</b>
|
||||
</h3>
|
||||
</div>
|
||||
<div
|
||||
@@ -104,13 +117,16 @@
|
||||
</div>
|
||||
<div
|
||||
v-if="expand"
|
||||
class="card-footer"
|
||||
class="card-footer d-flex align-items-center justify-content-between"
|
||||
>
|
||||
<input
|
||||
type="submit"
|
||||
value="Save"
|
||||
class="btn btn-primary mt-1"
|
||||
>
|
||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
||||
Unsaved changes
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -190,6 +206,10 @@ export default {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
hasUnsavedChanges: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
<template>
|
||||
<form @submit.prevent="saveHero({ hero, msg: 'Authentication' })">
|
||||
<form
|
||||
@submit.prevent="saveHero({ hero: {
|
||||
_id: hero._id,
|
||||
auth: hero.auth,
|
||||
preferences: hero.preferences,
|
||||
}, msg: 'Authentication' })"
|
||||
>
|
||||
<div class="card mt-2">
|
||||
<div class="card-header">
|
||||
<h3
|
||||
@@ -38,7 +44,10 @@
|
||||
<strong v-else>No</strong>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="cronError" class="form-group row">
|
||||
<div
|
||||
v-if="cronError"
|
||||
class="form-group row"
|
||||
>
|
||||
<label class="col-sm-3 col-form-label">lastCron value:</label>
|
||||
<strong>{{ hero.lastCron | formatDate }}</strong>
|
||||
<br>
|
||||
@@ -53,12 +62,12 @@
|
||||
<div class="col-sm-9 col-form-label">
|
||||
<strong>
|
||||
{{ hero.auth.timestamps.loggedin | formatDate }}</strong>
|
||||
<button
|
||||
<a
|
||||
class="btn btn-warning btn-sm ml-4"
|
||||
@click="resetCron()"
|
||||
>
|
||||
Reset Cron to Yesterday
|
||||
</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
@@ -110,13 +119,14 @@
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3 col-form-label">API Token</label>
|
||||
<div class="col-sm-9">
|
||||
<button
|
||||
<a
|
||||
href="#"
|
||||
value="Change API Token"
|
||||
class="btn btn-danger"
|
||||
@click="changeApiToken()"
|
||||
>
|
||||
Change API Token
|
||||
</button>
|
||||
</a>
|
||||
<div
|
||||
v-if="tokenModified"
|
||||
>
|
||||
@@ -268,13 +278,24 @@ export default {
|
||||
return false;
|
||||
},
|
||||
async changeApiToken () {
|
||||
this.hero.changeApiToken = true;
|
||||
await this.saveHero({ hero: this.hero, msg: 'API Token' });
|
||||
await this.saveHero({
|
||||
hero: {
|
||||
_id: this.hero._id,
|
||||
changeApiToken: true,
|
||||
},
|
||||
msg: 'API Token',
|
||||
});
|
||||
this.tokenModified = true;
|
||||
},
|
||||
resetCron () {
|
||||
this.hero.resetCron = true;
|
||||
this.saveHero({ hero: this.hero, msg: 'Last Cron', clearData: true });
|
||||
this.saveHero({
|
||||
hero: {
|
||||
_id: this.hero._id,
|
||||
resetCron: true,
|
||||
},
|
||||
msg: 'Last Cron',
|
||||
clearData: true,
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
:
|
||||
<span :class="{ ownedItem: !item.neverOwned }">{{ item.text }}</span>
|
||||
</span>
|
||||
{{ item.set }}
|
||||
- {{ itemType }}.{{item.key}} - <i> {{ item.set }}</i>
|
||||
|
||||
<div
|
||||
v-if="item.modified"
|
||||
@@ -232,11 +232,14 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
async saveItem (item) {
|
||||
// prepare the item's new value and path for being saved
|
||||
this.hero.purchasedPath = item.path;
|
||||
this.hero.purchasedVal = item.value;
|
||||
|
||||
await this.saveHero({ hero: this.hero, msg: item.path });
|
||||
await this.saveHero({
|
||||
hero: {
|
||||
_id: this.hero._id,
|
||||
purchasedPath: item.path,
|
||||
purchasedVal: item.value,
|
||||
},
|
||||
msg: item.path,
|
||||
});
|
||||
item.modified = false;
|
||||
},
|
||||
enableValueChange (item) {
|
||||
|
||||
@@ -15,10 +15,17 @@
|
||||
<privileges-and-gems
|
||||
:hero="hero"
|
||||
:reset-counter="resetCounter"
|
||||
:has-unsaved-changes="hasUnsavedChanges([hero.flags, unModifiedHero.flags],
|
||||
[hero.auth, unModifiedHero.auth],
|
||||
[hero.balance, unModifiedHero.balance],
|
||||
[hero.secret, unModifiedHero.secret])"
|
||||
/>
|
||||
|
||||
<subscription-and-perks
|
||||
:hero="hero"
|
||||
:group-plans="groupPlans"
|
||||
:has-unsaved-changes="hasUnsavedChanges([hero.purchased.plan,
|
||||
unModifiedHero.purchased.plan])"
|
||||
/>
|
||||
|
||||
<cron-and-auth
|
||||
@@ -29,6 +36,7 @@
|
||||
<user-profile
|
||||
:hero="hero"
|
||||
:reset-counter="resetCounter"
|
||||
:has-unsaved-changes="hasUnsavedChanges([hero.profile, unModifiedHero.profile])"
|
||||
/>
|
||||
|
||||
<party-and-quest
|
||||
@@ -47,6 +55,12 @@
|
||||
:preferences="hero.preferences"
|
||||
/>
|
||||
|
||||
<stats
|
||||
:hero="hero"
|
||||
:has-unsaved-changes="hasUnsavedChanges([hero.stats, unModifiedHero.stats])"
|
||||
:reset-counter="resetCounter"
|
||||
/>
|
||||
|
||||
<items-owned
|
||||
:hero="hero"
|
||||
:reset-counter="resetCounter"
|
||||
@@ -67,8 +81,18 @@
|
||||
:reset-counter="resetCounter"
|
||||
/>
|
||||
|
||||
<user-history
|
||||
:hero="hero"
|
||||
:reset-counter="resetCounter"
|
||||
/>
|
||||
|
||||
<contributor-details
|
||||
:hero="hero"
|
||||
:hasUnsavedChanges="hasUnsavedChanges(
|
||||
[hero.contributor, unModifiedHero.contributor],
|
||||
[hero.permissions, unModifiedHero.permissions],
|
||||
[hero.secret, unModifiedHero.secret],
|
||||
)"
|
||||
:reset-counter="resetCounter"
|
||||
@clear-data="clearData"
|
||||
/>
|
||||
@@ -109,6 +133,7 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import isEqualWith from 'lodash/isEqualWith';
|
||||
import BasicDetails from './basicDetails';
|
||||
import ItemsOwned from './itemsOwned';
|
||||
import CronAndAuth from './cronAndAuth';
|
||||
@@ -121,6 +146,8 @@ import Transactions from './transactions';
|
||||
import SubscriptionAndPerks from './subscriptionAndPerks';
|
||||
import CustomizationsOwned from './customizationsOwned.vue';
|
||||
import Achievements from './achievements.vue';
|
||||
import UserHistory from './userHistory.vue';
|
||||
import Stats from './stats.vue';
|
||||
|
||||
import { userStateMixin } from '../../../mixins/userState';
|
||||
|
||||
@@ -135,6 +162,8 @@ export default {
|
||||
PrivilegesAndGems,
|
||||
ContributorDetails,
|
||||
Transactions,
|
||||
UserHistory,
|
||||
Stats,
|
||||
SubscriptionAndPerks,
|
||||
UserProfile,
|
||||
Achievements,
|
||||
@@ -148,8 +177,10 @@ export default {
|
||||
return {
|
||||
userIdentifier: '',
|
||||
resetCounter: 0,
|
||||
unModifiedHero: {},
|
||||
hero: {},
|
||||
party: {},
|
||||
groupPlans: [],
|
||||
hasParty: false,
|
||||
partyNotExistError: false,
|
||||
adminHasPrivForParty: true,
|
||||
@@ -168,6 +199,7 @@ export default {
|
||||
},
|
||||
methods: {
|
||||
clearData () {
|
||||
this.unModifiedHero = {};
|
||||
this.hero = {};
|
||||
},
|
||||
|
||||
@@ -176,6 +208,7 @@ export default {
|
||||
this.$emit('changeUserIdentifier', id); // change user identifier in Admin Panel's form
|
||||
|
||||
this.hero = await this.$store.dispatch('hall:getHero', { uuid: id });
|
||||
this.unModifiedHero = JSON.parse(JSON.stringify(this.hero));
|
||||
|
||||
if (!this.hero.flags) {
|
||||
this.hero.flags = {
|
||||
@@ -206,8 +239,38 @@ export default {
|
||||
}
|
||||
}
|
||||
|
||||
if (this.hero.purchased.plan.planId === 'group_plan_auto') {
|
||||
try {
|
||||
this.groupPlans = await this.$store.dispatch('hall:getHeroGroupPlans', { heroId: this.hero._id });
|
||||
} catch (e) {
|
||||
this.groupPlans = [];
|
||||
}
|
||||
}
|
||||
|
||||
this.resetCounter += 1; // tell child components to reinstantiate from scratch
|
||||
},
|
||||
hasUnsavedChanges (...comparisons) {
|
||||
for (const index in comparisons) {
|
||||
if (index && comparisons[index]) {
|
||||
const objs = comparisons[index];
|
||||
const obj1 = objs[0];
|
||||
const obj2 = objs[1];
|
||||
if (!isEqualWith(obj1, obj2, (x, y) => {
|
||||
if (typeof x === 'object' && typeof y === 'object') {
|
||||
return undefined;
|
||||
}
|
||||
if (x === false && y === undefined) {
|
||||
// Special case for checkboxes
|
||||
return true;
|
||||
}
|
||||
return x == y; // eslint-disable-line eqeqeq
|
||||
})) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return false;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -269,16 +269,19 @@ export default {
|
||||
methods: {
|
||||
async saveItem (item) {
|
||||
// prepare the item's new value and path for being saved
|
||||
this.hero.itemPath = item.path;
|
||||
const toSave = {
|
||||
_id: this.hero._id,
|
||||
};
|
||||
toSave.itemPath = item.path;
|
||||
if (item.value === null) {
|
||||
this.hero.itemVal = 'null';
|
||||
toSave.itemVal = 'null';
|
||||
} else if (item.value === false) {
|
||||
this.hero.itemVal = 'false';
|
||||
toSave.itemVal = 'false';
|
||||
} else {
|
||||
this.hero.itemVal = item.value;
|
||||
toSave.itemVal = item.value;
|
||||
}
|
||||
|
||||
await this.saveHero({ hero: this.hero, msg: item.key });
|
||||
await this.saveHero({ hero: toSave, msg: item.key });
|
||||
item.neverOwned = false;
|
||||
item.modified = false;
|
||||
},
|
||||
|
||||
@@ -31,22 +31,41 @@
|
||||
v-html="questErrors"
|
||||
></p>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
Party:
|
||||
<span v-if="userHasParty">
|
||||
yes: party ID {{ groupPartyData._id }},
|
||||
member count {{ groupPartyData.memberCount }} (may be wrong)
|
||||
<br>
|
||||
<div v-if="userHasParty">
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Party ID
|
||||
</label>
|
||||
<strong class="col-sm-9 col-form-label">
|
||||
{{ groupPartyData._id }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Estimated Member Count
|
||||
</label>
|
||||
<strong class="col-sm-9 col-form-label">
|
||||
{{ groupPartyData.memberCount }}
|
||||
</strong>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Leader
|
||||
</label>
|
||||
<strong class="col-sm-9 col-form-label">
|
||||
<span v-if="userIsPartyLeader">User is the party leader</span>
|
||||
<span v-else>Party leader is
|
||||
<router-link :to="{'name': 'userProfile', 'params': {'userId': groupPartyData.leader}}">
|
||||
{{ groupPartyData.leader }}
|
||||
</router-link>
|
||||
</span>
|
||||
</span>
|
||||
<span v-else>no</span>
|
||||
</strong>
|
||||
</div>
|
||||
<div
|
||||
class="btn btn-danger"
|
||||
@click="removeFromParty()">Remove from Party</div>
|
||||
</div>
|
||||
<strong v-else>User is not in a party.</strong>
|
||||
<div class="subsection-start">
|
||||
<p v-html="questStatus"></p>
|
||||
</div>
|
||||
@@ -56,6 +75,7 @@
|
||||
|
||||
<script>
|
||||
import * as quests from '@/../../common/script/content/quests';
|
||||
import saveHero from '../mixins/saveHero';
|
||||
|
||||
function determineQuestStatus (self) {
|
||||
// Quest data is in the user doc and party doc. They can be out of sync.
|
||||
@@ -271,6 +291,7 @@ function resetData (self) {
|
||||
}
|
||||
|
||||
export default {
|
||||
mixins: [saveHero],
|
||||
props: {
|
||||
resetCounter: {
|
||||
type: Number,
|
||||
@@ -318,5 +339,14 @@ export default {
|
||||
mounted () {
|
||||
resetData(this);
|
||||
},
|
||||
methods: {
|
||||
removeFromParty () {
|
||||
this.saveHero({
|
||||
hero: { _id: this.userId, removeFromParty: true },
|
||||
msg: 'Removed from party',
|
||||
reloadData: true,
|
||||
});
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -1,5 +1,11 @@
|
||||
<template>
|
||||
<form @submit.prevent="saveHero({hero, msg: 'Privileges or Gems or Moderation Notes'})">
|
||||
<form @submit.prevent="saveHero({hero: {
|
||||
_id: hero._id,
|
||||
flags: hero.flags,
|
||||
balance: hero.balance,
|
||||
auth: hero.auth,
|
||||
secret: hero.secret,
|
||||
}, msg: 'Privileges or Gems or Moderation Notes'})">
|
||||
<div class="card mt-2">
|
||||
<div class="card-header">
|
||||
<h3
|
||||
@@ -8,6 +14,9 @@
|
||||
@click="expand = !expand"
|
||||
>
|
||||
Privileges, Gem Balance
|
||||
<b v-if="hasUnsavedChanges && !expand" class="text-warning float-right">
|
||||
Unsaved changes
|
||||
</b>
|
||||
</h3>
|
||||
</div>
|
||||
<div
|
||||
@@ -117,13 +126,16 @@
|
||||
</div>
|
||||
<div
|
||||
v-if="expand"
|
||||
class="card-footer"
|
||||
class="card-footer d-flex align-items-center justify-content-between"
|
||||
>
|
||||
<input
|
||||
type="submit"
|
||||
value="Save"
|
||||
class="btn btn-primary mt-1"
|
||||
>
|
||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
||||
Unsaved changes
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -169,6 +181,10 @@ export default {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
hasUnsavedChanges: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
|
||||
@@ -0,0 +1,72 @@
|
||||
<template>
|
||||
<div class="form-group row">
|
||||
<label
|
||||
class="col-sm-3 col-form-label"
|
||||
:class="color"
|
||||
>{{ label }}</label>
|
||||
<div class="col-sm-9">
|
||||
<input
|
||||
:value="value"
|
||||
class="form-control"
|
||||
type="number"
|
||||
:step="step"
|
||||
:max="max"
|
||||
:min="min"
|
||||
@input="$emit('input', parseInt($event.target.value, 10))"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
.about-row {
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
|
||||
.red-label {
|
||||
color: $red_100;
|
||||
}
|
||||
.blue-label {
|
||||
color: $blue_100;
|
||||
}
|
||||
.purple-label {
|
||||
color: $purple_300;
|
||||
}
|
||||
.yellow-label {
|
||||
color: $yellow_50;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
export default {
|
||||
model: {
|
||||
prop: 'value',
|
||||
event: 'input',
|
||||
},
|
||||
props: {
|
||||
label: {
|
||||
type: String,
|
||||
required: true,
|
||||
},
|
||||
color: {
|
||||
type: String,
|
||||
default: 'text-label',
|
||||
},
|
||||
value: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
step: {
|
||||
type: String,
|
||||
default: 'any',
|
||||
},
|
||||
min: {
|
||||
},
|
||||
max: {
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -0,0 +1,286 @@
|
||||
<template>
|
||||
<form @submit.prevent="submitClicked()">
|
||||
<div class="card mt-2">
|
||||
<div class="card-header">
|
||||
<h3
|
||||
class="mb-0 mt-0"
|
||||
:class="{'open': expand}"
|
||||
@click="expand = !expand"
|
||||
>
|
||||
Stats
|
||||
<b v-if="hasUnsavedChanges && !expand" class="text-warning float-right">
|
||||
Unsaved changes
|
||||
</b>
|
||||
</h3>
|
||||
</div>
|
||||
<div
|
||||
v-if="expand"
|
||||
class="card-body"
|
||||
>
|
||||
<stats-row
|
||||
label="Health"
|
||||
color="red-label"
|
||||
:max="maxHealth"
|
||||
v-model="hero.stats.hp" />
|
||||
<stats-row
|
||||
label="Experience"
|
||||
color="yellow-label"
|
||||
min="0"
|
||||
:max="maxFieldHardCap"
|
||||
v-model="hero.stats.exp" />
|
||||
<stats-row
|
||||
label="Mana"
|
||||
color="blue-label"
|
||||
min="0"
|
||||
:max="maxFieldHardCap"
|
||||
v-model="hero.stats.mp" />
|
||||
<stats-row
|
||||
label="Level"
|
||||
step="1"
|
||||
min="0"
|
||||
:max="maxLevelHardCap"
|
||||
v-model="hero.stats.lvl" />
|
||||
<stats-row
|
||||
label="Gold"
|
||||
min="0"
|
||||
:max="maxFieldHardCap"
|
||||
v-model="hero.stats.gp" />
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3 col-form-label">Selected Class</label>
|
||||
<div class="col-sm-9">
|
||||
<select
|
||||
id="selectedClass"
|
||||
v-model="hero.stats.class"
|
||||
class="form-control"
|
||||
:disabled="hero.stats.lvl < 10"
|
||||
>
|
||||
<option value="warrior">Warrior</option>
|
||||
<option value="wizard">Mage</option>
|
||||
<option value="healer">Healer</option>
|
||||
<option value="rogue">Rogue</option>
|
||||
</select>
|
||||
<small>
|
||||
When changing class, players usually need stat points deallocated as well.
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>Stat Points</h3>
|
||||
<stats-row
|
||||
label="Unallocated"
|
||||
min="0"
|
||||
step="1"
|
||||
:max="maxStatPoints"
|
||||
v-model="hero.stats.points" />
|
||||
<stats-row
|
||||
label="Strength"
|
||||
color="red-label"
|
||||
min="0"
|
||||
:max="maxStatPoints"
|
||||
step="1"
|
||||
v-model="hero.stats.str" />
|
||||
<stats-row
|
||||
label="Intelligence"
|
||||
color="blue-label"
|
||||
min="0"
|
||||
:max="maxStatPoints"
|
||||
step="1"
|
||||
v-model="hero.stats.int" />
|
||||
<stats-row
|
||||
label="Perception"
|
||||
color="purple-label"
|
||||
min="0"
|
||||
:max="maxStatPoints"
|
||||
step="1"
|
||||
v-model="hero.stats.per" />
|
||||
<stats-row
|
||||
label="Constitution"
|
||||
color="yellow-label"
|
||||
min="0"
|
||||
:max="maxStatPoints"
|
||||
step="1"
|
||||
v-model="hero.stats.con" />
|
||||
<div class="form-group row">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-warning btn-sm"
|
||||
@click="deallocateStatPoints">
|
||||
Deallocate all stat points
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row" v-if="statPointsIncorrect">
|
||||
<div class="offset-sm-3 col-sm-9 text-danger">
|
||||
Error: Sum of stat points should equal the users level
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<h3>Buffs</h3>
|
||||
<stats-row
|
||||
label="Strength"
|
||||
color="red-label"
|
||||
min="0"
|
||||
step="1"
|
||||
v-model="hero.stats.buffs.str" />
|
||||
<stats-row
|
||||
label="Intelligence"
|
||||
color="blue-label"
|
||||
min="0"
|
||||
step="1"
|
||||
v-model="hero.stats.buffs.int" />
|
||||
<stats-row
|
||||
label="Perception"
|
||||
color="purple-label"
|
||||
min="0"
|
||||
step="1"
|
||||
v-model="hero.stats.buffs.per" />
|
||||
<stats-row
|
||||
label="Constitution"
|
||||
color="yellow-label"
|
||||
min="0"
|
||||
step="1"
|
||||
v-model="hero.stats.buffs.con" />
|
||||
<div class="form-group row">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-warning btn-sm"
|
||||
@click="resetBuffs">
|
||||
Reset Buffs
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="expand"
|
||||
class="card-footer d-flex align-items-center justify-content-between"
|
||||
>
|
||||
<input
|
||||
type="submit"
|
||||
value="Save"
|
||||
class="btn btn-primary mt-1"
|
||||
>
|
||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
||||
Unsaved changes
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
.about-row {
|
||||
margin-left: 0px;
|
||||
margin-right: 0px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import {
|
||||
MAX_HEALTH,
|
||||
MAX_STAT_POINTS,
|
||||
MAX_LEVEL_HARD_CAP,
|
||||
MAX_FIELD_HARD_CAP,
|
||||
} from '@/../../common/script/constants';
|
||||
import markdownDirective from '@/directives/markdown';
|
||||
import saveHero from '../mixins/saveHero';
|
||||
|
||||
import { mapState } from '@/libs/store';
|
||||
import { userStateMixin } from '../../../mixins/userState';
|
||||
|
||||
import StatsRow from './stats-row';
|
||||
|
||||
function resetData (self) {
|
||||
self.expand = false;
|
||||
}
|
||||
|
||||
export default {
|
||||
directives: {
|
||||
markdown: markdownDirective,
|
||||
},
|
||||
components: {
|
||||
StatsRow,
|
||||
},
|
||||
mixins: [
|
||||
userStateMixin,
|
||||
saveHero,
|
||||
],
|
||||
computed: {
|
||||
...mapState({ user: 'user.data' }),
|
||||
statPointsIncorrect () {
|
||||
if (this.hero.stats.lvl >= 10) {
|
||||
return (parseInt(this.hero.stats.points, 10)
|
||||
+ parseInt(this.hero.stats.str, 10)
|
||||
+ parseInt(this.hero.stats.int, 10)
|
||||
+ parseInt(this.hero.stats.per, 10)
|
||||
+ parseInt(this.hero.stats.con, 10)
|
||||
) !== this.hero.stats.lvl;
|
||||
}
|
||||
return false;
|
||||
},
|
||||
},
|
||||
props: {
|
||||
resetCounter: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
hero: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
hasUnsavedChanges: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
expand: false,
|
||||
maxHealth: MAX_HEALTH,
|
||||
maxStatPoints: MAX_STAT_POINTS,
|
||||
maxLevelHardCap: MAX_LEVEL_HARD_CAP,
|
||||
maxFieldHardCap: MAX_FIELD_HARD_CAP,
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
resetCounter () {
|
||||
resetData(this);
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
resetData(this);
|
||||
},
|
||||
methods: {
|
||||
submitClicked () {
|
||||
if (this.statPointsIncorrect) {
|
||||
return;
|
||||
}
|
||||
this.saveHero({
|
||||
hero: {
|
||||
_id: this.hero._id,
|
||||
stats: this.hero.stats,
|
||||
},
|
||||
msg: 'Stats',
|
||||
});
|
||||
},
|
||||
resetBuffs () {
|
||||
this.hero.stats.buffs = {
|
||||
str: 0,
|
||||
int: 0,
|
||||
per: 0,
|
||||
con: 0,
|
||||
};
|
||||
},
|
||||
deallocateStatPoints () {
|
||||
this.hero.stats.points = this.hero.stats.lvl;
|
||||
this.hero.stats.str = 0;
|
||||
this.hero.stats.int = 0;
|
||||
this.hero.stats.per = 0;
|
||||
this.hero.stats.con = 0;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -1,30 +1,135 @@
|
||||
<template>
|
||||
<form @submit.prevent="saveHero({ hero, msg: 'Subscription Perks' })">
|
||||
<form
|
||||
@submit.prevent="saveHero({ hero: {
|
||||
_id: hero._id,
|
||||
purchased: hero.purchased
|
||||
}, msg: 'Subscription Perks' })"
|
||||
>
|
||||
<div class="card mt-2">
|
||||
<div class="card-header">
|
||||
<div class="card-header"
|
||||
@click="expand = !expand">
|
||||
<h3
|
||||
class="mb-0 mt-0"
|
||||
:class="{ 'open': expand }"
|
||||
@click="expand = !expand"
|
||||
>
|
||||
Subscription, Monthly Perks
|
||||
<b v-if="hasUnsavedChanges && !expand" class="text-warning float-right">
|
||||
Unsaved changes
|
||||
</b>
|
||||
</h3>
|
||||
</div>
|
||||
<div
|
||||
v-if="expand"
|
||||
class="card-body"
|
||||
>
|
||||
<div v-if="hero.purchased.plan.paymentMethod">
|
||||
Payment method:
|
||||
<strong>{{ hero.purchased.plan.paymentMethod }}</strong>
|
||||
<div
|
||||
class="form-group row"
|
||||
>
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Payment method:
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<input v-model="hero.purchased.plan.paymentMethod"
|
||||
class="form-control"
|
||||
type="text"
|
||||
v-if="!isRegularPaymentMethod"
|
||||
>
|
||||
<select
|
||||
v-else
|
||||
v-model="hero.purchased.plan.paymentMethod"
|
||||
class="form-control"
|
||||
type="text"
|
||||
>
|
||||
<option value="groupPlan">Group Plan</option>
|
||||
<option value="Stripe">Stripe</option>
|
||||
<option value="Apple">Apple</option>
|
||||
<option value="Google">Google</option>
|
||||
<option value="Amazon Payments">Amazon</option>
|
||||
<option value="PayPal">PayPal</option>
|
||||
<option value="Gift">Gift</option>
|
||||
<option value="">Clear out</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="hero.purchased.plan.planId">
|
||||
Payment schedule ("basic-earned" is monthly):
|
||||
<strong>{{ hero.purchased.plan.planId }}</strong>
|
||||
<div
|
||||
class="form-group row"
|
||||
>
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Payment schedule:
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<input v-model="hero.purchased.plan.planId"
|
||||
class="form-control"
|
||||
type="text"
|
||||
v-if="!isRegularPlanId"
|
||||
>
|
||||
<select
|
||||
v-else
|
||||
v-model="hero.purchased.plan.planId"
|
||||
class="form-control"
|
||||
type="text"
|
||||
>
|
||||
<option value="basic_earned">Monthly recurring</option>
|
||||
<option value="basic_3mo">3 Months recurring</option>
|
||||
<option value="basic_6mo">6 Months recurring</option>
|
||||
<option value="basic_12mo">12 Months recurring</option>
|
||||
<option value="group_monthly">Group Plan (legacy)</option>
|
||||
<option value="group_plan_auto">Group Plan (auto)</option>
|
||||
<option value="">Clear out</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="hero.purchased.plan.planId == 'group_plan_auto'">
|
||||
Group plan ID:
|
||||
<strong>{{ hero.purchased.plan.owner }}</strong>
|
||||
<div
|
||||
class="form-group row"
|
||||
>
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Customer ID:
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<input
|
||||
v-model="hero.purchased.plan.customerId"
|
||||
class="form-control"
|
||||
type="text"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row"
|
||||
v-if="hero.purchased.plan.planId === 'group_plan_auto'">
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Group Plan Memberships:
|
||||
</label>
|
||||
<div class="col-sm-9 col-form-label">
|
||||
<loading-spinner
|
||||
v-if="!groupPlans"
|
||||
dark-color=true
|
||||
/>
|
||||
<b
|
||||
v-else-if="groupPlans.length === 0"
|
||||
class="text-danger col-form-label"
|
||||
>User is not part of an active group plan!</b>
|
||||
<div
|
||||
v-else
|
||||
v-for="group in groupPlans"
|
||||
:key="group._id"
|
||||
class="card mb-2">
|
||||
<div class="card-body">
|
||||
<h6 class="card-title">{{ group.name }}
|
||||
<small class="float-right">{{ group._id }}</small>
|
||||
</h6>
|
||||
<p class="card-text">
|
||||
<strong>Leader: </strong>
|
||||
<a
|
||||
v-if="group.leader !== hero._id"
|
||||
@click="switchUser(group.leader)"
|
||||
>{{ group.leader }}</a>
|
||||
<strong v-else class="text-success">This user</strong>
|
||||
</p>
|
||||
<p class="card-text">
|
||||
<strong>Members: </strong> {{ group.memberCount }}
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="hero.purchased.plan.dateCreated"
|
||||
@@ -85,8 +190,18 @@
|
||||
<strong class="input-group-text">
|
||||
{{ dateFormat(hero.purchased.plan.dateTerminated) }}
|
||||
</strong>
|
||||
<a class="btn btn-danger"
|
||||
href="#"
|
||||
v-b-modal.sub_termination_modal
|
||||
v-if="!hero.purchased.plan.dateTerminated && hero.purchased.plan.planId">
|
||||
Terminate
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<small v-if="!hero.purchased.plan.dateTerminated
|
||||
&& hero.purchased.plan.planId" class="text-success">
|
||||
The subscription does not have a termination date and is active.
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
@@ -101,6 +216,35 @@
|
||||
min="0"
|
||||
step="1"
|
||||
>
|
||||
<small class="text-secondary">
|
||||
Cumulative subscribed months across subscription periods.
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Extra months:
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<div class="input-group">
|
||||
<input
|
||||
v-model="hero.purchased.plan.extraMonths"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
step="any"
|
||||
>
|
||||
<div class="input-group-append">
|
||||
<a class="btn btn-warning"
|
||||
@click="applyExtraMonths"
|
||||
v-if="hero.purchased.plan.dateTerminated && hero.purchased.plan.extraMonths > 0">
|
||||
Apply Credit
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<small class="text-secondary">
|
||||
Additional credit that is applied if a subscription is cancelled.
|
||||
</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
@@ -174,10 +318,6 @@
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="hero.purchased.plan.extraMonths > 0">
|
||||
Additional credit (applied upon cancellation):
|
||||
<strong>{{ hero.purchased.plan.extraMonths }}</strong>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Mystery Items:
|
||||
@@ -199,18 +339,64 @@
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row"
|
||||
v-if="!isConvertingToGroupPlan && hero.purchased.plan.planId !== 'group_plan_auto'">
|
||||
<div class="offset-sm-3 col-sm-9">
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn-secondary btn-sm"
|
||||
@click="beginGroupPlanConvert">
|
||||
Begin converting to group plan subscription
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row"
|
||||
v-if="isConvertingToGroupPlan">
|
||||
<label class="col-sm-3 col-form-label">
|
||||
Group Plan group ID:
|
||||
</label>
|
||||
<div class="col-sm-9">
|
||||
<input
|
||||
v-model="groupPlanID"
|
||||
class="form-control"
|
||||
type="text"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="expand"
|
||||
class="card-footer"
|
||||
class="card-footer d-flex align-items-center justify-content-between"
|
||||
>
|
||||
<input
|
||||
type="submit"
|
||||
value="Save"
|
||||
class="btn btn-primary mt-1"
|
||||
@click="saveClicked"
|
||||
>
|
||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
||||
Unsaved changes
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
<b-modal id="sub_termination_modal" title="Set Termination Date">
|
||||
<p>
|
||||
You can set the sub benefit termination date to today or to the last
|
||||
day of the current billing cycle. Any extra subscription credit will
|
||||
then be processed and automatically added onto the selected date.
|
||||
</p>
|
||||
<template #modal-footer>
|
||||
<div class="mt-3 btn btn-secondary" @click="$bvModal.hide('sub_termination_modal')">
|
||||
Close
|
||||
</div>
|
||||
<div class="mt-3 btn btn-danger" @click="terminateSubscription()">
|
||||
Set to Today
|
||||
</div>
|
||||
<div class="mt-3 btn btn-danger" @click="terminateSubscription(todayWithRemainingCycle)">
|
||||
Set to {{ todayWithRemainingCycle.utc().format('MM/DD/YYYY') }}
|
||||
</div>
|
||||
</template>
|
||||
</b-modal>
|
||||
</form>
|
||||
</template>
|
||||
|
||||
@@ -231,21 +417,38 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import isUUID from 'validator/es/lib/isUUID';
|
||||
import moment from 'moment';
|
||||
import { getPlanContext } from '@/../../common/script/cron';
|
||||
import saveHero from '../mixins/saveHero';
|
||||
import subscriptionBlocks from '../../../../../common/script/content/subscriptionBlocks';
|
||||
import LoadingSpinner from '@/components/ui/loadingSpinner';
|
||||
|
||||
export default {
|
||||
mixins: [saveHero],
|
||||
components: {
|
||||
LoadingSpinner,
|
||||
},
|
||||
props: {
|
||||
hero: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
hasUnsavedChanges: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
groupPlans: {
|
||||
type: Array,
|
||||
default: null,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
expand: false,
|
||||
isConvertingToGroupPlan: false,
|
||||
groupPlanID: '',
|
||||
subscriptionBlocks,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
@@ -255,6 +458,30 @@ export default {
|
||||
if (!currentPlanContext.nextHourglassDate) return 'N/A';
|
||||
return currentPlanContext.nextHourglassDate.format('MMMM YYYY');
|
||||
},
|
||||
isRegularPlanId () {
|
||||
return this.subscriptionBlocks[this.hero.purchased.plan.planId] !== undefined;
|
||||
},
|
||||
isRegularPaymentMethod () {
|
||||
return [
|
||||
'groupPlan',
|
||||
'Group Plan',
|
||||
'Stripe',
|
||||
'Apple',
|
||||
'Google',
|
||||
'Amazon Payments',
|
||||
'PayPal',
|
||||
'Gift',
|
||||
].includes(this.hero.purchased.plan.paymentMethod);
|
||||
},
|
||||
todayWithRemainingCycle () {
|
||||
const now = moment();
|
||||
const monthCount = subscriptionBlocks[this.hero.purchased.plan.planId].months;
|
||||
const terminationDate = moment(this.hero.purchased.plan.dateCurrentTypeCreated || new Date());
|
||||
while (terminationDate.isBefore(now)) {
|
||||
terminationDate.add(monthCount, 'months');
|
||||
}
|
||||
return terminationDate;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
dateFormat (date) {
|
||||
@@ -263,6 +490,46 @@ export default {
|
||||
}
|
||||
return moment(date).format('YYYY/MM/DD');
|
||||
},
|
||||
terminateSubscription (terminationDate) {
|
||||
if (terminationDate) {
|
||||
this.hero.purchased.plan.dateTerminated = terminationDate.utc().format();
|
||||
} else {
|
||||
this.hero.purchased.plan.dateTerminated = moment(new Date()).utc().format();
|
||||
}
|
||||
this.applyExtraMonths();
|
||||
this.saveHero({ hero: this.hero, msg: 'Subscription Termination', reloadData: true });
|
||||
},
|
||||
applyExtraMonths () {
|
||||
if (this.hero.purchased.plan.extraMonths > 0 || this.hero.purchased.plan.extraMonths !== '0') {
|
||||
const date = moment(this.hero.purchased.plan.dateTerminated || new Date());
|
||||
const extraMonths = Math.max(this.hero.purchased.plan.extraMonths, 0);
|
||||
const extraDays = Math.ceil(30.5 * extraMonths);
|
||||
this.hero.purchased.plan.dateTerminated = date.add(extraDays, 'days').utc().format();
|
||||
this.hero.purchased.plan.extraMonths = 0;
|
||||
}
|
||||
},
|
||||
beginGroupPlanConvert () {
|
||||
this.isConvertingToGroupPlan = true;
|
||||
this.hero.purchased.plan.owner = '';
|
||||
},
|
||||
saveClicked (e) {
|
||||
e.preventDefault();
|
||||
if (this.isConvertingToGroupPlan) {
|
||||
if (!isUUID(this.groupPlanID)) {
|
||||
alert('Invalid group ID');
|
||||
return;
|
||||
}
|
||||
this.hero.purchased.plan.convertToGroupPlan = this.groupPlanID;
|
||||
this.saveHero({ hero: this.hero, msg: 'Group Plan Subscription', reloadData: true });
|
||||
} else {
|
||||
this.saveHero({ hero: this.hero, msg: 'Subscription Perks', reloadData: true });
|
||||
}
|
||||
},
|
||||
switchUser (id) {
|
||||
if (window.confirm('Switch to this user?')) {
|
||||
this.$emit('changeUserIdentifier', id);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
|
||||
@@ -0,0 +1,263 @@
|
||||
<template>
|
||||
<div class="card mt-2">
|
||||
<div class="card-header">
|
||||
<h3
|
||||
class="mb-0 mt-0"
|
||||
:class="{'open': expand}"
|
||||
@click="toggleHistoryOpen"
|
||||
>
|
||||
User History
|
||||
</h3>
|
||||
</div>
|
||||
<div
|
||||
v-if="expand"
|
||||
class="card-body"
|
||||
>
|
||||
<div>
|
||||
<div class="clearfix">
|
||||
<div class="mb-4 float-left">
|
||||
<button
|
||||
class="page-header btn-flat tab-button textCondensed"
|
||||
:class="{'active': selectedTab === 'armoire'}"
|
||||
@click="selectTab('armoire')"
|
||||
>
|
||||
Armoire
|
||||
</button>
|
||||
<button
|
||||
class="page-header btn-flat tab-button textCondensed"
|
||||
:class="{'active': selectedTab === 'questInvites'}"
|
||||
@click="selectTab('questInvites')"
|
||||
>
|
||||
Quest Invitations
|
||||
</button>
|
||||
<button
|
||||
class="page-header btn-flat tab-button textCondensed"
|
||||
:class="{'active': selectedTab === 'cron'}"
|
||||
@click="selectTab('cron')"
|
||||
>
|
||||
Cron
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div
|
||||
v-if="selectedTab === 'armoire'"
|
||||
class="col-12"
|
||||
>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th
|
||||
v-once
|
||||
>
|
||||
{{ $t('timestamp') }}
|
||||
</th>
|
||||
<th v-once>
|
||||
Client
|
||||
</th>
|
||||
<th
|
||||
v-once
|
||||
>
|
||||
Received
|
||||
</th>
|
||||
</tr>
|
||||
<tr
|
||||
v-for="entry in armoire"
|
||||
:key="entry.timestamp"
|
||||
>
|
||||
<td>
|
||||
<span
|
||||
v-b-tooltip.hover="entry.timestamp"
|
||||
>{{ entry.timestamp | timeAgo }}</span>
|
||||
</td>
|
||||
<td>{{ entry.client }}</td>
|
||||
<td>{{ entry.reward }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div
|
||||
v-if="selectedTab === 'questInvites'"
|
||||
class="col-12"
|
||||
>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th
|
||||
v-once
|
||||
>
|
||||
{{ $t('timestamp') }}
|
||||
</th>
|
||||
<th v-once>
|
||||
Client
|
||||
</th>
|
||||
<th v-once>
|
||||
Quest Key
|
||||
</th>
|
||||
<th v-once>
|
||||
Response
|
||||
</th>
|
||||
</tr>
|
||||
<tr
|
||||
v-for="entry in questInviteResponses"
|
||||
:key="entry.timestamp"
|
||||
>
|
||||
<td>
|
||||
<span
|
||||
v-b-tooltip.hover="entry.timestamp"
|
||||
>{{ entry.timestamp | timeAgo }}</span>
|
||||
</td>
|
||||
<td>{{ entry.client }}</td>
|
||||
<td>{{ entry.quest }}</td>
|
||||
<td>{{ questInviteResponseText(entry.response) }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
<div
|
||||
v-if="selectedTab === 'cron'"
|
||||
class="col-12"
|
||||
>
|
||||
<table class="table">
|
||||
<tr>
|
||||
<th
|
||||
v-once
|
||||
>
|
||||
{{ $t('timestamp') }}
|
||||
</th>
|
||||
<th v-once>
|
||||
Client
|
||||
</th>
|
||||
<th v-once>
|
||||
Checkin Count
|
||||
</th>
|
||||
</tr>
|
||||
<tr
|
||||
v-for="entry in cron"
|
||||
:key="entry.timestamp"
|
||||
>
|
||||
<td>
|
||||
<span
|
||||
v-b-tooltip.hover="entry.timestamp"
|
||||
>{{ entry.timestamp | timeAgo }}</span>
|
||||
</td>
|
||||
<td>{{ entry.client }}</td>
|
||||
<td>{{ entry.checkinCount }}</td>
|
||||
</tr>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
.page-header.btn-flat {
|
||||
background: transparent;
|
||||
}
|
||||
|
||||
.tab-button {
|
||||
height: 2rem;
|
||||
font-size: 24px;
|
||||
font-weight: bold;
|
||||
font-stretch: condensed;
|
||||
line-height: 1.33;
|
||||
letter-spacing: normal;
|
||||
color: $gray-10;
|
||||
|
||||
margin-right: 1.125rem;
|
||||
padding-left: 0;
|
||||
padding-right: 0;
|
||||
padding-bottom: 2.5rem;
|
||||
|
||||
&.active, &:hover {
|
||||
color: $purple-300;
|
||||
box-shadow: 0px -0.25rem 0px $purple-300 inset;
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import moment from 'moment';
|
||||
import { userStateMixin } from '../../../mixins/userState';
|
||||
|
||||
export default {
|
||||
filters: {
|
||||
timeAgo (value) {
|
||||
return moment(value).fromNow();
|
||||
},
|
||||
},
|
||||
mixins: [userStateMixin],
|
||||
props: {
|
||||
hero: {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
resetCounter: {
|
||||
type: Number,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
expand: false,
|
||||
selectedTab: 'armoire',
|
||||
armoire: [],
|
||||
questInviteResponses: [],
|
||||
cron: [],
|
||||
};
|
||||
},
|
||||
watch: {
|
||||
resetCounter () {
|
||||
if (this.expand) {
|
||||
this.retrieveUserHistory();
|
||||
}
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
selectTab (type) {
|
||||
this.selectedTab = type;
|
||||
},
|
||||
async toggleHistoryOpen () {
|
||||
this.expand = !this.expand;
|
||||
if (this.expand) {
|
||||
this.retrieveUserHistory();
|
||||
}
|
||||
},
|
||||
async retrieveUserHistory () {
|
||||
const history = await this.$store.dispatch('adminPanel:getUserHistory', { userIdentifier: this.hero._id });
|
||||
this.armoire = history.armoire;
|
||||
this.questInviteResponses = history.questInviteResponses;
|
||||
this.cron = history.cron;
|
||||
},
|
||||
questInviteResponseText (response) {
|
||||
if (response === 'accept') {
|
||||
return 'Accepted';
|
||||
}
|
||||
if (response === 'reject') {
|
||||
return 'Rejected';
|
||||
}
|
||||
if (response === 'leave') {
|
||||
return 'Left active quest';
|
||||
}
|
||||
if (response === 'invite') {
|
||||
return 'Accepted as owner';
|
||||
}
|
||||
if (response === 'abort') {
|
||||
return 'Aborted by owner';
|
||||
}
|
||||
if (response === 'abortByLeader') {
|
||||
return 'Aborted by party leader';
|
||||
}
|
||||
if (response === 'cancel') {
|
||||
return 'Cancelled before start';
|
||||
}
|
||||
if (response === 'cancelByLeader') {
|
||||
return 'Cancelled before start by party leader';
|
||||
}
|
||||
return response;
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -1,5 +1,10 @@
|
||||
<template>
|
||||
<form @submit.prevent="saveHero({hero, msg: 'Users Profile'})">
|
||||
<form
|
||||
@submit.prevent="saveHero({hero: {
|
||||
_id: hero._id,
|
||||
profile: hero.profile
|
||||
}, msg: 'Users Profile'})"
|
||||
>
|
||||
<div class="card mt-2">
|
||||
<div class="card-header">
|
||||
<h3
|
||||
@@ -8,6 +13,9 @@
|
||||
@click="expand = !expand"
|
||||
>
|
||||
User Profile
|
||||
<b v-if="hasUnsavedChanges && !expand" class="text-warning float-right">
|
||||
Unsaved changes
|
||||
</b>
|
||||
</h3>
|
||||
</div>
|
||||
<div
|
||||
@@ -51,13 +59,16 @@
|
||||
</div>
|
||||
<div
|
||||
v-if="expand"
|
||||
class="card-footer"
|
||||
class="card-footer d-flex align-items-center justify-content-between"
|
||||
>
|
||||
<input
|
||||
type="submit"
|
||||
value="Save"
|
||||
class="btn btn-primary mt-1"
|
||||
>
|
||||
<b v-if="hasUnsavedChanges" class="text-warning float-right">
|
||||
Unsaved changes
|
||||
</b>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
@@ -101,6 +112,10 @@ export default {
|
||||
type: Object,
|
||||
required: true,
|
||||
},
|
||||
hasUnsavedChanges: {
|
||||
type: Boolean,
|
||||
required: true,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
|
||||
@@ -944,24 +944,28 @@ export default {
|
||||
},
|
||||
async jumpTime (amount) {
|
||||
const response = await axios.post('/api/v4/debug/jump-time', { offsetDays: amount });
|
||||
if (amount > 0) {
|
||||
Vue.config.clock.jump(amount * 24 * 60 * 60 * 1000);
|
||||
} else {
|
||||
Vue.config.clock.setSystemTime(moment().add(amount, 'days').toDate());
|
||||
}
|
||||
this.lastTimeJump = response.data.data.time;
|
||||
this.triggerGetWorldState(true);
|
||||
setTimeout(() => {
|
||||
if (amount > 0) {
|
||||
Vue.config.clock.jump(amount * 24 * 60 * 60 * 1000);
|
||||
} else {
|
||||
Vue.config.clock.setSystemTime(moment().add(amount, 'days').toDate());
|
||||
}
|
||||
this.lastTimeJump = response.data.data.time;
|
||||
this.triggerGetWorldState(true);
|
||||
}, 1000);
|
||||
},
|
||||
async resetTime () {
|
||||
const response = await axios.post('/api/v4/debug/jump-time', { reset: true });
|
||||
const time = new Date(response.data.data.time);
|
||||
Vue.config.clock.restore();
|
||||
Vue.config.clock = sinon.useFakeTimers({
|
||||
now: time,
|
||||
shouldAdvanceTime: true,
|
||||
});
|
||||
this.lastTimeJump = response.data.data.time;
|
||||
this.triggerGetWorldState(true);
|
||||
setTimeout(() => {
|
||||
Vue.config.clock.restore();
|
||||
Vue.config.clock = sinon.useFakeTimers({
|
||||
now: time,
|
||||
shouldAdvanceTime: true,
|
||||
});
|
||||
this.lastTimeJump = response.data.data.time;
|
||||
this.triggerGetWorldState(true);
|
||||
}, 1000);
|
||||
},
|
||||
addExp () {
|
||||
// @TODO: Name these variables better
|
||||
|
||||
@@ -273,7 +273,7 @@
|
||||
<div class="text-center">
|
||||
<div>
|
||||
<div
|
||||
class="svg-icon habitica-logo color"
|
||||
class="svg-icon habitica-logo"
|
||||
v-html="icons.habiticaIcon"
|
||||
></div>
|
||||
</div>
|
||||
@@ -726,7 +726,11 @@ export default {
|
||||
},
|
||||
mounted () {
|
||||
this.forgotPassword = this.$route.path.startsWith('/forgot-password');
|
||||
|
||||
if (this.forgotPassword) {
|
||||
if (this.$route.query.email) {
|
||||
this.username = this.$route.query.email;
|
||||
}
|
||||
}
|
||||
hello.init({
|
||||
google: process.env.GOOGLE_CLIENT_ID, // eslint-disable-line
|
||||
});
|
||||
|
||||
@@ -155,7 +155,6 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import some from 'lodash/some';
|
||||
import moment from 'moment';
|
||||
import { mapState } from '@/libs/store';
|
||||
import foolPet from '../mixins/foolPet';
|
||||
@@ -203,11 +202,11 @@ export default {
|
||||
},
|
||||
width: {
|
||||
type: String,
|
||||
default: '140px',
|
||||
default: '141px',
|
||||
},
|
||||
height: {
|
||||
type: String,
|
||||
default: undefined,
|
||||
default: '147px',
|
||||
},
|
||||
centerAvatar: {
|
||||
type: Boolean,
|
||||
@@ -322,11 +321,10 @@ export default {
|
||||
return null;
|
||||
},
|
||||
petClass () {
|
||||
if (some(
|
||||
this.currentEventList,
|
||||
event => moment().isBetween(event.start, event.end) && event.aprilFools && event.aprilFools === 'Fungi',
|
||||
)) {
|
||||
return this.foolPet(this.member.items.currentPet);
|
||||
const foolEvent = this.currentEventList?.find(event => moment()
|
||||
.isBetween(event.start, event.end) && event.aprilFools);
|
||||
if (foolEvent) {
|
||||
return this.foolPet(this.member.items.currentPet, foolEvent.aprilFools);
|
||||
}
|
||||
if (this.member?.items.currentPet) return `Pet-${this.member.items.currentPet}`;
|
||||
return '';
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
>
|
||||
<div
|
||||
v-for="option in items"
|
||||
:key="option.key"
|
||||
:id="option.imageName"
|
||||
:key="option.key"
|
||||
class="outer-option-background"
|
||||
:class="{
|
||||
premium: Boolean(option.gem),
|
||||
@@ -28,15 +28,14 @@
|
||||
v-if="!option.none"
|
||||
class="sprite"
|
||||
:prefix="option.isGear ? 'shop' : 'icon'"
|
||||
:imageName="option.imageName"
|
||||
:image-name="option.imageName"
|
||||
/>
|
||||
<div
|
||||
v-else
|
||||
class="redline-outer"
|
||||
>
|
||||
<div class="redline"></div>
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="redline-outer"
|
||||
>
|
||||
<div class="redline"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -31,6 +31,7 @@
|
||||
<avatar
|
||||
v-if="user._id !== msg.uuid && msg.uuid !== 'system'"
|
||||
class="avatar-left"
|
||||
:height="null"
|
||||
:class="{ invisible: avatarUnavailable(msg) }"
|
||||
:member="msg.userStyles || cachedProfileData[msg.uuid] || {}"
|
||||
:avatar-only="true"
|
||||
@@ -50,6 +51,7 @@
|
||||
v-if="user._id === msg.uuid"
|
||||
:class="{ invisible: avatarUnavailable(msg) }"
|
||||
:member="msg.userStyles || cachedProfileData[msg.uuid] || {}"
|
||||
:height="null"
|
||||
:avatar-only="true"
|
||||
:hide-class-badge="true"
|
||||
:override-top-padding="'14px'"
|
||||
|
||||
@@ -45,6 +45,9 @@
|
||||
<div class="col-5">
|
||||
<select-list
|
||||
:items="sortOptions"
|
||||
:hide-icon="false"
|
||||
:inline-dropdown="false"
|
||||
:direct-select="true"
|
||||
:value="optionEntryBySelectedValue"
|
||||
key-prop="value"
|
||||
@select="changeSortOption($event)"
|
||||
@@ -61,6 +64,9 @@
|
||||
<select-list
|
||||
:items="sortDirections"
|
||||
:value="directionEntryBySelectedValue"
|
||||
:hide-icon="false"
|
||||
:inline-dropdown="false"
|
||||
:direct-select="true"
|
||||
key-prop="value"
|
||||
@select="changeSortDirection($event)"
|
||||
>
|
||||
|
||||
@@ -410,7 +410,8 @@ export default {
|
||||
const ownedItem = this.flatGear[gearKey];
|
||||
|
||||
const isSearched = !searchText
|
||||
|| ownedItem.text().toLowerCase().indexOf(searchText) !== -1;
|
||||
|| ownedItem.text().toLowerCase().indexOf(searchText) !== -1
|
||||
|| ownedItem.notes().toLowerCase().indexOf(searchText) !== -1;
|
||||
|
||||
if (ownedItem.klass !== 'base' && isSearched) {
|
||||
const { type } = ownedItem;
|
||||
|
||||
@@ -338,9 +338,10 @@ export default {
|
||||
if (itemQuantity > 0 && isAllowed) {
|
||||
const item = contentItems[itemKey];
|
||||
|
||||
const isSearched = !searchText || item.text()
|
||||
.toLowerCase()
|
||||
.indexOf(searchText) !== -1;
|
||||
const isSearched = !searchText
|
||||
|| item.text().toLowerCase().indexOf(searchText) !== -1
|
||||
|| item.notes().toLowerCase().indexOf(searchText) !== -1;
|
||||
|
||||
if (isSearched && item) {
|
||||
itemsArray.push({
|
||||
...item,
|
||||
|
||||
@@ -627,6 +627,8 @@ export default {
|
||||
animals.push({
|
||||
key: specialKey,
|
||||
eggKey,
|
||||
eggName: text(),
|
||||
mountName: text(),
|
||||
potionKey,
|
||||
name: text(),
|
||||
canFind,
|
||||
@@ -657,7 +659,6 @@ export default {
|
||||
}
|
||||
|
||||
this.cachedAnimalList[key] = animals;
|
||||
|
||||
return animals;
|
||||
},
|
||||
listAnimals (animalGroup, type, hideMissing, sort, searchText) {
|
||||
@@ -670,7 +671,9 @@ export default {
|
||||
}
|
||||
|
||||
if (searchText && searchText !== '') {
|
||||
animals = _filter(animals, a => a.name.toLowerCase().indexOf(searchText) !== -1);
|
||||
animals = _filter(animals, a => a.name.toLowerCase().indexOf(searchText) !== -1
|
||||
|| a.eggName.toLowerCase().indexOf(searchText) !== -1
|
||||
|| a.mountName.toLowerCase().indexOf(searchText) !== -1);
|
||||
}
|
||||
|
||||
// 2. Sort
|
||||
@@ -693,7 +696,6 @@ export default {
|
||||
}
|
||||
|
||||
this.viewOptions[animalGroup.key].animalCount = animals.length;
|
||||
|
||||
return animals;
|
||||
},
|
||||
countOwnedAnimals (animalGroup, type) {
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
<div class="pet-background">
|
||||
<Sprite
|
||||
class="mount"
|
||||
:image-name="`Mount_Icon_${mount.key}`"
|
||||
:image-name="`stable_Mount_Icon_${mount.key}`"
|
||||
/>
|
||||
</div>
|
||||
<h4 class="title">
|
||||
@@ -66,6 +66,7 @@
|
||||
|
||||
.mount {
|
||||
margin: 0 auto;
|
||||
margin-top: 22px;
|
||||
}
|
||||
|
||||
.dialog-header {
|
||||
|
||||
@@ -114,7 +114,6 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import some from 'lodash/some';
|
||||
import moment from 'moment';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import { mapState } from '@/libs/store';
|
||||
@@ -183,13 +182,12 @@ export default {
|
||||
return 'GreyedOut';
|
||||
},
|
||||
imageName () {
|
||||
if (this.isOwned() && some(
|
||||
this.currentEventList,
|
||||
event => moment().isBetween(event.start, event.end) && event.aprilFools && event.aprilFools === 'Fungi',
|
||||
)) {
|
||||
if (this.isSpecial()) return `stable_${this.foolPet(this.item.key)}`;
|
||||
const foolEvent = this.currentEventList?.find(event => moment()
|
||||
.isBetween(event.start, event.end) && event.aprilFools);
|
||||
if (this.isOwned() && foolEvent) {
|
||||
if (this.isSpecial()) return `stable_${this.foolPet(this.item.key, foolEvent.aprilFools)}`;
|
||||
const petString = `${this.item.eggKey}-${this.item.key}`;
|
||||
return `stable_${this.foolPet(petString)}`;
|
||||
return `stable_${this.foolPet(petString, foolEvent.aprilFools)}`;
|
||||
}
|
||||
|
||||
if (this.isOwned() || (this.mountOwned() && this.isHatchable())) {
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
<div
|
||||
class="svg-icon mr-1"
|
||||
:title="$t('liked')"
|
||||
v-html="icons.liked"
|
||||
v-html="likedIcon"
|
||||
></div>
|
||||
+{{ likeCount }}
|
||||
</div>
|
||||
@@ -47,7 +47,7 @@
|
||||
width: 16px;
|
||||
}
|
||||
|
||||
&.isLiked {
|
||||
&.isLiked.currentUserLiked {
|
||||
color: $purple-200;
|
||||
font-weight: bold;
|
||||
|
||||
@@ -95,7 +95,11 @@ export default {
|
||||
}),
|
||||
};
|
||||
},
|
||||
|
||||
computed: {
|
||||
likedIcon () {
|
||||
return this.likedByCurrentUser ? this.icons.liked : this.icons.like;
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
async like () {
|
||||
this.$emit('toggle-like');
|
||||
|
||||
@@ -41,6 +41,7 @@
|
||||
:avatar-only="true"
|
||||
:show-weapon="true"
|
||||
:debug-mode="false"
|
||||
:height="null"
|
||||
:override-top-padding="'0'"
|
||||
:hide-class-badge="true"
|
||||
@click.native="showMemberModal(msg.uuid)"
|
||||
@@ -59,6 +60,7 @@
|
||||
v-if="user && user._id === msg.uuid"
|
||||
class="avatar-right"
|
||||
:member="user"
|
||||
:height="null"
|
||||
:avatar-only="true"
|
||||
:show-weapon="true"
|
||||
:debug-mode="false"
|
||||
|
||||
@@ -843,7 +843,6 @@ export default {
|
||||
purchasedPlanIdInfo () {
|
||||
if (!this.subscriptionBlocks[this.user.purchased.plan.planId]) {
|
||||
// @TODO: find which subs are in the common
|
||||
// console.log(this.subscriptionBlocks
|
||||
// [this.user.purchased.plan.planId]); // eslint-disable-line
|
||||
return {
|
||||
price: 0,
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
<div
|
||||
v-for="currency of currencies"
|
||||
:key="currency.key"
|
||||
:needed-currency-only="neededCurrencyOnly"
|
||||
class="d-flex align-items-center"
|
||||
>
|
||||
<div
|
||||
@@ -54,6 +55,9 @@ export default {
|
||||
amountNeeded: {
|
||||
type: Number,
|
||||
},
|
||||
neededCurrencyOnly: {
|
||||
type: Boolean,
|
||||
},
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
@@ -66,34 +70,34 @@ export default {
|
||||
},
|
||||
computed: {
|
||||
currencies () {
|
||||
const currencies = [];
|
||||
currencies.push({
|
||||
const currencies = [{
|
||||
type: 'hourglasses',
|
||||
icon: this.icons.hourglasses,
|
||||
value: this.userHourglasses,
|
||||
});
|
||||
},
|
||||
|
||||
currencies.push({
|
||||
{
|
||||
type: 'gems',
|
||||
icon: this.icons.gem,
|
||||
value: this.userGems,
|
||||
});
|
||||
},
|
||||
|
||||
currencies.push({
|
||||
{
|
||||
type: 'gold',
|
||||
icon: this.icons.gold,
|
||||
value: this.userGold,
|
||||
});
|
||||
}];
|
||||
|
||||
for (const currency of currencies) {
|
||||
if (
|
||||
currency.type === this.currencyNeeded
|
||||
&& !this.enoughCurrency(this.currencyNeeded, this.amountNeeded)
|
||||
if (currency.type === this.currencyNeeded
|
||||
&& !this.enoughCurrency(this.currencyNeeded, this.amountNeeded)
|
||||
) {
|
||||
currency.notEnough = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (this.neededCurrencyOnly) {
|
||||
return currencies.filter(curr => curr.type === this.currencyNeeded);
|
||||
}
|
||||
return currencies;
|
||||
},
|
||||
},
|
||||
|
||||
@@ -19,7 +19,7 @@ export const QuestHelperMixin = {
|
||||
case 'quests':
|
||||
return `inventory_quest_scroll_${drop.key}`;
|
||||
case 'mounts':
|
||||
return `Mount_Icon_${drop.key}`;
|
||||
return `stable_Mount_Icon_${drop.key}`;
|
||||
case 'pets':
|
||||
return `stable_Pet-${drop.key}`;
|
||||
default:
|
||||
|
||||
@@ -40,6 +40,7 @@ export function createAnimal (egg, potion, type, _content, userItems) {
|
||||
imageName: type === 'pet' ? `stable_Pet-${animalKey}` : `stable_Mount_Icon_${animalKey}`,
|
||||
eggKey: egg.key,
|
||||
eggName: getText(egg.text),
|
||||
mountName: getText(egg.mountText),
|
||||
potionKey: potion.key,
|
||||
potionName: getText(potion.text),
|
||||
name: _content[`${type}Info`][animalKey].text(),
|
||||
|
||||
@@ -34,10 +34,12 @@ export function setUpLogging () { // eslint-disable-line import/prefer-default-e
|
||||
console.error('Component where it occurred:', vm);
|
||||
console.error('Info:', info);
|
||||
|
||||
_LTracker.push({
|
||||
err,
|
||||
info,
|
||||
});
|
||||
if (err && Object.keys(err).length) {
|
||||
_LTracker.push({
|
||||
err,
|
||||
info,
|
||||
});
|
||||
}
|
||||
};
|
||||
}
|
||||
/* eslint-enable no-console */
|
||||
|
||||
@@ -2,54 +2,55 @@ import includes from 'lodash/includes';
|
||||
|
||||
export default {
|
||||
methods: {
|
||||
foolPet (pet) {
|
||||
foolPet (pet, prank) {
|
||||
const SPECIAL_PETS = [
|
||||
'Wolf-Veteran',
|
||||
'Wolf-Cerberus',
|
||||
'Dragon-Hydra',
|
||||
'Turkey-Base',
|
||||
'BearCub-Polar',
|
||||
'MantisShrimp-Base',
|
||||
'JackOLantern-Base',
|
||||
'Mammoth-Base',
|
||||
'Tiger-Veteran',
|
||||
'Phoenix-Base',
|
||||
'Turkey-Gilded',
|
||||
'MagicalBee-Base',
|
||||
'Lion-Veteran',
|
||||
'Gryphon-RoyalPurple',
|
||||
'JackOLantern-Ghost',
|
||||
'Jackalope-RoyalPurple',
|
||||
'Orca-Base',
|
||||
'Bear-Veteran',
|
||||
'Hippogriff-Hopeful',
|
||||
'Fox-Veteran',
|
||||
'JackOLantern-Glow',
|
||||
'Gryphon-Gryphatrice',
|
||||
'Gryphatrice-Jubilant',
|
||||
'JackOLantern-RoyalPurple',
|
||||
'BearCub-Polar',
|
||||
'Cactus-Veteran',
|
||||
'Dragon-Hydra',
|
||||
'Dragon-Veteran',
|
||||
'Fox-Veteran',
|
||||
'Gryphatrice-Jubilant',
|
||||
'Gryphon-Gryphatrice',
|
||||
'Gryphon-RoyalPurple',
|
||||
'Hippogriff-Hopeful',
|
||||
'Jackalope-RoyalPurple',
|
||||
'JackOLantern-Base',
|
||||
'JackOLantern-Ghost',
|
||||
'JackOLantern-Glow',
|
||||
'JackOLantern-RoyalPurple',
|
||||
'Lion-Veteran',
|
||||
'MagicalBee-Base',
|
||||
'Mammoth-Base',
|
||||
'MantisShrimp-Base',
|
||||
'Orca-Base',
|
||||
'Phoenix-Base',
|
||||
'Tiger-Veteran',
|
||||
'Turkey-Base',
|
||||
'Turkey-Gilded',
|
||||
'Wolf-Cerberus',
|
||||
'Wolf-Veteran',
|
||||
];
|
||||
const BASE_PETS = [
|
||||
'Wolf',
|
||||
'TigerCub',
|
||||
'PandaCub',
|
||||
'LionCub',
|
||||
'Fox',
|
||||
'FlyingPig',
|
||||
'BearCub',
|
||||
'Dragon',
|
||||
'Cactus',
|
||||
'Dragon',
|
||||
'FlyingPig',
|
||||
'Fox',
|
||||
'LionCub',
|
||||
'PandaCub',
|
||||
'TigerCub',
|
||||
'Wolf',
|
||||
];
|
||||
if (!pet) return 'Pet-TigerCub-Fungi';
|
||||
if (!pet) return `Pet-TigerCub-${prank}`;
|
||||
if (SPECIAL_PETS.indexOf(pet) !== -1) {
|
||||
return 'Pet-Dragon-Fungi';
|
||||
return `Pet-Dragon-${prank}`;
|
||||
}
|
||||
const species = pet.slice(0, pet.indexOf('-'));
|
||||
if (includes(BASE_PETS, species)) {
|
||||
return `Pet-${species}-Fungi`;
|
||||
return `Pet-${species}-${prank}`;
|
||||
}
|
||||
return 'Pet-BearCub-Fungi';
|
||||
return `Pet-BearCub-${prank}`;
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
class="balance-info"
|
||||
:currency-needed="currencyNeeded"
|
||||
:amount-needed="amountNeeded"
|
||||
:neededCurrencyOnly="true"
|
||||
/>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
@@ -66,6 +66,7 @@
|
||||
<your-balance
|
||||
:amount-needed="amountNeeded"
|
||||
currency-needed="gems"
|
||||
class="d-flex align-items-center"
|
||||
/>
|
||||
</div>
|
||||
</td>
|
||||
|
||||
@@ -5,3 +5,9 @@ export async function searchUsers (store, payload) {
|
||||
const response = await axios.get(url);
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
export async function getUserHistory (store, payload) {
|
||||
const url = `/api/v4/admin/user/${payload.userIdentifier}/history`;
|
||||
const response = await axios.get(url);
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
@@ -32,3 +32,9 @@ export async function getHeroParty (store, payload) {
|
||||
const response = await axios.get(url);
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
export async function getHeroGroupPlans (store, payload) {
|
||||
const url = `/api/v4/hall/heroes/${payload.heroId}/group-plans`;
|
||||
const response = await axios.get(url);
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
@@ -653,5 +653,7 @@
|
||||
"questRobotCollectSprings": "Fjedre",
|
||||
"questRobotCollectGears": "Tandhjul",
|
||||
"questRobotCollectBolts": "Bolte",
|
||||
"evilSantaAddlNotes": "Bemærk at Pelsjægerjulemanden og Find Ungen har stackable questpræstationer, men giver et sjældent Kæledyr og Ridedyr, som kun kan tilføjes din stald en enkelt gang."
|
||||
"evilSantaAddlNotes": "Bemærk at Pelsjægerjulemanden og Find Ungen har stackable questpræstationer, men giver et sjældent Kæledyr og Ridedyr, som kun kan tilføjes din stald en enkelt gang.",
|
||||
"questCatRageTitle": "",
|
||||
"questCatBoss": ""
|
||||
}
|
||||
|
||||
@@ -897,5 +897,14 @@
|
||||
"backgrounds022025": "Set 129: Veröffentlicht im Februar 2025",
|
||||
"backgrounds032025": "SET 130: Veröffentlicht im März 2025",
|
||||
"backgroundMountainSceneWithBlossomsText": "Bergszene mit Blüten",
|
||||
"backgroundMountainSceneWithBlossomsNotes": "Erlebe den entzückenden Anblick und Geruch einer Bergszene mit Blüten."
|
||||
"backgroundMountainSceneWithBlossomsNotes": "Erlebe den entzückenden Anblick und Geruch einer Bergszene mit Blüten.",
|
||||
"backgroundGardenWithFlowerBedsNotes": "Genieße das Blühen des Frühlings in einem Garten mit Blumenbeeten.",
|
||||
"backgrounds0420205": "SET 131: Veröffentlicht im April 2025",
|
||||
"backgroundGardenWithFlowerBedsText": "Garten mit Blumenbeeten",
|
||||
"backgrounds052025": "SET 132: Veröffentlicht im Mai 2025",
|
||||
"backgroundTrailThroughAForestText": "Weg durch einen Wald",
|
||||
"backgroundTrailThroughAForestNotes": "Wandere einen Weg Durch Einen Wald entlang.",
|
||||
"backgrounds062025": "SET 133: Veröffentlicht im Juni 2025",
|
||||
"backgroundSummerSeashoreText": "Sommer Meeresstrand",
|
||||
"backgroundSummerSeashoreNotes": "Erwisch eine Welle an einem Sommer Meeresstrand."
|
||||
}
|
||||
|
||||
@@ -399,5 +399,16 @@
|
||||
"questEggOtterText": "Otter",
|
||||
"questEggOtterMountText": "Otter",
|
||||
"hatchingPotionJade": "Jade",
|
||||
"questEggOtterAdjective": "Ein perfider"
|
||||
"questEggOtterAdjective": "Ein perfider",
|
||||
"questEggAlpacaText": "Alpaka",
|
||||
"questEggAlpacaMountText": "Alpaka",
|
||||
"questEggAlpacaAdjective": "ein überladenes",
|
||||
"hatchingPotionBalloon": "Ballon",
|
||||
"wackyPotionAddlNotes": "Kann nicht zum Reittier großgezogen oder für Quest-Haustier Eier benutzt werden.",
|
||||
"hatchingPotionCryptid": "Kryptisch",
|
||||
"wackyPotionNotes": "Schütte dies über ein Ei und es wird als Durchgeknalltes <%= potText(locale) %> Haustier schlüpfen.",
|
||||
"questEggPlatypusText": "Schnabeltier",
|
||||
"questEggPlatypusMountText": "Schnabeltier",
|
||||
"questEggPlatypusAdjective": "ein Perfektionist",
|
||||
"hatchingPotionOpal": "Opal"
|
||||
}
|
||||
|
||||
@@ -2259,7 +2259,7 @@
|
||||
"headMystery202103Notes": "Begrüße den Frühling modisch mit diesem Kronreif aus früh-blühenden Zweigen. Gewährt keinen Attributbonus. März 2021 Abonnentengegenstand.",
|
||||
"headMystery202103Text": "Blütenschau-Kronreif",
|
||||
"armorArmoireJadeArmorText": "Jade-Rüstung",
|
||||
"armorMystery202103Notes": "Diese weichen und luftigen Roben eignen sich perfekt für eine Teeparty unter verschneiten Frühjahsblühern. Gewährt keinen Attributbonus. März 2021 Abonnentengegenstand.",
|
||||
"armorMystery202103Notes": "Diese weichen und luftigen Roben eignen sich perfekt für eine Teekränzchen unter verschneiten Frühjahsblühern. Gewährt keinen Attributbonus. März 2021 Abonnentengegenstand.",
|
||||
"armorMystery202103Text": "Blütenschau-Roben",
|
||||
"weaponArmoireJadeGlaiveText": "Jade-Gleve",
|
||||
"armorSpecialSpring2021WarriorText": "Sonnenrüstung",
|
||||
@@ -2926,8 +2926,8 @@
|
||||
"armorSpecialFall2024MageText": "Unterwelt Hexer Rüstung",
|
||||
"armorSpecialFall2024MageNotes": "Sei eins mit der Unterwelt und umarme die Macht der Magier, die vor dir diese Rüstung trugen. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2024 Herbstausrüstung.",
|
||||
"weaponArmoireFunnyFoolBatonNotes": "Du kannst mit einem Schwung Deines Stabes eine Pointe vortragen, die Aufmerksamkeit erregen oder Beifall ernten. Erhöht Ausdauer und Stärke jeweils um <%= attrs %>. Verzauberter Schrank: Lustiges Narren-Set (Gegenstand 3 von 3)",
|
||||
"armorArmoireTeaGownText": "Teeparty Kleid",
|
||||
"armorArmoireTeaGownNotes": "Du bist zäh, kreativ, brilliant und so modisch! Erhöht Stärke und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Teeparty Set (Gegenstand 1 von 3).",
|
||||
"armorArmoireTeaGownText": "Teekränzchen Kleid",
|
||||
"armorArmoireTeaGownNotes": "Du bist zäh, kreativ, brilliant und so modisch! Erhöht Stärke und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Teekränzchen Set (Gegenstand 1 von 3).",
|
||||
"armorMystery202401Text": "Verschneite Zauberer Roben",
|
||||
"armorMystery202401Notes": "Diese Roben erscheinen filigran wie Schneeflocken, aber werden dich reichlich warm halten, während du deine winterliche Magie wirkst. Gewährt keinen Attributbonus. Januar 2024 Abonnentengegenstand.",
|
||||
"armorMystery202406Notes": "Suche deine Feinde heim mit Stil und Flair! Gewährt keinen Attributbonus. Juni 2024 Abonnentengegenstand.",
|
||||
@@ -2942,7 +2942,7 @@
|
||||
"armorArmoireSoftWhiteSuitText": "Weicher weißer Anzug",
|
||||
"armorArmoireSchoolUniformPantsText": "Schuluniform mit Hose",
|
||||
"armorArmoireSchoolUniformSkirtNotes": "Ob du nun eine Schule für magische Zauberer, Drachenreiter, Ballsportspieler, kreative Künstler oder Mitglieder einer Organisation, die zu geheim ist, um sie hier aufzuzählen, besuchst, du wirst mit dieser Uniform gut dazu passen. Erhöht Intelligenz um <%= int %>.Verzauberter Schrank: Schuluniform-Set (Gegenstand 1 von 4).",
|
||||
"armorArmoireHattersSuitNotes": "Dein Outfit ist nicht vollständig ohne deine grüne Glücks-Fliege. Trage dies zu deiner nächsten verrückten Teeparty. Oder angenehmen Teeparty. Oder begeisterten Teeparty. Oder... Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Hutmacher-Set (Gegenstand 2 von 4).",
|
||||
"armorArmoireHattersSuitNotes": "Dein Outfit ist nicht vollständig ohne deine grüne Glücks-Fliege. Trage dies zu deinem nächsten verrückten Teekränzchen. Oder angenehmen Teekränzchen. Oder begeisterten Teekränzchen. Oder... Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Hutmacher-Set (Gegenstand 2 von 4).",
|
||||
"armorArmoireBlueStripedSwimsuitNotes": "Was könnte spannender sein als Seemonster am Strand zu bekämpfen? Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Strand-Set (Gegenstand 2 von 4).",
|
||||
"armorArmoireSchoolUniformPantsNotes": "Ob du nun eine Schule für magische Zauberer, Drachenreiter, Ballsportspieler, kreative Künstler oder Mitglieder einer Organisation, die zu geheim ist, um sie hier aufzuzählen, besuchst, du wirst mit dieser Uniform gut dazu passen. Erhöht Intelligenz um <%= int %>.Verzauberter Schrank: Schuluniform-Set (Gegenstand 2 von 4).",
|
||||
"armorArmoireGreenFluffTrimmedCoatNotes": "Sagen erzählen, dass einmal in einer Generation ein Mantel daherkommt, der der wärmste und bequemste von allen ist. Sein Flausch ist außergewöhnlich und seine Knöpfe sind sogar von fäustlingsumhüllten Händen handhabbar. Das ist dieser Mantel hier. Erhöht Stärke und Intelligenz um jeweils <%= attrs %>. Verzauberter Schrank: Fallenstellerhut-Set (Gegenstand 2 von 2).",
|
||||
@@ -3107,13 +3107,13 @@
|
||||
"headMystery202412Notes": "Warm und gemütlich, wie eine Tasse heißer Kakao mit Minze in einer Winternacht! Gewährt keinen Attributbonus. Dezember 2024 Abonnentengegenstand.",
|
||||
"headMystery202501Text": "Frostbinder-Hut",
|
||||
"headMystery202406Notes": "Die geisterhaften Federn, die diesen Hut zieren, leuchten schwach, wie die Wellen eines gespenstischen Meeres. Gewährt keinen Attributbonus. Juni 2024 Abonnentengegenstand.",
|
||||
"headArmoireTeaHatText": "Teepartyhut",
|
||||
"headArmoireTeaHatText": "Teekränzchenhut",
|
||||
"headArmoirePaintersBeretText": "Malermütze",
|
||||
"headArmoireAdmiralsBicorneText": "Admirals-Zweispitz",
|
||||
"headArmoireAdmiralsBicorneNotes": "Hut ab! Wenn du diesen Zweispitz trägst, wirst du weiser, klüger, mutiger... und größer sein. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Admiralsset (Gegenstand 1 von 2).",
|
||||
"headArmoireBeaniePropellerHatNotes": "Jetzt ist nicht die Zeit, um am Boden zu bleiben! Drehe diesen kleinen Propeller und erhebe dich so hoch, wie dein Ehrgeiz dich tragen wird. Erhöht alle Eigenschaften um <%= attrs %>. Verzauberter Schrank: Unabhängiger Gegenstand.",
|
||||
"headArmoirePaintersBeretNotes": "Mit dieser flotten Baskenmütze siehst du die Welt mit einem künstlerischen Auge. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Malerset (Gegenstand 2 von 4).",
|
||||
"headArmoireTeaHatNotes": "Dieser elegante Hut ist so schick wie funktional. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Teepartyset (Gegenstand 2 von 3).",
|
||||
"headArmoireTeaHatNotes": "Dieser elegante Hut ist so schick wie funktional. Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Teekränzchen Set (Gegenstand 2 von 3).",
|
||||
"headArmoirePurpleSpookySorceryHatText": "Gespenstischer Lila Magierhut",
|
||||
"headArmoirePurpleSpookySorceryHatNotes": "Purpurrot wie die Dämmerung und voller Geheimnisse, ist dieser Hut für all deine zauberhaften Bedürfnisse geeignet. Erhöht Wahrnehmung um <%= per %> und Ausdauer um <%= con %>. Verzauberter Schrank: Gespenstisches Magie-Set (Gegenstand 2 von 3).",
|
||||
"headArmoireBlackSpookySorceryHatText": "Gespenstischer Schwarzer Magierhut",
|
||||
@@ -3287,5 +3287,47 @@
|
||||
"headSpecialSpring2025HealerText": "Plumeria Kopfschmuck",
|
||||
"headSpecialSpring2025HealerNotes": "Diese Blume symbolisiert Geburt, Liebe und Neubeginn! Sie verbreitet auch einen schönen Duft, den du genießen kannst, während du an deinen Aufgaben arbeitest. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe 2025 Frühlingsausrüstung.",
|
||||
"headSpecialSpring2025MageText": "Fangschrecken Maske",
|
||||
"headSpecialSpring2025MageNotes": "Die Fangschrecke ist bekannt dafür, sich zu tarnen oder sich langsam zu bewegen. Wähle eine Taktik zu Hilfe für jedes einzelne Ziel, sei aber gewiss, daß du Taktiken jederzeit ändern kannst, wenn du musst. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2025 Frühlingsausrüstung."
|
||||
"headSpecialSpring2025MageNotes": "Die Fangschrecke ist bekannt dafür, sich zu tarnen oder sich langsam zu bewegen. Wähle eine Taktik zu Hilfe für jedes einzelne Ziel, sei aber gewiss, daß du Taktiken jederzeit ändern kannst, wenn du musst. Erhöht Wahrnehmung um <%= per %>. Limitierte Ausgabe 2025 Frühlingsausrüstung.",
|
||||
"headMystery202503Text": "Jade Juggernaut Haar",
|
||||
"headMystery202503Notes": "Diese grüne Frisur passt perfekt zu einem tapferen Krieger und Verteidiger des Planeten. Gewährt keinen Attributbonus. März 2025 Abonnentengegenstand.",
|
||||
"armorArmoireSpringPetalYukataText": "Frühlingsblüten Yukata",
|
||||
"armorArmoireSpringPetalYukataNotes": "Diesen Yukata kann man perfekt zum Feiern des kommenden Frühlings anziehen. Stell sicher, daß du für ein Foto neben Kirschblüten posierst. Erhöht Ausdauer und Stärke um jeweils <%= attrs %> . Verzauberter Schrank: Frühlingsblüten Set (Gegenstand 1 von 2).",
|
||||
"shieldSpecialSpring2025RogueText": "Kristallspitzen-Flegel",
|
||||
"shieldSpecialSpring2025RogueNotes": "Du kannst den Kristall nutzen, um eine produktive Zukunft für dich weiszusagen. Nutze die Gelegenheit und spring vorwärts! Erhöht Stärke um <%= str %>. Limitierte Ausgabe 2025 Frühlingsausrüstung.",
|
||||
"shieldSpecialSpring2025HealerText": "Plumeria Schild",
|
||||
"shieldSpecialSpring2025HealerNotes": "Du kannst dieses spezielle Blütenblatt verwenden, um Güte zu sammeln oder um negative Gedanken wegzuschnipsen. Nutze die Gelegenheit und spring vorwärts! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2025 Ausrüstung.",
|
||||
"shieldSpecialSpring2025WarriorText": "Sonnenstrahl Schild",
|
||||
"shieldSpecialSpring2025WarriorNotes": "Du kannst deine Gegner für den Moment blenden, wenn die Sonne diesen Schild genau richtig trifft. Nutze den Vorteil und spring vorwärts! Erhöht Ausdauer um <%= con %>. Limitierte Ausgabe 2025 Frühlingsausrüstung.",
|
||||
"shieldArmoireSpringPetalUchiwaNotes": "Dieser tragbare Fächer mit schönem Blütenmuster bewirkt eine leichte Brise nur für dich, wenn das Wetter wärmer wird. Erhöht Intelligenz und Wahrnehmung um jeweils <%= attrs %>. Verzauberter Schrank: Frühlingsblüten Set (Gegenstand 2 von 2).",
|
||||
"shieldArmoireSpringPetalUchiwaText": "Frühlingsblütenfächer",
|
||||
"eyewearMystery202503Text": "Jade Juggernaut Augen",
|
||||
"eyewearMystery202503Notes": "Dieser stechende Blick wird jeden Kämpfer, der es wagt, dich herauszufordern, in Panik versetzen! Gewährt keinen Attributbonus. März 2025 Abonnentengegenstand.",
|
||||
"armorMystery202504Text": "Scheues Yeti Rüstung",
|
||||
"armorMystery202504Notes": "Abscheulich? Eher anbetungswürdig! Gewährt keinen Attributbonus. April 2025 Abonnentengegenstand.",
|
||||
"armorArmoireSillyOrangeTuxedoText": "Alberner Orangen-Smoking",
|
||||
"armorArmoireSillyOrangeTuxedoNotes": "Dein eigener persönlicher Anzug des Tages. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Lächerlicher Smoking Set (Gegenstand 1 von 2).",
|
||||
"armorArmoireSillierBlueTuxedoNotes": "Verbreite Stimmung in diesem einzigartigen Outfit. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Noch Lächerlicherer Smoking Set (Gegenstand 1 von 2).",
|
||||
"armorArmoireSillierBlueTuxedoText": "Noch Lächerlicherer Blauer Smoking",
|
||||
"headMystery202504Text": "Scheues Yeti Kutte",
|
||||
"headArmoireSillyOrangeTophatText": "Alberner Orangen-Zylinder",
|
||||
"headArmoireSillyOrangeTophatNotes": "Passt gut zu einem Kürbiskuchen-Haarschnitt. Erhöht Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Lächerlicher Smoking Set (Gegenstand 2 von 2).",
|
||||
"headArmoireSillierBlueTophatText": "Noch Lächerlicherer Blauer Zylinder",
|
||||
"headMystery202504Notes": "Trage diese mysteriöse Visage, um unentdeckt unter den oskursten Fabelwesen der Welt zu verweilen. Gewährt keinen Attributbonus. April 2025 Abonnentengegenstand.",
|
||||
"headArmoireSillierBlueTophatNotes": "Etwas Klasse, etwas Raffinesse. Erhöht Stärke und Ausdauer um jeweils <%= attrs %>. Verzauberter Schrank: Noch Lächerlicherer Smoking Set (Gegenstand 2 von 2).",
|
||||
"weaponArmoireGildedKnightsSpearText": "Vergoldeter Ritter Speer",
|
||||
"weaponArmoireGildedKnightsSpearNotes": "Mit dieser Waffe kannst du sicherstellen, dass jeder immer seine Schulden bezahlt. Erhöht Stärke um <%= str %>. Verzauberter Schrank: Vergoldeter Ritter Set (Gegenstand 3 von 3)",
|
||||
"armorArmoireGildedKnightsPlateNotes": "In dieser Rüstung bist du fast unbesiegbar. Deine Feinde werden dich sicher dröhnen hören! Erhöht Wahrnehmung um <%= per %>. Verzauberter Schrank: Vergoldeter Ritter Set (Gegenstand 2 von 3)",
|
||||
"armorArmoireGildedKnightsPlateText": "Vergoldeter Ritter Rüstung",
|
||||
"headArmoireGildedKnightsHelmText": "Vergoldeter Ritter Helm",
|
||||
"headArmoireGildedKnightsHelmNotes": "Scheine hell wie die Sonne durch die Dunkelheit eines jeden Kampfes. Erhöht Ausdauer um <%= con %>. Verzauberter Schrank: Vergoldeter Ritter Set (Gegenstand 1 von 3)",
|
||||
"backMystery202505Text": "Hochfliegender Schwalbenschwanz Flügel",
|
||||
"backMystery202505Notes": "Verdien dir deine Streifen bei Steig- und Sturzflügen mit diesen aerodynamischen Flügeln. Gewährt keinen Attributbonus. Mai 2025 Abonnentengegenstand.",
|
||||
"headAccessoryMystery202505Text": "Hochfliegender Schwalbenschwanz Fühler",
|
||||
"headAccessoryMystery202505Notes": "Entdecke die besten Wildblumen Flecken mit diesen feinfühligen Anhängseln. Gewährt keinen Attributbonus. Mai 2025 Abonnentengegenstand.",
|
||||
"weaponSpecialSummer2025WarriorText": "Jakobsmuschel Lanze",
|
||||
"weaponSpecialSummer2025WarriorNotes": "Man kann nicht sagen, wie alt es ist, aber es wird während manch harter Aufgaben an deiner Seite bleiben. Erhöht Stärke um <%= str %>. Limitierte Ausgabe Sommerausrüstung 2025.",
|
||||
"weaponSpecialSummer2025RogueText": "Tintenfisch Tentakel",
|
||||
"weaponSpecialSummer2025RogueNotes": "Dieser Tentakel wird deine Ziele eng umklammern, so dass du den Schwung nicht verlierst, wenn du deine Aufgaben erledigst. Erhöht Stärke um <%= str %>. Limitierte Ausgabe Sommerausrüstung 2025.",
|
||||
"weaponSpecialSummer2025HealerText": "Ruderschnecken Flügelpaddel",
|
||||
"weaponSpecialSummer2025HealerNotes": "Beschreibe rudernd einen Doppelkreis, während du dich vorwärts bewegst, und bei deinen Aufgaben tolle Fortschritte machst. Erhöht Intelligenz um <%= int %>. Limitierte Ausgabe Sommerausrüstung 2025."
|
||||
}
|
||||
|
||||
@@ -274,5 +274,9 @@
|
||||
"spring2025PlumeriaHealerSet": "Plumeria Heiler Set",
|
||||
"spring2025MantisMageSet": "Fangschrecken Magier Set",
|
||||
"spring2025SunshineWarriorSet": "Sonnenschein Krieger Set",
|
||||
"spring2025CrystalPointRogueSet": "Kristallspitzen Schurken Set"
|
||||
"spring2025CrystalPointRogueSet": "Kristallspitzen Schurken Set",
|
||||
"summer2025ScallopWarriorSet": "Jakobsmuschel Krieger Set",
|
||||
"summer2025SquidRogueSet": "Tintenfisch Schurken Set",
|
||||
"summer2025SeaAngelHealerSet": "Ruderschnecken Heiler Set",
|
||||
"summer2025FairyWrasseMageSet": "Feenlippfisch Magier Set"
|
||||
}
|
||||
|
||||
@@ -831,5 +831,20 @@
|
||||
"questJadeDropJadePotion": "Jade Schlüpfelixier",
|
||||
"questJadeUnlockText": "Schält Jade Schlüpfelixier zum Kauf im Marktplatz frei.",
|
||||
"questOtterRageTitle": "To-Do Abriß!",
|
||||
"questJadeNotes": "Du bist zu Hause und starrst auf den Stapel dreckigen Geschirrs in der Spüle. Auf den Haufen schmutziger Wäsche in einer wahllosen Ecke des Raums. Auf die leeren Tassen und Snackverpackungen um deinen Tisch herum...<br><br>Du seufzt. „Warum ist da immer noch mehr dreckiges Geschirr... Die Sauerei hört nie auf.“ Es ist so demotivierend. Du findest dich auf der Couch wieder, endlos durch die neuesten Trends scrollend. Wer weiß, wie lang du da warst...<br><br>Als du von deinem Telefon hochsiehst, ist alles grün. Dies ist nicht dein Wohnzimmer. Als du aufstehst, findest du dich an der Seite eines leuchtend grünen Berges wieder.<br><br>Bewegung in der Ferne erregt deine Aufmerksamkeit. Eine steinerne grüne Gestalt grunzt, während sie einen Fels das steinige Terrain hoch wälzt. Er macht einige Fortschritte, aber ein kleiner Ausrutscher seines Fußes lässt den glänzenden Fels zurück nach unten rollen, direkt auf dich zu!<br><br>Er entdeckt dich, als er zu dem Brocken Jade rennt, der auf dich zu poltert! „Du denkst also, der Abwasch ist übel?“ schreit die Gestalt, „Versuch das!“"
|
||||
"questJadeNotes": "Du bist zu Hause und starrst auf den Stapel dreckigen Geschirrs in der Spüle. Auf den Haufen schmutziger Wäsche in einer wahllosen Ecke des Raums. Auf die leeren Tassen und Snackverpackungen um deinen Tisch herum...<br><br>Du seufzt. „Warum ist da immer noch mehr dreckiges Geschirr... Die Sauerei hört nie auf.“ Es ist so demotivierend. Du findest dich auf der Couch wieder, endlos durch die neuesten Trends scrollend. Wer weiß, wie lang du da warst...<br><br>Als du von deinem Telefon hochsiehst, ist alles grün. Dies ist nicht dein Wohnzimmer. Als du aufstehst, findest du dich an der Seite eines leuchtend grünen Berges wieder.<br><br>Bewegung in der Ferne erregt deine Aufmerksamkeit. Eine steinerne grüne Gestalt grunzt, während sie einen Fels das steinige Terrain hoch wälzt. Er macht einige Fortschritte, aber ein kleiner Ausrutscher seines Fußes lässt den glänzenden Fels zurück nach unten rollen, direkt auf dich zu!<br><br>Er entdeckt dich, als er zu dem Brocken Jade rennt, der auf dich zu poltert! „Du denkst also, der Abwasch ist übel?“ schreit die Gestalt, „Versuch das!“",
|
||||
"questAlpacaText": "Das Überladene Alpaka",
|
||||
"questAlpacaBoss": "Das Überladene Alpaka",
|
||||
"questAlpacaRageEffect": "Das Überladene Alpaka schleudert Gepäck nach dir! Der Boss erhält 30% seiner Gesundheit zurück!",
|
||||
"questAlpacaDropAlpacaEgg": "Alpaka (Ei)",
|
||||
"questAlpacaUnlockText": "Schaltet den Kauf von Alpaka Eiern auf dem Marktplatz frei",
|
||||
"questAlpacaRageDescription": "Dieser Balken füllt sich, wenn du deine Tagesaufgaben nicht erledigst. Wenn er voll ist, erhält Das Überladene Alpaka einen Teil seiner Gesundheit zurück!",
|
||||
"questAlpacaRageTitle": "Gepäck Erdbeben",
|
||||
"questAlpacaCompletion": "Glücklicherweise waren keine der Taschen, die das Alpaka nach dir warf, schwer, aber deine Hände sind definitiv voll. „Was sollte das?“ fragst du genervt.<br><br>“Wenn du einen Ausflug mit deinen Freunden planst, solltest du deine Last nicht alleine tragen! Ich bin sicher, deine Freunde hätten es lieber, wenn du einige deiner Sachen zu ihnen abgibst, als dass du selbst unter ihrem Gewicht zusammenbrichst. Übrigens kannst du mir jene Taschen zurückgeben. Ich bin ein erfahrenes Tragetier und habe mein Argument vorgebracht,“ sagt es mit einem Zwinkern. „Behalte aber jenes blaue Bündel als eine Belohnung für eine harte Lektion, die du gelernt hast. Ich sehe dich auf dem Gipfel!“",
|
||||
"questPlatypusText": "Das Perfektionisten Schnabeltier",
|
||||
"questPlatypusBoss": "Das Perfektionisten Schnabeltier",
|
||||
"questPlatypusRageTitle": "Schockierender Platscher",
|
||||
"questPlatypusRageDescription": "Diese Leiste füllt sich, wenn Du Deine Tagesaufgaben nicht erfüllst. Wenn sie voll ist, nimmt Das Perfektionisten Schnabeltier deiner Party einige ihrer MP weg!",
|
||||
"questPlatypusRageEffect": "Das Perfektionisten Schnabeltier taucht unter Wasser und spritzt dich naß! Die MP deiner Party sind reduziert!",
|
||||
"questPlatypusDropPlatypusEgg": "Schnabeltier (Ei)",
|
||||
"questPlatypusUnlockText": "Schält Schnabeltier Eier zum Kauf im Marktplatz frei"
|
||||
}
|
||||
|
||||
@@ -197,7 +197,7 @@
|
||||
"giftSubscriptionRateText": "<strong>$<%= price %> $(USD)</strong> für <strong><%= months %> Monate</strong>",
|
||||
"transaction_admin_update_balance": "<b>Admin</b> gegeben",
|
||||
"transaction_admin_update_hourglasses": "<b>Admin</b> aktualisiert",
|
||||
"transaction_create_bank_challenge": "Mit Edelsteinen des Gildenbankkontos <b>erstellte Herausforderungen</b>",
|
||||
"transaction_create_bank_challenge": "Bankherausforderung <b>erstellt</b>",
|
||||
"passwordIssueLength": "Passwörter müssen zwischen 8 und 64 Zeichen lang sein.",
|
||||
"timestamp": "Zeitstempel",
|
||||
"amount": "Menge",
|
||||
|
||||
@@ -261,5 +261,8 @@
|
||||
"mysterySet202411": "Borstenkämpfer Set",
|
||||
"mysterySet202501": "Frostbinder-Set",
|
||||
"mysterySet202502": "Herzliches Harlekin-Set",
|
||||
"mysterySet202503": "Jade Juggernaut Set"
|
||||
"mysterySet202503": "Jade Juggernaut Set",
|
||||
"mysterySet202504": "Scheues Yeti Set",
|
||||
"mysterySet202505": "Hochfliegender Schwalbenschwanz Set",
|
||||
"mysterySet202506": "Sonnenschein Set"
|
||||
}
|
||||
|
||||
@@ -1019,6 +1019,18 @@
|
||||
"backgroundMountainSceneWithBlossomsText": "Mountain Scene with Blossoms",
|
||||
"backgroundMountainSceneWithBlossomsNotes": "Take in the lovely sights and scents of a Mountain Scene with Blossoms.",
|
||||
|
||||
"backgrounds0420205": "SET 131: Released April 2025",
|
||||
"backgroundGardenWithFlowerBedsText": "Garden with Flower Beds",
|
||||
"backgroundGardenWithFlowerBedsNotes": "Enjoy the blooms of spring in a Garden with Flower Beds.",
|
||||
|
||||
"backgrounds052025": "SET 132: Released May 2025",
|
||||
"backgroundTrailThroughAForestText": "Trail Through a Forest",
|
||||
"backgroundTrailThroughAForestNotes": "Wander down a Trail Through a Forest.",
|
||||
|
||||
"backgrounds062025": "SET 133: Released June 2025",
|
||||
"backgroundSummerSeashoreText": "Summer Seashore",
|
||||
"backgroundSummerSeashoreNotes": "Catch a wave at a Summer Seashore.",
|
||||
|
||||
"timeTravelBackgrounds": "Steampunk Backgrounds",
|
||||
"backgroundAirshipText": "Airship",
|
||||
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",
|
||||
|
||||
@@ -279,6 +279,14 @@
|
||||
"questEggOtterMountText": "Otter",
|
||||
"questEggOtterAdjective": "a perfidious",
|
||||
|
||||
"questEggAlpacaText": "Alpaca",
|
||||
"questEggAlpacaMountText": "Alpaca",
|
||||
"questEggAlpacaAdjective": "an overpacked",
|
||||
|
||||
"questEggPlatypusText": "Platypus",
|
||||
"questEggPlatypusMountText": "Platypus",
|
||||
"questEggPlatypusAdjective": "a perfectionist",
|
||||
|
||||
"eggNotes": "Find a hatching potion to pour on this egg, and it will hatch into <%= eggAdjective(locale) %> <%= eggText(locale) %>.",
|
||||
|
||||
"hatchingPotionBase": "Base",
|
||||
@@ -345,9 +353,14 @@
|
||||
"hatchingPotionKoi": "Koi",
|
||||
"hatchingPotionGingerbread": "Gingerbread",
|
||||
"hatchingPotionJade": "Jade",
|
||||
"hatchingPotionBalloon": "Balloon",
|
||||
"hatchingPotionCryptid": "Cryptid",
|
||||
"hatchingPotionOpal": "Opal",
|
||||
|
||||
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> Pet.",
|
||||
"premiumPotionUnlimitedNotes": "Not usable on Quest Pet eggs.",
|
||||
"wackyPotionNotes": "Pour this on an egg, and it will hatch as a Wacky <%= potText(locale) %> Pet.",
|
||||
"wackyPotionAddlNotes": "Cannot be raised to Mounts or used on Quest Pet eggs.",
|
||||
|
||||
"foodMeat": "Meat",
|
||||
"foodMeatThe": "the Meat",
|
||||
|
||||
@@ -551,6 +551,15 @@
|
||||
"weaponSpecialSpring2025MageText": "Mantis Staff",
|
||||
"weaponSpecialSpring2025MageNotes": "With one slash, you can use elemental magic to control the environment around you. Take advantage and spring forward! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition Spring 2025 Gear.",
|
||||
|
||||
"weaponSpecialSummer2025WarriorText": "Scallop Lance",
|
||||
"weaponSpecialSummer2025WarriorNotes": "There’s no telling how old this is, but it will stick with you through many hard tasks. Increases Strength by <%= str %>. Limited Edition Summer 2025 Gear.",
|
||||
"weaponSpecialSummer2025RogueText": "Squid Tentacle",
|
||||
"weaponSpecialSummer2025RogueNotes": "This tentacle will grab on tight to your goals so you don’t lose momentum when completing tasks. Increases Strength by <%= str %>. Limited Edition Summer 2025 Gear.",
|
||||
"weaponSpecialSummer2025HealerText": "Sea Angel Wing Paddle",
|
||||
"weaponSpecialSummer2025HealerNotes": "Draw a figure eight as you move forward, making great progress on your tasks. Increases Intelligence by <%= int %>. Limited Edition Summer 2025 Gear.",
|
||||
"weaponSpecialSummer2025MageText": "Branch Coral",
|
||||
"weaponSpecialSummer2025MageNotes": "Branch out with your talents and skills to tackle a variety of tasks. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition Summer 2025 Gear",
|
||||
|
||||
"weaponMystery201411Text": "Pitchfork of Feasting",
|
||||
"weaponMystery201411Notes": "Stab your enemies or dig in to your favorite foods - this versatile pitchfork does it all! Confers no benefit. November 2014 Subscriber Item.",
|
||||
"weaponMystery201502Text": "Shimmery Winged Staff of Love and Also Truth",
|
||||
@@ -809,6 +818,10 @@
|
||||
"weaponArmoireSpookyCandyBucketNotes": "With an epic costume like that, you’re going to get so much candy! Good thing you’ve got this bottomless bucket to hold it all. Try not to snack on any until you get home. Increases Intelligence by <%= int %>. Enchanted Armoire: Fright Night Set (Item 2 of 2)",
|
||||
"weaponArmoireStormKnightAxeText": "Storm Knight Axe",
|
||||
"weaponArmoireStormKnightAxeNotes": "Gather your fury and strike a blow like thunder! Increases Strength by <%= str %>. Enchanted Armoire: Storm Knight Set (Item 3 of 3)",
|
||||
"weaponArmoireGildedKnightsSpearText": "Gilded Knight Spear",
|
||||
"weaponArmoireGildedKnightsSpearNotes": "With this weapon, you can make sure everybody always pays their debts. Increases Strength by <%= str %>. Enchanted Armoire: Gilded Knight Set (Item 3 of 3)",
|
||||
"weaponArmoireBeekeepersSmokerText": "Smoker",
|
||||
"weaponArmoireBeekeepersSmokerNotes": "Use this to calm your bees so you can retrieve some honey. The bees won’t mind. Honestly, we could all use a few extra minutes of calm from time to time. Increases Intelligence by <%= int %>. Enchanted Armoire: Beekeeper Set (Item 3 of 4)",
|
||||
|
||||
"armor": "armor",
|
||||
"armorCapitalized": "Armor",
|
||||
@@ -1340,6 +1353,15 @@
|
||||
"armorSpecialSpring2025MageText": "Mantis Uniform",
|
||||
"armorSpecialSpring2025MageNotes": "This stunning uniform contains flashy colors but also lets you stalk your hardest tasks with stealth. Increases Intelligence by <%= int %>. Limited Edition Spring 2025 Gear.",
|
||||
|
||||
"armorSpecialSummer2025WarriorText": "Scallop Armor",
|
||||
"armorSpecialSummer2025WarriorNotes": "Not only does this armor make you tough, but it makes you swift as well. Fight or escape—the choice is yours! Increases Constitution by <%= con %>. Limited Edition Summer 2025 Gear.",
|
||||
"armorSpecialSummer2025RogueText": "Squid Suit",
|
||||
"armorSpecialSummer2025RogueNotes": "Not only will this suit change colors at will, but it may also eject a cloud of ink. Distract or conceal—the choice is yours! Increases Perception by <%= per %>. Limited Edition Summer 2025 Gear.",
|
||||
"armorSpecialSummer2025HealerText": "Sea Angel Suit",
|
||||
"armorSpecialSummer2025HealerNotes": "Not only does this suit make you graceful, but it makes you streamlined as well. Drift or swim—the choice is yours! Increases Constitution by <%= con %>. Limited Edition Summer 2025 Gear.",
|
||||
"armorSpecialSummer2025MageText": "Fairy Wrasse Suit",
|
||||
"armorSpecialSummer2025MageNotes": "Not only does this suit have stunning colors, but it allows you to glide beautifully through the water. Swim or dance—the choice is yours! Increases Intelligence by <%= int %>. Limited Edition Summer 2025 Gear.",
|
||||
|
||||
"armorMystery201402Text": "Messenger Robes",
|
||||
"armorMystery201402Notes": "Shimmering and strong, these robes have many pockets to carry letters. Confers no benefit. February 2014 Subscriber Item.",
|
||||
"armorMystery201403Text": "Forest Walker Armor",
|
||||
@@ -1472,7 +1494,9 @@
|
||||
"armorMystery202412Notes": "A fun and fluffy look to keep you snug on a winter day. Confers no benefit. December 2024 Subscriber Item.",
|
||||
"armorMystery202502Text": "Heartfelt Harlequin Suit",
|
||||
"armorMystery202502Notes": "You’re full of kind-hearted jokes and japes from your ruffled collar to your gigantic shoes! Confers no benefit. February 2025 Subscriber Item.",
|
||||
|
||||
"armorMystery202504Text": "Elusive Yeti Armor",
|
||||
"armorMystery202504Notes": "Abominable? More like adorable! Confers no benefit. April 2025 Subscriber Item.",
|
||||
|
||||
"armorMystery301404Text": "Steampunk Suit",
|
||||
"armorMystery301404Notes": "Dapper and dashing, wot! Confers no benefit. February 3015 Subscriber Item.",
|
||||
"armorMystery301703Text": "Steampunk Peacock Gown",
|
||||
@@ -1677,7 +1701,7 @@
|
||||
"armorArmoireSchoolUniformPantsText": "School Uniform with Pants",
|
||||
"armorArmoireSchoolUniformPantsNotes": "Whether you’re attending a school for magical wizards, dragon riders, sportsball players, creative artisans, or members of a profession too secret to list here, you’ll fit right in with this uniform. Increases Intelligence by <%= int %>. Enchanted Armoire: School Uniform Set (Item 2 of 4).",
|
||||
"armorArmoireSoftWhiteSuitText": "Soft White Suit",
|
||||
"armorArmoireSoftWhiteSuitNotes": "White is a peaceful color. Whether you’re facing a crisp white bedsheet or a blanket of newly fallen snow, you’ll have a clear and ready mind. Increases Constitution by <% con %> and Perception by <%= per %>. Enchanted Armoire: White Loungewear Set (Item 2 of 3).",
|
||||
"armorArmoireSoftWhiteSuitNotes": "White is a peaceful color. Whether you’re facing a crisp white bedsheet or a blanket of newly fallen snow, you’ll have a clear and ready mind. Increases Constitution by <%= con %> and Perception by <%= per %>. Enchanted Armoire: White Loungewear Set (Item 2 of 3).",
|
||||
"armorArmoireHattersSuitText": "Hatter's Suit",
|
||||
"armorArmoireHattersSuitNotes": "Your outfit isn’t complete without your lucky green bowtie. Wear this to your next mad tea party. Or pleasant tea party. Or excited tea party. Or... Increases Constitution by <%= con %>. Enchanted Armoire: Hatter Set (Item 2 of 4).",
|
||||
"armorArmoireSmileyShirtText": "Smiley Face Shirt",
|
||||
@@ -1702,6 +1726,14 @@
|
||||
"armorArmoireSnowyFluffTrimmedCoatNotes": "As the first flakes fall around you, this coat will not only keep you toasty but also help you blend in perfectly with your snowy surroundings. Glide along the ice in style! Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Snowy Trapper Hat Set (Item 2 of 2).",
|
||||
"armorArmoireSpringPetalYukataText": "Spring Petal Yukata",
|
||||
"armorArmoireSpringPetalYukataNotes": "This yukata is perfect to wear to celebrate the coming of spring. Be sure to pose by cherry blossoms for a photo. Increases Constitution and Strength by <%= attrs %> each. Enchanted Armoire: Spring Petal Set (Item 1 of 2).",
|
||||
"armorArmoireSillyOrangeTuxedoText": "Silly Orange Tuxedo",
|
||||
"armorArmoireSillyOrangeTuxedoNotes": "Your own personal suit du jour. Increases Constitution by <%= con %>. Enchanted Armoire: Silly Tuxedo Set (Item 1 of 2).",
|
||||
"armorArmoireSillierBlueTuxedoText": "Sillier Blue Tuxedo",
|
||||
"armorArmoireSillierBlueTuxedoNotes": "Put out the vibe in this unique outfit. Increases Strength by <%= str %>. Enchanted Armoire: Sillier Tuxedo Set (Item 1 of 2).",
|
||||
"armorArmoireGildedKnightsPlateText": "Gilded Knight Armor",
|
||||
"armorArmoireGildedKnightsPlateNotes": "In this armor, you are nearly invincible. Your enemies will surely hear you roar! Increases Perception by <%= per %>. Enchanted Armoire: Gilded Knight Set (Item 2 of 3)",
|
||||
"armorArmoireBeekeepersSuitText": "Beekeeping Suit",
|
||||
"armorArmoireBeekeepersSuitNotes": "Keep yourself safe as you look after your busy bumbles. Increases Constitution by <%= con %>. Enchanted Armoire: Beekeeper Set (Item 2 of 4)",
|
||||
|
||||
"headgear": "helm",
|
||||
"headgearCapitalized": "Headgear",
|
||||
@@ -2227,6 +2259,15 @@
|
||||
"headSpecialSpring2025MageText": "Mantis Mask",
|
||||
"headSpecialSpring2025MageNotes": "The mantis is known for camouflaging or moving slowly. Choose one tactic to help with each goal but know you can always change tactics if you need to. Increases Perception by <%= per %>. Limited Edition Spring 2025 Gear.",
|
||||
|
||||
"headSpecialSummer2025WarriorText": "Scallop Helm",
|
||||
"headSpecialSummer2025WarriorNotes": "Impenetrable and perfectly pointy, this helmet will even protect you from starfish. Increases Strength by <%= str %>. Limited Edition Summer 2025 Gear.",
|
||||
"headSpecialSummer2025RogueText": "Squid Mask",
|
||||
"headSpecialSummer2025RogueNotes": "Your sight will improve the moment you put this mask on. Increases Perception by <%= per %>. Limited Edition Summer 2025 Gear.",
|
||||
"headSpecialSummer2025HealerText": "Sea Angel Helmet",
|
||||
"headSpecialSummer2025HealerNotes": "Congratulations, now you’re a sea butterfly. Increases Intelligence by <%= int %>. Limited Edition Summer 2025 Gear.",
|
||||
"headSpecialSummer2025MageText": "Fairy Wrasse Headdress",
|
||||
"headSpecialSummer2025MageNotes": "All will be mesmerized by the way your fins move with the currents. Increases Perception by <%= per %>. Limited Edition Summer 2025 Gear.",
|
||||
|
||||
"headSpecialGaymerxText": "Rainbow Warrior Helm",
|
||||
"headSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special helmet is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
|
||||
|
||||
@@ -2406,6 +2447,8 @@
|
||||
"headMystery202502Notes": "This jaunty little hat is sure to inspire joy in anyone who sees you! Confers no benefit. February 2025 Subscriber Item.",
|
||||
"headMystery202503Text": "Jade Juggernaut Hair",
|
||||
"headMystery202503Notes": "This verdant hairdo perfectly suits a brave warrior and defender of the planet. Confers no benefit. March 2025 Subscriber Item.",
|
||||
"headMystery202504Text": "Elusive Yeti Cowl",
|
||||
"headMystery202504Notes": "Wear this mysterious visage to dwell undetected among the world’s most obscure cyptids. Confers no benefit. April 2025 Subscriber Item.",
|
||||
|
||||
"headMystery301404Text": "Fancy Top Hat",
|
||||
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
|
||||
@@ -2615,7 +2658,15 @@
|
||||
"headArmoireSnowyTrapperHatText": "Snowy Trapper Hat",
|
||||
"headArmoireSnowyTrapperHatNotes": "Blue, frostbitten ears will be a thing of the past. Embrace cozy warmth in style! Increases Constitution and Perception by <%= attrs %> each. Enchanted Armoire: Snowy Trapper Hat Set (Item 1 of 2).",
|
||||
"headArmoireFancyFloralHatText": "Fancy Floral Hat",
|
||||
"headArmoireFancyFloralHatNotes": "Feast your eyes on this fancy hat full of fantastic flowers and frilly fastenings. Increases Intelligence by <%= int %>. Enchanted Armoire: Fancy Floral Accessories Set (Item 1 of 2).",
|
||||
"headArmoireFancyFloralHatNotes": "Feast your eyes on this fancy hat full of fantastic flowers and frilly fastenings. Increases Intelligence by <%= int %>. Enchanted Armoire: Fancy Floral Accessories Set (Item 1 of 2).",
|
||||
"headArmoireSillyOrangeTophatText": "Silly Orange Tophat",
|
||||
"headArmoireSillyOrangeTophatNotes": "Goes well with a pumpkin pie hair cut. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Silly Tuxedo Set (Item 2 of 2).",
|
||||
"headArmoireSillierBlueTophatText": "Sillier Blue Tophat",
|
||||
"headArmoireSillierBlueTophatNotes": "A little class, a little sophistication. Increases Strength and Constitution by <%= attrs %> each. Enchanted Armoire: Sillier Tuxedo Set (Item 2 of 2).",
|
||||
"headArmoireGildedKnightsHelmText": "Gilded Knight Helm",
|
||||
"headArmoireGildedKnightsHelmNotes": "Shine as bright as the sun through the darkness of any battle. Increases Constitution by <%= con %>. Enchanted Armoire: Gilded Knight Set (Item 1 of 3)",
|
||||
"headArmoireBeekeepersHatText": "Beekeeping Helmet and Veil",
|
||||
"headArmoireBeekeepersHatNotes": "Keep your face safe as you tend to your buzzing buddies. Increases Perception by <%= per %>. Enchanted Armoire: Beekeeper Set (Item 1 of 4)",
|
||||
|
||||
"offhand": "off-hand item",
|
||||
"offHandCapitalized": "Off-Hand Item",
|
||||
@@ -2914,7 +2965,14 @@
|
||||
"shieldSpecialSpring2025RogueText": "Crystal Point Flail",
|
||||
"shieldSpecialSpring2025RogueNotes": "You can use the crystal to divine a productive future for yourself. Take advantage and spring forward! Increases Strength by <%= str %>. Limited Edition Spring 2025 Gear.",
|
||||
"shieldSpecialSpring2025HealerText": "Plumeria Shield",
|
||||
"shieldSpecialSpring2025HealerNotes": "You can use this special petal to gather goodness or flick negative thoughts away. Take advantage and spring forward! Increases Constitution by <%= con %>. Limited Edition 2025 Gear.",
|
||||
"shieldSpecialSpring2025HealerNotes": "You can use this special petal to gather goodness or flick negative thoughts away. Take advantage and spring forward! Increases Constitution by <%= con %>. Limited Edition Spring 2025 Gear.",
|
||||
|
||||
"shieldSpecialSummer2025WarriorText": "Scallop Shell Shield",
|
||||
"shieldSpecialSummer2025WarriorNotes": "The colors are beautiful, but the ridges are dangerous. Foes, look out! Increases Constitution by <%= con %>. Limited Edition Summer 2025 Gear.",
|
||||
"shieldSpecialSummer2025RogueText": "Squid Tentacle",
|
||||
"shieldSpecialSummer2025RogueNotes": "This tentacle looks willowy, but its suckers grip tight. Foes, look out! Increases Strength by <%= str %>. Limited Edition Summer 2025 Gear.",
|
||||
"shieldSpecialSummer2025HealerText": "Sea Angel Shield",
|
||||
"shieldSpecialSummer2025HealerNotes": "This shield looks simple, but it has noxious properties. Foes, look out! Increases Constitution by <%= con %>. Limited Edition Summer 2025 Gear.",
|
||||
|
||||
"shieldMystery201601Text": "Resolution Slayer",
|
||||
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
|
||||
@@ -2940,6 +2998,8 @@
|
||||
"shieldMystery202501Notes": "Decorate any outdoor scenery with a diamond coat of shimmering frost. Confers no benefit. January 2025 Subscriber Item.",
|
||||
"shieldMystery202502Text": "Heartfelt Harlequin Balloons",
|
||||
"shieldMystery202502Notes": "This Valentine’s Day and every day, may your heart be as light as these buoyant balloons. Confers no benefit. February 2025 Subscriber Item.",
|
||||
"shieldMystery202506Text": "Solar Shine Shield",
|
||||
"shieldMystery202506Notes": "Dispel darkness and bestow warm and cheerful rays wherever you are. Confers no benefit. June 2025 Subscriber Item.",
|
||||
|
||||
"shieldMystery301405Text": "Clock Shield",
|
||||
"shieldMystery301405Notes": "Time is on your side with this towering clock shield! Confers no benefit. June 3015 Subscriber Item.",
|
||||
@@ -3112,6 +3172,8 @@
|
||||
"shieldArmoireFancyFloralFanNotes": "Finish your fancy look with this first-rate fan made of fabulous floral fabric. Increases Perception by <%= per %>. Enchanted Armoire: Fancy Floral Accessories Set (Item 2 of 2).",
|
||||
"shieldArmoireSpringPetalUchiwaText": "Spring Petal Uchiwa",
|
||||
"shieldArmoireSpringPetalUchiwaNotes": "This handheld fan featuring a beautiful petal pattern creates a small breeze just for you as the weather warms. Increases Intelligence and Perception by <%= attrs %> each. Enchanted Armoire: Spring Petal Set (Item 2 of 2).",
|
||||
"shieldArmoireBeekeepersHiveText": "Beehive",
|
||||
"shieldArmoireBeekeepersHiveNotes": "Beehives serve as both homes and worksites. You might need to talk to your bees about a good work-life balance. Increases Strength by <%= str %>. Enchanted Armoire: Beekeeper Set (Item 4 of 4)",
|
||||
|
||||
"back": "Back Accessory",
|
||||
"backBase0Text": "No Back Accessory",
|
||||
@@ -3194,6 +3256,10 @@
|
||||
"backMystery202405Notes": "These magnificent wings have the glow of pure gold but are as light as a feather. Confers no benefit. May 2024 Subscriber Item.",
|
||||
"backMystery202410Text": "Candy Corn Tail",
|
||||
"backMystery202410Notes": "This tail perks up at the mention of spooky treats. Confers no benefit. October 2024 Subscriber Item.",
|
||||
"backMystery202505Text": "Soaring Swallowtail Wings",
|
||||
"backMystery202505Notes": "Earn your stripes swooping and soaring on these aerodynamic wings. Confers no benefit. May 2025 Subscriber Item.",
|
||||
"backMystery202506Text": "Solar Shine Aureole",
|
||||
"backMystery202506Notes": "Bring a warm glow with you as you go about your daily tasks. Confers no benefit. June 2025 Subscriber Item.",
|
||||
|
||||
"backSpecialWonderconRedText": "Mighty Cape",
|
||||
"backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.",
|
||||
@@ -3441,6 +3507,8 @@
|
||||
"headAccessoryMystery202405Notes": "The metallic sheen of these fine horns reflects the dancing colors of dragon fire. Confers no benefit. May 2024 Subscriber Item.",
|
||||
"headAccessoryMystery202410Text": "Candy Corn Ears",
|
||||
"headAccessoryMystery202410Notes": "Is that the sound of trick-or-treaters at your door? Confers no benefit. October 2024 Subscriber Item.",
|
||||
"headAccessoryMystery202505Text": "Soaring Swallowtail Antennae",
|
||||
"headAccessoryMystery202505Notes": "Detect the best patches of wildflowers with these sensitive appendages. Confers no benefit. May 2025 Subscriber Item.",
|
||||
|
||||
"headAccessoryMystery301405Text": "Headwear Goggles",
|
||||
"headAccessoryMystery301405Notes": "\"Goggles are for your eyes,\" they said. \"Nobody wants goggles that you can only wear on your head,\" they said. Hah! You sure showed them! Confers no benefit. August 3015 Subscriber Item.",
|
||||
|
||||
@@ -230,7 +230,11 @@
|
||||
"spring2025SunshineWarriorSet": "Sunshine Warrior Set",
|
||||
"spring2025CrystalPointRogueSet": "Crystal Point Rogue Set",
|
||||
"spring2025PlumeriaHealerSet": "Plumeria Healer Set",
|
||||
"spring2025MantisMageSet": "Mantis Mage Set",
|
||||
"spring2025MantisMageSet": "Mantis Mage Set",
|
||||
"summer2025ScallopWarriorSet": "Scallop Warrior Set",
|
||||
"summer2025SquidRogueSet": "Squid Rogue Set",
|
||||
"summer2025SeaAngelHealerSet": "Sea Angel Healer Set",
|
||||
"summer2025FairyWrasseMageSet": "Fairy Wrasse Mage Set",
|
||||
"winterPromoGiftHeader": "GIFT A SUBSCRIPTION, GET ONE FREE!",
|
||||
"winterPromoGiftDetails1": "Until January 6th only, when you gift somebody a subscription, you get the same subscription for yourself for free!",
|
||||
"winterPromoGiftDetails2": "Please note that if you or your gift recipient already have a recurring subscription, the gifted subscription will only start after that subscription is cancelled or has expired. Thanks so much for your support! <3",
|
||||
|
||||
@@ -960,6 +960,34 @@
|
||||
"questJadeDropJadePotion": "Jade Hatching Potion",
|
||||
"questJadeUnlockText": "Unlocks Jade Hatching Potion for Purchase in the Market.",
|
||||
|
||||
"questAlpacaText": "The Overpacked Alpaca",
|
||||
"questAlpacaNotes": "The sun beams down as you hike up the rocky trailheads of the Meandering Mountains. You’ve been planning this expedition for your friend group for months, researching every aspect of the trip. The weight of supplies on your back is so much to bear, each step feels more like a burden than an adventure.<br><br>You hear a soft crunch of hooves on the trail behind you. A fluffy alpaca approaches with a gigantic stack of luggage on her back.<br><br>“Seems like you’re dragging a bit, friend, and all you’re carrying is a little backpack!” she says as she passes by.<br><br>“You make it look so easy,” you sigh. “I planned this trip for so long, but now that we’re here, I’m not even having fun…”<br><br>“Don’t get down on yourself,” the alpaca snorts. “I’ll teach you a lesson I learned long ago!” She bucks, and suddenly a bundled bedroll is flying at you! How is this helping again?!",
|
||||
"questAlpacaCompletion": "Luckily none of the bags the alpaca threw your way were heavy, but your hands are definitely full. “What was that about?” you ask, annoyed.<br><br>“If you’re planning a trip with friends, you shouldn’t be carrying your burden alone! I’m sure your friends would rather you shake off a few things onto them than for you to collapse under the weight by yourself. Anyway, you can hand me those bags back. I’m a seasoned pack animal and I’ve made my point,” she says with a wink. “But keep that blue bundle as a reward for a hard lesson learned. I’ll see you at the peak!”",
|
||||
"questAlpacaBoss": "The Overpacked Alpaca",
|
||||
"questAlpacaRageTitle": "Pack-Quake",
|
||||
"questAlpacaRageDescription": "This bar fills when you don't complete your Dailies. When it's full, The Overpacked Alpaca will regain some of its health!",
|
||||
"questAlpacaRageEffect": "The Overpacked Alpaca launches luggage at you! The boss regains 30% of its health!",
|
||||
"questAlpacaDropAlpacaEgg": "Alpaca (egg)",
|
||||
"questAlpacaUnlockText": "Unlocks Alpaca Eggs for Purchase in the Market",
|
||||
|
||||
"questPlatypusText": "The Perfectionist Platypus",
|
||||
"questPlatypusNotes": "It’s a beautiful day at Conquest Creek, only made worse by the worksheet in your hand. Why do cool adventures always get ruined by homework? You’re five questions deep about river ecosystems when they hit you with an essay response.<br><br>“Describe how an animal may adapt to river dwelling? Ugh, I don’t know...”<br><br>After spending 30 minutes hopelessly stuck on how to even start, you hear a lot of frustrated-sounding splashing down the bank.<br><br>“Augh,” a voice comes bubbling from just under the surface. A frazzled looking platypus pops up. “This burrow isn’t coming together at all! Each time I start it looks just wrong.” She dives back under the surface and her broad, flat tail throws a mighty splash right into your face.<br><br>“Wait, don’t trash it all—” you shout, as another slosh of creek water hits you. You may be able to help, and get some inspiration along the way!",
|
||||
"questPlatypusCompletion": "After an exhausting exchange of water blasts and some encouraging words from your end, the platypus finally stops and comes to the surface with a sigh.<br><br>“You may be right. If I demand flawlessness I’m just never going to finish! I can always make adjustments as I go. Seems like you know a little something about perfectionism.”<br><br>You look at your soggy worksheet “Yeah...”<br><br>“Sorry about that,” the platypus says. “Here, as an apology for getting your essay wet, please take some eggs I found in the mud.”",
|
||||
"questPlatypusBoss": "The Perfectionist Platypus",
|
||||
"questPlatypusRageTitle": "Shocking Splash",
|
||||
"questPlatypusRageDescription": "This bar fills when you don't complete your Dailies. When it's full, the Perfectionist Platypus will take away some of your party's MP!",
|
||||
"questPlatypusRageEffect": "The Perfectionist Platypus dives under the water and splashes you! The party’s MP is reduced!",
|
||||
"questPlatypusDropPlatypusEgg": "Platypus (egg)",
|
||||
"questPlatypusUnlockText": "Unlocks Platypus Eggs for Purchase in the Market",
|
||||
|
||||
"questOpalText": "The Legend of the Obscure Opals",
|
||||
"questOpalNotes": "Habitica’s scholars have long searched for the fabled Opal Magic Hatching Potion. A potion so powerful it imbues Pets and their Mount counterparts with fiery color and brilliance unlike any other gemstone or precious metal. The magic of opals is even rumored to enhance planning, insight and creativity. What a boost that would be for your tasks!<br><br>After much searching, you may have finally uncovered the answer. Opal Potions require raw opal stones to be forged with the magic runes of Libra and Mercury. These ancient items can only be found in one place... the perilous ruins of the lost city, on the edge of the Timewaste Desert.<br><br>You arrive at the ruins after days of riding your strongest Mount through the harsh and remote terrain. Among the sun-bleached and broken stones you see a bright glimmer. The search begins!",
|
||||
"questOpalCompletion": "At last, tired and dusty, you find the final runes and opal stone needed to forge the Magic Hatching Potion.<br><br>You begin the forging process the minute you’re back in Habitica’s main city. The power of the runes and opals fills your laboratory with rainbow light! In no time you’ve got three potions, and you’re excited to hatch some new colorful pals.",
|
||||
"questOpalCollectLibraRunes": "Libra Rune",
|
||||
"questOpalCollectMercuryRunes": "Mercury Rune",
|
||||
"questOpalCollectOpalGems": "Opal Gem",
|
||||
"questOpalDropOpalPotion": "Opal Hatching Potion",
|
||||
"questOpalUnlockText": "Unlocks Opal Hatching Potions for purchase in the Market",
|
||||
|
||||
"questFungiText": "The Moody Mushroom",
|
||||
"questFungiNotes": "It’s been a rainy spring in Habitica and the ground around the stables is spongy and damp. You notice quite a few mushrooms have appeared along the wooden stable walls and fences. There’s a fog hanging about, not quite letting the sun peek through, and it’s a bit dispiriting.<br><br>Out of the mist you see the outline of the April Fool, not at all his usual bouncy self.<br><br>”I’d hoped to bring you all some delightful Fungi Magic Hatching Potions so that you can keep your mushroom friends from my special day forever,” he says, his expression alarmingly unsmiling. “But this cold fog is really getting to me, it’s making me feel too tired and dismal to work my usual magic.”<br><br>“Oh no, sorry to hear that,” you say, noticing your own increasingly somber mood. “This fog is really making the day gloomy. I wonder where it came from…”<br><br>A low rumble sounds across the fields, and you see an outline emerging from the mist. You’re alarmed to see a gigantic and unhappy looking mushroom creature, and the mist appears to be emanating from it.<br><br>“Aha,” says the Fool, “I think this fungal fellow may be the source of our blues. Let’s see if we can summon a little cheer for our friend here and ourselves.”",
|
||||
|
||||
@@ -172,6 +172,9 @@
|
||||
"mysterySet202501": "Frostbinder Set",
|
||||
"mysterySet202502": "Heartfelt Harlequin Set",
|
||||
"mysterySet202503": "Jade Juggernaut Set",
|
||||
"mysterySet202504": "Elusive Yeti Set",
|
||||
"mysterySet202505": "Soaring Swallowtail Set",
|
||||
"mysterySet202506": "Solar Shine Set",
|
||||
"mysterySet301404": "Steampunk Standard Set",
|
||||
"mysterySet301405": "Steampunk Accessories Set",
|
||||
"mysterySet301703": "Peacock Steampunk Set",
|
||||
|
||||
@@ -897,5 +897,14 @@
|
||||
"backgroundCastleHallWithHearthText": "Castle Hall with Hearth",
|
||||
"backgrounds032025": "SET 130: Released March 2025",
|
||||
"backgroundMountainSceneWithBlossomsText": "Mountain Scene with Blossoms",
|
||||
"backgroundMountainSceneWithBlossomsNotes": "Take in the lovely sights and scents of a Mountain Scene with Blossoms."
|
||||
"backgroundMountainSceneWithBlossomsNotes": "Take in the lovely sights and scents of a Mountain Scene with Blossoms.",
|
||||
"backgrounds0420205": "SET 131: Released April 2025",
|
||||
"backgroundGardenWithFlowerBedsText": "Garden with Flower Beds",
|
||||
"backgroundGardenWithFlowerBedsNotes": "Enjoy the blooms of spring in a Garden with Flower Beds.",
|
||||
"backgrounds062025": "第 133 组:由2025 年 6 月发布",
|
||||
"backgroundSummerSeashoreText": "夏日海滨",
|
||||
"backgroundSummerSeashoreNotes": "在夏日海滨乘风破浪.",
|
||||
"backgrounds052025": "第 132 组:于2025 年 5 月发布",
|
||||
"backgroundTrailThroughAForestText": "穿越森林的小径",
|
||||
"backgroundTrailThroughAForestNotes": "沿着穿过森林的小径漫步。"
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"allocatePerPop": "Add a Point to Perception",
|
||||
"allocateInt": "Points allocated to Intelligence:",
|
||||
"allocateIntPop": "Add a Point to Intelligence",
|
||||
"noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue levelling up, or start a new adventure at level 1 by using the <<a href='/shops/market'>>Orb of Rebirth</a>!",
|
||||
"noMoreAllocate": "Now that you've hit level 100, you won't gain any more Stat Points. You can continue leveling up, or start a new adventure at level 1 by using the <a href='/shops/market'>Orb of Rebirth</a>!",
|
||||
"stats": "Stats",
|
||||
"strength": "Strength",
|
||||
"strText": "Strength increases the chance of random \"critical hits\" and the Gold, Experience, and drop chance boost from them. It also helps deal damage to boss monsters.",
|
||||
|
||||
@@ -399,5 +399,16 @@
|
||||
"questEggOtterText": "Otter",
|
||||
"questEggOtterMountText": "Otter",
|
||||
"questEggOtterAdjective": "a perfidious",
|
||||
"hatchingPotionJade": "Jade"
|
||||
"hatchingPotionJade": "Jade",
|
||||
"questEggAlpacaText": "Alpaca",
|
||||
"questEggAlpacaMountText": "Alpaca",
|
||||
"questEggAlpacaAdjective": "an overpacked",
|
||||
"hatchingPotionBalloon": "Balloon",
|
||||
"hatchingPotionCryptid": "Cryptid",
|
||||
"wackyPotionAddlNotes": "Cannot be raised to Mounts or used on Quest Pet eggs.",
|
||||
"wackyPotionNotes": "Pour this on an egg, and it will hatch as a Wacky <%= potText(locale) %> Pet.",
|
||||
"questEggPlatypusText": "Platypus",
|
||||
"questEggPlatypusMountText": "Platypus",
|
||||
"questEggPlatypusAdjective": "a perfectionist",
|
||||
"hatchingPotionOpal": "Opal"
|
||||
}
|
||||
|
||||
@@ -46,6 +46,199 @@
|
||||
"faqQuestion43": "How do I take on Quests?",
|
||||
"webFaqAnswer43": "To begin a Quest, you will need to be a member of a Party. Parties can be solo adventures where you challenge Quests alone, or you can invite other Habitica players to tackle Quests at a quicker rate!\n\nChoose a Quest Scroll from your inventory by selecting the “Begin Quest” button from your Party. Complete your tasks as you normally would to progress on the Quest! You’ll either build up damage against a monster if you’re taking on a Boss Quest, or have a chance to find items if you’re taking on a Collection Quest. All pending progress is applied the next day.\n\nWhen you do enough damage or collect all items, the Quest is complete and you will receive your rewards!",
|
||||
"faqQuestion44": "How can I delete Challenge tasks?",
|
||||
"webFaqAnswer44": "You will need to leave the Challenge or wait for the Challenge to be closed in order to delete the associated tasks. A red megaphone icon implies the Challenge has been closed and a gray megaphone implies the Challenge is still running.\n\nTo delete Challenge tasks on the **Android** app:\n 1. Tap on a task belonging to the Challenge.\n 2. Tap on \"Delete\" in the upper right corner of the screen.\n 3. Choose to remove the Challenge tasks from your task list.\n\nTo delete Challenge tasks on the **iOS** app:\n 1. Find the Challenge task you wish to delete and look at the megaphone icon.\n 2. If the megaphone icon is red, tap on the task and select \"Delete\" at the bottom\n 3. If the megaphone icon is gray, you’ll need to find the Challenge and leave it to remove the task.\n\nTo delete Challenge tasks on the **website**:\n 1. Find the Challenge task you wish to delete and look at the megaphone icon.\n 2. If the megaphone icon is red, click it then choose to remove the tasks from your task list.\n 3. If the megaphone icon is gray, you'll need to find the Challenge and leave it to remove the task.",
|
||||
"faqQuestion45": "My Avatar transformed into a snowman, starfish, flower, or ghost. How can I change back?"
|
||||
"webFaqAnswer44": "You will need to leave the Challenge or wait for the Challenge to be closed in order to delete the associated tasks. A red megaphone icon implies the Challenge has been closed and a gray megaphone implies the Challenge is still running.\n\nTo delete Challenge tasks on the **Android** app:\n 1. Tap on a task belonging to the Challenge.\n 2. Tap on \"Delete\" in the upper right corner of the screen.\n 3. Choose to remove the Challenge tasks from your task list.\n\nTo delete Challenge tasks on the **iOS** app:\n 1. Find the Challenge task you wish to delete and look at the megaphone icon.\n 2. If the megaphone icon is red, tap on the task and select \"Delete\" at the bottom\n 3. If the megaphone icon is grey, you’ll need to find the Challenge and leave it to remove the task.\n\nTo delete Challenge tasks on the **website**:\n 1. Find the Challenge task you wish to delete and look at the megaphone icon.\n 2. If the megaphone icon is red, click it then choose to remove the tasks from your task list.\n 3. If the megaphone icon is grey, you'll need to find the Challenge and leave it to remove the task.",
|
||||
"faqQuestion45": "My Avatar transformed into a snowman, starfish, flower, or ghost. How can I change back?",
|
||||
"contentFaqTitle": "Habitica Content Release Change FAQ",
|
||||
"contentFaqPara0": "Habitica has so much fun and engaging content to offer, and we want everyone to be able to enjoy it all! Changes are coming to make it easier for new players to get started on their collection as well as for veteran players to complete theirs!",
|
||||
"contentReleaseChanges": "Content Release Changes",
|
||||
"contentQuestion0": "What is changing?",
|
||||
"contentQuestion1": "Why is Habitica making these changes?",
|
||||
"contentFaqPara1": "Want to know more? Read on below!",
|
||||
"contentAnswer00": "Magic Hatching Potions, re-released Backgrounds, past Subscriber Sets, and Pet Quests will switch out on a predictable monthly schedule.",
|
||||
"contentQuestion2": "How are Grand Galas changing?",
|
||||
"contentAnswer12": "Players will have an easier time completing their collections with items releasing on a more predictable schedule.",
|
||||
"contentAnswer20": "There will always be a Grand Gala active every day of the year when the schedule changes go into effect.",
|
||||
"contentAnswer202": "<strong>Winter Wonderland</strong>: Dec 21 to March 20",
|
||||
"contentAnswer203": "<strong>Spring Fling</strong>: March 21 to June 20",
|
||||
"contentAnswer21": "All Gala goodies (Class gear, Skins and Hair Colors, Transformation Items, Seasonal Quests) will be released at Gala start and will be available for the entire time the Gala is active.",
|
||||
"contentAnswer22": "Magic Hatching Potions will no longer be tied to Galas and will instead be on their own monthly release schedule themed to the ongoing festivities.",
|
||||
"contentAnswer30": "Shops will rotate a selection of their items every month. This will help keep the amount of content in the shops manageable and easy to browse. The new schedule will offer fresh items to check out each month for newer players while creating a predictable schedule for veteran collectors.",
|
||||
"contentQuestion3": "How is the content release schedule changing?",
|
||||
"contentAnswer300": "<strong>1st of each month:</strong> New Subscriber set is released. Subscriber sets available in the Time Travelers Shop rotate.",
|
||||
"contentAnswer301": "<strong>7th of each month:</strong> New Enchanted Armoire items and one new Background released. Backgrounds available in the Customisation Shop rotate.",
|
||||
"contentAnswer400": "Pet Quests",
|
||||
"contentAnswer401": "Magic Hatching Potion Quests",
|
||||
"contentAnswer402": "Magic Hatching Potions",
|
||||
"contentAnswer41": "What will these new additions be?",
|
||||
"contentAnswer403": "Summer Hair Colours",
|
||||
"contentAnswer410": "Stick around to find out! Many of the new additions were highly requested and will be released throughout the year.",
|
||||
"contentQuestion5": "What is the Customisation Shop?",
|
||||
"contentAnswer50": "The Customisation Shop is the new home for all purchasable Avatar Customisation items including:",
|
||||
"contentAnswer501": "Skins",
|
||||
"contentAnswer51": "Customisations you own (both standard and purchased) will be accessible from the current Avatar Customisation interface.",
|
||||
"contentAnswer52": "We hope this change will help players sort through the customisations they own when editing their avatar’s appearance while carrying over the familiar shop experience for other purchasable items.",
|
||||
"contentAnswer53": "The Customisation Shop will be found alongside the other shops in the Menu.",
|
||||
"contentAnswer502": "Hair Colours and Styles",
|
||||
"contentAnswer60": "All other current events will continue as normal! Everyone will still get their special rewards and themed food as they do now.",
|
||||
"contentAnswer61": "Valentine’s Day and New Year cards will be released on set dates.",
|
||||
"contentQuestion6": "What will happen to other seasonal events, like Habitoween, April Fools’ Day, and Birthday?",
|
||||
"contentQuestion7": "What about other items available in the Time Travelers Shop besides past Subscriber Sets?",
|
||||
"contentAnswer63": "Wacky Pets will remain available throughout most of April.",
|
||||
"contentAnswer70": "Backgrounds, Quests, Pets, and Mounts available in the Time Travelers Shop will remain available all year round.",
|
||||
"contentAnswer71": "Stay tuned for further updates on planned improvements to the Time Travelers Shop experience.",
|
||||
"contentFaqPara3": "If you have any questions not covered by the answers above, you can always contact our team at <%= mailto %>! We’re excited for this new content release schedule and looking forward to even more projects in the future to help make Habitica better for all players.",
|
||||
"subscriptionBenefitsAdjustments": "Subscriber Benefit Adjustments",
|
||||
"subscriptionBenefitsFaqTitle": "Subscriber Benefit Adjustments FAQ",
|
||||
"subscriptionPara0": "We’re making Habitica subscriptions better than ever with even more Mystic Hourglasses and Gems! These changes make it much easier to understand your subscription benefits.",
|
||||
"subscriptionDetail003": "All new subscribers will receive 1 Mystic Hourglass immediately after purchase. This will count as the current month’s Mystic Hourglass delivery.",
|
||||
"subscriptionDetail010": "This will be in addition to the one monthly Mystic Hourglass all new subscribers receive after initial purchase.",
|
||||
"subscriptionDetail011": "Current players with an active 12 month recurring subscription will receive this bonus on the day these changes go into effect.",
|
||||
"subscriptionDetail012": "This bonus does not apply to gifted subscriptions.",
|
||||
"subscriptionHeading1": "Changes to Subscriber Gems",
|
||||
"faqQuestion67": "What are the classes in Habitica?",
|
||||
"contentAnswer02": "Brand new <strong>Pet Quests, Magic Hatching Potion Quests, and Magic Hatching Potions</strong> will be released to fill out this new schedule!",
|
||||
"contentAnswer03": "Backgrounds, Hair Colors, Hair Styles, Skins, Animal Ears, Animal Tails, and Shirts will now be purchasable from the brand new <strong>Customisation Shop!</strong>",
|
||||
"contentAnswer200": "<strong>Summer Splash</strong>: June 21 to Sept 20",
|
||||
"contentAnswer201": "<strong>Fall Festival</strong>: Sept 21 to Dec 20",
|
||||
"contentAnswer302": "<strong>14th of each month:</strong> Pet Quests, Potion Quests, and Quest Bundles available in the Quest Shop rotate.",
|
||||
"contentAnswer303": "<strong>21st of each month:</strong> Magic Hatching Potions available in the Market rotate.",
|
||||
"contentQuestion4": "What brand-new content is coming?",
|
||||
"contentAnswer40": "To fill this new schedule, we’ve been hard at work creating new items in a variety of categories including:",
|
||||
"contentAnswer62": "Valentine’s Day Magic Hatching Potions are now worked into the monthly schedule.",
|
||||
"subscriptionHeading0": "Changes to Mystic Hourglasses",
|
||||
"subscriptionDetail000": "Being subscribed for 12 months will earn you 12 Mystic Hourglasses instead of the previous 4.",
|
||||
"subscriptionDetail101": "Any subscribers that currently have an odd number of Gems per month will have their Gem cap rounded up to the nearest even number.",
|
||||
"subscriptionDetail102": "New 12 month subscriptions will immediately start at the max amount of Gems per month immediately, 50 Gems instead of the previous 45.",
|
||||
"subscriptionDetail11": "The amount of Gems you can purchase each month for Gold will no longer be reset if your subscription lapses.",
|
||||
"subscriptionHeading2": "Why are we making these changes?",
|
||||
"subscriptionDetail20": "Under the current structure, it can be difficult to understand how many Mystic Hourglasses you would receive and when.",
|
||||
"subscriptionDetail21": "The four subscription tiers were known to cause complications when upgrading or downgrading to different tiers.",
|
||||
"subscriptionDetail22": "Gifted and recurring subscriptions had conflicting benefit experiences and rules that we wanted to simplify.",
|
||||
"subscriptionDetail24": "We wanted subscribers to have more than four chances per year to collect items from the Time Travelers Shop.",
|
||||
"subscriptionHeading3": "Release day rewards",
|
||||
"subscriptionPara1": "To help ease the transition to the new schedule, existing subscribers can expect some extra goodies on release day. We want to sincerely thank you for your continued support through this change!",
|
||||
"subscriptionDetail30": "Players with recurring 1 month subscriptions or Group Plan subscriptions will receive 2 Mystic Hourglasses and 20 Gems.",
|
||||
"subscriptionDetail31": "Players with recurring 3 or 6 month subscriptions will receive 4 Mystic Hourglasses and 20 Gems.",
|
||||
"subscriptionDetail33": "To receive these rewards, your account must have an active recurring subscription before November 19.",
|
||||
"subscriptionDetail40": "I’m a subscriber, when will I get my first regular Mystic Hourglass and Gem cap increase from the new schedule?",
|
||||
"subscriptionDetail41": "Will the price of subscriptions change when this is released?",
|
||||
"subscriptionDetail410": "These changes will not affect the current price of subscriptions.",
|
||||
"subscriptionDetail42": "If I don’t log in for a month while subscribed, will I miss out on those benefits?",
|
||||
"subscriptionDetail43": "If I sign up for a recurring subscription then cancel, will I still get benefits?",
|
||||
"subscriptionDetail44": "I’m a current subscriber, how many Gems will I have available in the Market each month after the change?",
|
||||
"subscriptionDetail440": "On the day these changes go into effect, current subscribers with an odd number of Gems per month will see these adjustments to their Gem cap:",
|
||||
"subscriptionDetail450": "Since Mystic Hourglasses and raising the Gem cap is now a monthly benefit, purchasing multiple gifted subscriptions will not give more benefits at once.",
|
||||
"subscriptionDetail46": "If I had a subscription in the past, can I unlock my old Gem cap if I resubscribe now?",
|
||||
"subscriptionDetail460": "Since we used to reset the amount of Gems you could buy each month when your benefits ran out, players with lapsed subscription benefits will have to start fresh under this new system.",
|
||||
"subscriptionDetail47": "I have a Group Plan subscription, how does this affect me?",
|
||||
"subscriptionDetail48": "Are there any changes to other subscription benefits, like Mystery Gear Sets?",
|
||||
"subscriptionDetail480": "These changes only affect Mystic Hourglasses and subscriber Gems. All other benefits will remain the same.",
|
||||
"subscriptionPara2": "If you have any questions not covered by the answers above, you can always contact our team at <%= mailto %>.",
|
||||
"contentAnswer01": "<strong>Grand Galas are being extended</strong> to be active throughout the whole season, along with all their Class gear, Avatar Customizations, and other goodies.",
|
||||
"contentAnswer10": "Habitica has been around since 2013 (wow!) and over time we’ve released thousands of items players can collect. This can be overwhelming, especially for new players. We want to be sure that we showcase everything we have to offer, and that excellent items released earlier in our history aren’t overlooked.",
|
||||
"contentAnswer11": "When new players join between Grand Galas they are often unaware of these events and miss out on the fun. We want to be sure all new players can join in on our seasonal festivities no matter when they choose to start their journeys.",
|
||||
"subscriptionDetail00": "All subscribers, including those with gifted subscriptions, will receive 1 Mystic Hourglass at the start of each month they have subscriber benefits.",
|
||||
"subscriptionDetail23": "Giving one Mystic Hourglass per month allows subscribers to enjoy the rotating items in the Time Travelers Shop.",
|
||||
"subscriptionDetail32": "Players with recurring 12 month subscriptions will receive the 12 Mystic Hourglass bonus noted above and 20 Gems.",
|
||||
"subscriptionDetail001": "All subscribers will receive Mystic Hourglasses on the same schedule, matching the release schedule of the monthly Mystery Gear Sets.",
|
||||
"subscriptionDetail25": "We understand that finances change and we didn’t want to punish subscribers for lapsed subscriptions by taking away benefits they had earned.",
|
||||
"subscriptionDetail002": "Subscribers will no longer need to wait until the month following their recurring payment to receive any Mystic Hourglasses.",
|
||||
"subscriptionDetail01": "New 12 month recurring subscriptions will get an initial one-time bonus of an extra 12 Mystic Hourglasses upon purchase.",
|
||||
"subscriptionDetail10": "The amount of Gems subscribers can purchase with Gold in the Market will increase by 2 each month they have benefits until reaching a max of 50.",
|
||||
"subscriptionDetail100": "New 1, 3, and 6 month subscriptions will now start at 24 Gems per month and that value will increase each month they have benefits.",
|
||||
"subscriptionDetail400": "For current subscribers, you’ll get your first Mystic Hourglass and +2 Gems added to your monthly cap on your first login of the month after release. This means if you happen to have logged in already in November, your first regular increase will happen in December.",
|
||||
"subscriptionDetail110": "If you raise the amount of Gems you can buy each month then cancel your subscription, you can pick back up at the same amount any time in the future, even if you purchase a lower subscription tier.",
|
||||
"subscriptionDetail420": "Just like Mystery Gear Sets, you will not miss out on any Mystic Hourglasses or Gem cap increases if you don’t log in while subscribed. The next time you log in, you will receive all benefits owed for each month you were subscribed.",
|
||||
"subscriptionDetail4400": "If you currently have unlocked <%= initialNumber %> Gems per month, you will be set to <%= roundedNumber %>.",
|
||||
"subscriptionPara3": "We hope this new schedule will be more predictable, allow more access to the amazing stock of items in the Time Travelers Shop, and give even more motivation to make progress on your tasks each month!",
|
||||
"subscriptionDetail45": "Will purchasing extra gifted subscriptions get me more Mystic Hourglasses or a higher Gem cap faster?",
|
||||
"subscriptionDetail430": "Cancelling a recurring subscription will set a termination date for your benefits, but you will still have full access to all perks of a subscription before that date. That means you will still receive monthly Mystic Hourglasses and Gem cap increases at the start of each month you have access to those benefits.",
|
||||
"subscriptionDetail451": "Each gifted subscription will add to the amount of months a player has subscription benefits, allowing them to continue receiving more Mystic Hourglasses and increases to their Gem cap each passing month.",
|
||||
"subscriptionDetail470": "Group Plan subscribers’ benefits will behave the same as those for a 1 month recurring subscription. You’ll receive a Mystic Hourglass at the start of each month and the amount of Gems you can purchase each month in the Market will increase by 2 until reaching 50.",
|
||||
"webFaqAnswer45": "One of your Party members used a Seasonal Shop transformation item on you! Your Avatar will change back to normal the next day. If you want to remove the transformation sooner, you can purchase an antidote (Salt, Sand, Petal-free, or Opaque Potion) from Rewards.",
|
||||
"webFaqAnswer46": "If you think you’ve encountered a bug, please let us know!\n\nTo report a bug on the mobile apps:\n * From the menu, select Support then tap “Get Help” and scroll down to “Report a Bug”\n\nTo report a bug on the website:\n * From the Help menu, select “Report a Bug”",
|
||||
"faqQuestion47": "Can I see data on how well I’ve been doing with my tasks and habits?",
|
||||
"webFaqAnswer47": "At this time, Habitica does not have a visual representation of your task data over time. However, on the Habitica website, you can export your task data from the Site Data tab in Settings.",
|
||||
"faqQuestion48": "Can I play Habitica with others?",
|
||||
"webFaqAnswer48": "Yes, with Parties! You can start your own Party or join an existing one. Partying with other Habitica players is a great way to take on Quests, receive buffs from Party members’ skills, and boost your motivation with additional accountability.",
|
||||
"faqQuestion49": "How do I find a Party when I'm not in one?",
|
||||
"webFaqAnswer49": "If you want to experience Habitica with others but don’t know other players, searching for a Party is your best option! If you already know other players that have a Party, you can share your @username with them to be invited. Alternatively, you can create a new Party and invite them with their @username or email address.\n\nTo create or search for a Party, select “Party” in the navigation menu, then choose the option that works for you.",
|
||||
"faqQuestion50": "How does searching for a Party work?",
|
||||
"webFaqAnswer50": "After selecting \"Look for a Party\", you’ll be added to a list of players that want to join a Party. Party leaders can view this list and send invitations. Once you receive an invitation, you can accept it from your notifications to join the Party of your choosing!\n\nYou may get multiple invitations to different Parties. However, you can only be a member of one Party at a time.",
|
||||
"faqQuestion51": "How long can I search for a Party after joining the list?",
|
||||
"webFaqAnswer51": "You will remain in the list until you accept an invite to a Party or don’t login for 7 days, whichever comes first. If you log in after being inactive for 7 days, we’ll automatically add you back to the list as long as you don't have a pending invite.",
|
||||
"faqQuestion52": "Can I stop searching for a Party?",
|
||||
"webFaqAnswer52": "If you no longer want to find a Party, you can stop searching at any time.\n\nTo stop searching for a Party on the mobile apps:\n * From the menu, select \"Party\" and tap \"Leave\" at the bottom of the screen.\n\nTo stop searching for a Party on Habitica’s website:\n * Select \"Party\" from the navigation and click \"Leave\" in the pop-up.",
|
||||
"faqQuestion53": "I have a Party, how do I find more members?",
|
||||
"webFaqAnswer53": "If you are using Habitica’s website, select \"Find Members\" from the Party dropdown. If you’re using the Android app, tap \"Find Members\" above your Party’s member list. This will display a list of players that are actively looking for a Party and can be invited to join.\n\nTo help find a good fit for your Party, you'll see some information, such as language, class, level, and how many days they have used Habitica. If you’d like to chat with someone before sending an invite, you can view their Profile and send a message.",
|
||||
"faqQuestion54": "How many members can I invite to my Party?",
|
||||
"webFaqAnswer54": "Parties have a maximum limit of 30 members and a minimum of 1 member. Pending invites count towards the member count. For example, 29 members and 1 pending invite would count as 30 members. To clear a pending invite, the invited player must accept or decline, or the Party leader must cancel the invite.",
|
||||
"faqQuestion55": "Can I invite someone I already know?",
|
||||
"webFaqAnswer55": "Yes! If you already have a Habitica player’s username or email address, you can invite them to join your Party. Here’s how to send an invite on the different platforms:\n\nTo invite someone on the mobile apps:\n 1. From the menu, select \"Party\" and scroll down to the Members section\n 2. Tap \"Find Members\" then switch to the \"By Invite\" tab\n 3. Enter the usernames or email addresses of the players you want to invite and click \"Send Invite\"\n\nTo invite someone on the website:\n 1. Navigate to your Party and click \"Invite to Party\"\n 2. Enter the usernames or email addresses of the players you want to invite and click \"Send Invites\"",
|
||||
"faqQuestion56": "How do I cancel a pending invitation to my Party?",
|
||||
"webFaqAnswer56": "To cancel a pending invitation on the mobile apps:\n 1. When viewing your Party, scroll down to the bottom of your Member list\n 2. Find the player whose invite you wish to cancel and tap the “Cancel invitation” button.\n\nTo cancel a pending invitation on the website:\n1. Navigate to your Party’s member list and switch to the “Invites” tab\n 2. Hover the player whose invite you wish to cancel\n 3. Click the three dots and choose “Cancel Invite”",
|
||||
"faqQuestion57": "How do I stop unwanted invitations?",
|
||||
"webFaqAnswer57": "Once you join a Party you’ll stop receiving any more invitations. If you want to prevent invites and future communications from a specific player, view their profile and click the Block button. On mobile profiles, tap the three dots in the top corner then select “Block”.\n\nIf you encounter a situation where you believe another player has broken our Community Guidelines in their name, profile, or a message they sent, please report any messages or reach out to us at admin@habitica.com.",
|
||||
"faqQuestion58": "How do I filter the list of members searching for a Party?",
|
||||
"webFaqAnswer58": "At the moment there is no way to filter the list of members searching for a Party. However, we have plans to introduce filters in the future, such as class, level, and language.",
|
||||
"groupPlan": "Group Plans",
|
||||
"faqQuestion59": "What is a Group Plan?",
|
||||
"webFaqAnswer59": "Habitica Group Plans provide a shared experience by allowing members to easily add, assign, and complete tasks from a shared task board. With features like member roles, status view, and task assigning, Group Plans are great for families or teams of colleagues that have shared goals. They’re also a great way to keep each other motivated on your journey to fight monsters and improve your life.",
|
||||
"faqQuestion60": "How do I get started with my Group Plan?",
|
||||
"faqQuestion61": "Can other Group Plan members create tasks?",
|
||||
"webFaqAnswer61": "Only the Group Plan leader and managers can create shared tasks. If you’d like a member to be able to create tasks, then you should promote them to manager.\n\nTo promote a Group Plan member to a manager on the website:\n 1. Navigate to your Group Plan then switch to the \"Group Information\" tab\n 2. View your Member List and click on the dot icon by the member you want to promote\n 3. Select \"Assign Manager\"",
|
||||
"faqQuestion62": "How do assigned tasks work?",
|
||||
"webFaqAnswer62": "Group Plans give you the unique ability to assign shared tasks to other members of your Group Plan. When a shared task is assigned to a member, other members are prevented from completing it.\n\nYou can also assign a task to multiple members. For example, if everyone has to brush their teeth, create a task and assign it to each member. Each member will be able to complete the task and earn their individual rewards. The main task will show as complete once everyone has completed it.",
|
||||
"faqQuestion63": "How do unassigned tasks work?",
|
||||
"webFaqAnswer63": "Unassigned tasks can be completed by any member. For example, taking out the trash. Whoever takes out the trash can complete the unassigned task and it will show as completed for everyone.",
|
||||
"faqQuestion64": "How does the synchronised day reset work?",
|
||||
"webFaqAnswer64": "Shared tasks will reset at the same time for everyone to keep the shared task board in sync. This time is visible on the shared task board and is determined by the Group Plan leader’s day start time. Because shared tasks reset automatically, you will not get a chance to complete yesterday’s uncompleted shared Dailies when you check in the next morning.\n\nShared Dailies will not do damage if they are missed, however they will degrade in colour to help visualize progress.",
|
||||
"webFaqAnswer65": "While the mobile apps don’t fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android apps!\n\nOn Android, you can tap your Display Name at the top of the screen when viewing your tasks to switch to your shared task board. From there you can view members, access your chat, and create, complete, or assign tasks.\n\nYou can also switch on a preference to copy shared tasks to your personal task board so you can complete all your tasks from one place.\n\nTo do this on the mobile apps:\n * Open Settings and switch on “Copy shared tasks”\n\nTo do this on Habitica’s website:\n * Navigate to your Group Plan and switch on the “Copy tasks” toggle on the shared task board",
|
||||
"faqQuestion66": "What’s the difference between a Group Plan’s shared tasks and Challenge tasks?",
|
||||
"webFaqAnswer66": "Group Plan shared task boards are more dynamic than Challenges, in that they can constantly be updated and interacted with. Challenges are great if you have one set of tasks to send out to many people.\n\nGroup Plans are also a paid feature, while Challenges are available free to everyone.\n\nYou cannot assign specific tasks in Challenges, and Challenges do not have a shared day reset. In general, Challenges offer less control and direct interaction.",
|
||||
"sunsetFaqList1": "Habitica’s primary purpose is to provide motivation through a gamified task management experience. Guilds and Tavern are utilised by a disproportionately small percentage of our player base. The majority of players use outside services that are primarily intended for social interaction and are intentionally designed and maintained with those use cases in mind.",
|
||||
"sunsetFaqList3": "It’s important to us to continue offering worldwide access to Habitica’s ever-growing international player base. Removing these services allows us to continue that goal without having to consider restricting access in regions where more active content oversight than we can provide is required.",
|
||||
"sunsetFaqPara14": "<strong>Linguists</strong><br />We continue to welcome help with translating the apps and website and will still be awarding contributor tiers for qualifying contributions. However, the method with which we accept translations will be changing. We’d like to focus our resources on supporting a set selection of languages across all platforms. To do this, we will be reducing the amount of languages available for translation. Previously unfinished languages will be archived in Github. We hope this change will make the cross platform Habitica experience more consistent. You can read our most up to date translation procedure guidelines on our <a href='https://translate.habitica.com/projects/habitica/#information'>translation website</a>.",
|
||||
"sunsetFaqPara16": "<strong>Socialites</strong><br />This type of contribution will be ending with the Tavern and Guild discontinuation. We are extremely grateful for the work that our friendly and helpful players have done answering questions in our chat spaces.",
|
||||
"sunsetFaqPara5": "If you’d like to know more about what's changing, you can read the details below.",
|
||||
"sunsetFaqHeader2": "Why are the Tavern and Guild services ending?",
|
||||
"sunsetFaqList2": "New online safety laws require a level of active content oversight for public spaces that Habitica has historically not provided. Investing in the features that these new regulations would require would result in our limited resources being redirected towards parts of Habitica that the vast majority of players never touch.",
|
||||
"sunsetFaqHeader5": "How will I access my Group Plan if it’s an upgraded Guild?",
|
||||
"sunsetFaqPara9": "<p><strong>Browser</strong>: Click on the Group Plan navigation in the top bar.</p><p><strong>Android:</strong> Tap your name at the top of the screen when viewing a task list to switch to your shared tasks. To access your chat, tap the chat icon in the header on that screen.</p><p><strong>iOS</strong>: Tap the name of your Group Plan in the menu.</p>",
|
||||
"sunsetFaqPara13": "<strong>Blacksmiths</strong><br />We still welcome open-source help through our GitHub and will continue awarding tiers for qualifying contributions. Blacksmith collaboration and discussion has largely taken place over GitHub and that will continue.",
|
||||
"sunsetFaqPara18": "<strong>Artisans</strong><br />We are discontinuing artisan contributions. Most art production has already been moved in-house to keep up with our content releases. We are deeply grateful for the fantastic art made over the years by our contributor community.",
|
||||
"sunsetFaqPara19": "<strong>Wiki Wizards</strong><br />The Habitica Wiki is a wonderful tool created by players for players that has helped so many. We continue to support this effort, but will no longer be tracking or offering tiers for Wiki editing as we shift our focus towards Linguist, Blacksmith, and Challenger contributions within Habitica.",
|
||||
"sunsetFaqHeader9": "How will Challenges be affected?",
|
||||
"sunsetFaqHeader10": "Where will players go when they have questions about how to use Habitica?",
|
||||
"sunsetFaqHeader11": "How does this affect Habitica’s Community Guidelines and Terms of Service?",
|
||||
"sunsetFaqTitle": "Habitica Tavern and Guild Service Discontinuation FAQ",
|
||||
"sunsetFaqPara1": "Due to a number of factors, including changes in how our player base interacts with Habitica and new content regulations, we are making the difficult decision to discontinue Tavern and Guild services on <strong>August 8, 2023</strong>.",
|
||||
"sunsetFaqPara3": "We’re making this decision so we can better focus our resources on the parts of Habitica players rely on most without disrupting anyone’s access.",
|
||||
"sunsetFaqPara4": "To celebrate the times we’ve had, we will be gifting everyone a Veteran Pet as we move forward into this new era. For our amazing contributors, we’ll also be sending out a special gear set to commemorate all their hard work in Habitica’s communities.",
|
||||
"sunsetFaqHeader1": "Which services are ending?",
|
||||
"sunsetFaqPara6": "Service for Tavern as well as public and private Guilds is ending and these spaces will be removed from Habitica on <strong>August 8, 2023</strong>.",
|
||||
"sunsetFaqHeader3": "Will I still be able to talk with my Party or Group Plan members?",
|
||||
"sunsetFaqPara7": "Parties and Group Plans will remain and retain their chat spaces. You’ll also still be able to send private messages.",
|
||||
"sunsetFaqHeader4": "Where do I go to pause my Dailies?",
|
||||
"sunsetFaqPara8": "This feature has been relocated to Settings. The functions of Pause Damage will not be affected by the end of the Tavern and Guild services.",
|
||||
"sunsetFaqHeader6": "Will players be able to retrieve their Guild chats after the services end?",
|
||||
"sunsetFaqPara10": "Players will not be able to retrieve chat data from the Tavern and Guilds after the services end.",
|
||||
"sunsetFaqHeader7": "How will players find Party members?",
|
||||
"sunsetFaqPara11": "Our new Looking for Party feature is now available. Most players who look for a Party receive an invite within minutes! The team is working hard to add more platform support and improvements to this feature in the near future. You can learn more about how to search for Parties and Party members from our FAQ.",
|
||||
"sunsetFaqHeader8": "How does this affect Habitica contributors?",
|
||||
"sunsetFaqPara12": "As an open-source project, we welcome and encourage many types of contributions. To show our appreciation we will be sending the Heroic gear set to everyone that has a contributor tier as of <strong>August 1, 2023</strong>. When Tavern and Guild services end, there will be some changes to contributions as well. You can read more about the plan for each type below.",
|
||||
"sunsetFaqPara15": "<strong>Challengers</strong><br />The team encourages you to continue creating high quality Challenges. We would like to explore new ways of promoting Challenge discoverability in and outside of the app.",
|
||||
"sunsetFaqPara17": "<strong>Comrades</strong><br />Scripts and add-ons are helpful to a shrinking section of our user base as the mobile apps increasingly become the only way that most users access Habitica. Contributors wishing to create 3rd party tools to customize their Habitica experience can continue doing so, but we will no longer be awarding Comrade tiers as we focus on contributions that enhance Habitica in a way that is accessible to our player base as a whole.",
|
||||
"sunsetFaqList4": "Public Challenges will continue as a feature in Habitica and will be accessible via the Challenges section.",
|
||||
"sunsetFaqList5": "Challenges based in Parties and Group Plans will remain and be unaffected by the end of Tavern and Guild services.",
|
||||
"sunsetFaqList6": "Challenges that are currently hosted in Guilds will remain accessible to current participants from their Challenges list, but will not be discoverable in the public list due to privacy concerns. It will not be possible to create new Guild-based Challenges.",
|
||||
"sunsetFaqList7": "Currently many Challenges have tasks that require posts in Habitica’s public chat spaces. Creators of those Challenges can adapt their tasks or move the chat requirement to posting on an outside service.",
|
||||
"sunsetFaqList8": "Our existing <a href='https://habitica.com/static/faq'>FAQ</a> is a great resource and can be found from the Help menu, or Support on mobile. We are in the process of creating a more comprehensive and improved FAQ to help guide players moving forward.",
|
||||
"sunsetFaqList9": "This <a href='https://habitica.wordpress.com/beginning-adventurers-guide/'>blog post</a> also provides a handy guide for new players.",
|
||||
"sunsetFaqList10": "Players are also encouraged to email <a href='mailto:admin@habitica.com'>admin@habitica.com</a> with any questions for which they cannot find answers in the above links.",
|
||||
"sunsetFaqPara20": "Habitica’s Community Guidelines will be updated at the time Tavern and Guild service is discontinued. They will reflect that community rules for conduct are now in relation to player profiles, Challenges, and messages in private spaces. Our Terms of Service have always applied to both public and private spaces and do not require an immediate update in regard to this change.",
|
||||
"sunsetFaqHeader12": "What will happen to Guild Bank Gems?",
|
||||
"sunsetFaqPara21": "Gems in the Guild Bank will be refunded to the leader of the Guild on August 8th when Guild Services end.",
|
||||
"anotherQuestion": "Have another question?",
|
||||
"contactAdmin": "Contact <a href='mailto:admin@habitica.com'>admin@habitica.com</a>"
|
||||
}
|
||||
|
||||
@@ -2258,5 +2258,95 @@
|
||||
"weaponSpecialSpring2023HealerNotes": "With a puff and a sparkle, you deploy new growth, joy, and colour. Increases Intelligence by <%= int %>. Limited Edition 2023 Spring Gear.",
|
||||
"gearItemsCompleted": "You own all <%= klass %> gear! New gear is released during the seasonal Galas.",
|
||||
"moreArmoireGearAvailable": "Until then, there's <%= armoireCount %> pieces of gear in the Enchanted Wardrobe to find!",
|
||||
"moreArmoireGearComing": "The Enchanted Wardrobe gets new stock every month too!"
|
||||
"moreArmoireGearComing": "The Enchanted Wardrobe gets new stock every month too!",
|
||||
"weaponSpecialSummer2021HealerText": "Staff of Corn",
|
||||
"weaponSpecialSpring2021WarriorNotes": "Harness the power of the sun against your enemies, and let the sunstone bring you luck! Increases Strength by <%= str %>. Limited Edition 2021 Spring Gear.",
|
||||
"weaponSpecialSummer2021WarriorText": "Watery Blade",
|
||||
"weaponSpecialSpring2021MageText": "Swan Plume",
|
||||
"weaponSpecialSummer2021WarriorNotes": "This shimmering blade may flow like water, but it can cut to the heart of the trickiest problems! Increases Strength by <%= str %>. Limited Edition 2021 Summer Gear.",
|
||||
"weaponSpecialSummer2021RogueText": "Anemone Tentacles",
|
||||
"weaponSpecialSummer2021HealerNotes": "Not to get corny, but this staff is a lifesaver. Increases Intelligence by <%= int %>. Limited Edition 2021 Summer Gear.",
|
||||
"weaponSpecialSpring2021MageNotes": "Throw, beat, treadle, rest! Swish this magnificent feather in time to conduct the music of your magic. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2021 Spring Gear.",
|
||||
"weaponSpecialSpring2021HealerNotes": "The bark and leaves of this fresh cutting are known for their ability to relieve pain. Or you can plant it and watch it grow! Increases Intelligence by <%= int %>. Limited Edition 2021 Spring Gear.",
|
||||
"weaponSpecialSpring2021HealerText": "Willow Branch",
|
||||
"weaponSpecialSpring2021RogueNotes": "You know what's better than dual-wielding flowers? QUADRUPLE wielding flowers! Increases Strength by <%= str %>. Limited Edition 2021 Spring Gear.",
|
||||
"weaponSpecialSummer2021RogueNotes": "Any predatory monster that dares approach will feel the sting of your protective friends! Increases Strength by <%= str %>. Limited Edition 2021 Summer Gear.",
|
||||
"weaponSpecialSummer2021MageText": "Nautiloid Cane",
|
||||
"weaponSpecialSpring2021RogueText": "Twin Flower Bloom",
|
||||
"weaponSpecialSummer2021MageNotes": "Whether your magical ambitions run twenty thousand leagues deep, or if you intend only to dip in the shallows of the art, this shining implement will serve you well! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2021 Summer Gear.",
|
||||
"weaponSpecialSpring2021WarriorText": "Hammer of the Sun",
|
||||
"weaponSpecialFall2021RogueText": "Dripping Goo",
|
||||
"weaponSpecialFall2021RogueNotes": "What on Earth did you get into? When people say Rogues have sticky fingers, this is not what they mean! Increases Strength by <%= str %>. Limited Edition 2021 Autumn Gear.",
|
||||
"weaponSpecialFall2021WarriorText": "Horse Rider's Axe",
|
||||
"weaponSpecialFall2021WarriorNotes": "This stylized, single-bladed axe is ideal for chopping... pumpkins! Increases Strength by <%= str %>. Limited Edition 2021 Autumn Gear.",
|
||||
"weaponSpecialFall2021MageText": "Staff of Pure Thought",
|
||||
"weaponSpecialSummer2022RogueNotes": "If you're in a pinch, don't hesitate to show these fearsome claws! Increases Strength by <%= str %>. Limited Edition 2022 Summer Gear.",
|
||||
"weaponSpecialSummer2022RogueText": "Crab Claw",
|
||||
"weaponSpecialSummer2022MageText": "Manta Ray Staff",
|
||||
"weaponSpecialSummer2022WarriorText": "Whirling Cyclone",
|
||||
"weaponSpecialSummer2022MageNotes": "Magically clear the waters ahead of you with one swirl of this staff. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2022 Summer Gear.",
|
||||
"weaponSpecialSummer2022WarriorNotes": "It spins! It redirects! And it brings the storm! Increases Strength by <%= str %>. Limited Edition 2022 Summer Gear.",
|
||||
"weaponSpecialSummer2022HealerText": "Beneficial Bubbles",
|
||||
"weaponSpecialSpring2022RogueNotes": "A shiny! It’s so shiny and gleaming and pretty and nice and all yours! Increases Strength by <%= str %>. Limited Edition 2022 Spring Gear.",
|
||||
"weaponSpecialSummer2022HealerNotes": "These bubbles release healing magic into the water with a satisfying pop! Increases Intelligence by <%= int %>. Limited Edition 2022 Summer Gear.",
|
||||
"headSpecialNye2022Text": "Fabulous Party Hat",
|
||||
"headSpecialNye2022Notes": "You've received a Fabulous Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
|
||||
"weaponSpecialSpring2022RogueText": "Giant Earring Stud",
|
||||
"weaponSpecialWinter2022RogueText": "Shooting Star Firework",
|
||||
"weaponSpecialWinter2022RogueNotes": "Silver and gold are beloved of Rogues, right? These are totally on theme. Increases Strength by <%= str %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"weaponSpecialWinter2022WarriorText": "Candy Cane Sword",
|
||||
"weaponSpecialWinter2022WarriorNotes": "How many licks does it take to sharpen this candy cane into the perfect sword? Increases Strength by <%= str %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"weaponSpecialWinter2022MageText": "Pomegranate Staff",
|
||||
"weaponSpecialWinter2022MageNotes": "The berries on this staff contain an ancient magic to be wielded in winter. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"weaponSpecialWinter2022HealerText": "Crystalline Ice Wand",
|
||||
"weaponSpecialWinter2022HealerNotes": "Touch this solid-water implement to a friend's neck and they'll jump out of their chair! But they'll feel better afterward. Hopefully. Increases Intelligence by <%= int %>. Limited Edition 2021-2022 Winter Gear.",
|
||||
"weaponSpecialFall2021MageNotes": "Knowledge seeks knowledge. Formed of memories and desires, this fearsome hand grasps for more. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2021 Autumn Gear.",
|
||||
"weaponSpecialFall2021HealerText": "Summoning Wand",
|
||||
"weaponSpecialFall2021HealerNotes": "Use this wand to summon healing flames and a ghostly creature to help you. Increases Intelligence by <%= int %>. Limited Edition 2021 Autumn Gear.",
|
||||
"headSpecialNye2021Text": "Preposterous Party Hat",
|
||||
"headSpecialNye2021Notes": "You've received a Preposterous Party Hat! Wear it with pride while ringing in the New Year! Confers no benefit.",
|
||||
"weaponSpecialSummer2023MageNotes": "These friendly fish will stay by your side as the best accountability buddies in the ocean. Increases Intelligence by <%= int %>. Limited Edition 2023 Summer Gear.",
|
||||
"weaponSpecialSpring2022WarriorNotes": "Yikes! Guess that wind was a little stronger than you thought, huh? Increases Strength by <%= str %>. Limited Edition 2022 Spring Gear.",
|
||||
"weaponSpecialSpring2022MageText": "Forsythia Staff",
|
||||
"weaponSpecialSpring2022WarriorText": "Inside-Out Umbrella",
|
||||
"weaponSpecialSpring2022MageNotes": "These bright yellow bells are ready to channel your powerful springtime magic. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2022 Spring Gear.",
|
||||
"weaponSpecialSpring2022HealerNotes": "Use this wand to tap into peridot’s healing properties, whether it be to bring calm, positivity, or kindheartedness. Increases Intelligence by <%= int %>. Limited Edition 2022 Spring Gear.",
|
||||
"weaponSpecialSummer2023HealerNotes": "They may look frondly, but they get quite grumpy if you call them 'plants'. Increases Intelligence by <%= int %>. Limited Edition 2023 Summer Gear.",
|
||||
"weaponSpecialFall2022RogueText": "Cucumber Blade",
|
||||
"weaponSpecialFall2022RogueNotes": "Not only can you defend yourself with this cucumber, it also makes for a tasty meal. Increases Strength by <%= str %>. Limited Edition 2022 Autumn Gear.",
|
||||
"weaponSpecialFall2022WarriorText": "Orcish Ripsword",
|
||||
"weaponSpecialFall2022WarriorNotes": "Maybe more suited for cutting logs or crusty loaves of bread than enemy armor, but RAWR! It sure looks fearsome! Increases Strength by <%= str %>. Limited Edition 2022 Autumn Gear.",
|
||||
"weaponSpecialFall2022MageText": "Wind Blasts",
|
||||
"weaponSpecialFall2022MageNotes": "These mighty gusts remain in your wake as you take off toward the skies. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2022 Autumn Gear.",
|
||||
"weaponSpecialFall2022HealerText": "Right Peeker Eye",
|
||||
"weaponSpecialFall2022HealerNotes": "To claim victory, hold it forth and utter the words of command: 'Eye One!' Increases Intelligence by <%= int %>. Limited Edition 2022 Autumn Gear.",
|
||||
"weaponSpecialSpring2022HealerText": "Peridot Wand",
|
||||
"weaponSpecialSummer2023RogueText": "Guppy Fan",
|
||||
"weaponSpecialSummer2023RogueNotes": "No gup, these things are tricky to learn. But impressive when you do! Increases Strength by <%= str %>. Limited Edition 2023 Summer Gear.",
|
||||
"weaponSpecialSummer2023WarriorText": "Water Elemental Sword",
|
||||
"weaponSpecialSummer2023WarriorNotes": "Summon powerful sprays of water to clear your path of obstacles. Increases Strength by <%= str %>. Limited Edition 2023 Summer Gear.",
|
||||
"weaponSpecialSummer2023MageText": "Fish",
|
||||
"weaponSpecialSummer2023HealerText": "Swaying Kelp",
|
||||
"weaponSpecialSpring2023RogueText": "Nibbled Leaf",
|
||||
"weaponSpecialSpring2023RogueNotes": "Slash! Swat! Snack! Get strong and ready for your coming metamorphosis. Increases Strength by <%= str %>. Limited Edition 2023 Spring Gear.",
|
||||
"weaponSpecialSpring2023WarriorText": "Hummingbird Foil",
|
||||
"weaponSpecialSpring2023WarriorNotes": "En garde! Fend off foes from your flowers with this foil! Increases Strength by <%= str %>. Limited Edition 2023 Spring Gear.",
|
||||
"weaponSpecialSpring2023MageText": "Moonstone Magic",
|
||||
"weaponSpecialSpring2023MageNotes": "The greater their glow, the more potent is their power. Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2023 Spring Gear.",
|
||||
"weaponSpecialSpring2023HealerText": "Lilium Pollen",
|
||||
"weaponSpecialWinter2023RogueText": "Green Satin Sash",
|
||||
"weaponSpecialWinter2023RogueNotes": "Legends tell of Rogues who snare their opponents' weapons, disarm them, then gift the item back just to be cute. Increases Strength by <%= str %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"weaponSpecialWinter2023WarriorText": "Tusk Spear",
|
||||
"weaponSpecialWinter2023WarriorNotes": "The two prongs of this spear are shaped like walrus tusks but are twice as powerful. Jab at doubts and at silly poems until they back off! Increases Strength by <%= str %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"weaponSpecialWinter2023MageText": "Foxfire",
|
||||
"weaponSpecialWinter2023MageNotes": "Neither fox nor fire, but plenty festive! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"weaponSpecialWinter2023HealerText": "Throwing Wreath",
|
||||
"weaponSpecialWinter2023HealerNotes": "Watch this festive, prickly wreath spin through the air toward your enemy or obstacles and return to you like a boomerang for another throw. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"weaponSpecialFall2023MageText": "Shining Staff",
|
||||
"weaponSpecialFall2023MageNotes": "With a crystal at its core, this shining staff makes magic emerge from the mundane. Increases Intelligence by <%= int %>. Limited Edition 2023 Autumn Gear.",
|
||||
"weaponSpecialFall2023RogueText": "Soupernatural Spoon",
|
||||
"weaponSpecialFall2023HealerText": "Log Great Hammer",
|
||||
"weaponSpecialFall2023RogueNotes": "It takes an exceptionally strong stirrer to cook up bubbles and toiling troubles. Increases Strength by <%= str %>. Limited Edition 2023 Autumn Gear.",
|
||||
"weaponSpecialFall2023WarriorText": "Tasty Popcorn",
|
||||
"weaponSpecialFall2023WarriorNotes": "The most terrifying thing of all is the thought of a scary movie night with no snacks! Increases Strength by <%= str %>. Limited Edition 2023 Autumn Gear."
|
||||
}
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
"user": "User",
|
||||
"market": "Market",
|
||||
"newSubscriberItem": "You have new <span class=\"notification-bold-blue\">Mystery Items</span>",
|
||||
"subscriberItemText": "Each month, subscribers will receive a mystery item. It becomes available at the beginning of the month. See the wiki's 'Mystery Item' page for more information.",
|
||||
"subscriberItemText": "Subscribers receive a new mystery gear set at the beginning of each month!",
|
||||
"all": "All",
|
||||
"none": "None",
|
||||
"more": "<%= count %> more",
|
||||
@@ -189,7 +189,7 @@
|
||||
"dismissAll": "Dismiss All",
|
||||
"messages": "Messages",
|
||||
"emptyMessagesLine1": "You don't have any messages",
|
||||
"emptyMessagesLine2": "You can send a new message to a user by visiting their profile and clicking the \"Message\" button.",
|
||||
"emptyMessagesLine2": "Send a message to start a conversation with your Party members or another Habitica player! You can send a new message to a user by visiting their profile and clicking the \"Message\" button.",
|
||||
"userSentMessage": "<span class=\"notification-bold\"><%- user %></span> sent you a message",
|
||||
"letsgo": "Let's Go!",
|
||||
"selected": "Selected",
|
||||
@@ -238,5 +238,8 @@
|
||||
"whyReportingPlayer": "Why are you reporting this player?",
|
||||
"whyReportingPlayerPlaceholder": "Reason for report",
|
||||
"playerReportModalBody": "You should only report a player who violates the <%= firstLinkStart %>Community Guidelines<%= linkEnd %> and/or <%= secondLinkStart %>Terms of Service<%= linkEnd %>. Submitting a false report is a violation of Habitica’s Community Guidelines.",
|
||||
"titleCustomizations": "Customisations"
|
||||
"titleCustomizations": "Customisations",
|
||||
"newMessage": "New Message",
|
||||
"targetUserNotExist": "Target User: '<%= userName %>' does not exist.",
|
||||
"rememberToBeKind": "Please remember to be kind, respectful, and follow the <a href='/static/community-guidelines' target='_blank'>Community Guidelines</a>."
|
||||
}
|
||||
|
||||
@@ -242,7 +242,7 @@
|
||||
"guildSummaryPlaceholder": "Write a short explanation of your Group. What is the main purpose of the Group and what will its members do?",
|
||||
"groupDescription": "Description",
|
||||
"guildDescriptionPlaceholder": "Use this section to go into more detail about everything that members should know about your Group. Useful tips, helpful links, and encouraging statements all go here!",
|
||||
"markdownFormattingHelp": "[Markdown formatting help](https://habitica.fandom.com/wiki/Markdown_Cheat_Sheet)",
|
||||
"markdownFormattingHelp": "[Markdown formatting help](https://habitica.fandom.com/wiki/Markdown-in-Habitica)",
|
||||
"partyDescriptionPlaceholder": "This is our Party's description. It describes what we do in this Party. If you want to learn more about what we do in this Party, read the description. Party on.",
|
||||
"guildGemCostInfo": "A Gem cost promotes high quality Guilds and is transferred into your Guild's bank.",
|
||||
"noGuildsTitle": "You aren't a member of any Guilds.",
|
||||
@@ -287,15 +287,15 @@
|
||||
"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",
|
||||
"worldBoss": "World Boss",
|
||||
"groupPlanTitle": "Need more for your crew?",
|
||||
"groupPlanDesc": "Managing a small team or organizing household chores? Our group plans grant you exclusive access to a private task board and chat area dedicated to you and your group members!",
|
||||
"groupPlanTitle": "Need More for Your Crew?",
|
||||
"groupPlanDesc": "Organizing the household chores or managing a small class project? Habitica’s Group Plans provide a shared task experience and dedicated chat space to help you and your group stay motivated.",
|
||||
"billedMonthly": "*billed as a monthly subscription",
|
||||
"teamBasedTasksList": "Team-Based Task List",
|
||||
"teamBasedTasksListDesc": "Set up an easily-viewed shared task list for the group. Assign tasks to your fellow group members, or let them claim their own tasks to make it clear what everyone is working on!",
|
||||
"groupManagementControls": "Group Management Controls",
|
||||
"groupManagementControlsDesc": "View task status to verify that a task that was completed, add Group Managers to share responsibilities, and enjoy a private group chat for all team members.",
|
||||
"inGameBenefits": "In-Game Benefits",
|
||||
"inGameBenefitsDesc": "Group members get an exclusive Jackalope Mount, as well as full subscription benefits, including special monthly equipment sets and the ability to buy gems with gold.",
|
||||
"teamBasedTasksList": "Shared Task Board",
|
||||
"teamBasedTasksListDesc": "Group members can all work from the same task board to ensure the group is staying on top of things. Complete tasks from the shared task board or copy them to your personal tasks to complete them on the go.",
|
||||
"groupManagementControls": "Flexible Accountability",
|
||||
"groupManagementControlsDesc": "Share responsibilities by assigning tasks to any number of members, or leave tasks open as a challenge to see who can complete it first. Group members can stay up-to-date on each other's progress by viewing the task status.",
|
||||
"inGameBenefits": "All the Benefits!",
|
||||
"inGameBenefitsDesc": "Group members get an exclusive Jackalope Mount, as well as full subscription benefits, including special monthly Equipment sets and the ability to buy Gems with Gold.",
|
||||
"letsMakeAccount": "First, let’s make you an account",
|
||||
"nameYourGroup": "Next, Name Your Group",
|
||||
"exampleGroupName": "Example: Avengers Academy",
|
||||
@@ -409,7 +409,7 @@
|
||||
"nameStarText": "Add a title",
|
||||
"descriptionOptional": "Description",
|
||||
"descriptionOptionalText": "Add a description",
|
||||
"nextPaymentMethod": "Next: Payment Method",
|
||||
"nextPaymentMethod": "Next: Payment",
|
||||
"questWithOthers": "Take on Quests with Others",
|
||||
"startPartyDetail": "Start your own Party or join an existing one <br/>to take on Quests and boost your motivation!",
|
||||
"languageLabel": "Language:",
|
||||
@@ -421,5 +421,12 @@
|
||||
"lastCompleted": "Last completed",
|
||||
"newGroupsWelcome": "Welcome to the New Shared Task Board!",
|
||||
"newGroupsWhatsNew": "Check Out What's New:",
|
||||
"tavernDiscontinued": "The Tavern and Guilds have been discontinued"
|
||||
"tavernDiscontinued": "The Tavern and Guilds have been discontinued",
|
||||
"upgradeYourCrew": "Ready to Upgrade Your Crew?",
|
||||
"interestedLearningMore": "Interested in Learning More?",
|
||||
"readyToUpgrade": "Ready to Upgrade?",
|
||||
"createGroupToday": "Create Your Group Today!",
|
||||
"createGroupTitle": "Create Group",
|
||||
"messageCopiedToClipboard": "Message copied to clipboard.",
|
||||
"checkGroupPlanFAQ": "Check out the <a href='/static/faq#what-is-group-plan'>Group Plans FAQ</a> to learn how to get the most out of your shared task experience."
|
||||
}
|
||||
|
||||
@@ -257,5 +257,22 @@
|
||||
"fall2023ScarletWarlockMageSet": "Scarlet Warlock (Mage)",
|
||||
"fall2023WitchsBrewRogueSet": "Witch's Brew (Rogue)",
|
||||
"fall2023BogCreatureHealerSet": "Bog Creature (Healer)",
|
||||
"anniversaryGryphatricePrice": "Own it today for <strong>$9.99</strong> or <strong>60 gems</strong>"
|
||||
"anniversaryGryphatricePrice": "Own it today for <strong>$9.99</strong> or <strong>60 gems</strong>",
|
||||
"gemSaleLimitationsText": "This promotion only applies during the limited-time event. This event starts on <%= eventStartMonth %> <%= eventStartOrdinal %> at <%= eventStartTime %> <%= timeZone %> and will end on <%= eventEndMonth %> <%= eventEndOrdinal %> at <%= eventEndTime %> <%= timeZone %>. The promo offer is only available when buying Gems for yourself.",
|
||||
"summer2024WhaleSharkWarriorSet": "Whale Shark Set (Warrior)",
|
||||
"summer2024SeaAnemoneMageSet": "Sea Anemone Set (Mage)",
|
||||
"summer2024SeaSnailHealerSet": "Sea Snail Set (Healer)",
|
||||
"summer2024NudibranchRogueSet": "Nudibranch Set (Rogue)",
|
||||
"winter2025AuroraMageSet": "Aurora Mage Set",
|
||||
"winter2025SnowRogueSet": "Snow Rogue Set",
|
||||
"spring2025SunshineWarriorSet": "Sunshine Warrior Set",
|
||||
"spring2025CrystalPointRogueSet": "Crystal Point Rogue Set",
|
||||
"spring2025PlumeriaHealerSet": "Plumeria Healer Set",
|
||||
"spring2025MantisMageSet": "Mantis Mage Set",
|
||||
"fall2024FieryImpWarriorSet": "Fiery Imp Set (Warrior)",
|
||||
"fall2024UnderworldSorcerorMageSet": "Underworld Sorceror Set (Mage)",
|
||||
"fall2024SpaceInvaderHealerSet": "Space Invader Set (Healer)",
|
||||
"fall2024BlackCatRogueSet": "Black Cat Set (Rogue)",
|
||||
"winter2025MooseWarriorSet": "Moose Warrior Set",
|
||||
"winter2025StringLightsHealerSet": "String Lights Healer Set"
|
||||
}
|
||||
|
||||
@@ -99,7 +99,7 @@
|
||||
"tourPartyPage": "Welcome to your new Party! You can invite other players to your Party by username, email, or from a list of players looking for a Party to earn the exclusive Basi-List Quest Scroll.<br/><br/>Select <a href='/static/faq#parties'>FAQ</a> from the Help dropdown to learn more about how Parties work.",
|
||||
"tourChallengesPage": "Challenges are themed task lists created by users! Joining a Challenge will add its tasks to your account. Compete against other users to win Gem prizes!",
|
||||
"tourMarketPage": "Every time you complete a task, you'll have a random chance at receiving an Egg, a Hatching Potion, or a piece of Pet Food. You can also buy these items here.",
|
||||
"tourHallPage": "Welcome to the Hall of Heroes, where open-source contributors to Habitica are honoured. Whether through code, art, music, writing, or even just helpfulness, they have earned Gems, exclusive equipment, and prestigious titles. You can contribute to Habitica, too!",
|
||||
"tourHallPage": "Welcome to the Hall of Heroes, where open-source contributors to Habitica are honoured. Whether through code, art, music, writing, or even just helpfulness, they have earned Gems, exclusive Equipment, and prestigious titles. You can contribute to Habitica, too!",
|
||||
"tourPetsPage": "Welcome to the stable! Every time you complete a task, you'll have a random chance at receiving an Egg or a Hatching Potion to hatch Pets. When you hatch a Pet, it will appear here! Click a Pet's image to add it to your Avatar. Feed them with the Pet Food you find and they'll grow into hardy Mounts.",
|
||||
"tourMountsPage": "Once you've fed a pet enough food to turn it into a mount, it will appear here. Click a mount to saddle up!",
|
||||
"tourEquipmentPage": "This is where your Equipment is stored! Your Battle Gear affects your Stats. If you want to show different Equipment on your avatar without changing your Stats, click \"Enable Costume.\"",
|
||||
@@ -117,7 +117,7 @@
|
||||
"paymentAutoRenew": "This subscription will auto-renew until it is cancelled. If you need to cancel this subscription, you can do so from your settings.",
|
||||
"paymentCanceledDisputes": "We’ve sent a cancellation confirmation to your email. If you don’t see the email, please contact us to prevent future billing disputes.",
|
||||
"cannotUnpinItem": "This item cannot be unpinned.",
|
||||
"paymentSubBillingWithMethod": "Your subscription will be billed <strong>$<%= amount %></strong> every <strong><%= months %> months</strong> via <strong><%= paymentMethod %></strong>.",
|
||||
"paymentSubBillingWithMethod": "Your subscription will be billed<br><strong>$<%= amount %>.00 USD</strong> every <strong><%= months %> month(s) </strong> via <strong><%= paymentMethod %></strong>.",
|
||||
"invalidUnlockSet": "This set of items is invalid and cannot be unlocked.",
|
||||
"nMonthsSubscriptionGift": "<%= nMonths %> Month(s) Subscription (Gift)",
|
||||
"nGemsGift": "<%= nGems %> Gems (Gift)",
|
||||
@@ -130,5 +130,7 @@
|
||||
"limitedAvailabilityDays": "Available for <%= days %>d <%= hours %>h <%= minutes %>m",
|
||||
"limitedAvailabilityHours": "Available for <%= hours %>h <%= minutes %>m",
|
||||
"sellItems": "Sell Items",
|
||||
"customizationsShopText": "Want to change up your style? You came to the right place! We stock the freshest looks to fit the season."
|
||||
"customizationsShopText": "Want to change up your style? You came to the right place! We stock the freshest looks to fit the season.",
|
||||
"notAvailable": "This item isn't available.",
|
||||
"paymentYouSentSubscriptionG1G1": "You sent <strong><%- name %></strong><br> a <%= months %> month Habitica subscription, and the same subscription was applied to your account for our Gift One Get One promotion!"
|
||||
}
|
||||
|
||||
@@ -86,7 +86,7 @@
|
||||
"welcomeStable": "Welcome to your Pets and Mounts!",
|
||||
"welcomeStableText": "Welcome to the stable! I’m Matt, the beastmaster. Every time you complete a task, you'll have a random chance at receiving an Egg or a Hatching Potion to hatch Pets. When you hatch a Pet, it will appear here! Click a Pet's image to add it to your Avatar. Feed them with the Pet Food you find and they'll grow into hardy Mounts.",
|
||||
"petLikeToEat": "What does my Pet like to eat?",
|
||||
"petLikeToEatText": "Pets will grow no matter what you feed them, but they'll grow faster if you feed them the one Pet Food that they like best. Experiment to find out the pattern, or see the answers here: <br/> <a href=\"https://habitica.fandom.com/wiki/Food_Preferences\" target=\"_blank\">https://habitica.fandom.com/wiki/Food_Preferences</a>",
|
||||
"petLikeToEatText": "Pets will grow no matter what you feed them, but they'll grow faster if you feed them the one Pet Food that they like best. Experiment to find out the pattern, or see the answers here: <br/> <a href=\"/static/faq#pet-foods\" target=\"_blank\">https://habitica.com/static/faq#pet-foods</a>",
|
||||
"filterByStandard": "Standard",
|
||||
"filterByMagicPotion": "Magic Potion",
|
||||
"filterByQuest": "Quest",
|
||||
|
||||
@@ -497,7 +497,7 @@
|
||||
"questMayhemMistiflying3DropShield": "Roguish Rainbow Message (Off-Hand Item)",
|
||||
"questMayhemMistiflying3DropWeapon": "Roguish Rainbow Message (Main-Hand Item)",
|
||||
"featheredFriendsText": "Feathered Friends Quest Bundle",
|
||||
"featheredFriendsNotes": "Contains 'Help! Harpy!,' 'The Night-Owl,' and 'The Birds of Preycrastination.'",
|
||||
"featheredFriendsNotes": "Contains Quests to obtain Owl, Parrot, and Hawk Pet eggs: The Night-Owl, Help! Harpy!, and The Birds of Preycrastination.",
|
||||
"questNudibranchText": "Infestation of the NowDo Nudibranchs",
|
||||
"questNudibranchNotes": "You finally get around to checking your To Do's on a lazy day in Habitica. Bright against your deepest red tasks are a gaggle of vibrant blue sea slugs. You are entranced! Their sapphire colors make your most intimidating tasks look as easy as your best Habits. In a feverish stupor you get to work, tackling one task after the other in a ceaseless frenzy...<br><br>The next thing you know, @LilithofAlfheim is pouring cold water over you. “The NowDo Nudibranchs have been stinging you all over! You need to take a break!”<br><br>Shocked, you see that your skin is as bright red as your To Do list was. \"Being productive is one thing,\" @beffymaroo says, \"but you've also got to take care of yourself. Hurry, let's get rid of them!\"",
|
||||
"questNudibranchCompletion": "You see the last of the NowDo Nudibranchs sliding off of a pile of completed tasks as @amadshade washes them away. One leaves behind a cloth bag, and you open it to reveal some gold and a few little ellipsoids you guess are eggs.",
|
||||
@@ -505,7 +505,7 @@
|
||||
"questNudibranchDropNudibranchEgg": "Nudibranch (Egg)",
|
||||
"questNudibranchUnlockText": "Unlocks Nudibranch Eggs for purchase in the Market",
|
||||
"splashyPalsText": "Splashy Pals Quest Bundle",
|
||||
"splashyPalsNotes": "Contains 'The Dilatory Derby', 'Guide the Turtle', and 'Wail of the Whale'.",
|
||||
"splashyPalsNotes": "Contains Quests to obtain Turtle, Whale, and Seahorse Pet eggs: Guide the Turtle, Wail of the Whale, and The Dilatory Derby.",
|
||||
"questHippoText": "What a Hippo-Crite",
|
||||
"questHippoNotes": "You and @awesomekitty collapse into the shade of a palm tree, exhausted. The sun beats down over the Sloensteadi Savannah, scorching the ground below. It’s been a productive day so far, conquering your Dailies, and this oasis looks like a nice place to take a break and refresh. Stooping near the water to get a drink, you stumble back in shock as a massive hippopotamus rises. “Resting so soon? Don’t be so lazy, get back to work.” You try and protest that you’ve been working hard and need a break, but the hippo isn’t having any of it.<br><br>@khdarkwolf whispers to you, “Notice how it’s lounging around all day but has the nerve to call you lazy? It’s the Hippo-Crite!”<br><br>Your friend @jumorales nods. “Let’s show it what hard work looks like!”",
|
||||
"questHippoCompletion": "The hippo bows in surrender. “I underestimated you. It seems you weren’t being lazy. My apologies. Truth be told, I may have been projecting a bit. Perhaps I should get some work done myself. Here, take these eggs as a sign of my gratitude.” Grabbing them, you settle down by the water, ready to relax at last.",
|
||||
@@ -513,9 +513,9 @@
|
||||
"questHippoDropHippoEgg": "Hippo (Egg)",
|
||||
"questHippoUnlockText": "Unlocks Hippo Eggs for purchase in the Market",
|
||||
"farmFriendsText": "Farm Friends Quest Bundle",
|
||||
"farmFriendsNotes": "Contains 'The Mootant Cow', 'Ride the Night-Mare', and 'The Thunder Ram'.",
|
||||
"farmFriendsNotes": "Contains Quests to obtain Horse, Sheep, and Cow Pet eggs: Ride the Night-Mare, The Thunder Ram, and The Mootant Cow.",
|
||||
"witchyFamiliarsText": "Witchy Familiars Quest Bundle",
|
||||
"witchyFamiliarsNotes": "Contains 'The Rat King', 'The Icy Arachnid', and 'Swamp of the Clutter Frog'.",
|
||||
"witchyFamiliarsNotes": "Contains Quests to obtain Frog, Spider, and Rat Pet eggs: Swamp of the Clutter Frog, The Icy Arachnid, and The Rat King.",
|
||||
"questGroupLostMasterclasser": "Mystery of the Masterclassers",
|
||||
"questUnlockLostMasterclasser": "To unlock this quest, complete the final quests of these quest chains: 'Dilatory Distress', 'Mayhem in Mistiflying', 'Stoïkalm Calamity', and 'Terror in the Taskwoods'.",
|
||||
"questLostMasterclasser1Text": "The Mystery of the Masterclassers, Part 1: Read Between the Lines",
|
||||
@@ -559,7 +559,7 @@
|
||||
"questYarnDropYarnEgg": "Yarn (Egg)",
|
||||
"questYarnUnlockText": "Unlocks Yarn Eggs for purchase in the Market",
|
||||
"winterQuestsText": "Winter Quest Bundle",
|
||||
"winterQuestsNotes": "Contains 'Trapper Santa', 'Find the Cub', and 'The Fowl Frost'. Note that Trapper Santa and Find the Cub have stackable quest achievements but give a rare pet and mount that can only be added to your stable once.",
|
||||
"winterQuestsNotes": "Contains Quests to obtain the Polar Bear Pet, the Polar Bear Mount, and Penguin Pet eggs: Find the Cub, Trapper Santa, and The Fowl Frost.",
|
||||
"questPterodactylText": "The Pterror-dactyl",
|
||||
"questPterodactylNotes": "You're taking a stroll along the peaceful Stoïkalm Cliffs when an evil screech rends the air. You turn to find a hideous creature flying towards you and are overcome by a powerful terror. As you turn to flee, @Lilith of Alfheim grabs you. \"Don't panic! It's just a Pterror-dactyl.\"<br><br>@Procyon P nods. \"They nest nearby, but they're attracted to the scent of negative Habits and undone Dailies.\"<br><br>\"Don't worry,\" @Katy133 says. \"We just need to be extra productive to defeat it!\" You are filled with a renewed sense of purpose and turn to face your foe.",
|
||||
"questPterodactylCompletion": "With one last screech the Pterror-dactyl plummets over the side of the cliff. You run forward to watch it soar away over the distant steppes. \"Phew, I'm glad that's over,\" you say. \"Me too,\" replies @GeraldThePixel. \"But look! It's left some eggs behind for us.\" @Edge passes you three eggs, and you vow to raise them in tranquility, surrounded by positive Habits and blue Dailies.",
|
||||
@@ -594,7 +594,7 @@
|
||||
"questDysheartenerDropHippogriffMount": "Hopeful Hippogriff (Mount)",
|
||||
"dysheartenerArtCredit": "Artwork by @AnnDeLune",
|
||||
"hugabugText": "Hug a Bug Quest Bundle",
|
||||
"hugabugNotes": "Contains 'The CRITICAL BUG,' 'The Snail of Drudgery Sludge,' and 'Bye, Bye, Butterfry.'",
|
||||
"hugabugNotes": "Contains Quests to obtain Beetle, Caterpillar, and Snail Pet eggs: The CRITICAL BUG, Bye Bye Butterfry, and The Snail of Drudgery Sludge.",
|
||||
"questSquirrelText": "The Sneaky Squirrel",
|
||||
"questSquirrelNotes": "You wake up and find you’ve overslept! Why didn’t your alarm go off? … How did an acorn get stuck in the ringer?<br><br>When you try to make breakfast, the toaster is stuffed with acorns. When you go to retrieve your mount, @Shtut is there, trying unsuccessfully to unlock their stable. They look into the keyhole. “Is that an acorn in there?”<br><br>@randomdaisy cries out, “Oh no! I knew my pet squirrels had gotten out, but I didn’t know they’d made such trouble! Can you help me round them up before they make any more of a mess?”<br><br>Following the trail of mischievously placed oak nuts, you track and catch the wayward sciurines, with @Cantras helping secure each one safely at home. But just when you think your task is almost complete, an acorn bounces off your helm! You look up to see a mighty beast of a squirrel, crouched in defence of a prodigious pile of seeds.<br><br>“Oh dear,” says @randomdaisy, softly. “She’s always been something of a resource guarder. We’ll have to proceed very carefully!” You circle up with your party, ready for trouble!",
|
||||
"questSquirrelCompletion": "With a gentle approach, offers of trade, and a few soothing spells, you’re able to coax the squirrel away from its hoard and back to the stables, which @Shtut has just finished de-acorning. They’ve set aside a few of the acorns on a worktable. “These ones are squirrel eggs! Maybe you can raise some that don’t play with their food quite so much.”",
|
||||
@@ -602,9 +602,9 @@
|
||||
"questSquirrelDropSquirrelEgg": "Squirrel (Egg)",
|
||||
"questSquirrelUnlockText": "Unlocks Squirrel Eggs for purchase in the Market",
|
||||
"cuddleBuddiesText": "Cuddle Buddies Quest Bundle",
|
||||
"cuddleBuddiesNotes": "Contains 'The Killer Bunny', 'The Nefarious Ferret', and 'The Guinea Pig Gang'.",
|
||||
"cuddleBuddiesNotes": "Contains Quests to obtain Rabbit, Ferret, and Guinea Pig Pet eggs: The Killer Bunny, The Nefarious Ferret, and The Guinea Pig Gang.",
|
||||
"aquaticAmigosText": "Aquatic Amigos Quest Bundle",
|
||||
"aquaticAmigosNotes": "Contains 'The Magical Axolotl', 'The Kraken of Inkomplete', and 'The Call of Octothulu'.",
|
||||
"aquaticAmigosNotes": "Contains Quests to obtain Cuttlefish, Octopus, and Axolotl Pet eggs: The Kraken of Inkomplete, The Call of Octothulu, and The Magical Axolotl.",
|
||||
"questSeaSerpentText": "Danger in the Depths: Sea Serpent Strike!",
|
||||
"questSeaSerpentNotes": "Your streaks have you feeling lucky—it’s the perfect time for a trip to the seahorse racetrack. You board the submarine at Diligent Docks and settle in for the trip to Dilatory, but you’ve barely submerged when an impact rocks the sub, sending its occupants tumbling. “What’s going on?” @AriesFaries shouts.<br><br>You glance through a nearby porthole and are shocked by the wall of shimmering scales passing by it. “Sea serpent!” Captain @Witticaster calls through the intercom. “Brace yourselves, it’s coming ‘round again!” As you grip the arms of your seat, your unfinished tasks flash before your eyes. ‘Maybe if we work together and complete them,’ you think, ‘we can drive this monster away!’",
|
||||
"questSeaSerpentCompletion": "Battered by your commitment, the sea serpent flees, disappearing into the depths. When you arrive in Dilatory, you breathe a sigh of relief before noticing @*~Seraphina~ approaching with three translucent eggs cradled in her arms. “Here, you should have these,” she says. “You know how to handle a sea serpent!” As you accept the eggs, you vow anew to remain steadfast in completing your tasks to ensure that there’s not a repeat occurrence.",
|
||||
@@ -618,7 +618,7 @@
|
||||
"questKangarooDropKangarooEgg": "Kangaroo (Egg)",
|
||||
"questKangarooUnlockText": "Unlocks Kangaroo Eggs for purchase in the Market",
|
||||
"forestFriendsText": "Forest Friends Quest Bundle",
|
||||
"forestFriendsNotes": "Contains 'The Spirit of Spring', 'The Hedgebeast', and 'The Tangle Tree'.",
|
||||
"forestFriendsNotes": "Contains Quests to obtain Treeling, Deer, and Hedgehog Pet eggs: The Tangle Tree, The Spirit of Spring, and The Hedgebeast.",
|
||||
"questAlligatorText": "The Insta-Gator",
|
||||
"questAlligatorNotes": "“Crikey!” exclaims @gully. “An Insta-Gator in its natural habitat! Careful, it distracts its prey with things that seem urgent THIS INSTANT, and it feeds on the unchecked Dailies that result.” You fall silent to avoid attracting its attention, but to no avail. The Insta-Gator spots you and charges! Distracting voices rise up from Swamps of Stagnation, grabbing for your attention: “Read this post! See this photo! Pay attention to me THIS INSTANT!” You scramble to mount a counterattack, completing your Dailies and bolstering your good Habits to fight off the dreaded Insta-Gator.",
|
||||
"questAlligatorCompletion": "With your attention focused on what’s important and not the Insta-Gator’s distractions, the Insta-Gator flees. Victory! “Are those eggs? They look like gator eggs to me,” asks @mfonda. “If we care for them correctly, they’ll be loyal pets or faithful steeds,” answers @UncommonCriminal, handing you three to care for. Let’s hope so, or else the Insta-Gator might make a return…",
|
||||
@@ -626,9 +626,9 @@
|
||||
"questAlligatorDropAlligatorEgg": "Alligator (Egg)",
|
||||
"questAlligatorUnlockText": "Unlocks Alligator Eggs for purchase in the Market",
|
||||
"oddballsText": "Oddballs Quest Bundle",
|
||||
"oddballsNotes": "Contains 'The Jelly Regent,' 'Escape the Cave Creature,' and 'A Tangled Yarn.'",
|
||||
"oddballsNotes": "Contains Quests to obtain Slime, Yarn, and Rock Pet eggs: The Jelly Regent, A Tangled Yarn, and Escape the Cave Creature.",
|
||||
"birdBuddiesText": "Bird Buddies Quest Bundle",
|
||||
"birdBuddiesNotes": "Contains 'The Fowl Frost,' 'Rooster Rampage,' and 'The Push-and-Pull Peacock.'",
|
||||
"birdBuddiesNotes": "Contains Quests to obtain Peacock, Penguin, and Rooster Pet eggs: The Push-and-Pull Peacock, The Fowl Frost, and Rooster Rampage.",
|
||||
"questVelociraptorText": "The Veloci-Rapper",
|
||||
"questVelociraptorNotes": "You’re sharing honey cakes with @*~Seraphina~*, @Procyon P, and @Lilith of Alfheim by a lake in the Stoïkalm Steppes. Suddenly, a mournful voice interrupts your picnic.<br><br><em>My Habits took a hit, I missed my Dailies,<br>I’m losing it, sinking with doubt and maybes,<br>At the top of my game I used to be so fly,<br>But now I just let my Due Dates go by.</em><br><br>@*~Seraphina~* peers behind a stand of grass. “It’s the Veloci-Rapper. It seems... distraught?”<br><br>You pump a fist in determination. “There's only one thing to do. Rap battle time!”",
|
||||
"questVelociraptorCompletion": "You burst through the grass, confronting the Veloci-Rapper.<br><br><em>See here, rapper, you’re no quitter,<br>You’re Bad Habits' hardest hitter!<br>Check off your To Do's like a boss,<br>Don’t mourn over one day’s loss!</em><br><br>Filled with renewed confidence, it bounds off to freestyle another day, leaving behind three eggs where it sat.",
|
||||
@@ -636,7 +636,7 @@
|
||||
"questVelociraptorDropVelociraptorEgg": "Velociraptor (Egg)",
|
||||
"questVelociraptorUnlockText": "Unlocks Velociraptor Eggs for purchase in the Market",
|
||||
"mythicalMarvelsText": "Mythical Marvels Quest Bundle",
|
||||
"mythicalMarvelsNotes": "Contains 'Convincing the Unicorn Queen,' 'The Fiery Gryphon,' and 'Danger in the Depths: Sea Serpent Strike!'",
|
||||
"mythicalMarvelsNotes": "Contains Quests to obtain Unicorn, Gryphon, and Sea Serpent Pet eggs: Convincing the Unicorn Queen, The Fiery Gryphon, and Danger in the Depths: Sea Serpent Strike!",
|
||||
"questSilverDropSilverPotion": "Silver Hatching Potion",
|
||||
"questSilverCollectSilverIngots": "Silver Ingots",
|
||||
"rockingReptilesText": "Rocking Reptiles Quest Bundle",
|
||||
@@ -667,9 +667,9 @@
|
||||
"questBronzeNotes": "On a refreshing break between tasks, you and some friends take a stroll through the forest trails of the Taskwoods. You come upon a large hollow log and a sparkle from inside catches your attention.<br><br>Why, it's a cache of Magic Hatching Potions! The shimmering bronze liquid swirls gently in the bottles, and @Hachiseiko reaches to pick one up to examine it.<br><br>“Halt!” hisses a voice from behind you. It's a gigantic beetle with a carapace of gleaming bronze, raising her clawed feet in a fighting stance. “Those are my potions, and if you wish to earn them, you must prove yourself in a gentlefolks' duel!”",
|
||||
"questBronzeText": "Brazen Beetle Battle",
|
||||
"evilSantaAddlNotes": "Note that Trapper Santa and Find the Cub have stackable quest achievements but give a rare pet and mount that can only be added to your stable once.",
|
||||
"rockingReptilesNotes": "Contains 'The Insta-Gator,' 'The Serpent of Distraction,' and 'The Veloci-Rapper.'",
|
||||
"rockingReptilesNotes": "Contains Quests to obtain Alligator, Velociraptor, and Snake Pet eggs: The Insta-Gator, The Veloci-Rapper, and The Serpent of Distraction.",
|
||||
"delightfulDinosText": "Delightful Dinos Quest Bundle",
|
||||
"delightfulDinosNotes": "Contains 'The Pterror-dactyl,' 'The Trampling Triceratops,' and 'The Dinosaur Unearthed.'",
|
||||
"delightfulDinosNotes": "Contains Quests to obtain Triceratops, T-Rex, and Pterodactyl Pet eggs: The Trampling Triceratops, The Dinosaur Unearthed, and The Pterror-dactyl.",
|
||||
"questAmberText": "The Amber Alliance",
|
||||
"questAmberNotes": "You’re sitting in the Tavern with @beffymaroo and @-Tyr- when @Vikte bursts through the door and excitedly tells you about the rumors of another type of Magic Hatching Potion hidden in the Taskwoods. Having completed your Dailies, the three of you immediately agree to help @Vikte on their search. After all, what’s the harm in a little adventure?<br><br>After walking through the Taskwoods for hours, you’re beginning to regret joining such a wild chase. You’re about to head home, when you hear a surprised yelp and turn to see a huge lizard with shiny amber scales coiled around a tree, clutching @Vikte in her claws. @beffymaroo reaches for her sword.<br><br>“Wait!” cries @-Tyr-. “It’s the Trerezin! She’s not dangerous, just dangerously clingy!”",
|
||||
"questAmberCompletion": "“Trerezin?” @-Tyr- says calmly. “Could you let @Vikte go? I don’t think they’re enjoying being so high up.”<br><br>The Trerezin’s amber skin blushes crimson and she gently lowers @Vikte to the ground. “My apologies! It’s been so long since I’ve had any guests that I’ve forgotten my manners!” She slithers forward to greet you properly before disappearing into her treehouse, and returning with an armful of Amber Hatching Potions as thank-you gifts!<br><br>“Magic Potions!” @Vikte gasps.<br><br>“Oh, these old things?” The Trerezin's tongue flickers as she thinks. “How about this? I’ll give you this whole stack if you promise to visit me every so often...”<br><br>And so you leave the Taskwoods, excited to tell everyone about the new potions--and your new friend!",
|
||||
@@ -691,9 +691,9 @@
|
||||
"questWaffleText": "Waffling with the Fool: Disaster Breakfast!",
|
||||
"questWaffleUnlockText": "Unlocks Confection Hatching Potions for purchase in the Market",
|
||||
"questWaffleDropDessertPotion": "Confection Hatching Potion",
|
||||
"questWaffleRageEffect": "`Awful Waffle uses MAPLE MIRE!` Sticky sappy syrup slows your swings and spells!",
|
||||
"questWaffleRageEffect": "`Awful Waffle uses MAPLE MIRE!` Sticky sappy syrup slows your swings and spells! Pending damage reduced.",
|
||||
"questWaffleRageDescription": "Maple Mire: This bar fills when you don't complete your Dailies. When it is full, the Awful Waffle will set back the party's attack progress!",
|
||||
"jungleBuddiesNotes": "Contains 'Monstrous Mandrill and the Mischief Monkeys', 'The Somnolent Sloth', and 'The Tangle Tree'.",
|
||||
"jungleBuddiesNotes": "Contains Quests to obtain Monkey, Treeling, and Sloth Pet eggs: Monstrous Mandrill and the Mischief Monkeys, The Tangle Tree, and The Somnolent Sloth.",
|
||||
"jungleBuddiesText": "Jungle Buddies Quest Bundle",
|
||||
"questFluoriteUnlockText": "Unlocks Fluorite Hatching Potions for purchase in the Market",
|
||||
"questFluoriteDropFluoritePotion": "Fluorite Hatching Potion",
|
||||
@@ -709,7 +709,7 @@
|
||||
"questBlackPearlCompletion": "As you batter and blast the beastie, it sheds black pearls across the sands. Their glistening surfaces catch your eye as you dodge another smashing tentacle.<br><br>You may be in mortal peril, but you can’t help thinking of how beautifully they glimmer. Then you can’t help thinking that this is a terrible time for a new potion idea.<br><br>Suddenly the monster freezes. @jjgame83 and @PixelStormArt exchange baffled looks and lower their weapons.<br><br>“YOU HAVE YOUR WISH, MORTAL. MY WORK IS DONE.”<br><br>Asteroidea vanishes, and the sky and waters clear. @QuartzFox stares at you. “Care to explain?”<br><br>You try your best, and together you fill the picnic basket with black pearls. An afternoon of alchemy later, you have to admit it was a pretty good idea.",
|
||||
"questBlackPearlNotes": "You’ve been feeling uninspired lately, so when @jjgame83 suggests a trip to Lively Lake, you jump at the chance for a change of scenery. As @QuartzFox lays out a picnic on the shore, you find something glinting in the shallows. A strange black pearl.<br><br>“I wish I had a new idea,” you sigh.<br><br>A chill washes over the shore. The lake turns to black ink. The stars rise as noon becomes midnight in a heartbeat.<br><br>“Those aren’t good signs,” says @PixelStormArt.<br><br>A towering mass of arms bursts from the lake in a spray of foam, and from its beak, it booms: “BEHOLD ASTEROIDEA, THE IDEA FROM BEYOND THE STARS!”<br><br>A tentacle slams down onto the picnic basket. Good idea or not, you leap into action.",
|
||||
"questBlackPearlText": "A Startling Starry Idea",
|
||||
"sandySidekicksNotes": "Contains 'The Indulgent Armadillo', 'The Serpent of Distraction', and 'The Icy Arachnid'.",
|
||||
"sandySidekicksNotes": "Contains Quests to obtain Spider, Armadillo, and Snake Pet eggs: The Icy Arachnid, The Indulgent Armadillo, and The Serpent of Distraction.",
|
||||
"sandySidekicksText": "Sandy Sidekicks Quest Bundle",
|
||||
"questTurquoiseUnlockText": "Unlocks Turquoise Hatching Potions for purchase in the Market",
|
||||
"questTurquoiseDropTurquoisePotion": "Turquoise Hatching Potion",
|
||||
@@ -771,5 +771,77 @@
|
||||
"questPinkMarbleRageDescription": "This bar fills when you don't complete your Dailies. When it is full, Cupido will take away some of your party's pending damage!",
|
||||
"questPinkMarbleRageEffect": "`Cupido uses Pink Punch!` That wasn't affectionate at all! Your partymates are taken aback. Pending damage reduced.",
|
||||
"questPinkMarbleDropPinkMarblePotion": "Pink Marble Hatching Potion",
|
||||
"questPinkMarbleText": "Calm the Corrupted Cupid"
|
||||
"questPinkMarbleText": "Calm the Corrupted Cupid",
|
||||
"questGiraffeText": "The Gear-affe",
|
||||
"questGiraffeCompletion": "After helping the Gear-Affe with some basic organisation of his stash, you’re both feeling more energised and upbeat!<br><br>He grabs his guitar and a book of beginner exercises and strums a few notes. “It feels good to take a step in the right direction, even a small one. Thanks for helping me out! Take these, I hear you have a stash of pets and these fellas could be a nice addition!”",
|
||||
"questGiraffeBoss": "Gear-affe",
|
||||
"questGiraffeDropGiraffeEgg": "Giraffe (Egg)",
|
||||
"questChameleonText": "The Chaotic Chameleon",
|
||||
"questChameleonCompletion": "After a few lively turns the Chameleon went through every colour of the rainbow, perfectly matching each colour you requested.<br><br>“Wow,” he says, “working together and making it into a game really helped me concentrate! Please take these as a reward, you’ve earned them! Teach these little guys how to change to all the colours of the rainbow when they hatch.”",
|
||||
"questChameleonBoss": "Chaotic Chameleon",
|
||||
"questChameleonDropChameleonEgg": "Chameleon (Egg)",
|
||||
"questDogText": "Triple Dog Dare!",
|
||||
"questDogCompletion": "After gathering all the toys that you (thankfully) dodged, you give Shiberus a gentle pat on his middle head.<br><br>“It’s great to be excited about a big task, but it might help to go in with a plan. Maybe next time try starting at the entrance and working backwards? Or doing it 30 minutes at a time with some short play breaks in between.”<br><br>“That’s a good idea,” the pup’s left head chimes in. The right head places some items near you, including what appear to be eggs… “I found some things you might like while we were playing. Thanks for your help!”",
|
||||
"questDogBoss": "Shiberus",
|
||||
"questDogRageTitle": "Triple Toy Toss",
|
||||
"questDogRageDescription": "This bar fills when you don't complete your Dailies. When it's full, Shiberus will take away some of your party's MP!",
|
||||
"questDogRageEffect": "Shiberus throws toys at you rapid-fire and blocks your magic spells! The party’s MP is reduced!",
|
||||
"questDogDropDogEgg": "Dog (Egg)",
|
||||
"questDogUnlockText": "Unlocks Dog Eggs for purchase in the Market.",
|
||||
"questRaccoonText": "Raccoon Tycoon",
|
||||
"questRaccoonCompletion": "\"Really, I think there are plenty of neat rocks for both of us,\" you say as you retrieve the last of your items. \"Here are a few that you can have from what I collected, I have enough to share!\"<br><br>\"Aw, that’s pretty nice of you,\" says the raccoon. \"Actually, here are some neat little prizes for you, too!\"",
|
||||
"questRaccoonBoss": "Ravenous Raccoon",
|
||||
"questRaccoonRageTitle": "Trinket Tsunami",
|
||||
"questRaccoonRageDescription": "This bar fills when you don't complete your Dailies. When it's full, the Raccoon Tycoon will regain some of his health!",
|
||||
"questRaccoonRageEffect": "The Ravenous Raccoon takes some items you’ve rescued and crams them back into the tree trunk. The boss regains 30% of its health!",
|
||||
"questRaccoonDropRaccoonEgg": "Raccoon (Egg)",
|
||||
"questRaccoonUnlockText": "Unlocks Raccoon Eggs for purchase in the Market.",
|
||||
"questOtterText": "The Perfidious Plotter!",
|
||||
"questOtterRageTitle": "To-do Tear-Up!",
|
||||
"questOtterRageDescription": "This bar fills when you don't complete your Dailies. When it's full, The Plotter will regain some of its health!",
|
||||
"questOtterRageEffect": "The Plotter throws pieces of your to-do list into the air! The boss regains 30% of its health!",
|
||||
"questOtterDropOtterEgg": "Otter (egg)",
|
||||
"questOtterUnlockText": "Unlocks Otter Eggs for Purchase in the Market",
|
||||
"questJadeText": "A Jaded Jinx",
|
||||
"questOtterBoss": "The Plotter",
|
||||
"questJadeCompletion": "After countless setbacks, you somehow managed to roll the jade boulder up to the top of the mountain! The stony figure catches up to you and smiles. He gives the boulder a gentle push and you watch in horror as it rolls all the way back to the bottom.<br><br>“Why would you do that? Someone will have to do it all over again now!” you balk.<br><br>“Just because you have to do something more than once doesn’t mean your accomplishments are meaningless,” the stone figure says. “For now, focus on what you achieved and enjoy a reward!”<br><br>You jolt awake back on your couch, phone fallen to the floor. In its place are three bottles filled with flowing jade! Maybe it’s time to clean today’s dishes and then take a break to see how these potions work on some pet eggs...",
|
||||
"questJadeBoss": "Jaded Jinx",
|
||||
"questJadeDropJadePotion": "Jade Hatching Potion",
|
||||
"questJadeUnlockText": "Unlocks Jade Hatching Potion for Purchase in the Market.",
|
||||
"questGiraffeNotes": "You’re strolling across the tall grass of the Sloenstedi Savannah, enjoying a nice walk in nature as a break from your tasks. As you pass through the rolling landscape, you notice a collection of items in the distance. It’s a pile of musical instruments, art supplies, electronic equipment, and more! You venture near for a better look.<br><br>“Hey, what do you think you’re doing?” yells a voice from behind an acacia. A tall and imposing giraffe emerges, wearing a fancy pair of shades, a guitar, and a fancy camera around its long neck. “This is all my gear. Be careful and don’t touch anything!”<br><br>You notice dust on many of the items. “Wow, you sure have a lot of hobbies!” you say. “Can you show me some art or play me a tune?”<br><br>The giraffe’s face falls as he looks at all his supplies. “I have so much of this stuff but don’t know where to begin! Why don't you give me some of your motivation so I can have the productive energy I need to finally get started!”",
|
||||
"questGiraffeUnlockText": "Unlocks Giraffe Eggs for purchase in the Market.",
|
||||
"questChameleonNotes": "It’s a beautiful day in a warm, rainy corner of the Taskwoods. You’re on the hunt for new additions to your leaf collection when a branch in front of you changes colour without warning! Then it moves!<br><br>Stumbling backwards, you realize this is not a branch at all, but a huge chameleon! Each part of his body keeps changing colours as his eyes dart in different directions.<br><br>“Are you all right?” you ask the chameleon.<br><br>“Ahhh, well,” he says, looking a little flustered. “I’ve been trying to blend in… but it’s so overwhelming… the colours keep coming and going! It’s hard to focus on just one....”<br><br>“Aha,” you say, “I think I can help. We’ll sharpen your focus with a little challenge! Get your colours ready!”<br><br>“You’re on!” replied the chameleon.",
|
||||
"questCrabNotes": "It’s a warm sunny morning, and you’re enjoying a visit to the beach to catch up on some of the books on your summer reading list. You’re startled when you nearly step on a shiny crystal near a shallow hole in the sand.<br><br>“Ey, watch where you’re goin’! I’m makin’ a burrow here!” says a voice. A surprisingly large crab with a decorative shell runs out in front of your toes, snapping her claws as she speaks.<br><br>“Hmm.. is this a burrow?” you ask, looking at the shallow depression. There are shells and crystals arranged around it, but it’s not much in the way of a hiding place.<br><br>The crab stammers. \"Ey, this is a judgment-free zone! I'm gettin' to it, I'm gettin' to it... I just got caught up on decorating. Sometimes a crab's gotta fiddle,\" she says, adjusting a shell.<br><br>\"Why don't you lend me a claw and help if you've got some big ideas on what a burrow should look like?\"",
|
||||
"questRaccoonNotes": "It’s a warm autumn day in Habitica and you’re taking a slow stroll along Conquest Creek. You see some nifty semi-precious stones along the bank that would be perfect for a project you’ve been planning.<br><br>You start stashing your best finds in a pile beneath a tree. Strangely, each time you return the pile seems to be getting smaller, not larger...<br><br>That can't be right. You look all around but nothing odd stands out. Just as you turn around to head back to the creek, you catch a hand-like paw reaching out of a hollow in the trunk and snatch some of your stones!<br><br>\"Hey!\" you yell, \"I’ve been working hard collecting those. It’s not cool to take them without asking!\"<br><br>A masked face pops out of the hole and grins at you. \"Finders keepers!\" says the Raccoon. He slips back inside the tree, bags of stones in hand. You dive in after him! These stones are worth fighting for.",
|
||||
"questDogNotes": "You’ve been chosen for an expedition to map Habitica’s underground cave systems! Researchers in Habit City theorise that there may be new tools for managing tasks or even undiscovered creatures in these depths.<br><br>As you map rocky tunnels near the foothills of the Meandering Mountains, you notice a glow emanating from a craggy entrance ahead. As you near you see… toys? Stuffed animals and rubber balls are scattered around the cave floor. Is that barking you hear?<br><br>A huge, three-headed dog jumps out, darting for the toy you were right about to pick up! You freeze, almost losing a limb there! But... the dog’s mouths seem too occupied with toys to attack?<br><br>“Woof!” one of the dog's mouths barks, dropping a torn toy raccoon. “Are you here to help me clean?? I reeeally need to tidy up but every time I pick up a toy, I just end up playing with it… Here, think fast!!”<br><br>He launches a ball at you, and then another, and another. Those extra heads really make dodging a workout!",
|
||||
"questCatNotes": "On this fine day you find yourself in Habit City's Enchanted Efficiency Emporium workshop. You've been assigned a tough task: create a new magic motivation spell to help Habiticans everywhere complete their goals with ease.<br><br>Sitting on a table in front of you is a variety of magical objects. All the tomes said they were supposed to resonate together with productive energy… but so far there's not even a spark of motivation.<br><br>The creaking of a door alerts you to a new guest entering your workshop. Scampering feet and a blur of fluff dart onto the table. A... cat? Before you even have a chance to compliment how fluffy she is, she's lifting a paw to one of the crystals you set up and… knocking it off the table!<br><br>\"Hey!\" you shout, \"You're really cute but I'm trying to do some work over here...\"<br><br>She looks at you with her pretty blue eyes, tilts her head, and bats a bundle of herbs off the table. \"I'm helping!\" she purrs.<br><br>You see her paw reaching out toward the rest of the items you've collected and dive to the floor to catch the next one to go down!",
|
||||
"questOtterNotes": "To-do lists are great! You can spend hours meticulously documenting each step you need to take and feel productive without actually doing those things. Your three-page list gets stuffed into your pocket. Time for a refreshing walk!<br><br>You depart towards the Routine River to take a stroll along the banks. This is exactly what you needed to finally get started! Time to take out your to-do list and–ah! A gust of wind has your list flying out of your hand and headed right for the water!<br><br>Right before the paper hits the water, an otter head pops up to the surface intercepting the sheet’s sure demise. Phew! He grasps the list in his paws and a mischievous grin spreads across his face… uh-oh.<br><br>“Hmm...” he hums, flipping the paper around to read your list. “Looks like you need some help prioritising.” Riiiip.<br><br>The otter just ripped your carefully crafted list into pieces! “If you want to get these done, you’re going to have to decide what’s the most important first!” he says, tossing your list items into the breeze one at a time.",
|
||||
"questJadeNotes": "You’re in your home staring at the stack of dirty dishes in the sink. The pile of dirty laundry in a random corner of the room. The empty cups and snack wrappers around your desk...<br><br>You sigh. “Why are there always more dishes… ? The mess is never-ending. It’s so demotivating.\" You find yourself dazing on the couch, mindlessly scrolling the latest trends. Who knows how long you’ve been there...<br><br>When you look up from your phone, everything is green. This isn’t your living room. Standing up, you find yourself on the side of a shiny verdant mountain.<br><br>Movement in the distance draws your attention. A stony green figure grunts, pushing a boulder up the rocky terrain. He makes some progress, but a small slip of his foot has the shiny boulder rolling back down, right towards you!<br><br>He spots you as he runs towards the chunk of jade hurdling your way! “So you think the dishes are bad?” the figure shouts, “Try this!”",
|
||||
"questCatCompletion": "You've thankfully caught everything that pushy cat knocked off the table. As you sit on the floor you notice a bright glow coming from the objects in front of you. Looking up, the ones on the table are reacting too! Putting them at different elevations seems to be a breakthrough in your research!<br><br>\"You know, in the end you did help me. I guess I just needed some fresh eyes on my task to get me unstuck. I wish you would have given me a bit of a heads-up before you started pushing things around, though,\" you say to the cat, patting her gently.<br><br>\"That's a purrfectly reasonable request, please take these as my apology!\" she purrs, nudging some funny-looking eggs in your direction. \"I'm glad I could help you see things from a different purrspective.\"",
|
||||
"questOtterCompletion": "As you caught the pieces of your list you started sorting them by which tasks were the most important and ended up with quite a manageable place to start!<br><br>“I see!” you tell the otter, “that goofy stunt really did help me think about what tasks I needed to prioritise.”<br><br>The otter splashes about, rubbing its cheeks with glee, “I’m glad my little plot got you thinking about your tasks in a different way.” He dives under the water, resurfacing nearby, “Remember to keep your lists achievable. Rewards help too, so take these!”",
|
||||
"questCatText": "A Purrplexing Predicament",
|
||||
"questCatBoss": "The Purrplexer",
|
||||
"questCatRageTitle": "Furious Bapping",
|
||||
"questCatRageDescription": "This bar fills when you don't complete your Dailies. When it's full, the Purrplexer will take away some of your party's MP!",
|
||||
"questCatRageEffect": "The Purrplexer knocks the magic objects you've collected off the table! The party's MP is reduced!",
|
||||
"questCatDropCatEgg": "Cat (Egg)",
|
||||
"questCatUnlockText": "Unlocks Cat Eggs for Purchase in the Market.",
|
||||
"questChameleonUnlockText": "Unlocks Chameleon Eggs for purchase in the Market",
|
||||
"questCrabText": "The Fiddling Crab",
|
||||
"questCrabCompletion": "You and the crab figure out how to work together to get everything in just the right place, ending up with a fine sandy burrow. The crab happily nestles in.<br><br>\"Thank ya!\" she says, making herself comfy. \"Now this is a hole that's made just for me. I can finally enjoy all my perfectly placed decorations. Here, take these lil guys as a token of my appreciation. It's an offer you can't refuse!\"",
|
||||
"questCrabBoss": "Fiddling Crab",
|
||||
"questCrabRageTitle": "Distracting Fiddling",
|
||||
"questCrabRageDescription": "This bar fills when you don't complete your Dailies. When it's full, the Fiddling Crab will take away some of your party's MP!",
|
||||
"questCrabRageEffect": "The Fiddling Crab distracts you with decorating, slowing your work on digging and draining some of your magic. The party's MP is reduced!",
|
||||
"questCrabDropCrabEgg": "Crab (Egg)",
|
||||
"questCrabUnlockText": "Unlocks Crab Eggs for purchase in the Market.",
|
||||
"questAlpacaText": "The Overpacked Alpaca",
|
||||
"questAlpacaBoss": "The Overpacked Alpaca",
|
||||
"questAlpacaRageTitle": "Pack-Quake",
|
||||
"questAlpacaUnlockText": "Unlocks Alpaca Eggs for Purchase in the Market",
|
||||
"questAlpacaRageDescription": "This bar fills when you don't complete your Dailies. When it's full, The Overpacked Alpaca will regain some of its health!",
|
||||
"questAlpacaRageEffect": "The Overpacked Alpaca launches luggage at you! The boss regains 30% of its health!",
|
||||
"questAlpacaDropAlpacaEgg": "Alpaca (egg)",
|
||||
"questAlpacaNotes": "The sun beams down as you hike up the rocky trailheads of the Meandering Mountains. You’ve been planning this expedition for your friend group for months, researching every aspect of the trip. The weight of supplies on your back is so much to bear, each step feels more like a burden than an adventure.<br><br>You hear a soft crunch of hooves on the trail behind you. A fluffy alpaca approaches with a gigantic stack of luggage on her back.<br><br>“Seems like you’re dragging a bit, friend, and all you’re carrying is a little backpack!” she says as she passes by.<br><br>“You make it look so easy,” you sigh. “I planned this trip for so long, but now that we’re here, I’m not even having fun…”<br><br>“Don’t get down on yourself,” the alpaca snorts. “I’ll teach you a lesson I learned long ago!” She bucks, and suddenly a bundled bedroll is flying at you! How is this helping again?!",
|
||||
"questAlpacaCompletion": "Luckily none of the bags the alpaca threw your way were heavy, but your hands are definitely full. “What was that about?” you ask, annoyed.<br><br>“If you’re planning a trip with friends, you shouldn’t be carrying your burden alone! I’m sure your friends would rather you shake off a few things onto them than for you to collapse under the weight by yourself. Anyway, you can hand me those bags back. I’m a seasoned pack animal and I’ve made my point,” she says with a wink. “But keep that blue bundle as a reward for a hard lesson learned. I’ll see you at the peak!”"
|
||||
}
|
||||
|
||||
@@ -97,7 +97,7 @@
|
||||
"remindersToLogin": "Reminders to check in to Habitica",
|
||||
"unsubscribedSuccessfully": "Unsubscribed successfully!",
|
||||
"unsubscribedTextUsers": "You have successfully unsubscribed from all Habitica emails. You can enable only the emails you want to receive from <a href=\"/user/settings/notifications\">Settings > > Notifications</a> (requires login).",
|
||||
"unsubscribedTextOthers": "You won't receive any other email from Habitica.",
|
||||
"unsubscribedTextOthers": "You won't receive any other mail from Habitica.",
|
||||
"unsubscribeAllEmails": "Unsubscribe from Emails",
|
||||
"unsubscribeAllEmailsText": "Habitica will be unable to notify you via email about important changes to the site or your account.",
|
||||
"unsubscribeAllPush": "Unsubscribe from all Push Notifications",
|
||||
@@ -117,7 +117,7 @@
|
||||
"generate": "Generate",
|
||||
"getCodes": "Get Codes",
|
||||
"webhooks": "Webhooks",
|
||||
"webhooksInfo": "Webhooks provide a way for developers to receive notifications when a particular action is performed, such as scoring or updating a Task, or sending a message in a Group. By creating a webhook, you will be able to listen to changes in Habitica and build apps that respond to these changes.<br><br>For additional information and examples on webhooks, please visit our <a target=\"_blank\" href=\"https://habitica.fandom.com/wiki/Webhooks\">API Docs</a>",
|
||||
"webhooksInfo": "Webhooks provide a way for developers to receive notifications when a particular action is performed, such as scoring or updating a Task, or sending a message in a Group. By creating a webhook, you will be able to listen to changes in Habitica and build apps that respond to these changes.<br><br>For additional information and examples on webhooks, please visit our <a target=\"_blank\" href=\"https://habitica.com/apidoc/#api-Webhook-AddWebhook\">API Docs</a>.",
|
||||
"enabled": "Enabled",
|
||||
"webhookURL": "Webhook URL",
|
||||
"invalidUrl": "invalid URL",
|
||||
@@ -196,10 +196,10 @@
|
||||
"remove": "Remove",
|
||||
"resetTextLocal": "If you're absolutely certain, type your password into the text box below.",
|
||||
"resetTextSocial": "If you're absolutely certain, type <b>\"<%= magicWord %>\"</b> into the text box below.",
|
||||
"APITokenDisclaimer": "<b>Your API Token is like a password; Do not share it publicly.</b> You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.<br><br><b>Note:</b> If you need a new API Token (e.g., if you accidentally shared it), email <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> with your User ID and current Token. Once it is reset you will need to re-authorize everything by logging out of the website and mobile app and by providing the new Token to any other Habitica tools that you use.",
|
||||
"APITokenDisclaimer": "<b>Your API Token is like a password; Do not share it publicly.</b> You may occasionally be asked for your User ID, but never post your API Token where others can see it, including on Github.<br><br><b>Note:</b> If you need a new API Token (e.g., if you accidentally shared it), email <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> with your User ID and current Token. Once it is reset you will need to re-authorise everything by logging out of the website and mobile app and by providing the new Token to any other Habitica tools that you use.",
|
||||
"audioThemeDisclaimer": "Audio themes add optional sound effects to the Habitica website. Volume levels are controlled using your computer's volume settings.",
|
||||
"gemCap": "Gem Cap",
|
||||
"nextHourglass": "Next Hourglass",
|
||||
"nextHourglass": "Next Mystic Hourglass Delivery",
|
||||
"transaction_buy_gold": "<b>Bought</b> with gold",
|
||||
"transaction_create_challenge": "<b>Created</b> challenge",
|
||||
"transaction_create_bank_challenge": "<b>Created</b> bank challenge",
|
||||
@@ -220,7 +220,7 @@
|
||||
"transaction_debug": "Debug Action",
|
||||
"transaction_buy_money": "<b>Bought</b> with money",
|
||||
"transaction_contribution": "<b>Tier</b> change",
|
||||
"nextHourglassDescription": "Subscribers receive Mystic Hourglasses within\nthe first three days of the month.",
|
||||
"nextHourglassDescription": "Subscribers receive a Mystic Hourglass, a Mystery Gear Set, and have their Gems restocked in the Market within the first two days of the month.",
|
||||
"transaction_spend": "<b>Spent</b> on",
|
||||
"transaction_gift_receive": "<b>Received</b> from",
|
||||
"generalSettings": "General Settings",
|
||||
@@ -233,7 +233,7 @@
|
||||
"siteLanguage": "Site Language",
|
||||
"showLevelUpModal": "When Gaining a Level",
|
||||
"showHatchPetModal": "When Hatching a Pet",
|
||||
"showRaisePetModal": "When Raising a Pet into a Mount",
|
||||
"showRaisePetModal": "When Growing a Pet into a Mount",
|
||||
"showStreakModal": "When Attaining a Streak Achievement",
|
||||
"baileyAnnouncement": "Latest Bailey Announcement",
|
||||
"view": "View",
|
||||
@@ -257,5 +257,6 @@
|
||||
"APITokenTitle": "API Token",
|
||||
"userNameSuccess": "Username successfully changed",
|
||||
"addWebhook": "Add Webhook",
|
||||
"changeEmailDisclaimer": "This is the email address that you use to log in to Habitica, as well as receive notifications."
|
||||
"changeEmailDisclaimer": "This is the email address that you use to log in to Habitica, as well as receive notifications.",
|
||||
"transaction_subscription_bonus": "<b>Subscription</b> bonus"
|
||||
}
|
||||
|
||||
@@ -531,7 +531,7 @@
|
||||
"backgroundRainyBarnyardText": "Corral lluvioso",
|
||||
"backgroundAmongGiantFlowersNotes": "Pierde el tiempo y entre flores gigantes.",
|
||||
"backgroundHabitCityRooftopsText": "Tejados de Villahábito",
|
||||
"backgroundHabitCityRooftopsNotes": "Salta de forma aventurera entre las azoteas de Ciudad Hábito.",
|
||||
"backgroundHabitCityRooftopsNotes": "Salta de forma aventurera entre las azoteas de Villahábito.",
|
||||
"backgroundJungleCanopyNotes": "Regodéate en el asfixiante esplendor del dosel de la jungla.",
|
||||
"backgroundCampingOutNotes": "Disfruta del aire libre acampando.",
|
||||
"backgroundStrawberryPatchNotes": "Recoge delicias frescas de una parcela de fresas.",
|
||||
@@ -897,5 +897,14 @@
|
||||
"backgroundOldFashionedTeaShopNotes": "Deléitate con una infusión restauradora en la Tienda de Té Entrañable.",
|
||||
"backgrounds032025": "CONJUNTO 130: Publicado en Marzo 2025",
|
||||
"backgroundMountainSceneWithBlossomsText": "Floreada Escena Montañosa",
|
||||
"backgroundMountainSceneWithBlossomsNotes": "Disfruta de las hermosas vistas y delicados aromas en una Floreada Escena Montañosa."
|
||||
"backgroundMountainSceneWithBlossomsNotes": "Disfruta de las hermosas vistas y delicados aromas en una Floreada Escena Montañosa.",
|
||||
"backgrounds0420205": "CONJUNTO 131: Publicado en Abril 2025",
|
||||
"backgroundGardenWithFlowerBedsText": "Jardín con Parterres de Flores",
|
||||
"backgroundGardenWithFlowerBedsNotes": "Disfruta la explosión floral de la primavera en el Jardín con Parterres de Flores.",
|
||||
"backgrounds052025": "Conjunto 132: Publicado en Mayo 2025",
|
||||
"backgroundTrailThroughAForestText": "Camino a través del bosque",
|
||||
"backgroundTrailThroughAForestNotes": "Dembulando bajo en un sendero en el bosque.",
|
||||
"backgrounds062025": "Conjunto 133: Publicado en Junio 2025",
|
||||
"backgroundSummerSeashoreText": "Verano en la Costa",
|
||||
"backgroundSummerSeashoreNotes": "Atrapa una ola este Verano en la Costa."
|
||||
}
|
||||
|
||||
@@ -399,5 +399,16 @@
|
||||
"questEggOtterMountText": "Nutria",
|
||||
"questEggOtterAdjective": "latrocida",
|
||||
"hatchingPotionJade": "Jade",
|
||||
"questEggOtterText": "Nutria"
|
||||
"questEggOtterText": "Nutria",
|
||||
"questEggAlpacaText": "Alpaca",
|
||||
"questEggAlpacaMountText": "Alpaca",
|
||||
"hatchingPotionBalloon": "Globo",
|
||||
"questEggAlpacaAdjective": "una colmada",
|
||||
"hatchingPotionCryptid": "Críptido",
|
||||
"wackyPotionNotes": "Vierte esto en un huevo y eclosionará como una Mascota Absurda <%= potText(locale) %>.",
|
||||
"wackyPotionAddlNotes": "No puede convertirse en una Montura o usarse en huevos de Mascotas de Misión.",
|
||||
"questEggPlatypusMountText": "Marsupial",
|
||||
"hatchingPotionOpal": "Ópalo",
|
||||
"questEggPlatypusText": "Ornitorrinco",
|
||||
"questEggPlatypusAdjective": "meticulosa"
|
||||
}
|
||||
|
||||
@@ -3301,5 +3301,69 @@
|
||||
"shieldSpecialSpring2025HealerNotes": "Puedes usar este pétalo mutante para promover la bondad y repeler el mal o para alejar los pensamientos negativos. ¡Aprovecha que ya es primavera en el…! Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada Primavera 2025.",
|
||||
"shieldMystery202502Notes": "Este día de San Valentín y cada día al ser el hazmerreír de aquellos que te rodeen, que tu corazón sea tan ligero como estos globos flotantes que sostienes. No otorga ningún beneficio. Artículo de Suscriptor Febrero 2025.",
|
||||
"shieldArmoireSpringPetalUchiwaText": "Abanico Uchiwa de Pétalo Primaveral",
|
||||
"eyewearMystery202503Text": "Ojos Jade de Juggernaut"
|
||||
"eyewearMystery202503Text": "Ojos Jade de Juggernaut",
|
||||
"armorMystery202504Text": "Armadura de Yeti Esquivo",
|
||||
"armorMystery202504Notes": "¿Abominable? ¡Yo mas bien diría adorable! No otorga ningún beneficio. Artículo de Suscriptor Abril 2025.",
|
||||
"armorArmoireSillyOrangeTuxedoText": "Esmoquin Tonto Anaranjado",
|
||||
"armorArmoireSillierBlueTuxedoText": "Esmoquin MasTonto Azulado",
|
||||
"armorArmoireSillierBlueTuxedoNotes": "Saca tu auténtico ser con este traje único. Aumenta la fuerza en <%= str %>. Armario Encantado: Conjunto Esmoquin MasTonto (Artículo 1 de 2).",
|
||||
"headMystery202504Text": "Careta de Yeti Esquivo",
|
||||
"headMystery202504Notes": "Lleva esta misteriosa careta y pasa así totalmente desapercibido como parte de la gran familia de oscuros críptidos. No otorga ningún beneficio. Artículo de Suscriptor Abril 2025.",
|
||||
"headArmoireSillyOrangeTophatText": "Sombrero de Copa Tonto Anaranjado",
|
||||
"headArmoireSillyOrangeTophatNotes": "Con un corte de pelo estilo tarta de calabaza vas a estar divino de la muerte. Aumenta la fuerza y la constitución en <%= attrs %> cada uno. Armario Encantado: Conjunto Esmoquin Tonto (Artículo 2 de 2).",
|
||||
"headArmoireSillierBlueTophatText": "Sombrero de Copa MasTonto Azulado",
|
||||
"headArmoireSillierBlueTophatNotes": "Un poco de clase, un gran abismo en tus cotas de sofisticación. Aumenta la fuerza y la constitución en <%= attrs %> cada uno. Armario Encantado: Conjunto Esmoquin MasTonto (Artículo 2 de 2).",
|
||||
"armorArmoireSillyOrangeTuxedoNotes": "Un traje adecuado para tus labores diarias. Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto Esmoquin Tonto (Artículo 1 de 2).",
|
||||
"weaponArmoireGildedKnightsSpearText": "Lanza de Caballero Dorado",
|
||||
"weaponArmoireGildedKnightsSpearNotes": "Con este arma, vas a poder asegurarte el pago de cualquier deuda con toda la contundencia y el peso de la ley. Aumenta la Fuerza en <%= str %>. Armario Encantado: Conjunto Caballero Dorado (Artículo 3 de 3)",
|
||||
"backMystery202505Text": "Alas de Mariposa Macaón Masiva",
|
||||
"armorArmoireGildedKnightsPlateNotes": "En esta armadura, eres prácticamente invencible. ¡Tus enemigos seguramente te oirán rugir! Aumenta la Percepción en un <%= per %>. Armario encantado: Conjunto Caballero Dorado (Artículo 2 de 3)",
|
||||
"armorArmoireGildedKnightsPlateText": "Armadura de Caballero Dorado",
|
||||
"headArmoireGildedKnightsHelmText": "Casco de Caballero Dorado",
|
||||
"headArmoireGildedKnightsHelmNotes": "Brilla tan brillante como el sol a través de la oscuridad de cualquier batalla. Aumenta la Constitución en <%= con %>. Armario encantado: Conjunto Caballero Dorado (Artículo 1 de 3)",
|
||||
"backMystery202505Notes": "Gánate tus galones volando y elevándote con estas alas aerodinámicas. No otorga ningún beneficio. Artículo de Suscriptor Mayo 2025.",
|
||||
"headAccessoryMystery202505Text": "Antenas de Mariposa Macaón Masiva",
|
||||
"headAccessoryMystery202505Notes": "Detecta las mejores áreas de flores silvestres con estas sensibles antenas. No otorga ningún beneficio. Artículo de Suscriptor Mayo 2025.",
|
||||
"weaponSpecialSummer2025WarriorNotes": "No hay manera de establecer la antigüedad de este arma, pero parecerá pegada a tus manos al cargar contra las tareas más pesadas. Aumenta la Fuerza en <%= str %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"weaponSpecialSummer2025RogueNotes": "Este tentáculo, imbuido con el hechizo pensamiento único, te ofrece adherencia total y estricta a tus objetivos para que no pierdas ímpetu en completar tus tareas. Aumenta la Fuerza en <%= str %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"weaponSpecialSummer2025MageNotes": "Ramifica tus talentos y tus habilidades diversificándolos y ampliándolos por todo el espectro de tus tareas, proporciona mente amplificada nivel tres. Aumenta la Inteligencia en <%= int %> y la Percepción en <%= per %>. Equipamiento de edición limitada Verano 2025",
|
||||
"weaponArmoireBeekeepersSmokerNotes": "Usa el extraño humo que sale de este objeto para calmar a tus abejas y obtener algo de miel. A las abejas parece no importarles, viajan tío. Siendo honestos, todos deberíamos estar más tranquilos y ser más felices, paz y amor. Aumenta la Inteligencia en <%= int %>. Armario Encantado: Conjunto de Apicultor (Artículo 3 de 4)",
|
||||
"armorSpecialSummer2025WarriorNotes": "Esta armadura no solo te hace duro sino que también te vuelve veloz. Lucha como un carcayú o pon los pies en polvorosa cuál ave galliforme—¡la decisión es tuya! Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"armorSpecialSummer2025RogueNotes": "Este traje cambia de color a voluntad, también eyecta una nube de tinta opaca. Distrae cuál manada lupina atacando o escóndete cuál ave galliforme —¡la decisión es tuya! Aumenta la Percepción en <%= per %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"armorSpecialSummer2025MageNotes": "Estas hermosas telas no solo tienen colores impresionantes, sino que también te permiten deslizarte maravillosamente por el agua. Nada cuál orca protectora o baila cuál ave galliforme, cloooc— ¡la decisión es tuya! Aumenta la Inteligencia en <%= int %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"headSpecialSummer2025WarriorNotes": "Impenetrable y perfectamente puntiagudo, este yelmo apretado te protegerá incluso de las estrellas de mar. Aumenta la fuerza en <%= str %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"headSpecialSummer2025MageNotes": "Deja a todos obnubilados con el hechizo de imagen holística que desprenden tus aletas al moverse con la corriente. Aumenta la percepcion en <%= per %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"shieldSpecialSummer2025WarriorNotes": "De hermoso colorido, pero lleno de filos y crestas mortales. ¡Oh no! ¡No me gustaría ser tu enemigo! Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"shieldSpecialSummer2025HealerNotes": "Parece sencillo, pero no te dejes engañar tiene propiedades altamente nocivas. ¡Oh no! ¡No me gustaría ser tu enemigo! Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"shieldMystery202506Notes": "Disipa la magia y la maldad y confiere aura brillante y calidad que reconforta y alegra los corazones de tu grupo. No otorga ningún beneficio. Artículo de Suscriptor Junio 2025.",
|
||||
"shieldArmoireBeekeepersHiveNotes": "Los panales sirven como hogar y como lugares de trabajo. Vas a tener que recordarles a tus amigas abejitas que tienen que ser equilibradas en su vida familiar y laboral. Aumenta la Fuerza en <%= str %>. Armario Encantado: Conjunto de Apicultor (Artículo 4 de 4)",
|
||||
"shieldMystery202506Text": "Escudo Brillo Solar",
|
||||
"weaponSpecialSummer2025WarriorText": "Lanza Vieira",
|
||||
"weaponSpecialSummer2025RogueText": "Tentáculo de Calamar",
|
||||
"weaponSpecialSummer2025HealerText": "Remo Aleta de Ángel de Mar",
|
||||
"weaponSpecialSummer2025HealerNotes": "Haz un movimiento en forma de ocho, adelante, siempre adelante, conseguirás un progreso rápido con tus tareas. Aumenta la Inteligencia en <%= int %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"weaponSpecialSummer2025MageText": "Rama Coralina",
|
||||
"weaponArmoireBeekeepersSmokerText": "Ahumador",
|
||||
"armorSpecialSummer2025WarriorText": "Armadura Vieira",
|
||||
"armorSpecialSummer2025RogueText": "Traje de Calamar",
|
||||
"armorSpecialSummer2025HealerText": "Traje Ángel de Mar",
|
||||
"armorSpecialSummer2025HealerNotes": "Este traje no solo te hace parecer elegante de la muerte, sino que también te hace más delgado. Fluye cual anguila o nada como ave galliforme, jeje —¡la decisión es tuya! Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"armorSpecialSummer2025MageText": "Ropajes de Pez Lábrido Hada",
|
||||
"armorArmoireBeekeepersSuitText": "Traje de Apicultor",
|
||||
"armorArmoireBeekeepersSuitNotes": "Te protege mientras cuidas de tus laboriosas amigas abejitas. Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto de Apicultor (Artículo 2 de 4)",
|
||||
"headSpecialSummer2025WarriorText": "Yelmo Vieira",
|
||||
"headSpecialSummer2025RogueText": "Máscara de Calamar",
|
||||
"headSpecialSummer2025RogueNotes": "Notas como tu vista mejora cuando llevas puesta esta máscara. Aumenta la percepcion en <%= per %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"headSpecialSummer2025HealerText": "Yelmo de Ángel de Mar",
|
||||
"headSpecialSummer2025HealerNotes": "Enhorabuena, ahora si, ya eres una alegre mariposilla de mar. Aumenta la Inteligencia en <%= int %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"headSpecialSummer2025MageText": "Tocado de Pez Lábrido Hada",
|
||||
"headArmoireBeekeepersHatText": "Yelmo y Velo de Apicultor",
|
||||
"headArmoireBeekeepersHatNotes": "Protege tu cara mientras atiendes a tus coleguitas zumbadoras. Aumenta la Percepción en <%= per %>. Armario Encantado: Conjunto de Apicultor (Artículo 1 de 4)",
|
||||
"shieldSpecialSummer2025WarriorText": "Escudo Caparazón Vieira",
|
||||
"shieldSpecialSummer2025RogueText": "Tentáculo de Calamar",
|
||||
"shieldSpecialSummer2025RogueNotes": "Este tentáculo parece escuálido, pero no veas como estrangula mortalmente. ¡Oh no! ¡No me gustaría ser tu enemigo! Aumenta la fuerza en <%= str %>. Equipamiento de edición limitada Verano 2025.",
|
||||
"shieldSpecialSummer2025HealerText": "Escudo Ángel de Mar",
|
||||
"shieldArmoireBeekeepersHiveText": "Panal",
|
||||
"backMystery202506Text": "Aureola de Brillo Solar",
|
||||
"backMystery202506Notes": "Derrocha un aura de calidez mientras completas tus tareas diarias. No otorga ningún beneficio. Artículo de Suscriptor Junio 2025."
|
||||
}
|
||||
|
||||
@@ -274,5 +274,9 @@
|
||||
"spring2025CrystalPointRogueSet": "Conjunto Pícaro Puntas de Cristal",
|
||||
"spring2025PlumeriaHealerSet": "Conjunto Sanador Flor Plumaria",
|
||||
"spring2025MantisMageSet": "Conjunto Mago Mantis",
|
||||
"spring2025SunshineWarriorSet": "Conjunto Guerrero Brillo Solar"
|
||||
"spring2025SunshineWarriorSet": "Conjunto Guerrero Brillo Solar",
|
||||
"summer2025ScallopWarriorSet": "Conjunto Guerrero Vieira",
|
||||
"summer2025SquidRogueSet": "Conjunto Pícaro Calamar",
|
||||
"summer2025SeaAngelHealerSet": "Conjunto Sanador Ángel de Mar",
|
||||
"summer2025FairyWrasseMageSet": "Conjunto Mago Pez Lábrido Hada"
|
||||
}
|
||||
|
||||
@@ -834,5 +834,31 @@
|
||||
"questJadeDropJadePotion": "Poción de Eclosión Jade",
|
||||
"questJadeUnlockText": "Desbloqueas la Poción de Eclosión Jade y así que puedas comprarla en el Mercado.",
|
||||
"questJadeBoss": "Jadeando Jarto",
|
||||
"questJadeCompletion": "¡Después de incontables recaídas de alguna manera inexplicable has conseguido hacer rodar el pedrusco de jade hasta la cima del risco! La figura de aspecto pétreo te alcanza y te ofrece una bonita sonrisa. Empuja el pedrusco con suave gesto y ves horrorizado como vuelve a rodar cuesta abajo hasta la posición que estaba justo cuando empezaste tu ardua tarea.<br><br> “¡Eh! ¿por qué has hecho eso? ¡Alguien va a tener que volver a hacer todo el trabajo otra vez!” le espetas.<br><br> “Solo por que tengas que intentar hacer las cosas más de una vez no significa que no hayas logrado nada,” te dice la criatura. “Por ahora, ¡céntrate en lo que has conseguido y disfruta de tu recompensa!”<br><br>Te despiertas sobresaltado en tu sofá, el trozo de papiro caído en el suelo. ¡Encima de la mesa tres botellas llenas con un líquido mantecoso color jade! Quizás debas lavar los platos y dejar eso solucionado y después tomarte un descanso para ver que resulta de rociar estas pociones sobre algunos huevos de mascota en los establos…"
|
||||
"questJadeCompletion": "¡Después de incontables recaídas de alguna manera inexplicable has conseguido hacer rodar el pedrusco de jade hasta la cima del risco! La figura de aspecto pétreo te alcanza y te ofrece una bonita sonrisa. Empuja el pedrusco con suave gesto y ves horrorizado como vuelve a rodar cuesta abajo hasta la posición que estaba justo cuando empezaste tu ardua tarea.<br><br> “¡Eh! ¿por qué has hecho eso? ¡Alguien va a tener que volver a hacer todo el trabajo otra vez!” le espetas.<br><br> “Solo por que tengas que intentar hacer las cosas más de una vez no significa que no hayas logrado nada,” te dice la criatura. “Por ahora, ¡céntrate en lo que has conseguido y disfruta de tu recompensa!”<br><br>Te despiertas sobresaltado en tu sofá, el trozo de papiro caído en el suelo. ¡Encima de la mesa tres botellas llenas con un líquido mantecoso color jade! Quizás debas lavar los platos y dejar eso solucionado y después tomarte un descanso para ver que resulta de rociar estas pociones sobre algunos huevos de mascota en los establos…",
|
||||
"questAlpacaText": "La Alpaca Colmada",
|
||||
"questAlpacaNotes": "Los rayos de sol brillan con fuerza mientras caminas por los senderos rocosos de las Montañas Crueles. Has estado planeando por meses esta expedición para tu grupo de amigos, investigando todos los detalles del viaje. Sin embargo la cantidad de suministros que llevas en la espalda es demasiado pesado, a cada paso te sientes más cargado y con menos ganas de aventura.<br><br>De repente escuchas el estrépito de unas pezuñas andando por la senda que acabas de dejar atrás. Una alpaca con su esponjoso pelaje se acerca hacia ti colmada hasta las trancas con un montón de paquetes y de aperos a la espalda.<br><br> “Estás arrastrando los pies, ¡campeón!¡ Y eso que solo llevas una mochilita!” Te dice mientras te adelanta.<br><br> “Para ti es fácil de decir,” suspiras. “Invertí mucho tiempo en planear esta aventura, y ahora estoy aquí, sufriendo, ni siquiera un ápice de diversión…”<br><br> “No te desanimes,” te grita la alpaca. “¡Te voy a enseñar algo que aprendí hace tiempo, pequeño saltamontes!” Ella se encabrita, ¡y de repente un saco de dormir sale volando hacia ti ¿Qué clase de ayuda es esta?!",
|
||||
"questAlpacaCompletion": "Felizmente ninguno de las cosas que la alpaca te va arrojando es demasiado pesada, pero ya tienes las manos llenas. “¿Qué es todo esto?” le preguntas un poco cabreado.<br><br> “Si planeas un viaje con amigos, ¡no deberías llevar tu todas las cosas, melón! Estoy segura que tus amigos prefieren que dejes algunas cosas en vez de ir arrastrándote destruido psicológicamente por el peso. De todas maneras, venga, dame algunos de tus suministros, campeón. Soy una animal entrenada y preparada para este tipo de cosas y creo que ya has aprendido la lección, burro,” te dice guiñándote un ojo. “Quédate con ese paquete azul como premio por otra lección de vida aprendida, calamar. ¡Te veo en el pico!”",
|
||||
"questAlpacaBoss": "La Alpaca Colmada",
|
||||
"questAlpacaRageTitle": "Bultos-Tambaleantes",
|
||||
"questAlpacaRageDescription": "Está barra de estado se llena cuando no completas tus Tareas Diarias. Cuando está completa, ¡La Alpaca Colmada recupera parte de su salud!",
|
||||
"questAlpacaRageEffect": "¡La Alpaca Colmada te lanza parte de su equipaje! ¡El monstruo recupera el 30% de su salud!",
|
||||
"questAlpacaDropAlpacaEgg": "Alpaca (huevo)",
|
||||
"questAlpacaUnlockText": "Desbloqueados los Huevos de Alpaca para su Compra en el Mercado",
|
||||
"questPlatypusCompletion": "Después de salpicaros el uno al otro, con más saña que cariño, todo hay que decirlo, y después de algunas palabras de ánimo por tu parte, la ornitorrinco finalmente para y emerge con un suspiro.<br><br> “Puede que tengas razón. Si espero perfección ¡nunca voy a terminar! Bueno, siempre puedo ir haciendo ajustes aquí y allí a medida que vaya completándola. Parece que tú también eres bastante meticuloso.”<br><br> Tu vista pasa de sus preciosos ojos a tu ficha de trabajo empapada “Si…”<br><br> “Siento lo de la ficha,” te dice la ornitorrinco. “Aquí tienes, como disculpa por haber mojado tu tarea escolar, acepta por favor estos huevos que encontré en el barro.”",
|
||||
"questPlatypusNotes": "Es un maravilloso día en el Arroyo de la Conquista, lo único que lo empaña es la ficha de trabajo que tienes en tu mano. ¿Por qué cuando ya te has decidido a exterminar esa partida de Orcos que saquean las caravanas en el camino del este se arruinan tus planes debido a las tareas escolares? Cinco preguntas bastante profundas sobre ecosistemas fluviales y encima una pregunta de desarrollo tipo ensayo.<br><br> “¿Describa cómo un animal puede adaptarse a vivir en un entorno fluvial? Bufff, me pilla un poco fuera de mi elemento…”<br><br>Tras 30 minutos, donde tu esperanza de responder pasa de casi nula a inexistente y de ahí a bloqueo mental que amenaza con convertirse en profunda migraña, escuchas unos chapoteos frustrados en las inmediaciones.<br><br> “Boofff,” dice una agradable voz aguda que surge burbujeante de debajo del agua. Una estilizada ornitorrinco emerge con aspecto de estar agotada. “¡No hay manera de dejar esta madriguera medio en condiciones! Cada vez que retoco algo parece que lo empeoro.” Se zambulle otra vez y su cola ancha y plana salpica una cantidad considerable de agua que moja toda tu cara.<br><br> “Espera, no lo desmontes —” le gritas mientras otra vez el agua del arroyo te golpea la cara. Quizás podrías ayudar, te atrajeron sus bonitos ojos y además ¡podrías conseguir algo de inspiración para completar tu tarea!",
|
||||
"questPlatypusText": "La Marsupial Meticulosa",
|
||||
"questPlatypusRageTitle": "Salpicadura Sorprendente",
|
||||
"questPlatypusBoss": "La Marsupial Meticulosa",
|
||||
"questPlatypusDropPlatypusEgg": "Ornitorrinco (huevo)",
|
||||
"questPlatypusUnlockText": "Desbloqueas los Huevos de Ornitorrinco para Comprarlos en el Mercado",
|
||||
"questPlatypusRageDescription": "Esta barra se va completando cuando no completas tus Tareas Diarias. Cuando esté llena, ¡la Marsupial Meticulosa drenará algunos Puntos de Maná del equipo!",
|
||||
"questPlatypusRageEffect": "¡La Marsupial Meticulosa se zambulle y te salpica con saña! ¡La cantidad de Puntos de Maná del equipo se ve reducida!",
|
||||
"questOpalText": "El Mito de los Ópalos Arcanos",
|
||||
"questOpalNotes": "En Habitica, el concilio de los ithryn ha estado buscando por eras las mitológicas Pociones Mágicas de Eclosión de Ópalo. Una poción tan poderosa que imbuye tanto a las Mascotas como a las Monturas por igual de un aura ígnea brillante imposible de encontrar en otro elemento, ya sea una gema o algún metal precioso. Los ópalos mágicos pueden incluso aumentar tanto la habilidad de planificar, la perspicacia y la creatividad según se rumorea entre ciertas logias de magos. ¡Que gran ayuda sería esto tanto para tu reputación como para tus aventuras cotidianas! <br><br>Despues de mucha investigación y alguna ayuda sorprendentemente anónima por fin has hallado una pista. La Poción de Ópalo requiere, piedra de Ópalo en bruto trabajada con el arte de la orfebrería y la inscripción rúnica, donde entre otras se deben usar runas pre-inscritas por antiguos alquimistas tanto de Libra como de Mercurio. Estas antiguas reliquias solo se pueden hallar en un lugar… las peligrosas ruinas de una legendaria ciudad perdida, en la frontera más septentrional del Desierto de Tiempoolvido. <br><br>Alcanzas las ruinas después de días cabalgando en tu Montura más poderosa, a través de una zona árida donde parece que no ha pasado nadie en eones. De repente entre los cascotes azotados por un inmisericorde sol y las rachas de viento ves algo brillante. ¡Tu búsqueda ha comenzado!",
|
||||
"questOpalCompletion": "Al final, cansado y polvoriento, encuentras la runa final y la piedra de Ópalo en bruto necesaria para, trabajando con el poder arcano del orfebre, preparar una Poción Mágica de Eclosión. <br><br> Comienzas la poderosa alquimia apenas llegas a la ciudad principal de Habitica. ¡El poder combinado de las Runas y el Ópalo llena tu laboratorio con un arcoíris de luz! En poco tiempo tienes tres porciones, y estás emocionado ante la perspectiva de eclosionar nuevos amigos coloridos.",
|
||||
"questOpalCollectLibraRunes": "Runa de Libra",
|
||||
"questOpalCollectMercuryRunes": "Runa de Mercurio",
|
||||
"questOpalCollectOpalGems": "Gema de Ópalo",
|
||||
"questOpalDropOpalPotion": "Poción de eclosión Ópalo",
|
||||
"questOpalUnlockText": "Desbloquea pociones de eclosión Ópalo para comprarlas en la Tienda"
|
||||
}
|
||||
|
||||
@@ -261,5 +261,8 @@
|
||||
"maxGemCapGift": "Ellos tendrán el máximo <strong>Capacidad de Gemas</strong>",
|
||||
"mysterySet202501": "Conjunto Vinculaescarcha Pálido",
|
||||
"mysterySet202502": "Conjunto de Arlequín Sincero",
|
||||
"mysterySet202503": "Conjunto de Juggernaut Jade"
|
||||
"mysterySet202503": "Conjunto de Juggernaut Jade",
|
||||
"mysterySet202504": "Conjunto de Yeti Esquivo",
|
||||
"mysterySet202505": "Conjunto Mariposa Macaón Masiva",
|
||||
"mysterySet202506": "Conjunto Brillo Solar"
|
||||
}
|
||||
|
||||
@@ -118,11 +118,11 @@
|
||||
"achievementDomesticatedText": "¡Has eclosionado todos los colores base de mascotas domesticas: hurón, cobaya, gallo, cerdo volador, ratón, conejo, caballo y vaca!",
|
||||
"achievementDomesticatedModalText": "¡Has eclosionado todas las mascotas domésticas!",
|
||||
"achievementDomesticated": "I-A-I-A-O",
|
||||
"achievementBirdsOfAFeather": "Aves de Pluma",
|
||||
"achievementBirdsOfAFeather": "Valió la Pluma",
|
||||
"achievementBirdsOfAFeatherText": "¡Has eclosionado todas las mascotas voladoras: Cerdo Volador, Búho, Loro, Pterodáctilo, Grifo, Halcón, Pavo Real y Gallo!",
|
||||
"achievementZodiacZookeeper": "Cuidador del Zodíaco",
|
||||
"achievementZodiacZookeeperModalText": "¡Has conseguido todas las mascotas del zodíaco!",
|
||||
"achievementBirdsOfAFeatherModalText": "¡Has conseguido todas las mascotas voladoras!",
|
||||
"achievementZodiacZookeeper": "Cuidador del Zoodíaco",
|
||||
"achievementZodiacZookeeperModalText": "¡Conseguiste todas las mascotas del zodíaco!",
|
||||
"achievementBirdsOfAFeatherModalText": "¡Conseguiste todas las mascotas voladoras!",
|
||||
"achievementShadeOfItAll": "La sombra de todo ello",
|
||||
"achievementShadeOfItAllText": "Ha domado todas las monturas sombrías.",
|
||||
"achievementShadyCustomer": "Cliente sombrío",
|
||||
@@ -130,13 +130,13 @@
|
||||
"achievementShadyCustomerModalText": "¡Has conseguido todas las mascotas sombrías!",
|
||||
"achievementShadeOfItAllModalText": "¡Has domado todas las monturas sombrías!",
|
||||
"achievementZodiacZookeeperText": "¡Has eclosionado todas las mascotas del zodíaco de color básico: Rata, Vaca, Conejo, Serpiente, Caballo, Oveja, Mono, Gallo, Lobo, Tigre, Cerdo Volador y Dragón!",
|
||||
"achievementReptacularRumbleText": "¡Has eclosionado todos los colores estándar de las mascotas reptiles: Caimán, Pterodáctilo, Serpiente, Triceratops, Tortuga, Tiranosaurio, y Velociraptor!",
|
||||
"achievementReptacularRumble": "Retumbado Reptacular",
|
||||
"achievementReptacularRumbleText": "¡Eclosionaste todos los colores estándar de las mascotas reptiles: Caimán, Pterodáctilo, Serpiente, Triceratops, Tortuga, Tiranosaurio, y Velociraptor!",
|
||||
"achievementReptacularRumble": "Reptacularmente Retumbado",
|
||||
"achievementReptacularRumbleModalText": "¡Coleccionaste todas las mascotas reptiles!",
|
||||
"achievementGroupsBeta2022Text": "Tú y tu grupo brindaron un valioso aporte para ayudar a Habitica a realizar las pruebas.",
|
||||
"achievementGroupsBeta2022ModalText": "Tú y tus grupos han ayudado a Habitica realizando pruebas y dando sugerencias!",
|
||||
"achievementGroupsBeta2022": "Verificador interactivo de la versión beta",
|
||||
"achievementWoodlandWizardText": "¡Ha eclosionado todos los colores estándar de las criaturas del bosque: tejón, oso, venado, zorro, rana, erizo, búho, caracol, ardilla y arbolito!",
|
||||
"achievementWoodlandWizardText": "¡Eclosionaste todos los colores estándar de las criaturas del bosque: tejón, oso, venado, zorro, rana, erizo, búho, caracol, ardilla y arbolito!",
|
||||
"achievementWoodlandWizard": "Mago del bosque",
|
||||
"achievementWoodlandWizardModalText": "¡Has coleccionado todas las mascotas del bosque!",
|
||||
"achievementBoneToPickText": "¡Ha conseguido todas las mascotas clásicas y todas las mascotas de esqueleto de misiones!",
|
||||
|
||||
@@ -18,15 +18,15 @@
|
||||
"webFaqAnswer30": "Si tu HP llega a cero, perderás un nivel, todo tu oro y una pieza de equipo que podrás volver a comprar.",
|
||||
"faqQuestion31": "¿Por qué perdí HP al interactuar con una tarea que no es negativa?",
|
||||
"webFaqAnswer31": "Si completas una tarea y pierdes HP cuando no deberías, es porque hubo un retraso mientras el servidor sincronizaba los cambios hechos en otras plataformas. Por ejemplo, si usas oro, maná o pierdes HP en la aplicación móvil y luego completas una tarea en el sitio web, el servidor simplemente está confirmando que todo esté sincronizado.",
|
||||
"faqQuestion32": "¿Cuándo puedo elegir una clase?",
|
||||
"webFaqAnswer32": "En Habitica hay cuatro clases: Guerrero, Mago, Pícaro y Sanador. Todos los jugadores comienzan como Guerreros hasta alcanzar el nivel 10. Una vez que llegues al nivel 10, podrás elegir una nueva clase o continuar como Guerrero.\n\nCada clase tiene su propio Equipo y Habilidades. Si no quieres elegir una clase, puedes seleccionar \"No participar\". Si decides no participar, siempre podrás activar el Sistema de Clases más adelante desde la Configuración.",
|
||||
"faqQuestion32": "¿Cómo puedo elegir una clase?",
|
||||
"webFaqAnswer32": "Todos los jugadores empiezan como clase Guerrero hasta que alcanzan el nivel 10. Una vez alcanzado el nivel 10, se te dará a elegir entre seleccionar una nueva clase o continuar como Guerrero.\n\nCada clase tiene diferente Equipo y Habilidades. Si no quieres elegir una clase, puedes seleccionar «Opt Out». Si eliges «Opt Out», siempre puedes activar el Sistema de Clases desde Ajustes más tarde.\n\nSi quieres cambiar tu clase después del Nivel 10, puedes hacerlo usando el Orbe de Renacimiento. El Orbe del Renacimiento está disponible en el Mercado por 6 Gemas en el nivel 50 o gratis en el nivel 100.\n\nTambién puedes cambiar de clase en cualquier momento desde Ajustes por 3 gemas. Esto no restablecerá tu nivel como el Orbe del Renacimiento, pero te permitirá reasignar los puntos de habilidad que has acumulado al subir de nivel para que coincidan con tu nueva clase.",
|
||||
"webFaqAnswer36": "¡Hay infinitas formas de personalizar la apariencia de tu Avatar en Habitica! Puedes cambiar la forma del cuerpo, el estilo y color de cabello, el color de piel o agregar gafas y ayudas para la movilidad seleccionando \"Personalizar Avatar\" desde el menú.\n\nPara personalizar tu Avatar en la aplicación móvil:\n*Desde el menú, selecciona \"Personalizar Avatar\"\n\nPara personalizar tu Avatar en el sitio web:\n*Desde el menú de usuario en la navegación, selecciona \"Personalizar Avatar\"",
|
||||
"faqQuestion33": "¿Qué es la barra azul que aparece después del nivel 10?",
|
||||
"webFaqAnswer33": "Después de desbloquear el Sistema de Clases, también obtienes acceso a Habilidades que requieren Maná para usarse. La cantidad de Maná depende de tu estadística de INT y puede modificarse con Habilidades y Equipamiento.",
|
||||
"faqQuestion34": "¿Qué tipo de comida le gusta a mi mascota?",
|
||||
"webFaqAnswer34": "Las mascotas prefieren la comida que coincide con su color. Las mascotas base son la excepción, pero todas ellas disfrutan del mismo alimento. A continuación, puedes ver qué comida prefiere cada tipo de mascota:\n\nMascotas base → Carne\nMascotas blancas → Leche\nMascotas del desierto → Papas\nMascotas rojas → Fresas\nMascotas sombrías → Chocolate\nMascotas esqueléticas → Pescado\nMascotas zombis → Carne podrida\nMascotas de Algodón de Azúcar Rosa → Algodón de azúcar rosa\nMascotas de Algodón de Azúcar Azul → Algodón de azúcar azul\nMascotas doradas → Miel",
|
||||
"faqQuestion35": "¡Alimenté a mi mascota y desapareció! ¿Qué pasó?",
|
||||
"webFaqAnswer35": "Una vez que hayas alimentado a tu mascota lo suficiente para convertirla en una Montura, necesitarás eclosionar otra mascota del mismo tipo si quieres tenerla nuevamente en tu establo.\nPara ver tus Monturas en la aplicación móvil:\nDesde el Menú, selecciona \"Mascotas y Monturas\" y cambia a la pestaña de Monturas.\nPara ver tus Monturas en el sitio web:\nDesde el menú de Inventario, selecciona \"Mascotas y Monturas\" y desplázate hacia abajo hasta la sección de Monturas\nPara ver tus Monturas en la aplicación móvil:\nDesde el Menú, selecciona \"Mascotas y Monturas\" y cambia a la pestaña de Monturas.\nPara ver tus Monturas en el sitio web:\nDesde el menú de Inventario, selecciona \"Mascotas y Monturas\" y desplázate hacia abajo hasta la sección de Monturas\nPara ver tus Monturas en la aplicación móvil:\nDesde el Menú, selecciona \"Mascotas y Monturas\" y cambia a la pestaña de Monturas.\nPara ver tus Monturas en el sitio web:\nDesde el menú de Inventario, selecciona \"Mascotas y Monturas\" y desplázate hacia abajo hasta la sección de Monturas\nPara ver tus Monturas en la aplicación móvil:\nDesde el Menú, selecciona \"Mascotas y Monturas\" y cambia a la pestaña de Monturas.\nPara ver tus Monturas en el sitio web:\nDesde el menú de Inventario, selecciona \"Mascotas y Monturas\" y desplázate hacia abajo hasta la sección de Monturas\nPara ver tus Monturas en la aplicación móvil:\nDesde el Menú, selecciona \"Mascotas y Monturas\" y cambia a la pestaña de Monturas.\nPara ver tus Monturas en el sitio web:\nDesde el menú de Inventario, selecciona \"Mascotas y Monturas\" y desplázate hacia abajo hasta la sección de Monturas\nPara ver tus Monturas en la aplicación móvil:\nDesde el Menú, selecciona \"Mascotas y Monturas\" y cambia a la pestaña de Monturas.\nPara ver tus Monturas en el sitio web:\nDesde el menú de Inventario, selecciona \"Mascotas y Monturas\" y desplázate hacia abajo hasta la sección de Monturas\nPara ver tus Monturas en la aplicación móvil:\nDesde el Menú, selecciona \"Mascotas y Monturas\" y cambia a la pestaña de Monturas.\nPara ver tus Monturas en el sitio web:\nDesde el menú de Inventario, selecciona \"Mascotas y Monturas\" y desplázate hacia abajo hasta la sección de Monturas\nPara ver tus Monturas en la aplicación móvil:\nDesde el Menú, selecciona \"Mascotas y Monturas\" y cambia a la pestaña de Monturas.\nPara ver tus Monturas en el sitio web:\nDesde el menú de Inventario, selecciona \"Mascotas y Monturas\" y desplázate hacia abajo hasta la sección de Monturas\n\nPara ver tus Monturas en la aplicación móvil:\nDesde el Menú, selecciona \"Mascotas y Monturas\" y cambia a la pestaña de Monturas.\n\nPara ver tus Monturas en el sitio web:\nDesde el menú de Inventario, selecciona \"Mascotas y Monturas\" y desplázate hacia abajo hasta la sección de Monturas",
|
||||
"webFaqAnswer35": "Una vez que hayas alimentado a tu mascota lo suficiente como para convertirla en una montura, tendrás que volver a incubar ese tipo de mascota para tenerla en tu establo.\n\nPara ver las Monturas en las aplicaciones móviles:\n\n * En el menú, selecciona «Mascotas y monturas» y ve a la pestaña «Monturas»\n\nPara ver monturas en el sitio web:\n\n * En el menú Inventario, selecciona «Mascotas y monturas» y desplázate hasta la sección Monturas",
|
||||
"faqQuestion36": "¿Cómo cambio la apariencia de mi Avatar?",
|
||||
"faqQuestion37": "¿Por qué mi equipamiento no se muestra en mi Avatar?",
|
||||
"webFaqAnswer37": "Revisa si la opción de Disfraz está activada. Si tu Avatar está usando un Disfraz, ese conjunto de Equipamiento se mostrará en lugar de tu Equipo de Batalla.\n\nPara activar o desactivar el Disfraz en la aplicación móvil:\n*Desde el menú, selecciona \"Equipamiento\" para encontrar el interruptor del Disfraz.\n\nPara activar o desactivar el Disfraz en el sitio web:\n*Desde tu Inventario, selecciona \"Equipamiento\" y ubica el interruptor del Disfraz en la pestaña de Disfraz en el cajón de Equipamiento",
|
||||
@@ -37,11 +37,11 @@
|
||||
"faqQuestion40": "¿Que son gemas, y como puedo obtenerlas?",
|
||||
"webFaqAnswer40": "Las gemas son la moneda premium de Habitica y se usan para comprar equipamiento, personalizaciones de avatar, fondos y más.\nPuedes comprarlas en paquetes o con oro si eres suscriptor de Habitica. También puedes ganarlas si eres seleccionado como ganador de un desafío.",
|
||||
"faqQuestion41": "¿Qué son los Relojes de Arena Místicos y cómo los obtengo?",
|
||||
"webFaqAnswer41": "Los Relojes de Arena Místicos son la moneda exclusiva de los suscriptores de Habitica y se usan en la Tienda del Viajero en el Tiempo.\nLos suscriptores reciben un Reloj de Arena Místico al inicio de cada mes en el que disfrutan de beneficios de suscripción, junto con muchas otras recompensas.\nSi te interesan los fondos, mascotas, misiones y equipamiento especiales de la Tienda del Viajero en el Tiempo, ¡consulta nuestras opciones de suscripción!",
|
||||
"webFaqAnswer41": "Los Relojes de Arena Místicos son la moneda exclusiva para suscriptores de Habitica que se utiliza en la Tienda de los Viajeros en el Tiempo. Los suscriptores reciben un Reloj de Arena Místico al comienzo de cada mes en el que tienen beneficios de suscripción, junto con un montón de otras ventajas. Asegúrate de consultar nuestras opciones de suscripción si estás interesado en los fondos, mascotas, misiones y equipamiento especiales que se ofrecen en la Tienda de los Viajeros en el Tiempo!",
|
||||
"faqQuestion42": "¿Qué puedo hacer para aumentar la responsabilidad?",
|
||||
"webFaqAnswer42": "Una de las mejores formas de motivarte y mantenerte responsable con tus tareas es unirte a un Grupo.\nFormar parte de un Grupo con otros jugadores de Habitica te permite participar en Misiones para obtener mascotas y equipo, recibir mejoras de habilidades de tus compañeros y aumentar tu motivación.\n\nOtra forma de mejorar tu compromiso es unirte a un Desafío. Los desafíos agregan automáticamente tareas relacionadas con un objetivo específico a tu lista. También añaden un elemento de competencia contra otros jugadores, lo que puede darte un impulso extra mientras intentas ganar el premio de Gemas.Existen Desafíos oficiales creados por el equipo de Habitica, así como desafíos creados por otros jugadores.",
|
||||
"faqQuestion43": "¿Cómo puedo tomar misiones?",
|
||||
"webFaqAnswer43": "Para comenzar una Misión, primero debes ser miembro de un Grupo.\nLos Grupos pueden ser aventuras en solitario, donde enfrentas las Misiones por tu cuenta, o puedes invitar a otros jugadores de Habitica para completarlas más rápido.\n\nPara iniciar una Misión, selecciona un Pergamino de Misión desde tu inventario y presiona el botón \"Comenzar Misión\" en tu Grupo. Luego, completa tus tareas como de costumbre para avanzar en la Misión.En una Misión contra un Jefe, infligirás daño al enemigo.En una Misión de Colección, tendrás la oportunidad de encontrar objetos\nEl progreso pendiente se aplica al día siguiente. Cuando inflijas suficiente daño o reúnas todos los objetos, la Misión se completará y recibirás tus recompensas!",
|
||||
"webFaqAnswer43": "Para empezar una misión, necesitarás ser miembro de un grupo. Los grupos pueden ser aventuras en solitario en las que te enfrentas a las misiones en solitario, o puedes invitar a otros jugadores de Habitica para enfrentarte a las misiones a un ritmo más rápido.\n\nElige un pergamino de misión de tu inventario seleccionando el botón «Comenzar misión» de tu grupo. Completa las tareas como lo harías normalmente para avanzar en la misión. Acumularás daño contra un monstruo si te enfrentas a una misión de jefe, o tendrás la oportunidad de encontrar objetos si te enfrentas a una misión de recolección. Todo el progreso pendiente se aplica al día siguiente.\n\nCuando hagas suficiente daño o recojas todos los objetos, la misión se habrá completado y recibirás tu recompensa!",
|
||||
"faqQuestion44": "¿Cómo puedo eliminar tareas de un desafío?",
|
||||
"webFaqAnswer44": "**Necesitarás salir del Desafío o esperar a que se cierre para eliminar las tareas asociadas.** Un ícono de megáfono rojo indica que el Desafío ha sido cerrado, mientras que un megáfono gris indica que el Desafío aún está activo.\n\n**Para eliminar tareas de Desafíos en la app de *Android*:**\n1. Toca la tarea que pertenece al Desafío.\n2. Toca en **\"Eliminar\"** en la esquina superior derecha de la pantalla.\n3. Elige eliminar las tareas del Desafío de tu lista de tareas.\n\n**Para eliminar tareas de Desafíos en la app de *iOS*:**\n1. Encuentra la tarea del Desafío que deseas eliminar y verifica el ícono de megáfono.\n2. Si el ícono de megáfono está rojo, toca la tarea y selecciona **\"Eliminar\"** en la parte inferior.\n3. Si el ícono de megáfono está gris, deberás buscar el Desafío y salir de él para eliminar la tarea.\n\n**Para eliminar tareas de Desafíos en el *sitio web*:**\n1. Encuentra la tarea del Desafío que deseas eliminar y verifica el ícono de megáfono.\n2. Si el ícono de megáfono está rojo, haz clic en él y elige eliminar las tareas de tu lista.\n3. Si el ícono de megáfono está gris, necesitarás buscar el Desafío y salir de él para eliminar la tarea.",
|
||||
"faqQuestion45": "Mi avatar se transformó en un muñeco de nieve, estrella de mar, flor o fantasma. ¿Cómo puedo volver a mi apariencia original?",
|
||||
@@ -182,5 +182,66 @@
|
||||
"contentAnswer301": "<strong>7. de cada mes:</strong>Se añaden nuevos objetos al Armario Encantado y se lanza un nuevo fondo.Los nuevos disponibles en la Tienda de Personalizacion rotan.",
|
||||
"contentAnswer60": "¡Todos los demás eventos continuarán con normalidad! Todos seguirán recibiendo sus recompensas especiales y comida temática como hasta ahora.",
|
||||
"contentAnswer61": "Las tarjetas del Día de San Valentín y de Año Nuevo se lanzarán en fechas específicas.",
|
||||
"contentAnswer410": "¡Quédate para descubrirlo! Muchas de las nuevas incorporaciones fueron muy solicitadas y se lanzarán a lo largo del año."
|
||||
"contentAnswer410": "¡Quédate para descubrirlo! Muchas de las nuevas incorporaciones fueron muy solicitadas y se lanzarán a lo largo del año.",
|
||||
"subscriptionBenefitsAdjustments": "Ajustes a los Beneficios de Suscriptores",
|
||||
"subscriptionBenefitsFaqTitle": "Preguntas frecuentes: Ajustes a beneficios de suscriptores",
|
||||
"subscriptionHeading0": "Cambios en los Relojes de Arena Místicos",
|
||||
"subscriptionDetail001": "Todos los suscriptores recibirán los Relojes de Arena Místicos en el mismo calendario, coincidiendo con el cronograma de lanzamiento de los Sets de Equipo Misteriosos mensuales.",
|
||||
"subscriptionHeading1": "Cambios en las Gemas de Suscriptor",
|
||||
"subscriptionDetail451": "Cada suscripción regalada se sumará a la cantidad de meses que un jugador tiene beneficios de suscripción, lo que le permitirá seguir recibiendo más relojes de arena místicos y aumentos de su tope de gemas cada mes que pase.",
|
||||
"subscriptionDetail470": "Los beneficios de los suscriptores del Plan de grupo se comportarán igual que los de una suscripción periódica de 1 mes. Recibirás un Reloj de arena místico al principio de cada mes y la cantidad de Gemas que puedes comprar cada mes en el Mercado aumentará en 2 hasta llegar a 50.",
|
||||
"contentAnswer62": "Las Pociones Mágicas de San Valentín (de eclosión) ya forman parte de la programación mensual.",
|
||||
"contentAnswer63": "Las Mascotas Extravagantes no se irán hasta finales de abril.",
|
||||
"contentAnswer70": "Los Fondos, Misiones, Mascotas y Monturas disponibles en la Tienda del Viajero en el Tiempo permanecerán disponibles durante todo el año.",
|
||||
"contentAnswer71": "Manténganse atentos para más actualizaciones sobre las mejoras planeadas para la experiencia de la Tienda del Viajero del Tiempo.",
|
||||
"subscriptionPara0": "¡Estamos mejorando las suscripciones de Habitica como nunca, con más Relojes de Arena Místicos y Gemas! Estos cambios harán que tus beneficios de suscripción sean mucho más claros.",
|
||||
"subscriptionDetail000": "Al estar suscrito por 12 meses, recibirás 12 Relojes de Arena Místicos, en lugar de los 4 anteriores.",
|
||||
"subscriptionDetail002": "Los suscriptores ya no tendrán que esperar hasta el mes siguiente a su pago recurrente para recibir los Relojes de Arena Místicos.",
|
||||
"subscriptionDetail01": "Las nuevas suscripciones recurrentes de 12 meses recibirán un bono único inicial de 12 Relojes de Arena Místicos adicionales al momento de la compra.",
|
||||
"subscriptionDetail010": "Esto será adicional al Reloj de Arena Místico mensual que todos los nuevos suscriptores reciben después de su compra inicial.",
|
||||
"subscriptionDetail012": "Este bono no aplica para suscripciones regaladas.",
|
||||
"subscriptionDetail100": "Las nuevas suscripciones de 1, 3 y 6 meses comenzarán con 24 gemas por mes, y esa cantidad aumentará cada mes que tengan beneficios.",
|
||||
"subscriptionDetail101": "Los suscriptores que actualmente tengan una cantidad impar de gemas por mes verán su límite de gemas redondeado al número par más cercano.",
|
||||
"subscriptionDetail11": "La cantidad de gemas que puedes comprar cada mes a cambio de oro ya no se restablecerá si caduca tu suscripción.",
|
||||
"subscriptionHeading2": "¿Por qué hacemos estos cambios?",
|
||||
"subscriptionDetail20": "Con la estructura actual, puede resultar difícil entender cuántos relojes de arena místicos recibirías y cuándo.",
|
||||
"subscriptionDetail21": "Se sabía que los cuatro niveles de suscripción causaban complicaciones al subir o bajar de nivel.",
|
||||
"subscriptionDetail22": "Las suscripciones regaladas y recurrentes tenían experiencias de beneficios y normas contradictorias que queríamos simplificar.",
|
||||
"subscriptionDetail24": "Queríamos que los suscriptores tuvieran más de cuatro oportunidades al año para recoger artículos de la Tienda de los Viajeros en el Tiempo.",
|
||||
"subscriptionDetail25": "Entendemos que las finanzas cambian y no queríamos castigar a los abonados por suscripciones caducadas quitándoles los beneficios que se habían ganado.",
|
||||
"subscriptionHeading3": "Premios del día del lanzamiento",
|
||||
"subscriptionDetail30": "Los jugadores con suscripciones recurrentes de 1 mes o suscripciones de Plan de grupo recibirán 2 relojes de arena místicos y 20 gemas.",
|
||||
"subscriptionDetail31": "Los jugadores con suscripciones recurrentes de 3 o 6 meses recibirán 4 relojes de arena místicos y 20 gemas.",
|
||||
"subscriptionDetail33": "Para recibir estas recompensas, su cuenta debe tener una suscripción recurrente activa antes del 19 de noviembre.",
|
||||
"subscriptionDetail41": "¿Cambiará el precio de las suscripciones cuando salga a la venta?",
|
||||
"subscriptionDetail410": "Estos cambios no afectarán al precio actual de las suscripciones.",
|
||||
"subscriptionDetail42": "Si no me conecto durante un mes mientras estoy suscrito, ¿perderé esas ventajas?",
|
||||
"subscriptionDetail420": "Al igual que con los Conjuntos de equipo misterioso, no perderás ningún Reloj de arena místico ni ningún aumento de gemas si no inicias sesión mientras estás suscrito. La próxima vez que inicies sesión, recibirás todos los beneficios adeudados por cada mes que hayas estado suscrito.",
|
||||
"subscriptionDetail43": "Si me suscribo a una suscripción periódica y luego la cancelo, ¿seguiré recibiendo beneficios?",
|
||||
"subscriptionDetail44": "Soy abonado actual, ¿cuántas gemas tendré disponibles en el mercado cada mes tras el cambio?",
|
||||
"subscriptionDetail4400": "Si actualmente has desbloqueado <%= númeroinicial %> Gemas al mes, se te fijará <%= númeroredondeado %>.",
|
||||
"subscriptionDetail45": "¿Conseguiré más relojes de arena místicos o un límite de gemas más alto más rápido comprando suscripciones con más regalos?",
|
||||
"subscriptionDetail46": "Si estuve abonado en el pasado, ¿puedo desbloquear mi antiguo límite de Gemas si me vuelvo a abonar ahora?",
|
||||
"subscriptionDetail460": "Como antes reiniciábamos la cantidad de gemas que podías comprar cada mes cuando se agotaban tus beneficios, los jugadores con beneficios de suscripción caducados tendrán que empezar de cero con este nuevo sistema.",
|
||||
"subscriptionDetail47": "Tengo una suscripción al Plan de Grupo, ¿cómo me afecta esto?",
|
||||
"subscriptionDetail48": "¿Hay algún cambio en otras ventajas de las suscripciones, como los Mystery Gear Sets?",
|
||||
"subscriptionPara2": "Si tiene alguna pregunta no cubierta por las respuestas anteriores, siempre puede ponerse en contacto con nuestro equipo en <%= mailto %>.",
|
||||
"contentQuestion7": "¿Qué otros artículos están disponibles en la Tienda del Viajero en el Tiempo, además de los Sets de Suscriptor pasados?",
|
||||
"contentFaqPara3": "Si tienes alguna pregunta no cubierta arriba, ¡siempre puedes contactar a nuestro equipo en <%= mailto %>! Estamos emocionados con este nuevo calendario de lanzamientos y ansiosos por futuros proyectos para mejorar Habitica para todos los jugadores.",
|
||||
"subscriptionDetail00": "Todos los suscriptores, incluyendo aquellos con suscripciones regaladas, recibirán 1 Reloj de Arena Místico al inicio de cada mes con beneficios activos.",
|
||||
"subscriptionDetail003": "Todos los nuevos suscriptores recibirán 1 Reloj de Arena Místico inmediatamente después de su compra. Esto contará como la entrega del Reloj de Arena Místico del mes actual.",
|
||||
"subscriptionDetail011": "Los jugadores actuales con una suscripción recurrente activa de 12 meses recibirán este bono el día en que estos cambios entren en vigor.",
|
||||
"subscriptionDetail10": "La cantidad de Gemas que los suscriptores pueden comprar con Oro en el Mercado aumentará en 2 cada mes con beneficios activos, hasta alcanzar un máximo de 50.",
|
||||
"subscriptionDetail102": "Las nuevas suscripciones de 12 meses empezarán inmediatamente con la cantidad máxima de gemas al mes, 50 gemas en lugar de las 45 anteriores.",
|
||||
"subscriptionPara1": "Para facilitar la transición al nuevo horario, los suscriptores actuales pueden esperar algunos regalos extra el día del lanzamiento. Queremos agradecerles sinceramente su apoyo durante este cambio!",
|
||||
"subscriptionDetail32": "Los jugadores con suscripciones recurrentes de 12 meses recibirán la bonificación de 12 Relojes de arena místicos mencionada anteriormente y 20 Gemas.",
|
||||
"subscriptionDetail400": "Los suscriptores actuales recibirán su primer reloj de arena místico y +2 gemas añadidas a su límite mensual en su primer inicio de sesión del mes posterior al lanzamiento. Esto significa que si ya has iniciado sesión en noviembre, tu primer aumento regular se producirá en diciembre.",
|
||||
"subscriptionDetail430": "Al cancelar una suscripción recurrente se fijará una fecha de finalización de tus ventajas, pero seguirás teniendo acceso completo a todas las ventajas de una suscripción anterior a esa fecha. Eso significa que seguirás recibiendo mensualmente relojes de arena místicos y aumentos en el tope de gemas al principio de cada mes en el que tengas acceso a esas ventajas.",
|
||||
"subscriptionDetail110": "Si aumentas la cantidad de gemas que puedes comprar cada mes y luego cancelas tu suscripción, podrás volver a comprar la misma cantidad en cualquier momento en el futuro, aunque adquieras un nivel de suscripción inferior.",
|
||||
"subscriptionDetail23": "Regalar un Reloj de arena místico al mes permite a los suscriptores disfrutar de los artículos rotatorios de la Tienda de los Viajeros en el Tiempo.",
|
||||
"subscriptionDetail440": "El día en que estos cambios entren en vigor, los abonados actuales con un número impar de Gemas al mes verán estos ajustes en su tope de Gemas:",
|
||||
"subscriptionDetail40": "Soy suscriptor, ¿cuándo recibiré mi primer Reloj de arena místico normal y el aumento del tope de gemas del nuevo calendario?",
|
||||
"subscriptionDetail450": "Dado que los Relojes de arena místicos y el aumento del tope de gemas son ahora un beneficio mensual, la compra de varias suscripciones de regalos no otorgará más beneficios a la vez.",
|
||||
"subscriptionDetail480": "Estos cambios solo afectan a los relojes de arena místicos y a las gemas de abonado. Todas las demás ventajas seguirán siendo las mismas.",
|
||||
"subscriptionPara3": "Esperamos que este nuevo calendario sea más predecible, permita un mayor acceso a las increíbles existencias de artículos de la Tienda de los Viajeros en el Tiempo y ofrezca aún más motivación para progresar en tus tareas cada mes!"
|
||||
}
|
||||
|
||||
@@ -2528,5 +2528,271 @@
|
||||
"weaponSpecialFall2023HealerText": "Martillo Tronco Grande",
|
||||
"weaponSpecialFall2023HealerNotes": "Este martillo retorcido, con ataques lentos y pesados, inflige golpes curativos en lugar de daño. Aumenta la inteligencia en <%= int %>. Edición limitada de equipo de otoño de 2023.",
|
||||
"weaponSpecialSpring2024MageText": "Bastón de Hibisco",
|
||||
"weaponSpecialSpring2024RogueText": "Cuchillo de Plata"
|
||||
"weaponSpecialSpring2024RogueText": "Cuchillo de Plata",
|
||||
"armorArmoireSoftVioletSuitText": "Traje violeta suave",
|
||||
"weaponMystery202408Text": "Égida Arcana",
|
||||
"weaponArmoireScholarlyTextbooksText": "Libros de texto académicos",
|
||||
"weaponMystery202408Notes": "Un escudo mágico de burbujas que te protege de los hechizos enemigos o te ayuda a flotar en el aire o el agua. No confiere ningún beneficio. Objeto de suscriptor de agosto de 2024.",
|
||||
"weaponArmoireOptimistsCloverText": "Trébol de cuatro hojas",
|
||||
"weaponArmoireScholarlyTextbooksNotes": "Aquí tienes la oportunidad de profundizar y aprender sobre cualquier tema que te interese. ¿Cuál es tu hiperfijación actual? Aumenta la Inteligencia en <%= int %>. Armario Encantado: Conjunto de Uniformes Escolares (Artículo 3 de 4).",
|
||||
"weaponArmoireDragonKnightsLanceText": "Lanza del Caballero Dragón",
|
||||
"armorSpecialBirthday2023Text": "Fabulosas batas de fiesta",
|
||||
"weaponArmoireCorsairsBladeNotes": "Ya sea que lo uses para saquear o para proteger, puedes estar feliz de haber traído esta feroz espada al mar contigo. Solo asegúrate de guardarla de manera segura cuando no la estés usando. Aumenta la Fuerza en <%= str %>. Armario Encantado: Conjunto Corsario (Ítem 3 de 3)",
|
||||
"armorSpecialWinter2024RogueText": "Túnicas de búho nival",
|
||||
"armorSpecialWinter2024RogueNotes": "¿Quién serás con esta túnica? Cubierta de plumas y pelusa, ¡estarás abrigada y discreta! Aumenta la percepción en <%= per %>. Edición limitada 2023-2024.",
|
||||
"armorSpecialWinter2024MageText": "Túnicas de mago narval",
|
||||
"armorSpecialWinter2024MageNotes": "Prácticas y bonitas, estas túnicas te mantendrán abrigado mientras realizas tus habilidades mágicas en el frío. Aumenta la inteligencia en <%= int %>. Edición limitada 2023-2024.",
|
||||
"armorSpecialSpring2024HealerText": "Traje de pájaro azul",
|
||||
"armorSpecialSpring2024MageNotes": "Estos bonitos pétalos te ayudarán a lucir tu poder con estilo. Aumenta tu inteligencia en <%= int %>. Edición limitada primavera 2024.",
|
||||
"armorSpecialSummer2024WarriorText": "Cola de tiburón ballena",
|
||||
"armorSpecialSummer2024RogueText": "Cola de nudibranquio",
|
||||
"armorSpecialSummer2024RogueNotes": "Puede que seas una babosa marina sin caparazón, ¡pero eres una babosa marina con alas! Aumenta la Percepción en <%= per %>. Equipo de edición limitada de verano de 2024.",
|
||||
"armorSpecialSummer2024HealerText": "Armadura de caracol marino",
|
||||
"armorSpecialSummer2024HealerNotes": "No hagas caso a los detractores. ¡Despacio y con constancia es una estrategia válida para afrontar las tareas! Aumenta la Constitución en <%= con %>. Edición limitada de verano de 2024.",
|
||||
"armorMystery202406Notes": "¡Atormenta a tus enemigos con estilo y elegancia! No ofrece ningún beneficio. Artículo de suscriptor de junio de 2024.",
|
||||
"weaponArmoireSpookyCandyBucketNotes": "Con un disfraz tan épico como ese, ¡vas a recibir un montón de dulces! Menos mal que tienes este cubo sin fondo para guardarlos todos. Intenta no picar nada hasta llegar a casa. Aumenta la inteligencia en <%= int %>. Armario Encantado: Set Noche de Terror (Artículo 2 de 2)",
|
||||
"weaponArmoirePottersWheelText": "Torno de alfarero",
|
||||
"armorSpecialSpring2024RogueText": "Túnica de nieve derretida",
|
||||
"weaponSpecialSpring2024WarriorText": "Lanza de fluorita",
|
||||
"weaponSpecialSpring2024HealerText": "Varita de plumas Bluebird",
|
||||
"weaponSpecialSummer2024RogueText": "Nudibranquio Tridente",
|
||||
"weaponSpecialSummer2024WarriorNotes": "Algunos dientes de tiburón desprendidos la transforman en un arma capaz de infligir daño desde cualquier dirección. Aumenta la fuerza en <%= str %>. Edición limitada del equipo de verano de 2024.",
|
||||
"weaponMystery202404Text": "Bastón del Mago Micelial",
|
||||
"weaponSpecialFall2024WarriorText": "Espada de fuego",
|
||||
"weaponSpecialFall2024WarriorNotes": "Esta formidable arma derriba inmediatamente cualquier obstáculo. Aumenta la fuerza en <%= str %>. Edición limitada de otoño de 2024.",
|
||||
"weaponSpecialFall2024RogueText": "Varita de cinta",
|
||||
"weaponSpecialFall2024RogueNotes": "Las tareas se paralizarán ante los giros y vueltas de esta arma hipnotizadora. Aumenta la Fuerza en <%= str %>. Edición limitada de otoño de 2024.",
|
||||
"weaponSpecialFall2024HealerText": "Guadaña espacial",
|
||||
"weaponSpecialFall2024MageText": "Bastón del inframundo",
|
||||
"weaponSpecialFall2024MageNotes": "Los pasos de las tareas se simplificarán al instante con un toque de esta arma brillante. Aumenta la Inteligencia en <%= int %> y la Percepción en <%= per %>. Edición limitada de otoño de 2024.",
|
||||
"armorSpecialBirthday2024Text": "Batas de fiesta ridículas",
|
||||
"weaponArmoireSpookyCandyBucketText": "Cubo de dulces espeluznante",
|
||||
"armorSpecialBirthday2024Notes": "¡Feliz cumpleaños, Habitica! Ponte estas ridículas batas de fiesta para celebrar este maravilloso día. No aporta ningún beneficio.",
|
||||
"armorSpecialSpring2024RogueNotes": "Esta túnica rústica te oculta incluso con el cambio de estaciones. Aumenta la percepción en un <%= per %>. Edición limitada primavera 2024.",
|
||||
"weaponSpecialWinter2025WarriorText": "Hacha de guerra Moose",
|
||||
"weaponSpecialWinter2025WarriorNotes": "¡Un hacha poderosa para un alce poderoso! ¡Serás imparable! Aumenta la Fuerza en <%= str %>. Edición Limitada Invierno 2024-2025.",
|
||||
"weaponSpecialWinter2025HealerNotes": "Lo que necesitas ahora son más luces y una estrella que brille en lo alto. ¡Serás imparable! Aumenta la Inteligencia en <%= int %>. Engranaje de invierno 2024-2025 de edición limitada.",
|
||||
"weaponArmoireDragonKnightsLanceNotes": "Esta lanza roja y plateada ha derribado a muchos oponentes de sus monturas. Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto de Caballero Dragón (Artículo 3 de 3)",
|
||||
"weaponArmoireFunnyFoolBatonText": "Bastón del tonto gracioso",
|
||||
"armorSpecialWinter2024WarriorNotes": "Resulta que el chocolate, la menta y el glaseado son materiales más resistentes de lo que crees. Aumenta la Constitución en <%= con %>. Edición limitada 2023-2024.",
|
||||
"armorSpecialSpring2022HealerText": "Armadura de peridoto",
|
||||
"armorSpecialWinter2024HealerText": "Armadura congelada",
|
||||
"armorSpecialWinter2024HealerNotes": "Este brillante bloque de hielo mágico te protege mientras planeas tu escape. Aumenta la Constitución en <%= con %>. Edición limitada 2023-2024.",
|
||||
"armorSpecialFall2024RogueText": "Armadura de gato negro",
|
||||
"armorSpecialFall2024WarriorText": "Armadura de diablillo ardiente",
|
||||
"armorSpecialFall2024HealerText": "Armadura de invasor espacial",
|
||||
"armorSpecialFall2024HealerNotes": "Conéctate con la galaxia y cautiva a los espectadores con esta armadura. Aumenta la Constitución en <%= con %>. Edición limitada de otoño de 2024.",
|
||||
"armorSpecialFall2024MageText": "Armadura de hechicero del inframundo",
|
||||
"armorSpecialWinter2025WarriorText": "Armadura de guerrero alce",
|
||||
"armorSpecialWinter2025RogueText": "disfraz de nieve",
|
||||
"armorSpecialWinter2025MageText": "Capa de aurora",
|
||||
"armorMystery202112Text": "Cola de ondina antártica",
|
||||
"armorMystery202401Notes": "Estas túnicas parecen tan delicadas como copos de nieve de cristal, pero te mantendrán abrigado mientras realizas tu magia invernal. No aportan ningún beneficio. Artículo de suscriptor de enero de 2024.",
|
||||
"armorMystery202407Notes": "¡Deslízate por lagos y canales con tu cola rosada! No aporta ningún beneficio. Artículo para suscriptores de julio de 2024.",
|
||||
"armorMystery202412Text": "Abrigo de cola de algodón de bastón de caramelo",
|
||||
"weaponMystery202403Text": "Espada Esmeralda de la Suerte",
|
||||
"weaponMystery202403Notes": "Llevar la espada más grande es sin duda una forma de crear tu propia suerte. No confiere ningún beneficio. Artículo de suscriptor de marzo de 2024.",
|
||||
"weaponArmoireHattersShearsText": "Tijeras afiladas",
|
||||
"armorSpecialWinter2024WarriorText": "Armadura de corteza de menta",
|
||||
"armorMystery202504Text": "Armadura de Yeti esquiva",
|
||||
"weaponSpecialWinter2024HealerNotes": "¡Deshazte de este atasco en un santiamén! Aumenta la Inteligencia en <%= int %>. Edición limitada Invierno 2023-2024.",
|
||||
"weaponArmoireShadyBeachUmbrellaText": "Sombrilla",
|
||||
"weaponArmoireShadyBeachUmbrellaNotes": "La sombra de este paraguas con los colores del arco iris te oculta brevemente de la estrella del día y de cualquier molestia no deseada. Aumenta la percepción en un <%= por %>. Armario encantado: Conjunto junto a la playa (Objeto 3 de 4).",
|
||||
"armorMystery202406Text": "Atuendo del bucanero fantasma",
|
||||
"weaponSpecialSpring2024RogueNotes": "Los desafíos duros como el hielo pueden cortarse en trozos más pequeños. Aumenta la Fuerza en <%= str %>. Edición limitada de primavera de 2024.",
|
||||
"weaponSpecialSpring2024WarriorNotes": "Este colorido cristal te ayudará a concentrar toda tu energía en un ataque. Aumenta la Fuerza en <%= str %>. Edición limitada de primavera de 2024.",
|
||||
"weaponSpecialSpring2024MageNotes": "Este bastón arremolinado está lleno de florituras. Aumenta la Inteligencia en <%= int %> y la Percepción en <%= per %>. Edición limitada de primavera de 2024.",
|
||||
"weaponSpecialSpring2024HealerNotes": "Una brizna de felicidad surge a voluntad para mejorar cualquier estado de ánimo. Aumenta la Inteligencia en <%= int %>. Edición limitada de primavera de 2024.",
|
||||
"weaponSpecialSummer2024RogueNotes": "¡Vuelve los aguijones afilados de los demás contra ellos! Aumenta la Fuerza en <%= str %>. Edición limitada del equipo de verano de 2024.",
|
||||
"weaponSpecialSummer2024WarriorText": "Cortador de dientes de tiburón ballena",
|
||||
"weaponSpecialSummer2024MageText": "Varita de anémona de mar",
|
||||
"weaponSpecialSummer2024MageNotes": "Estos terribles tentáculos pueden distraer, desviar y dirigir la magia a la vez. Aumenta la Inteligencia en <%= int %> y la Percepción en <%= per %>. Engranaje de edición limitada de verano de 2024.",
|
||||
"weaponSpecialSummer2024HealerText": "Caracol de mar Personal",
|
||||
"weaponSpecialSummer2024HealerNotes": "Te sorprenderá descubrir lo duro que es el caparazón del extremo de este bastón. Aumenta la Inteligencia en <%= int %>. Edición limitada de verano de 2024.",
|
||||
"weaponSpecialFall2024HealerNotes": "Tareas que antes eran cósmicamente complicadas son diezmadas por esta impactante hoja. Aumenta la Inteligencia en <%= int %>. Edición limitada de otoño de 2024.",
|
||||
"weaponSpecialSpring2025RogueNotes": "Con un solo golpe, puedes eliminar cualquier obstáculo que se interponga en el camino hacia tus objetivos. Aumenta la fuerza en <%= str %>. Edición limitada del equipo Primavera 2025.",
|
||||
"weaponSpecialWinter2025RogueText": "Ráfaga de copos de nieve",
|
||||
"weaponSpecialWinter2025RogueNotes": "¡Golpea y deslumbra hasta la sumisión a esas tareas difíciles! ¡Serás imparable! Aumenta la Fuerza en <%= str %>. Edición limitada Invierno 2024-2025.",
|
||||
"weaponSpecialWinter2025MageText": "Auroras Boreales",
|
||||
"weaponSpecialSpring2025RogueText": "Mayal de punta de cristal",
|
||||
"weaponSpecialSpring2025HealerNotes": "Con una onda, puedes invocar polinizadores a tu lado para que te ayuden en tus aventuras. Aumenta la Inteligencia en <%= int %>. Engranaje Primavera 2025 de edición limitada.",
|
||||
"weaponSpecialSpring2025MageText": "Bastón Mantis",
|
||||
"weaponMystery202404Notes": "Este bastón te otorgará una sabiduría ancestral tan eterna como las rocas y los árboles. No confiere ningún beneficio. Artículo de suscriptor de abril de 2024.",
|
||||
"weaponSpecialWinter2025HealerText": "Varita de estrella",
|
||||
"weaponSpecialWinter2025MageNotes": "Este impresionante y colorido espectáculo es el telón de fondo perfecto. ¡Serás imparable! Aumenta la Inteligencia en <%= int %> y la Percepción en <%= per %>. Engranaje de invierno 2024-2025 de edición limitada.",
|
||||
"weaponSpecialSpring2025HealerText": "Plumeria Crook1",
|
||||
"weaponSpecialSpring2025MageNotes": "Con un solo tajo, puedes usar la magia elemental para controlar el entorno que te rodea. ¡Aprovecha y salta hacia delante! Aumenta la Inteligencia en <%= int %> y la Percepción en <%= per %>. Edición limitada Spring 2025 Gear.",
|
||||
"weaponArmoireOptimistsCloverNotes": "Bueno, ¿mirarías lo que encontraste? Nunca está de más tener un poco más de buena suerte de tu lado. Aumenta la Fuerza y la Constitución en un <%= attrs %> cada una. Armario encantado: Conjunto optimista (Objeto 4 de 4).",
|
||||
"weaponArmoireFunnyFoolBatonNotes": "Con un solo movimiento de bastón, puedes lanzar un remate, redirigir la atención o provocar aplausos. Aumenta la Constitución y la Fuerza en <%= attrs %> cada una. Armario Encantado: Set del Tonto Divertido (Artículo 3 de 3)",
|
||||
"armorSpecialSpring2024WarriorText": "Armadura de fluorita",
|
||||
"armorSpecialSpring2024WarriorNotes": "Esta armadura de piedra estabilizadora te ayudará a mantenerte firme mientras deslumbra a todo lo que enfrentes. Aumenta la Constitución en <%= con %>. Edición limitada de primavera de 2024.",
|
||||
"armorSpecialSpring2024MageText": "Túnicas de hibisco",
|
||||
"armorSpecialSummer2024MageNotes": "¡Cuidado con una anémona! (Ahora dile que lo repita cinco veces rápido). Aumenta la inteligencia en <%= int %>. Edición limitada de verano de 2024.",
|
||||
"armorSpecialFall2024WarriorNotes": "Conviértete en uno con las llamas y vuélvete inmune a sus poderes destructivos con esta armadura. Aumenta la Constitución en <%= con %>. Edición limitada de otoño de 2024.",
|
||||
"armorSpecialFall2024MageNotes": "Conéctate con el inframundo y abraza el poder de los magos que te precedieron con esta armadura. Aumenta la inteligencia en <%= int %>. Edición limitada de otoño de 2024.",
|
||||
"armorSpecialWinter2025WarriorNotes": "Todos se harán a un lado y te dejarán paso cuando uses esta armadura. Aumenta la Constitución en <%= con %>. Equipo de edición limitada de invierno 2024-2025.",
|
||||
"armorSpecialWinter2025RogueNotes": "Aunque parezca que estás cubierto de nieve fría, te sientes cálido, calentito, alegre y feliz con este disfraz. Aumenta la percepción en <%= per %>. Edición limitada de invierno 2024-2025.",
|
||||
"armorSpecialWinter2025HealerText": "Túnica de luces de cadena",
|
||||
"armorSpecialWinter2025MageNotes": "Maravilla, fantasía, encanto y esplendor llenarán tus días cuando bailes con esta capa. Aumenta la inteligencia en <%= int %>. Edición limitada de invierno 2024-2025.",
|
||||
"armorSpecialSpring2025RogueNotes": "Esta impresionante capa contiene cristales adicionales con poderes secretos especiales que solo tú conoces. Aumenta la percepción en <%= per %>. Edición limitada de primavera de 2025.",
|
||||
"armorMystery202401Text": "Túnicas de hechicero nevado",
|
||||
"armorMystery202407Text": "Traje de ajolote amigable",
|
||||
"armorMystery202412Notes": "Un look divertido y esponjoso para abrigarte en un día de invierno. No ofrece ningún beneficio. Artículo para suscriptores de diciembre de 2024.",
|
||||
"armorMystery202502Text": "Traje de arlequín sincero",
|
||||
"armorSpecialWinter2025HealerNotes": "Afina tu progreso en tus tareas. Pero ten cuidado: si una bombilla se apaga, todas se apagan. Aumenta la Constitución en <%= con %>. Edición limitada de invierno 2024-2025.",
|
||||
"armorMystery202502Notes": "¡Estás lleno de chistes y bromas desde tu cuello con volantes hasta tus zapatos gigantescos! No aporta ningún beneficio. Artículo para suscriptores de febrero de 2025.",
|
||||
"armorMystery202504Notes": "¿Abominable? ¡Más bien adorable! No aporta ningún beneficio. Artículo de suscriptor de abril de 2025.",
|
||||
"weaponArmoireStormKnightAxeText": "Hacha del Caballero Tormenta",
|
||||
"weaponSpecialSpring2025WarriorText": "Cimitarra del Sol",
|
||||
"weaponSpecialSpring2025WarriorNotes": "Con un solo corte, puedes atravesar tallos de flores para hacer un ramo o atravesar obstáculos para cumplir tus tareas. Aumenta la fuerza en <%= str %>. Edición limitada Primavera 2025.",
|
||||
"weaponArmoireHattersShearsNotes": "Corta a través del agobio y las complicaciones. Estas tijeras también cortan muy bien la tela, por supuesto. Aumenta la Fuerza en <%= str %>. Armario Encantado: Set de Sombrerero (Artículo 3 de 4).",
|
||||
"weaponArmoirePottersWheelNotes": "Echa un poco de arcilla en esta rueda y haz un cuenco o una taza o un jarrón o un cuenco ligeramente diferente. Si tienes suerte, ¡un fantasma podría visitarte mientras creas! Aumenta la percepción en un <%= por %>. Armario encantado: Conjunto de alfarero (Objeto 4 de 4).",
|
||||
"weaponArmoireCorsairsBladeText": "Espada de corsario",
|
||||
"weaponArmoireStormKnightAxeNotes": "¡Reúne tu furia y asesta un golpe como un trueno! Aumenta la fuerza en <%= str %>. Armario encantado: Conjunto de caballero de la tormenta (objeto 3 de 3)",
|
||||
"armorSpecialSpring2024HealerNotes": "Estas fabulosas plumas harán realidad tus sueños más felices. Aumenta tu Constitución en <%= con %>. Edición limitada primavera 2024.",
|
||||
"armorSpecialSummer2024WarriorNotes": "Tras transformarte en un auténtico guerrero tiburón ballena, ¡nada con valentía hacia tus objetivos! Aumenta tu Constitución en <%= con %>. Edición limitada de verano de 2024.",
|
||||
"armorSpecialSummer2024MageText": "Cola de anémona de mar",
|
||||
"armorSpecialFall2024RogueNotes": "Únete a la oscuridad y aumenta tu agilidad y sigilo con esta armadura. Aumenta la percepción en <%= per %>. Edición limitada de otoño de 2024.",
|
||||
"armorSpecialSpring2025WarriorText": "Armadura de sol",
|
||||
"armorSpecialSpring2025WarriorNotes": "Esta impresionante armadura luce colores que podrían verse en el cielo en pleno día soleado de primavera. Aumenta la Constitución en <%= con %>. Edición limitada de primavera de 2025.",
|
||||
"armorSpecialSpring2025RogueText": "Capa de punta de cristal",
|
||||
"armorSpecialSpring2025HealerText": "Túnicas de plumeria",
|
||||
"armorSpecialSpring2025HealerNotes": "Esta impresionante túnica contiene pétalos de plumeria suaves y vaporosos. Aumenta la Constitución en <%= con %>. Edición limitada primavera 2025.",
|
||||
"armorSpecialSpring2025MageText": "Uniforme de mantis",
|
||||
"armorSpecialSpring2025MageNotes": "Este impresionante uniforme luce colores llamativos y te permite acechar con sigilo tus tareas más difíciles. Aumenta tu inteligencia en <%= int %>. Edición limitada de primavera de 2025.",
|
||||
"weaponArmoireOrangeKiteText": "Cometa naranja",
|
||||
"weaponArmoirePinkKiteText": "Cometa rosa",
|
||||
"weaponArmoireBlueKiteText": "Cometa azul",
|
||||
"armorMystery202304Notes": "¡Aquí tienes tu mango y tu boquilla! No ofrece ningún beneficio. Artículo de suscriptor de abril de 2023.",
|
||||
"armorSpecialSummer2023WarriorText": "Armadura de pez dorado",
|
||||
"armorSpecialSummer2023WarriorNotes": "Los Guerreros Pez Dorado tienen una memoria excelente porque siempre mantienen sus Diarias y Tareas pendientes organizadas en listas. Aumenta la Constitución en <%= con %>. Edición limitada de verano de 2023.",
|
||||
"armorSpecialSummer2023HealerText": "Kirtle de algas marinas",
|
||||
"armorMystery202210Text": "Armadura ofidia siniestra",
|
||||
"weaponMystery202306Text": "Paraguas arco iris",
|
||||
"weaponMystery202306Notes": "Brilla con orgullo y lleva un resplandeciente prisma de color allá donde vayas. No confiere ningún beneficio. Artículo de suscriptor de junio de 2023.",
|
||||
"weaponArmoireHuntingHornText": "Cuerno de caza",
|
||||
"armorSpecialSummer2022WarriorText": "Armadura de tromba marina",
|
||||
"armorSpecialSummer2022WarriorNotes": "Prepárate para una batalla acuática rodeándote de esta columna de aire y niebla que gira y se arremolina. Aumenta tu Constitución en <%= con %>. Edición limitada de verano de 2022.",
|
||||
"armorSpecialSummer2022RogueText": "Armadura de cangrejo",
|
||||
"armorSpecialSummer2022RogueNotes": "Perfecto para un paseo informal por la playa. Aumenta la percepción en <%= per %>. Edición limitada de verano 2022.",
|
||||
"armorSpecialSpring2023WarriorText": "Armadura de colibrí",
|
||||
"weaponMystery202311Text": "Personal que todo lo ve",
|
||||
"weaponMystery202311Notes": "Ver más allá de los límites del espacio y el tiempo. No confiere ningún beneficio. Artículo de suscriptor de noviembre de 2023.",
|
||||
"weaponArmoireHuntingHornNotes": "¡Dos! ¡Dwoo! ¡Twoo! Reúne a tu grupo para una aventura o búsqueda tocando este cuerno. Aumenta la Fuerza en <%= str %> y la Inteligencia en <%= int %>. Armoire Enchanted: Musical Instrument Set 1 (Artículo 1 de 3)",
|
||||
"weaponArmoireGreenKiteText": "Cometa Verde",
|
||||
"weaponArmoireOrangeKiteNotes": "Con colores como el amanecer y el atardecer, ¡veamos lo alto que puede llegar tu cometa! Aumenta todas las estadísticas en <%= attrs %> cada una. Armario encantado: Juego de cometas (objeto 3 de 5)",
|
||||
"weaponArmoirePinkKiteNotes": "En picado, girando, volando alto, tu cometa destaca en el cielo. Aumenta todas las estadísticas en <%= attrs %> cada una. Armario encantado: Juego de cometas (objeto 4 de 5)",
|
||||
"weaponArmoireYellowKiteNotes": "Deslízate de un lado a otro con tu alegre cometa. Aumenta todas las estadísticas en <%= attrs %> cada una. Armario encantado: Juego de cometas (objeto 5 de 5)",
|
||||
"weaponArmoirePushBroomText": "Escoba de empuje",
|
||||
"weaponArmoireFeatherDusterText": "Plumero",
|
||||
"weaponArmoireFinelyCutGemText": "Gema finamente tallada",
|
||||
"weaponArmoireFinelyCutGemNotes": "¡Menudo hallazgo! Esta impresionante gema tallada con precisión será el premio de su colección. Y puede que contenga una magia especial, esperando a que la aproveches. Aumenta la Constitución en <%= con %>. Armario Encantado: Set de Joyero (Artículo 4 de 4).",
|
||||
"weaponArmoireMopNotes": "Paso 1: Sumerja la fregona en un cubo con agua y espuma. Paso 2: Arrastra la fregona por el suelo. Paso 3: Imagina que el extremo del mango de la fregona es un micrófono y canta con todas tus fuerzas. Paso 4: Repite los pasos 1-3 hasta que el suelo esté limpio. Aumenta la Constitución y la Percepción en <%= attrs %> cada una. Armoire Enchanted: Cleaning Supplies Set Two (Item 2 of 3)",
|
||||
"weaponArmoireRidingBroomText": "Escoba de equitación",
|
||||
"weaponArmoireRidingBroomNotes": "Haz todos tus recados más mágicos con esta escoba o, simplemente, llévala a pasear por el vecindario. ¡Vaya! Aumenta la Fuerza en <%= str %> y la Inteligencia en <%= int %>. Armario Encantado: Set de Hechicería Espeluznante (Artículo 1 de 3)",
|
||||
"weaponArmoireRollingPinText": "Rodillo",
|
||||
"weaponArmoireCleaningClothNotes": "Llévate esta herramienta de orden en tus aventuras y siempre podrás pulir una bonita placa o limpiar un alféizar de madera. Aumenta la Fuerza y la Constitución en <%= attrs %> cada una. Armario encantado: set dos de artículos de limpieza (unidad 3 de 3)",
|
||||
"weaponArmoireRollingPinNotes": "Enrolla tu pasta tan fina como quieras entre golpear malos hábitos cuando aparezcan a tu alrededor como cierto juego de golpear roedores. Aumenta la Fuerza en <%= str %>. Armario encantado: Set de utensilios de cocina 2 (objeto 2 de 2).",
|
||||
"armorSpecialHeroicTunicNotes": "Dicen que los héroes no deberían dormirse en los laureles, pero tú puedes descansar con esta prenda cómoda y a la moda. Aumenta todas las estadísticas en <%= attrs %>.",
|
||||
"weaponArmoireMagicSpatulaText": "Espátula mágica",
|
||||
"weaponArmoireMagicSpatulaNotes": "Observa cómo tu comida vuela y da vueltas en el aire. Tendrás suerte si por arte de magia vuelca tres veces y vuelve a caer sobre tu espátula. Aumenta la percepción en <%= por %>. Armoire Enchanted: Cooking Implements Set (Item 1 of 2).",
|
||||
"armorSpecialSpring2022RogueNotes": "Con un azul grisáceo metálico iridiscente y manchas más claras en las plumas, ¡serás el mejor compañero de vuelo en la fiesta de primavera! Aumenta la percepción en <%= per %>. Edición limitada de artículos de primavera 2022.",
|
||||
"armorSpecialSpring2022WarriorNotes": "Este impermeable y botas son tan formidables que podrías cantar bajo la lluvia o saltar en cada charco, ¡sin perder la calidez y la sequedad! Aumenta la constitución en <%= con %>. Edición limitada de primavera 2022.",
|
||||
"armorSpecialSpring2022MageText": "Túnica de forsitia",
|
||||
"armorSpecialSpring2022MageNotes": "Demuestra que estás lista para la primavera con esta bata adornada con pétalos de forsitia. Aumenta tu inteligencia en <%= int %>. Edición limitada de primavera 2022.",
|
||||
"armorSpecialSpring2022HealerNotes": "Ahuyenta miedos y pesadillas con esta prenda de gema verde. Aumenta la Constitución en <%= con %>. Edición limitada de primavera de 2022.",
|
||||
"armorSpecialSummer2022MageText": "Armadura de mantarrayas",
|
||||
"armorSpecialSummer2022MageNotes": "Con esta armadura, te deslizarás con facilidad por el trabajo como una mantarraya en el agua. Aumenta la inteligencia en <%= int %>. Edición limitada de verano de 2022.",
|
||||
"armorSpecialSummer2022HealerText": "Cola de pez ángel",
|
||||
"armorSpecialFall2022RogueText": "Armadura Kappa",
|
||||
"armorSpecialFall2022WarriorNotes": "¡Rawr! ¡Los hombros anchos significan que eres MUY FUERTE! Aumenta la Constitución en <%= con %>. Edición limitada de otoño de 2022.",
|
||||
"armorSpecialFall2022MageText": "Armadura de arpía",
|
||||
"armorSpecialFall2022MageNotes": "Vuela tan rápido como el viento con estas maravillosas alas y sujeta con fuerza lo que más quieres con estas aterradoras garras. Aumenta la inteligencia en <%= int %>. Edición limitada de otoño de 2022.",
|
||||
"armorSpecialSpring2023RogueNotes": "Puede que solo tengas cuatro extremidades, pero puedes trepar y arrastrarte con las larvas más grandes. Aumenta la Percepción en <%= per %>. Edición Limitada 2023, Equipo de Primavera.",
|
||||
"armorSpecialSpring2023WarriorNotes": "Ese zumbido que oyes es el aleteo de tus alas, que se acelera de lo imaginable. Aumenta tu Constitución en <%= con %>. Edición limitada de primavera de 2023.",
|
||||
"armorSpecialWinter2023RogueText": "Envoltura de cinta",
|
||||
"armorSpecialWinter2023WarriorText": "Traje de morsa",
|
||||
"armorSpecialWinter2023WarriorNotes": "Este resistente traje de morsa es perfecto para pasear por la playa en plena noche. Aumenta la Constitución en <%= con %>. Edición limitada 2022-2023.",
|
||||
"armorSpecialFall2022HealerNotes": "¿Cuántos peeps podría un Peeker, si un Peeker pudiera peeps? Aumenta la Constitución en <%= con %>. Edición limitada de otoño de 2022.",
|
||||
"armorSpecialWinter2023HealerNotes": "Este brillante traje cardenal es perfecto para superar tus problemas. Aumenta la Constitución en <%= con %>. Edición limitada 2022-2023.",
|
||||
"armorSpecialSpring2023MageText": "Traje de piedra lunar",
|
||||
"armorSpecialSpring2023HealerNotes": "Una explosión de gloria verde que te convertirá en la envidia del grupo. Aumenta la Constitución en <%= con %>. Edición limitada de primavera de 2023.",
|
||||
"armorSpecialSummer2023RogueNotes": "¡Arriba! ¡Abajo! ¡Demasiado lento! Aumenta la percepción en <%= per %>. Edición limitada de verano 2023.",
|
||||
"armorSpecialSummer2023MageText": "Túnicas de coral",
|
||||
"armorSpecialSummer2023MageNotes": "Siéntete protegida y cómoda con estas túnicas fluidas, con colores perfectos para tus aventuras submarinas. Aumenta tu inteligencia en <%= int %>. Edición limitada de verano 2023.",
|
||||
"armorSpecialSummer2023HealerNotes": "Mantén tus metas y convicciones firmes con este elegante vestido verde. Aumenta tu Constitución en un <%= con %>. Edición limitada de verano 2023.",
|
||||
"armorSpecialFall2023RogueText": "Caldero maldito",
|
||||
"armorSpecialFall2023RogueNotes": "Te atrajeron con la promesa de un buen baño caliente... ¡Te lo tomaste a mal! Aumenta la Percepción en <%= per %>. Edición Limitada de Otoño 2023.",
|
||||
"armorSpecialFall2023WarriorText": "Armadura del reproductor de vídeo",
|
||||
"armorSpecialFall2023WarriorNotes": "¿Reproduce DVD? ¿VHS? ¿Qué tipo de cables necesita para conectarlo al televisor? ¡Resulta que esta es la parte más aterradora! Aumenta la Constitución en <%= con %>. Edición limitada de verano 2023.",
|
||||
"armorSpecialFall2023MageText": "Túnica de brujo escarlata",
|
||||
"armorSpecialFall2023MageNotes": "Con hilos escarlata y detalles dorados, este atuendo es una maravilla para los sentidos. Aumenta la inteligencia en <%= int %>. Edición limitada de otoño de 2023.",
|
||||
"armorSpecialFall2023HealerText": "Cuerpo de criatura del pantano",
|
||||
"armorSpecialFall2023HealerNotes": "Con musgo, roca, madera y agua de pantano fusionados en uno, este atuendo a veces es resistente y a veces esponjoso (pero siempre intimidante). Aumenta la Constitución en <%= con %>. Edición limitada de otoño de 2023.",
|
||||
"armorMystery202204Text": "Cápsula de aventurero virtual",
|
||||
"armorArmoireHeraldsTunicNotes": "Prepárate para difundir buenas noticias por todas partes con este colorido atuendo real. Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto de Heraldo (Objeto 1 de 4).",
|
||||
"armorArmoireSoftBlackSuitText": "Traje negro suave",
|
||||
"armorArmoireSoftBlackSuitNotes": "El negro es un color misterioso. Sin duda, inspirará los sueños más fascinantes. Aumenta la Constitución y la Percepción en <%= attrs %> cada una. Armario Encantado: Conjunto de Ropa de Estar por Casa Negra (Artículo 2 de 3).",
|
||||
"armorArmoireShootingStarCostumeNotes": "Se rumorea que surgió del mismísimo cielo nocturno. Este vestido fluido te permite superar cualquier obstáculo en tu camino. Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto de Polvo de Estrellas (Artículo 2 de 3).",
|
||||
"armorArmoireSoftVioletSuitNotes": "El morado es un color lujoso. Relájate con estilo después de completar tus tareas diarias. Aumenta la Constitución y la Fuerza en <%= attrs %> cada una. Armario Encantado: Conjunto de Ropa de Estar Violeta (Artículo 2 de 3).",
|
||||
"armorArmoireGardenersOverallsNotes": "No tengas miedo de trabajar en la tierra con este resistente overol. Aumenta la Constitución en <%= con %>. Armario Encantado: Set de Jardinero (Artículo 1 de 4).",
|
||||
"armorArmoireStrawRaincoatNotes": "Esta capa de paja tejida te mantendrá seco y evitará que tu armadura se oxide durante tu misión. ¡Eso sí, no te acerques demasiado a una vela! Aumenta la Constitución en <%= con %>. Armario Encantado: Conjunto de Impermeable de Paja (Objeto 1 de 2).",
|
||||
"armorArmoireFancyPirateSuitText": "Chaqueta pirata elegante",
|
||||
"armorArmoireFancyPirateSuitNotes": "Lleva esta elegante chaqueta para organizar la biblioteca de tu barco o para hablar sobre ella con la tripulación. Aumenta la Constitución y la Inteligencia en <%= attrs %> cada una. Armario Encantado: Conjunto Pirata Elegante (Objeto 1 de 3).",
|
||||
"armorArmoireSheetGhostCostumeText": "Disfraz de fantasma de sábana",
|
||||
"armorArmoireStrawRaincoatText": "Chubasquero de paja",
|
||||
"armorArmoireSheetGhostCostumeNotes": "¡Buuu! Este es el disfraz más aterrador de Habitica, así que úsalo con cuidado... y ten cuidado al pisar para no tropezar. Aumenta la Constitución en <%= con %>. Armario Encantado: Objeto independiente.",
|
||||
"armorArmoireJewelersApronText": "Delantal de joyero",
|
||||
"armorArmoireJewelersApronNotes": "Este delantal resistente es ideal para usar cuando te sientes creativo. Lo mejor de todo es que tiene docenas de bolsillos pequeños para guardar todo lo que necesitas. Aumenta la inteligencia en <%= int %>. Armario Encantado: Conjunto de Joyero (Artículo 1 de 4).",
|
||||
"armorArmoireShawlCollarCoatText": "Abrigo con cuello chal",
|
||||
"armorArmoireShawlCollarCoatNotes": "Un mago sabio dijo una vez que no hay nada mejor que estar cómodo y ser productivo. Ponte este abrigo cálido y elegante para superar los desafíos del año. Aumenta la Constitución en <%= con %>. Armario Encantado: Objeto independiente.",
|
||||
"armorArmoireBagpipersKiltText": "Falda escocesa de gaitero",
|
||||
"weaponMystery202209Notes": "Este libro te guiará en tu viaje hacia la creación de magia. No confiere ningún beneficio. Artículo para suscriptores de septiembre de 2022.",
|
||||
"weaponArmoireBlueKiteNotes": "Navegando en lo alto del azul, ¿qué trucos puedes hacer con tu cometa? Aumenta todas las estadísticas en <%= attrs %> cada una. Armario encantado: Juego de cometas (objeto 1 de 5)",
|
||||
"weaponArmoireGreenKiteNotes": "Una cometa más impresionante que nunca, con sus tonos amarillos y verdes. Aumenta todas las estadísticas en <%= attrs %> cada una. Armario encantado: Juego de cometas (objeto 2 de 5)",
|
||||
"weaponArmoireYellowKiteText": "Milano amarillo",
|
||||
"armorSpecialSpring2023MageNotes": "Este elegante traje de primavera potencia la magia de la piedra lunar. Aumenta la inteligencia en <%= int %>. Edición limitada de primavera de 2023.",
|
||||
"armorSpecialSpring2023HealerText": "Vestido de hoja de lirio",
|
||||
"armorArmoireGardenersOverallsText": "Overol de jardinero",
|
||||
"weaponArmoirePushBroomNotes": "Llévate esta herramienta de limpieza a tus aventuras y siempre podrás barrer un escalón lleno de hollín o quitar las telarañas de los rincones. Aumenta la Fuerza y la Inteligencia en <%= attrs %> cada una. Armario encantado: Set de artículos de limpieza (Artículo 1 de 3)",
|
||||
"weaponArmoireFeatherDusterNotes": "Deja que estas elegantes plumas vuelen sobre todos tus objetos viejos para que brillen como nuevos. Ten cuidado con el polvo que levantan para no estornudar. Aumenta la Constitución y la Percepción en <%= attrs %> cada una. Armario encantado: set de artículos de limpieza (objeto 2 de 3)",
|
||||
"armorSpecialSummer2022HealerNotes": "Usa tus coloridas aletas para deslizarte por el arrecife y ayudar a quienes necesitan descansar y sanar. Aumenta tu Constitución en <%= con %>. Edición limitada de verano 2022.",
|
||||
"armorSpecialFall2022RogueNotes": "Ya sea que nades, te escabulles o luches, estarás seguro con esta armadura. Aumenta la percepción en <%= per %>. Edición limitada de otoño de 2022.",
|
||||
"armorSpecialFall2022WarriorText": "Armadura orca",
|
||||
"armorSpecialWinter2023RogueNotes": "Consigue objetos. Envuélvelos en papel bonito. ¡Y dáselo a tu pícaro local! La temporada lo exige. Aumenta la Percepción en <%= per %>. Edición limitada 2022-2023.",
|
||||
"armorSpecialWinter2023MageText": "Vestido de luz de hadas",
|
||||
"armorMystery202212Text": "Vestido Glacial",
|
||||
"armorMystery202212Notes": "El universo puede ser frío, pero este encantador vestido te mantendrá abrigado mientras vuelas. No aporta ningún beneficio. Artículo para suscriptores de diciembre de 2022.",
|
||||
"armorArmoireBagpipersKiltNotes": "Un buen kilt resistente te será muy útil. Aumenta la Constitución en <%= con %>. Armario encantado: Conjunto de gaitero (Objeto 2 de 3).",
|
||||
"weaponMystery202212Text": "Varita Glacial",
|
||||
"weaponMystery202212Notes": "El copo de nieve brillante de esta varita tiene el poder de calentar los corazones incluso en las noches más frías de invierno. No confiere ningún beneficio. Artículo para suscriptores de diciembre de 2022.",
|
||||
"armorSpecialHeroicTunicText": "Túnica heroica",
|
||||
"weaponArmoirePaintbrushText": "Pincel",
|
||||
"weaponArmoirePaintbrushNotes": "Cuando coges este pincel, te invade una oleada de pura inspiración que te permite pintar cualquier cosa que imagines. Aumenta la Inteligencia en <%= int %>. Armoire Encantado: Set de Pintor (Item 3 of 4).",
|
||||
"armorSpecialFall2022HealerText": "Profusión de cápsulas de peeker",
|
||||
"weaponArmoireMopText": "Mopa",
|
||||
"weaponArmoireCleaningClothText": "Paño de limpieza",
|
||||
"armorSpecialWinter2023MageNotes": "¡Que tengas luces encendidas no te convierte en un árbol! ...quizás otro año. Aumenta la inteligencia en <%= int %>. Edición limitada 2022-2023.",
|
||||
"armorSpecialWinter2023HealerText": "Traje cardenal",
|
||||
"armorSpecialSpring2023RogueText": "Capa de oruga",
|
||||
"armorMystery202112Notes": "Deslízate por mares helados y no pases frío con esta cola brillante. No aporta ningún beneficio. Artículo de suscripción de diciembre de 2021.",
|
||||
"armorMystery202204Notes": "¡Parece que ahora necesitas pulsar estos botones misteriosos para completar tus tareas! ¿Qué podrían hacer? No aportan ningún beneficio. Artículo para suscriptores de abril de 2022.",
|
||||
"armorMystery202207Text": "Armadura de gelatina Jammin'",
|
||||
"armorArmoireShootingStarCostumeText": "Vestido estrella",
|
||||
"armorMystery202307Text": "Los tentáculos del Kraken",
|
||||
"armorMystery202307Notes": "Las ventosas ofrecen la mejor tracción en el fondo marino y en los costados de barcos descarriados. No aportan ningún beneficio. Artículo de suscriptor de julio de 2023.",
|
||||
"weaponMystery202211Text": "Bastón de electromante",
|
||||
"weaponMystery202211Notes": "Aprovecha el impresionante poder de una tormenta eléctrica con este bastón. No otorga ningún beneficio. Artículo de suscriptor de noviembre de 2022.",
|
||||
"armorSpecialBirthday2023Notes": "¡Feliz cumpleaños, Habitica! Luce estas fabulosas batas de fiesta para celebrar este maravilloso día. No aporta ningún beneficio.",
|
||||
"armorSpecialSummer2023RogueText": "Envoltura de guppys",
|
||||
"armorMystery202110Text": "Armadura de gárgola musgosa",
|
||||
"armorMystery202110Notes": "El musgo aterciopelado te da una apariencia suave por fuera, pero estás protegido por una piedra sólida. No aporta ningún beneficio. Artículo de suscriptor de octubre de 2021.",
|
||||
"armorMystery202207Notes": "Esta armadura te hará lucir glamurosa y gelatinosa. No ofrece ningún beneficio. Artículo de suscriptor de julio de 2022.",
|
||||
"armorMystery202210Notes": "Prueba a deslizarte para variar; ¡quizás descubras que es un medio de transporte bastante eficiente! No aporta ningún beneficio. Artículo para suscriptores de octubre de 2022.",
|
||||
"armorMystery202304Text": "Armadura de tetera Tiptop",
|
||||
"armorMystery202306Text": "Parka arcoiris",
|
||||
"armorMystery202306Notes": "¡Nadie te va a amargar la fiesta! Y si lo intentan, ¡mantendrás la frescura y la sequedad! No ofrece ningún beneficio. Artículo para suscriptores de junio de 2023.",
|
||||
"armorMystery202310Text": "Túnica de espectro",
|
||||
"armorMystery202310Notes": "Una prenda fantasmal que se riza y se mueve con gracia mientras flotas entre los pantanos y páramos embrujados. No ofrece ningún beneficio. Artículo de suscriptor de octubre de 2023.",
|
||||
"armorArmoireHeraldsTunicText": "Túnica del heraldo"
|
||||
}
|
||||
|
||||
@@ -57,11 +57,11 @@
|
||||
"mountMasterText2": " y ha liberado todas sus 90 monturas un total de <%= count %> vez (o veces)",
|
||||
"triadBingoName": "Tríada de Bingo",
|
||||
"triadBingoText": "Ha encontrado las 90 mascotas, las 90 monturas, y todas las mascotas DE NUEVO (¡¿CÓMO LO HICISTE?!)",
|
||||
"triadBingoText2": " y ha liberado a su establo completo un total de <%= count %> vez (veces)",
|
||||
"triadBingoText2": " y ha liberado todas sus Mascotas y Monturas un total de <%= count %> vez(s)",
|
||||
"triadBingoAchievement": "¡Has ganado el logro \"Tríada de Bingo\" por encontrar todas las mascotas, domesticar todas las monturas y encontrar todas las mascotas de nuevo!",
|
||||
"hatchedPet": "¡Eclosionaste un/a <%= egg %> <%= potion %>!",
|
||||
"hatchedPetGeneric": "¡Has incubado una nueva mascota!",
|
||||
"hatchedPetHowToUse": "¡Visita el [Establo](<%= stableUrl %>) para alimentar y equipar tu nueva mascota!",
|
||||
"hatchedPetHowToUse": "Visita [Mascotas y monturas](<%= stableUrl %>) para alimentar y equipar a tu nueva mascota!",
|
||||
"petNotOwned": "No tienes esta mascota.",
|
||||
"mountNotOwned": "No tienes esta montura.",
|
||||
"feedPet": "¿Dar de comer <%= text %> a tu <%= name %>?",
|
||||
@@ -83,10 +83,10 @@
|
||||
"petsReleased": "Mascotas liberadas.",
|
||||
"mountsAndPetsReleased": "Monturas y mascotas liberadas",
|
||||
"mountsReleased": "Monturas liberadas",
|
||||
"welcomeStable": "¡Bienvenidos al Establo!",
|
||||
"welcomeStableText": "¡Bienvenido/a al establo! Soy Matt, el domador de bestias. Cada vez que completas una tarea, tendrás un chance aleatorio de recibir un Huevo o una Poción de Eclosión para incubar Mascotas. Cuando incubes una Mascota, ¡Aparecerá aquí! Haz clic en la imagen de una Mascota para añadirla a tu Personaje. Aliméntalas con la Comida para Mascotas que encuentres y se convertirán en fuertes Monturas.",
|
||||
"welcomeStable": "¡Bienvenidos a sus Mascotas y Monturas!",
|
||||
"welcomeStableText": "¡Bienvenidos al establo! Soy Matt, el amo de las bestias. Cada vez que completes una tarea, tendrás una oportunidad aleatoria de recibir un huevo o una poción para incubar mascotas. Cuando nazca una mascota, aparecerá aquí. Haz clic en la imagen de una mascota para añadirla a tu avatar. Aliméntala con la comida para mascotas que encuentres y se convertirá en una resistente montura.",
|
||||
"petLikeToEat": "¿Qué le gusta comer a mi mascota?",
|
||||
"petLikeToEatText": "Las Mascotas crecerán sin importar con qué las alimentes, pero crecerán más rápido si las alimentas con la Comida para Mascotas que más les gusta. Experimenta para encontrar el patrón, o encuentra las respuestas aquí: <br/><a href=\"https://habitica.fandom.com/es/wiki/Preferencias_de_Comida\" target=\"_blank\">https://habitica.fandom.com/es/wiki/Preferencias_de_Comida</a>",
|
||||
"petLikeToEatText": "Las mascotas crecerán sin importar qué les des de comer, pero crecerán más rápido si les das el alimento que más les gusta. Experimenta para descubrir el patrón o consulta las respuestas aquí:\n<a href=\"/static/faq#pet-foods\" target=\"_blank\">https://habitica.com/static/faq#pet-foods</a>",
|
||||
"filterByStandard": "Estándar",
|
||||
"filterByMagicPotion": "Poción Mágica",
|
||||
"filterByQuest": "Misión",
|
||||
@@ -111,5 +111,6 @@
|
||||
"invalidAmount": "Cantidad de comida inválida, debe ser un número entero positivo",
|
||||
"tooMuchFood": "Estás intentando darle demasiada comida a tu mascota, acción cancelada",
|
||||
"veteranCactus": "Cáctus Veterano",
|
||||
"veteranDragon": "Dragón Veterano"
|
||||
"veteranDragon": "Dragón Veterano",
|
||||
"jubilantGryphatrice": "Gryphatrice jubilosa"
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
{
|
||||
"questEvilSantaText": "Santa Trampero",
|
||||
"questEvilSantaNotes": "Escuchas rugidos agonizantes en lo profundo de los campos de hielo. Sigues los gruñidos (interrumpidos por carcajadas) hasta un claro en el bosque, donde ves una osa polar adulta. Está enjaulada y encadenada, luchando por su vida. Bailando encima de la jaula se encuentra un diablillo malicioso vestido de náufrago. Vence al Santa Trampero ¡y salva a la bestia! <br><br><strong>Nota</strong>: “Santa Trampero” otorga un logro de misión acumulable, pero da una montura rara que sólo puede ser agregada a tu establo una vez.",
|
||||
"questEvilSantaCompletion": "Santa Trampero chilla furioso y se adentra en la noche saltando. La osa agradecida intenta decirte algo mediante rugidos y gruñidos. La llevas de vuelta a los establos, donde Matt Boch, el Maestro de las Bestias, escucha su historia con un soplido de horror. ¡La osa tiene un cachorro! Éste escapó hacia los campos de hielo cuando mamá osa fue capturada.",
|
||||
"questEvilSantaNotes": "Escuchas rugidos lastimosos en las profundidades de los campos de hielo. Sigues los gruñidos - interrumpidos por carcajadas - hasta un claro en el bosque, donde ves una osa polar adulta. Está enjaulada y encadenada, luchando por su vida. Bailando encima de la jaula se encuentra un diablillo malicioso vestido como un náufrago. Vence a Santa Trampero ¡y salva a la bestia! <br><br><strong>Nota</strong>: “Santa Trampero ” premia una misión apilable además da una montura rara que solo puede ser agregada a tu establo una unica vez.",
|
||||
"questEvilSantaCompletion": "Trapper Santa chilla de rabia y se aleja hacia la noche. La osita agradecida, entre rugidos y gruñidos, intenta decirte algo. La llevas de vuelta a los establos, donde Matt Boch, el Amo de las Bestias, escucha su historia con un grito de horror. Tiene un cachorro. Huyó a los campos de hielo cuando mamá osa fue capturada.",
|
||||
"questEvilSantaBoss": "Santa Trampero",
|
||||
"questEvilSantaDropBearCubPolarMount": "Oso Polar (Montura)",
|
||||
"questEvilSanta2Text": "Encuentra al Cachorro",
|
||||
"questEvilSanta2Notes": "Cuando Santa Trampero capturó a la osa polar, su cachorro escapó hacia los campos de hielo. Escuchas el ruido de ramas rotas y el crujido de la nieve a través del sonido cristalino del bosque. ¡Huellas de oso! Comienzas a correr siguiendo el rastro. !Encuentra todas las huellas y las ramitas rotas, y rescata al cachorro! <br><br><strong>Nota</strong>: \"Encuentra al Cachorro\" premia una mission apilable pero da una mascota rara que solo se puede agregar a tu establo una vez.",
|
||||
"questEvilSanta2Notes": "Cuando Santa Trampero capturó a la osa polar, su cachorro escapó hacia los campos de hielo. Escuchas el ruido de ramas rotas y el crujido de la nieve a través del sonido cristalino del bosque. ¡Huellas de oso! Comienzas a correr siguiendo el rastro. Encuentra todas las huellas y las ramitas rotas, ¡y rescata al cachorro! <br><br><strong>Nota</strong>: \"Encuentra al Cachorro\" premia una mission apilable pero da una mascota rara que solo se puede agregar a tu establo una vez.",
|
||||
"questEvilSanta2Completion": "¡Has encontrado al cachorro! Te hará compañía por siempre.",
|
||||
"questEvilSanta2CollectTracks": "Huellas",
|
||||
"questEvilSanta2CollectBranches": "Ramitas rotas",
|
||||
@@ -15,19 +15,19 @@
|
||||
"questGryphonCompletion": "Derrotada, la poderosa bestia se escabulle avergonzada hacia su amo. \"¡Oh, bien hecho, aventureros!\" exclama <strong>baconsaur</strong>. \"Por favor, tomen algunos de los huevos de la grifo. ¡Estoy seguro de que criarán bien a estos pequeños!\"",
|
||||
"questGryphonBoss": "Grifo de Fuego",
|
||||
"questGryphonDropGryphonEgg": "Grifo (Huevo)",
|
||||
"questGryphonUnlockText": "Desbloquea Huevos de Grifo, para comprar en el Mercado",
|
||||
"questGryphonUnlockText": "Desbloquea huevos de Grifo, adquiribles en el Mercado",
|
||||
"questHedgehogText": "La Erizobestia",
|
||||
"questHedgehogNotes": "Los erizos son un grupo divertido de animales. Son algunas de las mascotas más cariñosas que un Habiticano podría tener. Pero se rumorea que si les das leche después de la medianoche, se vuelven bastante irritables. Y cincuenta veces su tamaño. Y <strong> InspectorCaracal </strong> hizo exactamente eso. Ups.",
|
||||
"questHedgehogCompletion": "¡Tu equipo ha conseguido calmar al erizo! Después de volver a su tamaño normal, se va cojeando hacia sus huevos. Vuelve chillando y empujando algunos de sus huevos hacia ustedes. ¡Esperemos que a estos erizos les guste más la leche!",
|
||||
"questHedgehogBoss": "Erizobestia",
|
||||
"questHedgehogDropHedgehogEgg": "Erizo (Huevo)",
|
||||
"questHedgehogUnlockText": "Desbloquea Huevos de Erizo para comprar en el Mercado",
|
||||
"questHedgehogUnlockText": "Desbloquea huevos de erizo adquiribles en el Mercado",
|
||||
"questGhostStagText": "El Espíritu de la Primavera",
|
||||
"questGhostStagNotes": "Ahh, primavera. La época del año cuando el color una vez más comienza a llenar el paisaje. Atrás quedaron los fríos, montículos nevados de invierno. Donde una vez estuvo la helada, la vida vegetal vibrante toma su lugar. Exuberantes hojas verdes llenan los árboles, la hierba vuelve a su antiguo tono vívido, un arco iris de flores se eleva a lo largo de las llanuras, ¡y una niebla blanca mística cubre la tierra! ... Espera. Niebla mística? \"Oh, no\", dice el <strong> Inspector Caracal </strong> con aprensión, \"Parece que algún tipo de espíritu es la causa de esta niebla. Ah, y se está cargando directamente hacia ti.\"",
|
||||
"questGhostStagCompletion": "El espíritu, aparentemente ileso, baja su nariz hasta el suelo. Una voz tranquilizante envuelve a tu grupo. \"Pido disculpas por mi comportamiento. Es sólo que acabo de despertar de mi sueño, y al parecer mi buen juicio no ha vuelto completamente. Por favor tomen esto como una muestra de mi disculpa\". Un racimo de huevos se materializa sobre el pasto frente al espíritu. Sin decir una palabra, el espíritu se escapa hacia el bosque dejando caer flores a su paso.",
|
||||
"questGhostStagBoss": "Ciervo Fantasma",
|
||||
"questGhostStagDropDeerEgg": "Ciervo (Huevo)",
|
||||
"questGhostStagUnlockText": "Desbloquea Huevos de Ciervo para comprar en el Mercado",
|
||||
"questGhostStagUnlockText": "Desbloquea Huevos de Ciervo adquiribles en el Mercado",
|
||||
"questRatText": "El Rey de las Ratas",
|
||||
"questRatNotes": "¡Basura! Pilas masivas de Diarias sin marcar yacen por toda Habitica. El problema se ha vuelto tan grave que ahora se ven hordas de ratas por todas partes. Ves que @Pandah acaricia a una de las bestias con amor. Ella explica que las ratas son criaturas apacibles que se alimentan de las Diarias sin marcar. El verdadero problema es que las Diarias han caído en las alcantarillas, creando un pozo peligroso que se debe despejar. Al descender a las cloacas, una rata enorme con ojos rojos y dientes amarillos destrozados te ataca, defendiendo su horda. ¿Vas a encogerte de miedo o enfrentarás al legendario Rey de las Ratas?",
|
||||
"questRatCompletion": "Tu último golpe debilita a la gigantesca rata, haciendo que sus ojos cambien a un gris apagado. La bestia se divide en varias ratas pequeñas que salen huyendo de miedo. Ves que @Pandah está de pie detrás de ti, observando a lo que alguna vez fue una poderosa criatura. Ella explica que los ciudadanos de Habitica han sido inspirados por tu valentía y están completando rápidamente sus Diarias. Te advierte que debemos ser vigilantes, porque si bajamos la guardia el Rey de las ratas regresará. Como pago, @Pandah te ofrece varios huevos de rata. Al ver tu expresión de incomodidad, sonríe y te dice: \"Son maravillosas mascotas.\"",
|
||||
@@ -75,7 +75,7 @@
|
||||
"questVice3Boss": "Vicio, el Guiverno de las Sombras",
|
||||
"questVice3DropWeaponSpecial2": "La Vara del Dragón de Stephen Weber",
|
||||
"questVice3DropDragonEgg": "Dragón (Huevo)",
|
||||
"questVice3DropShadeHatchingPotion": "Poción de Eclosión de Sombra",
|
||||
"questVice3DropShadeHatchingPotion": "Poción eclosionadora de Sombra",
|
||||
"questGroupMoonstone": "El Surgimiento de Reincidencia",
|
||||
"questMoonstone1Text": "Reincidencia, Parte 1: La Cadena de Piedra Lunar",
|
||||
"questMoonstone1Notes": "Una terrible aflicción ha golpeado a los Habiticanos. Malos Hábitos que se creían muertos hace tiempo se han levantado de nuevo en venganza. Los platos se encuentran sin lavar, los libros de texto permanecen sin leer, ¡Y la procrastinación corre sin nadie que la detenga!<br><br>Sigues el rastro de algunos de tus propios Malos Hábitos a las Ciénagas del Estancamiento y descubres a la culpable: el fantasmal Necromante, Reincidencia. Te lanzas a atacarla, pero tus armas atraviesan su cuerpo espectral inútilmente.<br><br>\"No te molestes,\" susurra con un tono áspero y seco. \"Sin una cadena de piedras lunares, nada puede hacerme daño – ¡Y el maestro joyero @aurakami dispersó todas las piedras lunares a través de Habitica hace mucho tiempo!\" Jadeante, te retiras... pero sabes qué es lo que debes hacer.",
|
||||
@@ -92,7 +92,7 @@
|
||||
"questMoonstone3Completion": "Respiras difícilmente y el sudor hace que ardan tus ojos mientras el Guiverno colapsa. Los restos de Reincidencia se desvanecen formando una fina bruma gris que desaparece rápidamente bajo la ráfaga de una refrescante brisa, y escuchas en la distancia los gritos de multitudes de Habiticanos derrotando a sus Malos Hábitos de una vez por todas.<br><br>@Baconsaur, el maestro de las bestias, se abalanza montado en un grifo. \"Vi el final de tu batalla desde el cielo, y fue increíblemente conmovedora. Por favor, toma esta túnica encantada – tu valentía habla de un noble corazón, y creo que estabas destinado a tenerla.\"",
|
||||
"questMoonstone3Boss": "Necro-Vicio",
|
||||
"questMoonstone3DropRottenMeat": "Carne Podrida (Comida)",
|
||||
"questMoonstone3DropZombiePotion": "Poción de Eclosión Zombi",
|
||||
"questMoonstone3DropZombiePotion": "Poción de eclosión Zombi",
|
||||
"questGroupGoldenknight": "La Caballera Dorada",
|
||||
"questGoldenknight1Text": "La Caballera Dorada, Parte 1: Un Regaño Severo",
|
||||
"questGoldenknight1Notes": "La Caballera Dorada ha estado molestando a los pobres Habiticanos. ¿No cumpliste todas tus Diarias? ¿Marcaste un Hábito negativo? Ella usará estas cosas como razón para acosarte y decirte que tienes que seguir su ejemplo. Ella es el ejemplo brillante de un Habiticano perfecto y tú no eres más que un fracaso. Bueno, ¡eso no es nada amable! Todos cometen errores, y no deberían enfrentar tanta negatividad por ello. ¡Tal vez sea hora de reunir unos cuantos testimonios de Habiticanos ofendidos y darle a la Caballera Dorada un regaño severo!",
|
||||
@@ -100,7 +100,7 @@
|
||||
"questGoldenknight1Completion": "¡Mira todos estos testimonios! Seguramente esto será suficiente para convencer a la Caballera Dorada. Ahora todo lo que tienes que hacer es encontrarla.",
|
||||
"questGoldenknight1DropGoldenknight2Quest": "La Caballera Dorada Parte 2: Caballera de Oro (Pergamino)",
|
||||
"questGoldenknight2Text": "La Caballera Dorada, Parte 2: Caballera de Oro",
|
||||
"questGoldenknight2Notes": "Armado con docenas de testimonios de Habiticanos, finalmente te enfrentas a la Caballera Dorada. Comienzas a recitar las quejas de los Habitcanos hacia ella, una por una. \"Y @Pfeffernusse dice que tu alardeo constante...-\" La caballera levanta su mano para silenciarte y se burla, \"Por favor, estas personas sólo están celosas de mi éxito. ¡En lugar de quejarse, simplemente deberían trabajar tan duro como yo! ¡Tal vez deba mostrarte el poder que puedes alcanzar con diligencia como la mía! \" Dicho esto, ¡levanta su lucero del alba y se prepara para atacarte!",
|
||||
"questGoldenknight2Notes": "Armado con docenas de testimonios de Habiticanos, finalmente te enfrentas al Caballero Dorado. Comienzas a recitar las quejas de los Habitcanos a ella, una por una. \"Y @Pfeffernusse dice que estás presumiendo constantemente-\" El caballero levanta su mano para silenciarte y se burla, \"Por favor, estas personas simplemente están celosas de mi éxito. En lugar de quejarse, ¡simplemente deberían trabajar tan duro como yo! le mostraré el poder que puede alcanzar a través de la diligencia como la mía! \" ¡Ella levanta su morningstar y se prepara para atacarte!",
|
||||
"questGoldenknight2Boss": "Caballera de Oro",
|
||||
"questGoldenknight2Completion": "La Caballera Dorada baja su Lucero del Alba, consternada. \"Me disculpo por mi estallido de ira\", dice. \"Lo cierto es que es doloroso pensar que he lastimado a otros sin darme cuenta, y eso me hizo desquitarme en defensa... pero ¿tal vez aún puedo disculparme?\"",
|
||||
"questGoldenknight2DropGoldenknight3Quest": "La Caballera Dorada Parte 3: El Caballero de Hierro (Pergamino)",
|
||||
@@ -109,7 +109,7 @@
|
||||
"questGoldenknight3Completion": "Con un satisfactorio sonido metálico, el Caballero de Hierro cae de rodillas y se desploma. \"Eres bastante fuerte\", jadea. \"Hoy he sido humillado\". La Caballera de Oro se acerca a ti y dice: \"Gracias. Creo que hemos ganado algo de humildad al enfrentarnos contigo. Hablaré con mi padre y le explicaré las quejas sobre nosotros. Quizás deberíamos empezar por disculparnos con los otros Habiticanos\". Se detiene a pensar por un momento antes de volverse nuevamente hacia ti. \"Toma: como obsequio, quiero que te quedes con mi lucero del alba. Es tuyo ahora.\"",
|
||||
"questGoldenknight3Boss": "El Caballero de Hierro",
|
||||
"questGoldenknight3DropHoney": "Miel (Comida)",
|
||||
"questGoldenknight3DropGoldenPotion": "Poción de Eclosión Dorada",
|
||||
"questGoldenknight3DropGoldenPotion": "Poción eclosionadora de Oro",
|
||||
"questGoldenknight3DropWeapon": "Lucero del Alba Pulverizador de Hitos de Mustaine (Arma de Mano Secundaria)",
|
||||
"questGroupEarnable": "Misiones Adquiribles",
|
||||
"questBasilistText": "La Basi-Lista",
|
||||
@@ -153,7 +153,7 @@
|
||||
"questAtom3Notes": "Justo cuando creíste que tus pruebas habían terminado, el lago Lavado comienza a espumar violentamente. \"¡¿CÓMO TE ATREVES?!\" retumba una voz debajo de la superficie. Una figura azul con una túnica emerge del agua, esgrimiendo un cepillo mágico para el inodoro. Ropa sucia empieza a flotar a la superficie del lago. \"¡Soy el Lavadomante!\", anuncia enojado. \"Eres descarado, lavando mis encantadores platos sucios, destruyendo mi mascota y entrando a mis dominios con esa ropa limpia. ¡Prepárate para sentir la ira pastosa de mi magia anti-lavadora!\"",
|
||||
"questAtom3Completion": "¡El malvado Lavandomante ha sido vencido! Ropa limpia cae en pilas a tu alrededor. Las cosas se ven mucho mejor por aquí. Mientras comienzas a vadear entre la armadura recién planchada, un centelleo metálico llama tu atención, y tu mirada cae sobre un yelmo resplandeciente. El dueño original de este objeto radiante puede ser desconocido, pero al ponértelo sientes la presencia alentadora de un espíritu generoso. Lástima que no le cosió sus iniciales.",
|
||||
"questAtom3Boss": "El Lavandomante",
|
||||
"questAtom3DropPotion": "Poción de eclosión Básica",
|
||||
"questAtom3DropPotion": "Base Hatching Potion",
|
||||
"questOwlText": "El Búho Nocturno",
|
||||
"questOwlNotes": "La luz de la Taberna queda encendida hasta el amanecer<br>¡Hasta que una tarde su brillo comienza a desaparecer!<br>¿Cómo podremos ver en la noche oscura?<br>@Twitching grita, \"¡Necesito guerreros que luchen con premura!<br>¿Ven a ese Búho Nocturno por las estrellas iluminado?<br>¡Peleen con valentía hasta que sea derrotado!<br>A su sombra de nuestra puerta alejaremos,<br>¡y una vez más la noche brillar haremos!\"",
|
||||
"questOwlCompletion": "El Búho Nocturno se desvanece antes del amanecer,<br>Pero aún así, sientes un bostezo emerger.<br>Quizás sea el momento de tomarse un descanso bien merecido.<br>Sin embargo, cuando llegas a tu cama, ¡encuentras un nido!<br>Un Búho Nocturno sabe que no es mala idea<br>Quedarse despierto hasta tarde y terminar una tarea,<br>Pero a tus nuevas mascotas piar podrás oír<br>Porque estarán intentando decirte que es tiempo de dormir.",
|
||||
@@ -161,7 +161,7 @@
|
||||
"questOwlDropOwlEgg": "Búho (Huevo)",
|
||||
"questOwlUnlockText": "Desbloquea Huevos de Buho para comprar en el Mercado",
|
||||
"questPenguinText": "Un Ave Álgida",
|
||||
"questPenguinNotes": "Aunque es un caluroso día de verano en el sur de Habitica, un extraño frío ha caído sobre el Lago Animado. Vientos helados y fuertes soplan mientras la orilla del lago empieza a congelarse. Pinchos de hielo salen del suelo, desplazando al pasto y la tierra. @Melynnrose y @Breadstrings corren hacia ti.<br><br>\"¡Auxilio!\" dice @Melynnrose. \"Trajimos un pingüino gigante para congelar el lago para que pudiéramos patinar sobre hielo, ¡Pero ya nos quedamos sin pescado para darle de comer!\"<br><br>\"¡El pingüino se enojó y está usando su aliento helado para congelar todo lo que ve!\" dice @Breadstrings. \"Por favor, ¡tienes que vencerlo antes de que todos terminemos cubiertos de hielo!\" Parece que necesitas que este pingüino se... <em>enfríe.</em>",
|
||||
"questPenguinNotes": "Aunque es un caluroso día de verano en el sur de Habitica, un extraño frío ha caído sobre el Lago Alegre. Vientos helados y fuertes soplan mientras la orilla del lago empieza a congelarse. Pinchos de hielo salen del suelo, desplazando al pasto y la tierra. @Melynnrose y @Breadstrings corren hacia ti.<br><br>\"¡Auxilio!\" dice @Melynnrose. \"Trajimos un pingüino gigante para congelar el lago para que pudiéramos patinar sobre hielo, ¡pero ya nos quedamos sin pescado para darle de comer!\"<br><br>\"¡El pingüino se enojó y está usando su aliento helado para congelar todo lo que ve!\" dice @Breadstrings. \"Por favor, ¡tienes que vencerlo antes de que todos terminemos cubiertos de hielo!\" Parece que necesitas que este pingüino se... <em>enfríe.</em>",
|
||||
"questPenguinCompletion": "Al vencer al pingüino, el hielo se derrite. El pingüino gigante se relaja bajo el sol, comiendo de una cubeta de pescado que encontraste por ahí. Al terminar, se va patinando a través del lago, soplando suavemente para crear una superficie de hielo lisa y brillante. ¡Qué ave tan rara! \"Parece que también ha dejado algunos huevos,\" dice @Painter de Cluster. <br><br>@Rattify ríe. \"Tal vez estos pingüinos sean un poco más... ¿cool?\"",
|
||||
"questPenguinBoss": "Pingüino Álgido",
|
||||
"questPenguinDropPenguinEgg": "Pingüino (Huevo)",
|
||||
@@ -207,8 +207,8 @@
|
||||
"questSlimeText": "La Jalea Regente",
|
||||
"questSlimeNotes": "Mientras te ocupas de tus tareas, te das cuenta de que te estás moviendo más y más lento. \"Es como caminar a través de melaza,\" se queja @Leephon. \"¡No, como atravesar jalea!\" dice @starsystemic. \"Esa babosa Jalea Regente ha untado su sustancia por toda Habitica. Está arruinando los trabajos. Todo el mundo se está volviendo más lento.\" Tú miras alrededor. Las calles se están llenando de a poco con un cieno claro y colorido, y los Habiticanos están luchando para poder terminar algo. Mientras otros huyen del área, ¡tú agarras un trapeador y te preparas para la batalla!",
|
||||
"questSlimeBoss": "Jalea Regente",
|
||||
"questSlimeCompletion": "Con un golpe final, atrapas a la Jalea Regente en una dona demasiado grande que te fue alcanzada por @Overomega, @LordDarkly y @Shaner, los líderes con reflejos rápidos del club de pastelería. Mientras todos te dan palmadas en la espalda, sientes a alguien poner discretamente algo en tu bolsillo. Es la recompensa por tu dulce éxito: tres huevos de Baba de Malvavisco.",
|
||||
"questSlimeDropSlimeEgg": "Baba de Malvavisco (Huevo)",
|
||||
"questSlimeCompletion": "Con un golpe final, atrapas a la Jalea Regente en una dona demasiado grande que te fue alcanzada por @Overomega, @LordDarkly y @Shaner, los líderes con reflejos rápidos del club de pastelería. Mientras todos te dan palmadas en la espalda, sientes a alguien poner discretamente algo en tu bolsillo. Es la recompensa por tu dulce éxito: tres huevos de Limo de Malvavisco.",
|
||||
"questSlimeDropSlimeEgg": "Limo de Malvavisco (Huevo)",
|
||||
"questSlimeUnlockText": "Desbloquea Huevos de Baba de Malvavisco para comprar en el Mercado",
|
||||
"questSheepText": "El Carnero del Trueno",
|
||||
"questSheepNotes": "Mientras deambulas por las campiñas de Taskan con tus amigos, tomando un \"corto descanso\" de tus obligaciones, encuentras una acogedora tienda de estambre. Estás tan sumergido en tu procrastinación que apenas te das cuenta de las siniestras nubes que cubren el cielo. \"Tengo un ma-a-a-al presentimiento de este clima\", murmura @Misceo, y tú miras hacia arriba. Las tempestuosas nubes se arremolinan y se parecen mucho a un... \"¡No tenemos tiempo para mirar nubes!\" grita @starsystemic. \"¡Está atacando!\" ¡El Carnero del Trueno se abalanza, lanzando rayos hacia ti!",
|
||||
@@ -220,7 +220,7 @@
|
||||
"questKrakenNotes": "Es un día cálido y soleado mientras navegas a través de la Bahía Inkompleta, pero tus pensamientos están llenos de preocupaciones sobre todo lo que aún te queda por hacer. Pareciera que apenas terminas una tarea, otra brota de la nada, y luego otra...<br><br>De pronto el bote da una horrible sacudida, ¡y tentáculos babosos emergen del agua por todas partes! \"¡Estamos siendo atacados por el Kraken de Inkompleta!\" grita Wolvenhalo.<br><br>\"¡Rápido!\" te llama Lemoness. \"¡Derriba la mayor cantidad de tentáculos que puedas antes de que otros se alzen y tomen su lugar!\"",
|
||||
"questKrakenBoss": "El Kraken de Inkompleta",
|
||||
"questKrakenCompletion": "Mientras el Kraken huye, varios huevos flotan hacia la superficie del agua. Lemoness los examina, y su recelo se transforma en placer. \"¡Huevos de Sepia!\" dice. \"Aquí tienes, tómalos como recompensa por todo lo que has completado.\"",
|
||||
"questKrakenDropCuttlefishEgg": "Sepia (Huevo)",
|
||||
"questKrakenDropCuttlefishEgg": "Calamar (Huevo)",
|
||||
"questKrakenUnlockText": "Desbloquea Huevos de Sepia para comprar en el Mercado",
|
||||
"questWhaleText": "El Llanto de la Ballena",
|
||||
"questWhaleNotes": "Llegas a los Muelles Diligentes, esperando abordar un submarino para ver el Derby de Dilatoria. De pronto, un bramido ensordecedor te obliga a detenerte y tapar tus oídos. \"¡Por allí resopla!\" grita el Capitán @krazjega, señalando a una enorme ballena que se lamenta. \"¡No es seguro enviar a los submarinos mientras ella está dando vueltas!\"<br><br>\"Rápido,\" dice @UncommonCriminal. \"¡Ayúdenme a calmar a esta pobre criatura así podemos averiguar por qué está haciendo todo este ruido!\"",
|
||||
@@ -242,7 +242,7 @@
|
||||
"questDilatoryDistress2RageTitle": "Regeneración del Enjambre",
|
||||
"questDilatoryDistress2RageDescription": "Regeneración del Enjambre: Esta barra se llena cuando no completas tus Tareas Diarias. Cuando está llena, ¡el Enjambre de Calaveras Acuáticas curará el 30% de su salud restante!",
|
||||
"questDilatoryDistress2RageEffect": "`¡El Enjambre de Calaveras Acuáticas usa REGENERACIÓN DE ENJAMBRE!`\n\n¡Incentivadas por sus victorias, más calaveras salen de la grieta, fortaleciendo al enjambre!",
|
||||
"questDilatoryDistress2DropSkeletonPotion": "Poción de eclosión Esqueleto",
|
||||
"questDilatoryDistress2DropSkeletonPotion": "Poción de Eclosión Calavera",
|
||||
"questDilatoryDistress2DropCottonCandyBluePotion": "Poción de eclosión de Algodón de Azúcar Azul",
|
||||
"questDilatoryDistress2DropHeadgear": "Diadema de Coral de Fuego (Equipamiento para la cabeza)",
|
||||
"questDilatoryDistress3Text": "Desazón Dilatoria, Parte 3: Ninguna Simple Doncella",
|
||||
@@ -313,7 +313,7 @@
|
||||
"questSnailDropSnailEgg": "Caracol (Huevo)",
|
||||
"questSnailUnlockText": "Desbloquea Huevos de Caracol para comprar en el Mercado",
|
||||
"questBewilderText": "El Obnubilave",
|
||||
"questBewilderNotes": "La fiesta comienza como cualquier otra.<br><br>Los aperitivos son excelentes, la música es jovial, e incluso los elefantes danzantes se han vuelto normales. Los Habiticanos ríen y se divierten en medio de los centros de mesa florales desbordantes, felices de poder distraerse lejos de sus tareas más desagradables, y el Santo Inocente da vueltas entre ellos, mostrando con entusiasmo un truco entretenido por aquí y un ingenioso giro por allá.<br><br>Al tiempo que el reloj de la torre de Desconcertaire da la medianoche, el Santo Inocente se sube de un salto al escenario para dar un discurso.<br><br>\"¡Amigos! ¡Enemigos! ¡Conocidos tolerantes! Escuchen con atención.\" La multitud se ríe por lo bajo mientras orejas de animales brotan de sus cabezas, y todos posan con sus nuevos accesorios.<br><br>\"Como saben,\" el Inocente continúa, \"mis ilusiones confusas generalmente duran sólo un día. Pero estoy feliz de anunciar que he descubierto un atajo que nos garantizará diversión sin fin, sin tener que lidiar con el molesto peso de nuestras responsabilidades. Encantadores Habiticanos, conozcan a mi nuevo y mágico amigo... ¡el Obnubilave!\"<br><br>Lemoness palidece repentinamente, dejando caer sus aperitivos. \"¡Esperen! No confíen en--\"<br><br>Pero de forma súbita una neblina se vierte en la sala, brillante y densa, y se arremolina alrededor del Santo Inocente, fusionándose en forma de plumas nubosas y un cuello estirado. La multitud se queda sin palabras mientras una monstruosa ave aparece frente a ella, sus alas centelleando llenas de ilusiones. El ave deja escapar una horrible risa chirriante.<br><br>\"¡Ah, han pasado siglos desde que un Habiticano fue lo suficientemente tonto como para convocarme! Qué fabuloso se siente tener al fin una forma tangible.\"<br><br>Zumbando aterrorizadas, las abejas mágicas de Desconcertaire huyen de la ciudad flotante, que se alza en el cielo. Una por una, las radiantes flores primaverales se marchitan y desaparecen en una voluta de humo.<br><br>\"Mis queridos amigos, ¿por qué están tan asustados?\" cacarea el Obnubilave, agitando sus alas. \"Ya no hay necesidad de trabajar duro para conseguir recompensas. ¡Yo les daré todas las cosas que desean!\"<br><br>Una lluvia de monedas cae del cielo, golpeando el suelo con una fuerza brutal, y la muchedumbre grita y corre a buscar refugio. \"¿Esto es una broma?\" aúlla Baconsaur, mientras el oro rompe ventanas y destroza tejados.<br><br>PainterProphet se agacha al mismo tiempo que rayos restallan por encima suyo y una niebla bloquea el sol. \"¡No! ¡Esta vez, no creo que lo sea!\"<br><br>Rápido, Habiticanos, ¡no dejemos que este Jefe Global nos distraiga de nuestros objetivos! Manténganse enfocados en las tareas que deben completar para que podamos rescatar a Desconcertaire -- y, con suerte, a nosotros mismos.",
|
||||
"questBewilderNotes": "La fiesta comienza como cualquier otra.<br><br>Los aperitivos están excelentes, la música suena con ritmo, e incluso los elefantes bailarines se han vuelto rutina. Los Habiticanos ríen y saltan entre los desbordantes centros de mesa florales, felices de tener una distracción de sus tareas menos favoritas, mientras el April Fool gira entre ellos, proporcionando con entusiasmo un truco divertido aquí y un giro ingenioso allá.<br><br>Cuando el reloj de la torre de Mistiflying marca la medianoche, el April Fool salta al escenario para dar un discurso.<br><br>\"¡Amigos! ¡Enemigos! ¡Conocidos tolerantes! Denme sus oídos.\" La multitud se ríe mientras orejas de animales brotan de sus cabezas y posan con sus nuevos accesorios.<br><br>\"Como saben,\" continúa el Fool, \"mis confusas ilusiones usualmente solo duran un día. ¡Pero me complace anunciar que he descubierto un atajo que nos garantizará diversión sin fin, sin tener que lidiar con el molesto peso de nuestras responsabilidades. Encantadores Habiticanos, conozcan a mi nuevo amigo mágico... ¡el Be-Wilder!\"<br><br>Lemoness palidece repentinamente, dejando caer sus aperitivos. \"¡Espera! ¡No confíen--!\"<br><br>Pero de repente, niebla comienza a inundar la habitación, brillante y espesa, y se arremolina alrededor del April Fool, cohesionándose en plumas nubladas y un cuello que se alarga. La multitud está en shock mientras un monstruoso pájaro se despliega ante ellos, sus alas resplandecen con ilusiones. Suelta una horrible risa estridente.<br><br>\"¡Oh, ha pasado tanto tiempo desde que un Habiticano fue tan tonto como para invocarme! Qué maravilloso se siente, tener una forma tangible por fin.\"<br><br>Los zumbidos de terror se escuchan mientras las abejas mágicas de Mistiflying huyen de la ciudad flotante, que se desploma del cielo. Una por una, las brillantes flores de primavera se marchitan y desaparecen en el aire.<br><br>\"Mis queridos amigos, ¿por qué tan alarmados?\" canta el Be-Wilder, batiendo sus alas. \"No es necesario esforzarse por sus recompensas ya. ¡Solo les daré todo lo que deseen!\"<br><br>Una lluvia de monedas cae del cielo, golpeando el suelo con fuerza brutal, y la multitud grita y huye a cubrirse. \"¿Es esto una broma?\" grita Baconsaur, mientras el oro destroza ventanas y rompe tejas del techo.<br><br>PainterProphet se agacha mientras los rayos chisporrotean por encima, y la niebla tapa el sol. \"¡No! ¡Esta vez no creo que sea una broma!\"<br><br>¡Rápido, Habiticanos, no dejen que este World Boss nos distraiga de nuestros objetivos! Manténganse enfocados en las tareas que deben completar para que podamos rescatar a Mistiflying -- y, con suerte, a nosotros mismos.",
|
||||
"questBewilderCompletion": "<strong>¡El Obnubilave ha sido DERROTADO!</strong><br><br>¡Lo logramos! El Obnubilave deja escapar un aullido mientras se retuerce en el aire, perdiendo plumas que caen como gotas de lluvia. Lenta y gradualmente, se enrolla formando una nube de niebla centelleante. Mientras el sol recién despejado atraviesa la niebla, ésta es consumida por el calor, revelando las formas afortunadamente humanas de Bailey, Matt, Alex... y del mismísimo Santo Inocente.<br><br><strong>¡Desconcertaire ha sido salvada!</strong><br><br>El Santo Inocente tiene el suficiente remordimiento como para mostrarse avergonzado. \"Ah, hm,\" dice. \"Tal vez... me dejé llevar un poco.\"<br><br>La multitud murmura. Flores empapadas son arrastradas a las aceras. A la distancia, en alguna parte, un techo se derrumba con un ruido espectacular.<br><br>\"Eh, sí,\" dice el Santo Inocente. \"Lo que quise decir es que lo siento terriblemente.\" Deja salir un suspiro. \"Supongo que no todo en la vida puede ser diversión. No me haría daño enfocarme de vez en cuando. Quizás me adelante para la broma del año que viene.\"<br><br>Redphoenix tose exageradamente.<br><br>\"Quiero decir, ¡quizás me adelante para la limpieza general!\" dice el Santo Inocente. \"No hay nada que temer, pronto dejaré a Ciudad Hábito como nueva. Por suerte nadie me supera en el manejo de dos trapeadores al mismo tiempo.\"<br><br>Animada, la banda de música comienza a tocar.<br><br>No pasa mucho tiempo hasta que todo vuelve a la normalidad en Ciudad Hábito. Además, ahora que el Obnubilave se ha evaporado, las abejas mágicas de Desconcertaire vuelven a trabajar con un ritmo ajetreado, y pronto las flores brotan y la ciudad flota una vez más.<br><br>Mientras los Habiticanos abrazan a las peludas abejas mágicas, los ojos del Santo Inocente se iluminan. \"¡Ajá, se me ha ocurrido algo! ¿Por qué no se quedan con algunas de estas peluditas abejas como mascotas y monturas? Es un regalo que simboliza perfectamente el equilibrio entre el trabajo duro y las dulces recompensas, si me voy a poner aburrido y alegórico.\" El Inocente guiña. \"Además, ¡no tienen aguijones! Palabra de Inocente.\"",
|
||||
"questBewilderCompletionChat": "`¡El Obnubilave ha sido DERROTADO!`\n\n¡Lo logramos! El Obnubilave deja escapar un aullido mientras se retuerce en el aire, perdiendo plumas que caen como gotas de lluvia. Lenta y gradualmente, se enrolla formando una nube de niebla centelleante. Mientras el sol recién despejado atraviesa la niebla, ésta es consumida por el calor, revelando las formas afortunadamente humanas de Bailey, Matt, Alex... y del mismísimo Santo Inocente.\n\n`¡Desconcertaire ha sido salvada!`\n\nEl Santo Inocente tiene el suficiente remordimiento como para mostrarse avergonzado. \"Ah, hm,\" dice. \"Tal vez... me dejé llevar un poco.\"\n\nLa multitud murmura. Flores empapadas son arrastradas a las aceras. A la distancia, en alguna parte, un techo se derrumba con un ruido espectacular.\n\n\"Eh, sí,\" dice el Santo Inocente. \"Lo que quise decir es que lo siento terriblemente.\" Deja salir un suspiro. \"Supongo que no todo en la vida puede ser diversión. No me haría daño enfocarme de vez en cuando. Quizás me adelante para la broma del año que viene.\"\n\nRedphoenix tose exageradamente.\n\n\"Quiero decir, ¡quizás me adelante para la limpieza general!\" dice el Santo Inocente. \"No hay nada que temer, pronto dejaré a Ciudad Hábito como nueva. Por suerte nadie me supera en el manejo de dos trapeadores al mismo tiempo.\"\n\nAnimada, la banda de música comienza a tocar.\n\nNo pasa mucho tiempo hasta que todo vuelve a la normalidad en Ciudad Hábito. Además, ahora que el Obnubilave se ha evaporado, las abejas mágicas de Desconcertaire vuelven a trabajar con un ritmo ajetreado, y pronto las flores brotan y la ciudad flota una vez más.\n\nMientras los Habiticanos abrazan a las peludas abejas mágicas, los ojos del Santo Inocente se iluminan. \"¡Ajá, se me ha ocurrido algo! ¿Por qué no se quedan con algunas de estas peluditas abejas como mascotas y monturas? Es un regalo que simboliza perfectamente el equilibrio entre el trabajo duro y las dulces recompensas, si me voy a poner aburrido y alegórico.\" El Inocente guiña. \"Además, ¡no tienen aguijones! Palabra de Inocente.\"",
|
||||
"questBewilderBossRageTitle": "Ataque Engañador",
|
||||
@@ -340,7 +340,7 @@
|
||||
"questAxolotlCompletion": "Después de derrotar al Ajolote Mágico, te das cuenta de que has recuperado tu fuerza de voluntad por tu cuenta.<br><br>\"¿La fuerza de voluntad? ¿La regeneración? ¿Fue todo una ilusión?\" pregunta @Kiwibot.<br><br>\"La mayoría de la magia lo es\", contesta el Ajolote Mágico. \"Siento tanto haberlos engañado. Por favor acepten estos huevos como una disculpa. ¡Confío en que los criaran para usar su magia para hábitos buenos, y no para el mal!\"<br><br>@hazel40 y tú toman los huevos nuevos en una mano y se despiden con la otra mientras el Ajolote Mágico regresa al lago.",
|
||||
"questAxolotlBoss": "Ajolote Mágico",
|
||||
"questAxolotlDropAxolotlEgg": "Ajolote (Huevo)",
|
||||
"questAxolotlUnlockText": "Desbloquea Huevos de Ajolote para comprar en el Mercado",
|
||||
"questAxolotlUnlockText": "Desbloquea huevos de Ajolote adquiribles en el Mercado",
|
||||
"questAxolotlRageTitle": "Regeneración de Ajolote",
|
||||
"questAxolotlRageDescription": "Esta barra se va llenando cuando no completas tus Diarias. Cuando se llene completamente, ¡el Ajolote Mágico sanará 30% de su salud restante!",
|
||||
"questAxolotlRageEffect": "`¡El Ajolote Mágico usa REGENERACIÓN AJOLOTE!`\n\n`¡Una cortina de burbujas coloridas nubla al monstruo por un momento y, cuando se despeja, algunas de sus heridas han desaparecido!`",
|
||||
@@ -361,13 +361,13 @@
|
||||
"questCowCompletion": "Ordeñas tus buenos hábitos todo lo que puedes hasta que la vaca regresa a su forma original. La vaca te mira con sus lindos ojos cafés y te acerca tres huevos con un empujoncito.<br><br>@fuzzytrees se ríe y te da los huevos, \"De pronto todavía está muuutada si hay vaquitas en esos huevos. ¡Pero confío en que seguirás con tus buenos hábitos mientras los crías!\"",
|
||||
"questCowBoss": "Vaca Muutante",
|
||||
"questCowDropCowEgg": "Vaca (Huevo)",
|
||||
"questCowUnlockText": "Desbloquea Huevos de Vaca para comprar en el mercado",
|
||||
"questCowUnlockText": "Desbloquea Huevos de Vaca adquiribles en el mercado",
|
||||
"questBeetleText": "El ERROR CRÍTICO",
|
||||
"questBeetleNotes": "Algo anda mal en el dominio de Habitica. Las forjas de los Herreros se han extinguido y errores extraños están apareciendo en todas partes. Con un temblor ominoso, un insidioso enemigo sale retorciéndose de la tierra... ¡un BICHO CRÍTICO! Te preparas mientras infecta la tierra, y fallas empiezan a controlar a los Habitianos alrededor tuyo. @starsystemic grita, \"¡Necesitamos ayudar a los Herreros a controlar este Bicho!\" Parece que tendrás que hacer de esta plaga de los programadores tu prioridad número uno.",
|
||||
"questBeetleCompletion": "Con un ataque final, aplastas al BICHO CRÍTICO. @starsystemic y los Herreros se acercan corriendo, felices. \"¡No te puedo agradecer lo suficiente por destruir ese bicho! Toma, llévate estos.\" Te regalan tres huevos brillantes de escarabajo.Con suerte estos pequeños bichos crecerán para ayudar a Habitica, no para lastimarla.",
|
||||
"questBeetleBoss": "ERROR CRÍTICO",
|
||||
"questBeetleDropBeetleEgg": "Escarabajo (Huevo)",
|
||||
"questBeetleUnlockText": "Desbloquea Huevos de Escarabajo para comprar en el Mercado",
|
||||
"questBeetleUnlockText": "Desbloquea Huevos de Escarabajo adquiribles en el Mercado",
|
||||
"questGroupTaskwoodsTerror": "Terror en Bosquetareas",
|
||||
"questTaskwoodsTerror1Text": "Terror en Bosquetareas, Parte 1: El Resplandor en Bosquetareas",
|
||||
"questTaskwoodsTerror1Notes": "Nunca has visto a la Parca Alegre tan agitada. La soberana de los Campos Florecientes aterriza su montura de grifo esqueleto justo en el medio de Plaza Productividad y grita sin desmontar: \"¡Queridos Habitianos, necesitamos su ayuda! Algo está iniciando incendios en Bosquetareas, y aún no nos hemos recuperado completamente de nuestra batalla contra Burnout. Si no es detenido, ¡las llamas podrían envolver todos nuestros huertos salvajes y arbustos de bayas!\"<br><br>Te ofreces como voluntario rápidamente, y te apresuras a Bosquetareas. Mientras te arrastras al interior del bosque de fruta más grande de Habitica, repentinamente escuchas cacareos y voces entrecortadas de más adelante, y detectas el débil olor a humo. Poco después, ¡una horda de criaturas de calavera cacareando y en llamas pasa volando, mordiendo ramas y prendiendo fuego a las copas de los árboles!",
|
||||
@@ -376,8 +376,8 @@
|
||||
"questTaskwoodsTerror1RageTitle": "Regeneración del Enjambre",
|
||||
"questTaskwoodsTerror1RageDescription": "Regeneración del Enjambre: Esta barra se llena cuando no completas tus Tareas Diarias. Cuando está llena, ¡el Enjambre de Calaveras de Fuego curará el 30% de su salud restante!",
|
||||
"questTaskwoodsTerror1RageEffect": "`¡El Enjambre de Calaveras de Fuego usa REGENERACIÓN DEL ENJAMBRE!`\n\n¡Alentadas por sus victorias, más calaveras se arremolinan a tu alrededor en una llamarada!",
|
||||
"questTaskwoodsTerror1DropSkeletonPotion": "Poción de eclosión Esqueleto",
|
||||
"questTaskwoodsTerror1DropRedPotion": "Poción de Eclosión Roja",
|
||||
"questTaskwoodsTerror1DropSkeletonPotion": "Poción de Eclosión Calavera",
|
||||
"questTaskwoodsTerror1DropRedPotion": "Posión de eclosión roja",
|
||||
"questTaskwoodsTerror1DropHeadgear": "Turbante de Piromante (Equipamiento de cabeza)",
|
||||
"questTaskwoodsTerror2Text": "Terror en Bosquetareas, Parte 2: Encontrando las Hadas Florecientes",
|
||||
"questTaskwoodsTerror2Notes": "Habiendo luchado a través del enjambre de calaveras en llamas, llegas a un gran grupo de granjeros refugiados al borde del bosque. \"Su pueblo fue quemado por un espíritu otoñal renegado\" dice una voz familiar. Es @Kiwibot, ¡el rastreador legendario! \"Logré reunir a los sobrevivientes, pero no hay señal de las Hadas Florecientes que ayudan a crecer la fruta silvestre de Bosquetareas. Por favor, ¡tienes que ayudarme a rescatarlas!\"",
|
||||
@@ -397,7 +397,7 @@
|
||||
"questFerretCompletion": "Derrotas al estafador de pelaje suave y @UncommonCriminal devuelve el dinero a la multitud. Incluso queda un poco de dinero para ti. Además, ¡parece que el Hurón Nefario dejó caer algunos huevos en su prisa por huir!",
|
||||
"questFerretBoss": "Hurón Nefario",
|
||||
"questFerretDropFerretEgg": "Hurón (Huevo)",
|
||||
"questFerretUnlockText": "Desbloquea Huevos de Hurón para comprar en el Mercado",
|
||||
"questFerretUnlockText": "Desbloquea Huevos de Hurón adquiribles en el Mercado",
|
||||
"questDustBunniesText": "Los Conejos de Polvo Salvajes",
|
||||
"questDustBunniesNotes": "Ha pasado un rato desde la última vez que limpiaste aquí, pero no estás muy preocupado; un poco de polvo nunca hizo daño a nadie ¿cierto? No es hasta que metes la mano en uno de los rincones más polvorientos y sientes que algo te muerde que recuerdas la advertencia de @InspectorCaracal: ¡dejar acumulado el polvo inofensivo mucho tiempo hace que se convierta en feroces conejos de polvo! ¡Más vale que los derrotes antes de que cubran todo Habitica con finas partículas de mugre!",
|
||||
"questDustBunniesCompletion": "Los conejos de polvo se desvanecen en una nube de... bueno, polvo. Mientras desaparece, miras a tu alrededor. Habías olvidado lo lindo que se ve este lugar cuando está limpio. Encuentras una pequeña montaña de oro en donde antes estaba el polvo. ¡Ah, te estabas preguntando en dónde estaba eso!",
|
||||
@@ -423,13 +423,13 @@
|
||||
"questSlothCompletion": "¡Lo lograste! Al derrotar al Perezoso Somnoliento, sus esmeraldas se caen. \"Gracias por liberarme de mi maldición\", dice el perezoso. \"Finalmente puedo dormir bien, sin esas pesadas esmeraldas en mi espalda. Toma estos huevos como agradecimiento, y puedes quedarte con las esmeraldas también.\" El perezoso te da tres huevos de perezoso y se va a climas más cálidos.",
|
||||
"questSlothBoss": "Perezoso Somnoliento",
|
||||
"questSlothDropSlothEgg": "Perezoso (Huevo)",
|
||||
"questSlothUnlockText": "Desbloquea Huevos de Perezoso para comprar en el Mercado",
|
||||
"questSlothUnlockText": "Desbloquea Huevos de Perezoso adquiribles en el Mercado",
|
||||
"questTriceratopsText": "El Aplastante Triceratops",
|
||||
"questTriceratopsNotes": "Los Volcanes nevados de Stoïkalm siempre están rebosantes de excursionistas y visitantes. Un turista, @plumilla, llama a la multitud. \"¡Miren! ¡Encanté el suelo para que brille y así podamos jugar en él a las actividades de nuestras Tareas Diarias al aire libre!\" Efectivamente, el suelo está llenándose con patrones rojos brillantes. Incluso algunas de las mascotas prehistóricas del área se acercan para jugar.<br><br>De repente, se escucha un fuerte crujido -- ¡un Triceratops curioso ha pisado la varita de @plumilla! Este es envuelto en un estallido de energía mágica, y el suelo empieza a temblar y sacudirse. ¡Los ojos del Triceratops se tornan de rojo, ruge y empieza a salir en estampida!<br><br>\"Eso no es bueno,\" anuncia @McCoyly, apuntando a la distancia. ¡Cada pisada rebosante de magia está causando que los volcanes entren en erupción y el brillante suelo está volviéndose en lava debajo de los pies del dinosaurio! Rápido, debes contener al Aplastante Triceratops hasta que alguien pueda revertir el hechizo!",
|
||||
"questTriceratopsCompletion": "Pensando rápidamente, guías a la criatura hacia las calmantes Estepas de Stoïkalm para que @*~Seraphina~* y @PainterProphet puedan deshacer el hechizo de lava sin distracciones. El aura calmante de las Estepas hace efecto y el Triceratops se acurruca mientras los volcanes vuelven a quedar inactivos. @PainterProphet te pasa unos huevos que fueron rescatados de la lava. \"Sin ustedes, no habríamos podido concentrarnos para detener las erupciones. Den un buen hogar a estas mascotas.\"",
|
||||
"questTriceratopsBoss": "Aplastante Triceratops",
|
||||
"questTriceratopsDropTriceratopsEgg": "Triceratops (Huevo)",
|
||||
"questTriceratopsUnlockText": "Desbloquea Huevos de Triceratops para comprar en el Mercado",
|
||||
"questTriceratopsUnlockText": "Desbloquea Huevos de Triceratops adquiribles en el Mercado",
|
||||
"questGroupStoikalmCalamity": "Calamidad de Stoïkalm",
|
||||
"questStoikalmCalamity1Text": "Calamidad de Stoïkalm, Parte 1: Enemigos Terrosos",
|
||||
"questStoikalmCalamity1Notes": "Llega una breve misiva de @Kiwibot, y el pergamino cubierto de escarcha te hiela el corazón al igual que las yemas de tus dedos. \"Visitando las estepas de Stoïkalm -- monstruos brotando de la tierra -- ¡Envíen ayuda!\" Reúnes a tu equipo y cabalgan hacia el norte, pero tan pronto como se aventuran a bajar de las montañas, ¡la nieve bajo tus pies explota y te rodean calaveras repugnantemente sonrientes!<br><br>De repente, una lanza surca el cielo, enterrándose en una calavera que estaba escarbando a través de la nieve en un intento de atraparte desprevenido. Una mujer alta con una armadura finamente elaborada galopa hacia la contienda en el lomo de un mastodonte, su larga trenza se balancea mientras ella arranca la lanza sin miramientos de la bestia derrotada. ¡Es hora de luchar contra estos enemigos con la ayuda de Lady Glacial, la líder de los Jinetes de Mamut!",
|
||||
@@ -438,8 +438,8 @@
|
||||
"questStoikalmCalamity1RageTitle": "Regeneración del Enjambre",
|
||||
"questStoikalmCalamity1RageDescription": "Regeneración del Enjambre: Esta barra se llena cuando no completas tus Tareas Diarias. Cuando está llena, ¡el Enjambre de Calaveras Terrestres curará el 30% de su salud restante!",
|
||||
"questStoikalmCalamity1RageEffect": "`¡El Enjambre de Calaveras Terrestres usa REGENERACIÓN DEL ENJAMBRE!`\n\n¡Más calaveras salen de la tierra, con sus dientes castañeteando de frío!",
|
||||
"questStoikalmCalamity1DropSkeletonPotion": "Poción de Eclosión Esqueleto",
|
||||
"questStoikalmCalamity1DropDesertPotion": "Poción de Eclosión del Desierto",
|
||||
"questStoikalmCalamity1DropSkeletonPotion": "Poción de Eclosión Calavera",
|
||||
"questStoikalmCalamity1DropDesertPotion": "Posión de eclosión del desierto",
|
||||
"questStoikalmCalamity1DropArmor": "Armadura del Jinete de Mamut",
|
||||
"questStoikalmCalamity2Text": "Calamidad de Stoïkalm, Parte 2: Busca las Cavernas de Carámbanos",
|
||||
"questStoikalmCalamity2Notes": "La majestuosa sala de los Jinetes de Mamut es una austera obra maestra de arquitectura, pero además está completamente vacía. No hay muebles, las armas están perdidas, e incluso las columnas han sido limpiadas de sus incrustaciones.<br><br>\"Esas calaveras arrasaron el lugar,\" dice Lady Glacial, y hay una tormenta avecinándose en su tono. \"Humillante. Que ni un alma mencione esto al Santo Inocente, o nunca escucharé el final de esto.\"<br><br>\"¡Que misterioso!\" dice @Beffymaroo. \"¿Pero adónde--\"<br><br>\"Las cavernas del draco de carámbano.\" Lady Glacial gesticula hacia las monedas brillantes esparcidas en la nieve de afuera. \"Descuidado.\"<br><br>\"¿Pero los dracones no son criaturas honorables con sus propias reservas de tesoros?\" pregunta @Beffymaroo. \"¿Porqué podrían--\"<br><br>\"Control mental,\" dice Lady Glacial, sin inmutarse. \"O algo igualmente melodramático e inconveniente.\" Empieza a salir de la sala a grandes zancadas. \"¿Porqué solo están parados ahí?\"<br><br>Rápido, ¡Vamos a seguir el rastro de las Monedas del Carámbano!",
|
||||
@@ -458,28 +458,28 @@
|
||||
"questGuineaPigCompletion": "\"¡No sometemos!\" El Jefe de la Pandilla de Conejillos de Indias te agita con sus patas, con su cabeza esponjosa sacudiendo en señal de rendición. De debajo de su sombrero cae una lista, y @snazzyorange te la pasa rápidamente como evidencia. \"Espera un minuto,\" dices. \"¡No es de extrañarse que estabas recibiendo daño! Tienes demasiadas Tareas Diarias. Tú no necesitas pociones de salud -- solo necesitas ayuda para organizarte.\"<br><br>\"¿De verdad?\" chilla el Jefe de la Pandilla de Conejillos de Indias. \"¡Hemos robado a tantas personas por esto! Por favor toma estos huevos como una disculpa por nuestras torcidas acciones.\"",
|
||||
"questGuineaPigBoss": "Pandilla de Conejillos de Indias",
|
||||
"questGuineaPigDropGuineaPigEgg": "Conejillo de Indias (Huevo)",
|
||||
"questGuineaPigUnlockText": "Desbloquea Huevos de Conejillo de Indias para comprar en el Mercado",
|
||||
"questGuineaPigUnlockText": "Desbloquea Huevos de Conejillo de Indias adquiribles en el Mercado",
|
||||
"questPeacockText": "El Pavo Real del Tira y Afloja",
|
||||
"questPeacockNotes": "Caminas a través del Bosquetareas, preguntándote cual de los nuevos objetivos tentadores deberías escoger. Mientras te adentras al bosque, te das cuenta de que no estás solo en tu indecisión. \"Podría aprender un nuevo idioma, o ir al gimnasio...\" murmura @Cecily Perez. \"Podría dormir más,\" medita @Lilith of Alfheim, \"o pasar tiempo con mis amigos...\" Parece que @PainterProphet, @Pfeffernusse, y @Draayder están igualmente paralizados por las abrumadoras opciones.<br><br>Te das cuenta de que estos sentimientos cada vez más demandantes no son realmente tuyos... ¡Has tropezado directamente con la trampa del pernicioso Pavo Real del Tira y Afloja! Antes de que puedas correr, salta de los arbustos. Con cada una de las cabezas tirando de ti en direcciones contrarias, empiezas a sentir que el agotamiento te supera. No puedes derrotar a ambos enemigos a la vez, así que solo tienes una opción -- ¡concentrarse en la tarea más cercana para contraatacar!",
|
||||
"questPeacockCompletion": "El Pavo Real Tira-y-Afloja es sorprendido por tu repentina convicción. Derrotado por tu sólida determinación, sus cabezas se fusionan de nuevo en una sola, revelando la criatura más hermosa que has visto. \"Gracias\", dice el pavo real. \"He pasado tanto tiempo dispersándome en direcciones diferentes que perdí de vista lo que realmente quería. Por favor, acepta estos huevos como muestra de mi gratitud.\"",
|
||||
"questPeacockBoss": "Pavo Real del Tira y Afloja",
|
||||
"questPeacockDropPeacockEgg": "Pavo real (Huevo)",
|
||||
"questPeacockUnlockText": "Desbloquea Huevos de Pavo Real para comprar en el Mercado",
|
||||
"questPeacockUnlockText": "Desbloquea Huevos de Pavo real adquiribles en el Mercado",
|
||||
"questButterflyText": "Adios, Mariposa",
|
||||
"questButterflyNotes": "Tu amiga jardinera @Megan te envía una invitación: \"Estos días cálidos son el tiempo perfecto para visitar el jardín de mariposas de Habitica en las Campiñas de Taskan. ¡Ven a ver la migración de las mariposas!\" Cuando llegas, sin embargo, el jardín está destrozado -- poco más que hierba quemada y maleza seca. Ha hecho tanto calor que los Habiticanos no han salido a regar las flores, y las Tareas Diarias rojas más oscuras se han convertido en un seco, bronceado, peligro de incendio. Sólo hay una mariposa allí, y hay algo extraño en ella...<br><br>\"¡Oh no! Esta es la tierra perfecta para la eclosión de la Mariposa Llameante,\" grita @Leephon.<br><br>“¡Si no la atrapamos, destruirá todo!\" jadea @Eevachu.<br><br>¡Tiempo para decir adiós Mariposa!",
|
||||
"questButterflyCompletion": "Después de una fuerte batalla, la Mariposa Llameante es capturada. “Buen trabajo atrapando esa incendiaria en potencia” dice @Megan con un suspiro de alivio. “Aún así, es difícil afrentar incluso a la mariposa más vil. Deberíamos soltar esta Mariposa en un lugar seguro…como el desierto.”<br><br>Uno de los otros jardineros, @Beffymaroo, se te acerca, quemado pero sonriente. “¿Nos ayudas a criar a las crisálidas abandonadas que encontramos? Tal vez el año que viene tengamos un jardín más verde para ellas.\"",
|
||||
"questButterflyBoss": "Mariposa Llameante",
|
||||
"questButterflyBoss": "Mariposa Flameante",
|
||||
"questButterflyDropButterflyEgg": "Oruga (Huevo)",
|
||||
"questButterflyUnlockText": "Desbloquea Huevos de Oruga para comprar en el Mercado",
|
||||
"questButterflyUnlockText": "Desbloquea Huevos de Oruga adquiribles en el Mercado",
|
||||
"questGroupMayhemMistiflying": "Caos en Desconcertaire",
|
||||
"questMayhemMistiflying1Text": "Caos en Desconcertaire, Parte 1: En la que Desconcertaire Experimenta una Terrible Molestia",
|
||||
"questMayhemMistiflying1Notes": "Aunque los adivinos locales pronosticaron un clima agradable, la tarde es extremadamente ventosa, así que sigues agradecidamente a tu amigo @Kiwibot a su casa para escapar del tempestuoso día.<br><br>Ninguno de ustedes esperaba encontrar al Santo Inocente holgazaneando en la mesa de la cocina.<br><br>“Oh, hola,” dice. “Encantado de verlos aquí. Por favor, déjenme ofrecerles un poco de este delicioso té.”<br><br>“Eso es…” @Kiwibot empieza. “Eso es MI—”<br><br>“Sí, sí, por supuesto,” dice el Santo Inocente, sirviéndose unas galletas. “Sólo pensé en meterme y tomar un buen respiro de todas esas calaveras invoca-tornados.” Toma un sorbo casual de su taza de té. “Por cierto, la ciudad de Desconcertaire está bajo ataque.”<br><br>Horrorizados, tú y tus amigos corren a los Establos y ensillan sus monturas aladas más rápidas. Mientras vuelan a la ciudad flotante, ves un enjambre de voladoras y parlanchinas calaveras asediando a la ciudad… ¡y varias de ellas giran su atención hacia ti!",
|
||||
"questMayhemMistiflying1Notes": "Aunque los adivinos locales predijeron un clima agradable, la tarde está extremadamente ventosa, así que sigues agradecido a tu amigo @Kiwibot dentro de su casa para escapar del día ventoso.<br><br>Ninguno de los dos espera encontrar al April Fool descansando en la mesa de la cocina.<br><br>\"Oh, hola,\" dice él. \"Qué curioso verlos aquí. Por favor, déjenme ofrecerles un poco de este delicioso té.\"<br><br>\"Eso es...\" comienza @Kiwibot. \"¡Ese es MI—\"<br><br>\"Sí, sí, claro,\" dice el April Fool, sirviéndose unas galletas. \"Solo pensé en pasar dentro y tomar un buen respiro de todos esos cráneos que invocan tornados.\" Toma un sorbo de su taza de té. \"Por cierto, la ciudad de Mistiflying está siendo atacada.\"<br><br>Aterrados, tú y tus amigos corren hacia los establos y montan a sus más veloces monturas aladas. Mientras se elevan hacia la ciudad flotante, ven que un enjambre de cráneos parlantes y voladores está sitiando la ciudad… ¡y varios de ellos dirigen su atención hacia ustedes!",
|
||||
"questMayhemMistiflying1Completion": "La última calavera cae del cielo con un brillante conjunto de ropajes iridiscentes entre sus dientes, pero el viento constante no ha amainado. Hay algo más en juego aquí. Y ¿en dónde está ese Santo Inocente holgazán? Recoges los ropajes y te precipitas a la ciudad.",
|
||||
"questMayhemMistiflying1Boss": "Enjambre de Calaveras Aéreas",
|
||||
"questMayhemMistiflying1RageTitle": "Regeneración del Enjambre",
|
||||
"questMayhemMistiflying1RageDescription": "Regeneración del Enjambre: Esta barra se llena cuando no completas tus Tareas Diarias. Cuando está llena, ¡el Enjambre de Calaveras Aéreas curará el 30% de su salud restante!",
|
||||
"questMayhemMistiflying1RageEffect": "`¡El Enjambre de Calaveras Aéreas usa REGENERACIÓN DEL ENJAMBRE!`\n\n¡Alentadas por sus victorias, más calaveras salen arremolinándose de las nubes!",
|
||||
"questMayhemMistiflying1DropSkeletonPotion": "Poción de Eclosión Esqueleto",
|
||||
"questMayhemMistiflying1DropSkeletonPotion": "Poción de Eclosión Calavera",
|
||||
"questMayhemMistiflying1DropWhitePotion": "Poción de Eclosión Blanca",
|
||||
"questMayhemMistiflying1DropArmor": "Túnicas de Mensajero Arcoiris Picarón (Armadura)",
|
||||
"questMayhemMistiflying2Text": "Caos en Desconcertaire, Parte 2: En la Cual el Viento Empeora",
|
||||
@@ -489,7 +489,7 @@
|
||||
"questMayhemMistiflying2CollectBlueMistiflies": "Mistiposas Azules",
|
||||
"questMayhemMistiflying2CollectGreenMistiflies": "Mistiposas Verdes",
|
||||
"questMayhemMistiflying2DropHeadgear": "Capucha del Mensajero Arcoiris Picarón (Gorro)",
|
||||
"questMayhemMistiflying3Text": "Caos en Desconcertaire, Parte 3: En la Cual un Cartero es Extremadamente Grosero",
|
||||
"questMayhemMistiflying3Text": "Caos en Desconcertaire, Parte 3: En la Cuál un Cartero es Extremadamente Grosero",
|
||||
"questMayhemMistiflying3Notes": "Las Mistiposas se arremolinan tan densamente en el tornado que es difícil ver. Entrecerrando tus ojos, detectas una silueta con muchas alas flotando en el centro de tremenda tormenta.<br><br>“Oh, no,” suspira el Santo Inocente, casi ahogado por el aullido del clima. “Parece que Winny fue y quedó poseído. Puedo entender eso, también. Podría pasarle a cualquiera.”<br><br>“¡El Trabajador del Viento!” te grita @Beffymaroo. “Es el mago-mensajero más talentoso de Desconcertaire, porque es tan hábil con la magia del clima. ¡Normalmente es un cartero muy cortés!”<br><br>Como para contradecir esta afirmación, el Trabajador del Viento deja salir un grito de furia, e incluso con tus túnicas mágicas, la tormenta casi te tumba de tu montura.<br><br>“Esa llamativa máscara es nueva,” remarca el Santo Inocente. “¿Tal vez debas librarlo de ella?”<br><br>Es una buena idea… pero el enfurecido mago no va a rendirse sin luchar.",
|
||||
"questMayhemMistiflying3Completion": "Justo cuando crees que no puedes soportar más el viento, logras arrebatar la máscara de la cara del Trabajador del Viento. Instantáneamente, el tornado es absorbido, dejando sólo una brisa suave y luz de sol. El Trabajador del Viento mira desconcertado a su alrededor. “¿Adónde se fue?”<br><br>“¿Quién? pregunta tu amigo @khdarkwolf.<br><br>“Aquella dulce mujer quien se ofreció a entregar un paquete por mí. Tzina.” Mientras contempla la ciudad barrida por el viento bajo sus pies, su expresión se ensombrece. “Por otra parte, tal vez no era tan dulce…”<br><br>El Santo Inocente le da una palmadita en la espalda, luego te entrega dos sobres brillantes. “Toma. ¿Porqué no dejas a este angustiado amigo descansar y te encargas del correo un rato? Escuché que la magia en esos sobres hará que valga la pena.”",
|
||||
"questMayhemMistiflying3Boss": "El Trabajador del Viento",
|
||||
@@ -497,7 +497,7 @@
|
||||
"questMayhemMistiflying3DropShield": "Mensaje Arcoiris Picaresco (Artículo de Mano Secundaria)",
|
||||
"questMayhemMistiflying3DropWeapon": "Mensaje Arcoíris Picaresco (Artículo de Mano Principal)",
|
||||
"featheredFriendsText": "Paquete de Misión Amigos Emplumados",
|
||||
"featheredFriendsNotes": "Contiene '¡Ayuda!, ¡Arpía!', 'El Búho Nocturno', y 'Las Aves de la Procrastinación'. Disponible hasta el 31 de Mayo.",
|
||||
"featheredFriendsNotes": "Contiene misiones para conseguir huevos de lechuza, loro y halcón: El Búho Nocturno, ¡Socorro! Arpía!, y Las Aves de la Precariedad.",
|
||||
"questNudibranchText": "Infestación de los HazAhora Nudibranquios",
|
||||
"questNudibranchNotes": "Finalmente te pones a revisar tus Tareas Pendientes en un día de descanso en Habitica. Brillante contra tus tareas más rojas profundo es una manada de vibrantes babosas marinas azules. ¡Estás en trance! Sus colores zafiro hacen que tus tareas más intimidantes parezcan tan fáciles como tus mejores hábitos. En un estupor febril te pones a trabajar, enfrentando una tarea tras otra en un frenesí incesante...<br><br>La próxima cosa que sabes, @LilithofAlfheim está vertiendo agua fría sobre tí. “¡Los HazAhora Nudibranquios te han estado picando por todas partes! ¡Necesitas tomar un descanso!”<br><br>Sorprendido, ves que tu piel están tan roja brillante como estaba tu lista de Tareas Pendientes. \"Ser productivo es una cosa,\" dice @beffymaroo, \"pero también tienes que cuidarte a ti mismo. ¡Deprisa, vamos a deshacernos de ellos!\"",
|
||||
"questNudibranchCompletion": "Ves el último de los HazAhora Nudibranquios deslizándose de una montaña de tareas completadas mientras @amadshade los lava. Uno deja una bolsa de tela al irse, y la abres para revelar algo de oro y unos elipsoides que supones que son huevos.",
|
||||
@@ -505,17 +505,17 @@
|
||||
"questNudibranchDropNudibranchEgg": "Nudibranquia (Huevo)",
|
||||
"questNudibranchUnlockText": "Desbloquea Huevos de Nudibranquia para comprar en el Mercado",
|
||||
"splashyPalsText": "Paquete de Misión Compas Chapoteantes",
|
||||
"splashyPalsNotes": "Contiene 'El Derbi de Dilatoria', 'Guía a la Tortuga' y 'Llanto de la Ballena'. Disponible hasta el 31 de Julio.",
|
||||
"splashyPalsNotes": "Contiene misiones para conseguir huevos de tortuga, ballena y caballito de mar: Guía a la Tortuga, Lamento de la Ballena y El Derby Dilatorio.",
|
||||
"questHippoText": "Qué Hippo-Crita",
|
||||
"questHippoNotes": "Tú y @awesomekitty colapsan bajo la sombra de una palmera, exhaustos. El sol golpea de lleno la Sabana Sloensteadi, abrasando el suelo. Ha sido un día productivo hasta ahora, conquistando tus Tareas Diarias, y este oasis parece un buen lugar para tomar un descanso y refrescarse. Acercándote al agua para beberlo, te tropiezas con la sorpresa de un masivo hipopótamo surgiendo. “¿Descansando tan pronto? No seas tan perezoso, regresa al trabajo.” Intentas protestar que has estado trabajando duro y necesitas un descanso, pero el hipopótamo no quiere enterarse de nada<br><br>@khdarkwolf te susurra, “¿Notaste como está holgazaneando todo el día pero tiene el coraje de llamarte perezoso? ¡Es el Hippo-Crita!”<br><br>Tu amigo @jumorales asiente. “¡Vamos a enseñarle cómo es el trabajo duro!”",
|
||||
"questHippoCompletion": "El hipopótamo se inclina en señal de rendición. “Te subestimé. Parece que no estabas siendo perezoso. Mis disculpas. A decir verdad, puede que haya estado proyectando un poco. Tal vez yo también debería hacer algo de trabajo por mi cuenta. Aquí, toma estos huevos como señal de mi gratitud.” Recibiéndolos, te sientas junto al agua, dispuesto a relajarte al fin.",
|
||||
"questHippoBoss": "El Hippo-Crita",
|
||||
"questHippoDropHippoEgg": "Hipopótamo (Huevo)",
|
||||
"questHippoUnlockText": "Desbloquea Huevos de Hipopótamo para comprar en el Mercado",
|
||||
"questHippoUnlockText": "Desbloquea Huevos de Hipo para comprar en el Mercado",
|
||||
"farmFriendsText": "Paquete de Misión Amigos de la Granja",
|
||||
"farmFriendsNotes": "Contiene 'La Vaca Muutante', 'Monta la Pesadi-Yegua', y el 'Carnero del Trueno'. Disponible hasta el 31 de Agosto.",
|
||||
"farmFriendsNotes": "Contiene misiones para obtener huevos de mascota de caballo, oveja y vaca: Cabalga la Yegua Nocturna, El Carnero del Trueno y La Vaca Mootante.",
|
||||
"witchyFamiliarsText": "Paquete de Misión Familiares de Brujas",
|
||||
"witchyFamiliarsNotes": "Contiene 'El Rey de las Ratas', 'El Arácnido Glacial', y 'El Pantano de la Rana Desastrosa'. Disponible hasta el 31 de Octubre.",
|
||||
"witchyFamiliarsNotes": "Contiene misiones para obtener huevos de mascotas rana, araña y rata: El pantano de la rana desordenada, El arácnido helado y El rey rata.",
|
||||
"questGroupLostMasterclasser": "El Misterio de los Maestros de Clase",
|
||||
"questUnlockLostMasterclasser": "Para desbloquear esta misión, completa las misiones finales de las siguientes cadenas de misión: 'Desazón Dilatoria', 'Caos en Desconcertaire', 'Calamidad en Stoïkalm' y 'Terror en Bosquetareas'.",
|
||||
"questLostMasterclasser1Text": "El Misterio de los Maestros de Clase, Parte 1: Leer Entre Líneas",
|
||||
@@ -537,14 +537,14 @@
|
||||
"questLostMasterclasser3RageDescription": "Regeneración del Enjambre: Esta barra se llena cuando no completas tus Tareas Diarias. Cuando está llena, ¡el Enjambre de Calaveras Huecas curará el 30% de su salud restante!",
|
||||
"questLostMasterclasser3RageEffect": "`¡El Enjambre de Calaveras Huecas usa REGENERACIÓN DEL ENJAMBRE!`\n\n¡Envalentonadas por sus victorias, más calaveras bajan gritando desde los cielos, reforzando el enjambre!",
|
||||
"questLostMasterclasser3DropBodyAccessory": "Amuleto de Éter (Accessorio para el Cuerpo)",
|
||||
"questLostMasterclasser3DropBasePotion": "Poción de Eclosión Base",
|
||||
"questLostMasterclasser3DropGoldenPotion": "Poción de Eclosión de Oro",
|
||||
"questLostMasterclasser3DropBasePotion": "Base Hatching Potion",
|
||||
"questLostMasterclasser3DropGoldenPotion": "Poción eclosionadora de Oro",
|
||||
"questLostMasterclasser3DropPinkPotion": "Poción de Eclosión de Algodón de Azúcar Rosa",
|
||||
"questLostMasterclasser3DropShadePotion": "Poción de Eclosión de Sombra",
|
||||
"questLostMasterclasser3DropZombiePotion": "Poción de Eclosión de Zombi",
|
||||
"questLostMasterclasser3DropShadePotion": "Poción eclosionadora de Sombra",
|
||||
"questLostMasterclasser3DropZombiePotion": "Poción de eclosión Zombi",
|
||||
"questLostMasterclasser4Text": "El Misterio de los Maestros de Clase, Parte 4: La Maestra de la Clase Perdida",
|
||||
"questLostMasterclasser4Notes": "Sales a la superficie del portal, pero aún sigues suspendido en un extraño y cambiante mundo subterráneo. “Eso fue audaz,” dice una fría voz. “Tengo que admitirlo, todavía no he planeado una confrontación directa.” Una mujer surge del agitado remolino de oscuridad. “Bienvenido al Reino del Vacio.”<br><br>Tratas de luchar contra tus crecientes malestares. “¿Tú eres Zinnya?” preguntas.<br><br>“Aquel viejo nombre para una joven idealista,” dice, con una mueca torcida, y el mundo retorciéndose debajo de ti. “No. De todas formas, debes llamarme la Anti-Zinnya ahora, dado todo lo que he hecho y deshecho.”<br><br>De repente, el portal se vuelve a abrir detrás tuyo, y mientras los cuatro Maestros de Clase salen disparados hacia ti, los ojos de Anti-Zinnya brillan con odio. “Veo que mis patéticos sustitutos han logrado seguirte.”<br><br>La miras fijamente. “¿Sustitutos?”<br><br>“Como la Maestra Éterista, fui la primera Maestra de Clase — la única Maestra de Clase. ¡Estos cuatro son una burla, cada uno posee sólo un fragmento de lo que yo una vez tuve! Dominé todos los hechizos y aprendí todas las habilidades. Moldeé tu mundo a mi antojo — hasta que el traicionero éter se colapsó bajo el peso de mis talentos y mis expectativas perfectamente razonables. He estado atrapada por milenios en este vacio resultante, recuperándome. Imagina mi disgusto cuando supe como mi legado se había corrompido.” Deja salir una risa baja y resonante. “Mi plan era destruir sus dominios antes de destruirlos a ellos, pero supongo que el orden es irrelevante.” Con una ráfaga de fuerza asombrosa, embiste hacia adelante, y el Reino del Vacio estalla en un caos.",
|
||||
"questLostMasterclasser4Completion": "Bajo la arremetida de tu ataque final, la Maestra de Clase Perdida grita de frustración, volviéndo su cuerpo translúcido. El apaleante vacio se suaviza alrededor de ella mientras se desploma hacia adelante, por un momento, parecía cambiar, volviéndose más joven, más tranquila, con una expresión de paz en su rostro… pero luego todo desaparece con apenas un suspiro, y te arrodillas una vez más en las arenas del desierto.<br><br>“Parece que tenemos mucho que aprender sobre nuestra propia historia,” dice el Rey Manta, contemplando las ruinas rotas. “Despúes de que la Maestra Éterista creciera agobiándose y perdiera el control de sus habilidades, el desbordamiento del vacio debió haber filtrado la vida de la tierra entera. Probablemente todo se convirtió en desiertos como este.”<br><br>“No es de extrañar que los antiguos quienes fundaron Habitica enfatizaran en un balance de productividad y bienestar,” murmura la Parca Alegre. “Reconstruir su mundo podría haber sido una titánica tarea que requería un considerable trabajo duro, pero podría haber querido prevenir que una catástrofe así ocurriera de nuevo.”<br><br>“¡Ajá, miren en esos objetos previamente poseídos!” dice el Santo Inocente. Efectivamente, todos brillan con una pálida y resplandeciente translucidez debido a la última ráfaga de éter liberado cuando pusiste el espíritu de Anti-Zinnya a descansar. “Qué efecto tan resplandeciente. Debo tomar notas.”<br><br>“Los restos concentrados de éter en esta área probablemente causó que esos animales también se volvieran invisibles,” dice Lady Glacial, rascándose una parte vacia detrás de su oreja. Sientes que una esponjosa cabeza invisible te da un empujón en la mano, y sospechas que tendrás que dar algunas explicaciones en los Establos de vuelta a casa. Mientras miras las ruinas por última vez, detectas todo lo que queda de la primera Maestra: su capa brillante. Te la pones sobre los hombros y regresas a Ciudad Hábito, reflexionando sobre todo lo que has aprendido.<br><br>",
|
||||
"questLostMasterclasser4Completion": "Bajo el embate de tu ataque final, la Lost Masterclasser grita de frustración, su cuerpo parpadeando hasta volverse translúcido. El vacío que la rodea se calma mientras se desploma hacia adelante, y por un momento, parece transformarse, volviéndose más joven, más tranquila, con una expresión de paz en su rostro… pero luego todo se derrite con apenas un susurro, y te encuentras de rodillas una vez más en la arena del desierto.<br><br>\"Parece que tenemos mucho que aprender sobre nuestra propia historia,\" dice el Rey Manta, mirando las ruinas rotas. \"Después de que la Maestra Aethermancer se vio abrumada y perdió el control de sus habilidades, el derrame de vacío debió haber drenado la vida de toda la tierra. Probablemente todo se convirtió en desiertos como este.\"<br><br>\"No es de extrañar que los antiguos que fundaron Habitica subrayaran un equilibrio entre productividad y bienestar,\" murmura el Segador Alegre. \"Reconstruir su mundo habría sido una tarea descomunal que requeriría un trabajo arduo considerable, pero habrían querido evitar que tal catástrofe sucediera nuevamente.\"<br><br>\"¡Oho, miren esos objetos que antes estaban poseídos!\" dice el April Fool. Efectivamente, todos brillan con una translúcida resplandecencia pálida, del último estallido de éter liberado cuando descansaste el espíritu de Anti’zinnya. \"Qué efecto deslumbrante. Debo tomar notas.\"<br><br>\"Los restos concentrados de éter en esta área probablemente causaron que estos animales se volvieran invisibles también,\" dice Lady Glaciate, rascando una zona vacía detrás de las orejas. Sientes una cabeza suave e invisible empujando tu mano, y sospechas que tendrás que dar algunas explicaciones en los establos al regresar a casa. Al mirar las ruinas por última vez, ves todo lo que queda de la primera Masterclasser: su capa resplandeciente. Colocándola sobre tus hombros, te diriges de regreso a Habit City, reflexionando sobre todo lo que has aprendido.<br><br>",
|
||||
"questLostMasterclasser4Boss": "Anti-Zinnya",
|
||||
"questLostMasterclasser4RageTitle": "Vacio Sifónico",
|
||||
"questLostMasterclasser4RageDescription": "Vacio Sifónico: Esta barra se llena cuando no completas tus Tareas Diarias. ¡Cuando está llena, Anti-Zinnya removerá maná del equipo!",
|
||||
@@ -559,7 +559,7 @@
|
||||
"questYarnDropYarnEgg": "Hilo (Huevo)",
|
||||
"questYarnUnlockText": "Desbloquea Huevos de Hilo para comprar en el Mercado",
|
||||
"winterQuestsText": "Paquete de Misiones de Invierno",
|
||||
"winterQuestsNotes": "Contiene \"Santa Trampero\", \"Encuentra al Cachorro\", y \"Un Ave Álgida\". Disponible hasta el 31 de Enero. Recuerda que \"Santa Trampero\" y \"Encuentra al Cachorro\" tienen logros de misión acumulables, pero dan una mascota y una montura raras que sólo pueden añadirse a tu establo una vez.",
|
||||
"winterQuestsNotes": "Contiene misiones para conseguir la Mascota Oso Polar, la Montura Oso Polar y huevos de Mascota Pingüino: Encuentra al Cachorro, Trampero Santa y La Escarcha Aviar.",
|
||||
"questPterodactylText": "El Pterror-dáctilo",
|
||||
"questPterodactylNotes": "Estás dando un paseo a un lado de los pacíficos Acantilados Stoïkalm cuando un chirrido malévolo llena el aire. Te das la vuelta y solo para ver una horrible criatura volar hacia ti y te invade un poderoso terror. Mientras das la vuelta para huir, @Lilith of Alfheim te sujeta. \"¡No entres en panico! Es solo un Pterror-dáctilo.\"<br><br>@Procyon P afirma. \"Sus nidos estan cerca, pero fueron atraídos por la esencia de los Hábitos negativos y Tareas Diarias sin hacer.\"<br><br>\"No te preocupes,\" dice @Katy133. \"¡Sólo necesitamos ser extra productivos para derrotarlo!\" Te llena un renovado sentido de propósito y volteas la cara a tu enemigo.",
|
||||
"questPterodactylCompletion": "Con un último chillido, el Pterror-dáctilo se desploma sobre el lado del acantilado. Corres hacia adelante para verlo volar sobre las lejanas estepas. \"Fiu, me alegro de que haya terminado\", dices. \"Yo también\", responde @GeraldThePixel. \"¡Pero mira! Nos dejó algunos huevos\". @Edge te pasa tres huevos, y prometes criarlos en tranquilidad, rodeado de Hábitos positivos y Tareas Diarias azules.",
|
||||
@@ -594,7 +594,7 @@
|
||||
"questDysheartenerDropHippogriffMount": "Hipogrifo Esperanzado (Montura)",
|
||||
"dysheartenerArtCredit": "Trabajo artistico por @AnnDeLune",
|
||||
"hugabugText": "Paquete de Misión Besa un Bicho",
|
||||
"hugabugNotes": "Contiene 'El ERROR CRÍTICO,' 'El Caracol del Cieno de Rutinaria,' y 'Adiós, Mariposa.' Disponible hasta el 31 de Marzo.",
|
||||
"hugabugNotes": "Contiene misiones para obtener huevos de mascotas escarabajo, oruga y caracol: El BICHO CRÍTICO, Bye Bye Butterfry, y El Caracol de Fango Drudgery.",
|
||||
"questSquirrelText": "La Ardilla Escurridiza",
|
||||
"questSquirrelNotes": "¡Te despiertas y notas que te dormiste! ¿Por qué tu despertador no sonó? … ¿Cómo se atascó una bellota en el timbre?<br><br>Cuando tratas de hacer el desayuno, la tostadora está llena de bellotas. Cuando tratas de sacar tu montura, @Shtut está allí, intentando abrir su establo sin éxito. Mira a través del ojo de la cerradura. “¿Eso es una bellota ahí adentro?”<br><br>@randomdaisy grita, “¡Oh no! ¡Sabía que mis mascotas ardillas se han escapado, pero no sabía que habian causado tantos problemas! ¿Puedes ayudarme a reunirlas antes de que hagan más travesuras?”<br><br>Siguiendo el rastro de las nueces de roble colocadas maliciosamente, rastreas y atrapas a las ardillas descarriadas, con @Cantras ayudando a poner a cada una a salvo en casa. Pero cuando piensas que tu tarea está casi completa, ¡una bellota rebota en tu casco! Miras hacia arriba para ver a una poderosa bestia de ardilla, agazapada en defensa de una prodigiosa pila de semillas.<br><br>“Oh cariño,” dice @randomdaisy, suavemente. “Siempre ha sido una especie de guardiana de los recursos. ¡Tendremos que proceder muy cuidadosamente!” ¡Te rodeas de tu equipo, preparado para problemas!",
|
||||
"questSquirrelCompletion": "Con un acercamiento amable, ofertas de intercambio, y un poco de hechizos tranquilizadores, eres capaz de convencer a la ardilla de alejarse de su provisión y regresarla a los establos, los cuales @Shtut recién termina de desbellotar. Han apartado algunas de las bellotas en una mesa de trabajo. “¡Esos son huevos de ardillas! Tal vez puedas criar algunas que no jueguen demasiado con su comida.”",
|
||||
@@ -602,9 +602,9 @@
|
||||
"questSquirrelDropSquirrelEgg": "Ardilla (Huevo)",
|
||||
"questSquirrelUnlockText": "Desbloquea Huevos de Ardilla para comprar en el Mercado",
|
||||
"cuddleBuddiesText": "Paquete de Misión Compañeros Mimosos",
|
||||
"cuddleBuddiesNotes": "Contiene 'El Conejito Asesino', 'El Hurrón Nefario', y 'La Pandilla de Conejillos de Indias'. Disponible hasta el 31 de Marzo.",
|
||||
"cuddleBuddiesNotes": "Contiene misiones para conseguir huevos de conejo, hurón y cobaya: El Conejo Asesino, El Hurón Nefasto y La Pandilla de Cobayas.",
|
||||
"aquaticAmigosText": "Paquete de Misión Amigos Acuáticos",
|
||||
"aquaticAmigosNotes": "Contiene 'El Ajolote Mágico', 'El Kraken de Inkompleta' y 'La Llamada de Octothulu'. Disponible hasta el 31 de Agosto.",
|
||||
"aquaticAmigosNotes": "Contiene misiones para obtener huevos de sepia, pulpo y Axolotl: El Kraken de Inkomplete, La Llamada de Octothulu, y El Axolotl Mágico.",
|
||||
"questSeaSerpentText": "Peligro en las Profundidades: ¡Ataque de la Serpiente Marina!",
|
||||
"questSeaSerpentNotes": "Tus rachas te están haciendo sentir con suerte. Es el momento perfecto para un viaje al hipódromo de caballitos de mar. Abordas el submarino en los Muelles Diligentes y te acomodas para el viaje a Dilatoria. Pero, apenas se han sumergido, cuando un impacto sacude el submarino haciendo caer a sus ocupantes. \"¿Qué está pasando?\", grita @AriesFaries.<br><br>Miras por una portilla cercana y te espanta la pared de escamas brillantes que está pasando en frente. \"¡Serpiente Marina!\" exclama el Capitán @Witticaster por el altavoz. \"¡Prepárense, ahí viene otra vez!” Mientras agarras los brazos de tu silla, tus tareas incompletas pasan delante de tus ojos. \"Tal vez, si trabajamos juntos y las completamos\", piensas, \"¡podremos ahuyentar a este monstruo!\"",
|
||||
"questSeaSerpentCompletion": "Abatida por tu compromiso, la serpiente marina huye, desapareciendo en las profundidades. Cuando llegas a Dilatoria, respiras un suspiro de alivio antes de notar que @*~Seraphina~ se acerca con tres huevos traslúcidos en sus brazos. \"Toma, tú deberías tenerlos,\" dice, \"¡sabes manejar a una serpiente marina!\". Al aceptar los huevos, juras de nuevo mantenerte firme en completar tus tareas para asegurarte de que el evento no se repita.",
|
||||
@@ -618,7 +618,7 @@
|
||||
"questKangarooDropKangarooEgg": "Canguro (Huevo)",
|
||||
"questKangarooUnlockText": "Desbloquea Huevos de Canguro para comprar en el Mercado",
|
||||
"forestFriendsText": "Paquete de Misión Amigos del Bosque",
|
||||
"forestFriendsNotes": "Contiene 'El Espíritu de la Primavera', 'La Erizobestia', y 'El Árbol Enredado'. Disponible hasta el 30 de Septiembre.",
|
||||
"forestFriendsNotes": "Contiene misiones para obtener huevos de mascotas Treeling, Ciervo y Erizo: El Árbol Enredado, El Espíritu de la Primavera y La Bestia Erizo.",
|
||||
"questAlligatorText": "El Insta-Drilo",
|
||||
"questAlligatorNotes": "“¡Rayos!” exclama @gully. “¡Un Insta-Drilo en su hábitat natural! Cuidado, distrae a sus presas con cosas que parecen urgentes EN ESTE INSTANTE, y se alimenta de las Tareas Diarias no controladas que resultan.\" Guardas silencio no llamar su atención, pero es inútil. ¡El Insta-Drilo te descubre y te ataca! Las voces de distracción surgen de las Ciénagas del Estancamiento, reclamando tu atención: \"¡Lee este post! ¡Mira esta foto! ¡Pon atención en mí EN ESTE INSTANTE!\" Te apresuras a preparar un contraataque, completando tus Tareas Diarias y reforzando tus buenos Hábitos para luchar contra el temido Insta-Drilo.",
|
||||
"questAlligatorCompletion": "Con tu atención concentrada en lo que es importante y no en las distracciones del Insta-Drilo, el Insta-Drilo escapa. ¡Victoria! \"¿Esos son huevos? A mí me parecen huevos de caimán,\" pregunta @mfonda. \"Si los cuidamos correctamente, serán fieles mascotas o leales corceles,\" responde @UncommonCriminal, entregándote tres para cuidarlos, Esperamos que así sea, o de lo contrario el Insta-Drilo podría hacer un regreso…",
|
||||
@@ -626,9 +626,9 @@
|
||||
"questAlligatorDropAlligatorEgg": "Caimán (Huevo)",
|
||||
"questAlligatorUnlockText": "Desbloquea Huevos de Caimán para comprar en el Mercado",
|
||||
"oddballsText": "Paquete de Misión de Raritos",
|
||||
"oddballsNotes": "Contiene 'La Jalea Regente', 'Escapa de la Criatura de las Cuevas', y 'Un Hilo Enredado'. Disponible hasta el 30 de Abril.",
|
||||
"oddballsNotes": "Contiene misiones para obtener huevos de Baba, Hilo y Mascota de Roca: El regente gelatinoso, Un hilo enredado y Escapa de la criatura cavernícola.",
|
||||
"birdBuddiesText": "Paquete de Misión Aves Amigables",
|
||||
"birdBuddiesNotes": "Contiene 'Un Ave Álgida,' 'Alboroto del Gallo,' y 'El Pavo Real del Tira y Afloja.' Disponible hasta el 30 de Septiembre.",
|
||||
"birdBuddiesNotes": "Contiene misiones para obtener huevos de mascotas Pavo real, Pingüino y Gallo: El pavo real de empujar y tirar, La gallina escarcha y El gallo salvaje.",
|
||||
"questVelociraptorText": "El Veloci-Rapero",
|
||||
"questVelociraptorNotes": "Estás compartiendo pasteles de miel con @*~Seraphina~*, @Procyon P, y @Lilith of Alfheim junto a un lago en las estepas de Stoïkalm. De repente, una lúgubre voz interrumpe tu pícnic.<br><br><em>Mis Hábitos se han visto afectados, he perdido mis Tareas Diarias,<br>Estoy perdiendo la cabeza, hundiendome en las dudas y en los tal vez,<br>En la cima de mi juego yo era tan productivo,<br>Pero ahora dejo pasar mis fechas de vencimiento.</em><br><br>@*~Seraphina~* se asoma destrás de un matorral de hierba. “Es el Veloci-Rapero. Parece... ¿disgustado?”<br><br>Levantas un puño con determinación. “Solo hay una cosa que hacer. ¡Tiempo de Batalla de Rap!”",
|
||||
"questVelociraptorCompletion": "Irrumpes a través de la hierba, confrontando al Veloci-Rapero.<br><br><em>Mira aquí, rapero, no eres un desertor,<br>¡De los Malos Hábitos eres el más duro bateador!<br>Marca tus Tareas Pendientes como un jefe,<br>¡Por un día perdido no lamentes!</em><br><br>Lleno de confianza renovada, saltará al estilo libre otro día, dejando atrás tres huevos donde se sentó.",
|
||||
@@ -683,16 +683,16 @@
|
||||
"questDolphinBoss": "Delfín de la Duda",
|
||||
"questDolphinText": "El Delfín de la Duda",
|
||||
"questBronzeUnlockText": "Desbloquea Pociones de Eclosión de Bronce para comprar en el Mercado",
|
||||
"questBronzeDropBronzePotion": "Poción de Eclosión de Bronce",
|
||||
"questBronzeDropBronzePotion": "Poción de Eclosión de Cobre",
|
||||
"mythicalMarvelsText": "Paquete de Misión Maravillas Míticas",
|
||||
"rockingReptilesText": "Paquete de Misión Reptiles Roqueros",
|
||||
"delightfulDinosText": "Paquete de Misión Dinos Deleitosos",
|
||||
"jungleBuddiesText": "Paquete de Misión Amigos Selváticos",
|
||||
"sandySidekicksText": "Paquete de Misión Ayudantes Arenosos",
|
||||
"questBronzeText": "La Batalla del Escarabajo de Bronce",
|
||||
"mythicalMarvelsNotes": "Contiene 'Convenciendo a la Reina Unicornio', 'El Grifo de Fuego', y 'Peligro en las Profundidades: ¡Ataque de la Serpiente Marina!' Disponible hasta el 28 de Febrero.",
|
||||
"mythicalMarvelsNotes": "Contiene misiones para obtener huevos de mascotas unicornio, grifo y serpiente marina: Convencer a la Reina Unicornio, El Grifo Ardiente y Peligro en las Profundidades: Golpe de la serpiente marina.",
|
||||
"questBronzeBoss": "Escarabajo de Bronce",
|
||||
"jungleBuddiesNotes": "Contiene 'Mandril Monstruoso y los Monos Maliciosos', 'El Perezoso Somnoliento' y 'El Árbol Enredado'. ",
|
||||
"jungleBuddiesNotes": "Contiene misiones para obtener huevos de mascotas Mono, Treeling y Perezoso: El Mandril Monstruoso y los Monos Traviesos, El Árbol Enredado y El Perezoso Somnoliento.",
|
||||
"questTurquoiseNotes": "@gawrone entra corriendo a tu cuarto sosteniendo su Diploma de Habiticano y en una mano y y un tomo con cubierta de cuero, extraordinariamente grande y empolvado, en la otra.<br><br>“¿A que no adivinas lo que descubrí?” dicen. “El motivo por el que los Campos Florecientes son tan fértiles es que en algún momento estuvieron cubiertos por un vasto océano. Se rumora que un pueblo ancestral vivía en el fondo de ese océano en ciudades encantadas. Usando mapas olvidados, ¡yo encontré la ubicación más probable de estas ciudades! ¡Trae tu pala!\"<br><br>Se encuentran al día siguiente en la tarde, con @QuartzFox y @starsystemic en el grupo, y comienzan a cavar. En lo profundo del suelo ¡encuentran una runa con una gema turquesa al lado!<br><br>“¡Sigan cavando!”, insiste @gawrone. “¡Si encontramos suficientes, podremos preparar una de sus pociones ancestrales y hacer historia al mismo tiempo!”",
|
||||
"questBronzeCompletion": "\"¡Buen encuentro, guerrero!\" dice el escarabajo mientras se sienta en el suelo. ¿Está sonriendo? Es difícil de decir por esas mandíbulas. \"¡Realmente te has ganado estas pociones!\"<br<br>\"Oh guau, ¡Nunca habíamos recibido una recompensa como esta por ganar una batalla antes!\" dice @UncommonCriminal, girando una botella brillante en su mano. \"¡Vamos a eclosionar a nuestras nuevas mascotas!\"",
|
||||
"questBronzeNotes": "En un refrescante descanso entre tareas, tú y algunos amigos dan un paseo por los senderos del Bosquetareas. Te topas con un gran tronco hueco y un destello desde el interior llama tu atención.<br><br>¡Porqué, es un alijo de Pociones Mágicas de Eclosión! El brillante líquido de bronce se arremolina suavemente en las botellas, y @Hachiseiko alcanza a recoger una para examinarla.<br><br>\"¡Detente!\" silba una voz desde atrás de ti. Es un escarabajo gigantesco con un caparazón de bronce brillante, alzando sus pies con garras en una postura de lucha. \"Esas son mis pociones, y si deseas ganártelas, debes probarte a ti mismo en un duelo de caballeros!\"",
|
||||
@@ -706,16 +706,16 @@
|
||||
"questRubyCompletion": "Con los acrtículos necesarios bien guardados, los tres se apresuran a volver a Ciudad Hábito y se reúnen en el laboratorio de @beffymaroo. \"¡Excelente trabajo!\" dice @beffymaroo. \"¡Ustedes han recolectado los ingredientes para la poción!\" @beffymaroo combina cuidadosamente las runas y los rubíes para crear una brillante poción roja y vierte un poco de ella en dos huevos de mascota. ¡Mientras observas los resultados, te das cuenta de que las dos mascotas parecen completamente desinteresadas la una en la otra!<br><br>\"¿No funcionó? pregunta @gully. Pero antes de que nadie pueda contestar, de repente te das cuenta de que no es la poción la que crea la amistad y el amor, sino es la experiencia de trabajar juntos hacia un objetivo común. Sales de la misión habiendo ganado algunos nuevos amigos…¡y algunas nuevas y llamativas mascotas!",
|
||||
"questRubyNotes": "Los picos de los Volcanes de Stoïkalm, normalmente bulliciosos, permanecen en silencio bajo la nieve. \"¿Supongo que los montañeros y los excursionistas están hibernando?\" @gully te dice a ti y a @Aspiring_Advocate. \"Eso hace nuestra búsqueda más fácil.\"<br><br>Al llegar a la cima, el viento helado se funde con el vapor que sale del cráter. \"¡Allí!\" exclama @Aspiring_Advocate, apuntando hacia una fuente termal. \"¿Qué mejor lugar para encontrar las frías runas de Acuario y las apasionadas runas de Venus que dónde el hielo y el fuego se encuentran?\"<br><br>Los tres se apresuran hacia la fuente termal. \"De acuerdo a mi investigación,\" dice @Aspiring_Advocate, \"¡Combinando las runas con rubíes en forma de corazón creará una poción de eclosión que puede fomentar la amistad y el amor!\"<br><br>Emocionados por la expectativa de un nuevo descubrimiento, todos ustedes sonríen. \"De acuerdo,\" dice @gully, \"¡Empecemos a buscar!\"",
|
||||
"questSilverNotes": "El reciente descubrimiento de las Pociones de Eclosión de Bronce tiene a toda Habitica hablando. ¿Serán posibles las pociones de metales aún más brillantes? Te diriges a la Biblioteca Pública Central de Ciudad Hábito, acompañado de @QuartzFox y @starsystemic, y recolectas grandes cargamentos de libros sobre alquimia para estudiarlos.<br><br> Después de horas de trabajo de fatiga ocular, @QuartzFox dejar salir un grito de triunfo no del todo apropiado para la biblioteca. \"¡Ajá! ¡Lo he encontrado!\" Te apresuras para ver. \"Una Poción de Eclosión de Plata puede ser hecha con runas zodiacales del signo de Cáncer, disueltas en plata pura derretida sobre llamas infundidas con el poder de las runas de Luna.\"<br><br>\"Necesitaremos muchos de esos ingredientes,\" medita @starsystemic. \"En caso de que un intento salga mal.\"<br><br>“Sólo hay un lugar para encontrar enormes cantidades de esos materiales de artesanía aleatorios,\" dice @Edge, de pie a la sombra de las pilas con los brazos cruzados. ¿Ha estado allí todo el tiempo? \"Los Calabozos de la Monotonía. Pongámonos en marcha.\"",
|
||||
"rockingReptilesNotes": "Contiene 'El Insta-Drilo,' 'La Serpiente de la Distracción,' y 'El Veloci-Rapero.' Disponible hasta el 30 de Septiembre.",
|
||||
"rockingReptilesNotes": "Contiene misiones para obtener huevos de mascotas caimán, velociraptor y serpiente: El Insta-Gator, El Velociraptor y La Serpiente de la Distracción.",
|
||||
"questRobotCompletion": "Mientras @Rev y el Compañero de Responsabilidad colocan el último tornillo en su lugar, la máquina del tiempo resuena de vida. @FolleMente y @McCoyly saltan a bordo. \"¡Gracias por la ayuda! ¡Nos veremos en el futuro! Por cierto, ¡estos deberían ayudarte en tu próximo invento!\" Con ello, los viajeros del tiempo desaparecen, pero dejando atrás entre los restos del viejo Estabilizador de Productividad tres huevos de mecanismo de reloj. ¡Tal vez sean los componentes cruciales para una nueva línea de producción de Compañeros de Responsabilidad!",
|
||||
"questRobotNotes": "En los labotatorios Máxima Capacidad, @Rev está dando los últimos retoques a su más reciente invento, un Compañero de Responsabilidad robótico, cuando un extraño vehículo metálico aparece de repente en una columna de humo, ¡A centímetros del Detector de Fluctuaciones del robot! Sus ocupantes, dos extrañas figuras vestidas de plata, emergen y se quitan sus cascos espaciales, revelándose como @FolleMente y @McCoyly.<br><br>\"Mi hipótesis es que había una anormalidad en nuestra implementación de productividad,\" dice @FolleMente tímidamente.<br><br>@McCoyly cruza sus brazos. \"Eso significa que rechazaron completar sus Tareas Diarias, lo que supongo derivó a la desintegración de nuestro Estabilizador de Productividad. Es un componente esencial para viajar en el tiempo que necesita consistencia para trabajar apropiadamente. ¡Nuestros logros potencian nuestro movimiento a través del espacio y tiempo! No tengo tiempo para explicar más, @Rev. Lo descubrirás en 37 años, o a lo mejor tus aliados los Misteriosos Viajeros del Tiempo puedan informarte. Por ahora, ¿Puedes ayudarnos a arreglar nuestra máquina del tiempo?\"",
|
||||
"questWaffleText": "Waffleando con el Inocente: ¡Desastre del Desayuno!",
|
||||
"questWindupText": "Un Torbellino con un Guerrero A Cuerda",
|
||||
"delightfulDinosNotes": "Contiene 'El Pterror-dáctilo,' 'El Aplastante Triceratops,' y 'El Dinosaurio Desenterrado.' Disponible hasta el 30 de Noviembre.",
|
||||
"sandySidekicksNotes": "Contiene 'El Armadillo Indulgente,' 'La Serpiente de la Distracción,' y 'El Arácnido Glacial'. ",
|
||||
"delightfulDinosNotes": "Contiene misiones para obtener huevos de mascotas Triceratops, T-Rex y Pterodáctilo: El Triceratops pisoteador, El Dinosaurio desenterrado y El Pterodáctilo.",
|
||||
"sandySidekicksNotes": "Contiene misiones para obtener huevos de mascotas Araña, Armadillo y Serpiente: El Arácnido Helado, El Armadillo Indulgente y La Serpiente de Distracción.",
|
||||
"questWaffleRageEffect": "`¡El Waffle Horrible usa MAPLE DE ARCE!`¡El jarabe pegajoso ralentiza los golpes y los hechizos! Daño pendiente reducido.",
|
||||
"questWaffleRageDescription": "Maple de Arce: Esta barra se llena cuando no completas tus Tareas Diarias. ¡Cuando está llena, el Waffle Horrible restará el daño pendiente que los miembros del equipo hayan acumulado!",
|
||||
"questSilverCompletion": "Has excavado. Has profundizado. Has rebuscado. Por fin emerges de los Calabozos, cargado de runas y lingotes de plata, cubierto de lodo pero eufórico de triunfo. Regresas a Ciudad Hábito y te pones a trabajar en un laboratorio de alquimia. Tú y @starsystemic siguen las fórmulas que @QuartzFox encontró, bajo la cuidadosa supervisión de @Edge. Finalmente en una gran ráfaga de brillo y humo, ¡tu brebaje se asienta en la familiar viscosidad de una Poción de Eclosión!<br><br>@Edge recoge la mezcla en frascos y sonríe. \"Vamos a probarla, ¿Te parece?¿Alguien tiene algún Huevo?\"<br><br>Te apresuras a los Establos, preguntándote que secretos brillantes permanecen sin descubrir...",
|
||||
"questSilverCompletion": "Has cavado. Has dragado. Has saqueado. ¡Finalmente emerges de las Mazmorras, cargado de runas y lingotes de plata, cubierto de barro pero exultante de éxito! Viajas de regreso a Habit City y te pones a trabajar en un laboratorio de alquimia. Tú y @starsystemic siguen las fórmulas que @QuartzFox encontró, bajo la atenta supervisión de @Edge. Finalmente, en una gran explosión de brillantina y humo, tu mezcla se asienta en la familiar viscosidad de una Poción de Eclosión.<br><br>@Edge recoge la mezcla en frascos y sonríe. “¿Vamos a probarla, no? ¿Alguien tiene algún Huevo?”<br><br>Corres a los establos, preguntándote qué secretos brillantes aún pueden quedar por descubrir…",
|
||||
"questTurquoiseCompletion": "Acalorados y sudorosos, tu equipo finalmente se detiene a descansar junto a la tierra levantada y miran el montón de runas y gemas que han encontrado.<br><br>“Increíble,\" murmura @QuartzFox. \"Esto reescribirá los libros e historia.\"<br><br>\"Déjame llevar estos materiales a la Universidad de Habitica para analizarlos,\" dice @gawrone. \"¡Debe haber mucho para estudiar y hacer algunas pociones de turquesa para todos nosotros! ¿Quién sabe qué más podríamos encontrar enterrado por aquí?\"<br><br>@starsystemic interviene: \"¡Es increíble todo lo que se puede conseguir con un poco de trabajo duro!\"",
|
||||
"questBlackPearlNotes": "Últimamente te has sentido poco inspirado, así que cuando @jjgame83 sugiere un viaje al Lago Animado, aprovechas la oportunidad para cambiar de aires. Mientras @QuartzFox prepara un picnic en la orilla, encuentras algo brillante en las aguas poco profundas. Una extraña perla negra.<br><br>“Desearía tener una nueva idea,\" suspiras.<br><br>Un escalofrío inunda la orilla. El lago se convierte en tinta negra. Las estrellas salen y el mediodía se convierte en medianoche en un abrir y cerrar de ojos.<br><br>“Ésas no son buenas señales\" dice @PixelStormArt.<br><br>Una imponente masa de ramas estalla del lago en un chorro de espuma, y desde lo más alto, retumba: \"¡CONTEMPLA A ASTEROIDEA, LA IDEA DESDE MÁS ALLÁ DE LAS ESTRELLAS!\"<br><br>Un tentáculo se abalanza sobre la canasta de picnic, Buena idea o no, saltas a la acción.",
|
||||
"questWindupNotes": "Ciudad Hábito raramente es silenciosa, pero no estabas preparado para la cacofonía de crujidos, chirridos y gritos que escapan del Buen Medidor Temporal, el mejor emporio de relojería de Habitica. Suspiras--sólo querías arreglar tu reloj. El propietario, conocido sólo como \"El Grandioso y Poderoso\", sale, derribando la puerta ¡y perseguido por un chirriante coloso de bronce!<br><br>“¡Ki-! ¡Ki-! ¡K-i!\" repiquetea, manoteando con sus brazos arriba y abajo. Sus engranajes rechinan y crujen en señal de protesta.<br><br>“¡Mi robot Clankton se ha vuelto loco! ¡Está tratando de matarme!\" chilla el supuestamente Poderoso.<br><br>Incluso con un reloj roto, sabes cuando es tiempo para luchar. Saltas hacia adelante para defender al relojero en pánico. ¡@Vikte y @a_diamond también dan un paso adelante para ayudar!<br><br>“¡Ki-! ¡Ki-! ¡Ki-!” canturrea Clankton con cada golpe. \"¡Miau!\"<br><br>Espera, ¿qué fue ese maullido mecánico en medio de la monotonía mortífera?",
|
||||
@@ -744,5 +744,104 @@
|
||||
"questOnyxCollectLeoRunes": "Runas de Leo",
|
||||
"questOnyxCollectOnyxStones": "Piedras del Onyx",
|
||||
"questOnyxDropOnyxPotion": "Poción de Eclosión de Onyx",
|
||||
"questOnyxUnlockText": "Desbloquea Pociones de Eclosión de Onyx para comprar en el Mercado"
|
||||
"questOnyxUnlockText": "Desbloquea Pociones de Eclosión de Onyx para comprar en el Mercado",
|
||||
"questGiraffeText": "La Gear-affe",
|
||||
"questGiraffeCompletion": "Después de ayudar al Gear-Affe con la organización básica de su equipo, ¡ambos se sienten más energizados y animados!<br><br>Él agarra su guitarra y un libro de ejercicios para principiantes y toca algunas notas. “Se siente bien dar un paso en la dirección correcta, aunque sea pequeño. ¡Gracias por ayudarme! Toma estos, escuché que tienes un montón de mascotas y estos chicos podrían ser una buena adición.”",
|
||||
"questGiraffeBoss": "Mono Gear",
|
||||
"questGiraffeDropGiraffeEgg": "Jirafa (huevo)",
|
||||
"questChameleonText": "El camaleón caótico",
|
||||
"questDogText": "Triple desafío canino!",
|
||||
"questDogCompletion": "Después de recoger todos los juguetes que (afortunadamente) esquivaste, le das a Shiberus una suave palmadita en su cabeza central.<br><br>“Es genial estar emocionado por una gran tarea, pero tal vez ayudaría tener un plan. ¿Quizás la próxima vez empieza desde la entrada y trabaja hacia atrás? O hazlo en bloques de 30 minutos con pequeños descansos para jugar entre medio.”<br><br>“Es una buena idea,” comenta la cabeza izquierda del perrito. La cabeza derecha coloca algunos objetos cerca de ti, incluidos lo que parecen ser huevos… “Encontré algunas cosas que podrías querer mientras jugábamos. ¡Gracias por tu ayuda!”",
|
||||
"questDogBoss": "Shiberuss",
|
||||
"questDogRageTitle": "Lanzamiento triple de juguetes",
|
||||
"questDogRageDescription": "Esta barra se llena cuando no completas tus Dailies. Cuando esté llena, Shiberus quitará parte de los PM de tu grupo!",
|
||||
"questDogRageEffect": "Shiberus te lanza juguetes rápidamente y bloquea tus hechizos mágicos. Los PM del grupo se reducen!",
|
||||
"questDogDropDogEgg": "Perro (huevo)",
|
||||
"questDogUnlockText": "Desbloquea huevos de perro para comprar en el mercado.",
|
||||
"questFungiRageTitle": "Niebla de hongos",
|
||||
"questFungiRageDescription": "Esta barra se llena cuando no completas tus Dailies. Cuando esté llena, el hongo Moody eliminará parte del daño pendiente de tu grupo",
|
||||
"questFungiDropFungiPotion": "Poción para incubar hongos",
|
||||
"questChameleonBoss": "El camaleón caótico",
|
||||
"questChameleonDropChameleonEgg": "Camaleón (huevo)",
|
||||
"questFungiRageEffect": "Una Niebla emana del Hongo Malhumorado y rodea a tu grupo, empañando el ambiente y apagando tu magia. Los PM del grupo se reducen!",
|
||||
"questFungiUnlockText": "Desbloquea pociones de incubación de hongos para comprar en el mercado.",
|
||||
"questRaccoonText": "Mapache Tycoon",
|
||||
"questRaccoonCompletion": "\"En realidad, creo que hay suficientes piedras interesantes para los dos,\" dices mientras recuperas lo último de tus cosas. \"¡Aquí tienes algunas de las que recogí, tengo suficiente para compartir!\"<br><br>\"¡Oh, eso es bastante amable de tu parte!\" dice el mapache. \"En realidad, aquí tienes algunos pequeños premios para ti también.\"",
|
||||
"questRaccoonBoss": "Mapache voraz",
|
||||
"questRaccoonRageTitle": "Tsunami de baratijas",
|
||||
"questRaccoonRageDescription": "Esta barra se llena cuando no completas tus Diarios. Cuando esté llena, el mapache Tycoon recuperará parte de su salud.",
|
||||
"questRaccoonRageEffect": "El mapache voraz coge algunos objetos que has rescatado y los vuelve a meter en el tronco del árbol. El jefe recupera un 30% de su salud!",
|
||||
"questRaccoonDropRaccoonEgg": "Mapache (Huevo)",
|
||||
"questRaccoonUnlockText": "Desbloquea huevos de mapache para comprarlos en el mercado.",
|
||||
"questOtterText": "¡El Pérfido Conspirador!",
|
||||
"questOtterNotes": "Te apresuras a recoger los pedazos de tu lista mientras flotan por el aire como confeti. El nutria, aún sonriendo, te observa con ojos traviesos. Parece estar divirtiéndose demasiado con esto, y no puedes evitar suspirar. \"Bueno, parece que ya no puedo tachar todo ahora, ¿verdad?\" dices, recogiendo los trozos. \"Supongo que es hora de volver a enfocarme y decidir qué es lo más importante. ¿Gracias por la... inspiración?\" La nutria sonríe con picardía, “¡De nada! Priorizar es el nombre del juego. ¡Tómate tu tiempo! Después de todo, no se trata de hacerlo todo de una vez, sino de hacer las *cosas correctas*.\" Mientras sigues recogiendo tus pensamientos dispersos (y trozos de papel), notas que la nutria tira unos huevos extraños frente a ti. \"Aquí, estos pueden ayudarte a concentrarte,\" dice. \"Tal vez te enseñen a ordenar tus tareas un poco más rápido la próxima vez.\" Le das una asentimiento de agradecimiento, aunque no puedes decidir si estás más molesto o divertido. Pero esos huevos definitivamente tienen potencial.",
|
||||
"questOtterBoss": "El trazador",
|
||||
"questOtterRageTitle": "Tareas pendientes!",
|
||||
"questOtterRageDescription": "Esta barra se llena cuando no completas tus diarios. Cuando esté llena, ¡el Plotter recuperará parte de su salud!",
|
||||
"questOtterRageEffect": "¡El Trazador lanza al aire trozos de tu lista de tareas! ¡El jefe recupera el 30% de su salud!",
|
||||
"questOtterDropOtterEgg": "Nutria (huevo)",
|
||||
"questOtterUnlockText": "Desbloquea los huevos de nutria para comprarlos en el mercado",
|
||||
"questJadeText": "Un gafe hastiado",
|
||||
"questJadeNotes": "e tiras fuera del camino justo a tiempo cuando la roca pasa a gran velocidad, casi rozándote los pies. Te levantas rápidamente y te das la vuelta para enfrentar a la figura de piedra, que ahora está allí con las manos en las caderas, respirando ligeramente agitado.<br><br>“¿Entonces, qué pasa aquí?” preguntas, tratando de recuperar el aliento. La figura, hecha completamente de piedra parecida al jade, parece menos agresiva y más... cansada.<br><br>“La vida es como esta roca,” dice, sacudiendo la cabeza. “Cada vez que pienso que estoy avanzando, simplemente se desplaza de vuelta. Empujo y empujo, pero nunca llego a ningún lado. Es interminable.”<br><br>Miras alrededor de la montaña, tomando en cuenta la vasta extensión de la misma. Las pilas de rocas, las pendientes empinadas, y los desafíos inminentes. “Lo entiendo ahora,” dices. “Es como intentar lavar los platos y hacer la lavandería, ¿verdad? Siento que no importa cuánto hagas, el desorden siempre regresa.”<br><br>La figura de piedra asiente lentamente. “Exactamente. Es desalentador. Intentas mantener todo en orden, pero es como si el mismo universo conspirara para hacer las cosas peor. Nunca termina.”<br><br>“Bueno,” respondes, “el truco está en tomarlo un paso a la vez. Desglosarlo en pedazos manejables. Incluso si la roca se desplaza hacia atrás, eso no significa que el progreso que hiciste haya desaparecido. Y a veces, tienes que concentrarte en pequeñas victorias para seguir adelante.”<br><br>La figura te mira con una expresión pensativa. “Tal vez tengas razón. Quizá deba intentarlo.” Vuelve a levantar la roca, esta vez moviéndose con más propósito y un poco menos de peso en sus hombros.<br><br>“Tómatelo con calma, y no olvides celebrar cuando muevas esa roca solo un poquito más,” añades sonriendo.<br><br>Con un gruñido de esfuerzo, empuja la roca hacia arriba de la pendiente nuevamente, esta vez avanzando de manera más estable.<br><br>“Gracias,” dice. “Creo que esto realmente puede funcionar.”<br><br>Hace una pausa y saca una pequeña piedra brillante de la superficie de la roca, entregándotela. “Por ayudarme a ver las cosas desde una perspectiva diferente. Tal vez este pequeño avance también te ayude a ti.”<br><br>Cuando tomas la piedra, sientes un pequeño impulso de motivación. Tal vez no todo necesita ser perfecto de inmediato. Está bien comenzar con solo unos pocos pasos.!\"",
|
||||
"questJadeBoss": "Un gafe hastiado",
|
||||
"questJadeDropJadePotion": "Poción de eclosión de jade",
|
||||
"questJadeUnlockText": "Desbloquea la poción de incubación de jade para comprarla en el mercado.",
|
||||
"questAlpacaText": "La alpaca con exceso de equipaje",
|
||||
"questAlpacaCompletion": "Afortunadamente, ninguno de los bolsos que la alpaca lanzó hacia ti era pesado, pero tus manos definitivamente están llenas. \"¿Qué fue eso?\" preguntas, molesto.<br><br>\"Si estás planeando un viaje con amigos, ¡no deberías cargar con tu carga solo! Estoy seguro de que tus amigos preferirían que les soltaras algunas cosas en vez de que colapses bajo el peso por ti mismo. De todos modos, puedes devolverme esos bolsos. Soy un animal de carga experimentado y he hecho mi punto,\" dice ella con un guiño. \"Pero quédate con ese paquete azul como recompensa por una lección bien aprendida. ¡Nos vemos en la cima!\"",
|
||||
"questAlpacaBoss": "La alpaca con exceso de equipaje",
|
||||
"questAlpacaRageTitle": "Pack-Quake2",
|
||||
"questAlpacaRageDescription": "Esta barra se llena cuando no completas tus Dailies. Cuando esté llena, la alpaca sobrecargada recuperará parte de su salud!",
|
||||
"questAlpacaRageEffect": "¡La alpaca sobrecargada te lanza equipaje! ¡El jefe recupera un 30% de su salud!",
|
||||
"questAlpacaDropAlpacaEgg": "Alpaca (huevo)",
|
||||
"questAlpacaUnlockText": "Desbloquea la compra de huevos de alpaca en el mercado",
|
||||
"questFungiNotes": "Ha sido una primavera lluviosa en Habitica y el suelo alrededor de los establos está esponjoso y húmedo. Notas que han aparecido bastantes setas a lo largo de las paredes y cercas de madera de los establos. Hay una niebla flotando, que no deja que el sol asome, y se siente algo desmotivante.<br><br>De entre la niebla ves la silueta del April Fool, nada en su habitual y animado estado.<br><br>\"Esperaba traerles a todos unas deliciosas pociones de magia de hongos para que puedan mantener a sus amigos hongos por siempre en mi día especial,\" dice, con una expresión alarmantemente seria. \"Pero esta niebla fría realmente me está afectando, me hace sentir demasiado cansado y sombrío para hacer mi magia habitual.\" <br><br>\"Oh no, siento escuchar eso,\" dices, notando tu propio ánimo cada vez más sombrío. \"Esta niebla realmente está volviendo el día lúgubre. Me pregunto de dónde habrá venido...\"<br><br>Un bajo rugido suena a través de los campos y ves una silueta emergiendo de la niebla. Te alarmas al ver una criatura gigante y de aspecto descontento hecha de hongos, y parece que la niebla está emanando de ella.<br><br>\"Aja,\" dice el Fool, \"Creo que este amigo hongo puede ser la fuente de nuestra tristeza. Vamos a ver si podemos invocar un poco de alegría para él y para nosotros.\"",
|
||||
"questFungiCompletion": "Tú y el April Fool se miran con una señal de alivio mientras el hongo se retira al bosque.<br><br>\"Ah,\" exclama el Fool, \"esa fue una melancolía micelial bastante fuerte. Me alegra que hayamos mejorado su ánimo, ¡y el nuestro también! Siento que mi energía vuelve. Ven conmigo y juntos haremos esas pociones de hongos.\"",
|
||||
"questCatText": "Un dilema desconcertante",
|
||||
"questCatBoss": "El Purrplexer",
|
||||
"questCatRageTitle": "Golpes furiosos",
|
||||
"questCatRageDescription": "Esta barra se llena cuando no completas tus Dailies. Cuando esté llena, el Purrplexer te quitará parte de los PM de tu grupo!",
|
||||
"questCatRageEffect": "El Purrplexer derriba de la mesa los objetos mágicos que has recogido. Los PM del grupo se reducen!",
|
||||
"questCatDropCatEgg": "Gato (huevo)",
|
||||
"questCatUnlockText": "Desbloquea huevos de gato para comprar en el mercado.",
|
||||
"questFungiText": "La seta de mal humor",
|
||||
"questFungiBoss": "La seta de mal humor",
|
||||
"questPinkMarbleUnlockText": "Desbloquea pociones de eclosión de canica rosa para comprar en el mercado.",
|
||||
"questGiraffeUnlockText": "Desbloquea huevos de jirafa para comprarlos en el mercado.",
|
||||
"questChameleonUnlockText": "Desbloquea los huevos de camaleón para comprarlos en el mercado",
|
||||
"questCrabText": "El cangrejo violinista",
|
||||
"questCrabCompletion": "Tú y el cangrejo logran trabajar juntos para poner todo en su lugar, terminando con una excelente madriguera de arena. El cangrejo se acomoda felizmente dentro.<br><br>\"¡Gracias!\" dice, acomodándose cómodamente. \"Ahora sí, este es un agujero hecho justo para mí. Finalmente puedo disfrutar de todas mis decoraciones perfectamente colocadas. Aquí, toma a estos pequeñitos como muestra de mi agradecimiento. ¡Es una oferta que no puedes rechazar!\"",
|
||||
"questCrabBoss": "El cangrejo violinista",
|
||||
"questCrabRageTitle": "Jugueteo de distracción",
|
||||
"questCrabRageEffect": "El Cangrejo Juguetón te distrae con adornos, ralentizando tu trabajo de excavación y drenando parte de tu magia. Los PM del grupo se reducen!",
|
||||
"questCrabDropCrabEgg": "Cangrejo (huevo)",
|
||||
"questCrabUnlockText": "Desbloquea huevos de cangrejo para comprarlos en el mercado.",
|
||||
"questGiraffeNotes": "Estás caminando por la alta hierba de la Sabana Sloenstedi, disfrutando de una agradable caminata por la naturaleza como un descanso de tus tareas. Al pasar por el paisaje ondulante, notas una colección de objetos a lo lejos. ¡Es una pila de instrumentos musicales, materiales de arte, equipos electrónicos y más! Te acercas para echar un mejor vistazo.<br><br>“¡Oye, ¿qué crees que estás haciendo?” grita una voz desde detrás de una acacia. Una jirafa alta e imponente aparece, usando un par de gafas elegantes, una guitarra y una cámara elegante colgada de su largo cuello. “¡Todo esto es mi equipo, ten cuidado y no toques nada!”<br><br>Notas polvo en muchos de los objetos. “¡Vaya, seguro que tienes muchos pasatiempos!” dices. “¿Puedes mostrarme algo de arte o tocarme una melodía?”<br><br>La cara de la jirafa se entristece mientras observa todo su equipo. “¡Tengo tantas de estas cosas pero no sé por dónde empezar! ¿Por qué no me das algo de tu motivación para que pueda tener la energía productiva que necesito para finalmente comenzar?”",
|
||||
"questVirtualPetCompletion": "Algunos cuidadosos ajustes de botones parecen haber satisfecho las misteriosas necesidades de la mascota virtual, que finalmente se calma y parece estar contenta.<br><br>De repente, en una explosión de confeti, el Bromista de Abril aparece con una canasta llena de extrañas pociones que emiten suaves pitidos.<br><br>“Qué buen momento, Bromista de Abril”, dice @Beffymaroo con una sonrisa irónica. “Sospecho que este gran compañero ruidoso es un conocido tuyo”.<br><br>“Eh, sí”, responde el Bromista, algo avergonzado. “Lamento mucho eso, y gracias a ambos por cuidar de Wotchimon. ¡Tomen estas pociones como muestra de agradecimiento! Con ellas, pueden traer de vuelta a sus mascotas virtuales cuando quieran”.<br><br>No estás 100% seguro de estar de acuerdo con tanto pitido, pero son tan adorables que vale la pena intentarlo!",
|
||||
"questChameleonNotes": "Es un hermoso día en una cálida y lluviosa esquina de los Bosques de Tareas. Estás en busca de nuevas adiciones para tu colección de hojas cuando, ¡de repente, una rama frente a ti cambia de color sin previo aviso! ¡Luego se mueve!<br><br>Tropezando hacia atrás, te das cuenta de que esto no es una rama en absoluto, ¡sino un enorme camaleón! Cada parte de su cuerpo sigue cambiando de color mientras sus ojos se mueven en diferentes direcciones.<br><br>“¿Estás bien?” le preguntas al camaleón.<br><br>“Ahhh, bueno,” dice, viéndose un poco desconcertado. “He estado tratando de camuflarme... pero es tan abrumador... ¡los colores siguen viniendo y yendo! Es difícil concentrarse solo en uno....”<br><br>“Aja,” dices, “creo que puedo ayudar. ¡Vamos a agudizar tu enfoque con un pequeño reto! ¡Prepara tus colores!”<br><br>“¡Allá vamos!” responde el camaleón.",
|
||||
"questChameleonCompletion": "Después de unos turnos animados, el Camaleón pasó por todos los colores del arco iris, combinando perfectamente cada color que le pediste.<br><br>“Vaya,” dice, “trabajar juntos y convertirlo en un juego realmente me ayudó a concentrarme. ¡Por favor, toma estos como recompensa, los has ganado! Enseña a estos pequeños cómo cambiar todos los colores del arco iris cuando nazcan.”",
|
||||
"questCrabNotes": "Es una cálida mañana soleada, y estás disfrutando de una visita a la playa para ponerte al día con algunos de los libros en tu lista de lectura de verano. Te asustas cuando casi pisas un cristal brillante cerca de un pequeño agujero en la arena.<br><br>“¡Ey, ten cuidado por dónde vas! ¡Estoy haciendo una madriguera aquí!” dice una voz. Un sorprendentemente grande cangrejo con un caparazón decorativo sale corriendo frente a tus dedos de los pies, chasqueando su pinza mientras habla.<br><br>“¿Hm, esto es una madriguera?” preguntas, mirando la depresión poco profunda. Hay conchas y cristales dispuestos alrededor, pero no parece mucho como un lugar para esconderse.<br><br>El cangrejo tartamudea. “¡Ey, esto es una zona libre de juicios! Estoy en eso, ¡estoy en eso!… Me entretuve un poco decorando. A veces, un cangrejo tiene que juguetear,” dice, ajustando una concha.<br><br>“¿Por qué no me prestas una pinza y ayudas si tienes algunas grandes ideas sobre cómo debería lucir una madriguera?”",
|
||||
"questCrabRageDescription": "Esta barra se llena cuando no completas tus diarios. Cuando esté llena, el Cangrejo Juguetón te quitará parte de los PM de tu grupo!",
|
||||
"questRaccoonNotes": "Es un cálido día de otoño en Habitica y estás dando un paseo tranquilo a lo largo de Conquest Creek. Ves algunas piedras semipreciosas bastante interesantes a lo largo de la orilla que serían perfectas para un proyecto que has estado planeando.<br><br>Comienzas a guardar tus mejores hallazgos en una pila debajo de un árbol. Extrañamente, cada vez que regresas, la pila parece hacerse más pequeña, no más grande...<br><br>Eso no puede ser. Miras a tu alrededor, pero nada raro destaca. Justo cuando te das la vuelta para regresar al arroyo, ves una pata parecida a una mano saliendo de un hueco en el tronco ¡y roba algunas de tus piedras!<br><br>\"¡Oye!\" gritas, \"¡He estado trabajando duro recogiendo esas! ¡No está bien tomarlas sin pedir permiso!\"<br><br>Una cara enmascarada aparece por el hueco y te sonríe. \"¡El que encuentra, se queda!\" dice el mapache. Se desliza de nuevo dentro del árbol, con bolsas de piedras en las manos. ¡Saltas tras él! Esas piedras valen la pena pelear por ellas.",
|
||||
"questDogNotes": "¡Has sido elegido para una expedición para mapear los sistemas de cuevas subterráneas de Habitica! Los investigadores en Habit City teorizan que podría haber nuevas herramientas para gestionar tareas o incluso criaturas no descubiertas en estas profundidades.<br><br>Mientras mapeas los túneles rocosos cerca de las estribaciones de las Montañas Errantes, notas un resplandor proveniente de una entrada escarpada por delante. A medida que te acercas ves... ¿juguetes? Animales de peluche y pelotas de goma están esparcidos por el suelo de la cueva. ¿Es eso lo que escuchas, un ladrido?<br><br>¡Un enorme perro de tres cabezas salta, lanzándose hacia el juguete que justo ibas a recoger! Te quedas paralizado, ¡casi pierdes un miembro allí! Pero... ¿las bocas del perro parecen demasiado ocupadas con los juguetes para atacar?<br><br>“¡Guau!” ladra una de las bocas del perro, dejando caer un juguete de mapache desgarrado. “¿Estás aquí para ayudarme a limpiar?? Realmente necesito poner orden, pero cada vez que recojo un juguete, ¡termino jugando con él! ¡Aquí, piensa rápido!!”<br><br>Lanza una pelota hacia ti, luego otra, y otra más. ¡Esas cabezas extra realmente hacen que esquivar sea todo un ejercicio!",
|
||||
"questOtterCompletion": "Mientras recogías los pedazos de tu lista, comenzaste a organizarlos según cuáles eran las tareas más importantes y terminaste con un lugar bastante manejable para empezar.<br><br>\"¡Ya veo!\" le dices al nutria, \"esa broma realmente me ayudó a pensar en qué tareas debía priorizar.\"<br><br>La nutria salpica, frotándose las mejillas con alegría, \"Me alegra que mi pequeño truco te haya ayudado a pensar en tus tareas de una manera diferente.\" Se zambulle bajo el agua, emergiendo cerca de ti, \"Recuerda hacer tus listas alcanzables. Las recompensas también ayudan, ¡así que toma estas!\"",
|
||||
"questCatNotes": "En este hermoso día te encuentras en el taller de la *Enchanted Efficiency Emporium* de Habit City. Se te ha asignado una tarea difícil: crear un nuevo hechizo mágico de motivación para ayudar a los Habiticans a completar sus metas con facilidad.<br><br>En una mesa frente a ti hay una variedad de objetos mágicos. Todos los tomos decían que deberían resonar juntos con energía productiva… pero hasta ahora no ha habido ni una chispa de motivación.<br><br>El chirrido de una puerta te alerta de que ha llegado un nuevo invitado a tu taller. Pies que corren y una ráfaga de pelusa se lanzan sobre la mesa. ¿Un… gato? Antes de que siquiera tengas oportunidad de elogiar lo esponjosa que es, ella levanta una pata hacia uno de los cristales que pusiste y… ¡lo derriba de la mesa!<br><br>“¡Oye!” gritas, “Eres realmente linda, pero estoy tratando de trabajar aquí…”<br><br>Te mira con sus hermosos ojos azules, inclina la cabeza y derriba un montón de hierbas de la mesa. “¡Estoy ayudando!” dice mientras ronronea.<br><br>Ves su pata alcanzando hacia el resto de los objetos que has reunido y te lanzas al suelo para atrapar el siguiente que va a caer!",
|
||||
"questCatCompletion": "Afortunadamente, has atrapado todo lo que la gata traviesa derribó de la mesa. Mientras te sientas en el suelo, notas un resplandor brillante proveniente de los objetos frente a ti. Al mirar hacia arriba, ves que los de la mesa también están reaccionando. ¡Colocarlos a diferentes alturas parece ser un avance en tu investigación!<br><br>\"Sabes, al final me ayudaste. Supongo que solo necesitaba un par de ojos frescos en mi tarea para salir del atolladero. Aunque, me hubiera gustado un poco de aviso antes de que comenzaras a mover cosas,\" le dices a la gata, dándole una palmadita suave.<br><br>\"Es una solicitud perfectamente razonable, ¡toma estos como disculpa!\" ronronea ella, empujando unos huevos de aspecto extraño hacia ti. \"Me alegra haber podido ayudarte a ver las cosas desde una perspectiva diferente.\"",
|
||||
"questJadeCompletion": "Después de innumerables contratiempos, ¡finalmente lograste hacer rodar la roca de jade hasta la cima de la montaña! La figura de piedra te alcanza y sonríe. Le da un suave empujón a la roca y, con horror, ves cómo rueda hasta la parte inferior.<br><br>\"¿Por qué hiciste eso? ¡Ahora alguien tendrá que hacerlo todo de nuevo!\" te alarmas.<br><br>\"El hecho de que tengas que hacer algo más de una vez no significa que tus logros sean en vano,\" dice la figura de piedra. \"Por ahora, concéntrate en lo que lograste y disfruta de una recompensa.\"<br><br>De repente, despiertas en tu sofá, con el teléfono caído al suelo. En su lugar, hay tres botellas llenas de jade fluido. Tal vez sea hora de limpiar los platos de hoy y luego tomar un descanso para ver cómo funcionan estas pociones en algunos huevos de mascota...",
|
||||
"questAlpacaNotes": "El sol brilla mientras subes por los senderos rocosos de las Montañas Meandering. Has estado planeando esta expedición para tu grupo de amigos durante meses, investigando cada aspecto del viaje. El peso de los suministros en tu espalda es tan grande que cada paso se siente más como una carga que como una aventura.<br><br>Escuchas un suave crujido de cascos en el sendero detrás de ti. Una alpaca esponjosa se acerca con una gigantesca pila de equipaje sobre su espalda.<br><br>\"Parece que vas un poco lento, amigo, ¡y todo lo que llevas es una mochilita!\" dice mientras te pasa.<br><br>\"Lo haces parecer tan fácil,\" suspiras. \"Planeé este viaje durante tanto tiempo, pero ahora que estamos aquí, ni siquiera me estoy divirtiendo...\"<br><br>\"No te deprimas,\" resopla la alpaca. \"¡Te voy a enseñar una lección que aprendí hace mucho tiempo!\" Da un salto, ¡y de repente un rollo de cama enrollado vuela hacia ti! ¿Cómo se supone que esto ayuda?!",
|
||||
"questVirtualPetText": "Caos virtual con el Bromista de Abril: El Beepening",
|
||||
"questVirtualPetNotes": "Es una tranquila y agradable mañana de primavera en Habitica, una semana después de un memorable Día de los Inocentes. Tú y @Beffymaroo están en los establos cuidando de sus mascotas (que aún están un poco confundidas por su tiempo pasado en el mundo virtual).<br><br>A lo lejos, escuchas un retumbo y un pitido, suave al principio, pero que aumenta de volumen como si se acercara. En el horizonte aparece una forma ovalada y, al aproximarse con pitidos cada vez más fuertes, te das cuenta de que es una gigantesca mascota virtual.<br><br>“Oh no”, exclama @Beffymaroo, “creo que el Bromista de Abril dejó algunos asuntos pendientes con este grandulón, parece que quiere atención”.<br><br>La mascota virtual pita con furia, haciendo un berrinche digital y avanzando cada vez más cerca.",
|
||||
"questVirtualPetBoss": "Pichimon",
|
||||
"questVirtualPetRageTitle": "El pitido",
|
||||
"questVirtualPetRageDescription": "Esta barra se llena cuando no completas tus Dailies. Cuando esté llena, ¡el Wotchimon te quitará parte del daño pendiente de tu grupo!",
|
||||
"questVirtualPetRageEffect": "Wotchimon emite un pitido molesto y su barra de felicidad desaparece de repente. Daño pendiente reducido.",
|
||||
"questVirtualPetDropVirtualPetPotion": "Poción para incubar mascotas virtuales",
|
||||
"questVirtualPetUnlockText": "Desbloquea la poción para incubar mascotas virtuales que se puede comprar en el mercado",
|
||||
"questPinkMarbleText": "Calmar al Cupido Corrompido",
|
||||
"questPinkMarbleNotes": "Después de escuchar rumores sobre una cueva en las Montañas Errantes que tiene rocas rosas y polvo saliendo de ella, tu grupo comienza a investigar. Al acercarse a la cueva, efectivamente hay una enorme nube de polvo rosa, y extrañamente, escuchas el grito de batalla de una voz diminuta, seguido por el sonido de rocas rompiéndose.<br><br>@Empress42 accidentalmente inhala algo del polvo y de repente se siente soñadora y menos productiva. “¡A mí también!” dice @QuartzFox, “¡De repente estoy fantaseando con una persona que apenas conozco!”<br><br>@a_diamond asoma la cabeza en la cueva y encuentra a un pequeño ser dando vueltas y triturando rocas de mármol rosa en polvo. “¡Cúbranlo! ¡Este Cupido ha sido corrompido y está usando su magia para causar limerencia e infatuaciones poco realistas! ¡Tenemos que someterlo!”",
|
||||
"questPinkMarbleCompletion": "Logras atrapar al pequeño finalmente; era mucho más duro y rápido de lo que esperabas. Antes de que se mueva nuevamente, le quitas su aljaba de flechas brillantes. Parpadea y de repente mira a su alrededor sorprendido. “Para escapar de mi propia tristeza y desamor por un tiempo, me pinché con una de mis flechas… ¡No recuerdo nada después de eso!”<br><br>Está a punto de huir de la cueva cuando nota que @Loremi ha tomado una muestra del polvo de mármol y sonríe. “¡Prueba usar un poco de este polvo de mármol rosa en una poción! Cuida a las mascotas que nazcan de ella y verás que las relaciones reales nacen de la comunicación, la confianza mutua y el cuidado. ¡Les deseo suerte y les deseo amor!”",
|
||||
"questPinkMarbleBoss": "Cupido",
|
||||
"questPinkMarbleRageTitle": "Ponche rosa",
|
||||
"questPinkMarbleRageDescription": "Esta barra se llena cuando no completas tus Dailies. Cuando esté llena, Cupido te quitará parte del daño pendiente de tu grupo!",
|
||||
"questPinkMarbleRageEffect": "`¡Cupido usa Pink Punch!` ¡Eso no ha sido nada cariñoso! Tus compañeros están desconcertados. Daño pendiente reducido.",
|
||||
"questPinkMarbleDropPinkMarblePotion": "Poción de eclosión de mármol rosa"
|
||||
}
|
||||
|
||||
@@ -143,21 +143,21 @@
|
||||
"achievementBoneToPickText": "A fait éclore tous les familiers squelettes classiques et de quête !",
|
||||
"achievementBoneToPickModalText": "Vous avez collecté tous les familiers squelette classiques et de quête !",
|
||||
"achievementPolarPro": "Pro polaire",
|
||||
"achievementPolarProText": "A fait éclore toutes les couleurs standard de familiers polaires : Ours, renard, pingouin, baleine et loup !",
|
||||
"achievementPolarProText": "A fait éclore toutes les couleurs standard de familiers polaires : ours, renard, pingouin, baleine et loup !",
|
||||
"achievementPolarProModalText": "Vous avez collecté tous les familiers polaires !",
|
||||
"achievementPlantParent": "Protecteur des plantes",
|
||||
"achievementPlantParentText": "A fait éclore toutes les couleurs standards de familiers plantes : Cactus et arbustes !",
|
||||
"achievementPlantParentText": "A fait éclore toutes les couleurs standards de familiers plantes : cactus et arbustes !",
|
||||
"achievementPlantParentModalText": "Vous avec collecté tous les familiers plantes !",
|
||||
"achievementDinosaurDynasty": "Dynastie des dinosaures",
|
||||
"achievementDinosaurDynastyText": "A fait éclore toutes les couleurs standard d'oiseaux et de dinosaures : faucon, hibou, perroquet, paon, pingouin, coq, ptérodactyle, T-Rex, tricératops et vélociraptor !",
|
||||
"achievementDinosaurDynastyModalText": "Vous avez collecté tous les animaux de compagnie d'oiseau et de dinosaure !",
|
||||
"achievementBonelessBossText": "A fait éclore toutes les couleurs standard de familiers invertébrés : coccinelle, papillon, seiche, nudibranche, pieuvre, escargot et araignée !",
|
||||
"achievementDinosaurDynastyModalText": "Vous avez collecté tous les animaux de compagnie d'oiseaux et de dinosaures !",
|
||||
"achievementBonelessBossText": "A fait éclore toutes les couleurs standards de familiers invertébrés : coccinelle, papillon, seiche, nudibranche, pieuvre, escargot et araignée !",
|
||||
"achievementBonelessBoss": "Boss désossé",
|
||||
"achievementBonelessBossModalText": "Vous avez collecté tous les familiers invertébrés !",
|
||||
"achievementDuneBuddy": "Amis des Dunes",
|
||||
"achievementDuneBuddyText": "A collecté toutes les couleurs de base des familiers du désert : Tatou, Cactus, Renard, Grenouille, Serpent et Araignée !",
|
||||
"achievementDuneBuddyText": "A collecté toutes les couleurs de base des familiers du désert : tatou, cactus, renard, grenouille, serpent et araignée !",
|
||||
"achievementRoughRider": "Chevaucheu·r·se Robuste",
|
||||
"achievementRoughRiderText": "A collecté toutes les couleurs de base des familiers et montures inconfortables : Cactus, Hérisson et Caillou !",
|
||||
"achievementRoughRiderText": "A collecté toutes les couleurs de base des familiers et montures inconfortables : cactus, hérisson et caillou !",
|
||||
"achievementDuneBuddyModalText": "Vous avez collecté tous les familiers du désert !",
|
||||
"achievementRodentRuler": "Roi/Reine des Rongeurs",
|
||||
"achievementRodentRulerModalText": "Vous avez collecté tous les familiers rongeurs !",
|
||||
|
||||
@@ -897,5 +897,14 @@
|
||||
"backgroundOldFashionedTeaShopNotes": "Profitez d'une boisson réconfortante dans une Boutique de Thé Vintage.",
|
||||
"backgroundMountainSceneWithBlossomsText": "Montagne scénique sous les Bourgeons",
|
||||
"backgrounds032025": "Ensemble 130 : Sortie Mars 2025",
|
||||
"backgroundMountainSceneWithBlossomsNotes": "Profitez d'une superbe vue et de parfums délicats d'une Montagne scénique sous les Bourgeons."
|
||||
"backgroundMountainSceneWithBlossomsNotes": "Profitez d'une superbe vue et de parfums délicats d'une Montagne scénique sous les Bourgeons.",
|
||||
"backgroundGardenWithFlowerBedsNotes": "Profitez des bourgeons du printemps dans un Jardin avec Parterres de Fleurs.",
|
||||
"backgrounds0420205": "Ensemble 131 : Sortie Avril 2025",
|
||||
"backgroundGardenWithFlowerBedsText": "Jardin avec Parterres de Fleurs",
|
||||
"backgrounds052025": "Ensemble 132 : Sortie Mai 2025",
|
||||
"backgroundTrailThroughAForestText": "Randonnée en Forêt",
|
||||
"backgroundTrailThroughAForestNotes": "Randonnez sur les Chemins d'une Forêt.",
|
||||
"backgrounds062025": "Ensemble 133 : Sortie en Juin 2025",
|
||||
"backgroundSummerSeashoreText": "Bord de Mer Estival",
|
||||
"backgroundSummerSeashoreNotes": "Faites des vagues sur ce Bord de Mer Estival."
|
||||
}
|
||||
|
||||
@@ -83,7 +83,7 @@
|
||||
"allocatePerPop": "Ajouter un point à votre attribut de perception",
|
||||
"allocateInt": "Points alloués en intelligence :",
|
||||
"allocateIntPop": "Ajouter un point à votre attribut d'intelligence",
|
||||
"noMoreAllocate": "Maintenant que vous avez atteint le niveau 100, vous ne gagnerez plus de Points d'Attributs. Vous pouvez continuer à monter en niveau, ou commencer une nouvelle aventure au niveau 1 en utilisant l'<<a href='/shops/market'>>Orbe de Renaissance</a> !",
|
||||
"noMoreAllocate": "Maintenant que vous avez atteint le niveau 100, vous ne gagnerez plus de Points d'Attributs. Vous pouvez continuer à monter en niveau, ou commencer une nouvelle aventure au niveau 1 en utilisant l'<a href='/shops/market'>>Orbe de Renaissance</a> !",
|
||||
"stats": "Attributs",
|
||||
"strength": "Force",
|
||||
"strText": "La force augmente votre chance de réaliser un \"coup critique\" aléatoire et d'obtenir l'or, l'expérience, et le butin qui vont avec. Elle aide également à infliger des dégâts aux boss.",
|
||||
|
||||
@@ -399,5 +399,16 @@
|
||||
"questEggOtterMountText": "Loutre",
|
||||
"questEggOtterAdjective": "perfide",
|
||||
"questEggOtterText": "Loutre",
|
||||
"hatchingPotionJade": "de Jade"
|
||||
"hatchingPotionJade": "de Jade",
|
||||
"questEggAlpacaText": "Alpaca",
|
||||
"questEggAlpacaMountText": "Alpaca",
|
||||
"questEggAlpacaAdjective": "un surchargé",
|
||||
"hatchingPotionBalloon": "Ballon",
|
||||
"wackyPotionAddlNotes": "Ne peut se transformer en Monture ni être utilisée sur les œufs de Familier de Quête.",
|
||||
"hatchingPotionCryptid": "Cyptide",
|
||||
"wackyPotionNotes": "Versez-la sur un œuf et il en sortira un Familier <%= potText(locale) %> Farfelu.",
|
||||
"questEggPlatypusText": "Ornithorynque",
|
||||
"questEggPlatypusMountText": "Ornithorynque",
|
||||
"questEggPlatypusAdjective": "organisé",
|
||||
"hatchingPotionOpal": "Opal"
|
||||
}
|
||||
|
||||
@@ -3101,8 +3101,8 @@
|
||||
"armorMystery202406Notes": "Hantez vous ennemi·e·s avec élégance et panache ! Ne confère aucun bonus. Équipement d'Abonnement Juin 2024.",
|
||||
"armorArmoireBlueStripedSwimsuitText": "Maillot de Bain Bleu Rayé",
|
||||
"armorArmoireBlueStripedSwimsuitNotes": "Qu'est-ce qui peut être plus excitant que de se batte contre des monstres marins à la plage ? Augmente la Constitution de <%= con %>. Armoire Enchantée : Ensemble Tenue de Plage (Objet 2 sur 4).",
|
||||
"gearItemsCompleted": "Vous possédez tous les équipements pour la classe <%= klass %> ! De nouveaux équipements seront déployés durant les Galas Saisonniers.",
|
||||
"moreArmoireGearAvailable": "En attendant, il reste <%= armoireCount %> éléments d'équipement dans l'Armoire Enchantée à découvrir !",
|
||||
"gearItemsCompleted": "Vous possédez tous les équipements pour la classe <%= klass %> ! De nouveaux équipements sortiront durant les Galas Saisonniers.",
|
||||
"moreArmoireGearAvailable": "En attendant, il reste <%= armoireCount %> éléments d'équipement dans l'Armoire enchantée à découvrir !",
|
||||
"moreArmoireGearComing": "L'Armoire Enchantée est également remplie d'un nouveau stock tous les mois !",
|
||||
"weaponSpecialSummer2024RogueNotes": "Utilisez les propres piquants aiguisés de vos ennemi·e·s contre e·ux·lles ! Augmente la Force de <%= str %>. Édition Limitée Équipement Été 2024.",
|
||||
"weaponSpecialSummer2024MageNotes": "Ces incroyables tentacules peuvent distraire, dévier et diriger la magie, tout à la fois. Augmente l'iIntelligence de <%= int %> et la Perception de <%= per %>. Édition Limitée Équipement Été 2024.",
|
||||
@@ -3301,5 +3301,69 @@
|
||||
"headMystery202503Notes": "Cette coiffure verdoyante convient parfaitement à un·e guerri·er·ère et défenseu·r·se de la planète. Ne confère aucun bonus. Équipement d'Abonnement Mars 2025.",
|
||||
"shieldSpecialSpring2025WarriorNotes": "Vous pouvez momentanément aveugler vos ennemi·e·s quand le soleil se reflète au bon moment sur ce bouclier. Profitez-en et prenez en de la graine ! Augmente la Constitution de <%= con %>. Équipement Édition Limitée Printemps 2025.",
|
||||
"shieldSpecialSpring2025HealerNotes": "Vous pouvez utiliser ce pétale spécial pour recueillir de la positivité et éloigner les pensées négatives. Profitez-en et prenez en de la graine ! Augmente la Constitution de <%= con %>. Équipement Édition Limitée Printemps 2025.",
|
||||
"eyewearMystery202503Notes": "Ce regard perçant va instiller la terreur dans tout·e combattant·e qui vous lancera un défi ! Ne confère aucun bonus. Équipement d'Abonnement Mars 2025."
|
||||
"eyewearMystery202503Notes": "Ce regard perçant va instiller la terreur dans tout·e combattant·e qui vous lancera un défi ! Ne confère aucun bonus. Équipement d'Abonnement Mars 2025.",
|
||||
"armorArmoireSillyOrangeTuxedoText": "Smoking Orange Rigolodicule",
|
||||
"armorArmoireSillyOrangeTuxedoNotes": "Votre propre costume \"du jour\" (ndlt : en Français dans le texte). Augmente la Constitution de <%= con %>. Armoire Enchantée : Ensemble Smoking Rigolodicule (Objet 1 sur 2).",
|
||||
"armorMystery202504Text": "Armure du Yéti Insaisissable",
|
||||
"armorMystery202504Notes": "Abominable ! Disons plutôt adorable ! Ne confère aucun bonus. Équipement d'Abonnement Avril 2025.",
|
||||
"armorArmoireSillierBlueTuxedoText": "Smoking Bleu encore plus Rigolodicule",
|
||||
"armorArmoireSillierBlueTuxedoNotes": "Envoyez du lourd dans cette tenue unique. Augmente la Force de <%= str %>. Armoire enchantée : Ensemble Smoking encore plus Rigolodicule (Objet 1 sur 2).",
|
||||
"headMystery202504Text": "Cagoule du Yéti Insaisissable",
|
||||
"headMystery202504Notes": "Arborez cette façade mystérieuse pour vous mélanger discrètement aux cryptides les plus mystérieu·x·ses. Ne confère aucun bonus. Équipement d'Abonnement Avril 2025.",
|
||||
"headArmoireSillyOrangeTophatNotes": "Va très bien avec une coupe au bol. Augmente la Force et la Constitution de <%= attrs %> chacune. Armoire enchantée : Ensemble Smoking Rigolodicule (Objet 2 sur 2).",
|
||||
"headArmoireSillyOrangeTophatText": "Haut-de-Forme Orange Rigolodicule",
|
||||
"headArmoireSillierBlueTophatText": "Haut-de-Forme Bleu encore plus Rigolodicule",
|
||||
"headArmoireSillierBlueTophatNotes": "Un peu de classe, un peu de sophistication. Augmente la Force et la Constitution de <%= attrs %> chacune. Armoire Enchantée : Ensemble Smoking encore plus Rigolodicule (Objet 2 sur 2).",
|
||||
"weaponArmoireGildedKnightsSpearText": "Lance d·u·e la Chevali·er·ère Doré·e",
|
||||
"weaponArmoireGildedKnightsSpearNotes": "Avec cette arme, vous êtes assuré·e que chacun·e payera toujours ses dettes. Augmente la Force de <%= str %>. Armoire enchantée : Ensemble Chevali·er·ère Doré·e (Objet 3 sur 3)",
|
||||
"armorArmoireGildedKnightsPlateNotes": "Dans cette armure, vous êtes quasiment invincible. Vous ennemi·e·s vont certainement vous entendre rugir ! Augmente la Perception de <%= per %>. Armoire Enchantée : Ensemble Chevali·er·ère Doré·e (Objet 2 sur 3)",
|
||||
"backMystery202505Notes": "Obtenez vos galons en virevoltant et batifolant avec ces ailes aérodynamiques. Ne confère aucun bonus. Équipement d'abonnement Mai 2025.",
|
||||
"headAccessoryMystery202505Text": "Antennes de Machaon Majestueux",
|
||||
"headAccessoryMystery202505Notes": "Dénichez les meilleurs coins de fleurs sauvages avec ces appendices hypersensibles. Ne confère aucun bonus. Équipement d'abonnement Mai 2025.",
|
||||
"backMystery202505Text": "Ailes de Machaon Majestueux",
|
||||
"armorArmoireGildedKnightsPlateText": "Armure d·u·e la Chevali·er·ère Doré·e",
|
||||
"headArmoireGildedKnightsHelmText": "Heaume d·u·e la Chevali·er·ère Dorée",
|
||||
"headArmoireGildedKnightsHelmNotes": "Rayonnez aussi puissamment que le soleil dans la noirceur des combats. Augmente la Constitution de <%= con %>. Armoire Enchantée : Ensemble Chevali·er·ère Doré·e (Objet 1 sur 3)",
|
||||
"armorArmoireBeekeepersSuitText": "Costume d'Apiculture",
|
||||
"headSpecialSummer2025WarriorText": "Heaume Pétoncle",
|
||||
"headSpecialSummer2025WarriorNotes": "Impénétrable et parfaitement pointu, ce heaume vous protègera même des étoiles de mer. Augmente la Force de <%= str %>. Équipement Édition Limitée Été 2025.",
|
||||
"headSpecialSummer2025RogueText": "Masque Calamar",
|
||||
"headSpecialSummer2025RogueNotes": "Votre vue va s'améliorer dès que vous aurez enfilé ce masque. Augmente la Perception de <%= per %>. Équipement Édition Limitée Été 2025.",
|
||||
"headSpecialSummer2025HealerText": "Casque Clione",
|
||||
"headSpecialSummer2025HealerNotes": "Félicitations, vous êtes désormais un papillon de mer. Augmente l'Intelligence de <%= int %>. Équipement Édition Limitée Été 2025.",
|
||||
"headSpecialSummer2025MageText": "Coiffe Labre Exquis",
|
||||
"headSpecialSummer2025MageNotes": "Tou·te·s seront subjugué·e·s par la façon dont vos nageoires ondulent avec les courants. Augmente la Perception de <%= per %>. Équipement Édition Limitée Été 2025.",
|
||||
"headArmoireBeekeepersHatText": "Chapeau et Voile d'Apiculture",
|
||||
"headArmoireBeekeepersHatNotes": "Protégez votre visage en prenant soin de vos bourdonnantes amies. Augmente la Perception de <%= per %>. Armoire Enchantée : Ensemble Apicult·eur·rice (Objet 1 sur 4)",
|
||||
"weaponSpecialSummer2025WarriorNotes": "Impossible de savoir l'âge de cet artefact, mais il vous accompagnera à travers de grandes épreuves. Augmente la Force de <%= str %>. Équipement Édition Limitée Été 2025.",
|
||||
"weaponSpecialSummer2025WarriorText": "Lance Pétoncle",
|
||||
"weaponSpecialSummer2025HealerNotes": "Faites en mouvement en huit pour avancer et faire de grands progrès en accomplissant vos tâches. Augmente l'Intelligence de <%= int %>. Équipement Édition Limitée Été 2025.",
|
||||
"weaponSpecialSummer2025MageNotes": "Restez branché·e grâce à vos talents et vos compétences pour aborder différentes tâches. Augmente l'Intelligence de <%= int %> et la Perception de <%= per %>. Équipement Édition Limitée Été 2025",
|
||||
"armorSpecialSummer2025WarriorNotes": "Cette armure vous rend non seulement résistant·e, mais également agile. L'attaque ou la fuite, le choix vous appartient ! Augmente la Constitution de <%= con %>. Équipement Édition Limitée Été 2025.",
|
||||
"armorSpecialSummer2025RogueNotes": "Non seulement ce costume changera de couleurs selon votre volonté, mais il peut en plus d'expulser un nuage d'encre. Faites diversion ou cachez-vous, le choix vous appartient ! Augmente la Perception de <%= per %>. Équipement Édition Limitée Été 2025.",
|
||||
"armorArmoireBeekeepersSuitNotes": "Restez en sécurité tandis que vous observez vos dures travailleuses. Augmente la Constitution de <%= con %>. Armoire Enchantée : Ensemble Apicult·eur·rice (Objet 2 sur 4)",
|
||||
"weaponArmoireBeekeepersSmokerNotes": "Utilisez cet objet pour apaiser vos abeilles et récolter leur miel. Elles ne le vivront pas mal. En vrai, on pourrait tou·te·s bénéficier des quelques minutes de calme de temps en temps. Augmente l'Intelligence de <%= int %>. Armoire Enchantée : Ensemble Apicult·eur·rice (Objet 3 sur 4)",
|
||||
"weaponArmoireBeekeepersSmokerText": "Enfumoir",
|
||||
"armorSpecialSummer2025WarriorText": "Armure Pétoncle",
|
||||
"armorSpecialSummer2025RogueText": "Costume Calamar",
|
||||
"armorSpecialSummer2025HealerText": "Costume de Clione",
|
||||
"armorSpecialSummer2025HealerNotes": "Non seulement ce costume vous rend gracieu·x·se, mais il vous donne en plus une silhouette fuselée. Laissez vous dériver ou nagez droit devant vous, le choix vous appartient ! Augmente la Constitution de <%= con %>. Équipement Édition Limitée Été 2025.",
|
||||
"armorSpecialSummer2025MageText": "Costume Labre Exquis",
|
||||
"armorSpecialSummer2025MageNotes": "Non seulement ce costume arbore de magnifiques couleurs, mais il vous permet aussi de glisser avec grâce au fil de l'eau. Nagez ou dansez, le choix vous appartient ! Augmente l'Intelligence de <%= int %>. Équipement Édition Limitée Été 2025.",
|
||||
"weaponSpecialSummer2025RogueText": "Tentacule de Calamar",
|
||||
"weaponSpecialSummer2025RogueNotes": "Cette tentacule va fortement s'agripper à vos objectifs pour que vous ne perdiez pas votre élan en achevant vos tâches. Augmente la Force de <%= str %>. Équipement Édition Limitée Été 2025.",
|
||||
"weaponSpecialSummer2025HealerText": "Pagaie Aile de Clione",
|
||||
"weaponSpecialSummer2025MageText": "Branche de Corail",
|
||||
"shieldSpecialSummer2025WarriorText": "Bouclier en coquille de pétoncle",
|
||||
"shieldSpecialSummer2025WarriorNotes": "Les couleurs sont magnifiques, mais les crêtes sont dangereuses. Ennemi·e·s, gare à vous ! Augmente la Constitution de <%= con %>. Équipement Édition Limitée Été 2025.",
|
||||
"shieldSpecialSummer2025RogueText": "Tentacule de Calamar",
|
||||
"shieldSpecialSummer2025HealerText": "Bouclier Clione",
|
||||
"shieldSpecialSummer2025HealerNotes": "Ce bouclier parait simple, mais il possède des propriétés nocives. Ennemi·e·s, gare à vous ! Augmente la Constitution de <%= con %>. Équipement Édition Limitée Été 2025.",
|
||||
"shieldMystery202506Text": "Bouclier Rayonnement Solaire",
|
||||
"shieldMystery202506Notes": "Dissipez les ténèbres et répandez des rayons chaleureux et joyeux où que vous soyez. Ne confère aucun bonus. Équipement d'abonnement Juin 2025.",
|
||||
"shieldArmoireBeekeepersHiveText": "Ruche",
|
||||
"shieldArmoireBeekeepersHiveNotes": "Les ruches servent à la fois de domicile et de lieu de travail. Il faudrait peut-être discuter d'un bon équilibre entre vie professionnelle et vie privée avec vos abeilles. Augmente la Force de <%= str %>. Armoire Enchantée : Ensemble d'Apicult·eur·rice (Objet 4 sur 4)",
|
||||
"backMystery202506Text": "Auréole de Rayonnement Solaire",
|
||||
"backMystery202506Notes": "Apporte une douce chaleur à vos tâches quotidiennes. Ne confère aucun bonus. Équipement d'Abonnement Juin 2025.",
|
||||
"shieldSpecialSummer2025RogueNotes": "Ce tentacule sembles fébrile, mais ses ventouses ont une sacrée poigne. Ennemi·e·s, gare à vous ! Augmente la Force de <%= str %>. Équipement Édition Limitée Été 2025."
|
||||
}
|
||||
|
||||
@@ -274,5 +274,9 @@
|
||||
"spring2025PlumeriaHealerSet": "Ensemble Guérisseu·r·se Plumeria",
|
||||
"spring2025MantisMageSet": "Ensemble Mage Mante Religieuse",
|
||||
"spring2025SunshineWarriorSet": "Ensemble Guerri·er·ère Solaire",
|
||||
"spring2025CrystalPointRogueSet": "Ensemble Voleu·r·se à Pointe de Cristal"
|
||||
"spring2025CrystalPointRogueSet": "Ensemble Voleu·r·se à Pointe de Cristal",
|
||||
"summer2025SquidRogueSet": "Ensemble Voleu·r·se Calamar",
|
||||
"summer2025SeaAngelHealerSet": "Ensemble Guérisseu·r·se Clione",
|
||||
"summer2025FairyWrasseMageSet": "Ensemble Mage Labre Exquis",
|
||||
"summer2025ScallopWarriorSet": "Ensemble Guerri·er·ère Pétoncle"
|
||||
}
|
||||
|
||||
@@ -834,5 +834,31 @@
|
||||
"questOtterNotes": "Les listes \"à faire\", c'est génial ! On peut passer des heures à inscrire méticuleusement toutes les choses à faire et se sentir producti·f·ve sans accomplir les tâches en question. D'ailleurs, vous fourrez votre liste de trois pages dans votre poche. Il est temps d'aller faire une petit balade !<br><br>Vous vous engagez vers la Rivière de la Routine pour vous promener le long de la berge. Voilà ce qu'il vous manquait pour vous y mettre ! Il est temps de consulter votre liste \"à faire\" et-ah ! Une bourrasque de vent emporte votre liste vers l'eau !<br><br>Juste avant que votre liste ne soit immergée, une loutre sort la tête de l'eau et intercepte votre précieuse liste. Ouf ! Il saisit celle-ci dans ses pattes, la détaille, puis un rictus vient lui fendre le visage... Oh-oh.<br><br>\"Hmmm, fredonne-t-il en retournant votre papier dans tous les sens, On dirait que tu as besoin d'aide pour définir tes priorités.\" Scccrrtch.<br><br>La loutre vient de déchirer votre liste bien-aimée en petits morceaux ! \"Si tu veux réussir à faire tes tâches, tu vas devoir dans un premier temps choisir les plus importantes !\" dit-il, en lançant des petits bouts de papiers en l'air.",
|
||||
"questJadeNotes": "Vous êtes dans votre domicile, et regardez la pile de vaisselle sale dans l'évier. Le tas de linge sale aux quatre coins de la pièces. Les verres vides et les papiers de friandises autour de votre bureau...<br><br>Vous soupirez. \"Pourquoi y a-t-il toujours plus de vaisselle... Le bazar ne s'arrête jamais.\" C'est tellement démotivant. Vous vous retrouvez donc affalé·e sur le canapé, en train de scroller sans but. Va savoir depuis combien de temps vous êtes là...<br><br>En levant les yeux de votre téléphone, tout est vert. Vous n'êtes plus dans votre salon. Vous vous levez, et vous trouvez au cœur d'une montagne verdoyante.<br><br>Du mouvement au loin attire votre attention. Une silhouette de pierre verte grogne en poussant un rocher sur une côte rocailleuse. Le golem avance, mais il glisse légèrement et le rocher déboule dans la pente, dans votre direction !<br><br>Il vous repère, court puis arrête l'énorme morceau de jade qui a manqué de vous écraser ! \"Alors, tu penses que faire la vaisselle, c'est éreintant ? crie-t-il, essaye ça alors !\"",
|
||||
"questOtterCompletion": "Après avoir attrapé toutes les pièces de votre liste, vous les réorganisez par ordre d'importance et vos tâches semblent plus simples à commencer !<br><br>\"J'y vois plus clair ! dites-vous à la loutre, ce tour que tu m'as joué m'a vraiment permis de revoir mes priorités.\"<br><br>La loutre batifole gaiement dans l'eau en frottant ses joues avec malice : \"Je suis content que mon plan machiavélique t'ait aidé à réfléchir différemment à tes tâches.\" Il plonge sous l'eau, puis remonte à la surface : \"N'oublie pas de faire en sorte de pouvoir accomplir tes listes. Les récompenses, ça aide aussi, alors prends ce cadeau !\"",
|
||||
"questJadeCompletion": "Après de nombreuses épreuves, vous avez miraculeusement réussi à rouler le rocher de jade en haut de la montagne ! Le golem vous rattrape et vous sourit. Il pousse légèrement le rocher que vous regardez avec effarement rouler vers le bas.<br><br>\"Pourquoi avoir fait ça ? Quelqu'un d'autre tout recommencer maintenant !\" trépignez-vous.<br><br>\"Ce n'est pas parce que tu as quelque chose à faire plusieurs fois que tes réussites n'ont pas de sens, dit le golem. Pour le moment, concentre-toi sur ce que tu as accompli et profite de ta récompense !\"<br><br>Vous vous réveillez en sursaut sur votre canapé, votre téléphone au sol. Dans votre main se trouvent maintenant trois bouteilles remplies de jade liquide ! Peut-être est-il temps de faire la vaisselle, puis de vous accorder une pause pour voir quel effet a cette potion sur des œufs de familier..."
|
||||
"questJadeCompletion": "Après de nombreuses épreuves, vous avez miraculeusement réussi à rouler le rocher de jade en haut de la montagne ! Le golem vous rattrape et vous sourit. Il pousse légèrement le rocher que vous regardez avec effarement rouler vers le bas.<br><br>\"Pourquoi avoir fait ça ? Quelqu'un d'autre tout recommencer maintenant !\" trépignez-vous.<br><br>\"Ce n'est pas parce que tu as quelque chose à faire plusieurs fois que tes réussites n'ont pas de sens, dit le golem. Pour le moment, concentre-toi sur ce que tu as accompli et profite de ta récompense !\"<br><br>Vous vous réveillez en sursaut sur votre canapé, votre téléphone au sol. Dans votre main se trouvent maintenant trois bouteilles remplies de jade liquide ! Peut-être est-il temps de faire la vaisselle, puis de vous accorder une pause pour voir quel effet a cette potion sur des œufs de familier...",
|
||||
"questAlpacaRageDescription": "Cette barre se remplit quand vous n'effectuez pas vos Quotidiennes. Quand elle sera pleine, L'Alpaca Surchargée regagnera des points de vie !",
|
||||
"questAlpacaNotes": "Le soleil darde ardemment durant votre randonnée sur les sentiers escarpés des Montagnes des Méandres. Vous avez préparé cette expédition pour votre groupe d'ami·e·s depuis des mois, étudiant les moindres détails pour ce voyage. Le poids du matériel sur votre dos est si lourd à porter, chaque pas ressemble plus à une punition qu'à une aventure.<br><br>Vous entendez de doux craquements de sabots venant du chemin derrière vous. Une alpaca particulièrement duveteuse s'approche de vous avec un énorme tas de bagages sur son dos.<br><br>\"Il semblerait que vous soyez un peu à la traîne mon ami·e, alors que vous ne portez qu'un petit sac à dos !\" dit-elle en vous dépassant.<br><br>\"Ç'a l'air si simple pour vous ! soupirez-vous, J'ai préparé ce voyage depuis longtemps, mais maintenant que je suis là, je ne m'amuse même pas...\"<br><br>\"Ne vous découragez pas, s'ébroue l'alpaca, je vais vous apprendre une leçon que j'ai retenue il y a bien longtemps !\" Elle se cabre, et envoie vers vous un sac de couchage enroulé ! En quoi c'est censé aider ça ? !",
|
||||
"questAlpacaCompletion": "Heureusement, aucun des sacs envoyés par l'alpaca n'étaient très lourds, mais vous en avez tout de même plein le dos. \"C'était quoi le but là ?\" demandez-vous, énervé·e.<br><br>\"Si vous avez l'intention de faire ce voyage avec vos ami·e·s, vous ne devriez pas avoir à en porter seul·e le fardeau ! Je suis sûre que vos ami·e·s préfèreraient que vous répartissiez la charge plutôt que de vous effondrer sous son poids. Bref, vous pouvez me rendre ces sacs. Je suis une bête de somme expérimentée et je pense que vous avez compris mon intention, dit-elle en vous lançant un clin d'œil. Mais gardez ce paquet bleu comme récompense pour cette leçon durement apprise. On se retrouve au sommet !\"",
|
||||
"questAlpacaText": "L'Alpaca Surchargée",
|
||||
"questAlpacaBoss": "L'Alpaca Surchargée",
|
||||
"questAlpacaRageTitle": "Tremblement de Surcharge",
|
||||
"questAlpacaRageEffect": "L'Alpaca Surchargée vous lance des bagages ! La boss regagne 30% des ses points de vie !",
|
||||
"questAlpacaDropAlpacaEgg": "Alpaca (œuf)",
|
||||
"questAlpacaUnlockText": "Débloque la possibilité d'acquérir des Œufs d'Alpaca au Marché",
|
||||
"questPlatypusText": "L'Ornithorynque Organisée",
|
||||
"questPlatypusRageDescription": "Cette barre se remplit quand vous n'effectuez pas vos Quotidiennes. Quand elle sera pleine, l'Ornithorynque Organisée retirera une partie des MP de votre équipe !",
|
||||
"questPlatypusNotes": "Malgré une magnifique journée à la Crique de la Conquête, vous êtes embêté·e par la feuille d'exercices que vous tenez dans votre main. Pourquoi faut-il que les aventures les plus cools soient toujours interrompues par des devoirs ? Vous êtes plongé·e dans la cinquième question au sujet des écosystèmes de rivière, qui vous demande une réponse rédigée :<br><br>\"Décrivez comment un animal peut s'adapter à la vie en rivière ? Ugh, je sais pas...\"<br><br>Après avoir passé trente minutes à réfléchir, sans succès, à la manière de répondre à cette question, vous entendez des bruits d'éclaboussures de frustration sur la berge.<br><br>\"Argh,\" dit une voix bouillonnante à la surface de l'eau. Une ornithorynque à l'air exténué en sort. \"Ce terrier ne ressemble à rien ! À chaque fois que je recommence, il y a quelque chose qui cloche.\" Elle plonge à nouveau sous l'eau et sa large queue plate vous éclabousse d'eau en pleine figure.<br><br>\"Attends, ne détruis pas tout !\" criez-vous, alors qu'une gerbe d'eau vous asperge à nouveau. Vous pourriez l'aider, et trouver de l'inspiration dans le même temps !",
|
||||
"questPlatypusCompletion": "Après un échange éreintant d'éclaboussures d'eau et quelques mots d'encouragement de votre part, l'ornithorynque s'arrête enfin et revient à la surface en poussant un soupir.<br><br>\"Tu as sûrement raison. Si j'espère atteindre la perfection, je n'en finirai jamais ! Je pourrai toujours faire des ajustements au fur et à mesure. On dirait que tu t'y connais un peu en perfectionnisme.\"<br><br>Vous regardez votre feuille de travail détrempée : \"Ouais...\"<br><br>\"Ah, désolée, dit l'ornithorynque. Tiens, pour me faire pardonner, prends quelques-uns de ces œufs que j'ai trouvés dans la boue.\"",
|
||||
"questPlatypusBoss": "L'Ornithorynque Organisée",
|
||||
"questPlatypusRageTitle": "Éclaboussure Énervante",
|
||||
"questPlatypusRageEffect": "L'Ornithorynque Organisée plonge sous l'eau et vous asperge ! Les MP de votre équipe sont diminués !",
|
||||
"questPlatypusDropPlatypusEgg": "Ornithorynque (œuf)",
|
||||
"questPlatypusUnlockText": "Débloque la possibilité d'acquérir des Œufs d'Ornithorynque au Marché",
|
||||
"questOpalText": "La Légende des Opales Obscures",
|
||||
"questOpalCollectOpalGems": "Gemme d'Opale",
|
||||
"questOpalUnlockText": "Débloque la possibilité d'acquérir les Potions d'Éclosion Opale au Marché",
|
||||
"questOpalDropOpalPotion": "Potion d'Éclosion Opale",
|
||||
"questOpalNotes": "Les érudit·e·s d'Habitica recherchent depuis longtemps la légendaire Potion d'Éclosion Magique d'Opale. Une potion si puissante qu'elle confère aux familiers et aux montures une couleur ardente et une brillance incomparable à celles de toute autre pierre précieuse ou métal précieux. On raconte même que la magie des opales améliore la planification, la perspicacité et la créativité. Quel atout pour vos tâches !<br><br>Après de longues recherches, vous avez peut-être enfin trouvé la réponse. Les Potions d'Opale nécessitent la forge de pierres d'opale brutes avec les runes magiques de Balance et Mercure. Ces objets anciens ne se trouvent qu'à un seul endroit... les ruines périlleuses de la cité perdue, aux confins du Désert du Temps Perdu.<br><br>Vous arrivez aux ruines après avoir chevauché votre monture la plus puissante pendant des jours à travers un terrain reculé et accidenté. Parmi les pierres brisées et blanchies par le soleil, vous apercevez une lueur éclatante. La recherche commence !",
|
||||
"questOpalCompletion": "Enfin, fatigué·e et poussiéreu·x·se, vous trouvez les dernières runes et l'opale nécessaires à la création de la Potion d'Éclosion Magique.<br><br>Vous commencez le processus de forge dès votre retour dans la ville principale d'Habitica. Le pouvoir des runes et des opales emplit votre laboratoire d'une lumière arc-en-ciel ! En un rien de temps, vous obtenez trois potions et vous avez hâte de faire éclore de nouveaux amis colorés.",
|
||||
"questOpalCollectLibraRunes": "Rune de la Balance",
|
||||
"questOpalCollectMercuryRunes": "Rune de Mercure"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user