Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| a018588021 |
@@ -1,108 +0,0 @@
|
||||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = '20221213_pet_group_achievements';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
const set = {
|
||||
migration: MIGRATION_NAME,
|
||||
};
|
||||
|
||||
if (user && user.items && user.items.pets) {
|
||||
const pets = user.items.pets;
|
||||
if (pets['BearCub-Base']
|
||||
&& pets['BearCub-CottonCandyBlue']
|
||||
&& pets['BearCub-CottonCandyPink']
|
||||
&& pets['BearCub-Desert']
|
||||
&& pets['BearCub-Golden']
|
||||
&& pets['BearCub-Red']
|
||||
&& pets['BearCub-Shade']
|
||||
&& pets['BearCub-Skeleton']
|
||||
&& pets['BearCub-White']
|
||||
&& pets['BearCub-Zombie']
|
||||
&& pets['Fox-Base']
|
||||
&& pets['Fox-CottonCandyBlue']
|
||||
&& pets['Fox-CottonCandyPink']
|
||||
&& pets['Fox-Desert']
|
||||
&& pets['Fox-Golden']
|
||||
&& pets['Fox-Red']
|
||||
&& pets['Fox-Shade']
|
||||
&& pets['Fox-Skeleton']
|
||||
&& pets['Fox-White']
|
||||
&& pets['Fox-Zombie']
|
||||
&& pets['Penguin-Base']
|
||||
&& pets['Penguin-CottonCandyBlue']
|
||||
&& pets['Penguin-CottonCandyPink']
|
||||
&& pets['Penguin-Desert']
|
||||
&& pets['Penguin-Golden']
|
||||
&& pets['Penguin-Red']
|
||||
&& pets['Penguin-Shade']
|
||||
&& pets['Penguin-Skeleton']
|
||||
&& pets['Penguin-White']
|
||||
&& pets['Penguin-Zombie']
|
||||
&& pets['Whale-Base']
|
||||
&& pets['Whale-CottonCandyBlue']
|
||||
&& pets['Whale-CottonCandyPink']
|
||||
&& pets['Whale-Desert']
|
||||
&& pets['Whale-Golden']
|
||||
&& pets['Whale-Red']
|
||||
&& pets['Whale-Shade']
|
||||
&& pets['Whale-Skeleton']
|
||||
&& pets['Whale-White']
|
||||
&& pets['Whale-Zombie']
|
||||
&& pets['Wolf-Base']
|
||||
&& pets['Wolf-CottonCandyBlue']
|
||||
&& pets['Wolf-CottonCandyPink']
|
||||
&& pets['Wolf-Desert']
|
||||
&& pets['Wolf-Golden']
|
||||
&& pets['Wolf-Red']
|
||||
&& pets['Wolf-Shade']
|
||||
&& pets['Wolf-Skeleton']
|
||||
&& pets['Wolf-White']
|
||||
&& pets['Wolf-Zombie'] {
|
||||
set['achievements.polarPro'] = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.update({ _id: user._id }, { $set: set }).exec();
|
||||
}
|
||||
|
||||
export default async function processUsers () {
|
||||
let query = {
|
||||
// migration: { $ne: MIGRATION_NAME },
|
||||
'auth.timestamps.loggedin': { $gt: new Date('2022-11-01') },
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1]._id,
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
@@ -1,144 +0,0 @@
|
||||
/* eslint-disable no-console */
|
||||
const MIGRATION_NAME = '20221227_nye';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
import { v4 as uuid } from 'uuid';
|
||||
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count++;
|
||||
|
||||
const set = { migration: MIGRATION_NAME };
|
||||
let push;
|
||||
|
||||
if (typeof user.items.gear.owned.head_special_nye2021 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2022'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye2022',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2020 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2021'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye2021',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2019 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2020'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye2020',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2018 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2019'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye2019',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2017 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2018'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye2018',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2016 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2017'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye2017',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2015 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2016'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye2016',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
} else if (typeof user.items.gear.owned.head_special_nye2014 !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2015'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye2015',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
} else if (typeof user.items.gear.owned.head_special_nye !== 'undefined') {
|
||||
set['items.gear.owned.head_special_nye2014'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye2014',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
} else {
|
||||
set['items.gear.owned.head_special_nye'] = false;
|
||||
push = [
|
||||
{
|
||||
type: 'marketGear',
|
||||
path: 'gear.flat.head_special_nye',
|
||||
_id: uuid(),
|
||||
},
|
||||
];
|
||||
}
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.update({_id: user._id}, {$set: set, $push: {pinnedItems: {$each: push}}}).exec();
|
||||
}
|
||||
|
||||
export default async function processUsers () {
|
||||
let query = {
|
||||
'auth.timestamps.loggedin': {$gt: new Date('2022-12-01')},
|
||||
migration: {$ne: MIGRATION_NAME},
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1],
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
@@ -1,88 +0,0 @@
|
||||
/* eslint-disable no-console */
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const MIGRATION_NAME = '20230123_habit_birthday';
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count += 1;
|
||||
|
||||
const inc = { 'balance': 5 };
|
||||
const set = {};
|
||||
const push = {};
|
||||
|
||||
set.migration = MIGRATION_NAME;
|
||||
|
||||
if (typeof user.items.gear.owned.armor_special_birthday2022 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2023'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2021 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2022'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2020 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2021'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2019 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2020'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2018 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2019'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2017 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2018'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2016 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2017'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday2015 !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2016'] = true;
|
||||
} else if (typeof user.items.gear.owned.armor_special_birthday !== 'undefined') {
|
||||
set['items.gear.owned.armor_special_birthday2015'] = true;
|
||||
} else {
|
||||
set['items.gear.owned.armor_special_birthday'] = true;
|
||||
}
|
||||
|
||||
push.notifications = {
|
||||
type: 'ITEM_RECEIVED',
|
||||
data: {
|
||||
icon: 'notif_head_special_nye',
|
||||
title: 'Birthday Bash Day 1!',
|
||||
text: 'Enjoy your new Birthday Robe and 20 Gems on us!',
|
||||
destination: 'equipment',
|
||||
},
|
||||
seen: false,
|
||||
};
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.update({_id: user._id}, {$inc: inc, $set: set, $push: push}).exec();
|
||||
}
|
||||
|
||||
export default async function processUsers () {
|
||||
let query = {
|
||||
migration: {$ne: MIGRATION_NAME},
|
||||
'auth.timestamps.loggedin': {$gt: new Date('2022-12-23')},
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1],
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
@@ -1,69 +0,0 @@
|
||||
/* eslint-disable no-console */
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const MIGRATION_NAME = '20230127_habit_birthday_day5';
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count += 1;
|
||||
|
||||
const set = {};
|
||||
const push = {};
|
||||
|
||||
set.migration = MIGRATION_NAME;
|
||||
|
||||
set['items.gear.owned.back_special_anniversary'] = true;
|
||||
set['items.gear.owned.body_special_anniversary'] = true;
|
||||
set['items.gear.owned.eyewear_special_anniversary'] = true;
|
||||
|
||||
push.notifications = {
|
||||
type: 'ITEM_RECEIVED',
|
||||
data: {
|
||||
icon: 'notif_head_special_nye',
|
||||
title: 'Birthday Bash Day 5!',
|
||||
text: 'Come celebrate by wearing your new Habitica Hero Cape, Collar, and Mask!',
|
||||
destination: 'equipment',
|
||||
},
|
||||
seen: false,
|
||||
};
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.update({_id: user._id}, {$set: set, $push: push}).exec();
|
||||
}
|
||||
|
||||
export default async function processUsers () {
|
||||
let query = {
|
||||
migration: {$ne: MIGRATION_NAME},
|
||||
'auth.timestamps.loggedin': {$gt: new Date('2022-12-23')},
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1],
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
@@ -1,79 +0,0 @@
|
||||
/* eslint-disable no-console */
|
||||
import { v4 as uuid } from 'uuid';
|
||||
import { model as User } from '../../../website/server/models/user';
|
||||
|
||||
const MIGRATION_NAME = '20230201_habit_birthday_day10';
|
||||
const progressCount = 1000;
|
||||
let count = 0;
|
||||
|
||||
async function updateUser (user) {
|
||||
count += 1;
|
||||
|
||||
const set = {
|
||||
migration: MIGRATION_NAME,
|
||||
'purchased.background.birthday_bash': true,
|
||||
};
|
||||
const push = {
|
||||
notifications: {
|
||||
type: 'ITEM_RECEIVED',
|
||||
data: {
|
||||
icon: 'notif_head_special_nye',
|
||||
title: 'Birthday Bash Day 10!',
|
||||
text: 'Join in for the end of our birthday celebrations with 10th Birthday background, Cake, and achievement!',
|
||||
destination: 'backgrounds',
|
||||
},
|
||||
seen: false,
|
||||
},
|
||||
};
|
||||
const inc = {
|
||||
'items.food.Cake_Skeleton': 1,
|
||||
'items.food.Cake_Base': 1,
|
||||
'items.food.Cake_CottonCandyBlue': 1,
|
||||
'items.food.Cake_CottonCandyPink': 1,
|
||||
'items.food.Cake_Shade': 1,
|
||||
'items.food.Cake_White': 1,
|
||||
'items.food.Cake_Golden': 1,
|
||||
'items.food.Cake_Zombie': 1,
|
||||
'items.food.Cake_Desert': 1,
|
||||
'items.food.Cake_Red': 1,
|
||||
'achievements.habitBirthdays': 1,
|
||||
};
|
||||
|
||||
if (count % progressCount === 0) console.warn(`${count} ${user._id}`);
|
||||
|
||||
return await User.update({_id: user._id}, {$set: set, $push: push, $inc: inc }).exec();
|
||||
}
|
||||
|
||||
export default async function processUsers () {
|
||||
let query = {
|
||||
migration: {$ne: MIGRATION_NAME},
|
||||
'auth.timestamps.loggedin': {$gt: new Date('2022-12-23')},
|
||||
};
|
||||
|
||||
const fields = {
|
||||
_id: 1,
|
||||
items: 1,
|
||||
};
|
||||
|
||||
while (true) { // eslint-disable-line no-constant-condition
|
||||
const users = await User // eslint-disable-line no-await-in-loop
|
||||
.find(query)
|
||||
.limit(250)
|
||||
.sort({_id: 1})
|
||||
.select(fields)
|
||||
.lean()
|
||||
.exec();
|
||||
|
||||
if (users.length === 0) {
|
||||
console.warn('All appropriate users found and modified.');
|
||||
console.warn(`\n${count} users processed\n`);
|
||||
break;
|
||||
} else {
|
||||
query._id = {
|
||||
$gt: users[users.length - 1],
|
||||
};
|
||||
}
|
||||
|
||||
await Promise.all(users.map(updateUser)); // eslint-disable-line no-await-in-loop
|
||||
}
|
||||
};
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"version": "4.260.0",
|
||||
"version": "4.251.0",
|
||||
"lockfileVersion": 1,
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
@@ -27,24 +27,24 @@
|
||||
"integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ=="
|
||||
},
|
||||
"@babel/core": {
|
||||
"version": "7.20.12",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.20.12.tgz",
|
||||
"integrity": "sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==",
|
||||
"version": "7.19.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.6.tgz",
|
||||
"integrity": "sha512-D2Ue4KHpc6Ys2+AxpIx1BZ8+UegLLLE2p3KJEuJRKmokHOtl49jQ5ny1773KsGLZs8MQvBidAF6yWUJxRqtKtg==",
|
||||
"requires": {
|
||||
"@ampproject/remapping": "^2.1.0",
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/generator": "^7.20.7",
|
||||
"@babel/helper-compilation-targets": "^7.20.7",
|
||||
"@babel/helper-module-transforms": "^7.20.11",
|
||||
"@babel/helpers": "^7.20.7",
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/template": "^7.20.7",
|
||||
"@babel/traverse": "^7.20.12",
|
||||
"@babel/types": "^7.20.7",
|
||||
"@babel/generator": "^7.19.6",
|
||||
"@babel/helper-compilation-targets": "^7.19.3",
|
||||
"@babel/helper-module-transforms": "^7.19.6",
|
||||
"@babel/helpers": "^7.19.4",
|
||||
"@babel/parser": "^7.19.6",
|
||||
"@babel/template": "^7.18.10",
|
||||
"@babel/traverse": "^7.19.6",
|
||||
"@babel/types": "^7.19.4",
|
||||
"convert-source-map": "^1.7.0",
|
||||
"debug": "^4.1.0",
|
||||
"gensync": "^1.0.0-beta.2",
|
||||
"json5": "^2.2.2",
|
||||
"json5": "^2.2.1",
|
||||
"semver": "^6.3.0"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -57,47 +57,68 @@
|
||||
}
|
||||
},
|
||||
"@babel/compat-data": {
|
||||
"version": "7.20.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.10.tgz",
|
||||
"integrity": "sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg=="
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.20.1.tgz",
|
||||
"integrity": "sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ=="
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz",
|
||||
"integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==",
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz",
|
||||
"integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.20.7",
|
||||
"@babel/types": "^7.20.0",
|
||||
"@jridgewell/gen-mapping": "^0.3.2",
|
||||
"jsesc": "^2.5.1"
|
||||
}
|
||||
},
|
||||
"@babel/helper-compilation-targets": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz",
|
||||
"integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==",
|
||||
"version": "7.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.0.tgz",
|
||||
"integrity": "sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==",
|
||||
"requires": {
|
||||
"@babel/compat-data": "^7.20.5",
|
||||
"@babel/compat-data": "^7.20.0",
|
||||
"@babel/helper-validator-option": "^7.18.6",
|
||||
"browserslist": "^4.21.3",
|
||||
"lru-cache": "^5.1.1",
|
||||
"semver": "^6.3.0"
|
||||
}
|
||||
},
|
||||
"@babel/helper-function-name": {
|
||||
"version": "7.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
|
||||
"integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
|
||||
"requires": {
|
||||
"@babel/template": "^7.18.10",
|
||||
"@babel/types": "^7.19.0"
|
||||
}
|
||||
},
|
||||
"@babel/helper-module-transforms": {
|
||||
"version": "7.20.11",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.20.11.tgz",
|
||||
"integrity": "sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==",
|
||||
"version": "7.19.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.6.tgz",
|
||||
"integrity": "sha512-fCmcfQo/KYr/VXXDIyd3CBGZ6AFhPFy1TfSEJ+PilGVlQT6jcbqtHAM4C1EciRqMza7/TpOUZliuSH+U6HAhJw==",
|
||||
"requires": {
|
||||
"@babel/helper-environment-visitor": "^7.18.9",
|
||||
"@babel/helper-module-imports": "^7.18.6",
|
||||
"@babel/helper-simple-access": "^7.20.2",
|
||||
"@babel/helper-simple-access": "^7.19.4",
|
||||
"@babel/helper-split-export-declaration": "^7.18.6",
|
||||
"@babel/helper-validator-identifier": "^7.19.1",
|
||||
"@babel/template": "^7.20.7",
|
||||
"@babel/traverse": "^7.20.10",
|
||||
"@babel/types": "^7.20.7"
|
||||
"@babel/template": "^7.18.10",
|
||||
"@babel/traverse": "^7.19.6",
|
||||
"@babel/types": "^7.19.4"
|
||||
}
|
||||
},
|
||||
"@babel/helper-simple-access": {
|
||||
"version": "7.19.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.19.4.tgz",
|
||||
"integrity": "sha512-f9Xq6WqBFqaDfbCzn2w85hwklswz5qsKlh7f08w4Y9yhJHpnNC0QemtSkK5YyOY8kPGvyiwdzZksGUhnGdaUIg==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.19.4"
|
||||
}
|
||||
},
|
||||
"@babel/helper-string-parser": {
|
||||
"version": "7.19.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
|
||||
"integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
|
||||
},
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.19.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
|
||||
@@ -114,41 +135,41 @@
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
|
||||
"integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg=="
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz",
|
||||
"integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw=="
|
||||
},
|
||||
"@babel/template": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
|
||||
"integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
|
||||
"version": "7.18.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
|
||||
"integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/types": "^7.20.7"
|
||||
"@babel/parser": "^7.18.10",
|
||||
"@babel/types": "^7.18.10"
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.20.12",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz",
|
||||
"integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==",
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz",
|
||||
"integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/generator": "^7.20.7",
|
||||
"@babel/generator": "^7.20.1",
|
||||
"@babel/helper-environment-visitor": "^7.18.9",
|
||||
"@babel/helper-function-name": "^7.19.0",
|
||||
"@babel/helper-hoist-variables": "^7.18.6",
|
||||
"@babel/helper-split-export-declaration": "^7.18.6",
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/types": "^7.20.7",
|
||||
"@babel/parser": "^7.20.1",
|
||||
"@babel/types": "^7.20.0",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
|
||||
"integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
|
||||
"version": "7.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz",
|
||||
"integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==",
|
||||
"requires": {
|
||||
"@babel/helper-string-parser": "^7.19.4",
|
||||
"@babel/helper-validator-identifier": "^7.19.1",
|
||||
@@ -177,9 +198,9 @@
|
||||
}
|
||||
},
|
||||
"caniuse-lite": {
|
||||
"version": "1.0.30001442",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001442.tgz",
|
||||
"integrity": "sha512-239m03Pqy0hwxYPYR5JwOIxRJfLTWtle9FV8zosfV5pHg+/51uD4nxcUlM8+mWWGfwKtt8lJNHnD3cWw9VZ6ow=="
|
||||
"version": "1.0.30001429",
|
||||
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001429.tgz",
|
||||
"integrity": "sha512-511ThLu1hF+5RRRt0zYCf2U2yRr9GPF6m5y90SBCWsvSoYoW7yAGlv/elyPaNfvGCkp6kj/KFZWU0BMA69Prsg=="
|
||||
},
|
||||
"chalk": {
|
||||
"version": "2.4.2",
|
||||
@@ -191,19 +212,6 @@
|
||||
"supports-color": "^5.3.0"
|
||||
}
|
||||
},
|
||||
"json5": {
|
||||
"version": "2.2.3",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz",
|
||||
"integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg=="
|
||||
},
|
||||
"lru-cache": {
|
||||
"version": "5.1.1",
|
||||
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
|
||||
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
|
||||
"requires": {
|
||||
"yallist": "^3.0.2"
|
||||
}
|
||||
},
|
||||
"semver": {
|
||||
"version": "6.3.0",
|
||||
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
|
||||
@@ -217,11 +225,6 @@
|
||||
"escalade": "^3.1.1",
|
||||
"picocolors": "^1.0.0"
|
||||
}
|
||||
},
|
||||
"yallist": {
|
||||
"version": "3.1.1",
|
||||
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
|
||||
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -666,13 +669,13 @@
|
||||
}
|
||||
},
|
||||
"@babel/helpers": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.7.tgz",
|
||||
"integrity": "sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==",
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.20.1.tgz",
|
||||
"integrity": "sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==",
|
||||
"requires": {
|
||||
"@babel/template": "^7.20.7",
|
||||
"@babel/traverse": "^7.20.7",
|
||||
"@babel/types": "^7.20.7"
|
||||
"@babel/template": "^7.18.10",
|
||||
"@babel/traverse": "^7.20.1",
|
||||
"@babel/types": "^7.20.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/code-frame": {
|
||||
@@ -684,15 +687,29 @@
|
||||
}
|
||||
},
|
||||
"@babel/generator": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.7.tgz",
|
||||
"integrity": "sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==",
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.20.1.tgz",
|
||||
"integrity": "sha512-u1dMdBUmA7Z0rBB97xh8pIhviK7oItYOkjbsCxTWMknyvbQRBwX7/gn4JXurRdirWMFh+ZtYARqkA6ydogVZpg==",
|
||||
"requires": {
|
||||
"@babel/types": "^7.20.7",
|
||||
"@babel/types": "^7.20.0",
|
||||
"@jridgewell/gen-mapping": "^0.3.2",
|
||||
"jsesc": "^2.5.1"
|
||||
}
|
||||
},
|
||||
"@babel/helper-function-name": {
|
||||
"version": "7.19.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz",
|
||||
"integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==",
|
||||
"requires": {
|
||||
"@babel/template": "^7.18.10",
|
||||
"@babel/types": "^7.19.0"
|
||||
}
|
||||
},
|
||||
"@babel/helper-string-parser": {
|
||||
"version": "7.19.4",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz",
|
||||
"integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw=="
|
||||
},
|
||||
"@babel/helper-validator-identifier": {
|
||||
"version": "7.19.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz",
|
||||
@@ -709,41 +726,41 @@
|
||||
}
|
||||
},
|
||||
"@babel/parser": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.7.tgz",
|
||||
"integrity": "sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg=="
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.20.1.tgz",
|
||||
"integrity": "sha512-hp0AYxaZJhxULfM1zyp7Wgr+pSUKBcP3M+PHnSzWGdXOzg/kHWIgiUWARvubhUKGOEw3xqY4x+lyZ9ytBVcELw=="
|
||||
},
|
||||
"@babel/template": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz",
|
||||
"integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==",
|
||||
"version": "7.18.10",
|
||||
"resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz",
|
||||
"integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/types": "^7.20.7"
|
||||
"@babel/parser": "^7.18.10",
|
||||
"@babel/types": "^7.18.10"
|
||||
}
|
||||
},
|
||||
"@babel/traverse": {
|
||||
"version": "7.20.12",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.12.tgz",
|
||||
"integrity": "sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==",
|
||||
"version": "7.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.20.1.tgz",
|
||||
"integrity": "sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==",
|
||||
"requires": {
|
||||
"@babel/code-frame": "^7.18.6",
|
||||
"@babel/generator": "^7.20.7",
|
||||
"@babel/generator": "^7.20.1",
|
||||
"@babel/helper-environment-visitor": "^7.18.9",
|
||||
"@babel/helper-function-name": "^7.19.0",
|
||||
"@babel/helper-hoist-variables": "^7.18.6",
|
||||
"@babel/helper-split-export-declaration": "^7.18.6",
|
||||
"@babel/parser": "^7.20.7",
|
||||
"@babel/types": "^7.20.7",
|
||||
"@babel/parser": "^7.20.1",
|
||||
"@babel/types": "^7.20.0",
|
||||
"debug": "^4.1.0",
|
||||
"globals": "^11.1.0"
|
||||
}
|
||||
},
|
||||
"@babel/types": {
|
||||
"version": "7.20.7",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.7.tgz",
|
||||
"integrity": "sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==",
|
||||
"version": "7.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/types/-/types-7.20.0.tgz",
|
||||
"integrity": "sha512-Jlgt3H0TajCW164wkTOTzHkZb075tMQMULzrLUoUeKmO7eFL96GgDxf7/Axhc5CAuKE3KFyVW1p6ysKsi2oXAg==",
|
||||
"requires": {
|
||||
"@babel/helper-string-parser": "^7.19.4",
|
||||
"@babel/helper-validator-identifier": "^7.19.1",
|
||||
@@ -1961,11 +1978,6 @@
|
||||
"requires": {
|
||||
"lru-cache": "^6.0.0"
|
||||
}
|
||||
},
|
||||
"uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -1977,13 +1989,6 @@
|
||||
"@opencensus/core": "^0.1.0",
|
||||
"hex2dec": "^1.0.1",
|
||||
"uuid": "^8.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"@panva/asn1.js": {
|
||||
@@ -2042,12 +2047,23 @@
|
||||
}
|
||||
},
|
||||
"@sinonjs/fake-timers": {
|
||||
"version": "10.0.2",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.0.2.tgz",
|
||||
"integrity": "sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==",
|
||||
"version": "9.1.2",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-9.1.2.tgz",
|
||||
"integrity": "sha512-BPS4ynJW/o92PUR4wgriz2Ud5gpST5vz6GQfMixEDK0Z8ZCUv2M7SkBLykH56T++Xs+8ln9zTGbOvNGIe02/jw==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sinonjs/commons": "^2.0.0"
|
||||
"@sinonjs/commons": "^1.7.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"@sinonjs/commons": {
|
||||
"version": "1.8.5",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz",
|
||||
"integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-detect": "4.0.8"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"@sinonjs/samsam": {
|
||||
@@ -3152,20 +3168,19 @@
|
||||
"integrity": "sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA=="
|
||||
},
|
||||
"axios": {
|
||||
"version": "1.2.2",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.2.2.tgz",
|
||||
"integrity": "sha512-bz/J4gS2S3I7mpN/YZfGFTqhXTYzRho8Ay38w2otuuDR322KzFIWm/4W2K6gIwvWaws5n+mnb7D1lN9uD+QH6Q==",
|
||||
"version": "0.27.2",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-0.27.2.tgz",
|
||||
"integrity": "sha512-t+yRIyySRTp/wua5xEr+z1q60QmLq8ABsS5O9Me1AsE5dfKqgnCFzwiCZZ/cGNd1lq4/7akDWMxdhVlucjmnOQ==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"follow-redirects": "^1.15.0",
|
||||
"form-data": "^4.0.0",
|
||||
"proxy-from-env": "^1.1.0"
|
||||
"follow-redirects": "^1.14.9",
|
||||
"form-data": "^4.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
"follow-redirects": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz",
|
||||
"integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==",
|
||||
"version": "1.14.9",
|
||||
"resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.9.tgz",
|
||||
"integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==",
|
||||
"dev": true
|
||||
}
|
||||
}
|
||||
@@ -4306,9 +4321,9 @@
|
||||
}
|
||||
},
|
||||
"chalk": {
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.2.0.tgz",
|
||||
"integrity": "sha512-ree3Gqw/nazQAPuJJEy+avdl7QfZMcUvmHIKgEZkGL+xOBzRvup5Hxo6LHuMceSxOabuJLJm5Yp/92R9eMmMvA==",
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/chalk/-/chalk-5.1.2.tgz",
|
||||
"integrity": "sha512-E5CkT4jWURs1Vy5qGJye+XwCkNj7Od3Af7CP6SujMetSMkLs8Do2RWJK5yx1wamHV/op8Rz+9rltjaTQWDnEFQ==",
|
||||
"dev": true
|
||||
},
|
||||
"chardet": {
|
||||
@@ -9784,9 +9799,9 @@
|
||||
"integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus="
|
||||
},
|
||||
"json5": {
|
||||
"version": "2.2.2",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.2.tgz",
|
||||
"integrity": "sha512-46Tk9JiOL2z7ytNQWFLpj99RZkVgeHf87yGQKsIkaPz1qSH9UczKH1rO7K3wgRselo0tYMUNfecYpm/p1vC7tQ=="
|
||||
"version": "2.2.1",
|
||||
"resolved": "https://registry.npmjs.org/json5/-/json5-2.2.1.tgz",
|
||||
"integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA=="
|
||||
},
|
||||
"jsonfile": {
|
||||
"version": "6.1.0",
|
||||
@@ -10093,9 +10108,9 @@
|
||||
"integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg=="
|
||||
},
|
||||
"loader-utils": {
|
||||
"version": "2.0.4",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz",
|
||||
"integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.3.tgz",
|
||||
"integrity": "sha512-THWqIsn8QRnvLl0shHYVBN9syumU8pYWEHPTmkiVGd+7K5eFNVSY6AJhRvgGF70gg1Dz+l/k8WicvFCxdEs60A==",
|
||||
"requires": {
|
||||
"big.js": "^5.2.2",
|
||||
"emojis-list": "^3.0.0",
|
||||
@@ -11396,9 +11411,9 @@
|
||||
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ=="
|
||||
},
|
||||
"nise": {
|
||||
"version": "5.1.3",
|
||||
"resolved": "https://registry.npmjs.org/nise/-/nise-5.1.3.tgz",
|
||||
"integrity": "sha512-U597iWTTBBYIV72986jyU382/MMZ70ApWcRmkoF1AZ75bpqOtI3Gugv/6+0jLgoDOabmcSwYBkSSAWIp1eA5cg==",
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/nise/-/nise-5.1.2.tgz",
|
||||
"integrity": "sha512-+gQjFi8v+tkfCuSCxfURHLhRhniE/+IaYbIphxAN2JRR9SHKhY8hgXpaXiYfHdw+gcGe4buxgbprBQFab9FkhA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sinonjs/commons": "^2.0.0",
|
||||
@@ -11418,9 +11433,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@sinonjs/commons": {
|
||||
"version": "1.8.6",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.6.tgz",
|
||||
"integrity": "sha512-Ky+XkAkqPZSm3NLBeUng77EBQl3cmeJhITaGHdYH8kjVB+aun3S4XBRti2zt17mtt0mIUDiNxYeoJm6drVvBJQ==",
|
||||
"version": "1.8.5",
|
||||
"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.5.tgz",
|
||||
"integrity": "sha512-rTpCA0wG1wUxglBSFdMMY0oTrKYvgf4fNgv/sXbfCVAdf+FnPBdKJR/7XbpTCwbCrvCbdPYnlWaUUYz4V2fPDA==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"type-detect": "4.0.8"
|
||||
@@ -12082,12 +12097,13 @@
|
||||
"integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ="
|
||||
},
|
||||
"passport": {
|
||||
"version": "0.5.0",
|
||||
"resolved": "https://registry.npmjs.org/passport/-/passport-0.5.0.tgz",
|
||||
"integrity": "sha512-ln+ue5YaNDS+fes6O5PCzXKSseY5u8MYhX9H5Co4s+HfYI5oqvnHKoOORLYDUPh+8tHvrxugF2GFcUA1Q1Gqfg==",
|
||||
"version": "0.6.0",
|
||||
"resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz",
|
||||
"integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==",
|
||||
"requires": {
|
||||
"passport-strategy": "1.x.x",
|
||||
"pause": "0.0.1"
|
||||
"pause": "0.0.1",
|
||||
"utils-merge": "^1.0.1"
|
||||
}
|
||||
},
|
||||
"passport-facebook": {
|
||||
@@ -12198,7 +12214,7 @@
|
||||
"pause": {
|
||||
"version": "0.0.1",
|
||||
"resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz",
|
||||
"integrity": "sha1-HUCLP9t2kjuVQ9lvtMnf1TXZy10="
|
||||
"integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg=="
|
||||
},
|
||||
"pause-stream": {
|
||||
"version": "0.0.11",
|
||||
@@ -12443,12 +12459,6 @@
|
||||
"ipaddr.js": "1.9.1"
|
||||
}
|
||||
},
|
||||
"proxy-from-env": {
|
||||
"version": "1.1.0",
|
||||
"resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
|
||||
"integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==",
|
||||
"dev": true
|
||||
},
|
||||
"ps-tree": {
|
||||
"version": "1.2.0",
|
||||
"resolved": "https://registry.npmjs.org/ps-tree/-/ps-tree-1.2.0.tgz",
|
||||
@@ -13533,13 +13543,6 @@
|
||||
"requires": {
|
||||
"any-base": "^1.1.0",
|
||||
"uuid": "^8.3.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
"side-channel": {
|
||||
@@ -13627,13 +13630,13 @@
|
||||
}
|
||||
},
|
||||
"sinon": {
|
||||
"version": "15.0.1",
|
||||
"resolved": "https://registry.npmjs.org/sinon/-/sinon-15.0.1.tgz",
|
||||
"integrity": "sha512-PZXKc08f/wcA/BMRGBze2Wmw50CWPiAH3E21EOi4B49vJ616vW4DQh4fQrqsYox2aNR/N3kCqLuB0PwwOucQrg==",
|
||||
"version": "14.0.2",
|
||||
"resolved": "https://registry.npmjs.org/sinon/-/sinon-14.0.2.tgz",
|
||||
"integrity": "sha512-PDpV0ZI3ZCS3pEqx0vpNp6kzPhHrLx72wA0G+ZLaaJjLIYeE0n8INlgaohKuGy7hP0as5tbUd23QWu5U233t+w==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"@sinonjs/commons": "^2.0.0",
|
||||
"@sinonjs/fake-timers": "10.0.2",
|
||||
"@sinonjs/fake-timers": "^9.1.2",
|
||||
"@sinonjs/samsam": "^7.0.1",
|
||||
"diff": "^5.0.0",
|
||||
"nise": "^5.1.2",
|
||||
@@ -14286,9 +14289,9 @@
|
||||
}
|
||||
},
|
||||
"stripe": {
|
||||
"version": "11.6.0",
|
||||
"resolved": "https://registry.npmjs.org/stripe/-/stripe-11.6.0.tgz",
|
||||
"integrity": "sha512-ht8S1l8CJJE3jtv2NM1mEQzZBkITYvb9uDpSeXYeNz9iJkFFgDU169htwOW00OdIESvFaIsGgWQatAE5dfOERQ==",
|
||||
"version": "10.13.0",
|
||||
"resolved": "https://registry.npmjs.org/stripe/-/stripe-10.13.0.tgz",
|
||||
"integrity": "sha512-Uq+hToFOXHU+BHgzUmop2Monc0dM8pluXcoCOrgz9oY8XBDnSPOuXAJdKa04x5DCEgKWrFMHncQfAgwqzSgaTQ==",
|
||||
"requires": {
|
||||
"@types/node": ">=8.1.0",
|
||||
"qs": "^6.11.0"
|
||||
@@ -14315,16 +14318,16 @@
|
||||
"integrity": "sha512-GPcQ+LDJbrcxHORTRes6Jy2sfvK2kS6hpSfI/fXhPt+spVzxF6LJ1dHLN9zIGmVaaP044YKaIatFaufENRiDoQ=="
|
||||
},
|
||||
"superagent": {
|
||||
"version": "8.0.6",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.6.tgz",
|
||||
"integrity": "sha512-HqSe6DSIh3hEn6cJvCkaM1BLi466f1LHi4yubR0tpewlMpk4RUFFy35bKz8SsPBwYfIIJy5eclp+3tCYAuX0bw==",
|
||||
"version": "8.0.5",
|
||||
"resolved": "https://registry.npmjs.org/superagent/-/superagent-8.0.5.tgz",
|
||||
"integrity": "sha512-lQVE0Praz7nHiSaJLKBM/cZyi7J0E4io8tWnGSBdBrqAzhzrjQ/F5iGP9Zr29CJC8N5zYdhG2kKaNcB6dKxp7g==",
|
||||
"requires": {
|
||||
"component-emitter": "^1.3.0",
|
||||
"cookiejar": "^2.1.3",
|
||||
"debug": "^4.3.4",
|
||||
"fast-safe-stringify": "^2.1.1",
|
||||
"form-data": "^4.0.0",
|
||||
"formidable": "^2.1.1",
|
||||
"formidable": "^2.0.1",
|
||||
"methods": "^1.1.2",
|
||||
"mime": "2.6.0",
|
||||
"qs": "^6.11.0",
|
||||
@@ -14981,13 +14984,13 @@
|
||||
"integrity": "sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw=="
|
||||
},
|
||||
"tsconfig-paths": {
|
||||
"version": "3.14.1",
|
||||
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz",
|
||||
"integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==",
|
||||
"version": "3.9.0",
|
||||
"resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.9.0.tgz",
|
||||
"integrity": "sha512-dRcuzokWhajtZWkQsDVKbWyY+jgcLC5sqJhg2PSgf4ZkH2aHPvaOY8YWGhmjb68b5qqTfasSsDO9k7RUiEmZAw==",
|
||||
"requires": {
|
||||
"@types/json5": "^0.0.29",
|
||||
"json5": "^1.0.1",
|
||||
"minimist": "^1.2.6",
|
||||
"minimist": "^1.2.0",
|
||||
"strip-bom": "^3.0.0"
|
||||
},
|
||||
"dependencies": {
|
||||
@@ -14998,11 +15001,6 @@
|
||||
"requires": {
|
||||
"minimist": "^1.2.0"
|
||||
}
|
||||
},
|
||||
"minimist": {
|
||||
"version": "1.2.7",
|
||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz",
|
||||
"integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15244,11 +15242,6 @@
|
||||
"requires": {
|
||||
"ms": "2.1.2"
|
||||
}
|
||||
},
|
||||
"uuid": {
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -15487,9 +15480,9 @@
|
||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "9.0.0",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz",
|
||||
"integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg=="
|
||||
"version": "8.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||
},
|
||||
"v8-compile-cache": {
|
||||
"version": "2.1.1",
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
{
|
||||
"name": "habitica",
|
||||
"description": "A habit tracker app which treats your goals like a Role Playing Game.",
|
||||
"version": "4.260.0",
|
||||
"version": "4.251.0",
|
||||
"main": "./website/server/index.js",
|
||||
"dependencies": {
|
||||
"@babel/core": "^7.20.12",
|
||||
"@babel/core": "^7.19.6",
|
||||
"@babel/preset-env": "^7.20.2",
|
||||
"@babel/register": "^7.18.9",
|
||||
"@google-cloud/trace-agent": "^7.1.2",
|
||||
@@ -54,7 +54,7 @@
|
||||
"nconf": "^0.12.0",
|
||||
"node-gcm": "^1.0.5",
|
||||
"on-headers": "^1.0.2",
|
||||
"passport": "^0.5.0",
|
||||
"passport": "^0.6.0",
|
||||
"passport-facebook": "^3.0.0",
|
||||
"passport-google-oauth2": "^0.2.0",
|
||||
"passport-google-oauth20": "2.0.0",
|
||||
@@ -67,11 +67,11 @@
|
||||
"remove-markdown": "^0.5.0",
|
||||
"rimraf": "^3.0.2",
|
||||
"short-uuid": "^4.2.2",
|
||||
"stripe": "^11.6.0",
|
||||
"superagent": "^8.0.6",
|
||||
"stripe": "^10.13.0",
|
||||
"superagent": "^8.0.5",
|
||||
"universal-analytics": "^0.5.3",
|
||||
"useragent": "^2.1.9",
|
||||
"uuid": "^9.0.0",
|
||||
"uuid": "^8.3.2",
|
||||
"validator": "^13.7.0",
|
||||
"vinyl-buffer": "^1.0.1",
|
||||
"winston": "^3.8.2",
|
||||
@@ -110,11 +110,11 @@
|
||||
"apidoc": "gulp apidoc"
|
||||
},
|
||||
"devDependencies": {
|
||||
"axios": "^1.2.2",
|
||||
"axios": "^0.27.2",
|
||||
"chai": "^4.3.7",
|
||||
"chai-as-promised": "^7.1.1",
|
||||
"chai-moment": "^0.1.0",
|
||||
"chalk": "^5.2.0",
|
||||
"chalk": "^5.1.2",
|
||||
"cross-spawn": "^7.0.3",
|
||||
"expect.js": "^0.3.1",
|
||||
"istanbul": "^1.1.0-alpha.1",
|
||||
@@ -122,7 +122,7 @@
|
||||
"monk": "^7.3.4",
|
||||
"require-again": "^2.0.0",
|
||||
"run-rs": "^0.7.7",
|
||||
"sinon": "^15.0.1",
|
||||
"sinon": "^14.0.2",
|
||||
"sinon-chai": "^3.7.0",
|
||||
"sinon-stub-promise": "^4.0.0"
|
||||
},
|
||||
|
||||
@@ -17,7 +17,7 @@ describe('Amazon Payments - Checkout', () => {
|
||||
let closeOrderReferenceSpy;
|
||||
|
||||
let paymentBuyGemsStub;
|
||||
let paymentCreateSubscriptionStub;
|
||||
let paymentCreateSubscritionStub;
|
||||
let amount = gemsBlock.price / 100;
|
||||
|
||||
function expectOrderReferenceSpy () {
|
||||
@@ -85,8 +85,8 @@ describe('Amazon Payments - Checkout', () => {
|
||||
paymentBuyGemsStub = sinon.stub(payments, 'buyGems');
|
||||
paymentBuyGemsStub.resolves({});
|
||||
|
||||
paymentCreateSubscriptionStub = sinon.stub(payments, 'createSubscription');
|
||||
paymentCreateSubscriptionStub.resolves({});
|
||||
paymentCreateSubscritionStub = sinon.stub(payments, 'createSubscription');
|
||||
paymentCreateSubscritionStub.resolves({});
|
||||
|
||||
sinon.stub(common, 'uuid').returns('uuid-generated');
|
||||
sandbox.stub(gems, 'validateGiftMessage');
|
||||
@@ -109,7 +109,6 @@ describe('Amazon Payments - Checkout', () => {
|
||||
user,
|
||||
paymentMethod,
|
||||
headers,
|
||||
sku: undefined,
|
||||
};
|
||||
if (gift) {
|
||||
expectedArgs.gift = gift;
|
||||
@@ -216,14 +215,13 @@ describe('Amazon Payments - Checkout', () => {
|
||||
});
|
||||
|
||||
gift.member = receivingUser;
|
||||
expect(paymentCreateSubscriptionStub).to.be.calledOnce;
|
||||
expect(paymentCreateSubscriptionStub).to.be.calledWith({
|
||||
expect(paymentCreateSubscritionStub).to.be.calledOnce;
|
||||
expect(paymentCreateSubscritionStub).to.be.calledWith({
|
||||
user,
|
||||
paymentMethod: amzLib.constants.PAYMENT_METHOD_GIFT,
|
||||
headers,
|
||||
gift,
|
||||
gemsBlock: undefined,
|
||||
sku: undefined,
|
||||
});
|
||||
expectAmazonStubs();
|
||||
});
|
||||
|
||||
@@ -12,10 +12,10 @@ const { i18n } = common;
|
||||
describe('Apple Payments', () => {
|
||||
const subKey = 'basic_3mo';
|
||||
|
||||
describe('verifyPurchase', () => {
|
||||
describe('verifyGemPurchase', () => {
|
||||
let sku; let user; let token; let receipt; let
|
||||
headers;
|
||||
let iapSetupStub; let iapValidateStub; let iapIsValidatedStub; let paymentBuySkuStub; let
|
||||
let iapSetupStub; let iapValidateStub; let iapIsValidatedStub; let paymentBuyGemsStub; let
|
||||
iapGetPurchaseDataStub; let validateGiftMessageStub;
|
||||
|
||||
beforeEach(() => {
|
||||
@@ -36,7 +36,7 @@ describe('Apple Payments', () => {
|
||||
productId: 'com.habitrpg.ios.Habitica.21gems',
|
||||
transactionId: token,
|
||||
}]);
|
||||
paymentBuySkuStub = sinon.stub(payments, 'buySkuItem').resolves({});
|
||||
paymentBuyGemsStub = sinon.stub(payments, 'buyGems').resolves({});
|
||||
validateGiftMessageStub = sinon.stub(gems, 'validateGiftMessage');
|
||||
});
|
||||
|
||||
@@ -45,7 +45,7 @@ describe('Apple Payments', () => {
|
||||
iap.validate.restore();
|
||||
iap.isValidated.restore();
|
||||
iap.getPurchaseData.restore();
|
||||
payments.buySkuItem.restore();
|
||||
payments.buyGems.restore();
|
||||
gems.validateGiftMessage.restore();
|
||||
});
|
||||
|
||||
@@ -54,7 +54,7 @@ describe('Apple Payments', () => {
|
||||
iapIsValidatedStub = sinon.stub(iap, 'isValidated')
|
||||
.returns(false);
|
||||
|
||||
await expect(applePayments.verifyPurchase({ user, receipt, headers }))
|
||||
await expect(applePayments.verifyGemPurchase({ user, receipt, headers }))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
httpCode: 401,
|
||||
name: 'NotAuthorized',
|
||||
@@ -66,7 +66,7 @@ describe('Apple Payments', () => {
|
||||
iapGetPurchaseDataStub.restore();
|
||||
iapGetPurchaseDataStub = sinon.stub(iap, 'getPurchaseData').returns([]);
|
||||
|
||||
await expect(applePayments.verifyPurchase({ user, receipt, headers }))
|
||||
await expect(applePayments.verifyGemPurchase({ user, receipt, headers }))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
httpCode: 401,
|
||||
name: 'NotAuthorized',
|
||||
@@ -76,7 +76,7 @@ describe('Apple Payments', () => {
|
||||
|
||||
it('errors if the user cannot purchase gems', async () => {
|
||||
sinon.stub(user, 'canGetGems').resolves(false);
|
||||
await expect(applePayments.verifyPurchase({ user, receipt, headers }))
|
||||
await expect(applePayments.verifyGemPurchase({ user, receipt, headers }))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
httpCode: 401,
|
||||
name: 'NotAuthorized',
|
||||
@@ -94,16 +94,14 @@ describe('Apple Payments', () => {
|
||||
productId: 'badProduct',
|
||||
transactionId: token,
|
||||
}]);
|
||||
paymentBuySkuStub.restore();
|
||||
|
||||
await expect(applePayments.verifyPurchase({ user, receipt, headers }))
|
||||
await expect(applePayments.verifyGemPurchase({ user, receipt, headers }))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
httpCode: 400,
|
||||
name: 'BadRequest',
|
||||
httpCode: 401,
|
||||
name: 'NotAuthorized',
|
||||
message: applePayments.constants.RESPONSE_INVALID_ITEM,
|
||||
});
|
||||
|
||||
paymentBuySkuStub = sinon.stub(payments, 'buySkuItem').resolves({});
|
||||
user.canGetGems.restore();
|
||||
});
|
||||
|
||||
@@ -140,7 +138,7 @@ describe('Apple Payments', () => {
|
||||
}]);
|
||||
|
||||
sinon.stub(user, 'canGetGems').resolves(true);
|
||||
await applePayments.verifyPurchase({ user, receipt, headers });
|
||||
await applePayments.verifyGemPurchase({ user, receipt, headers });
|
||||
|
||||
expect(iapSetupStub).to.be.calledOnce;
|
||||
expect(iapValidateStub).to.be.calledOnce;
|
||||
@@ -150,13 +148,13 @@ describe('Apple Payments', () => {
|
||||
expect(iapGetPurchaseDataStub).to.be.calledOnce;
|
||||
expect(validateGiftMessageStub).to.not.be.called;
|
||||
|
||||
expect(paymentBuySkuStub).to.be.calledOnce;
|
||||
expect(paymentBuySkuStub).to.be.calledWith({
|
||||
expect(paymentBuyGemsStub).to.be.calledOnce;
|
||||
expect(paymentBuyGemsStub).to.be.calledWith({
|
||||
user,
|
||||
gift: undefined,
|
||||
paymentMethod: applePayments.constants.PAYMENT_METHOD_APPLE,
|
||||
sku: gemTest.productId,
|
||||
gemsBlock: common.content.gems[gemTest.gemsBlock],
|
||||
headers,
|
||||
gift: undefined,
|
||||
});
|
||||
expect(user.canGetGems).to.be.calledOnce;
|
||||
user.canGetGems.restore();
|
||||
@@ -175,7 +173,7 @@ describe('Apple Payments', () => {
|
||||
}]);
|
||||
|
||||
const gift = { uuid: receivingUser._id };
|
||||
await applePayments.verifyPurchase({
|
||||
await applePayments.verifyGemPurchase({
|
||||
user, gift, receipt, headers,
|
||||
});
|
||||
|
||||
@@ -189,16 +187,18 @@ describe('Apple Payments', () => {
|
||||
expect(validateGiftMessageStub).to.be.calledOnce;
|
||||
expect(validateGiftMessageStub).to.be.calledWith(gift, user);
|
||||
|
||||
expect(paymentBuySkuStub).to.be.calledOnce;
|
||||
expect(paymentBuySkuStub).to.be.calledWith({
|
||||
expect(paymentBuyGemsStub).to.be.calledOnce;
|
||||
expect(paymentBuyGemsStub).to.be.calledWith({
|
||||
user,
|
||||
gift: {
|
||||
uuid: receivingUser._id,
|
||||
member: sinon.match({ _id: receivingUser._id }),
|
||||
},
|
||||
paymentMethod: applePayments.constants.PAYMENT_METHOD_APPLE,
|
||||
sku: 'com.habitrpg.ios.Habitica.4gems',
|
||||
headers,
|
||||
gift: {
|
||||
type: 'gems',
|
||||
gems: { amount: 4 },
|
||||
member: sinon.match({ _id: receivingUser._id }),
|
||||
uuid: receivingUser._id,
|
||||
},
|
||||
gemsBlock: common.content.gems['4gems'],
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -12,11 +12,11 @@ const { i18n } = common;
|
||||
describe('Google Payments', () => {
|
||||
const subKey = 'basic_3mo';
|
||||
|
||||
describe('verifyPurchase', () => {
|
||||
describe('verifyGemPurchase', () => {
|
||||
let sku; let user; let token; let receipt; let signature; let
|
||||
headers;
|
||||
headers; const gemsBlock = common.content.gems['21gems'];
|
||||
let iapSetupStub; let iapValidateStub; let iapIsValidatedStub; let
|
||||
paymentBuySkuStub; let validateGiftMessageStub;
|
||||
paymentBuyGemsStub; let validateGiftMessageStub;
|
||||
|
||||
beforeEach(() => {
|
||||
sku = 'com.habitrpg.android.habitica.iap.21gems';
|
||||
@@ -27,10 +27,11 @@ describe('Google Payments', () => {
|
||||
|
||||
iapSetupStub = sinon.stub(iap, 'setup')
|
||||
.resolves();
|
||||
iapValidateStub = sinon.stub(iap, 'validate').resolves({ productId: sku });
|
||||
iapValidateStub = sinon.stub(iap, 'validate')
|
||||
.resolves({});
|
||||
iapIsValidatedStub = sinon.stub(iap, 'isValidated')
|
||||
.returns(true);
|
||||
paymentBuySkuStub = sinon.stub(payments, 'buySkuItem').resolves({});
|
||||
paymentBuyGemsStub = sinon.stub(payments, 'buyGems').resolves({});
|
||||
validateGiftMessageStub = sinon.stub(gems, 'validateGiftMessage');
|
||||
});
|
||||
|
||||
@@ -38,7 +39,7 @@ describe('Google Payments', () => {
|
||||
iap.setup.restore();
|
||||
iap.validate.restore();
|
||||
iap.isValidated.restore();
|
||||
payments.buySkuItem.restore();
|
||||
payments.buyGems.restore();
|
||||
gems.validateGiftMessage.restore();
|
||||
});
|
||||
|
||||
@@ -47,7 +48,7 @@ describe('Google Payments', () => {
|
||||
iapIsValidatedStub = sinon.stub(iap, 'isValidated')
|
||||
.returns(false);
|
||||
|
||||
await expect(googlePayments.verifyPurchase({
|
||||
await expect(googlePayments.verifyGemPurchase({
|
||||
user, receipt, signature, headers,
|
||||
}))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
@@ -59,25 +60,21 @@ describe('Google Payments', () => {
|
||||
|
||||
it('should throw an error if productId is invalid', async () => {
|
||||
receipt = `{"token": "${token}", "productId": "invalid"}`;
|
||||
iapValidateStub.restore();
|
||||
iapValidateStub = sinon.stub(iap, 'validate').resolves({});
|
||||
|
||||
paymentBuySkuStub.restore();
|
||||
await expect(googlePayments.verifyPurchase({
|
||||
await expect(googlePayments.verifyGemPurchase({
|
||||
user, receipt, signature, headers,
|
||||
}))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
httpCode: 400,
|
||||
name: 'BadRequest',
|
||||
httpCode: 401,
|
||||
name: 'NotAuthorized',
|
||||
message: googlePayments.constants.RESPONSE_INVALID_ITEM,
|
||||
});
|
||||
paymentBuySkuStub = sinon.stub(payments, 'buySkuItem').resolves({});
|
||||
});
|
||||
|
||||
it('should throw an error if user cannot purchase gems', async () => {
|
||||
sinon.stub(user, 'canGetGems').resolves(false);
|
||||
|
||||
await expect(googlePayments.verifyPurchase({
|
||||
await expect(googlePayments.verifyGemPurchase({
|
||||
user, receipt, signature, headers,
|
||||
}))
|
||||
.to.eventually.be.rejected.and.to.eql({
|
||||
@@ -91,7 +88,7 @@ describe('Google Payments', () => {
|
||||
|
||||
it('purchases gems', async () => {
|
||||
sinon.stub(user, 'canGetGems').resolves(true);
|
||||
await googlePayments.verifyPurchase({
|
||||
await googlePayments.verifyGemPurchase({
|
||||
user, receipt, signature, headers,
|
||||
});
|
||||
|
||||
@@ -104,17 +101,15 @@ describe('Google Payments', () => {
|
||||
signature,
|
||||
});
|
||||
expect(iapIsValidatedStub).to.be.calledOnce;
|
||||
expect(iapIsValidatedStub).to.be.calledWith(
|
||||
{ productId: sku },
|
||||
);
|
||||
expect(iapIsValidatedStub).to.be.calledWith({});
|
||||
|
||||
expect(paymentBuySkuStub).to.be.calledOnce;
|
||||
expect(paymentBuySkuStub).to.be.calledWith({
|
||||
expect(paymentBuyGemsStub).to.be.calledOnce;
|
||||
expect(paymentBuyGemsStub).to.be.calledWith({
|
||||
user,
|
||||
gift: undefined,
|
||||
paymentMethod: googlePayments.constants.PAYMENT_METHOD_GOOGLE,
|
||||
sku,
|
||||
gemsBlock,
|
||||
headers,
|
||||
gift: undefined,
|
||||
});
|
||||
expect(user.canGetGems).to.be.calledOnce;
|
||||
user.canGetGems.restore();
|
||||
@@ -125,7 +120,7 @@ describe('Google Payments', () => {
|
||||
await receivingUser.save();
|
||||
|
||||
const gift = { uuid: receivingUser._id };
|
||||
await googlePayments.verifyPurchase({
|
||||
await googlePayments.verifyGemPurchase({
|
||||
user, gift, receipt, signature, headers,
|
||||
});
|
||||
|
||||
@@ -139,20 +134,20 @@ describe('Google Payments', () => {
|
||||
signature,
|
||||
});
|
||||
expect(iapIsValidatedStub).to.be.calledOnce;
|
||||
expect(iapIsValidatedStub).to.be.calledWith(
|
||||
{ productId: sku },
|
||||
);
|
||||
expect(iapIsValidatedStub).to.be.calledWith({});
|
||||
|
||||
expect(paymentBuySkuStub).to.be.calledOnce;
|
||||
expect(paymentBuySkuStub).to.be.calledWith({
|
||||
expect(paymentBuyGemsStub).to.be.calledOnce;
|
||||
expect(paymentBuyGemsStub).to.be.calledWith({
|
||||
user,
|
||||
gift: {
|
||||
uuid: receivingUser._id,
|
||||
member: sinon.match({ _id: receivingUser._id }),
|
||||
},
|
||||
paymentMethod: googlePayments.constants.PAYMENT_METHOD_GOOGLE,
|
||||
sku,
|
||||
gemsBlock,
|
||||
headers,
|
||||
gift: {
|
||||
type: 'gems',
|
||||
gems: { amount: 21 },
|
||||
member: sinon.match({ _id: receivingUser._id }),
|
||||
uuid: receivingUser._id,
|
||||
},
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,40 +0,0 @@
|
||||
import {
|
||||
canBuySkuItem,
|
||||
} from '../../../../../website/server/libs/payments/skuItem';
|
||||
import { model as User } from '../../../../../website/server/models/user';
|
||||
|
||||
describe('payments/skuItems', () => {
|
||||
let user;
|
||||
let clock;
|
||||
|
||||
beforeEach(() => {
|
||||
user = new User();
|
||||
clock = null;
|
||||
});
|
||||
afterEach(() => {
|
||||
if (clock !== null) clock.restore();
|
||||
});
|
||||
|
||||
describe('#canBuySkuItem', () => {
|
||||
it('returns true for random sku', () => {
|
||||
expect(canBuySkuItem('something', user)).to.be.true;
|
||||
});
|
||||
|
||||
describe('#gryphatrice', () => {
|
||||
const sku = 'Pet-Gryphatrice-Jubilant';
|
||||
it('returns true during birthday week', () => {
|
||||
clock = sinon.useFakeTimers(new Date('2023-01-31'));
|
||||
expect(canBuySkuItem(sku, user)).to.be.true;
|
||||
});
|
||||
it('returns false outside of birthday week', () => {
|
||||
clock = sinon.useFakeTimers(new Date('2023-01-20'));
|
||||
expect(canBuySkuItem(sku, user)).to.be.false;
|
||||
});
|
||||
it('returns false if user already owns it', () => {
|
||||
clock = sinon.useFakeTimers(new Date('2023-02-01'));
|
||||
user.items.pets['Gryphatrice-Jubilant'] = 5;
|
||||
expect(canBuySkuItem(sku, user)).to.be.false;
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
@@ -541,35 +541,6 @@ describe('POST /chat', () => {
|
||||
.to.eql(userWithStyle.preferences.background);
|
||||
});
|
||||
|
||||
it('creates equipped to user styles', async () => {
|
||||
const userWithStyle = await generateUser({
|
||||
'preferences.costume': false,
|
||||
'auth.timestamps.created': new Date('2022-01-01'),
|
||||
});
|
||||
await userWithStyle.sync();
|
||||
|
||||
const message = await userWithStyle.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage });
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
expect(message.message.userStyles.items.gear.equipped)
|
||||
.to.eql(userWithStyle.items.gear.equipped);
|
||||
expect(message.message.userStyles.items.gear.costume).to.not.exist;
|
||||
});
|
||||
|
||||
it('creates costume to user styles', async () => {
|
||||
const userWithStyle = await generateUser({
|
||||
'preferences.costume': true,
|
||||
'auth.timestamps.created': new Date('2022-01-01'),
|
||||
});
|
||||
await userWithStyle.sync();
|
||||
|
||||
const message = await userWithStyle.post(`/groups/${groupWithChat._id}/chat`, { message: testMessage });
|
||||
|
||||
expect(message.message.id).to.exist;
|
||||
expect(message.message.userStyles.items.gear.costume).to.eql(userWithStyle.items.gear.costume);
|
||||
expect(message.message.userStyles.items.gear.equipped).to.not.exist;
|
||||
});
|
||||
|
||||
it('adds backer info to chat', async () => {
|
||||
const backerInfo = {
|
||||
npc: 'Town Crier',
|
||||
|
||||
@@ -66,7 +66,7 @@ describe('POST /groups/:id/chat/:id/clearflags', () => {
|
||||
type: 'party',
|
||||
privacy: 'private',
|
||||
},
|
||||
members: 2,
|
||||
members: 1,
|
||||
});
|
||||
|
||||
await members[0].update({ 'auth.timestamps.created': new Date('2022-01-01') });
|
||||
@@ -76,17 +76,12 @@ describe('POST /groups/:id/chat/:id/clearflags', () => {
|
||||
await admin.post(`/groups/${group._id}/chat/${privateMessage.id}/flag`);
|
||||
|
||||
// first test that the flag was actually successful
|
||||
// author always sees own message; flag count is hidden from non-admins
|
||||
let messages = await members[0].get(`/groups/${group._id}/chat`);
|
||||
expect(messages[0].flagCount).to.eql(0);
|
||||
messages = await members[1].get(`/groups/${group._id}/chat`);
|
||||
expect(messages.length).to.eql(0);
|
||||
expect(messages[0].flagCount).to.eql(5);
|
||||
|
||||
// admin cannot directly request private group chat, but after unflag,
|
||||
// message should be revealed again and still have flagCount of 0
|
||||
await admin.post(`/groups/${group._id}/chat/${privateMessage.id}/clearflags`);
|
||||
messages = await members[1].get(`/groups/${group._id}/chat`);
|
||||
expect(messages.length).to.eql(1);
|
||||
|
||||
messages = await members[0].get(`/groups/${group._id}/chat`);
|
||||
expect(messages[0].flagCount).to.eql(0);
|
||||
});
|
||||
|
||||
|
||||
@@ -48,19 +48,6 @@ describe('Post /groups/:groupId/invite', () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('returns error when recipient has blocked the senders', async () => {
|
||||
const inviterNoBlocks = await inviter.update({ 'inbox.blocks': [] });
|
||||
const userWithBlockedInviter = await generateUser({ 'inbox.blocks': [inviter._id] });
|
||||
await expect(inviterNoBlocks.post(`/groups/${group._id}/invite`, {
|
||||
usernames: [userWithBlockedInviter.auth.local.lowerCaseUsername],
|
||||
}))
|
||||
.to.eventually.be.rejected.and.eql({
|
||||
code: 401,
|
||||
error: 'NotAuthorized',
|
||||
message: t('notAuthorizedToSendMessageToThisUser'),
|
||||
});
|
||||
});
|
||||
|
||||
it('invites a user to a group by username', async () => {
|
||||
const userToInvite = await generateUser();
|
||||
|
||||
|
||||
@@ -21,11 +21,11 @@ describe('payments : apple #verify', () => {
|
||||
let verifyStub;
|
||||
|
||||
beforeEach(async () => {
|
||||
verifyStub = sinon.stub(applePayments, 'verifyPurchase').resolves({});
|
||||
verifyStub = sinon.stub(applePayments, 'verifyGemPurchase').resolves({});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
applePayments.verifyPurchase.restore();
|
||||
applePayments.verifyGemPurchase.restore();
|
||||
});
|
||||
|
||||
it('makes a purchase', async () => {
|
||||
|
||||
@@ -21,11 +21,11 @@ describe('payments : google #verify', () => {
|
||||
let verifyStub;
|
||||
|
||||
beforeEach(async () => {
|
||||
verifyStub = sinon.stub(googlePayments, 'verifyPurchase').resolves({});
|
||||
verifyStub = sinon.stub(googlePayments, 'verifyGemPurchase').resolves({});
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
googlePayments.verifyPurchase.restore();
|
||||
googlePayments.verifyGemPurchase.restore();
|
||||
});
|
||||
|
||||
it('makes a purchase', async () => {
|
||||
|
||||
@@ -96,20 +96,6 @@ describe('PUT /user/auth/update-password', async () => {
|
||||
});
|
||||
});
|
||||
|
||||
it('returns an error when newPassword is too long', async () => {
|
||||
const body = {
|
||||
password,
|
||||
newPassword: '12345678910111213141516171819202122232425262728293031323334353637383940',
|
||||
confirmPassword: '12345678910111213141516171819202122232425262728293031323334353637383940',
|
||||
};
|
||||
|
||||
await expect(user.put(ENDPOINT, body)).to.eventually.be.rejected.and.eql({
|
||||
code: 400,
|
||||
error: 'BadRequest',
|
||||
message: t('invalidReqParams'),
|
||||
});
|
||||
});
|
||||
|
||||
it('returns an error when confirmPassword is missing', async () => {
|
||||
const body = {
|
||||
password,
|
||||
|
||||
@@ -37,8 +37,6 @@ describe('GET /faq', () => {
|
||||
|
||||
expect(res).to.have.property('questions');
|
||||
expect(res.questions[0]).to.eql({
|
||||
exclusions: [],
|
||||
heading: 'overview',
|
||||
question: translate('faqQuestion0'),
|
||||
ios: translate('iosFaqAnswer0'),
|
||||
});
|
||||
@@ -59,8 +57,6 @@ describe('GET /faq', () => {
|
||||
|
||||
expect(res).to.have.property('questions');
|
||||
expect(res.questions[0]).to.eql({
|
||||
exclusions: [],
|
||||
heading: 'overview',
|
||||
question: translate('faqQuestion0'),
|
||||
android: translate('androidFaqAnswer0'),
|
||||
});
|
||||
|
||||
@@ -18,21 +18,21 @@
|
||||
"@storybook/addon-links": "6.5.8",
|
||||
"@storybook/addon-notes": "5.3.21",
|
||||
"@storybook/addons": "6.5.9",
|
||||
"@storybook/vue": "6.5.14",
|
||||
"@vue/cli-plugin-babel": "^5.0.8",
|
||||
"@storybook/vue": "6.3.13",
|
||||
"@vue/cli-plugin-babel": "^4.5.15",
|
||||
"@vue/cli-plugin-eslint": "^4.5.19",
|
||||
"@vue/cli-plugin-router": "^5.0.8",
|
||||
"@vue/cli-plugin-unit-mocha": "^5.0.8",
|
||||
"@vue/cli-plugin-unit-mocha": "^4.5.15",
|
||||
"@vue/cli-service": "^4.5.15",
|
||||
"@vue/test-utils": "1.0.0-beta.29",
|
||||
"amplitude-js": "^8.21.3",
|
||||
"amplitude-js": "^8.21.1",
|
||||
"axios": "^0.27.2",
|
||||
"axios-progress-bar": "^1.2.0",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"bootstrap": "^4.6.0",
|
||||
"bootstrap-vue": "^2.23.1",
|
||||
"chai": "^4.3.7",
|
||||
"core-js": "^3.27.2",
|
||||
"bootstrap-vue": "^2.22.0",
|
||||
"chai": "^4.3.6",
|
||||
"core-js": "^3.26.0",
|
||||
"dompurify": "^2.4.1",
|
||||
"eslint": "^6.8.0",
|
||||
"eslint-config-habitrpg": "^6.2.0",
|
||||
@@ -42,7 +42,7 @@
|
||||
"hellojs": "^1.19.5",
|
||||
"inspectpack": "^4.7.1",
|
||||
"intro.js": "^6.0.0",
|
||||
"jquery": "^3.6.3",
|
||||
"jquery": "^3.6.1",
|
||||
"lodash": "^4.17.21",
|
||||
"moment": "^2.29.4",
|
||||
"nconf": "^0.12.0",
|
||||
@@ -66,6 +66,6 @@
|
||||
"webpack": "^4.46.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/plugin-proposal-optional-chaining": "^7.20.7"
|
||||
"@babel/plugin-proposal-optional-chaining": "^7.18.9"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,7 +35,6 @@
|
||||
<sub-canceled-modal v-if="isUserLoaded" />
|
||||
<bug-report-modal v-if="isUserLoaded" />
|
||||
<bug-report-success-modal v-if="isUserLoaded" />
|
||||
<birthday-modal />
|
||||
<snackbars />
|
||||
<router-view v-if="!isUserLoggedIn || isStaticPage" />
|
||||
<template v-else>
|
||||
@@ -43,7 +42,6 @@
|
||||
<damage-paused-banner />
|
||||
<gems-promo-banner />
|
||||
<gift-promo-banner />
|
||||
<birthday-banner />
|
||||
<notifications-display />
|
||||
<app-menu />
|
||||
<div
|
||||
@@ -155,13 +153,11 @@
|
||||
import axios from 'axios';
|
||||
import { loadProgressBar } from 'axios-progress-bar';
|
||||
|
||||
import birthdayModal from '@/components/news/birthdayModal';
|
||||
import AppMenu from './components/header/menu';
|
||||
import AppHeader from './components/header/index';
|
||||
import DamagePausedBanner from './components/header/banners/damagePaused';
|
||||
import GemsPromoBanner from './components/header/banners/gemsPromo';
|
||||
import GiftPromoBanner from './components/header/banners/giftPromo';
|
||||
import BirthdayBanner from './components/header/banners/birthdayBanner';
|
||||
import AppFooter from './components/appFooter';
|
||||
import notificationsDisplay from './components/notifications';
|
||||
import snackbars from './components/snackbars/notifications';
|
||||
@@ -195,11 +191,9 @@ export default {
|
||||
AppMenu,
|
||||
AppHeader,
|
||||
AppFooter,
|
||||
birthdayModal,
|
||||
DamagePausedBanner,
|
||||
GemsPromoBanner,
|
||||
GiftPromoBanner,
|
||||
BirthdayBanner,
|
||||
notificationsDisplay,
|
||||
snackbars,
|
||||
BuyModal,
|
||||
|
||||
@@ -156,12 +156,6 @@
|
||||
height: 99px;
|
||||
}
|
||||
|
||||
.Pet-Gryphatrice-Jubilant {
|
||||
background: url("https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Gryphatrice-Jubilant.gif") no-repeat;
|
||||
width: 81px;
|
||||
height: 96px;
|
||||
}
|
||||
|
||||
.Mount_Head_Gryphon-Gryphatrice, .Mount_Body_Gryphon-Gryphatrice {
|
||||
width: 135px;
|
||||
height: 135px;
|
||||
|
||||
|
Before Width: | Height: | Size: 22 KiB |
|
Before Width: | Height: | Size: 29 KiB |
|
Before Width: | Height: | Size: 8.5 KiB After Width: | Height: | Size: 7.4 KiB |
|
Before Width: | Height: | Size: 332 B |
|
Before Width: | Height: | Size: 358 B |
|
Before Width: | Height: | Size: 850 B |
|
Before Width: | Height: | Size: 1.2 KiB |
@@ -1,61 +0,0 @@
|
||||
<svg width="199" height="24" viewBox="0 0 199 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g filter="url(#c19w6aye5a)" fill="#fff">
|
||||
<path d="M56.47 18.83V6.003L56 3.662l.47-1.405h8.942c1.773 0 3.193.344 4.26 1.03 1.066.687 1.6 1.733 1.6 3.137 0 .765-.142 1.397-.424 1.896a4.175 4.175 0 0 1-1.035 1.24 4.14 4.14 0 0 1 1.505.703c.471.327.855.772 1.154 1.334.297.546.447 1.225.447 2.036 0 1.639-.487 2.918-1.46 3.839-.956.905-2.502 1.358-4.635 1.358H56.471zm5.177-10.136h2.777c.533 0 .918-.078 1.153-.234.235-.171.353-.429.353-.772 0-.359-.173-.609-.518-.75-.345-.155-.753-.233-1.223-.233h-2.542v1.99zm0 5.688h4c.628 0 1.067-.093 1.318-.28a.974.974 0 0 0 .377-.796c0-.75-.486-1.124-1.46-1.124h-4.235v2.2zM75.515 18.83V6.003l-.236-2.341.236-1.405h5.2V18.83h-5.2zM84 18.83V6.026l-.471-2.364.47-1.405h8.472c1.27 0 2.36.203 3.27.61.91.405 1.608 1.06 2.095 1.965.486.89.73 2.068.73 3.535 0 1.357-.228 2.473-.683 3.347a4.552 4.552 0 0 1-2 1.99l.4.327 1.623 2.2 1.341 1.194v1.405h-6.235l-2.588-4.284h-1.248v.515l.236 2.34-.236 1.429H84zm5.176-8.66h1.365c.55 0 1.02-.024 1.412-.071.408-.047.722-.187.941-.421.22-.25.33-.648.33-1.194 0-.578-.118-.991-.353-1.24-.236-.25-.565-.399-.989-.446a9.614 9.614 0 0 0-1.435-.093h-1.506l.235 3.464zM104.666 18.83V6.728l-4.706.234V2.257h14.707v4.705l-4.824-.234v8.357l.259 2.34-.259 1.405h-5.177zM116.785 18.83V6.026l-.235-2.34.235-1.429h5.177v6.344h4.918V2.257h5.177v8.802l.235 1.615v6.156h-5.412v-5.946h-4.918v1.639l.235 4.307h-5.412zM135.588 18.83V6.026l-.471-2.34.471-1.429h7.977c1.114 0 2.188.11 3.223.328 1.051.203 1.985.593 2.801 1.17.831.578 1.49 1.405 1.976 2.482.486 1.076.73 2.473.73 4.19 0 1.716-.251 3.128-.753 4.236-.487 1.092-1.146 1.943-1.977 2.552a7.477 7.477 0 0 1-2.8 1.264 14.463 14.463 0 0 1-3.2.35h-7.977zm5.224-4.448h1.788c.926 0 1.702-.101 2.33-.304a2.498 2.498 0 0 0 1.458-1.147c.33-.577.495-1.412.495-2.504 0-1.108-.173-1.92-.518-2.435-.33-.53-.816-.874-1.459-1.03-.628-.171-1.396-.257-2.306-.257h-1.788v7.677zM153.013 18.83l1.13-3.956V11.9l1.741-.702 3.294-8.918h7.083l4.024 10.486 1.812 3.324v2.739h-5.106l-1.177-3.488h-6.377l-1.012 3.488h-5.412zm7.977-7.584h3.53l-1.553-4.658h-.494l-1.483 4.658zM176.04 18.83v-6.788l-5.835-8.38V2.257h5.906l2.353 4.822h.47l2.33-4.822h5.883v1.405l-6.001 8.52.141 2.364v4.284h-5.247zM191.923 12.72l-2.07-8.847L192.676 2l2.8 1.896-2.141 8.824h-1.412zm.518 7.28-3.059-3.043 3.059-3.043 3.059 3.043L192.441 20z"/>
|
||||
</g>
|
||||
<g filter="url(#s1alkvv8kb)">
|
||||
<path d="M5.87 18.825V7.601H3V3.17l8.228-.937.239 1.406-.24 2.344v12.841H5.87z" fill="url(#xidihnl5xc)"/>
|
||||
<path d="M21.258 19.06a9.043 9.043 0 0 1-2.87-.446 6.484 6.484 0 0 1-2.369-1.453c-.67-.671-1.195-1.546-1.578-2.624-.383-1.094-.574-2.43-.574-4.007 0-1.562.191-2.883.574-3.96.382-1.094.909-1.977 1.578-2.648a6.092 6.092 0 0 1 2.368-1.453A8.63 8.63 0 0 1 21.257 2c1.356 0 2.584.281 3.684.844 1.116.562 2.001 1.468 2.655 2.718.67 1.234 1.004 2.89 1.004 4.968s-.335 3.741-1.004 4.991c-.654 1.25-1.539 2.156-2.655 2.718-1.1.547-2.328.82-3.683.82zm0-5.039c.701 0 1.187-.25 1.459-.75.27-.5.406-1.413.406-2.741 0-1.313-.136-2.219-.407-2.719-.27-.515-.757-.773-1.459-.773-.685 0-1.18.258-1.483.773-.287.516-.43 1.422-.43 2.719 0 1.312.143 2.226.43 2.742.303.5.798.75 1.483.75z" fill="url(#9hqzmmkygd)"/>
|
||||
<path d="M32.721 12.014V4.745l-2.87.14V2.06h8.97v2.826l-2.943-.141v5.02l.158 1.405-.158.844h-3.157z" fill="url(#bzq8gpt5ve)"/>
|
||||
<path d="M40.543 12.014v-7.69l-.144-1.407.144-.857H43.7v3.81h3V2.06h3.156v5.286l.144.97v3.698h-3.3V8.443h-3v.984l.143 2.587h-3.3z" fill="url(#4t6arxwa4f)"/>
|
||||
</g>
|
||||
<defs>
|
||||
<linearGradient id="xidihnl5xc" x1="3" y1="2" x2="29.822" y2="35.308" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#6133B4"/>
|
||||
<stop offset="1" stop-color="#4F2A93"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="9hqzmmkygd" x1="3" y1="2" x2="29.822" y2="35.308" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#6133B4"/>
|
||||
<stop offset="1" stop-color="#4F2A93"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="bzq8gpt5ve" x1="3" y1="2" x2="29.822" y2="35.308" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#6133B4"/>
|
||||
<stop offset="1" stop-color="#4F2A93"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="4t6arxwa4f" x1="3" y1="2" x2="29.822" y2="35.308" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#6133B4"/>
|
||||
<stop offset="1" stop-color="#4F2A93"/>
|
||||
</linearGradient>
|
||||
<filter id="c19w6aye5a" x="53" y="0" width="145.5" height="24" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="1"/>
|
||||
<feGaussianBlur stdDeviation="1.5"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix values="0 0 0 0 0.101961 0 0 0 0 0.0941176 0 0 0 0 0.113725 0 0 0 0.12 0"/>
|
||||
<feBlend in2="BackgroundImageFix" result="effect1_dropShadow_45_799"/>
|
||||
<feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="1"/>
|
||||
<feGaussianBlur stdDeviation="1"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix values="0 0 0 0 0.101961 0 0 0 0 0.0941176 0 0 0 0 0.113725 0 0 0 0.24 0"/>
|
||||
<feBlend in2="effect1_dropShadow_45_799" result="effect2_dropShadow_45_799"/>
|
||||
<feBlend in="SourceGraphic" in2="effect2_dropShadow_45_799" result="shape"/>
|
||||
</filter>
|
||||
<filter id="s1alkvv8kb" x="0" y="0" width="53" height="23.059" filterUnits="userSpaceOnUse" color-interpolation-filters="sRGB">
|
||||
<feFlood flood-opacity="0" result="BackgroundImageFix"/>
|
||||
<feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="1"/>
|
||||
<feGaussianBlur stdDeviation="1.5"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix values="0 0 0 0 0.101961 0 0 0 0 0.0941176 0 0 0 0 0.113725 0 0 0 0.12 0"/>
|
||||
<feBlend in2="BackgroundImageFix" result="effect1_dropShadow_45_799"/>
|
||||
<feColorMatrix in="SourceAlpha" values="0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 127 0" result="hardAlpha"/>
|
||||
<feOffset dy="1"/>
|
||||
<feGaussianBlur stdDeviation="1"/>
|
||||
<feComposite in2="hardAlpha" operator="out"/>
|
||||
<feColorMatrix values="0 0 0 0 0.101961 0 0 0 0 0.0941176 0 0 0 0 0.113725 0 0 0 0.24 0"/>
|
||||
<feBlend in2="effect1_dropShadow_45_799" result="effect2_dropShadow_45_799"/>
|
||||
<feBlend in="SourceGraphic" in2="effect2_dropShadow_45_799" result="shape"/>
|
||||
</filter>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.8 KiB |
@@ -1,22 +0,0 @@
|
||||
<svg width="58" height="48" viewBox="0 0 58 48" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m16.853 4.36 7.959-1.453-2.71 7.556-2.708 7.557-5.25-6.103-5.25-6.103 7.959-1.453z" fill="#5DDEAB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M32.771 1.454 40.731 0l-2.71 7.556-2.709 7.556-5.25-6.102-5.25-6.103 7.96-1.453z" fill="#5DDEAB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m43.272 13.659-7.96 1.453 2.71-7.556L40.73 0l5.25 6.103 5.25 6.102-7.96 1.454z" fill="#38C38D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m27.353 16.566-7.96 1.453 2.71-7.556 2.709-7.556 5.25 6.103 5.25 6.102-7.96 1.454zM11.434 19.473l-7.959 1.453 2.71-7.556 2.708-7.556 5.25 6.103 5.25 6.102-7.959 1.454z" fill="#B0F1D7"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m3.475 20.926 28.05 18.662L19.394 18.02 3.475 20.926z" fill="#38C38D"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M51.249 12.202 31.525 39.588l3.805-24.48 15.919-2.906z" fill="#B0F1D7"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m19.394 18.02 12.131 21.568 3.787-24.476-15.918 2.907z" fill="#5DDEAB"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m51.904 26.44-3.832-.897 1.132 3.736 1.132 3.737 2.7-2.84 2.7-2.84-3.832-.896zM44.24 24.647l-3.832-.897 1.132 3.736 1.132 3.736 2.7-2.84 2.7-2.839-3.832-.896z" fill="#87E3E1"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m38.84 30.326 3.832.896-1.132-3.736-1.132-3.736-2.7 2.84-2.7 2.839 3.832.897zM46.504 32.12l3.832.896-1.132-3.736-1.132-3.737-2.7 2.84-2.7 2.84 3.832.896z" fill="#C0FBFA"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M54.168 33.912 58 34.81l-1.132-3.736-1.133-3.736-2.7 2.84-2.7 2.839 3.833.896z" fill="#5EC5C2"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m58 34.81-14.084 8.395 6.42-10.19L58 34.81z" fill="#C0FBFA"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m35 29.427 8.916 13.779-1.252-11.986L35 29.427z" fill="#5EC5C2"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m50.336 33.016-6.42 10.19-1.244-11.984 7.664 1.794z" fill="#87E3E1"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m16.877 22.666-5.078 1.971 4.262 3.372 4.262 3.37.816-5.341.816-5.343-5.078 1.971zM6.721 26.609l-5.078 1.97 4.262 3.372 4.262 3.371.816-5.342.816-5.343-5.078 1.972z" fill="#7BE3CF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m5.09 37.294 5.077-1.972-4.262-3.371-4.261-3.371-.817 5.342-.816 5.343 5.078-1.971z" fill="#C5F3EA"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m15.245 33.351 5.078-1.971-4.262-3.371-4.262-3.371-.816 5.342-.816 5.342 5.078-1.97z" fill="#C5F3EA"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m25.4 29.41 5.078-1.972-4.262-3.371-4.261-3.372-.816 5.343-.816 5.342 5.078-1.97z" fill="#41C7AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M30.478 27.438 21.117 48l-.794-16.62 10.155-3.942z" fill="#C5F3EA"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m0 39.269 21.117 8.73-10.961-12.672L0 39.269z" fill="#41C7AF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M20.323 31.38 21.117 48l-10.95-12.678 10.156-3.942z" fill="#7BE3CF"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 3.1 KiB |
@@ -1,22 +0,0 @@
|
||||
<svg width="518" height="152" viewBox="0 0 518 152" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M144.48 65.487v5.042h-1.772v-5.042h1.772zm1.621 6.671h5.013v1.782h-5.013v-1.782zm-10.027 0h5.013v1.782h-5.013v-1.782zm8.406 3.412v5.041h-1.772V75.57h1.772z" fill="#36205D" style="mix-blend-mode:multiply" opacity=".5"/>
|
||||
<path opacity=".92" fill-rule="evenodd" clip-rule="evenodd" d="m9.504 29.894 2.707-4.715 1.658.962-2.707 4.715-1.658-.962zm2.066-7.12-4.689-2.722.958-1.667 4.688 2.723-.957 1.667zm9.378 5.445-4.689-2.722.957-1.667 4.69 2.722-.958 1.667zm-6.03-7.755 2.707-4.715 1.658.962-2.707 4.715-1.658-.962z" fill="#fff"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m60.85 11.508.708-3.662 1.288.251-.708 3.662-1.288-.252zm-.24-5.076-3.642-.712.25-1.295 3.642.712-.25 1.295zm7.283 1.423-3.642-.711.25-1.295 3.642.712-.25 1.294zm-5.627-3.671.708-3.662 1.287.251-.708 3.662-1.287-.251z" fill="#36205D" style="mix-blend-mode:multiply" opacity=".81"/>
|
||||
<path opacity=".76" fill-rule="evenodd" clip-rule="evenodd" d="m107.034 22.162.493 5.675-1.995.175-.494-5.674 1.996-.176zm2.477 7.349 5.643-.497.175 2.007-5.644.496-.174-2.006zm-11.287.993 5.644-.497.174 2.007-5.643.496-.175-2.006zm9.797 3.008.494 5.675-1.996.175-.493-5.675 1.995-.175z" fill="#fff"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m16.191 92.492-5.006 1.636-.575-1.78 5.006-1.636.575 1.78zm-6.098 3.792 1.626 5.034-1.77.578-1.626-5.034 1.77-.578zM6.839 86.215l1.627 5.035-1.77.578-1.627-5.034 1.77-.579zm-.66 9.549-5.006 1.635-.576-1.78 5.007-1.635.575 1.78z" fill="#36205D" style="mix-blend-mode:multiply" opacity=".91"/>
|
||||
<path opacity=".92" fill-rule="evenodd" clip-rule="evenodd" d="m35.176 59.176 5.102-1.97.692 1.814-5.101 1.97-.693-1.814zm6.118-4.264-1.958-5.13 1.803-.696 1.958 5.13-1.803.696zm3.916 10.26-1.958-5.13 1.804-.696 1.958 5.13-1.804.696zm.17-9.935 5.1-1.969.693 1.814-5.101 1.969-.693-1.814z" fill="#fff"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m95.733 86.583-4.383 2.649-.931-1.559 4.383-2.648.93 1.558zm-4.949 4.93 2.634 4.407-1.55.936-2.633-4.407 1.55-.937zm-5.267-8.816 2.633 4.408-1.55.936-2.633-4.408 1.55-.936zm1.45 9.183-4.384 2.648-.93-1.558 4.382-2.648.931 1.558z" fill="#36205D" style="mix-blend-mode:multiply"/>
|
||||
<path opacity=".98" fill-rule="evenodd" clip-rule="evenodd" d="m24.804 132.406-2.1-3.015 1.06-.746 2.1 3.014-1.06.747zm-3.747-3.307-2.998 2.111-.742-1.066 2.998-2.111.742 1.066zm5.996-4.222-2.998 2.111-.742-1.066 2.998-2.11.742 1.065zm-6.447 1.5-2.1-3.015 1.06-.746 2.1 3.014-1.06.747z" fill="#fff"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m60.65 142.295-1.594 3.144-1.105-.567 1.593-3.144 1.105.567zm-1.098 4.678 3.126 1.602-.563 1.112-3.127-1.602.564-1.112zm-6.254-3.204 3.127 1.602-.563 1.112-3.127-1.603.563-1.111zm4.165 4.814-1.593 3.144-1.106-.566 1.593-3.144 1.106.566z" fill="#36205D" style="mix-blend-mode:multiply" opacity=".82"/>
|
||||
<path opacity=".71" fill-rule="evenodd" clip-rule="evenodd" d="m110.507 140.233 2.321-4.582 1.611.826-2.321 4.581-1.611-.825zm1.599-6.817-4.556-2.335.821-1.62 4.556 2.335-.821 1.62zm9.112 4.669-4.556-2.335.821-1.62 4.556 2.335-.821 1.62zm-6.068-7.015 2.321-4.582 1.611.825-2.321 4.582-1.611-.825z" fill="#fff"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M373.52 65.487v5.042h1.772v-5.042h-1.772zm-1.621 6.671h-5.013v1.782h5.013v-1.782zm10.027 0h-5.013v1.782h5.013v-1.782zm-8.406 3.412v5.041h1.772V75.57h-1.772z" fill="#36205D" style="mix-blend-mode:multiply" opacity=".5"/>
|
||||
<path opacity=".92" fill-rule="evenodd" clip-rule="evenodd" d="m508.496 29.894-2.707-4.715-1.658.962 2.707 4.715 1.658-.962zm-2.066-7.12 4.689-2.722-.958-1.667-4.689 2.723.958 1.667zm-9.378 5.445 4.689-2.722-.957-1.667-4.689 2.722.957 1.667zm6.03-7.755-2.707-4.715-1.658.962 2.707 4.715 1.658-.962z" fill="#fff"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m457.15 11.508-.708-3.662-1.287.251.707 3.662 1.288-.252zm.24-5.076 3.642-.712-.25-1.295-3.642.712.25 1.295zm-7.283 1.423 3.642-.711-.251-1.295-3.641.712.25 1.294zm5.627-3.671-.708-3.662-1.287.251.708 3.662 1.287-.251z" fill="#36205D" style="mix-blend-mode:multiply" opacity=".81"/>
|
||||
<path opacity=".76" fill-rule="evenodd" clip-rule="evenodd" d="m410.966 22.162-.493 5.675 1.995.175.494-5.674-1.996-.176zm-2.477 7.349-5.643-.497-.175 2.007 5.644.496.174-2.006zm11.287.993-5.644-.497-.174 2.007 5.643.496.175-2.006zm-9.797 3.008-.494 5.675 1.996.175.493-5.675-1.995-.175z" fill="#fff"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m501.809 92.492 5.006 1.636.575-1.78-5.006-1.636-.575 1.78zm6.098 3.792-1.626 5.034 1.77.578 1.626-5.034-1.77-.578zm3.254-10.069-1.627 5.035 1.77.578 1.627-5.034-1.77-.579zm.66 9.549 5.006 1.635.576-1.78-5.007-1.635-.575 1.78z" fill="#36205D" style="mix-blend-mode:multiply" opacity=".91"/>
|
||||
<path opacity=".92" fill-rule="evenodd" clip-rule="evenodd" d="m482.824 59.176-5.102-1.97-.692 1.814 5.101 1.97.693-1.814zm-6.118-4.264 1.958-5.13-1.803-.696-1.958 5.13 1.803.696zm-3.916 10.26 1.958-5.13-1.804-.696-1.958 5.13 1.804.696zm-.169-9.935-5.102-1.969-.692 1.814 5.101 1.969.693-1.814z" fill="#fff"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m422.267 86.583 4.383 2.649.932-1.559-4.384-2.648-.931 1.558zm4.949 4.93-2.634 4.407 1.55.936 2.634-4.407-1.55-.937zm5.267-8.816-2.633 4.408 1.549.936 2.634-4.408-1.55-.936zm-1.449 9.183 4.383 2.648.931-1.558-4.383-2.648-.931 1.558z" fill="#36205D" style="mix-blend-mode:multiply"/>
|
||||
<path opacity=".98" fill-rule="evenodd" clip-rule="evenodd" d="m493.196 132.406 2.099-3.015-1.06-.746-2.099 3.014 1.06.747zm3.747-3.307 2.998 2.111.742-1.066-2.998-2.111-.742 1.066zm-5.996-4.222 2.998 2.111.742-1.066-2.998-2.11-.742 1.065zm6.447 1.5 2.1-3.015-1.06-.746-2.099 3.014 1.059.747z" fill="#fff"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m457.351 142.295 1.593 3.144 1.105-.567-1.593-3.144-1.105.567zm1.097 4.678-3.126 1.602.563 1.112 3.127-1.602-.564-1.112zm6.254-3.204-3.127 1.602.563 1.112 3.127-1.603-.563-1.111zm-4.165 4.814 1.593 3.144 1.106-.566-1.593-3.144-1.106.566z" fill="#36205D" style="mix-blend-mode:multiply" opacity=".82"/>
|
||||
<path opacity=".71" fill-rule="evenodd" clip-rule="evenodd" d="m407.493 140.233-2.321-4.582-1.611.826 2.321 4.581 1.611-.825zm-1.599-6.817 4.556-2.335-.821-1.62-4.556 2.335.821 1.62zm-9.112 4.669 4.556-2.335-.821-1.62-4.556 2.335.821 1.62zm6.068-7.015-2.321-4.582-1.611.825 2.321 4.582 1.611-.825z" fill="#fff"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 6.4 KiB |
@@ -1,3 +0,0 @@
|
||||
<svg width="12" height="12" viewBox="0 0 12 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M1.26512 0L4.84341 3.57829L3.57829 4.84341L0 1.26512L1.26512 0ZM7.15659 3.57829L10.7349 5.33207e-08L12 1.26512L8.42171 4.84341L7.15659 3.57829ZM5.33207e-08 10.7349L3.57829 7.15659L4.84341 8.42171L1.26512 12L5.33207e-08 10.7349ZM8.42171 7.15659L12 10.7349L10.7349 12L7.15659 8.42171L8.42171 7.15659Z" fill="#FFB445"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 469 B |
@@ -1,4 +0,0 @@
|
||||
<svg width="138" height="12" viewBox="0 0 138 12" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m127.265 0 3.578 3.578-1.265 1.265L126 1.265 127.265 0zm5.892 3.578L136.735 0 138 1.265l-3.578 3.578-1.265-1.265zM126 10.735l3.578-3.578 1.265 1.265L127.265 12 126 10.735zm8.422-3.578L138 10.735 136.735 12l-3.578-3.578 1.265-1.265z" fill="#FFB445"/>
|
||||
<path d="M114.445 4.555 112.5 1l-1.945 3.555L107.914 6h-3.828l-1.349-.737L101.5 3l-1.237 2.263L98.914 6H0v1h98.914l1.349.737L101.5 10l1.237-2.263L104.086 7h3.828l2.641 1.445L112.5 12l1.945-3.555L118 6.5l-3.555-1.945z" fill="#36205D"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 647 B |
@@ -1,37 +0,0 @@
|
||||
<svg width="85" height="32" viewBox="0 0 85 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m4.93 12.255 2.466-.63-1.983-1.597-.63-2.468-1.595 1.986-2.465.63 1.983 1.597.63 2.468 1.595-1.986zM80.034 7.698l2.465-.63-1.983-1.597-.63-2.468-1.594 1.985-2.466.631 1.983 1.596.63 2.469 1.595-1.986zM42.27 7.427l2.929.487-1.368-2.638.487-2.932-2.635 1.37-2.928-.488 1.367 2.638-.486 2.932 2.634-1.37zM78.215 26.355l2.694 2.064.033-3.396 2.063-2.697-3.393-.034-2.694-2.065-.033 3.397-2.062 2.697 3.392.034zM38.321 28.092l2.092.348-.977-1.885.347-2.094-1.881.978-2.092-.348.977 1.884-.348 2.095 1.882-.978zM12.17 30.035l.916 1.915.981-1.882 1.913-.916-1.88-.982-.915-1.916-.981 1.882-1.913.917 1.88.982z" fill="#fff" fill-opacity=".5"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m24.878 12.01 6.73-1.805 2.524 9.433-6.73 1.806-2.524-9.433z" fill="#F9F9F9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m18.148 13.816 6.73-1.805 2.524 9.433-6.73 1.805-2.524-9.433z" fill="#E1E0E3"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m23.532 12.372 1.346-.361 2.524 9.433-1.346.36-2.524-9.432z" fill="#6133B4"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m24.878 12.01 1.346-.36 2.524 9.433-1.346.36-2.524-9.432z" fill="#9A62FF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m25.696 20.457 1.345-.36.361 1.347-1.346.36-.36-1.347zM23.532 12.372l1.346-.361.36 1.347-1.346.361-.36-1.347z" fill="#4F2A93"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m18.148 13.816 5.384-1.444.36 1.348-5.383 1.444-.36-1.348zM20.312 21.902l5.384-1.445.36 1.348-5.383 1.444-.36-1.347zM26.224 11.65l5.383-1.445.36 1.348-5.383 1.444-.36-1.347zM28.387 19.735l5.384-1.444.36 1.347-5.383 1.445-.36-1.348z" fill="#BDA8FF" fill-opacity=".3"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m27.041 20.096 1.346-.36.361 1.347-1.346.36-.36-1.347zM24.878 12.01l1.346-.36.36 1.347-1.346.361-.36-1.347z" fill="#6133B4"/>
|
||||
<path clip-rule="evenodd" d="M24.735 4.954c-.335-1.183-1.148-2.301-2.285-2.51-1.138-.21-1.923.616-1.7 1.476.221.86 1 1.122 3.498 2.183.71.302.823.034.487-1.149z" stroke="#6133B4" stroke-width="1.5"/>
|
||||
<path clip-rule="evenodd" d="M27.66 5.365c.648-1.044 1.737-1.895 2.888-1.782 1.151.112 1.678 1.123 1.228 1.889-.45.765-1.27.802-3.964 1.133-.765.094-.8-.195-.152-1.24z" stroke="#9A62FF" stroke-width="1.5"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M26.319 4.294c-2.24-.315-1.259 2.44-.36 2.566.898.126 2.6-2.25.36-2.566z" fill="#4F2A93"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m26.016 6.454 8.279 1.165-.582 4.145-8.279-1.165.582-4.145z" fill="#F9F9F9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m17.737 5.29 8.279 1.164-.582 4.145-8.279-1.165.582-4.145z" fill="#E1E0E3"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m23.256 6.066 5.52.777-.582 4.144-5.52-.776.582-4.145z" fill="#9A62FF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m23.256 6.066 2.76.388-.582 4.145-2.76-.388.582-4.145z" fill="#6133B4"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m26.016 6.454 2.76.389-.195 1.381-2.76-.388.195-1.382z" fill="#6133B4"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m23.256 6.066 2.76.388-.194 1.382-2.76-.388.194-1.382z" fill="#4F2A93"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m17.349 8.053 5.52.776-.195 1.382-5.519-.777.194-1.381zM28.388 9.606l5.519.776-.194 1.382-5.52-.777.195-1.381z" fill="#BDA8FF" fill-opacity=".3"/>
|
||||
<path clip-rule="evenodd" d="M56.55 9.16c-.624-1.413-1.83-2.662-3.282-2.724-1.452-.062-2.285 1.104-1.858 2.135.426 1.031 1.441 1.22 4.734 2.104.935.25 1.03-.102.406-1.515z" stroke="#6133B4" stroke-width="1.5"/>
|
||||
<path clip-rule="evenodd" d="M60.26 9.16c.624-1.413 1.83-2.662 3.283-2.724 1.451-.062 2.284 1.104 1.857 2.135-.426 1.031-1.44 1.22-4.734 2.104-.935.25-1.03-.102-.406-1.515z" stroke="#9A62FF" stroke-width="1.5"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M58.405 8.061c-2.842 0-1.14 3.256 0 3.256s2.842-3.256 0-3.256z" fill="#4F2A93"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M58.405 10.802H68.91v5.259H58.405v-5.259z" fill="#F9F9F9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M47.901 10.802h10.504v5.259H47.901v-5.259z" fill="#E1E0E3"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M54.904 10.802h7.002v5.259h-7.002v-5.259z" fill="#9A62FF"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M54.904 10.802h3.501v5.259h-3.501v-5.259zM58.405 10.802h3.501v1.753h-3.5v-1.753z" fill="#6133B4"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M54.904 10.802h3.501v1.753h-3.501v-1.753z" fill="#4F2A93"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M58.405 16.06h8.753v12.27h-8.753V16.06z" fill="#F9F9F9"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M49.652 16.06h8.753v12.27h-8.753V16.06z" fill="#E1E0E3"/>
|
||||
<path fill="#6133B4" d="M56.654 16.061h1.751v12.27h-1.751z"/>
|
||||
<path fill="#9A62FF" d="M58.405 16.061h1.751v12.27h-1.751z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M56.654 26.578h1.751v1.753h-1.75v-1.753zM56.654 16.06h1.751v1.754h-1.75V16.06z" fill="#4F2A93"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M49.652 16.06h7.002v1.754h-7.002V16.06z" fill="#BDA8FF" fill-opacity=".3"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M47.901 14.308h7.003v1.753H47.9v-1.753zM49.652 26.578h7.002v1.753h-7.002v-1.753zM60.156 16.06h7.002v1.754h-7.002V16.06z" fill="#BDA8FF" fill-opacity=".3"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M61.906 14.308h7.003v1.753h-7.003v-1.753zM60.156 26.578h7.002v1.753h-7.002v-1.753z" fill="#BDA8FF" fill-opacity=".3"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M58.405 26.578h1.75v1.753h-1.75v-1.753zM58.405 16.06h1.75v1.754h-1.75V16.06z" fill="#6133B4"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.7 KiB |
@@ -1,9 +0,0 @@
|
||||
<svg width="68" height="68" viewBox="0 0 68 68" fill="none" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
|
||||
<path fill="url(#sxizdfpdya)" d="M0 0h68v68H0z"/>
|
||||
<defs>
|
||||
<pattern id="sxizdfpdya" patternContentUnits="objectBoundingBox" width="1" height="1">
|
||||
<use xlink:href="#pomapjzcdb" transform="scale(.0147)"/>
|
||||
</pattern>
|
||||
<image id="pomapjzcdb" width="68" height="68" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEQAAABECAYAAAA4E5OyAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH5gwJFx8lKwafmAAABjRJREFUeNrtm39MVWUYx78IV5BfF3Qg8kNppNIoyhKWZmUBlpRNpC3Uac7EUUGrscxM+AOHia1foKmDHOHItkbhLGnpzGVBimtlozmVTeByCRDhwgXll/THc17de3zvuedernDd3uefc895f5/zuc/3ed57DyBNmjRpzpuH+sLvR8fGAODR0nS+YmAgAMCQNQMAMJKwkys//+tUAMDQDTrPzNgIACj58iAAoLH5LADgx/Kzwols/zyba3+jny9n7WNmJ3LXffzoONUHTrVPyvDg7sEUyQRvXrYKrvX2AgCmK2RUxL9OT35oDzWs38bVf3XlNe78sfindE3gam/TpCw87fwPwuuSEL2EXMg6DgBY/HW6+E4OdQAA4lZ4CYnotVgBAEvShuiIRwAAXxV/y9Xbve+jSSHj2SfIl1RLQpwkRO1LmDEimJV+Qyqy+709wvZx/3wBAFhk3QQAONlYqKoxpGuijLDfvnduodmnTwIAUrM2ataThDhKSEp9FH2o38/5iopCuuO1/drqceAy+YiSAPI5m+rE9UvLcjTnweKfJWk7nVtppb5qkhB7hLAI01Y8wdSjyzLM9aCOJ9qrI+jDZTqkNlwBAByLixZOpMtk4uIeZrVrqkgVhtYL4x9m830iXXJDJCH2CGGqwXKB4gKxevw9eBgA0HDwIgAg94UdAICZL1JSkd5H5w2VVB4ZHg8A6IkkEoKMREKPhVTM/AHFPdNLxHFP6TnKdTIX8vOp7a8AABxWcpnVwZ9pLvjSlRYAwNzoKEmIS1TGlnqc2H1aWO5n8qSIFGsAAKdazVx53pR5pDog1SkMuF8z7rnD1yi+a4bRICy39vUBAPwDAhSVe5uy3Scp283+iUjE8ymSEJcQolaPVxZkkldPJRKiYmZqtl+3iy9vaWwk1agcJTUKJ18S9TI5gSu59ASjP07R9F0PW1YLV1BlzSMfhh1SZSaEkHe25ZMK1LQBANpa2wEAyTELxjUw64dZFOYJs21bxkjxcdAL1qzdCgBYXrlLEuJSlWFPdGlmuOIL6Lz/L4pITeZmIicnnH/SVV5cOfM9rJ9TpUyF5rl0YZXtebpISTr6viTEpXHIgy9NAwD4+voCAA4da+YIamn05OqbzKNc+bqMhwAAAwMDCiHudUMkIc4Swr7zakvf7698omNoaKiKqA6uXG+/kpB7jRCmBsEhscoVyikWrpoFAPAYJZ8wcqvjQQBAeKgRADDmST7n3HdXlRoGpV+KXFcVxWiO391F+zCY7dxC9baXhOglxPIL/UhqNlOEunKfNwAgInKYU5kLJ9Sbqjds9Ej15iYZOJVhVlfM9k3oERqf8ZE+xK0JYZElix96/iQ1iFRtXcYm+3E+5OaUafwdv3md8yEWi0WoMrcjVjKjiyNXSYirCWE5hzqrPVPA5ybZR4xc+d6VlzlfkKbakj20voMrj00f4fZNWI4k4xB3J4R9p5dmQjM3OX7AU3Of4+cy7XI/Ve7Dxk3eEiMJuSciVZbd3jZSjfkgdVi2KUyzvb1ydf+Tnf1KQvQSYisLTcyYodlh8ub7uPjDXnt1xGpr3M7OrnEtVG97SYg9QrYVPQcAWDywXZXdQslF9HXMIlZbpDBrrTOofAhlv7W+bwjr118sI082SL/wfZpfJ33IhBJiDAxWvtx0iFg0zMcR9bwqtGFM1cOAQ0NGLBLXvzUPdRbe2y1Vxi1UpiFsr/LpE+76rIQR7jzI3yD0Hepsl1mPdVilMrbGhSY51zt7JSFuEameKZjOZbfrKnxdOoGqLCuX/U62SUIcJaS8ZQN3fmItX74hqpwj6M1q/h9BJataOQLKW14TD9Sib8JMZT7MrZOEuAUhDhO0AuMiwJb919k0LjIu/UH7MMuXSUIcsjveuYt7IH7MHSdq7FkOAAgJpm3/t/Lpf6v23rlj/7Pt7DYJ28t37hwlJDHh8TEA6LcOCJ8QM3an7e5DKE/mDrUIquHO/fzF8Y2X6WnhdTb+lqJsISHs/R1b47P2R/7NkYQ4pDJhIXPoCXp3c/sOIR7OvW1gi6QRPyJimnegMLtlqhI+JwgAYG7qEZL37uatuubB+rltVqkyExKH3G1TkzHefhixhkBJiDRp0qTddfsfGCIUXNZsU4gAAAAASUVORK5CYII="/>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.7 KiB |
@@ -1 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?><svg id="a" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><rect width="16" height="16" fill="none"/><g id="b"><g id="c"><g id="d"><polygon id="e" points="12.2 2 14 3.8 9.8 8 14 12.2 12.2 14 8 9.8 3.8 14 2 12.2 6.2 8 2 3.8 3.8 2 8 6.2 12.2 2"/></g></g></g></svg>
|
||||
|
Before Width: | Height: | Size: 308 B |
@@ -1,5 +0,0 @@
|
||||
<svg width="48" height="20" viewBox="0 0 48 20" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="M48 10.334c0-3.418-1.653-6.115-4.813-6.115-3.174 0-5.094 2.697-5.094 6.088 0 4.019 2.267 6.048 5.52 6.048 1.587 0 2.787-.36 3.694-.868v-2.67c-.907.454-1.947.735-3.267.735-1.293 0-2.44-.454-2.587-2.03h6.52c0-.173.027-.868.027-1.188zm-6.587-1.268c0-1.51.92-2.137 1.76-2.137.813 0 1.68.628 1.68 2.136h-3.44zM32.947 4.22c-1.307 0-2.147.613-2.614 1.04l-.173-.827h-2.933V20l3.333-.707.013-3.779c.48.347 1.187.841 2.36.841 2.387 0 4.56-1.922 4.56-6.155-.013-3.871-2.213-5.98-4.546-5.98zm-.8 9.198c-.787 0-1.254-.28-1.574-.627l-.013-4.954c.347-.387.827-.654 1.587-.654 1.213 0 2.053 1.362 2.053 3.11 0 1.79-.827 3.125-2.053 3.125zM22.64 3.431l3.346-.72V0L22.64.708V3.43z" fill="#635BFF"/>
|
||||
<path fill="#635BFF" d="M22.64 4.446h3.347v11.682H22.64z"/>
|
||||
<path fill-rule="evenodd" clip-rule="evenodd" d="m19.053 5.434-.213-.988h-2.88v11.682h3.333V8.211c.787-1.028 2.12-.841 2.534-.694V4.446c-.427-.16-1.987-.454-2.774.988zM12.387 1.549l-3.254.694-.013 10.694c0 1.976 1.48 3.431 3.453 3.431 1.094 0 1.894-.2 2.334-.44v-2.71c-.427.173-2.534.787-2.534-1.189V7.29h2.534V4.447h-2.534l.014-2.897zM3.373 7.837c0-.52.427-.72 1.134-.72 1.013 0 2.293.306 3.306.854V4.833a8.783 8.783 0 0 0-3.306-.614C1.8 4.22 0 5.634 0 7.997c0 3.685 5.067 3.098 5.067 4.687 0 .614-.534.814-1.28.814-1.107 0-2.52-.454-3.64-1.068v3.178a9.233 9.233 0 0 0 3.64.76c2.773 0 4.68-1.375 4.68-3.764-.014-3.98-5.094-3.271-5.094-4.767z" fill="#635BFF"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.5 KiB |
@@ -40,6 +40,11 @@
|
||||
v-model="hero.auth.blocked"
|
||||
type="checkbox"
|
||||
> Ban / Block
|
||||
<p>
|
||||
<small>
|
||||
Banning a user also auto-hides all their guild posts.
|
||||
</small>
|
||||
</p>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-inline">
|
||||
|
||||
@@ -43,55 +43,42 @@
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
Perk offset months:
|
||||
Months until renewal:
|
||||
<strong>{{ hero.purchased.plan.consecutive.offset }}</strong>
|
||||
</div>
|
||||
<div>
|
||||
Next Mystic Hourglass:
|
||||
<strong>{{ nextHourglassDate }}</strong>
|
||||
</div>
|
||||
<div class="form-inline">
|
||||
<label>
|
||||
Mystic Hourglasses:
|
||||
<input
|
||||
v-model="hero.purchased.plan.consecutive.trinkets"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
step="1"
|
||||
>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-inline">
|
||||
<label>
|
||||
Gem cap increase:
|
||||
<input
|
||||
v-model="hero.purchased.plan.consecutive.gemCapExtra"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
max="25"
|
||||
step="5"
|
||||
>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
Total Gem cap:
|
||||
<strong>{{ Number(hero.purchased.plan.consecutive.gemCapExtra) + 25 }}</strong>
|
||||
</div>
|
||||
<div class="form-inline">
|
||||
<label>
|
||||
Gems bought this month:
|
||||
<input
|
||||
v-model="hero.purchased.plan.gemsBought"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
:max="hero.purchased.plan.consecutive.gemCapExtra + 25"
|
||||
step="1"
|
||||
>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
Next Mystic Hourglass:
|
||||
<strong>{{ nextHourglassDate }}</strong>
|
||||
</div>
|
||||
<div class="form-inline">
|
||||
<label>
|
||||
Mystic Hourglasses:
|
||||
<input
|
||||
v-model="hero.purchased.plan.consecutive.trinkets"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
step="1"
|
||||
>
|
||||
</label>
|
||||
</div>
|
||||
<div>
|
||||
Gem cap:
|
||||
<strong>{{ hero.purchased.plan.consecutive.gemCapExtra + 25 }}</strong>
|
||||
</div>
|
||||
<div class="form-inline">
|
||||
<label>
|
||||
Gems bought this month:
|
||||
<input
|
||||
v-model="hero.purchased.plan.gemsBought"
|
||||
class="form-control"
|
||||
type="number"
|
||||
min="0"
|
||||
:max="hero.purchased.plan.consecutive.gemCapExtra + 25"
|
||||
step="1"
|
||||
>
|
||||
</label>
|
||||
</div>
|
||||
<div
|
||||
v-if="hero.purchased.plan.extraMonths > 0"
|
||||
>
|
||||
@@ -152,6 +139,13 @@ export default {
|
||||
return currentPlanContext.nextHourglassDate.format('MMMM');
|
||||
},
|
||||
},
|
||||
watch: {
|
||||
'hero.purchased.plan.consecutive.count' () { // eslint-disable-line object-shorthand
|
||||
this.hero.purchased.plan.consecutive.gemCapExtra = Math.min(
|
||||
Math.floor(this.hero.purchased.plan.consecutive.count / 3) * 5, 25,
|
||||
);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
dateFormat (date) {
|
||||
return moment(date).format('YYYY/MM/DD');
|
||||
|
||||
@@ -224,7 +224,7 @@
|
||||
></div>
|
||||
</a><a
|
||||
class="social-circle"
|
||||
href="http://blog.habitrpg.com/"
|
||||
href="https://www.tumblr.com/Habitica"
|
||||
target="_blank"
|
||||
>
|
||||
<div
|
||||
@@ -578,7 +578,6 @@ h3 {
|
||||
.text{
|
||||
display: inline-block;
|
||||
vertical-align: bottom;
|
||||
text-overflow: hidden;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -50,21 +50,7 @@ export default {
|
||||
challengeId: this.challengeId,
|
||||
keep,
|
||||
});
|
||||
const userTasksByType = (await this.$store.dispatch('tasks:fetchUserTasks', { forceLoad: true })).data;
|
||||
let tagInUse = false;
|
||||
Object.keys(userTasksByType).forEach(taskType => {
|
||||
userTasksByType[taskType].forEach(task => {
|
||||
if (task.tags.indexOf(this.challengeId) > -1) {
|
||||
tagInUse = true;
|
||||
}
|
||||
});
|
||||
});
|
||||
if (!tagInUse) {
|
||||
await this.$store.dispatch(
|
||||
'tags:deleteTag',
|
||||
{ tagId: this.challengeId },
|
||||
);
|
||||
}
|
||||
await this.$store.dispatch('tasks:fetchUserTasks', { forceLoad: true });
|
||||
this.close();
|
||||
},
|
||||
close () {
|
||||
|
||||
@@ -121,7 +121,7 @@
|
||||
v-if="editing"
|
||||
class="menu-container col-2"
|
||||
:class="{active: activeTopPage === 'backgrounds'}"
|
||||
@click="changeTopPage('backgrounds', '2023')"
|
||||
@click="changeTopPage('backgrounds', '2022')"
|
||||
>
|
||||
<div class="menu-item">
|
||||
<div
|
||||
@@ -198,79 +198,52 @@
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="!filterBackgrounds && user.purchased.background.birthday_bash"
|
||||
v-if="!filterBackgrounds"
|
||||
class="row text-center title-row"
|
||||
>
|
||||
<strong>{{ backgroundShopSets[1].text }}</strong>
|
||||
</div>
|
||||
<div
|
||||
v-if="!filterBackgrounds"
|
||||
class="row title-row"
|
||||
>
|
||||
<div
|
||||
class="row text-center title-row"
|
||||
>
|
||||
<strong>{{ backgroundShopSets[2].text }}</strong>
|
||||
</div>
|
||||
<div
|
||||
class="row title-row"
|
||||
v-for="bg in backgroundShopSets[1].items"
|
||||
:key="bg.key"
|
||||
class="col-4 text-center customize-option background-button"
|
||||
:popover-title="bg.text"
|
||||
:popover="bg.notes"
|
||||
popover-trigger="mouseenter"
|
||||
@click="!user.purchased.background[bg.key]
|
||||
? backgroundSelected(bg) : unlock('background.' + bg.key)"
|
||||
>
|
||||
<div
|
||||
v-for="bg in backgroundShopSets[2].items"
|
||||
:key="bg.key"
|
||||
class="col-4 text-center customize-option background-button"
|
||||
:popover-title="bg.text"
|
||||
:popover="bg.notes"
|
||||
popover-trigger="mouseenter"
|
||||
@click="unlock('background.' + bg.key)"
|
||||
>
|
||||
<div
|
||||
class="background"
|
||||
:class="`background_${bg.key}`"
|
||||
></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div v-if="!filterBackgrounds">
|
||||
<div
|
||||
class="row text-center title-row"
|
||||
>
|
||||
<strong>{{ backgroundShopSets[1].text }}</strong>
|
||||
</div>
|
||||
<div
|
||||
class="row title-row"
|
||||
>
|
||||
class="background"
|
||||
:class="[`background_${bg.key}`, backgroundLockedStatus(bg.key)]"
|
||||
></div>
|
||||
<i
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="glyphicon glyphicon-lock"
|
||||
></i>
|
||||
<div
|
||||
v-for="bg in backgroundShopSets[1].items"
|
||||
:key="bg.key"
|
||||
class="col-4 text-center customize-option background-button"
|
||||
:popover-title="bg.text"
|
||||
:popover="bg.notes"
|
||||
popover-trigger="mouseenter"
|
||||
@click="!user.purchased.background[bg.key]
|
||||
? backgroundSelected(bg) : unlock('background.' + bg.key)"
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="purchase-background single d-flex align-items-center justify-content-center"
|
||||
>
|
||||
<div
|
||||
class="background"
|
||||
:class="[`background_${bg.key}`, backgroundLockedStatus(bg.key)]"
|
||||
class="svg-icon hourglass"
|
||||
v-html="icons.hourglass"
|
||||
></div>
|
||||
<i
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="glyphicon glyphicon-lock"
|
||||
></i>
|
||||
<div
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="purchase-background single d-flex align-items-center justify-content-center"
|
||||
>
|
||||
<div
|
||||
class="svg-icon hourglass"
|
||||
v-html="icons.hourglass"
|
||||
></div>
|
||||
<span class="price">1</span>
|
||||
</div>
|
||||
<span
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="badge-top"
|
||||
@click.stop.prevent="togglePinned(bg)"
|
||||
>
|
||||
<pin-badge
|
||||
:pinned="isBackgroundPinned(bg)"
|
||||
/>
|
||||
</span>
|
||||
<span class="price">1</span>
|
||||
</div>
|
||||
<span
|
||||
v-if="!user.purchased.background[bg.key]"
|
||||
class="badge-top"
|
||||
@click.stop.prevent="togglePinned(bg)"
|
||||
>
|
||||
<pin-badge
|
||||
:pinned="isBackgroundPinned(bg)"
|
||||
/>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<sub-menu
|
||||
@@ -1212,7 +1185,7 @@ export default {
|
||||
},
|
||||
],
|
||||
|
||||
bgSubMenuItems: ['2023', '2022', '2021', '2020', '2019', '2018', '2017', '2016', '2015', '2014'].map(y => ({
|
||||
bgSubMenuItems: ['2022', '2021', '2020', '2019', '2018', '2017', '2016', '2015', '2014'].map(y => ({
|
||||
id: y,
|
||||
label: y,
|
||||
})),
|
||||
@@ -1241,7 +1214,6 @@ export default {
|
||||
2020: [],
|
||||
2021: [],
|
||||
2022: [],
|
||||
2023: [],
|
||||
};
|
||||
|
||||
// Hack to force update for now until we restructure the data
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
<template>
|
||||
<base-banner
|
||||
banner-id="birthday-banner"
|
||||
class="birthday-banner"
|
||||
:show="showBirthdayBanner"
|
||||
height="3rem"
|
||||
:can-close="false"
|
||||
>
|
||||
<div
|
||||
slot="content"
|
||||
:aria-label="$t('celebrateBirthday')"
|
||||
class="content d-flex justify-content-around align-items-center ml-auto mr-auto"
|
||||
@click="showBirthdayModal"
|
||||
>
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-gifts left-gift"
|
||||
v-html="icons.giftsBirthday"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-ten-birthday"
|
||||
v-html="icons.tenBirthday"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-once
|
||||
class="announce-text"
|
||||
v-html="$t('celebrateBirthday')"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-gifts right-gift"
|
||||
v-html="icons.giftsBirthday"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</base-banner>
|
||||
</template>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
.announce-text {
|
||||
color: $purple-50;
|
||||
}
|
||||
|
||||
.birthday-banner {
|
||||
width: 100%;
|
||||
min-height: 48px;
|
||||
padding: 8px;
|
||||
background-image: linear-gradient(90deg,
|
||||
rgba(255,190,93,0) 0%,
|
||||
rgba(255,190,93,1) 25%,
|
||||
rgba(255,190,93,1) 75%,
|
||||
rgba(255,190,93,0) 100%),
|
||||
url('~@/assets/images/glitter.png');
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.left-gift {
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.right-gift {
|
||||
margin: auto auto auto 8px;
|
||||
filter: flipH;
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
.svg-gifts {
|
||||
width: 85px;
|
||||
}
|
||||
|
||||
.svg-ten-birthday {
|
||||
width: 192.5px;
|
||||
margin-left: 8px;
|
||||
margin-right: 8.5px;
|
||||
}
|
||||
</style>
|
||||
|
||||
<script>
|
||||
import find from 'lodash/find';
|
||||
import { mapState } from '@/libs/store';
|
||||
import BaseBanner from './base';
|
||||
|
||||
import giftsBirthday from '@/assets/svg/gifts-birthday.svg';
|
||||
import tenBirthday from '@/assets/svg/10th-birthday-linear.svg';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
BaseBanner,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
icons: Object.freeze({
|
||||
giftsBirthday,
|
||||
tenBirthday,
|
||||
}),
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
currentEventList: 'worldState.data.currentEventList',
|
||||
}),
|
||||
showBirthdayBanner () {
|
||||
return Boolean(find(this.currentEventList, event => Boolean(event.event === 'birthday10')));
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
showBirthdayModal () {
|
||||
this.$root.$emit('bv::show::modal', 'birthday-modal');
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
</script>
|
||||
@@ -1,58 +0,0 @@
|
||||
<template>
|
||||
<base-notification
|
||||
:can-remove="canRemove"
|
||||
:has-icon="true"
|
||||
:notification="notification"
|
||||
:read-after-click="true"
|
||||
@click="action"
|
||||
>
|
||||
<div
|
||||
slot="content"
|
||||
>
|
||||
<strong> {{ notification.data.title }} </strong>
|
||||
<span> {{ notification.data.text }} </span>
|
||||
</div>
|
||||
<div
|
||||
slot="icon"
|
||||
class="mt-3"
|
||||
:class="notification.data.icon"
|
||||
></div>
|
||||
</base-notification>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import BaseNotification from './base';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
BaseNotification,
|
||||
},
|
||||
props: {
|
||||
notification: {
|
||||
type: Object,
|
||||
default (data) {
|
||||
return data;
|
||||
},
|
||||
},
|
||||
canRemove: {
|
||||
type: Boolean,
|
||||
default: true,
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
action () {
|
||||
if (!this.notification || !this.notification.data) {
|
||||
return;
|
||||
}
|
||||
if (this.notification.data.destination === 'backgrounds') {
|
||||
this.$store.state.avatarEditorOptions.editingUser = true;
|
||||
this.$store.state.avatarEditorOptions.startingPage = 'backgrounds';
|
||||
this.$store.state.avatarEditorOptions.subpage = '2023';
|
||||
this.$root.$emit('bv::show::modal', 'avatar-modal');
|
||||
} else {
|
||||
this.$router.push({ name: this.notification.data.destination || 'items' });
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -123,24 +123,23 @@ import successImage from '@/assets/svg/success.svg';
|
||||
import starBadge from '@/assets/svg/star-badge.svg';
|
||||
|
||||
// Notifications
|
||||
import CARD_RECEIVED from './notifications/cardReceived';
|
||||
import CHALLENGE_INVITATION from './notifications/challengeInvitation';
|
||||
import GIFT_ONE_GET_ONE from './notifications/g1g1';
|
||||
import GROUP_TASK_ASSIGNED from './notifications/groupTaskAssigned';
|
||||
import GROUP_TASK_CLAIMED from './notifications/groupTaskClaimed';
|
||||
import NEW_STUFF from './notifications/newStuff';
|
||||
import GROUP_TASK_NEEDS_WORK from './notifications/groupTaskNeedsWork';
|
||||
import GUILD_INVITATION from './notifications/guildInvitation';
|
||||
import ITEM_RECEIVED from './notifications/itemReceived';
|
||||
import NEW_CHAT_MESSAGE from './notifications/newChatMessage';
|
||||
import NEW_INBOX_MESSAGE from './notifications/newPrivateMessage';
|
||||
import NEW_MYSTERY_ITEMS from './notifications/newMysteryItems';
|
||||
import NEW_STUFF from './notifications/newStuff';
|
||||
import ONBOARDING_COMPLETE from './notifications/onboardingComplete';
|
||||
import PARTY_INVITATION from './notifications/partyInvitation';
|
||||
import CHALLENGE_INVITATION from './notifications/challengeInvitation';
|
||||
import QUEST_INVITATION from './notifications/questInvitation';
|
||||
import GROUP_TASK_ASSIGNED from './notifications/groupTaskAssigned';
|
||||
import GROUP_TASK_CLAIMED from './notifications/groupTaskClaimed';
|
||||
import UNALLOCATED_STATS_POINTS from './notifications/unallocatedStatsPoints';
|
||||
import VERIFY_USERNAME from './notifications/verifyUsername';
|
||||
import NEW_MYSTERY_ITEMS from './notifications/newMysteryItems';
|
||||
import CARD_RECEIVED from './notifications/cardReceived';
|
||||
import NEW_INBOX_MESSAGE from './notifications/newPrivateMessage';
|
||||
import NEW_CHAT_MESSAGE from './notifications/newChatMessage';
|
||||
import WORLD_BOSS from './notifications/worldBoss';
|
||||
import VERIFY_USERNAME from './notifications/verifyUsername';
|
||||
import ONBOARDING_COMPLETE from './notifications/onboardingComplete';
|
||||
import GIFT_ONE_GET_ONE from './notifications/g1g1';
|
||||
import OnboardingGuide from './onboardingGuide';
|
||||
|
||||
export default {
|
||||
@@ -148,25 +147,24 @@ export default {
|
||||
MenuDropdown,
|
||||
MessageCount,
|
||||
// One component for each type
|
||||
CARD_RECEIVED,
|
||||
CHALLENGE_INVITATION,
|
||||
GIFT_ONE_GET_ONE,
|
||||
GROUP_TASK_ASSIGNED,
|
||||
GROUP_TASK_CLAIMED,
|
||||
NEW_STUFF,
|
||||
GROUP_TASK_NEEDS_WORK,
|
||||
GUILD_INVITATION,
|
||||
ITEM_RECEIVED,
|
||||
NEW_CHAT_MESSAGE,
|
||||
NEW_INBOX_MESSAGE,
|
||||
NEW_MYSTERY_ITEMS,
|
||||
NEW_STUFF,
|
||||
ONBOARDING_COMPLETE,
|
||||
PARTY_INVITATION,
|
||||
CHALLENGE_INVITATION,
|
||||
QUEST_INVITATION,
|
||||
GROUP_TASK_ASSIGNED,
|
||||
GROUP_TASK_CLAIMED,
|
||||
UNALLOCATED_STATS_POINTS,
|
||||
VERIFY_USERNAME,
|
||||
NEW_MYSTERY_ITEMS,
|
||||
CARD_RECEIVED,
|
||||
NEW_INBOX_MESSAGE,
|
||||
NEW_CHAT_MESSAGE,
|
||||
WorldBoss: WORLD_BOSS,
|
||||
VERIFY_USERNAME,
|
||||
OnboardingGuide,
|
||||
ONBOARDING_COMPLETE,
|
||||
GIFT_ONE_GET_ONE,
|
||||
},
|
||||
data () {
|
||||
return {
|
||||
@@ -187,7 +185,6 @@ export default {
|
||||
// NOTE: Those not listed here won't be shown in the notification panel!
|
||||
handledNotifications: [
|
||||
'NEW_STUFF',
|
||||
'ITEM_RECEIVED',
|
||||
'GIFT_ONE_GET_ONE',
|
||||
'GROUP_TASK_NEEDS_WORK',
|
||||
'GUILD_INVITATION',
|
||||
|
||||
@@ -40,7 +40,7 @@
|
||||
>{{ $t('editAvatar') }}</a>
|
||||
<a
|
||||
class="topbar-dropdown-item dropdown-item dropdown-separated"
|
||||
@click="showAvatar('backgrounds', '2023')"
|
||||
@click="showAvatar('backgrounds', '2022')"
|
||||
>{{ $t('backgrounds') }}</a>
|
||||
<a
|
||||
class="topbar-dropdown-item dropdown-item"
|
||||
|
||||
@@ -1,877 +0,0 @@
|
||||
<template>
|
||||
<b-modal
|
||||
id="birthday-modal"
|
||||
:hide-header="true"
|
||||
:hide-footer="true"
|
||||
>
|
||||
<div class="modal-content">
|
||||
<div
|
||||
class="modal-close"
|
||||
@click="close()"
|
||||
>
|
||||
<div
|
||||
class="svg-icon svg-close"
|
||||
v-html="icons.close"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
class="svg-confetti svg-icon"
|
||||
v-html="icons.confetti"
|
||||
>
|
||||
</div>
|
||||
<div>
|
||||
<img
|
||||
src="~@/assets/images/10-birthday.png"
|
||||
class="ten-birthday"
|
||||
>
|
||||
</div>
|
||||
<div class="limited-wrapper">
|
||||
<div
|
||||
class="svg-gifts svg-icon"
|
||||
v-html="icons.gifts"
|
||||
>
|
||||
</div>
|
||||
<div class="limited-event">
|
||||
{{ $t('limitedEvent') }}
|
||||
</div>
|
||||
<div class="dates">
|
||||
{{ $t('anniversaryLimitedDates') }}
|
||||
</div>
|
||||
<div
|
||||
class="svg-gifts-flip svg-icon"
|
||||
v-html="icons.gifts"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="celebrate d-flex justify-content-center">
|
||||
{{ $t('celebrateAnniversary') }}
|
||||
</div>
|
||||
<h2 class="d-flex justify-content-center">
|
||||
<span
|
||||
class="left-divider"
|
||||
v-html="icons.divider"
|
||||
></span>
|
||||
<span
|
||||
class="svg-cross"
|
||||
v-html="icons.cross"
|
||||
>
|
||||
</span>
|
||||
{{ $t('jubilantGryphatricePromo') }}
|
||||
<span
|
||||
class="svg-cross"
|
||||
v-html="icons.cross"
|
||||
>
|
||||
</span>
|
||||
<span
|
||||
class="right-divider"
|
||||
></span>
|
||||
</h2>
|
||||
<!-- gryphatrice info -->
|
||||
<div class="d-flex">
|
||||
<div class="jubilant-gryphatrice d-flex mr-auto">
|
||||
<img
|
||||
src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Gryphatrice-Jubilant-Large.gif"
|
||||
width="156px"
|
||||
height="144px"
|
||||
alt="a pink, purple, and green gryphatrice pet winks at you adorably"
|
||||
>
|
||||
</div>
|
||||
<div class="align-items-center">
|
||||
<div class="limited-edition mr-auto">
|
||||
{{ $t('limitedEdition') }}
|
||||
</div>
|
||||
<div class="gryphatrice-text">
|
||||
{{ $t('anniversaryGryphatriceText') }}
|
||||
</div>
|
||||
<div
|
||||
class="gryphatrice-price"
|
||||
v-html="$t('anniversaryGryphatricePrice')"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- beginning of payments -->
|
||||
<!-- buy with money OR gems -->
|
||||
<div
|
||||
v-if="!ownGryphatrice && !gryphBought"
|
||||
>
|
||||
<div
|
||||
v-if="selectedPage !== 'payment-buttons'"
|
||||
id="initial-buttons"
|
||||
class="d-flex justify-content-center"
|
||||
>
|
||||
<button
|
||||
class="btn btn-secondary buy-now-left"
|
||||
:class="{active: selectedPage === 'payment-buttons'}"
|
||||
@click="selectedPage = 'payment-buttons'"
|
||||
>
|
||||
{{ $t('buyNowMoneyButton') }}
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-secondary buy-now-right"
|
||||
@click="buyGryphatriceGems()"
|
||||
>
|
||||
{{ $t('buyNowGemsButton') }}
|
||||
</button>
|
||||
</div>
|
||||
<!-- buy with money -->
|
||||
<div
|
||||
v-else-if="selectedPage === 'payment-buttons'"
|
||||
id="payment-buttons"
|
||||
class="d-flex flex-column"
|
||||
>
|
||||
<button
|
||||
class="btn btn-secondary d-flex stripe"
|
||||
@click="redirectToStripe({ sku: 'price_0MPZ6iZCD0RifGXlLah2furv' })"
|
||||
>
|
||||
<span
|
||||
class="svg-stripe"
|
||||
v-html="icons.stripe"
|
||||
>
|
||||
</span>
|
||||
</button>
|
||||
<button
|
||||
class="btn btn-secondary d-flex paypal"
|
||||
@click="openPaypal({
|
||||
url: paypalCheckoutLink, type: 'sku', sku: 'Pet-Gryphatrice-Jubilant'
|
||||
})"
|
||||
>
|
||||
<span
|
||||
class="svg-paypal"
|
||||
v-html="icons.paypal"
|
||||
>
|
||||
</span>
|
||||
</button>
|
||||
<amazon-button
|
||||
:disabled="disabled"
|
||||
:amazon-data="amazonData"
|
||||
class="btn btn-secondary d-flex amazon"
|
||||
v-html="icons.amazon"
|
||||
/>
|
||||
<div
|
||||
class="pay-with-gems"
|
||||
@click="selectedPage = 'initial-buttons'"
|
||||
>
|
||||
{{ $t('wantToPayWithGemsText') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- Own the gryphatrice -->
|
||||
<div
|
||||
v-else
|
||||
class="d-flex"
|
||||
>
|
||||
<button
|
||||
class="own-gryphatrice-button"
|
||||
@click="closeAndRedirect('/inventory/stable')"
|
||||
v-html="$t('ownJubilantGryphatrice')"
|
||||
>
|
||||
</button>
|
||||
</div>
|
||||
<!-- end of payments -->
|
||||
<h2 class="d-flex justify-content-center">
|
||||
<span
|
||||
class="left-divider"
|
||||
v-html="icons.divider"
|
||||
></span>
|
||||
<span
|
||||
class="svg-cross"
|
||||
v-html="icons.cross"
|
||||
>
|
||||
</span>
|
||||
{{ $t('plentyOfPotions') }}
|
||||
<span
|
||||
class="svg-cross"
|
||||
v-html="icons.cross"
|
||||
>
|
||||
</span>
|
||||
<span
|
||||
class="right-divider"
|
||||
></span>
|
||||
</h2>
|
||||
<div class="plenty-of-potions d-flex">
|
||||
{{ $t('plentyOfPotionsText') }}
|
||||
</div>
|
||||
<div class="potions">
|
||||
<div class="pot-1">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Porcelain.png">
|
||||
</div>
|
||||
<div class="pot-2">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Vampire.png">
|
||||
</div>
|
||||
<div class="pot-3">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Aquatic.png">
|
||||
</div>
|
||||
<div class="pot-4">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_StainedGlass.png">
|
||||
</div>
|
||||
<div class="pot-5">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Celestial.png">
|
||||
</div>
|
||||
<div class="pot-6">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Glow.png">
|
||||
</div>
|
||||
<div class="pot-7">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_AutumnLeaf.png">
|
||||
</div>
|
||||
<div class="pot-8">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_SandSculpture.png">
|
||||
</div>
|
||||
<div class="pot-9">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Peppermint.png">
|
||||
</div>
|
||||
<div class="pot-10">
|
||||
<img src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet_HatchingPotion_Shimmer.png">
|
||||
</div>
|
||||
</div>
|
||||
<button
|
||||
class="btn btn-secondary d-flex justify-content-center visit-the-market"
|
||||
@click="closeAndRedirect('/shops/market')"
|
||||
>
|
||||
{{ $t('visitTheMarketButton') }}
|
||||
</button>
|
||||
<h2 class="d-flex justify-content-center">
|
||||
<span
|
||||
class="left-divider"
|
||||
v-html="icons.divider"
|
||||
></span>
|
||||
<span
|
||||
class="svg-cross"
|
||||
v-html="icons.cross"
|
||||
>
|
||||
</span>
|
||||
{{ $t('fourForFree') }}
|
||||
<span
|
||||
class="svg-cross"
|
||||
v-html="icons.cross"
|
||||
>
|
||||
</span>
|
||||
<span
|
||||
class="right-divider"
|
||||
></span>
|
||||
</h2>
|
||||
<div class="four-for-free">
|
||||
{{ $t('fourForFreeText') }}
|
||||
</div>
|
||||
<div class="four-grid d-flex justify-content-center">
|
||||
<div class="day-one-a">
|
||||
<div class="day-text">
|
||||
{{ $t('dayOne') }}
|
||||
</div>
|
||||
<div class="gift d-flex justify-content-center align-items-middle">
|
||||
<img
|
||||
src="~@/assets/images/robes.webp"
|
||||
class="m-auto"
|
||||
width="40px"
|
||||
height="66px"
|
||||
>
|
||||
</div>
|
||||
<div class="description">
|
||||
{{ $t('partyRobes') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="day-one-b">
|
||||
<div class="day-text">
|
||||
{{ $t('dayOne') }}
|
||||
</div>
|
||||
<div class="gift d-flex justify-content-center align-items-middle">
|
||||
<div
|
||||
class="svg-gem svg-icon m-auto"
|
||||
v-html="icons.birthdayGems"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="description">
|
||||
{{ $t('twentyGems') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="day-five">
|
||||
<div class="day-text">
|
||||
{{ $t('dayFive') }}
|
||||
</div>
|
||||
<div class="gift d-flex justify-content-center align-items-middle">
|
||||
<img
|
||||
src="~@/assets/images/habitica-hero-goober.webp"
|
||||
class="m-auto"
|
||||
><!-- Birthday Set -->
|
||||
</div>
|
||||
<div class="description">
|
||||
{{ $t('birthdaySet') }}
|
||||
</div>
|
||||
</div>
|
||||
<div class="day-ten">
|
||||
<div class="day-text">
|
||||
{{ $t('dayTen') }}
|
||||
</div>
|
||||
<div class="gift d-flex justify-content-center align-items-middle">
|
||||
<div
|
||||
class="svg-background svg-icon m-auto"
|
||||
v-html="icons.birthdayBackground"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="description">
|
||||
{{ $t('background') }}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="modal-bottom">
|
||||
<div class="limitations d-flex justify-content-center">
|
||||
{{ $t('limitations') }}
|
||||
</div>
|
||||
<div class="fine-print">
|
||||
{{ $t('anniversaryLimitations') }}
|
||||
</div>
|
||||
</div>
|
||||
</b-modal>
|
||||
</template>
|
||||
|
||||
<style lang="scss">
|
||||
#birthday-modal {
|
||||
.modal-body {
|
||||
padding: 0px;
|
||||
border: 0px;
|
||||
}
|
||||
.modal-content {
|
||||
border-radius: 14px;
|
||||
border: 0px;
|
||||
}
|
||||
.modal-footer {
|
||||
border-radius: 14px;
|
||||
border: 0px;
|
||||
}
|
||||
.amazon {
|
||||
margin-bottom: 16px;
|
||||
|
||||
svg {
|
||||
width: 84px;
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
.amazonpay-button-inner-image {
|
||||
opacity: 0;
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
<style scoped lang="scss">
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
@import '~@/assets/scss/mixins.scss';
|
||||
|
||||
#birthday-modal {
|
||||
h2 {
|
||||
font-size: 1.25rem;
|
||||
font-weight: bold;
|
||||
line-height: 1.4;
|
||||
color: $white;
|
||||
column-gap: 0.5rem;
|
||||
display: flex;
|
||||
flex-wrap: nowrap;
|
||||
justify-content: space-between;
|
||||
align-content: center;
|
||||
}
|
||||
|
||||
.modal-body{
|
||||
box-shadow: 0 14px 28px 0 rgba(26, 24, 29, 0.24), 0 10px 10px 0 rgba(26, 24, 29, 0.28);
|
||||
}
|
||||
|
||||
.modal-content {
|
||||
width: 566px;
|
||||
padding: 32px 24px 24px;
|
||||
background: linear-gradient(158deg,#6133b4,#4f2a93);
|
||||
border-top-left-radius: 12px;
|
||||
border-top-right-radius: 12px;
|
||||
border-bottom-left-radius: 0px;
|
||||
border-bottom-right-radius: 0px;
|
||||
}
|
||||
|
||||
.modal-bottom {
|
||||
width: 566px;
|
||||
background-color: $purple-50;
|
||||
color: $purple-500;
|
||||
line-height: 1.33;
|
||||
border-top: 0px;
|
||||
padding: 16px 40px 28px 40px;
|
||||
border-bottom-left-radius: 12px;
|
||||
border-bottom-right-radius: 12px;
|
||||
}
|
||||
.limitations {
|
||||
color: $white;
|
||||
font-weight: bold;
|
||||
line-height: 1.71;
|
||||
margin-top: 8px;
|
||||
justify-content: center;
|
||||
}
|
||||
.fine-print {
|
||||
font-size: 0.75rem;
|
||||
color: $purple-500;
|
||||
line-height: 1.33;
|
||||
margin-top: 8px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
.ten-birthday {
|
||||
position: relative;
|
||||
width: 268px;
|
||||
height: 244px;
|
||||
margin: 0 125px 16px;
|
||||
}
|
||||
|
||||
.limited-event {
|
||||
font-size: 0.75rem;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
letter-spacing: 2.4px;
|
||||
margin-top: -8px;
|
||||
color: $yellow-50;
|
||||
}
|
||||
|
||||
.dates {
|
||||
font-size: 0.875rem;
|
||||
font-weight: bold;
|
||||
line-height: 1.71;
|
||||
text-align: center;
|
||||
justify-content: center;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.celebrate {
|
||||
font-size: 1.25rem;
|
||||
font-weight: bold;
|
||||
line-height: 1.4;
|
||||
margin: 16px 16px 24px 16px;
|
||||
text-align: center;
|
||||
color: $yellow-50;
|
||||
}
|
||||
|
||||
.jubilant-gryphatrice {
|
||||
height: 176px;
|
||||
width: 204px;
|
||||
border-radius: 12px;
|
||||
background-color: $purple-50;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin-right: 24px;
|
||||
margin-left: 4px;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.limited-wrapper {
|
||||
margin-top: -36px;
|
||||
margin-bottom: -36px;
|
||||
}
|
||||
|
||||
.limited-edition, .gryphatrice-text, .gryphatrice-price {
|
||||
max-width: 274px;
|
||||
}
|
||||
|
||||
.limited-edition {
|
||||
font-size: 0.75rem;
|
||||
font-weight: bold;
|
||||
text-transform: uppercase;
|
||||
line-height:1.33;
|
||||
letter-spacing:2.4px;
|
||||
padding-top: 18px;
|
||||
margin-left: 24px;
|
||||
margin-bottom: 8px;
|
||||
color: $yellow-50;
|
||||
}
|
||||
|
||||
.gryphatrice-text, .gryphatrice-price {
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.71;
|
||||
margin-left: 24px;
|
||||
margin-right: 4px;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.gryphatrice-price {
|
||||
padding-top: 16px;
|
||||
margin-left: 24px;
|
||||
}
|
||||
|
||||
.buy-now-left {
|
||||
width: 243px;
|
||||
margin: 24px 8px 24px 0px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 1px 3px 0 rgba(26, 24, 29, 0.12), 0 1px 2px 0 rgba(26, 24, 29, 0.24);
|
||||
}
|
||||
|
||||
.buy-now-right {
|
||||
width: 243px;
|
||||
margin: 24px 0px 24px 8px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 1px 3px 0 rgba(26, 24, 29, 0.12), 0 1px 2px 0 rgba(26, 24, 29, 0.24);
|
||||
}
|
||||
|
||||
.stripe {
|
||||
margin-top: 24px;
|
||||
margin-bottom: 8px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.paypal {
|
||||
margin-bottom: 8px;
|
||||
padding-bottom: 10px;
|
||||
}
|
||||
|
||||
.stripe, .paypal, .amazon {
|
||||
width: 506px;
|
||||
height: 32px;
|
||||
margin-left: 4px;
|
||||
margin-right: 4px;
|
||||
border-radius: 4px;
|
||||
flex-direction: row;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.pay-with-gems {
|
||||
color: $white;
|
||||
text-align: center;
|
||||
margin-bottom: 24px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.pay-with-gems:hover {
|
||||
text-decoration: underline;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.own-gryphatrice-button {
|
||||
width: 506px;
|
||||
height: 32px;
|
||||
margin: 24px 4px;
|
||||
border-radius: 4px;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border: $green-100;
|
||||
background-color: $green-100;
|
||||
color: $green-1;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.plenty-of-potions {
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.71;
|
||||
margin: 0 8px 24px;
|
||||
text-align: center;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.potions {
|
||||
display: grid;
|
||||
grid-template-columns: 5;
|
||||
grid-template-rows: 2;
|
||||
gap: 24px 24px;
|
||||
justify-content: center;
|
||||
|
||||
.pot-1, .pot-2, .pot-3, .pot-4, .pot-5,
|
||||
.pot-6, .pot-7, .pot-8, .pot-9, .pot-10 {
|
||||
height: 68px;
|
||||
width: 68px;
|
||||
border-radius: 8px;
|
||||
background-color: $purple-50;
|
||||
}
|
||||
|
||||
.pot-1 {
|
||||
grid-column: 1 / 1;
|
||||
grid-row: 1 / 2;
|
||||
}
|
||||
.pot-2 {
|
||||
grid-column: 2 / 2;
|
||||
grid-row: 1 / 2;
|
||||
}
|
||||
.pot-3 {
|
||||
grid-column: 3 / 3;
|
||||
grid-row: 1 / 2;
|
||||
}
|
||||
.pot-4 {
|
||||
grid-column: 4 / 4;
|
||||
grid-row: 1 / 2;
|
||||
}
|
||||
.pot-5 {
|
||||
grid-column: 5 / 5;
|
||||
grid-row: 1 / 2;
|
||||
}
|
||||
.pot-6 {
|
||||
grid-column: 1 / 5;
|
||||
grid-row: 2 / 2;
|
||||
}
|
||||
.pot-7 {
|
||||
grid-column: 2 / 5;
|
||||
grid-row: 2 / 2;
|
||||
}
|
||||
.pot-8 {
|
||||
grid-column: 3 / 5;
|
||||
grid-row: 2 / 2;
|
||||
}
|
||||
.pot-9 {
|
||||
grid-column: 4 / 5;
|
||||
grid-row: 2 / 2;
|
||||
}
|
||||
.pot-10 {
|
||||
grid-column: 5 / 5;
|
||||
grid-row: 2 / 2;
|
||||
}
|
||||
|
||||
}
|
||||
.visit-the-market {
|
||||
height: 32px;
|
||||
margin: 24px 4px;
|
||||
border-radius: 4px;
|
||||
box-shadow: 0 1px 3px 0 rgba(26, 24, 29, 0.12), 0 1px 2px 0 rgba(26, 24, 29, 0.24);
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.four-for-free {
|
||||
font-size: 0.875rem;
|
||||
line-height: 1.71;
|
||||
margin: 0 36px 24px;
|
||||
text-align: center;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
.four-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 4;
|
||||
grid-template-rows: 1;
|
||||
gap: 24px;
|
||||
}
|
||||
.day-one-a, .day-one-b, .day-five, .day-ten {
|
||||
height: 140px;
|
||||
width: 100px;
|
||||
border-radius: 8px;
|
||||
background-color: $purple-50;
|
||||
}
|
||||
|
||||
.day-one-a {
|
||||
grid-column: 1 / 1;
|
||||
grid-row: 1 / 1;
|
||||
}
|
||||
.day-one-b {
|
||||
grid-column: 2 / 2;
|
||||
grid-row: 1 / 1;
|
||||
}
|
||||
.day-five {
|
||||
grid-column: 3 / 3;
|
||||
grid-row: 1 / 1;
|
||||
}
|
||||
.day-ten {
|
||||
grid-column: 4 / 4;
|
||||
grid-row: 1 / 1;
|
||||
}
|
||||
|
||||
.day-text {
|
||||
font-size: 0.75rem;
|
||||
font-weight: bold;
|
||||
line-height: 1.33;
|
||||
letter-spacing: 2.4px;
|
||||
text-align: center;
|
||||
text-transform: uppercase;
|
||||
padding: 4px 0px;
|
||||
color: $yellow-50;
|
||||
}
|
||||
|
||||
.gift {
|
||||
height: 80px;
|
||||
width: 84px;
|
||||
margin: 0 8px 32px;
|
||||
background-color: $purple-100;
|
||||
}
|
||||
|
||||
.description {
|
||||
font-size: 0.75rem;
|
||||
line-height: 1.33;
|
||||
text-align: center;
|
||||
padding: 8px 0px;
|
||||
margin-top: -32px;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
// SVG CSS
|
||||
.modal-close {
|
||||
position: absolute;
|
||||
right: 16px;
|
||||
top: 16px;
|
||||
cursor: pointer;
|
||||
|
||||
.svg-close {
|
||||
width: 18px;
|
||||
height: 18px;
|
||||
vertical-align: middle;
|
||||
fill: $purple-50;
|
||||
|
||||
& svg path {
|
||||
fill: $purple-50 !important;;
|
||||
}
|
||||
& :hover {
|
||||
fill: $purple-50;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.svg-confetti {
|
||||
position: absolute;
|
||||
height: 152px;
|
||||
width: 518px;
|
||||
margin-top: 24px;
|
||||
}
|
||||
|
||||
.svg-gifts, .svg-gifts-flip {
|
||||
position: relative;
|
||||
height: 32px;
|
||||
width: 85px;
|
||||
}
|
||||
|
||||
.svg-gifts {
|
||||
margin-left: 70px;
|
||||
top: 30px;
|
||||
}
|
||||
|
||||
.svg-gifts-flip {
|
||||
-webkit-transform: scaleX(-1);
|
||||
transform: scaleX(-1);
|
||||
left: 366px;
|
||||
bottom: 34px;
|
||||
}
|
||||
|
||||
.left-divider, .right-divider {
|
||||
background-image: url('~@/assets/images/fancy-divider.png');
|
||||
background-position: right center;
|
||||
background-repeat: no-repeat;
|
||||
display: inline-flex;
|
||||
flex-grow: 2;
|
||||
min-height: 1.25rem;
|
||||
}
|
||||
|
||||
.right-divider {
|
||||
-webkit-transform: scaleX(-1);
|
||||
transform: scaleX(-1);
|
||||
}
|
||||
|
||||
.svg-cross {
|
||||
height: 12px;
|
||||
width: 12px;
|
||||
color: $yellow-50;
|
||||
}
|
||||
|
||||
.svg-gem {
|
||||
height: 48px;
|
||||
width: 58px;
|
||||
}
|
||||
|
||||
.svg-background {
|
||||
height: 68px;
|
||||
width: 68px;
|
||||
}
|
||||
|
||||
.svg-stripe {
|
||||
height: 20px;
|
||||
width: 48px;
|
||||
}
|
||||
|
||||
.svg-paypal {
|
||||
height: 16px;
|
||||
width: 60px;
|
||||
}
|
||||
}
|
||||
|
||||
</style>
|
||||
|
||||
|
||||
<script>
|
||||
// to check if user owns JG or not
|
||||
import { mapState } from '@/libs/store';
|
||||
|
||||
// Purchase functionality
|
||||
import buy from '@/mixins/buy';
|
||||
import notifications from '@/mixins/notifications';
|
||||
import payments from '@/mixins/payments';
|
||||
import content from '@/../../common/script/content/index';
|
||||
import amazonButton from '@/components/payments/buttons/amazon';
|
||||
|
||||
// import images
|
||||
import close from '@/assets/svg/new-close.svg';
|
||||
import confetti from '@/assets/svg/confetti.svg';
|
||||
import gifts from '@/assets/svg/gifts-birthday.svg';
|
||||
import cross from '@/assets/svg/cross.svg';
|
||||
import stripe from '@/assets/svg/stripe.svg';
|
||||
import paypal from '@/assets/svg/paypal-logo.svg';
|
||||
import amazon from '@/assets/svg/amazonpay.svg';
|
||||
import birthdayGems from '@/assets/svg/birthday-gems.svg';
|
||||
import birthdayBackground from '@/assets/svg/icon-background-birthday.svg';
|
||||
|
||||
export default {
|
||||
components: {
|
||||
amazonButton,
|
||||
},
|
||||
mixins: [buy, notifications, payments],
|
||||
data () {
|
||||
return {
|
||||
amazonData: {
|
||||
type: 'single',
|
||||
sku: 'Pet-Gryphatrice-Jubilant',
|
||||
},
|
||||
icons: Object.freeze({
|
||||
close,
|
||||
confetti,
|
||||
gifts,
|
||||
cross,
|
||||
stripe,
|
||||
paypal,
|
||||
amazon,
|
||||
birthdayGems,
|
||||
birthdayBackground,
|
||||
}),
|
||||
selectedPage: 'initial-buttons',
|
||||
gryphBought: false,
|
||||
};
|
||||
},
|
||||
computed: {
|
||||
...mapState({
|
||||
user: 'user.data',
|
||||
}),
|
||||
ownGryphatrice () {
|
||||
return Boolean(this.user && this.user.items.pets['Gryphatrice-Jubilant']);
|
||||
},
|
||||
},
|
||||
methods: {
|
||||
hide () {
|
||||
this.$root.$emit('bv::hide::modal', 'birthday-modal');
|
||||
},
|
||||
buyGryphatriceGems () {
|
||||
const gryphatrice = content.petInfo['Gryphatrice-Jubilant'];
|
||||
if (this.user.balance * 4 < gryphatrice.value) {
|
||||
this.$root.$emit('bv::show::modal', 'buy-gems');
|
||||
return this.hide();
|
||||
}
|
||||
if (!this.confirmPurchase(gryphatrice.currency, gryphatrice.value)) {
|
||||
return null;
|
||||
}
|
||||
this.makeGenericPurchase(gryphatrice);
|
||||
this.gryphBought = true;
|
||||
return this.purchased(gryphatrice.text());
|
||||
},
|
||||
closeAndRedirect (route) {
|
||||
const routeTerminator = route.split('/')[route.split('/').length - 1];
|
||||
if (this.$router.history.current.name !== routeTerminator) {
|
||||
this.$router.push(route);
|
||||
}
|
||||
this.hide();
|
||||
},
|
||||
close () {
|
||||
this.$root.$emit('bv::hide::modal', 'birthday-modal');
|
||||
},
|
||||
},
|
||||
};
|
||||
</script>
|
||||
@@ -78,7 +78,6 @@ export default {
|
||||
orderReferenceId: null,
|
||||
subscription: null,
|
||||
coupon: null,
|
||||
sku: null,
|
||||
},
|
||||
isAmazonSetup: false,
|
||||
amazonButtonEnabled: false,
|
||||
@@ -175,10 +174,7 @@ export default {
|
||||
storePaymentStatusAndReload (url) {
|
||||
let paymentType;
|
||||
|
||||
if (this.amazonPayments.type === 'single') {
|
||||
if (this.amazonPayments.sku) paymentType = 'sku';
|
||||
else if (!this.amazonPayments.gift) paymentType = 'gems';
|
||||
}
|
||||
if (this.amazonPayments.type === 'single' && !this.amazonPayments.gift) paymentType = 'gems';
|
||||
if (this.amazonPayments.type === 'subscription') paymentType = 'subscription';
|
||||
if (this.amazonPayments.groupId || this.amazonPayments.groupToCreate) paymentType = 'groupPlan';
|
||||
if (this.amazonPayments.type === 'single' && this.amazonPayments.gift && this.amazonPayments.giftReceiver) {
|
||||
@@ -227,7 +223,6 @@ export default {
|
||||
const data = {
|
||||
orderReferenceId: this.amazonPayments.orderReferenceId,
|
||||
gift: this.amazonPayments.gift,
|
||||
sku: this.amazonPayments.sku,
|
||||
};
|
||||
|
||||
if (this.amazonPayments.gemsBlock) {
|
||||
|
||||
@@ -83,7 +83,6 @@
|
||||
}
|
||||
|
||||
h4 {
|
||||
color: $gray-10;
|
||||
font-size: 0.875rem;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
<template>
|
||||
<b-modal
|
||||
id="payments-success-modal"
|
||||
:hide-footer="isNewGroup || isGems || isSubscription || ownsJubilantGryphatrice"
|
||||
:modal-class="isNewGroup || isGems || isSubscription || ownsJubilantGryphatrice
|
||||
:hide-footer="isNewGroup || isGems || isSubscription"
|
||||
:modal-class="isNewGroup || isGems || isSubscription
|
||||
? ['modal-hidden-footer'] : []"
|
||||
>
|
||||
<!-- HEADER -->
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="check-container d-flex align-items-center justify-content-center">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-check"
|
||||
class="svg-icon check"
|
||||
v-html="icons.check"
|
||||
></div>
|
||||
</div>
|
||||
@@ -107,35 +107,6 @@
|
||||
class="small-text auto-renew"
|
||||
>{{ $t('paymentAutoRenew') }}</span>
|
||||
</template>
|
||||
<!-- if you buy the Jubilant Gryphatrice during 10th birthday -->
|
||||
<template
|
||||
v-if="ownsJubilantGryphatrice"
|
||||
>
|
||||
<div class="words">
|
||||
<p class="jub-success">
|
||||
<span
|
||||
v-once
|
||||
v-html="$t('jubilantSuccess')"
|
||||
>
|
||||
</span>
|
||||
</p>
|
||||
<p class="jub-success">
|
||||
<span
|
||||
v-once
|
||||
v-html="$t('stableVisit')"
|
||||
>
|
||||
</span>
|
||||
</p>
|
||||
</div>
|
||||
<div class="gryph-bg">
|
||||
<img
|
||||
src="https://habitica-assets.s3.amazonaws.com/mobileApp/images/Pet-Gryphatrice-Jubilant-Large.gif"
|
||||
alt="a pink, purple, and green gryphatrice pet winks at you adorably"
|
||||
width="78px"
|
||||
height="72px"
|
||||
>
|
||||
</div>
|
||||
</template>
|
||||
<!-- buttons for subscriptions / new Group / buy Gems for self -->
|
||||
<button
|
||||
v-if="isNewGroup || isGems || isSubscription"
|
||||
@@ -145,14 +116,6 @@
|
||||
>
|
||||
{{ $t('onwards') }}
|
||||
</button>
|
||||
<!-- buttons for Jubilant Gryphatrice purchase during 10th birthday -->
|
||||
<button
|
||||
v-if="ownsJubilantGryphatrice"
|
||||
class="btn btn-primary mx-auto btn-jub"
|
||||
@click="closeAndRedirect()"
|
||||
>
|
||||
{{ $t('takeMeToStable') }}
|
||||
</button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- FOOTER -->
|
||||
@@ -269,8 +232,9 @@
|
||||
margin-bottom: 16px;
|
||||
}
|
||||
|
||||
.svg-check {
|
||||
width: 45px;
|
||||
.check {
|
||||
width: 35.1px;
|
||||
height: 28px;
|
||||
color: $white;
|
||||
}
|
||||
}
|
||||
@@ -329,34 +293,6 @@
|
||||
.group-billing-date {
|
||||
width: 269px;
|
||||
}
|
||||
|
||||
.words {
|
||||
margin-bottom: 16px;
|
||||
justify-content: center;
|
||||
font-size: 0.875rem;
|
||||
color: $gray-50;
|
||||
line-height: 1.71;
|
||||
}
|
||||
|
||||
.jub-success {
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
}
|
||||
|
||||
.gryph-bg {
|
||||
width: 110px;
|
||||
height: 104px;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
padding: 16px;
|
||||
border-radius: 4px;
|
||||
background-color: $gray-700;
|
||||
}
|
||||
.btn-jub {
|
||||
margin-bottom: 8px;
|
||||
margin-top: 24px;
|
||||
}
|
||||
|
||||
}
|
||||
.modal-footer {
|
||||
background: $gray-700;
|
||||
@@ -494,9 +430,6 @@ export default {
|
||||
isNewGroup () {
|
||||
return this.paymentData.paymentType === 'groupPlan' && this.paymentData.newGroup;
|
||||
},
|
||||
ownsJubilantGryphatrice () {
|
||||
return this.paymentData.paymentType === 'sku'; // will need to be revised when there are other discrete skus in system
|
||||
},
|
||||
},
|
||||
mounted () {
|
||||
this.$root.$on('habitica:payment-success', data => {
|
||||
@@ -525,12 +458,6 @@ export default {
|
||||
this.sendingInProgress = false;
|
||||
this.$root.$emit('bv::hide::modal', 'payments-success-modal');
|
||||
},
|
||||
closeAndRedirect () {
|
||||
if (this.$router.history.current.name !== 'stable') {
|
||||
this.$router.push('/inventory/stable');
|
||||
}
|
||||
this.close();
|
||||
},
|
||||
submit () {
|
||||
if (this.paymentData.group && !this.paymentData.newGroup) {
|
||||
Analytics.track({
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
<div class="subscribe-card mx-auto">
|
||||
<div
|
||||
v-if="hasSubscription && !hasCanceledSubscription"
|
||||
class="d-flex flex-column align-items-center pt-4"
|
||||
class="d-flex flex-column align-items-center"
|
||||
>
|
||||
<div class="round-container bg-green-10 d-flex align-items-center justify-content-center">
|
||||
<div
|
||||
@@ -107,7 +107,7 @@
|
||||
</h2>
|
||||
<div
|
||||
v-if="hasGroupPlan"
|
||||
class="mx-5 mb-4 text-center"
|
||||
class="mx-5 text-center"
|
||||
>
|
||||
{{ $t('youHaveGroupPlan') }}
|
||||
</div>
|
||||
@@ -130,7 +130,7 @@
|
||||
</div>
|
||||
<button
|
||||
class="btn btn-primary btn-update-card
|
||||
d-flex justify-content-center align-items-center mb-4"
|
||||
d-flex justify-content-center align-items-center"
|
||||
@click="redirectToStripeEdit()"
|
||||
>
|
||||
<div
|
||||
@@ -143,61 +143,21 @@
|
||||
</div>
|
||||
<div
|
||||
v-else
|
||||
class="svg-icon mb-4"
|
||||
class="svg-icon"
|
||||
:class="paymentMethodLogo.class"
|
||||
v-html="paymentMethodLogo.icon"
|
||||
>
|
||||
</div>
|
||||
<div
|
||||
v-if="purchasedPlanExtraMonthsDetails.months > 0"
|
||||
class="extra-months green-10 py-2 px-3 mb-4"
|
||||
class="extra-months green-10 py-2 px-3 mt-4"
|
||||
v-html="$t('purchasedPlanExtraMonths',
|
||||
{months: purchasedPlanExtraMonthsDetails.months})"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div
|
||||
v-if="hasGiftSubscription"
|
||||
class="d-flex flex-column align-items-center mt-4"
|
||||
>
|
||||
<div class="round-container bg-green-10 d-flex align-items-center justify-content-center">
|
||||
<div
|
||||
v-once
|
||||
class="svg-icon svg-check"
|
||||
v-html="icons.checkmarkIcon"
|
||||
></div>
|
||||
</div>
|
||||
<h2 class="green-10 mx-auto mb-75">
|
||||
{{ $t('youAreSubscribed') }}
|
||||
</h2>
|
||||
<div
|
||||
class="mx-4 text-center mb-4 lh-71"
|
||||
>
|
||||
<span v-once>
|
||||
{{ $t('haveNonRecurringSub') }}
|
||||
</span>
|
||||
<span
|
||||
v-once
|
||||
v-html="$t('subscriptionInactiveDate', {date: subscriptionEndDate})"
|
||||
>
|
||||
</span>
|
||||
</div>
|
||||
<h2 v-once>
|
||||
{{ $t('switchToRecurring') }}
|
||||
</h2>
|
||||
<small
|
||||
v-once
|
||||
class="mx-4 mb-3 text-center"
|
||||
>
|
||||
{{ $t('continueGiftSubBenefits') }}
|
||||
</small>
|
||||
<subscription-options
|
||||
:note="'subscriptionCreditConversion'"
|
||||
class="w-100 mb-2"
|
||||
/>
|
||||
</div>
|
||||
<div
|
||||
v-else-if="hasCanceledSubscription"
|
||||
v-if="hasCanceledSubscription"
|
||||
class="d-flex flex-column align-items-center mt-4"
|
||||
>
|
||||
<div class="round-container bg-gray-300 d-flex align-items-center justify-content-center">
|
||||
@@ -220,7 +180,7 @@
|
||||
</div>
|
||||
<div
|
||||
v-if="hasSubscription"
|
||||
class="bg-gray-700 py-3 mb-3 text-center"
|
||||
class="bg-gray-700 py-3 mt-4 mb-3 text-center"
|
||||
>
|
||||
<div class="header-mini mb-3">
|
||||
{{ $t('subscriptionStats') }}
|
||||
@@ -362,12 +322,6 @@
|
||||
max-width: 21rem;
|
||||
}
|
||||
|
||||
small {
|
||||
color: $gray-100;
|
||||
font-size: 12px ;
|
||||
line-height: 1.33;
|
||||
}
|
||||
|
||||
strong {
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -445,10 +399,6 @@
|
||||
height: 49px;
|
||||
}
|
||||
|
||||
.lh-71 {
|
||||
line-height: 1.71;
|
||||
}
|
||||
|
||||
.maroon-50 {
|
||||
color: $maroon-50;
|
||||
}
|
||||
@@ -493,6 +443,7 @@
|
||||
}
|
||||
|
||||
.subscribe-card {
|
||||
padding-top: 2rem;
|
||||
width: 28rem;
|
||||
border-radius: 8px;
|
||||
box-shadow: 0 2px 2px 0 rgba(26, 24, 29, 0.16), 0 1px 4px 0 rgba(26, 24, 29, 0.12);
|
||||
@@ -521,7 +472,8 @@
|
||||
}
|
||||
|
||||
.svg-check {
|
||||
width: 36px;
|
||||
width: 35.1px;
|
||||
height: 28px;
|
||||
color: $white;
|
||||
}
|
||||
|
||||
@@ -718,9 +670,6 @@ export default {
|
||||
hasSubscription () {
|
||||
return Boolean(this.user.purchased.plan.customerId);
|
||||
},
|
||||
hasGiftSubscription () {
|
||||
return this.user.purchased.plan.customerId === 'Gift';
|
||||
},
|
||||
hasCanceledSubscription () {
|
||||
return (
|
||||
this.hasSubscription
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<template>
|
||||
<div id="subscription-form">
|
||||
<b-form-group class="mb-3 w-100 h-100">
|
||||
<b-form-group class="mb-4 w-100 h-100">
|
||||
<!-- eslint-disable vue/no-use-v-if-with-v-for -->
|
||||
<b-form-radio
|
||||
v-for="block in subscriptionBlocksOrdered"
|
||||
@@ -32,15 +32,6 @@
|
||||
</div>
|
||||
</b-form-radio>
|
||||
</b-form-group>
|
||||
<div class="mx-4 mb-4 text-center">
|
||||
<small
|
||||
v-if="note"
|
||||
v-once
|
||||
class="font-italic"
|
||||
>
|
||||
{{ $t(note) }}
|
||||
</small>
|
||||
</div>
|
||||
<!-- payment buttons first is for gift subs and the second is for renewing subs -->
|
||||
<payments-buttons
|
||||
v-if="userReceivingGift && userReceivingGift._id"
|
||||
@@ -91,10 +82,7 @@
|
||||
|
||||
.subscription-bubble, .discount-bubble {
|
||||
border-radius: 100px;
|
||||
padding-left: 12px;
|
||||
padding-right: 12px;
|
||||
font-size: 12px;
|
||||
line-height: 1.33;
|
||||
}
|
||||
|
||||
.subscription-bubble {
|
||||
@@ -112,20 +100,8 @@
|
||||
<style lang="scss" scoped>
|
||||
@import '~@/assets/scss/colors.scss';
|
||||
|
||||
small {
|
||||
color: $gray-100;
|
||||
display: inline-block;
|
||||
font-size: 12px ;
|
||||
font-weight: normal;
|
||||
line-height: 1.33;
|
||||
}
|
||||
|
||||
.subscribe-option {
|
||||
background-color: $gray-700;
|
||||
|
||||
&:not(:last-of-type) {
|
||||
border-bottom: 1px solid $gray-600;
|
||||
}
|
||||
border-bottom: 1px solid $gray-600;
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -145,10 +121,6 @@ export default {
|
||||
paymentsMixin,
|
||||
],
|
||||
props: {
|
||||
note: {
|
||||
type: String,
|
||||
default: null,
|
||||
},
|
||||
userReceivingGift: {
|
||||
type: Object,
|
||||
default () {},
|
||||
@@ -182,13 +154,13 @@ export default {
|
||||
subscriptionBubbles (subscription) {
|
||||
switch (subscription) {
|
||||
case 'basic_3mo':
|
||||
return '<span class="subscription-bubble py-1 mr-1">Gem cap raised to 30</span><span class="subscription-bubble py-1">+1 Mystic Hourglass</span>';
|
||||
return '<span class="subscription-bubble px-2 py-1 mr-1">Gem cap raised to 30</span><span class="subscription-bubble px-2 py-1">+1 Mystic Hourglass</span>';
|
||||
case 'basic_6mo':
|
||||
return '<span class="subscription-bubble py-1 mr-1">Gem cap raised to 35</span><span class="subscription-bubble py-1">+2 Mystic Hourglass</span>';
|
||||
return '<span class="subscription-bubble px-2 py-1 mr-1">Gem cap raised to 35</span><span class="subscription-bubble px-2 py-1">+2 Mystic Hourglass</span>';
|
||||
case 'basic_12mo':
|
||||
return '<span class="discount-bubble py-1 mr-1">Save 20%</span><span class="subscription-bubble py-1 mr-1">Gem cap raised to 45</span><span class="subscription-bubble py-1">+4 Mystic Hourglass</span>';
|
||||
return '<span class="discount-bubble px-2 py-1 mr-1">Save 20%</span><span class="subscription-bubble px-2 py-1 mr-1">Gem cap raised to 45</span><span class="subscription-bubble px-2 py-1">+4 Mystic Hourglass</span>';
|
||||
default:
|
||||
return '<span class="subscription-bubble py-1">Gem cap at 25</span>';
|
||||
return '<span class="subscription-bubble px-2 py-1">Gem cap at 25</span>';
|
||||
}
|
||||
},
|
||||
updateSubscriptionData (key) {
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="container-fluid">
|
||||
<h1>{{ $t('communityGuidelines') }}</h1>
|
||||
<hr>
|
||||
<p>{{ $t('lastUpdated') }} February 8, 2023</p>
|
||||
<p>{{ $t('lastUpdated') }} July 28, 2021</p>
|
||||
<h2 id="welcome">
|
||||
{{ $t('commGuideHeadingWelcome') }}
|
||||
</h2>
|
||||
@@ -21,7 +21,6 @@
|
||||
<p v-html="$t('commGuidePara016')"></p>
|
||||
<p v-html="$t('commGuidePara017')"></p>
|
||||
<ul>
|
||||
<li v-html="$t('commGuideList01F')"></li>
|
||||
<li v-html="$t('commGuideList01A')"></li>
|
||||
<li v-html="$t('commGuideList01B')"></li>
|
||||
<li v-html="$t('commGuideList01C')"></li>
|
||||
@@ -33,7 +32,6 @@
|
||||
<img src="~@/assets/images/community-guidelines/publicSpaces.png">
|
||||
</div>
|
||||
<ul>
|
||||
<li v-html="$t('commGuideList02N')"></li>
|
||||
<li v-html="$t('commGuideList02A')"></li>
|
||||
<li v-html="$t('commGuideList02B')"></li>
|
||||
<li v-html="$t('commGuideList02G')"></li>
|
||||
@@ -152,6 +150,7 @@
|
||||
<li>{{ $t('commGuideList10A1') }}</li>
|
||||
</ul>
|
||||
</li>
|
||||
<li v-html="$t('commGuideList10C')"></li>
|
||||
<li v-html="$t('commGuideList10D')"></li>
|
||||
<li v-html="$t('commGuideList10F')"></li>
|
||||
</ul>
|
||||
@@ -177,53 +176,50 @@
|
||||
<h2 id="meet-the-mods">
|
||||
{{ $t('commGuideHeadingMeet') }}
|
||||
</h2>
|
||||
<p v-html="$t('commGuidePara006')"></p>
|
||||
<p v-html="$t('commGuidePara007')"></p>
|
||||
<p v-html="$t('commGuidePara008')"></p>
|
||||
<p v-html="$t('commGuidePara009')"></p>
|
||||
<div class="media align-items-center">
|
||||
<img src="~@/assets/images/community-guidelines/staff.png">
|
||||
<div class="media-body">
|
||||
<ul>
|
||||
<li>
|
||||
{{ $t('commGuideAKA', {habitName: 'heyeilatan', realName: 'Natalie'}) }}
|
||||
({{ $t('commGuideOnGitHub', {gitHubName: 'CuriousMagpie'}) }})
|
||||
- Web Developer
|
||||
</li>
|
||||
<li>
|
||||
{{ $t('commGuideAKA', {habitName: 'Viirus', realName: 'Phillip'}) }}
|
||||
- Mobile Developer
|
||||
</li>
|
||||
<li>{{ $t('commGuideAKA', {habitName: 'Viirus', realName: 'Phillip'}) }}</li>
|
||||
<li>
|
||||
{{ $t('commGuideAKA', {habitName: 'redphoenix', realName: 'Vicky'}) }}
|
||||
({{ $t('commGuideOnGitHub', {gitHubName: 'veeeeeee'}) }})
|
||||
- Co-Founder
|
||||
</li>
|
||||
<li>
|
||||
{{ $t('commGuideAKA', {habitName: 'Beffymaroo', realName: 'Beth'}) }}
|
||||
- Art, Community Management, Many Hats
|
||||
</li>
|
||||
<li>
|
||||
{{ $t('commGuideAKA', {habitName: 'SabreCat', realName: 'Sabe'}) }}
|
||||
- Web Developer
|
||||
</li>
|
||||
<li>
|
||||
{{ $t('commGuideAKA', {habitName: 'Apollo', realName: 'Tressley'}) }}
|
||||
- Designer
|
||||
</li>
|
||||
<li>
|
||||
{{ $t('commGuideAKA', {habitName: 'Piyo', realName: 'Sara'}) }}
|
||||
- Mobile Designer
|
||||
</li>
|
||||
<li>{{ $t('commGuideAKA', {habitName: 'Beffymaroo', realName: 'Beth'}) }}</li>
|
||||
<li>{{ $t('commGuideAKA', {habitName: 'SabreCat', realName: 'Sabe'}) }}</li>
|
||||
<li>{{ $t('commGuideAKA', {habitName: 'Apollo', realName: 'Tressley'}) }}</li>
|
||||
<li>{{ $t('commGuideAKA', {habitName: 'Piyo', realName: 'Sara'}) }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p v-html="$t('commGuidePara010')"></p>
|
||||
<div class="media align-items-center">
|
||||
<img src="~@/assets/images/community-guidelines/moderators.png">
|
||||
<div class="media-body">
|
||||
<p v-html="$t('commGuidePara011')"></p>
|
||||
<ul>
|
||||
<li>Dewines</li>
|
||||
<li>Nakonana</li>
|
||||
<li>Cantras</li>
|
||||
<li>Alys (LadyAlys {{ $t('commGuidePara011c') }})</li>
|
||||
<li>Fox_town</li>
|
||||
<li>MaybeSteveRogers</li>
|
||||
<li>shanaqui</li>
|
||||
<li>deilann (not yet pictured)</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<p v-html="$t('commGuidePara012')"></p>
|
||||
<p v-html="$t('commGuidePara013')"></p>
|
||||
<p>
|
||||
{{ $t('commGuidePara014') }}<br>
|
||||
<em>
|
||||
Lemoness, lefnire, Slappybag, litenull, Shaner, Bobbyroberts99, wc8,
|
||||
Breadstrings, Megan, Blade, Daniel the Bard, deilann, shanaqui, Nakonana,
|
||||
Dewines, Alys, Fox_town, MaybeSteveRogers, and Cantras.
|
||||
|
||||
Breadstrings, Megan, Blade, and Daniel the Bard
|
||||
</em>
|
||||
</p>
|
||||
<h2 id="final">
|
||||
@@ -244,7 +240,6 @@
|
||||
</ul>
|
||||
<p v-html="$t('commGuidePara069')"></p>
|
||||
<ul class="list-2col list-unstyled">
|
||||
<li>Beffymaroo</li>
|
||||
<li>Breadstrings</li>
|
||||
<li>Draayder</li>
|
||||
<li>Kiwibot</li>
|
||||
|
||||
@@ -5,44 +5,40 @@
|
||||
>
|
||||
<div class="row">
|
||||
<div class="col-12 col-md-6 offset-md-3">
|
||||
<h1
|
||||
v-once
|
||||
id="faq-heading"
|
||||
>
|
||||
<h1 id="faq-heading">
|
||||
{{ $t('frequentlyAskedQuestions') }}
|
||||
</h1>
|
||||
<div
|
||||
v-for="(entry, index) in faq.questions"
|
||||
v-for="(heading, index) in headings"
|
||||
:key="index"
|
||||
class="faq-question"
|
||||
>
|
||||
<h2
|
||||
v-once
|
||||
v-b-toggle="entry.heading"
|
||||
role="tab"
|
||||
variant="info"
|
||||
@click="handleClick($event)"
|
||||
<div
|
||||
v-if="heading !== 'world-boss'"
|
||||
>
|
||||
{{ entry.question }}
|
||||
</h2>
|
||||
<b-collapse
|
||||
:id="entry.heading"
|
||||
:visible="isVisible(entry.heading)"
|
||||
accordion="faq"
|
||||
role="tabpanel"
|
||||
>
|
||||
<div
|
||||
v-once
|
||||
v-markdown="entry.web"
|
||||
class="card-body"
|
||||
></div>
|
||||
</b-collapse>
|
||||
<h2
|
||||
v-b-toggle="heading"
|
||||
role="tab"
|
||||
variant="info"
|
||||
@click="handleClick($event)"
|
||||
>
|
||||
{{ $t(`faqQuestion${index}`) }}
|
||||
</h2>
|
||||
<b-collapse
|
||||
:id="heading"
|
||||
:visible="isVisible(heading)"
|
||||
accordion="faq"
|
||||
role="tabpanel"
|
||||
>
|
||||
<div
|
||||
v-markdown="$t(`webFaqAnswer${index}`, replacements)"
|
||||
class="card-body"
|
||||
></div>
|
||||
</b-collapse>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<p
|
||||
v-once
|
||||
v-markdown="stillNeedHelp"
|
||||
></p>
|
||||
<p v-markdown="$t('webFaqStillNeedHelp')"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -50,7 +46,7 @@
|
||||
|
||||
<style lang='scss' scoped>
|
||||
.card-body {
|
||||
margin-bottom: 1em;
|
||||
margin-bottom: 1em;
|
||||
}
|
||||
|
||||
.faq-question h2 {
|
||||
@@ -78,34 +74,53 @@
|
||||
</style>
|
||||
|
||||
<script>
|
||||
// @TODO: env.EMAILS.TECH_ASSISTANCE_EMAIL
|
||||
import markdownDirective from '@/directives/markdown';
|
||||
|
||||
const TECH_ASSISTANCE_EMAIL = 'admin@habitica.com';
|
||||
|
||||
export default {
|
||||
directives: {
|
||||
markdown: markdownDirective,
|
||||
},
|
||||
data () {
|
||||
const headings = [
|
||||
'overview',
|
||||
'set-up-tasks',
|
||||
'sample-tasks',
|
||||
'task-color',
|
||||
'health',
|
||||
'party-with-friends',
|
||||
'pets-mounts',
|
||||
'character-classes',
|
||||
'blue-mana-bar',
|
||||
'monsters-quests',
|
||||
'gems',
|
||||
'bugs-features',
|
||||
'world-boss',
|
||||
'group-plans',
|
||||
];
|
||||
|
||||
const hash = window.location.hash.replace('#', '');
|
||||
|
||||
return {
|
||||
faq: {},
|
||||
headings: [],
|
||||
stillNeedHelp: '',
|
||||
headings,
|
||||
replacements: {
|
||||
techAssistanceEmail: TECH_ASSISTANCE_EMAIL,
|
||||
wikiTechAssistanceEmail: `mailto:${TECH_ASSISTANCE_EMAIL}`,
|
||||
},
|
||||
visible: hash && headings.includes(hash) ? hash : null,
|
||||
};
|
||||
},
|
||||
async mounted () {
|
||||
mounted () {
|
||||
this.$store.dispatch('common:setTitle', {
|
||||
section: this.$t('help'),
|
||||
subSection: this.$t('faq'),
|
||||
});
|
||||
this.faq = await this.$store.dispatch('faq:getFAQ');
|
||||
for (const entry of this.faq.questions) {
|
||||
this.headings.push(entry.heading);
|
||||
}
|
||||
this.stillNeedHelp = this.faq.stillNeedHelp.web;
|
||||
},
|
||||
methods: {
|
||||
isVisible (heading) {
|
||||
const hash = window.location.hash.replace('#', '');
|
||||
return hash && this.headings.includes(hash) && hash === heading;
|
||||
return this.visible && this.visible === heading;
|
||||
},
|
||||
handleClick (e) {
|
||||
if (!e) return;
|
||||
|
||||
@@ -863,13 +863,16 @@ export default {
|
||||
this.loadUser();
|
||||
this.oldTitle = this.$store.state.title;
|
||||
this.selectPage(this.startingPage);
|
||||
this.$root.$on('habitica:restoreTitle', () => {
|
||||
if (this.oldTitle) {
|
||||
this.$store.dispatch('common:setTitle', {
|
||||
fullTitle: this.oldTitle,
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
beforeDestroy () {
|
||||
if (this.oldTitle) {
|
||||
this.$store.dispatch('common:setTitle', {
|
||||
fullTitle: this.oldTitle,
|
||||
});
|
||||
}
|
||||
this.$root.$off('habitica:restoreTitle');
|
||||
},
|
||||
methods: {
|
||||
async loadUser () {
|
||||
@@ -1025,9 +1028,10 @@ export default {
|
||||
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
|
||||
},
|
||||
adminBlockUser () {
|
||||
this.hero.auth.blocked = true;
|
||||
|
||||
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
|
||||
if (window.confirm('Ban user and auto-hide all posts?')) {
|
||||
this.hero.auth.blocked = true;
|
||||
this.$store.dispatch('hall:updateHero', { heroDetails: this.hero });
|
||||
}
|
||||
},
|
||||
adminUnblockUser () {
|
||||
this.hero.auth.blocked = false;
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
:hide-footer="true"
|
||||
:hide-header="true"
|
||||
@hide="beforeHide"
|
||||
@hidden="onHidden"
|
||||
@shown="onShown()"
|
||||
>
|
||||
<profile
|
||||
@@ -54,11 +55,14 @@ export default {
|
||||
},
|
||||
beforeHide () {
|
||||
if (this.$route.path !== window.location.pathname) {
|
||||
this.$router.back();
|
||||
this.$root.$emit('habitica:restoreTitle');
|
||||
}
|
||||
},
|
||||
onHidden () {
|
||||
if (this.$route.path !== window.location.pathname) {
|
||||
this.$router.go(-1);
|
||||
}
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
</script>
|
||||
|
||||
@@ -26,7 +26,6 @@ export default {
|
||||
'Fox-Veteran',
|
||||
'JackOLantern-Glow',
|
||||
'Gryphon-Gryphatrice',
|
||||
'Gryphatrice-Jubilant',
|
||||
'JackOLantern-RoyalPurple',
|
||||
];
|
||||
const BASE_PETS = [
|
||||
|
||||
@@ -9,6 +9,7 @@ import { CONSTANTS, setLocalSetting } from '@/libs/userlocalManager';
|
||||
|
||||
const { STRIPE_PUB_KEY } = process.env;
|
||||
|
||||
// const habiticaUrl = `${window.location.protocol}//${window.location.host}`;
|
||||
let stripeInstance = null;
|
||||
|
||||
export default {
|
||||
@@ -69,7 +70,6 @@ export default {
|
||||
type,
|
||||
giftData,
|
||||
gemsBlock,
|
||||
sku,
|
||||
} = data;
|
||||
let { url } = data;
|
||||
|
||||
@@ -93,11 +93,6 @@ export default {
|
||||
url += `?gemsBlock=${gemsBlock.key}`;
|
||||
}
|
||||
|
||||
if (type === 'sku') {
|
||||
appState.sku = sku;
|
||||
url += `?sku=${sku}`;
|
||||
}
|
||||
|
||||
setLocalSetting(CONSTANTS.savedAppStateValues.SAVED_APP_STATE, JSON.stringify(appState));
|
||||
window.open(url, '_blank');
|
||||
|
||||
@@ -134,7 +129,6 @@ export default {
|
||||
if (data.group || data.groupToCreate) paymentType = 'groupPlan';
|
||||
if (data.gift && data.gift.type === 'gems') paymentType = 'gift-gems';
|
||||
if (data.gift && data.gift.type === 'subscription') paymentType = 'gift-subscription';
|
||||
if (data.sku) paymentType = 'sku';
|
||||
|
||||
let url = '/stripe/checkout-session';
|
||||
const postData = {};
|
||||
@@ -154,7 +148,6 @@ export default {
|
||||
if (data.coupon) postData.coupon = data.coupon;
|
||||
if (data.groupId) postData.groupId = data.groupId;
|
||||
if (data.demographics) postData.demographics = data.demographics;
|
||||
if (data.sku) postData.sku = data.sku;
|
||||
|
||||
const response = await axios.post(url, postData);
|
||||
|
||||
@@ -257,7 +250,6 @@ export default {
|
||||
|
||||
if (data.type === 'single') {
|
||||
this.amazonPayments.gemsBlock = data.gemsBlock;
|
||||
this.amazonPayments.sku = data.sku;
|
||||
}
|
||||
|
||||
if (data.gift) {
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
import axios from 'axios';
|
||||
|
||||
export async function getFAQ () {
|
||||
const url = '/api/v4/faq?platform=web';
|
||||
const response = await axios.get(url);
|
||||
return response.data.data;
|
||||
}
|
||||
@@ -18,7 +18,6 @@ import * as snackbars from './snackbars';
|
||||
import * as worldState from './worldState';
|
||||
import * as news from './news';
|
||||
import * as analytics from './analytics';
|
||||
import * as faq from './faq';
|
||||
|
||||
// Actions should be named as 'actionName' and can be accessed as 'namespace:actionName'
|
||||
// Example: fetch in user.js -> 'user:fetch'
|
||||
@@ -42,7 +41,6 @@ const actions = flattenAndNamespace({
|
||||
worldState,
|
||||
news,
|
||||
analytics,
|
||||
faq,
|
||||
});
|
||||
|
||||
export default actions;
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
import axios from 'axios';
|
||||
|
||||
export async function getTags () {
|
||||
const url = '/api/v4/tags';
|
||||
const url = 'api/v4/tags';
|
||||
const response = await axios.get(url);
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
export async function createTag (store, payload) {
|
||||
const url = '/api/v4/tags';
|
||||
const url = 'api/v4/tags';
|
||||
const response = await axios.post(url, {
|
||||
name: payload.name,
|
||||
});
|
||||
@@ -19,13 +19,13 @@ export async function createTag (store, payload) {
|
||||
}
|
||||
|
||||
export async function getTag (store, payload) {
|
||||
const url = `/api/v4/tags/${payload.tagId}`;
|
||||
const url = `api/v4/tags/${payload.tagId}`;
|
||||
const response = await axios.get(url);
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
export async function updateTag (store, payload) {
|
||||
const url = `/api/v4/tags/${payload.tagId}`;
|
||||
const url = `api/v4/tags/${payload.tagId}`;
|
||||
const response = await axios.put(url, {
|
||||
tagDetails: payload.tagDetails,
|
||||
});
|
||||
@@ -33,7 +33,7 @@ export async function updateTag (store, payload) {
|
||||
}
|
||||
|
||||
export async function sortTag (store, payload) {
|
||||
const url = '/api/v4/reorder-tags';
|
||||
const url = 'api/v4/reorder-tags';
|
||||
const response = await axios.post(url, {
|
||||
tagId: payload.tagId,
|
||||
to: payload.to,
|
||||
@@ -42,7 +42,7 @@ export async function sortTag (store, payload) {
|
||||
}
|
||||
|
||||
export async function deleteTag (store, payload) {
|
||||
const url = `/api/v4/tags/${payload.tagId}`;
|
||||
const url = `api/v4/tags/${payload.tagId}`;
|
||||
const response = await axios.delete(url);
|
||||
return response.data.data;
|
||||
}
|
||||
|
||||
@@ -127,22 +127,16 @@
|
||||
"achievementReptacularRumbleModalText": "لقد جمعت كل الزواحف الأليفة!",
|
||||
"achievementReptacularRumbleText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الزواحف: التمساح، الزاحف المجنح، الأفعى، ترايسيراتوبس، السلحفاة، التيرانوصور ريكس وفيلوسيرابتور!",
|
||||
"achievementBirdsOfAFeather": "أصدقاء الطيران",
|
||||
"achievementZodiacZookeeper": "حارس البروج",
|
||||
"achievementShadyCustomerText": "جمعت كل الحيوانات الأليفة السوداء.",
|
||||
"achievementShadyCustomerModalText": "لقد جمعت كل الحيوانات الأليفة السوداء!",
|
||||
"achievementZodiacZookeeperModalText": "لقد جمعت كل حيوانات البروج الأليفة!",
|
||||
"achievementZodiacZookeeper": "حارس حديقة الحيوانات الفلكية",
|
||||
"achievementShadyCustomerText": "جمع كل حيوانات الظل الأليفة.",
|
||||
"achievementShadyCustomerModalText": "لقد جمعت كل حيوانات الظل الأليفة!",
|
||||
"achievementZodiacZookeeperModalText": "لقد جمعت كل الحيوانات الأليفة الفلكية!",
|
||||
"achievementBirdsOfAFeatherText": "لقد فقس جميع الألوان القياسية للحيوانات الأليفة الطائرة: الخنزير الطائر، البومة، الببغاء، الزاحف المجنح، الجرايفون، فالكون، الطاووس والديك!",
|
||||
"achievementShadeOfItAllModalText": "لقد قمت بترويض كل الركوبات السوداء!",
|
||||
"achievementShadyCustomer": "عميل مشبوه",
|
||||
"achievementShadeOfItAll": "كل شيء في الظلام",
|
||||
"achievementShadeOfItAllText": "قام بترويض كل الركوبات السوداء.",
|
||||
"achievementShadeOfItAllModalText": "قمت بترويض كل الحيوانات السوداء",
|
||||
"achievementShadyCustomer": "عميل الظل",
|
||||
"achievementShadeOfItAll": "الظل فوق كل شيء",
|
||||
"achievementShadeOfItAllText": "روض كل حيوانات الظل السوداء.",
|
||||
"achievementWoodlandWizard": "ساحر الغابة",
|
||||
"achievementWoodlandWizardText": "لقد فقس جميع الألوان القياسية لمخلوقات الغابة: الغرير، الدب، الغزال، الثعلب، الضفدع، القنفذ، البومة، الأفعى، السنجاب والشجيرة!",
|
||||
"achievementWoodlandWizardModalText": "لقد جمعت كل حيوانات الغابة الأليفة!",
|
||||
"achievementPolarPro": "المحترف القطبي",
|
||||
"achievementPolarProText": "فقست جميع الحيوانات الأليفة القطبية: الدب ، الثعلب ، البطريق ، الحوت ، والذئب!",
|
||||
"achievementPolarProModalText": "لقد جمعت كل الحيوانات الأليفة القطبية!",
|
||||
"achievementBoneToPick": "جامع العظام",
|
||||
"achievementBoneToPickText": "فقست جميع الحيوانات الأليفة الهيكلية المغامرة والكلاسيكية!",
|
||||
"achievementBoneToPickModalText": "لقد جمعت كل الحيوانات الأليفة الهيكلية المغامرة والكلاسيكية!"
|
||||
"achievementWoodlandWizardModalText": "لقد جمعت كل حيوانات الغابة الأليفة!"
|
||||
}
|
||||
|
||||
@@ -422,31 +422,5 @@
|
||||
"backgroundDuckPondNotes": "أطعم الطيور المائية في بركة البط.",
|
||||
"backgroundValentinesDayFeastingHallNotes": "اشعر بالحب في قاعة احتفالات عيد الحب.",
|
||||
"hideLockedBackgrounds": "إخفاء الخلفيات المقفلة",
|
||||
"backgrounds032019": "SET 58: تم إصداره في مارس 2019",
|
||||
"backgroundFieldWithColoredEggsNotes": "ابحث عن كنز الربيع في حقل به بيض ملون.",
|
||||
"backgroundFlowerMarketNotes": "اعثر على الزهور المثالية لباقة أو حديقة في سوق الزهور.",
|
||||
"backgrounds052019": "المجموعة 60: صدرت في مايو 2019",
|
||||
"backgroundHalflingsHouseNotes": "قم بزيارة منزل هافلينج الساحر.",
|
||||
"backgroundBirchForestText": "غابة البتولا",
|
||||
"backgroundBlossomingDesertNotes": "شاهد إزهارًا هائلًا نادرًا في الصحراء المزهرة.",
|
||||
"backgroundDojoText": "دوجو",
|
||||
"backgroundBlossomingDesertText": "الصحراء المزهرة",
|
||||
"backgroundHalflingsHouseText": "منزل هافلينج",
|
||||
"backgroundFlowerMarketText": "سوق الزهور",
|
||||
"backgroundBirchForestNotes": "اقضِ بعض الوقت في غابة البتولا الهادئة.",
|
||||
"backgroundFieldWithColoredEggsText": "حقل به بيض ملون",
|
||||
"backgrounds042019": "المجموعة 59: صدرت في أبريل 2019",
|
||||
"backgroundRainbowMeadowNotes": "ابحث عن وعاء الذهب حيث ينتهي قوس قزح في مرج.",
|
||||
"backgrounds062019": "المجموعة 61: صدرت في يونيو 2019",
|
||||
"backgroundUnderwaterVentsNotes": "غص في الأعماق حيث تكمن الفتحات المائية الحرارية.",
|
||||
"backgroundRainbowMeadowText": "مرج قوس قزح",
|
||||
"backgroundSeasideCliffsNotes": "قف على الشاطئ وسط جمال المنحدرات الساحلية المحيطة.",
|
||||
"backgroundSchoolOfFishNotes": "اسبح بين سرب من الأسماك.",
|
||||
"backgroundUnderwaterVentsText": "الفتحات الحرارية المائية",
|
||||
"backgroundSeasideCliffsText": "المنحدرات الساحلية",
|
||||
"backgroundParkWithStatueText": "حديقة بها تمثال",
|
||||
"backgroundDojoNotes": "تعلم حركات جديدة في دوجو.",
|
||||
"backgroundSchoolOfFishText": "سرب من الأسماك",
|
||||
"backgrounds072019": "المجموعة 62: صدرت في يوليو 2019",
|
||||
"backgroundParkWithStatueNotes": "اتبع مسارًا تصطف على جانبيه الأزهار عبر حديقة بها تمثال."
|
||||
"backgrounds032019": "SET 58: تم إصداره في مارس 2019"
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@
|
||||
"weaponSpecialTakeThisText": "Take This Sword",
|
||||
"weaponSpecialTakeThisNotes": "This sword was earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.",
|
||||
"weaponSpecialTridentOfCrashingTidesText": "ترايدنت الأمواج المتضاربة",
|
||||
"weaponSpecialTridentOfCrashingTidesNotes": "يمنحك القدرة على التحكم بالأسماك، وكذلك القدرة على توجيه بعض الطعنات القوية لمهماتك. يزيد الذكاء بقدر <%= int %>.",
|
||||
"weaponSpecialTridentOfCrashingTidesNotes": "يمنحك القدرة على التحكم بالأسماك، وكذلك القدرة على تقديم بعض الطعنات القوية لمهماتك. يزيد الذكاء بقدر <%= int %>.",
|
||||
"weaponSpecialTaskwoodsLanternText": "Taskwoods Lantern",
|
||||
"weaponSpecialTaskwoodsLanternNotes": "Given at the dawn of time to the guardian ghost of the Taskwood Orchards, this lantern can illuminate the deepest darkness and weave powerful spells. Increases Perception and Intelligence by <%= attrs %> each.",
|
||||
"weaponSpecialBardInstrumentText": "Bardic Lute",
|
||||
@@ -117,7 +117,7 @@
|
||||
"weaponSpecialYetiText": "رمح مروض اليتي",
|
||||
"weaponSpecialYetiNotes": "هذا الرمح يسمح لمستخدمه الصيطرة على أي يتي. يزيد القوة بقدر <%= str %>. معدات الطبعة المحدودة لشتاء 2013-2014.",
|
||||
"weaponSpecialSkiText": "عمود المتزلج القاتل",
|
||||
"weaponSpecialSkiNotes": "سلاح قادر على تدمير المجموعات الكبيرة من الأعداء. وأيضاً يساعد مستخدمه على الانعطافات المتوازية. يزيد القوة بقدر <%= str %>. معدات الطبعة المحدودة لشتاء 2013-2014.",
|
||||
"weaponSpecialSkiNotes": "سلاح قادر على تدمير المجموعات الكبيرة من الأعداء. وأيضاً يساعد مستخدمه على الانعطافات المتوازية. يزيد القوة بقدر <%= str %>. معدات الطبعة المحدودة لشتاء 2013-2014.",
|
||||
"weaponSpecialCandycaneText": "قضيب حلوى القصب",
|
||||
"weaponSpecialCandycaneNotes": "A powerful mage's staff. Powerfully DELICIOUS, we mean! Increases Intelligence by <%= int %> and Perception by <%= per %>. Limited Edition 2013-2014 Winter Gear.",
|
||||
"weaponSpecialSnowflakeText": "العصا السحرية ذات ندفة الثلج",
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
"messageLikesFood": "<%= egg %> يحب <%= foodText %> كثيراً!",
|
||||
"messageDontEnjoyFood": "<%= egg %> يأكل <%= foodText %> ولكنه لا يبدو مستمتعاً.",
|
||||
"messageBought": "لقد اشتريت <%= itemText %>",
|
||||
"messageUnEquipped": "<%= itemText %> غير مجهز/ة.",
|
||||
"messageUnEquipped": "<%= itemText %> unequipped.",
|
||||
"messageMissingEggPotion": "تفتقد أيًا من تلك البيضة أو جرعة الفقس.",
|
||||
"messageInvalidEggPotionCombo": "لا يمكنك فقس بيض حيوانات التنقيب مع جرع فقس سحرية! جرب بيضة أخرى.",
|
||||
"messageAlreadyPet": "لديك ذلك الحيوان الأليف. حاول فقس تركيبة مختلفة!",
|
||||
@@ -50,7 +50,5 @@
|
||||
"unallocatedStatsPoints": "You have <span class=\"notification-bold-blue\"><%= points %> unallocated Stat Points</span>",
|
||||
"beginningOfConversation": "هذه هي بداية محادثتك مع <%= userName %>. تذكر أن تكون لطيفاً محترماً، واتبع إرشادات المنتدى!",
|
||||
"messageDeletedUser": "عذراً، لقد حذف هذا المستخدم حسابه.",
|
||||
"messageMissingDisplayName": "Missing display name.",
|
||||
"messageBattleGearUnEquipped": "المعدات القتالية غير مجهزة.",
|
||||
"messageCostumeUnEquipped": "الزي غير مجهز."
|
||||
"messageMissingDisplayName": "Missing display name."
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"achievement": "Постижение",
|
||||
"onwards": "Напред!",
|
||||
"levelup": "Изпълнявайки целите си в истинския живот, Вие се качихте ниво и здравето Ви беше запълнено!",
|
||||
"reachedLevel": "Достигнахте Ниво <%= level %>",
|
||||
"levelup": "Изпълнявайки целите си в истинския живот, Вие качихте ниво и здравето Ви беше запълнено!",
|
||||
"reachedLevel": "Достигнахте ниво <%= level %>",
|
||||
"achievementLostMasterclasser": "Изпълнител на Мисии: Серия на Класовите Повелители",
|
||||
"achievementLostMasterclasserText": "Завършихте шестнадесетте мисии от Серията на Класовите Повелители и разрешихте загадката на Изгубената Класова Повелителка!",
|
||||
"achievementUndeadUndertaker": "Нежив Погребален Директор",
|
||||
@@ -59,13 +59,13 @@
|
||||
"foundNewItemsExplanation": "Завършека на задачи ви дава шанс да намерите предмети като Яйца, Излюпващи Отвари и Животинска Храна.",
|
||||
"foundNewItems": "Намерихте нови предмети!",
|
||||
"hideAchievements": "Скрий <%= category %>",
|
||||
"showAllAchievements": "Покажи Всички <%=category %>",
|
||||
"onboardingCompleteDescSmall": "Ако желаете още повече, отидете в Постижения и започнете колекционирането!",
|
||||
"showAllAchievements": "Покажи Всички",
|
||||
"onboardingCompleteDescSmall": "Ако желаете още повече, отидете в Постижения и започнете събирането!",
|
||||
"onboardingCompleteDesc": "Получихте <strong>5 Постижения</strong> и <strong class=\"gold-amount\">100 Злато</strong> за завършения списък.",
|
||||
"onboardingComplete": "Завършихте уводните си задачи!",
|
||||
"onboardingComplete": "Завършихте задачите си!",
|
||||
"earnedAchievement": "Получихте постижение!",
|
||||
"yourProgress": "Вашият Напредък",
|
||||
"gettingStartedDesc": "Изпълнете тези уводни задачи и ще получите <strong>5 Постижения </strong> и <strong class=\"gold-amount\">100 Злато </strong>при завършване!",
|
||||
"gettingStartedDesc": "Изпълнете задачите и ще получите <strong>5 Постижения </strong> и <strong class=\"gold-amount\">100 Злато </strong>при завършване!",
|
||||
"achievementPrimedForPaintingModalText": "Събрахте всички Бели Животни!",
|
||||
"achievementPearlyProModalText": "Опитомихте всички Бели Оседлани Зверове!",
|
||||
"achievementPearlyProText": "Опетомили са всички Оседлани Зверове.",
|
||||
@@ -75,13 +75,13 @@
|
||||
"achievementFedPet": "Нахрани Животно",
|
||||
"achievementHatchedPetModalText": "Отиди в инвентара си и смеси излюпваща отвара с Яйце",
|
||||
"achievementHatchedPet": "Излюпи Животно",
|
||||
"viewAchievements": "Прегледай Постижения",
|
||||
"viewAchievements": "Постижения",
|
||||
"letsGetStarted": "Нека да започнем!",
|
||||
"onboardingProgress": "<%= percentage %>% напредък",
|
||||
"achievementBareNecessitiesModalText": "Завършихте мисиите за Маймуна, Ленивец и Фиданка!",
|
||||
"achievementBareNecessitiesText": "Завършили са всички мисии за Маймуна, Ленивец и Фиданка.",
|
||||
"achievementBareNecessities": "От първа необходимост",
|
||||
"achievementBoneCollectorText": "Събрали са всички Скелетни Любимци.",
|
||||
"achievementBoneCollectorText": "Събрали сте всички Скелети домашни любимци.",
|
||||
"achievementBoneCollector": "Колекционер на кости",
|
||||
"achievementAllThatGlittersModalText": "Събрахте всички оседлани Златни животни!",
|
||||
"achievementAllThatGlittersText": "Събрали сте всички оседлани Златни животни.",
|
||||
@@ -92,6 +92,5 @@
|
||||
"achievementFreshwaterFriendsModalText": "Завършихте мисиите за аксолотъла, жабата и хипопотама!",
|
||||
"achievementFreshwaterFriendsText": "Завършили сте мисиите за домашни любимци за аксолотъла, жабата и хипопотама.",
|
||||
"achievementFreshwaterFriends": "Сладководни приятели",
|
||||
"yourRewards": "Вашите Награди",
|
||||
"achievementBoneCollectorModalText": "Събрали сте всичките Скелетни Любимци!"
|
||||
"yourRewards": "Вашите възнаграждения"
|
||||
}
|
||||
|
||||
@@ -740,10 +740,5 @@
|
||||
"backgroundAmongGiantMushroomsNotes": "Bewundere Riesige Pilze.",
|
||||
"backgroundAmongGiantMushroomsText": "Unter Riesigen Pilzen",
|
||||
"backgroundMistyAutumnForestText": "Nebeliger Herbstwald",
|
||||
"backgroundMistyAutumnForestNotes": "Durchstreife einen nebeligen Herbstwald.",
|
||||
"backgroundAutumnBridgeText": "Brücke im Herbst",
|
||||
"backgroundAutumnBridgeNotes": "Bewundere die Schönheit einer Brücke im Herbst.",
|
||||
"backgrounds122022": "Set 103: Veröffentlicht im Dezember 2022",
|
||||
"backgroundBranchesOfAHolidayTreeText": "Äste eines Festtagsbaums",
|
||||
"backgroundBranchesOfAHolidayTreeNotes": "Baumle auf den Ästen eines Festtagsbaums."
|
||||
"backgroundMistyAutumnForestNotes": "Durchstreife einen nebeligen Herbstwald."
|
||||
}
|
||||
|
||||
@@ -141,8 +141,5 @@
|
||||
"achievementWoodlandWizardModalText": "You collected all the forest pets!",
|
||||
"achievementBoneToPick": "Bone to Pick",
|
||||
"achievementBoneToPickText": "Has hatched all the Classic and Quest Skeleton Pets!",
|
||||
"achievementBoneToPickModalText": "You collected all the Classic and Quest Skeleton Pets!",
|
||||
"achievementPolarPro": "Polar Pro",
|
||||
"achievementPolarProText": "Has hatched all standard colors of Polar pets: Bear, Fox, Penguin, Whale, and Wolf!",
|
||||
"achievementPolarProModalText": "You collected all the Polar Pets!"
|
||||
"achievementBoneToPickModalText": "You collected all the Classic and Quest Skeleton Pets!"
|
||||
}
|
||||
|
||||
@@ -843,31 +843,11 @@
|
||||
"backgroundSnowyVillageText": "Snowy Village",
|
||||
"backgroundSnowyVillageNotes": "Admire a Snowy Village.",
|
||||
|
||||
"backgrounds012023": "SET 104: Released January 2023",
|
||||
"backgroundRimeIceText": "Rime Ice",
|
||||
"backgroundRimeIceNotes": "Admire Sparkly Rime Ice.",
|
||||
"backgroundSnowyTempleText": "Snowy Temple",
|
||||
"backgroundSnowyTempleNotes": "View a Serene Snowy Temple.",
|
||||
"backgroundWinterLakeWithSwansText": "Winter Lake With Swans",
|
||||
"backgroundWinterLakeWithSwansNotes": "Enjoy Nature at a Winter Lake With Swans.",
|
||||
|
||||
"backgrounds022023": "SET 105: Released February 2023",
|
||||
"backgroundInFrontOfFountainText": "In Front of a Fountain",
|
||||
"backgroundInFrontOfFountainNotes": "Stroll In Front of a Fountain.",
|
||||
"backgroundGoldenBirdcageText": "Golden Birdcage",
|
||||
"backgroundGoldenBirdcageNotes": "Hide out in a Golden Birdcage.",
|
||||
"backgroundFancyBedroomText": "Fancy Bedroom",
|
||||
"backgroundFancyBedroomNotes": "Luxuriate in a Fancy Bedroom.",
|
||||
|
||||
"timeTravelBackgrounds": "Steampunk Backgrounds",
|
||||
"backgroundAirshipText": "Airship",
|
||||
"backgroundAirshipNotes": "Become a sky sailor on board your very own Airship.",
|
||||
"backgroundSteamworksText": "Steamworks",
|
||||
"backgroundSteamworksNotes": "Build mighty contraptions of vapor and steel in a Steamworks.",
|
||||
"backgroundClocktowerText": "Clock Tower",
|
||||
"backgroundClocktowerNotes": "Situate your secret lair behind the face of a Clock Tower.",
|
||||
|
||||
"eventBackgrounds": "Event Backgrounds",
|
||||
"backgroundBirthdayBashText": "Birthday Bash",
|
||||
"backgroundBirthdayBashNotes": "Habitica's having a birthday party, and everyone's invited!"
|
||||
"backgroundClocktowerNotes": "Situate your secret lair behind the face of a Clock Tower."
|
||||
}
|
||||
|
||||
@@ -5,55 +5,53 @@
|
||||
"commGuideHeadingWelcome": "Welcome to Habitica!",
|
||||
"commGuidePara001": "Greetings, adventurer! Welcome to Habitica, the land of productivity, healthy living, and the occasional rampaging gryphon. We have a cheerful community full of helpful people supporting each other on their way to self-improvement. To fit in, all it takes is a positive attitude, a respectful manner, and the understanding that everyone has different skills and limitations -- including you! Habiticans are patient with one another and try to help whenever they can.",
|
||||
"commGuidePara002": "To help keep everyone safe, happy, and productive in the community, we do have some guidelines. We have carefully crafted them to make them as friendly and easy-to-read as possible. Please take the time to read them before you start chatting.",
|
||||
"commGuidePara003": "These rules apply to all of the social spaces we use, including (but not necessarily limited to) Trello, GitHub, Weblate, and the Habitica Wiki on Fandom. As communities grow and change, their rules may adapt from time to time. When there are substantive changes to the community rules listed here, you'll hear about it in a Bailey announcement and/or our social media!",
|
||||
"commGuidePara003": "These rules apply to all of the social spaces we use, including (but not necessarily limited to) Trello, GitHub, Weblate, and the Habitica Wiki on Fandom. As communities grow and change, their rules may adapt from time to time. When there are substantive changes to these Guidelines, you'll hear about it in a Bailey announcement and/or our social media!",
|
||||
"commGuideHeadingInteractions": "Interactions in Habitica",
|
||||
"commGuidePara015": "Habitica has two kinds of social spaces: public, and private. Public spaces include the Tavern, Public Guilds, GitHub, Trello, and the Wiki. Private spaces are Private Guilds, Party chat, and Private Messages. All Display Names and @usernames must comply with the public space guidelines. To change your Display Name and/or @username, on mobile go to Menu > Settings > Profile. On web, go to User > Settings.",
|
||||
"commGuidePara016": "When navigating the public spaces in Habitica, there are some general rules to keep everyone safe and happy.",
|
||||
|
||||
"commGuidePara017": "Here's the quick version, but we encourage you to read in more detail below:",
|
||||
"commGuideList01F": "Please flag posts that break our Community Guidelines or TOS.",
|
||||
"commGuideList01A": "Terms & Conditions apply across all spaces, including private guilds, party chat, and messages.",
|
||||
"commGuideList01B": "Prohibited: Any communication that is violent, threatening, promoting of discrimination etc. including memes, images, and jokes.",
|
||||
"commGuideList01C": "All discussions must be appropriate for all ages and be free of profanity.",
|
||||
"commGuideList01D": "Please comply with staff requests.",
|
||||
"commGuideList01E": "<strong>Do not instigate or engage in contentious conversation in the Tavern.</strong>",
|
||||
"commGuideList01D": "Please comply with mod requests.",
|
||||
"commGuideList01E": "Do not instigate or engage in contentious conversation in the Tavern.",
|
||||
"commGuideList01F": "No begging for paid items, spamming, or large header text/all caps.",
|
||||
|
||||
"commGuideList02N": "<strong>Flag and report posts that break these Guidelines or the Terms of Service.</strong> We will handle them as quickly as possible. You may also notify staff via <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> but flags are the fastest way to get help.",
|
||||
"commGuideList02A": "<strong>Respect each other</strong>. Be courteous, kind, friendly, and helpful. Remember: Habiticans come from all backgrounds and have had wildly divergent experiences. This is part of what makes Habitica so cool! Building a community means respecting and celebrating our differences as well as our similarities.",
|
||||
"commGuideList02B": "<strong>Obey all of the <a href='https://habitica.com/static/terms' target='_blank'>Terms and Conditions</a></strong> in both public and private spaces.",
|
||||
"commGuideList02G": "<strong>Comply immediately with any Staff request.</strong> This could include, but is not limited to, requesting you limit your posts in a particular space, editing your profile to remove unsuitable content, asking you to move your discussion to a more suitable space, etc. Do not argue with staff. If you have concerns or comments about staff actions, email <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> to contact our community manager.",
|
||||
"commGuideList02B": "<strong>Obey all of the <a href='/static/terms' target='_blank'>Terms and Conditions</a></strong> in both public and private spaces.",
|
||||
"commGuideList02G": "<strong>Comply immediately with any Mod request.</strong> This could include, but is not limited to, requesting you limit your posts in a particular space, editing your profile to remove unsuitable content, asking you to move your discussion to a more suitable space, etc. Do not argue with moderators. If you have concerns or comments about moderation, email <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> to contact our community manager.",
|
||||
"commGuideList02C": "<strong>Do not post images or text that are violent, threatening, or sexually explicit/suggestive, or that promote discrimination, bigotry, racism, sexism, hatred, harassment or harm against any individual or group</strong>. Not even as a joke or meme. This includes slurs as well as statements. Not everyone has the same sense of humor, and so something that you consider a joke may be hurtful to another.",
|
||||
"commGuideList02D": "<strong>Keep discussions appropriate for all ages</strong>. This means avoiding adult topics in public spaces. We have many young Habiticans who use the site, and people come from all walks of life. We want our community to be as comfortable and inclusive as possible.",
|
||||
"commGuideList02E": "<strong>Avoid profanity. This includes abbreviated or obscured profanity.</strong> We have people from all religious and cultural backgrounds, and we want to make sure that all of them feel comfortable in public spaces. <strong>If a staff member tells you that a term is disallowed on Habitica, even if it is a term that you did not realize was problematic, that decision is final.</strong> Additionally, slurs will be dealt with very severely, as they are also a violation of the Terms of Service.",
|
||||
"commGuideList02F": "Avoid extended discussions of divisive topics in the Tavern and where it would be off-topic. If someone mentions something that is allowed by the guidelines but which is hurtful to you, it's okay to politely let them know that. If someone tells you you've made them uncomfortable, take time to reflect instead of responding in anger. But if you feel that a conversation is getting heated, overly emotional, or hurtful, <strong>cease to engage. Instead, report the posts to let us know about it. </strong>Staff will respond as quickly as possible. You may also email <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> and include screenshots if they may be helpful.",
|
||||
"commGuideList02E": "<strong>Avoid profanity. This includes milder, religious-based oaths that may be acceptable elsewhere and abbreviated or obscured profanity.</strong> We have people from all religious and cultural backgrounds, and we want to make sure that all of them feel comfortable in public spaces. <strong>If a moderator or staff member tells you that a term is disallowed on Habitica, even if it is a term that you did not realize was problematic, that decision is final.</strong> Additionally, slurs will be dealt with very severely, as they are also a violation of the Terms of Service.",
|
||||
"commGuideList02F": "Avoid extended discussions of divisive topics in the Tavern and where it would be off-topic. If someone mentions something that is allowed by the guidelines but which is hurtful to you, it's okay to politely let them know that. If someone tells you you've made them uncomfortable, take time to reflect instead of responding in anger. But if you feel that a conversation is getting heated, overly emotional, or hurtful, <strong>cease to engage. Instead, report the posts to let us know about it.</strong> Moderators will respond as quickly as possible. You may also email <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> and include screenshots if they may be helpful.",
|
||||
"commGuideList02M": "Do not ask or beg for gems, subscriptions or membership in Group Plans. This is not allowed in the Tavern, public or private chat spaces, or in PMs. If you receive messages asking for paid items, please report them by flagging. Repeated or severe gem or subscription begging, especially after a warning, may result in an account ban.",
|
||||
"commGuideList02J": "<strong>Do not spam</strong>. Spamming may include, but is not limited to: posting the same comment or query in multiple places, <strong>posting links without explanation or context</strong>, posting nonsensical messages, posting multiple promotional messages about a Guild, Party or Challenge, or posting many messages in a row. If people clicking on a link will result in any benefit to you, you need to disclose that in the text of your message or that will also be considered spam. Staff may decide what constitutes spam at their discretion.",
|
||||
"commGuideList02J": "<strong>Do not spam</strong>. Spamming may include, but is not limited to: posting the same comment or query in multiple places, <strong>posting links without explanation or context</strong>, posting nonsensical messages, posting multiple promotional messages about a Guild, Party or Challenge, or posting many messages in a row. If people clicking on a link will result in any benefit to you, you need to disclose that in the text of your message or that will also be considered spam. Mods may decide what constitutes spam at their discretion.",
|
||||
"commGuideList02K": "<strong>Avoid posting large header text in the public chat spaces, particularly the Tavern</strong>. Much like ALL CAPS, it reads as if you were yelling, and interferes with the comfortable atmosphere.",
|
||||
"commGuideList02L": "<strong>We highly discourage the exchange of personal information -- particularly information that can be used to identify you -- in public chat spaces</strong>. Identifying information can include but is not limited to: your address, your email address, and your API token/password. This is for your safety! Staff may remove such posts at their discretion. If you are asked for personal information in a private Guild, Party, or PM, we highly recommend that you politely refuse and alert the staff by either 1) flagging the message, or 2) emailing <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> and including screenshots.",
|
||||
"commGuideList02L": "<strong>We highly discourage the exchange of personal information -- particularly information that can be used to identify you -- in public chat spaces</strong>. Identifying information can include but is not limited to: your address, your email address, and your API token/password. This is for your safety! Staff or moderators may remove such posts at their discretion. If you are asked for personal information in a private Guild, Party, or PM, we highly recommend that you politely refuse and alert the staff and moderators by either 1) flagging the message, or 2) emailing <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> and including screenshots.",
|
||||
"commGuidePara019": "<strong>In private spaces</strong>, users have more freedom to discuss whatever topics they would like, but they still may not violate the Terms and Conditions, including posting slurs or any discriminatory, violent, or threatening content. Note that, because Challenge names appear in the winner's public profile, ALL Challenge names must obey the public space guidelines, even if they appear in a private space.",
|
||||
"commGuidePara020": "<strong>Private Messages (PMs)</strong> have some additional guidelines. If someone has blocked you, do not contact them elsewhere to ask them to unblock you. Additionally, you should not send PMs to someone asking for support (since public answers to support questions are helpful to the community). Finally, do not send anyone PMs begging for paid content of any kind.",
|
||||
"commGuidePara020A": "<strong>If you see a post or private message that you believe is in violation of the public space guidelines outlined above, or if you see a post or private message that concerns you or makes you uncomfortable, you can bring it to the attention of Staff by clicking the flag icon to report it</strong>. A Staff member will respond to the situation as soon as possible. Please note that intentionally reporting innocent posts is an infraction of these Guidelines (see below in \"Infractions\"). You can also contact the Staff by emailing <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> You may want to do this if there are multiple problematic posts by the same person in different Guilds, or if the situation requires some explanation. You may contact us in your native language if that is easier for you: we may have to use Google Translate, but we want you to feel comfortable about contacting us if you have a problem.",
|
||||
"commGuidePara020A": "<strong>If you see a post or private message that you believe is in violation of the public space guidelines outlined above, or if you see a post or private message that concerns you or makes you uncomfortable, you can bring it to the attention of Moderators and Staff by clicking the flag icon to report it</strong>. A Staff member or Moderator will respond to the situation as soon as possible. Please note that intentionally reporting innocent posts is an infraction of these Guidelines (see below in \"Infractions\"). You can also contact the Mods by emailing <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> You may want to do this if there are multiple problematic posts by the same person in different Guilds, or if the situation requires some explanation. You may contact us in your native language if that is easier for you: we may have to use Google Translate, but we want you to feel comfortable about contacting us if you have a problem.",
|
||||
"commGuidePara021": "Furthermore, some public spaces in Habitica have additional guidelines.",
|
||||
|
||||
"commGuideHeadingTavern": "The Tavern",
|
||||
"commGuidePara022": "The Tavern is the main spot for Habiticans to mingle. Daniel the Innkeeper keeps the place spic-and-span, and Lemoness will happily conjure up some lemonade while you sit and chat. Just keep in mind…",
|
||||
"commGuidePara023": "<strong>Conversation tends to revolve around casual chatting and productivity or life improvement tips</strong>. Because the Tavern chat can only hold 200 messages, <strong>it isn't a good place for prolonged conversations on topics, especially sensitive or contentious ones</strong> (ex. politics, religion, depression, whether or not goblin-hunting should be banned, etc.). These conversations should be taken to an applicable Guild. Staff may direct you to a suitable Guild, but it is ultimately your responsibility to find and post in the appropriate place.",
|
||||
"commGuidePara023": "<strong>Conversation tends to revolve around casual chatting and productivity or life improvement tips</strong>. Because the Tavern chat can only hold 200 messages, <strong>it isn't a good place for prolonged conversations on topics, especially sensitive ones</strong> (ex. politics, religion, depression, whether or not goblin-hunting should be banned, etc.). These conversations should be taken to an applicable Guild. A Mod may direct you to a suitable Guild, but it is ultimately your responsibility to find and post in the appropriate place.",
|
||||
"commGuidePara024": "<strong>Don't discuss anything addictive in the Tavern</strong>. Many people use Habitica to try to quit their bad Habits. Hearing people talk about addictive/illegal substances may make this much harder for them! Respect your fellow Tavern-goers and take this into consideration. This includes, but is not exclusive to: smoking, alcohol, pornography, gambling, and drug use/abuse.",
|
||||
|
||||
"commGuideHeadingPublicGuilds": "Public Guilds",
|
||||
"commGuidePara029": "<strong>Public Guilds are much like the Tavern, except that instead of being centered around general conversation, they have a focused theme</strong>. Public Guild chat should focus on this theme. For example, members of the Wordsmiths Guild might be cross if the conversation is suddenly focusing on gardening instead of writing, and a Dragon-Fanciers Guild might not have any interest in deciphering ancient runes. Some Guilds are more lax about this than others, but in general, <strong>try to stay on topic</strong>!",
|
||||
"commGuidePara031": "Some public Guilds will contain sensitive topics such as depression, religion, politics, etc. This is fine as long as the conversations therein do not violate any of the Terms and Conditions or Public Space Rules, and as long as they stay on topic.",
|
||||
"commGuidePara033": "<strong>Public Guilds may NOT contain 18+ content. If they plan to regularly discuss sensitive content, they should say so in the Guild description</strong>. This is to keep Habitica safe and comfortable for everyone.",
|
||||
"commGuidePara035": "<strong>If the Guild in question has different kinds of sensitive issues, it is respectful to your fellow Habiticans to include a warning (ex. \"Warning: references self-harm\")</strong>. These may be characterized as trigger warnings and/or content notes, and Guilds may have their own rules in addition to those given here. Habitica staff may still remove this material at their discretion.",
|
||||
"commGuidePara035": "<strong>If the Guild in question has different kinds of sensitive issues, it is respectful to your fellow Habiticans to place your comment behind a warning (ex. \"Warning: references self-harm\")</strong>. These may be characterized as trigger warnings and/or content notes, and Guilds may have their own rules in addition to those given here. If possible, please use <a href='https://habitica.fandom.com/wiki/Markdown_Cheat_Sheet' target='_blank'>markdown</a> to hide the potentially sensitive content below line breaks so that those who may wish to avoid reading it can scroll past it without seeing the content. Habitica staff and moderators may still remove this material at their discretion.",
|
||||
"commGuidePara036": "Additionally, the sensitive material should be topical -- bringing up self-harm in a Guild focused on fighting depression may make sense, but is probably less appropriate in a music Guild. If you see someone who is repeatedly violating this guideline, especially after several requests, please report the posts.",
|
||||
"commGuidePara037": "<strong>No Guilds, Public or Private, should be created for the purpose of attacking any group or individual</strong>. Creating such a Guild is grounds for an instant ban. Fight bad habits, not your fellow adventurers!",
|
||||
"commGuidePara038": "<strong>All Tavern Challenges and Public Guild Challenges must comply with these rules as well</strong>.",
|
||||
|
||||
"commGuideHeadingInfractionsEtc": "Infractions, Consequences, and Restoration",
|
||||
"commGuideHeadingInfractions": "Infractions",
|
||||
"commGuidePara050": "Overwhelmingly, Habiticans assist each other, are respectful, and work to make the whole community fun and friendly. However, once in a blue moon, something that a Habitican does may violate one of the above guidelines. When this happens, the Staff will take whatever actions they deem necessary to keep Habitica safe and comfortable for everyone.",
|
||||
"commGuidePara051": "<strong>There are a variety of infractions, and they are dealt with depending on their severity</strong>. These are not comprehensive lists, and the Staff can make decisions on topics not covered here at their own discretion. The Staff will take context into account when evaluating infractions.",
|
||||
"commGuidePara050": "Overwhelmingly, Habiticans assist each other, are respectful, and work to make the whole community fun and friendly. However, once in a blue moon, something that a Habitican does may violate one of the above guidelines. When this happens, the Mods will take whatever actions they deem necessary to keep Habitica safe and comfortable for everyone.",
|
||||
"commGuidePara051": "<strong>There are a variety of infractions, and they are dealt with depending on their severity</strong>. These are not comprehensive lists, and the Mods can make decisions on topics not covered here at their own discretion. The Mods will take context into account when evaluating infractions.",
|
||||
|
||||
"commGuideHeadingSevereInfractions": "Severe Infractions",
|
||||
"commGuidePara052": "Severe infractions greatly harm the safety of Habitica's community and users, and therefore have severe consequences as a result.",
|
||||
@@ -61,16 +59,16 @@
|
||||
"commGuideList05A": "Violation of Terms and Conditions",
|
||||
"commGuideList05B": "Hate Speech/Images, Harassment/Stalking, Cyber-Bullying, Flaming, and Trolling",
|
||||
"commGuideList05C": "Violation of Probation",
|
||||
"commGuideList05D": "Impersonation of Staff - this includes claiming user-created spaces not affiliated with Habitica are official and/or moderated by Habitica or its Staff",
|
||||
"commGuideList05D": "Impersonation of Staff or Moderators - this includes claiming user-created spaces not affiliated with Habitica are official and/or moderated by Habitica or its Mods/staff",
|
||||
"commGuideList05E": "Repeated Moderate Infractions",
|
||||
"commGuideList05F": "Creation of a duplicate account to avoid consequences (for example, making a new account to chat after having chat privileges revoked)",
|
||||
"commGuideList05G": "Intentional deception of Staff in order to avoid consequences or to get another user in trouble",
|
||||
"commGuideList05G": "Intentional deception of Staff or Moderators in order to avoid consequences or to get another user in trouble",
|
||||
"commGuideList05H": "Severe or repeated attempts to defraud or pressure other players for real-money items",
|
||||
|
||||
"commGuideHeadingModerateInfractions": "Moderate Infractions",
|
||||
"commGuidePara054": "Moderate infractions do not make our community unsafe, but they do make it unpleasant. These infractions will have moderate consequences. When in conjunction with multiple infractions, the consequences may grow more severe.",
|
||||
"commGuidePara055": "The following are some examples of Moderate Infractions. This is not a comprehensive list.",
|
||||
"commGuideList06A": "<strong>Ignoring, disrespecting or arguing with Staff.</strong> This includes publicly complaining about staff or other users, publicly glorifying or defending banned users, or debating whether or not a staff action was appropriate. If you are concerned about one of the rules or the behavior of the Staff, please contact us via email (<a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>).",
|
||||
"commGuideList06A": "Ignoring, disrespecting or arguing with a Mod. This includes publicly complaining about moderators or other users, publicly glorifying or defending banned users, or debating whether or not a moderator action was appropriate. If you are concerned about one of the rules or the behaviour of the Mods, please contact the staff via email (<a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>).",
|
||||
"commGuideList06B": "Backseat Modding. To quickly clarify a relevant point: A friendly mention of the rules is fine. Backseat modding consists of telling, demanding, and/or strongly implying that someone must take an action that you describe to correct a mistake. You can alert someone to the fact that they have committed a transgression, but please do not demand an action -- for example, saying, \"Just so you know, profanity is discouraged in the Tavern, so you may want to delete that,\" would be better than saying, \"I'm going to have to ask you to delete that post.\"",
|
||||
"commGuideList06C": "Intentionally flagging innocent posts.",
|
||||
"commGuideList06D": "Repeatedly Violating Public Space Guidelines",
|
||||
@@ -80,14 +78,14 @@
|
||||
"commGuidePara056": "Minor Infractions, while discouraged, still have minor consequences. If they continue to occur, they can lead to more severe consequences over time.",
|
||||
"commGuidePara057": "The following are some examples of Minor Infractions. This is not a comprehensive list.",
|
||||
"commGuideList07A": "First-time violation of Public Space Guidelines",
|
||||
"commGuideList07B": "Any statements or actions that trigger a \"Please Don't\" from a Staff member. When you are asked not to do something publicly, this in itself can be a consequence. If Staff have to issue many of these corrections to the same person, it may count as a larger infraction",
|
||||
"commGuideList07B": "Any statements or actions that trigger a \"Please Don't\" from a Mod. When you are asked not to do something publicly, this in itself can be a consequence. If Mods have to issue many of these corrections to the same person, it may count as a larger infraction",
|
||||
|
||||
"commGuidePara057A": "Some posts may be hidden because they contain sensitive information or might give people the wrong idea. Typically this does not count as an infraction, particularly not the first time it happens!",
|
||||
|
||||
"commGuideHeadingConsequences": "Consequences",
|
||||
"commGuidePara058": "In Habitica -- as in real life -- every action has a consequence, whether it is getting fit because you've been running, getting cavities because you've been eating too much sugar, or passing a class because you've been studying.",
|
||||
"commGuidePara059": "<strong>Similarly, all infractions have direct consequences.</strong> Some sample consequences are outlined below.",
|
||||
"commGuidePara060": "<strong>If your infraction has a moderate or severe consequence, if appropriate for the circumstances, there will be a post from a staff member in the forum in which the infraction occurred explaining</strong>:",
|
||||
"commGuidePara060": "<strong>If your infraction has a moderate or severe consequence, there will be a post from a staff member or moderator in the forum in which the infraction occurred explaining</strong>:",
|
||||
"commGuideList08A": "what your infraction was",
|
||||
"commGuideList08B": "what the consequence is",
|
||||
"commGuideList08C": "what to do to correct the situation and restore your status, if possible.",
|
||||
@@ -99,29 +97,35 @@
|
||||
"commGuideList09D": "Removal or demotion of Contributor Tiers",
|
||||
"commGuideHeadingModerateConsequences": "Examples of Moderate Consequences",
|
||||
"commGuideList10A": "Restricted public and/or private chat privileges",
|
||||
"commGuideList10A1": "If your actions result in revocation of your chat privileges, you must email <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>. You may be reinstated at staff discretion if you comply politely with the actions required and agree to abide by the Community Guidelines and ToS",
|
||||
"commGuideList10A1": "If your actions result in revocation of your chat privileges, a Moderator or Staff member will PM you and/or post in the forum in which you were muted to notify you of the reason for your muting and the length of time for which you will be muted and/or the action required for reinstatement. You will be reinstated if you comply politely with the actions required and agree to abide by the Community Guidelines and ToS",
|
||||
"commGuideList10C": "Restricted Guild/Challenge creation privileges",
|
||||
"commGuideList10D": "Temporarily disabling (\"freezing\") progression through Contributor Tiers",
|
||||
"commGuideList10F": "Putting users on \"Probation\"",
|
||||
"commGuideHeadingMinorConsequences": "Examples of Minor Consequences",
|
||||
"commGuideList11A": "Reminders of Public Space Guidelines",
|
||||
"commGuideList11B": "Warnings",
|
||||
"commGuideList11C": "Requests",
|
||||
"commGuideList11D": "Deletions (Staff may delete problematic content)",
|
||||
"commGuideList11E": "Edits (Staff may edit problematic content)",
|
||||
"commGuideList11D": "Deletions (Mods/Staff may delete problematic content)",
|
||||
"commGuideList11E": "Edits (Mods/Staff may edit problematic content)",
|
||||
|
||||
"commGuideHeadingRestoration": "Restoration",
|
||||
"commGuidePara061": "Habitica is a land devoted to self-improvement, and we believe in second chances. <strong>If you commit an infraction and receive a consequence, view it as a chance to evaluate your actions and strive to be a better member of the community</strong>.",
|
||||
"commGuidePara062": "The announcement, message, and/or email that you receive explaining the consequences of your actions is a good source of information. Cooperate with any restrictions which have been imposed, and endeavor to meet the requirements to have any penalties lifted.",
|
||||
"commGuidePara063": "If you do not understand your consequences, or the nature of your infraction, ask the Staff for help so you can avoid committing infractions in the future. If you feel a particular decision was unfair, you can contact the staff to discuss it at <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>.",
|
||||
"commGuidePara063": "If you do not understand your consequences, or the nature of your infraction, ask the Staff/Moderators for help so you can avoid committing infractions in the future. If you feel a particular decision was unfair, you can contact the staff to discuss it at <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>.",
|
||||
|
||||
"commGuideHeadingMeet": "Meet the Staff",
|
||||
"commGuidePara007": "The Habitica Staff keep the app and sites running and can act as chat moderators. They have purple tags marked with crowns. Their title is \"Heroic\".",
|
||||
"commGuideHeadingMeet": "Meet the Staff and Mods!",
|
||||
"commGuidePara006": "Habitica has some tireless knights-errant who join forces with the staff members to keep the community calm, contented, and free of trolls. Each has a specific domain, but will sometimes be called to serve in other social spheres.",
|
||||
"commGuidePara007": "Staff have purple tags marked with crowns. Their title is \"Heroic\".",
|
||||
"commGuidePara008": "Mods have dark blue tags marked with stars. Their title is \"Guardian\".",
|
||||
"commGuidePara009": "The current Staff Members are (from left to right):",
|
||||
"commGuideAKA": "<%= habitName %> aka <%= realName %>",
|
||||
"commGuideOnGitHub": "<%= gitHubName %> on GitHub",
|
||||
"commGuidePara010": "There are also several Moderators who assist the staff members. They were selected carefully, so please give them your respect and listen to their suggestions.",
|
||||
"commGuidePara011": "The current Moderators are (from left to right):",
|
||||
"commGuidePara011b": "on GitHub/Fandom",
|
||||
"commGuidePara011c": "on the Wiki",
|
||||
"commGuidePara011d": "on GitHub",
|
||||
"commGuidePara012": "If you have an issue or concern about a particular Mod, please send an email to our Staff (<a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>).",
|
||||
"commGuidePara013": "In a community as big as Habitica, users come and go, and sometimes a staff member or moderator needs to lay down their noble mantle and relax. The following are Staff and Moderators Emeritus. They no longer act with the power of a Staff member or Moderator, but we would still like to honor their work!",
|
||||
"commGuidePara014": "Staff and Moderators Emeritus:",
|
||||
|
||||
|
||||
@@ -310,7 +310,6 @@
|
||||
"hatchingPotionOnyx": "Onyx",
|
||||
"hatchingPotionVirtualPet": "Virtual Pet",
|
||||
"hatchingPotionPorcelain": "Porcelain",
|
||||
"hatchingPotionPinkMarble": "Pink Marble",
|
||||
|
||||
"hatchingPotionNotes": "Pour this on an egg, and it will hatch as a <%= potText(locale) %> pet.",
|
||||
"premiumPotionAddlNotes": "Not usable on quest pet eggs. Available for purchase until <%= date(locale) %>.",
|
||||
|
||||
@@ -67,8 +67,6 @@
|
||||
"webFaqAnswer12": "World Bosses are special monsters that appear in the Tavern. All active users are automatically battling the Boss, and their tasks and Skills will damage the Boss as usual. You can also be in a normal Quest at the same time. Your tasks and Skills will count towards both the World Boss and the Boss/Collection Quest in your party. A World Boss will never hurt you or your account in any way. Instead, it has a Rage Bar that fills when users skip Dailies. If its Rage bar fills, it will attack one of the Non-Player Characters around the site and their image will change. You can read more about [past World Bosses](https://habitica.fandom.com/wiki/World_Bosses) on the wiki.",
|
||||
|
||||
"faqQuestion13": "What is a Group Plan?",
|
||||
"iosFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board that’s similar to your personal task board! It’s a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans’ features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether it’s a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. We’ll provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards aren’t shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily won’t damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If you’d like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared 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 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 color to help visualize progress. We don’t want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps don’t fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## What’s the difference between a Group’s shared tasks and Challenges?\n\nGroup 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.",
|
||||
"androidFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board that’s similar to your personal task board! It’s a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans’ features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether it’s a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. We’ll provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards aren’t shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily won’t damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If you’d like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared 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 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 color to help visualize progress. We don’t want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps don’t fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## What’s the difference between a Group’s shared tasks and Challenges?\n\nGroup 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.",
|
||||
"webFaqAnswer13": "## How do Group Plans work?\n\nA [Group Plan](/group-plans) gives your Party or Guild access to a shared task board that’s similar to your personal task board! It’s a shared Habitica experience where tasks can be created and checked off by anyone in the group.\n\nThere are also features available like member roles, status view, and task assigning that give you a more controlled experience. [Visit our wiki](https://habitica.fandom.com/wiki/Group_Plans) to learn more about our Group Plans’ features!\n\n## Who benefits from a Group Plan?\n\nGroup Plans work best when you have a small team of people who want to collaborate together. We recommend 2-5 members.\n\nGroup Plans are great for families, whether it’s a parent and child or you and a partner. Shared goals, chores, or responsibilities are easy to keep track of on one board.\n\nGroup Plans can also be useful for teams of colleagues that have shared goals, or managers that want to introduce their employees to gamification.\n\n## Quick tips for using Groups\n\nHere are some quick tips to get you started with your new Group. We’ll provide more details in the following sections:\n\n* Make a member a manager to give them the ability to create and edit tasks\n* Leave tasks unassigned if anyone can complete it and it only needs done once\n* Assign a task to one person to make sure no one else can complete their task\n* Assign a task to multiple people if they all need to complete it\n* Toggle the ability to display shared tasks on your personal board to not miss anything\n* You get rewarded for the tasks you complete, even multi-assigned\n* Task completion rewards aren’t shared or split between Team members\n* Use task color on the team board to judge the average completion rate of tasks\n* Regularly review the tasks on your Team Board to make sure they are still relevant\n* Missing a Daily won’t damage you or your team, but the task will degrade in color\n\n## How can others in the group create tasks?\n\nOnly the group leader and managers can create tasks. If you’d like a group member to be able to create tasks, then you should promote them to be a manager by going to the Group Information tab, viewing the member list, and clicking the dot icon by their name.\n\n## How does assigning a task work?\n\nGroup Plans give you the unique ability to assign tasks to other group members. Assigning a task is great for delegating. If you assign a task to someone, then other members are prevented from completing it.\n\nYou can also assign a task to multiple people if it needs to be completed by more than one member. For example, if everyone has to brush their teeth, create a task and assign it to each group member. They will all be able to check it off and get their individual rewards for doing so. The main task will show as complete once everyone checks it off.\n\n## How do unassigned tasks work?\n\nUnassigned tasks can be completed by anyone in the group, so leave a task unassigned to allow any member to complete it. For example, taking out the trash. Whoever takes out the trash can check off the unassigned task and it will show as completed for everyone.\n\n## How does the synchronized day reset work?\n\nShared 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 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 color to help visualize progress. We don’t want the shared experience to be a negative one!\n\n## How do I use my Group on the mobile apps?\n\nWhile the mobile apps don’t fully support all Group Plans functionality yet, you can still complete shared tasks from the iOS and Android app by copying the tasks onto your personal task board. You can switch this preference on from Settings in the mobile apps or from the group task board on the browser version. Now open and assigned shared tasks will display on your personal task board across all platforms.\n\n## What’s the difference between a Group’s shared tasks and Challenges?\n\nGroup 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.",
|
||||
|
||||
"iosFaqStillNeedHelp": "If you have a question that isn't on this list or on the [Wiki FAQ](https://habitica.fandom.com/wiki/FAQ), come ask in the Tavern chat under Menu > Tavern! We're happy to help.",
|
||||
|
||||
@@ -438,9 +438,6 @@
|
||||
"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.",
|
||||
|
||||
"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",
|
||||
"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.",
|
||||
"weaponSpecialSpring2022WarriorText": "Inside-Out Umbrella",
|
||||
@@ -459,15 +456,6 @@
|
||||
"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 Fall Gear.",
|
||||
|
||||
"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. Incrases 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.",
|
||||
|
||||
"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",
|
||||
@@ -801,8 +789,7 @@
|
||||
"armorSpecialBirthday2021Notes": "Happy Birthday, Habitica! Wear these Extravagant Party Robes to celebrate this wonderful day. Confers no benefit.",
|
||||
"armorSpecialBirthday2022Text": "Preposterous Party Robes",
|
||||
"armorSpecialBirthday2022Notes": "Happy Birthday, Habitica! Wear these Proposterous Party Robes to celebrate this wonderful day. Confers no benefit.",
|
||||
"armorSpecialBirthday2023Text": "Fabulous Party Robes",
|
||||
"armorSpecialBirthday2023Notes": "Happy Birthday, Habitica! Wear these Fabulous Party Robes to celebrate this wonderful day. Confers no benefit.",
|
||||
|
||||
|
||||
"armorSpecialGaymerxText": "Rainbow Warrior Armor",
|
||||
"armorSpecialGaymerxNotes": "In celebration of the GaymerX Conference, this special armor is decorated with a radiant, colorful rainbow pattern! GaymerX is a game convention celebrating LGTBQ and gaming and is open to everyone.",
|
||||
@@ -1122,15 +1109,6 @@
|
||||
"armorSpecialFall2022HealerText": "Profusion of Peeker Pods",
|
||||
"armorSpecialFall2022HealerNotes": "How many peeps could a Peeker peep, if a Peeker could peep peeps? Increases Constitution by <%= con %>. Limited Edition 2022 Fall Gear.",
|
||||
|
||||
"armorSpecialWinter2023RogueText": "Ribbon Wrap",
|
||||
"armorSpecialWinter2023RogueNotes": "Obtain items. Bundle them up in pretty paper. And give them to your local Rogue! The season demands it. Increases Perception by <%= per %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"armorSpecialWinter2023WarriorText": "Walrus Suit",
|
||||
"armorSpecialWinter2023WarriorNotes": "This tough walrus suit is perfect for a walk along a beach in the middle of the night. Increases Constitution by <%= con %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"armorSpecialWinter2023MageText": "Fairy Light Gown",
|
||||
"armorSpecialWinter2023MageNotes": "Just because you have lights on, that doesn't make you a tree! ...maybe some other year. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"armorSpecialWinter2023HealerText": "Cardinal Suit",
|
||||
"armorSpecialWinter2023HealerNotes": "This bright cardinal suit is perfect for flying high above your problems. Increases Constitution by <%= con %>. Limited Edition 2022-2023 Winter 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",
|
||||
@@ -1426,10 +1404,6 @@
|
||||
"armorArmoireSheetGhostCostumeNotes": "Boo! This is the scariest costume in all of Habitica, so wear it wisely... and watch your step so you don’t trip. Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.",
|
||||
"armorArmoireJewelersApronText": "Jeweler's Apron",
|
||||
"armorArmoireJewelersApronNotes": "This heavy-duty apron is just the thing to wear when you feel creative. Best of all, there are dozens of small pockets to hold everything you need. Increases Intelligence by <%= int %>. Enchanted Armoire: Jeweler Set (Item 1 of 4).",
|
||||
"armorArmoireShawlCollarCoatText": "Shawl-Collar Coat",
|
||||
"armorArmoireShawlCollarCoatNotes": "A wise wizard once said there’s nothing better than being both cozy and productive! Wear this warm and stylish coat as you conquer the year’s challenges. Increases Constitution by <%= con %>. Enchanted Armoire: Independent Item.",
|
||||
"armorArmoireTeaGownText": "Tea Party Gown",
|
||||
"armorArmoireTeaGownNotes": "You’re resilient, creative, brilliant, and so fashionable! Increases Strength and Intelligence by <%= attrs %> each. Enchanted Armoire: Tea Party Set (Item 1 of 3).",
|
||||
|
||||
"headgear": "helm",
|
||||
"headgearCapitalized": "Headgear",
|
||||
@@ -1861,15 +1835,6 @@
|
||||
"headSpecialFall2022MageNotes": "Entrance and lure others close with this magical maiden mask. Increases Perception by <%= per %>. Limited Edition 2022 Fall Gear.",
|
||||
"headSpecialFall2022HealerText": "Peeker Mask",
|
||||
"headSpecialFall2022HealerNotes": "Beauty is in there. Somewhere! Increases Intelligence by <%= int %>. Limited Edition 2022 Fall Gear.",
|
||||
|
||||
"headSpecialWinter2023RogueText": "Gift Bow",
|
||||
"headSpecialWinter2023RogueNotes": "People's temptations to “unwrap” your hair will give you opportunities to practice your ducks and dodges. Increases Perception by <%= per %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"headSpecialWinter2023WarriorText": "Walrus Helm",
|
||||
"headSpecialWinter2023WarriorNotes": "This walrus helm is perfect for chatting with a friend or partaking in a clever meal. Increases Strength by <%= str %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"headSpecialWinter2023MageText": "Fairy-Lit Tiara",
|
||||
"headSpecialWinter2023MageNotes": "Were you hatched with a Starry Night potion? Because I've got stars in my eyes for you. Increases Perception by <%= per %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"headSpecialWinter2023HealerText": "Cardinal Helm",
|
||||
"headSpecialWinter2023HealerNotes": "This cardinal helm is perfect for whistling and singing to herald the winter season. Increases Intelligence by <%= int %>. Limited Edition 2022-2023 Winter 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.",
|
||||
@@ -2014,8 +1979,6 @@
|
||||
"headMystery202210Notes": "This scaly hood will surely terrify your To-Do list into submission! Confers no benefit. October 2022 Subscriber Item.",
|
||||
"headMystery202211Text": "Electromancer Hat",
|
||||
"headMystery202211Notes": "Be careful with this powerful hat, its effect on admirers can be quite shocking! Confers no benefit. November 2022 Subscriber Item.",
|
||||
"headMystery202301Text": "Valiant Vulpine Ears",
|
||||
"headMystery202301Notes": "Your hearing will be so sharp you'll hear the dawn breaking and the dew sparkling. Confers no benefit. January 2023 Subscriber Item.",
|
||||
"headMystery301404Text": "Fancy Top Hat",
|
||||
"headMystery301404Notes": "A fancy top hat for the finest of gentlefolk! January 3015 Subscriber Item. Confers no benefit.",
|
||||
"headMystery301405Text": "Basic Top Hat",
|
||||
@@ -2191,8 +2154,6 @@
|
||||
"headArmoireStrawRainHatNotes": "You’ll be able to spot every obstacle in your path when you wear this water-resistant, conical hat. Increases Perception by <%= per %>. Enchanted Armoire: Straw Raincoat Set (Item 2 of 2).",
|
||||
"headArmoireFancyPirateHatText": "Fancy Pirate Hat",
|
||||
"headArmoireFancyPirateHatNotes": "Be protected from the sun and any seagulls flying overhead as you drink tea on the deck of your ship. Increases Perception by <%= per %>. Enchanted Armoire: Fancy Pirate Set (Item 2 of 3).",
|
||||
"headArmoireTeaHatText": "Tea Party Hat",
|
||||
"headArmoireTeaHatNotes": "This elegant hat is both fancy and functional. Increases Perception by <%= per %>. Enchanted Armoire: Tea Party Set (Item 2 of 3).",
|
||||
|
||||
"offhand": "off-hand item",
|
||||
"offHandCapitalized": "Off-Hand Item",
|
||||
@@ -2435,11 +2396,6 @@
|
||||
"shieldSpecialFall2022HealerText": "Left Peeker Eye",
|
||||
"shieldSpecialFall2022HealerNotes": "Eye Two, look upon this costume and tremble. Increases Constitution by <%= con %>. Limited Edition 2022 Fall Gear.",
|
||||
|
||||
"shieldSpecialWinter2023WarriorText": "Oyster Shield",
|
||||
"shieldSpecialWinter2023WarriorNotes": "The time has come, the Walrus said, to talk of many things: of oyster shells—and winter bells—of songs that someone sings—and where this shield’s pearl has gone—or what the new year brings! Increases Constitution by <%= con %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
"shieldSpecialWinter2023HealerText": "Cool Jams",
|
||||
"shieldSpecialWinter2023HealerNotes": "Your song of frost and snow will soothe the spirits of all who hear. Increases Constitution by <%= con %>. Limited Edition 2022-2023 Winter Gear.",
|
||||
|
||||
"shieldMystery201601Text": "Resolution Slayer",
|
||||
"shieldMystery201601Notes": "This blade can be used to parry away all distractions. Confers no benefit. January 2016 Subscriber Item.",
|
||||
"shieldMystery201701Text": "Time-Freezer Shield",
|
||||
@@ -2599,8 +2555,7 @@
|
||||
"shieldArmoireBubblingCauldronNotes": "The perfect cauldron for brewing up a productivity potion or cooking a savory soup. In fact, there is little difference between the two! Increases Constitution by <%= con %>. Enchanted Armoire: Cooking Implements Set (Item 2 of 2).",
|
||||
"shieldArmoireJewelersPliersText": "Jeweler's Pliers",
|
||||
"shieldArmoireJewelersPliersNotes": "They cut, twist, pinch, and more. This tool can help you create whatever you can imagine. Increases Strength by <%= str %>. Enchanted Armoire: Jeweler Set (Item 3 of 4).",
|
||||
"shieldArmoireTeaKettleText": "Tea Kettle",
|
||||
"shieldArmoireTeaKettleNotes": "All your favorite, flavorful teas can be brewed in this kettle. Are you in the mood for black tea, green tea, oolong, or perhaps an herbal infusion? Increases Constitution by <%= con %>. Enchanted Armoire: Tea Party Set (Item 3 of 3).",
|
||||
|
||||
|
||||
"back": "Back Accessory",
|
||||
"backBase0Text": "No Back Accessory",
|
||||
@@ -2667,10 +2622,6 @@
|
||||
"backMystery202205Notes": "The mighty flap of these vast wings can be heard echoing among the dunes. Confers no benefit. May 2022 Subscriber Item.",
|
||||
"backMystery202206Text": "Sea Sprite Wings",
|
||||
"backMystery202206Notes": "Whimsical wings made of water and waves! Confers no benefit. June 2022 Subscriber Item.",
|
||||
"backMystery202301Text": "Five Tails of Valor",
|
||||
"backMystery202301Notes": "These fluffy tails contain ethereal power and also a high level of charm! Confers no benefit. January 2023 Subscriber Item.",
|
||||
"backMystery202302Text": "Trickster Tabby Tail",
|
||||
"backMystery202302Notes": "Anytime you wear this tail it's sure to be a frabjous day! Callooh! Callay! Confers no benefit. February 2023 Subscriber Item.",
|
||||
|
||||
"backSpecialWonderconRedText": "Mighty Cape",
|
||||
"backSpecialWonderconRedNotes": "Swishes with strength and beauty. Confers no benefit. Special Edition Convention Item.",
|
||||
@@ -2688,9 +2639,6 @@
|
||||
"backSpecialTurkeyTailGildedNotes": "Plumage fit for a parade! Confers no benefit.",
|
||||
"backSpecialNamingDay2020Text": "Royal Purple Gryphon Tail",
|
||||
"backSpecialNamingDay2020Notes": "Happy Naming Day! Swish this fiery, pixely tail about as you celebrate Habitica. Confers no benefit.",
|
||||
"backSpecialAnniversaryText": "Habitica Hero Cape",
|
||||
"backSpecialAnniversaryNotes": "Let this proud cape fly in the wind and tell everyone that you're a Habitica Hero. Confers no benefit. Special Edition 10th Birthday Bash Item.",
|
||||
|
||||
"backBearTailText": "Bear Tail",
|
||||
"backBearTailNotes": "This tail makes you look like a brave bear! Confers no benefit.",
|
||||
"backCactusTailText": "Cactus Tail",
|
||||
@@ -2722,8 +2670,6 @@
|
||||
"bodySpecialTakeThisNotes": "These pauldrons were earned by participating in a sponsored Challenge made by Take This. Congratulations! Increases all Stats by <%= attrs %>.",
|
||||
"bodySpecialAetherAmuletText": "Aether Amulet",
|
||||
"bodySpecialAetherAmuletNotes": "This amulet has a mysterious history. Increases Constitution and Strength by <%= attrs %> each.",
|
||||
"bodySpecialAnniversaryText": "Habitica Hero Collar",
|
||||
"bodySpecialAnniversaryNotes": "Perfectly complement your royal purple ensemble! Confers no benefit. Special Edition 10th Birthday Bash Item.",
|
||||
|
||||
"bodySpecialSummerMageText": "Shining Capelet",
|
||||
"bodySpecialSummerMageNotes": "Neither salt water nor fresh water can tarnish this metallic capelet. Confers no benefit. Limited Edition 2014 Summer Gear.",
|
||||
@@ -2880,8 +2826,6 @@
|
||||
"headAccessoryMystery202205Notes": "These dazzling horns are as bright as a desert sunset. Confers no benefit. May 2022 Subscriber Item.",
|
||||
"headAccessoryMystery202212Text": "Glacial Tiara",
|
||||
"headAccessoryMystery202212Notes": "Magnify your warmth and friendship to new heights with this ornate golden tiara. Confers no benefit. December 2022 Subscriber Item.",
|
||||
"headAccessoryMystery202302Text": "Trickster Tabby Ears",
|
||||
"headAccessoryMystery202302Notes": "The purr-fect accessory to set off your enchanting grin. Confers no benefit. February 2023 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.",
|
||||
|
||||
@@ -2928,8 +2872,6 @@
|
||||
"eyewearSpecialAetherMaskNotes": "This mask has a mysterious history. Increases Intelligence by <%= int %>.",
|
||||
"eyewearSpecialKS2019Text": "Mythic Gryphon Visor",
|
||||
"eyewearSpecialKS2019Notes": "Bold as a gryphon's... hmm, gryphons don't have visors. It reminds you to... oh, who are we kidding, it just looks cool! Confers no benefit.",
|
||||
"eyewearSpecialAnniversaryText": "Habitica Hero Mask",
|
||||
"eyewearSpecialAnniversaryNotes": "Look through the eyes of a Habitica Hero - you! Confers no benefit. Special Edition 10th Birthday Bash Item.",
|
||||
|
||||
"eyewearSpecialSummerRogueText": "Roguish Eyepatch",
|
||||
"eyewearSpecialSummerRogueNotes": "It doesn't take a scallywag to see how stylish this is! Confers no benefit. Limited Edition 2014 Summer Gear.",
|
||||
|
||||
@@ -191,10 +191,6 @@
|
||||
"fall2022OrcWarriorSet": "Orc (Warrior)",
|
||||
"fall2022HarpyMageSet": "Harpy (Mage)",
|
||||
"fall2022WatcherHealerSet": "Peeker (Healer)",
|
||||
"winter2023WalrusWarriorSet": "Walrus (Warrior)",
|
||||
"winter2023FairyLightsMageSet": "Fairy Lights (Mage)",
|
||||
"winter2023CardinalHealerSet": "Cardinal (Healer)",
|
||||
"winter2023RibbonRogueSet": "Ribbon (Rogue)",
|
||||
"eventAvailability": "Available for purchase until <%= date(locale) %>.",
|
||||
"eventAvailabilityReturning": "Available for purchase until <%= availableDate(locale) %>. This potion was last available in <%= previousDate(locale) %>.",
|
||||
"dateEndJanuary": "January 31",
|
||||
@@ -209,7 +205,6 @@
|
||||
"dateEndOctober": "October 31",
|
||||
"dateEndNovember": "November 30",
|
||||
"dateEndDecember": "December 31",
|
||||
"dateStartFebruary": "February 8",
|
||||
"januaryYYYY": "January <%= year %>",
|
||||
"februaryYYYY": "February <%= year %>",
|
||||
"marchYYYY": "March <%= year %>",
|
||||
@@ -234,36 +229,8 @@
|
||||
"howItWorks": "How it Works",
|
||||
"g1g1HowItWorks": "Type in the username of the account you’d like to gift to. From there, pick the sub length you’d like to gift and check out. Your account will automatically be rewarded with the same level of subscription you just gifted.",
|
||||
"limitations": "Limitations",
|
||||
"g1g1Limitations": "This is a limited time event that starts on December 15th at 8:00 AM ET (13:00 UTC) and will end January 8th at 11:59 PM ET (January 9th 04:59 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
|
||||
"g1g1Limitations": "This is a limited time event that starts on December 16th at 8:00 AM ET (13:00 UTC) and will end January 6th at 8:00 PM ET (1:00 UTC). This promotion only applies when you gift to another Habitican. If you or your gift recipient already have a subscription, the gifted subscription will add months of credit that will only be used after the current subscription is canceled or expires.",
|
||||
"noLongerAvailable": "This item is no longer available.",
|
||||
"gemSaleHow": "Between <%= eventStartMonth %> <%= eventStartOrdinal %> and <%= eventEndOrdinal %>, simply purchase any Gem bundle like usual and your account will be credited with the promotional amount of Gems. More Gems to spend, share, or save for any future releases!",
|
||||
"gemSaleLimitations": "This promotion only applies during the limited time event. This event starts on <%= eventStartMonth %> <%= eventStartOrdinal %> at 8:00 AM EDT (12:00 UTC) and will end <%= eventStartMonth %> <%= eventEndOrdinal %> at 8:00 PM EDT (00:00 UTC). The promo offer is only available when buying Gems for yourself.",
|
||||
"anniversaryLimitations": "This is a limited time event that starts on January 30th at 8:00 AM ET (13:00 UTC) and will end February 8th at 11:59 PM ET (04:59 UTC). The Limited Edition Jubilant Gryphatrice and ten Magic Hatching Potions will be available to buy during this time. The other Gifts listed in the Four for Free section will be automatically delivered to all accounts that were active in the 30 days prior to day the gift is sent. Accounts created after the gifts are sent will not be able to claim them.",
|
||||
"anniversaryLimitedDates": "January 30th to February 8th",
|
||||
"limitedEvent": "Limited Event",
|
||||
"celebrateAnniversary": "Celebrate Habitica's 10th Birthday with gifts and exclusive items below!",
|
||||
"celebrateBirthday": "Celebrate Habitica's 10th Birthday with gifts and exclusive items!",
|
||||
"jubilantGryphatricePromo": "Animated Jubilant Gryphatrice Pet",
|
||||
"limitedEdition": "Limited Edition",
|
||||
"anniversaryGryphatriceText": "The rare Jubilant Gryphatrice joins the birthday celebrations! Don't miss your chance to own this exclusive animated Pet.",
|
||||
"anniversaryGryphatricePrice": "Own it today for <strong>$9.99</strong> or <strong>60 gems</strong>",
|
||||
"buyNowMoneyButton": "Buy Now for $9.99",
|
||||
"buyNowGemsButton": "Buy Now for 60 Gems",
|
||||
"wantToPayWithGemsText": "Want to pay with Gems?",
|
||||
"wantToPayWithMoneyText": "Want to pay with Stripe, Paypal, or Amazon?",
|
||||
"ownJubilantGryphatrice": "<strong>You own the Jubilant Gryphatrice!</strong> Visit the Stable to equip!",
|
||||
"jubilantSuccess": "You've successfully purchased the <strong>Jubilant Gryphatrice!</strong>",
|
||||
"stableVisit": "Visit the Stable to equip!",
|
||||
"takeMeToStable": "Take me to the Stable",
|
||||
"plentyOfPotions": "Plenty of Potions",
|
||||
"plentyOfPotionsText": "We're bringing back 10 of the community's favorite Magic Hatching potions. Head over to The Market to fill out your collection!",
|
||||
"visitTheMarketButton": "Visit the Market",
|
||||
"fourForFree": "Four for Free",
|
||||
"fourForFreeText": "To keep the party going, we'll be giving away Party Robes, 20 Gems, and a limited edition birthday Background and item set that includes a Cape, Pauldrons, and an Eyemask.",
|
||||
"dayOne": "Day 1",
|
||||
"dayFive": "Day 5",
|
||||
"dayTen": "Day 10",
|
||||
"partyRobes": "Party Robes",
|
||||
"twentyGems": "20 Gems",
|
||||
"birthdaySet": "Birthday Set"
|
||||
}
|
||||
"gemSaleLimitations": "This promotion only applies during the limited time event. This event starts on <%= eventStartMonth %> <%= eventStartOrdinal %> at 8:00 AM EDT (12:00 UTC) and will end <%= eventStartMonth %> <%= eventEndOrdinal %> at 8:00 PM EDT (00:00 UTC). The promo offer is only available when buying Gems for yourself."
|
||||
}
|
||||
|
||||
@@ -32,7 +32,6 @@
|
||||
"royalPurpleJackalope": "Royal Purple Jackalope",
|
||||
"invisibleAether": "Invisible Aether",
|
||||
"gryphatrice": "Gryphatrice",
|
||||
"jubilantGryphatrice": "Jubilant Gryphatrice",
|
||||
"potion": "<%= potionType %> Potion",
|
||||
"egg": "<%= eggType %> Egg",
|
||||
"eggs": "Eggs",
|
||||
|
||||
@@ -365,7 +365,7 @@
|
||||
"questSnailUnlockText": "Unlocks Snail Eggs for purchase in the Market",
|
||||
|
||||
"questBewilderText": "The Be-Wilder",
|
||||
"questBewilderNotes": "The party begins like any other.<br><br>The appetizers are excellent, the music is swinging, and even the dancing elephants have become routine. Habiticans laugh and frolic amid the overflowing floral centerpieces, happy to have a distraction from their least-favorite tasks, and the April Fool whirls among them, eagerly providing an amusing trick here and a witty twist there.<br><br>As the Mistiflying clock tower strikes midnight, the April Fool leaps onto the stage to give a speech.<br><br>“Friends! Enemies! Tolerant acquaintances! Lend me your ears.” The crowd chuckles as animal ears sprout from their heads, and they pose with their new accessories.<br><br>“As you know,” the Fool continues, “my confusing illusions usually only last a single day. But I’m pleased to announce that I’ve discovered a shortcut that will guarantee us non-stop fun, without having to deal with the pesky weight of our responsibilities. Charming Habiticans, meet my magical new friend... the Be-Wilder!”<br><br>Lemoness pales suddenly, dropping her hors d'oeuvres. “Wait! Don’t trust--”<br><br>But suddenly mists are pouring into the room, glittering and thick, and they swirl around the April Fool, coalescing into cloudy feathers and a stretching neck. The crowd is speechless as a monstrous bird unfolds before them, its wings shimmering with illusions. It lets out a horrible screeching laugh.<br><br>“Oh, it has been ages since a Habitican has been foolish enough to summon me! How wonderful it feels, to have a tangible form at last.”<br><br>Buzzing in terror, the magic bees of Mistiflying flee the floating city, which sags from the sky. One by one, the brilliant spring flowers wither up and wisp away.<br><br>“My dearest friends, why so alarmed?” crows the Be-Wilder, beating its wings. “There’s no need to toil for your rewards any more. I’ll just give you all the things that you desire!”<br><br>A rain of coins pours from the sky, hammering into the ground with brutal force, and the crowd screams and flees for cover. “Is this a joke?” Baconsaur shouts, as the gold smashes through windows and shatters roof shingles.<br><br>PainterProphet ducks as lightning bolts crackle overhead, and fog blots out the sun. “No! This time, I don’t think it is!”<br><br>Quickly, Habiticans, don’t let this World Boss distract us from our goals! Stay focused on the tasks that you need to complete so we can rescue Mistiflying -- and hopefully, ourselves.",
|
||||
"questBewilderNotes": "The party begins like any other.<br><br>The appetizers are excellent, the music is swinging, and even the dancing elephants have become routine. Habiticans laugh and frolic amid the overflowing floral centerpieces, happy to have a distraction from their least-favorite tasks, and the April Fool whirls among them, eagerly providing an amusing trick here and a witty twist there.<br><br>As the Mistiflying clock tower strikes midnight, the April Fool leaps onto the stage to give a speech.<br><br>“Friends! Enemies! Tolerant acquaintances! Lend me your ears.” The crowd chuckles as animal ears sprout from their heads, and they pose with their new accessories.<br><br>“As you know,” the Fool continues, “my confusing illusions usually only last a single day. But I’m pleased to announce that I’ve discovered a shortcut that will guarantee us non-stop fun, without having to deal with the pesky weight of our responsibilities. Charming Habiticans, meet my magical new friend... the Be-Wilder!”<br><br>Lemoness pales suddenly, dropping her hors d'oeuvres. “Wait! Don’t trust--”<br><br>But suddenly mists are pouring into the room, glittering and thick, and they swirl around the April Fool, coalescing into cloudy feathers and a stretching neck. The crowd is speechless as an monstrous bird unfolds before them, its wings shimmering with illusions. It lets out a horrible screeching laugh.<br><br>“Oh, it has been ages since a Habitican has been foolish enough to summon me! How wonderful it feels, to have a tangible form at last.”<br><br>Buzzing in terror, the magic bees of Mistiflying flee the floating city, which sags from the sky. One by one, the brilliant spring flowers wither up and wisp away.<br><br>“My dearest friends, why so alarmed?” crows the Be-Wilder, beating its wings. “There’s no need to toil for your rewards any more. I’ll just give you all the things that you desire!”<br><br>A rain of coins pours from the sky, hammering into the ground with brutal force, and the crowd screams and flees for cover. “Is this a joke?” Baconsaur shouts, as the gold smashes through windows and shatters roof shingles.<br><br>PainterProphet ducks as lightning bolts crackle overhead, and fog blots out the sun. “No! This time, I don’t think it is!”<br><br>Quickly, Habiticans, don’t let this World Boss distract us from our goals! Stay focused on the tasks that you need to complete so we can rescue Mistiflying -- and hopefully, ourselves.",
|
||||
"questBewilderCompletion": "<strong>The Be-Wilder is DEFEATED!</strong><br><br>We've done it! The Be-Wilder lets out a ululating cry as it twists in the air, shedding feathers like falling rain. Slowly, gradually, it coils into a cloud of sparkling mist. As the newly-revealed sun pierces the fog, it burns away, revealing the coughing, mercifully human forms of Bailey, Matt, Alex.... and the April Fool himself.<br><br><strong>Mistiflying is saved!</strong><br><br>The April Fool has enough shame to look a bit sheepish. “Oh, hm,” he says. “Perhaps I got a little…. carried away.”<br><br>The crowd mutters. Sodden flowers wash up on sidewalks. Somewhere in the distance, a roof collapses with a spectacular splash.<br><br>“Er, yes,” the April Fool says. “That is. What I meant to say was, I’m dreadfully sorry.” He heaves a sigh. “I suppose it can’t all be fun and games, after all. It might not hurt to focus occasionally. Maybe I’ll get a head start on next year’s pranking.”<br><br>Redphoenix coughs meaningfully.<br><br>“I mean, get a head start on this year’s spring cleaning!” the April Fool says. “Nothing to fear, I’ll have Habit City in spit-shape soon. Luckily nobody is better than I at dual-wielding mops.”<br><br>Encouraged, the marching band starts up.<br><br>It isn’t long before all is back to normal in Habit City. Plus, now that the Be-Wilder has evaporated, the magical bees of Mistiflying bustle back to work, and soon the flowers are blooming and the city is floating once more.<br><br>As Habiticans cuddle the magical fuzzy bees, the April Fool’s eyes light up. “Oho, I’ve had a thought! Why don’t you all keep some of these fuzzy Bee Pets and Mounts? It’s a gift that perfectly symbolizes the balance between hard work and sweet rewards, if I’m going to get all boring and allegorical on you.” He winks. “Besides, they don’t have stingers! Fool’s honor.”",
|
||||
"questBewilderCompletionChat": "`The Be-Wilder is DEFEATED!`\n\nWe've done it! The Be-Wilder lets out a ululating cry as it twists in the air, shedding feathers like falling rain. Slowly, gradually, it coils into a cloud of sparkling mist. As the newly-revealed sun pierces the fog, it burns away, revealing the coughing, mercifully human forms of Bailey, Matt, Alex.... and the April Fool himself.\n\n`Mistiflying is saved!`\n\nThe April Fool has enough shame to look a bit sheepish. “Oh, hm,” he says. “Perhaps I got a little…. carried away.”\n\nThe crowd mutters. Sodden flowers wash up on sidewalks. Somewhere in the distance, a roof collapses with a spectacular splash.\n\n“Er, yes,” the April Fool says. “That is. What I meant to say was, I’m dreadfully sorry.” He heaves a sigh. “I suppose it can’t all be fun and games, after all. It might not hurt to focus occasionally. Maybe I’ll get a head start on next year’s pranking.”\n\nRedphoenix coughs meaningfully.\n\n“I mean, get a head start on this year’s spring cleaning!” the April Fool says. “Nothing to fear, I’ll have Habit City in spit-shape soon. Luckily nobody is better than I at dual-wielding mops.”\n\nEncouraged, the marching band starts up.\n\nIt isn’t long before all is back to normal in Habit City. Plus, now that the Be-Wilder has evaporated, the magical bees of Mistiflying bustle back to work, and soon the flowers are blooming and the city is floating once more.\n\nAs Habiticans cuddle the magical fuzzy bees, the April Fool’s eyes light up. “Oho, I’ve had a thought! Why don’t you all keep some of these fuzzy Bee Pets and Mounts? It’s a gift that perfectly symbolizes the balance between hard work and sweet rewards, if I’m going to get all boring and allegorical on you.” He winks. “Besides, they don’t have stingers! Fool’s honor.”",
|
||||
"questBewilderBossRageTitle": "Beguilement Strike",
|
||||
@@ -877,15 +877,5 @@
|
||||
"questVirtualPetRageDescription": "This bar fills when you don't complete your Dailies. When it is full, the Wotchimon will take away some of your party's pending damage!",
|
||||
"questVirtualPetRageEffect": "`Wotchimon uses Bothersome Beep!` Wotchimon sounds a bothersome beep, and its happiness bar suddenly disappears! Pending damage reduced.",
|
||||
"questVirtualPetDropVirtualPetPotion": "Virtual Pet Hatching Potion",
|
||||
"questVirtualPetUnlockText": "Unlocks Virtual Pet Hatching Potion for purchase in the Market",
|
||||
|
||||
"questPinkMarbleText": "Calm the Corrupted Cupid",
|
||||
"questPinkMarbleNotes": "After hearing rumors about a cave in the Meandering Mountains that has pink rocks and dust shooting out of it, your party starts to investigate. As you approach the cave, there is indeed a huge pink dust cloud – and strangely, you hear a tiny voice's battle cry, followed by the sound of shattering rock.<br><br>@Empress42 accidentally inhales some of the dust and suddenly feels dreamy and less productive. “Same here!” says @QuartzFox, “I'm suddenly fantasizing about a person that I barely know!”<br><br>@a_diamond peeks into the cave and finds a little being zipping around and smashing pink marbled rock to dust. “Take cover! This Cupid has been corrupted and is using his magic to cause limerence and unrealistic infatuations! We have to subdue him!”",
|
||||
"questPinkMarbleCompletion": "You manage to pin the little guy down at last – he was much tougher and faster than expected. Before he stirs again, you take away his quiver of glowing arrows. He blinks and suddenly looks around in surprise. “To escape my own sorrow and heartbreak for a while I pricked myself with one of my arrows… I don't remember anything after that!”<br><br>He is just about to flee the cave, notices that @Loremi has taken a sample of the marble dust and grins. “Try using some of this pink marble dust in a potion! Nurture the pets that hatch from it and you will find that real relationships are born from communication, mutual trust and care. I wish you luck, and I wish you love!”",
|
||||
"questPinkMarbleBoss": "Cupido",
|
||||
"questPinkMarbleRageTitle": "Pink Punch",
|
||||
"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",
|
||||
"QuestPinkMarbleUnlockText": "Unlocks Pink Marble Hatching Potions for purchase in the Market."
|
||||
"questVirtualPetUnlockText": "Unlocks Virtual Pet Hatching Potion for purchase in the Market"
|
||||
}
|
||||
|
||||
@@ -145,8 +145,6 @@
|
||||
"mysterySet202210": "Ominous Ophidian Set",
|
||||
"mysterySet202211": "Electromancer Set",
|
||||
"mysterySet202212": "Glacial Guardian Set",
|
||||
"mysterySet202301": "Valiant Vulpine Set",
|
||||
"mysterySet202302": "Trickster Tabby Set",
|
||||
"mysterySet301404": "Steampunk Standard Set",
|
||||
"mysterySet301405": "Steampunk Accessories Set",
|
||||
"mysterySet301703": "Peacock Steampunk Set",
|
||||
@@ -203,16 +201,12 @@
|
||||
"lookingForMoreItems": "Looking for More Items?",
|
||||
"dropCapSubs": "Habitica subscribers can find double the random items each day and receive monthly mystery items!",
|
||||
"subscriptionCanceled": "Your subscription is canceled",
|
||||
"subscriptionInactiveDate": "Your subscription benefits will become inactive on <br><strong><%= date %></strong>",
|
||||
"subscriptionInactiveDate": "Your subscription benefits will become inactive on <strong><%= date %></strong>",
|
||||
"subscriptionStats": "Subscription Stats",
|
||||
"subMonths": "Sub Months",
|
||||
"needToUpdateCard": "Need to update your card?",
|
||||
"readyToResubscribe": "Are you ready to resubscribe?",
|
||||
"cancelYourSubscription": "Cancel your subscription?",
|
||||
"cancelSubAlternatives": "If you're having technical problems or Habitica doesn't seem to be working out for you, please consider <a href='mailto:admin@habitica.com'>contacting us</a>. We want to help you get the most from Habitica.",
|
||||
"sendAGift": "Send Gift",
|
||||
"haveNonRecurringSub": "You have a non-recurring gift subscription.",
|
||||
"switchToRecurring": "Switch to a recurring subscription?",
|
||||
"continueGiftSubBenefits": "Want to continue your benefits? You can start a new subscription before your gifted one runs out to keep your benefits active.",
|
||||
"subscriptionCreditConversion": "Starting a new subscription will convert any remaining months to credit that will be used after the recurring subscription is canceled."
|
||||
"sendAGift": "Send Gift"
|
||||
}
|
||||
|
||||
@@ -1417,21 +1417,21 @@
|
||||
"shieldSpecialSpring2018WarriorText": "Escudo de la Mañana",
|
||||
"shieldSpecialSpring2018WarriorNotes": "Este robusto escudo brilla con la gloria de la primera luz. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de primavera 2018.",
|
||||
"shieldSpecialSpring2018HealerText": "Escudo Granate",
|
||||
"shieldSpecialSpring2018HealerNotes": "A pesar de su apariencia caprichosa, ¡este escudo granate es bastante duradero! Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de primavera 2018.",
|
||||
"shieldSpecialSummer2018WarriorText": "Escudo de Cráneo Beta",
|
||||
"shieldSpecialSummer2018WarriorNotes": "Hecho de piedra, este temible escudo con forma de calavera inflige terror a los peces enemigos mientras reúnes a tus mascotas esqueleto y monturas. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de verano 2018.",
|
||||
"shieldSpecialSummer2018HealerText": "Emblema de Monarca Sirena",
|
||||
"shieldSpecialSummer2018HealerNotes": "Este escudo puede producir una cúpula de aire para el beneficio de los visitantes terrestres al visitar tu reino acuático. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de verano 2018.",
|
||||
"shieldSpecialSpring2018HealerNotes": "A pesar de su apariencia caprichosa, ¡este escudo granate es bastante duradero! Aumenta la Constitución en <%= con %>. Equipamiento de Primavera Edición Limitada del 2018.",
|
||||
"shieldSpecialSummer2018WarriorText": "Escudo de cráneo beta",
|
||||
"shieldSpecialSummer2018WarriorNotes": "Hecho de piedra, este temible escudo con forma de calavera inflige terror a los peces enemigos mientras reúnes a tus mascotas esqueleto y monturas. Aumenta la Constitución en <%= con %>. Equipo de Verano Edición Limitada del 2018.",
|
||||
"shieldSpecialSummer2018HealerText": "Emblema de monarca sirena",
|
||||
"shieldSpecialSummer2018HealerNotes": "Este escudo puede producir una cúpula de aire para el beneficio de los visitantes terrestres al visitar tu reino acuático. Aumenta la Constitución en <%= con %>. Equipo de Verano Edición Limitada del 2018.",
|
||||
"shieldSpecialFall2018RogueText": "Vial de la Tentación",
|
||||
"shieldSpecialFall2018RogueNotes": "Este frasco representa todas las distracciones y problemas que te impiden dar lo mejor de ti. ¡Resiste! ¡Te estamos apoyando! Aumenta la Fuerza en <%= str %>. Equipamiento de edición limitada de otoño 2018.",
|
||||
"shieldSpecialFall2018RogueNotes": "Este frasco representa todas las distracciones y problemas que te impiden dar lo mejor de ti. ¡Resiste! ¡Te estamos apoyando! Aumenta la Fuerza en <%= str %>. Edición Limitada de Equipamiento de Otoño 2018.",
|
||||
"shieldSpecialFall2018WarriorText": "Escudo Brillante",
|
||||
"shieldSpecialFall2018WarriorNotes": "Super brillante para disuadir a cualquier gorgona problemática de asomarse por las esquinas. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de otoño 2018.",
|
||||
"shieldSpecialFall2018WarriorNotes": "Super brillante para disuadir a cualquier gorgona problemática de asomarse por las esquinas. Aumenta la Constitución en <%= con %>. Edición Limitada de Equipamiento de Otoño 2018.",
|
||||
"shieldSpecialFall2018HealerText": "Escudo Hambriento",
|
||||
"shieldSpecialFall2018HealerNotes": "Con sus fauces bien abiertas, este escudo absorberá todos los golpes de tu enemigo. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de otoño 2018.",
|
||||
"shieldSpecialFall2018HealerNotes": "Con sus fauces bien abiertas, este escudo absorberá todos los golpes de tu enemigo. Aumenta la Constitución en <%= con %>. Edición Limitada de Equipamiento de Otoño 2018.",
|
||||
"shieldSpecialWinter2019WarriorText": "Escudo Helado",
|
||||
"shieldSpecialWinter2019WarriorNotes": "Este escudo fue fabricado usando las más gruesas capas de hielo del glaciar más antiguo de las Estepas de Stoïkalm. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de invierno 2018-2019.",
|
||||
"shieldSpecialWinter2019WarriorNotes": "Este escudo fue fabricado usando las más gruesas capas de hielo del glaciar más antiguo de las Estepas de Stoïkalm. Aumenta la Constitución en <%= con %>. Equipamiento de Invierno Edición Limitada de 2018-2019.",
|
||||
"shieldSpecialWinter2019HealerText": "Cristales de Hielo Encantados",
|
||||
"shieldSpecialWinter2019HealerNotes": "Puede que el fino hielo se rompa, pero estos perfectos cristales devolverán cualquier golpe antes de que impacte. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de invierno 2018-2019.",
|
||||
"shieldSpecialWinter2019HealerNotes": "Puede que el fino hielo se rompa, pero estos perfectos cristales devolverán cualquier golpe antes de que impacte. Aumenta la Constitución en <%= con %>. Equipamiento de Invierno Edición Limitada de 2018-2019.",
|
||||
"shieldMystery201601Text": "Destructora de Resoluciones",
|
||||
"shieldMystery201601Notes": "Esta espada se puede usar para desviar a todas las distracciones. No otorga ningún beneficio. Artículo de Suscriptor de Enero 2016.",
|
||||
"shieldMystery201701Text": "Escudo para congelar el tiempo",
|
||||
@@ -2289,16 +2289,16 @@
|
||||
"headArmoireGuardiansBonnetNotes": "¡Ponte este atractivo gorro para pastorear tus tareas! Aumenta la constitución en <%= con %>. Armario Encantado: Conjunto de guardián de los pastores (artículo 1 de 3).",
|
||||
"headArmoireHeraldsCapNotes": "Este gorro de heraldo incluye una alegre pluma. Aumenta la inteligencia en <%= int %>. Armario Encantado: Conjunto de heraldo (articulo 2 de 4).",
|
||||
"headArmoireMedievalLaundryHatNotes": "No es que sea un gorro muy elaborado, pero para lavar la ropa... servirá. Aumenta la inteligencia en <%= int %>. Armario Encantado: Conjunto de lavanderos medievales (artículo 4 de 6).",
|
||||
"shieldSpecialSummer2019HealerNotes": "Deje que aquellos que necesitan ayuda sepan que está en camino, gracias al sonoro estruendo de esta trompeta de concha. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de verano 2019.",
|
||||
"shieldSpecialSummer2019HealerNotes": "Deje que aquellos que necesitan ayuda sepan que está en camino, gracias al sonoro estruendo de esta trompeta de concha. Aumenta la constitución en <%= con %>. Equipamiento de edición limitada de verano 2019.",
|
||||
"headArmoireJadeHelmText": "Caso de jade",
|
||||
"headArmoirePinkFloppyHatNotes": "Se han cosido muchos hechizos en este simple sombrero, dándole un color rosa perfecto. Aumenta la inteligencia en <%= int %>. Armario Encantado: Conjunto casual rosa (artículo 1 de 3).",
|
||||
"headArmoireHornsOfAutumnNotes": "¡Desenvaina el poder del aire fresco de esta temporada y canalízalo a través de tu magia! Aumenta la fuerza en <%= str %>. Armario Encantado: Conjunto de hechicero otoñal (artículo 1 de 4).",
|
||||
"headArmoireNightcapText": "Gorro de dormir",
|
||||
"shieldSpecialSpring2019WarriorNotes": "¡Deja que el poder de la clorofila mantenga a raya a tus enemigos! Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de primavera 2019.",
|
||||
"shieldSpecialSpring2019WarriorNotes": "¡Deja que el poder de la clorofila mantenga a raya a tus enemigos! Aumenta la constitución en <%= con %>. Equipamiento de edición limitada de primavera 2019.",
|
||||
"headArmoireBlueMoonHelmText": "Yelmo de la luna azul",
|
||||
"headArmoireMedievalLaundryHatText": "Gorro de lavandero",
|
||||
"shieldSpecialSpring2019HealerNotes": "Este escudo brillante en realidad está hecho de chocolate recubierto de caramelo. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de primavera 2019.",
|
||||
"shieldSpecialSummer2019WarriorNotes": "Refúgiate tras este robusto escudo redondo, que lleva grabado como blasón a tu reptil favorito. Aumenta la Constitución en <%= con %>. Equipamiento de edición limitada de verano 2019.",
|
||||
"shieldSpecialSpring2019HealerNotes": "Este escudo brillante en realidad está hecho de chocolate recubierto de caramelo. Aumenta la constitución en <%= con %>. Equipamiento de edición limitada de primavera 2019.",
|
||||
"shieldSpecialSummer2019WarriorNotes": "Refúgiate tras este robusto escudo redondo, que lleva grabado como blasón a tu reptil favorito. Aumenta la constitución en <%= con %>. Equipamiento de edición limitada de verano 2019.",
|
||||
"headArmoireMedievalLaundryCapText": "Gorro de lavandero",
|
||||
"headArmoireGuardiansBonnetText": "Gorrito de guardián",
|
||||
"headArmoireRubberDuckyNotes": "¡El compañero perfecto para un indulgente día de spa! Aunque sorprendentemente, también sabe mucho sobre todo tipo de problemas de software. Aumenta la inteligencia en <%= int %>. Armario Encantado: Conjunto de baño de burbujas (artículo 1 de 4).",
|
||||
|
||||
@@ -303,9 +303,9 @@
|
||||
"foodCandyRed": "Cinnamon Candy",
|
||||
"foodCandyRedThe": "the Cinnamon Candy",
|
||||
"foodCandyRedA": "Cinnamon Candy",
|
||||
"foodSaddleText": "Upuán",
|
||||
"foodSaddleNotes": "Agád na pinalálakí ang isa sa iyóng mga alaga.",
|
||||
"foodSaddleSellWarningNote": "Uy! Kapakípakinabang! May alám ka ba sa paggamit ng mga Upuán sa mga Alagà?",
|
||||
"foodSaddleText": "Siya",
|
||||
"foodSaddleNotes": "Agád na pinapalakí ang isa sa iyong mga alaga.",
|
||||
"foodSaddleSellWarningNote": "Uy! Medyo kapaki-pakinabang! Pamilyar ka ba kung papaano gumamit ng Siya sa iyong mga Alagà?",
|
||||
"foodNotes": "Feed this to a pet and it may grow into a sturdy steed.",
|
||||
"foodPieRedA": "isang hiwa ng Pulang Cherry Pie",
|
||||
"foodPieRedThe": "ang Pulang Cherry Pie",
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"FAQ": "MKN (Mga Kadalasang Naitátanong)",
|
||||
"FAQ": "FAQ",
|
||||
"marketing1Lead1Title": "Buhay Mo, ang Role Playing Game",
|
||||
"marketing1Header": "Pabutihin ang Iyong mga Gawi sa pamamagitan ng Paglalaro",
|
||||
"logout": "Log Out",
|
||||
@@ -23,10 +23,10 @@
|
||||
"companyAbout": "Paano Gumagana",
|
||||
"communityInstagram": "Instagram",
|
||||
"communityFacebook": "Facebook",
|
||||
"communityExtensions": "Mga Pandagdág-Gamit at Pámpalawig-Gamit",
|
||||
"clearBrowserData": "Burahín ang Alaala ng Tagahanap",
|
||||
"communityExtensions": "<a href='http://habitica.fandom.com/wiki/Extensions,_Add-Ons,_and_Customizations' target='_blank'>Add-ons & Extensions</a>",
|
||||
"clearBrowserData": "Alisin ang Browser Data",
|
||||
"chores": "Mga Gawaing-Bahay",
|
||||
"termsAndAgreement": "Sa pagpindót sa ibabà, ipinápahiwatig n'yo na nabasa at sumasang-ayon kayó sa <a href='/static/terms'>Mga Alituntúnin sa Paglílingkód</a> at <a href='/static/privacy'>Pátakarán sa Paglilihim</a>.",
|
||||
"termsAndAgreement": "Sa pagpindot ng button sa ibaba, ipinapahiwatig mong nabasa at sumasang-ayon ka sa <a href='/static/terms'>Terms of Service</a> at <a href='/static/privacy'>Privacy Policy</a>.",
|
||||
"marketing3Lead1": "Ang **iPhone & Android** apps ay nakatutulong sa'yo upang makatapos ng gawain kahit saan. Napagtanto namin na ang pag-login gamit ang website ay nakakapagod.",
|
||||
"marketing3Header": "Apps at Extensions",
|
||||
"marketing2Lead3": "Isang uri ng pakikipagkumpitensya sa iyong mga kaibigan at sa mga hindi kakilala ang mga Hamon. Kung sino ang pinakamagaling sa pagtapos ng bawat hamon ay makatatanggap ng mga espesyal na premyo.",
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
"oneOfAllHatchingPotions": "tig-íisá ng bawat pangkaraniwang Mahiwagang Langís na Pampápapisâ",
|
||||
"threeOfEachFood": "tigtátatló ng bawat pángkaraniwang Pagkaing Pang-alagà",
|
||||
"fourOfEachFood": "tíg-aapat ng bawat pángkaraniwang Pagkaing Pang-alagà",
|
||||
"twoSaddles": "dalawáng Upuán",
|
||||
"threeSaddles": "tatlóng Upuán",
|
||||
"twoSaddles": "two Saddles",
|
||||
"threeSaddles": "three Saddles",
|
||||
"incentiveAchievement": "ang Kakaibang Kalakihan sa Katapatan na tagumpáy",
|
||||
"royallyLoyal": "Kakaibang Kalakihan sa Katapatan",
|
||||
"royallyLoyalText": "Limandaáng ulit ng nakapuntá ang tagagamit na itó dito, at napagkaloobán na ng bawat Gantimpalà ng maaaring matanggáp ukol sa dalás ng pagpuntá rito!",
|
||||
|
||||
@@ -138,11 +138,5 @@
|
||||
"achievementGroupsBeta2022Text": "Vous et votre groupe avez fourni un retour de grande valeur pour aider aux tests d'Habitica.",
|
||||
"achievementWoodlandWizardModalText": "Vous avez collecté tous les familiers de la forêt !",
|
||||
"achievementWoodlandWizard": "Sorcellerie de sous-bois",
|
||||
"achievementWoodlandWizardText": "A fait éclore toutes les créatures de la forêt de couleur basique : Blaireau, ours, cerf, renard, grenouille, hérisson, hiboux, escargot, écureuil et arbrisseau !",
|
||||
"achievementBoneToPick": "Un os à ronger",
|
||||
"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 tous les familiers polaires : Ours, renard, pingouin, baleine et loup !",
|
||||
"achievementPolarProModalText": "Vous avez collecté tous les familiers polaires !"
|
||||
"achievementWoodlandWizardText": "A fait éclore toutes les créatures de la forêt de couleur basique : Blaireau, ours, cerf, renard, grenouille, hérisson, hiboux, escargot, écureuil et arbrisseau !"
|
||||
}
|
||||
|
||||
@@ -728,26 +728,5 @@
|
||||
"backgroundAutumnPicnicText": "Pique-nique automnal",
|
||||
"backgroundOldPhotoText": "Vieille photo",
|
||||
"backgroundAutumnPicnicNotes": "Appréciez un pique-nique automnal.",
|
||||
"backgroundOldPhotoNotes": "Prenez la pose sur une vieille photo.",
|
||||
"backgrounds112022": "Ensemble 102 : sorti en novembre 2022",
|
||||
"backgroundAmongGiantMushroomsNotes": "Émerveillez-vous parmi les champignons géants.",
|
||||
"backgroundAmongGiantMushroomsText": "Parmi les champignons géants",
|
||||
"backgroundMistyAutumnForestText": "Forêt automnale brumeuse",
|
||||
"backgroundMistyAutumnForestNotes": "Baladez-vous dans une forêt automnale brumeuse.",
|
||||
"backgroundAutumnBridgeText": "Pont en automne",
|
||||
"backgroundAutumnBridgeNotes": "Admirez la beauté d'un pont en automne.",
|
||||
"backgrounds102022": "Ensemble 101 : sorti en octobre 2022",
|
||||
"backgroundSpookyRuinsText": "Ruines terrifiantes",
|
||||
"backgroundSpookyRuinsNotes": "Explorez des ruines terrifiantes.",
|
||||
"backgroundMaskMakersWorkshopText": "Atelier de fabrication de masques",
|
||||
"backgroundMaskMakersWorkshopNotes": "Essayez un nouveau visage dans l'atelier de fabrication de masques.",
|
||||
"backgroundCemeteryGateText": "Porte de cimetière",
|
||||
"backgroundCemeteryGateNotes": "Hantez la porte d'un cimetière.",
|
||||
"backgrounds122022": "Ensemble 103 : sorti en décembre 2022",
|
||||
"backgroundBranchesOfAHolidayTreeText": "Branches d'un sapin de Noël",
|
||||
"backgroundBranchesOfAHolidayTreeNotes": "Batifoles sur les branches d'un sapin de Noël.",
|
||||
"backgroundInsideACrystalText": "L'intérieur d'un cristal",
|
||||
"backgroundInsideACrystalNotes": "Surveillez depuis l'intérieur d'un cristal.",
|
||||
"backgroundSnowyVillageText": "Village enneigé",
|
||||
"backgroundSnowyVillageNotes": "Admirez un village enneigé."
|
||||
"backgroundOldPhotoNotes": "Prenez la pose sur une vieille photo."
|
||||
}
|
||||
|
||||
@@ -2704,85 +2704,5 @@
|
||||
"weaponSpecialFall2022RogueNotes": "Non seulement vous pouvez vous défendre avec ce concombre, mais il servira aussi de casse-croûte savoureux. Augmente la force de <%= str %>. Équipement en édition limitée de l'automne 2022.",
|
||||
"weaponSpecialFall2022WarriorNotes": "Elle est peut-être plus prévue pour couper les bûches Ou les tranches de pain croustillant que les armures ennemies, mais GRRR ! Ça a l'air terrifiant ! Augmente la force de <%= str %>. Équipement en édition limitée de l'automne 2022.",
|
||||
"armorSpecialFall2022RogueNotes": "Que vous nagiez, que vous vous faufiliez, ou que vous luttiez, vous serez tranquille dans cette armure. Augmente la perception de <%= per %>. Équipement en édition limitée de l'automne 2022.",
|
||||
"weaponSpecialFall2022RogueText": "Lame concombre",
|
||||
"weaponMystery202211Text": "Bâton d'électromancie",
|
||||
"weaponArmoireMagicSpatulaText": "Spatule magique",
|
||||
"weaponArmoireFinelyCutGemNotes": "Quelle trouvaille ! Ce bijou étonnant, taillé avec précision, sera le joyau de votre collection. Et il pourrait contenir une magie spéciale, qui n'attend que vous pour l'exploiter. Augmente la constitution de <%= con %>. Armoire enchantée : Ensemble de bijouterie (objet 4 de 4).",
|
||||
"armorArmoireSheetGhostCostumeText": "Costume de fantôme",
|
||||
"weaponArmoireMagicSpatulaNotes": "Regardez votre nourriture voler et se retourner dans les airs. Vous aurez de la chance pour la journée si, comme par magie, elle se retourne trois fois avant de retomber sur votre spatule. Augmente la perception de <%= per %>. Armoire enchantée : ensemble d'instruments de cuisine (objet 1 de 2).",
|
||||
"armorArmoireSheetGhostCostumeNotes": "Bouh ! C'est le costume le plus effrayant de tout Habitica, alors portez-le à bon escient... et faites attention où vous mettez les pieds pour ne pas trébucher. Augmente la constitution de <%= con %>. Armoire enchantée : objet indépendant.",
|
||||
"armorArmoireJewelersApronNotes": "Ce tablier résistant est exactement ce qu'il faut porter lorsque vous vous sentez créatif. Mieux encore, il comporte des dizaines de petites poches pour ranger tout ce dont vous avez besoin. Augmente l'intelligence de <%= int %>. Armoire enchantée : ensemble de bijouterie (objet 1 de 4).",
|
||||
"weaponMystery202211Notes": "Exploitez la puissance impressionnante d'une tempête de foudre avec ce bâton. Ne confère aucun bonus. Objet d'abonnement de novembre 2022.",
|
||||
"armorSpecialFall2022HealerNotes": "Combien d'espions pourrait épier un voyeur, si un voyeur pouvait épier des espions ? Augmente la constitution de <%= con %>. Objet en édition limitée de l'automne 2022.",
|
||||
"weaponMystery202212Text": "Baguette glaciale",
|
||||
"weaponMystery202212Notes": "Le flocon de neige lumineux de cette baguette a le pouvoir de réchauffer les cœurs, même lors des nuits d'hiver les plus froides ! Ne confère aucun bonus. Objet d'abonnement de décembre 2022.",
|
||||
"armorSpecialFall2022WarriorText": "Armure orc",
|
||||
"armorSpecialFall2022MageText": "Armure de harpie",
|
||||
"headSpecialFall2022WarriorNotes": "Des défenses assez résistantes et acérées pour percer une citrouille ! GROAR ! Augmente la force de <%= str %>. Objet en édition limitée de l'automne 2022.",
|
||||
"armorSpecialFall2022MageNotes": "Volez aussi vite que le vent avec ces ailes merveilleuses et serrez ce qui vous tient le plus à cœur dans ces serres terrifiantes. Augmente l'intelligence de <%= int %>. Objet en édition limitée de l'automne 2022.",
|
||||
"weaponArmoireFinelyCutGemText": "Gemme finement taillée",
|
||||
"armorSpecialFall2022WarriorNotes": "GROAR ! GRANDES EPAULES vouloir dire vous GRANDE FORCE ! Augmente la constitution de <%= con %>. Objet en édition limitée de l'automne 2022.",
|
||||
"armorSpecialFall2022HealerText": "Profusion de globes oculaires",
|
||||
"armorArmoireJewelersApronText": "Tablier de joaillerie",
|
||||
"armorMystery202210Text": "Armure ophidienne omniprésente",
|
||||
"armorMystery202210Notes": "Essayez de vous déplacer en rampant pour une fois, vous verrez que c'est un mode de transport très efficace ! Ne confère aucun bonus. Objet d'abonnement d'octobre 2022.",
|
||||
"headSpecialFall2022RogueNotes": "Avec cette casquette en métal sur la tête, vous aurez une protection supplémentaire lorsque vous vous aventurerez sur la terre ferme. Augmente la perception de <%= per %>. Objet en édition limitée de l'automne 2022.",
|
||||
"headSpecialFall2022WarriorText": "Masque orc",
|
||||
"headSpecialFall2022MageText": "Masque de harpie",
|
||||
"armorMystery202212Text": "Robe glaciale",
|
||||
"armorMystery202212Notes": "L'univers peut être froid, mais cette charmante robe vous gardera bien au chaud pendant votre vol. Ne confère aucun bonus. Objet d'abonnement de décembre 2022.",
|
||||
"headSpecialFall2022RogueText": "Masque de kappa",
|
||||
"headAccessoryMystery202212Text": "Tiare glaciale",
|
||||
"headAccessoryMystery202212Notes": "Magnifiez votre chaleur et votre amitié à des niveaux insoupçonnés avec cette tiare d'or orné. Ne confère aucun bonus. Objet d'abonnement de décembre 2022.",
|
||||
"eyewearArmoireComedyMaskText": "Masque de comédie",
|
||||
"eyewearArmoireComedyMaskNotes": "Joie ! Voici un masque pittoresque pour votre cœur joyeux, jouant, annonçant la joie, et exprimant la gaieté et l'allégresse sur scène. Augmente la constitution de <%= con %>. Armoire enchantée : ensemble de masques de théâtre (objet 1 de 2).",
|
||||
"eyewearArmoireTragedyMaskText": "Masque de tragédie",
|
||||
"shieldArmoireBubblingCauldronNotes": "Le chaudron parfait pour préparer une potion de productivité ou cuisiner une soupe savoureuse. En fait, il y a peu de différence entre les deux ! Augmente la constitution de <%= con %>. Armoire enchantée : ensemble d'instruments de cuisine (objet 2 de 2).",
|
||||
"headMystery202211Notes": "Faites attention avec ce puissant chapeau, son effet sur les admirateurs peut provoquer un choc ! Ne confère aucun bonus. Objet d'abonnement de novembre 2022.",
|
||||
"headMystery202211Text": "Chapeau d'électromancie",
|
||||
"shieldArmoireBubblingCauldronText": "Chaudron bouillonnant",
|
||||
"shieldArmoireJewelersPliersText": "Pince de joaillerie",
|
||||
"shieldArmoireJewelersPliersNotes": "Elle coupe, elle tord, pince et bien plus. Cet outil peut vous aider à créer quoi que ce soit que vous imaginiez. Augmente la force de <%= str %>. Armoire enchantée : ensemble de bijouterie (objet 3 de 4).",
|
||||
"headSpecialFall2022MageNotes": "Entrez et attirez les autres près de vous avec ce masque magique de jeune fille. Augmente la perception de <%= per %>. Objet en édition limitée de l'automne 2022.",
|
||||
"headSpecialFall2022HealerText": "Masque de voyeur",
|
||||
"headSpecialFall2022HealerNotes": "La beauté est là dedans. Quelque part ! Augmente l'intelligence de <%= int %>. Objet en édition limitée de l'automne 2022.",
|
||||
"headMystery202210Text": "Heaume ophidien omniprésent",
|
||||
"headMystery202210Notes": "Ce capuchon écailleux va sûrement terrifier votre liste de choses à faire et la soumettre ! Ne confère aucun bonus. Objet d'abonnement d'octobre 2022.",
|
||||
"shieldSpecialFall2022WarriorText": "Bouclier orc",
|
||||
"shieldSpecialFall2022WarriorNotes": "DES BONBONS OU DES GROAR ! Augmente la constitution de <%= con %>. Objet en édition limitée de l'automne 2022.",
|
||||
"shieldSpecialFall2022HealerText": "Œil gauche du voyeur",
|
||||
"shieldSpecialFall2022HealerNotes": "Deuxième œil, regardez ce costume et tremblez. Augmente la constitution de <%= con %>. Objet en édition limitée de l'automne 2022.",
|
||||
"eyewearArmoireJewelersEyeLoupeNotes": "Cette loupe oculaire magnifie ce sur quoi vous travaillez pour que vous puissiez en voir tous les détails. Augmente la perception de <%= per %>. Armoire enchantée : ensemble de bijouterie (objet 2 de 4).",
|
||||
"eyewearArmoireTragedyMaskNotes": "Hélas ! Voici un lourd masque pour ton pauvre avatar, qui se pavane, s'agite et exprime le malheur et la tristesse sur la scène. Augmente l'intelligence de <%= int %>. Armoire enchantée : ensemble de masques de théâtre (objet 2 de 2).",
|
||||
"eyewearArmoireJewelersEyeLoupeText": "Loupe oculaire de joaillerie",
|
||||
"headSpecialWinter2023RogueNotes": "Les tentations des gens de vous \"déballer\" les cheveux vous donneront des occasions de pratiquer vos esquives. Augmente la perception de <%= per %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"weaponSpecialWinter2023WarriorNotes": "Les deux pointes de cette lance ont la forme de défenses de morse mais sont deux fois plus puissantes. Frappez les doutes et les poèmes stupides jusqu'à ce qu'ils reculent ! Augmente la force de <%= str %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"headSpecialWinter2023MageText": "Tiare de lumière féerique",
|
||||
"weaponSpecialWinter2023MageText": "Feu de renard",
|
||||
"headSpecialWinter2023MageNotes": "Vous avez été éclos avec une potion nuit étoilée ? Parce que j'ai des étoiles dans les yeux pour vous. Augmente la perception de <%= per %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"weaponSpecialWinter2023MageNotes": "Ni renard ni feu, mais totalement festif ! Augmente l'intelligence de <%= int %> et la perception de <%= per %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"weaponSpecialWinter2023HealerText": "Couronne de jet",
|
||||
"shieldSpecialWinter2023WarriorNotes": "Le temps est venu, dit le morse, de parler de beaucoup de choses : des coquilles d'huîtres—et des cloches d'hiver—des chansons que quelqu'un chante—et où est passée la perle de ce bouclier—ou de ce que la nouvelle année apporte ! Augmente la constitution de <%= con %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"weaponSpecialWinter2023HealerNotes": "Regardez cette couronne festive et piquante filer dans les airs vers votre ennemi ou vos obstacles et revenir vers vous comme un boomerang pour un autre lancer. Augmente l'intelligence de <%= int %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"armorSpecialWinter2023RogueText": "Ruban d'emballage",
|
||||
"armorSpecialWinter2023RogueNotes": "Obtenez des objets. Empaquetez-les dans un beau papier cadeau. Et donnez-les à votre voleur local ! C'est de saison. Augmente la perception de <%= per %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"armorSpecialWinter2023WarriorText": "Costume de morse",
|
||||
"armorSpecialWinter2023WarriorNotes": "Ce costume de morse résistant est parfait pour une promenade sur une plage au milieu de la nuit. Augmente la Constitution de <%= con %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"armorSpecialWinter2023MageText": "Robe de chambre de lumière féerique",
|
||||
"armorSpecialWinter2023MageNotes": "Juste parce que vous avez beaucoup de lumières ne fait pas de vous un arbre ! ... peut-être l'année prochaine. Augmente l'intelligence de <%= int %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"armorSpecialWinter2023HealerText": "Costume cardinal",
|
||||
"armorSpecialWinter2023HealerNotes": "Ce costume cardinal lumineux est parfait pour voler haut au-dessus de vos problèmes. Augmente la constitution de <%= con %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"weaponSpecialWinter2023RogueText": "Ceinture de satin vert",
|
||||
"weaponSpecialWinter2023RogueNotes": "Les légendes parlent de voleurs qui dérobent les armes de leurs adversaires, les rendent inutilisables, puis les offrent en retour juste pour être mignon. Augmente la force de <%= str %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"weaponSpecialWinter2023WarriorText": "Lance défenses",
|
||||
"headSpecialWinter2023RogueText": "Nœud cadeau",
|
||||
"headSpecialWinter2023WarriorText": "Casque morse",
|
||||
"headSpecialWinter2023WarriorNotes": "Ce casque de morse est parfait pour discuter avec un ami ou participer à un repas intelligent. Augmente la force de <%= str %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"headSpecialWinter2023HealerText": "Heaume cardinal",
|
||||
"headSpecialWinter2023HealerNotes": "Ce heaume cardinal est parfait pour siffler et chanter pour annoncer la nouvelle saison. Augmente l'intelligence de <%= int %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"shieldSpecialWinter2023WarriorText": "Bouclier huitre",
|
||||
"shieldSpecialWinter2023HealerText": "Chansonnette fraiche",
|
||||
"shieldSpecialWinter2023HealerNotes": "Votre chanson de givre et de neige apaisera les esprits de ceux qui l'entendent. Augmente la constitution de <%= con %>. Équipement en édition limitée de l'hiver 2022-2023.",
|
||||
"headSpecialNye2022Text": "Chapeau de fête fantastique",
|
||||
"headSpecialNye2022Notes": "Vous avez reçu un chapeau de soirée fantastique ! Portez-le avec fierté en levant votre verre à cette nouvelle année ! Ne confère aucun bonus."
|
||||
"weaponSpecialFall2022RogueText": "Lame concombre"
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
"dataTool": "Outil d'affichage des données",
|
||||
"resources": "Ressources",
|
||||
"communityGuidelines": "Règles de vie en communauté",
|
||||
"bannedWordUsed": "Oups ! Il semblerait que ce message contienne une injure ou une référence à une drogue ou un sujet mature (<%= swearWordsUsed %>). Habitica préserve les fils de discussion. N'hésitez pas à retoucher votre message pour pouvoir l'envoyer ! Vous devez enlever le mot en question, pas le censurer.",
|
||||
"bannedWordUsed": "Oups ! Il semblerait que ce message contienne une injure, une connotation religieuse, ou une référence à une drogue ou un sujet mature (<%= swearWordsUsed %>). Habitica a des habitants qui proviennent de tous horizons, et nous préservons donc nos fils de discussion. N'hésitez pas à retoucher votre message pour pouvoir l'envoyer !",
|
||||
"bannedSlurUsed": "Votre message contenait du langage inapproprié, et vos privilèges de discussion ont été révoqués.",
|
||||
"party": "Équipe",
|
||||
"usernameCopied": "Nom d'utilisateur copié dans le presse-papier.",
|
||||
@@ -123,7 +123,7 @@
|
||||
"sendGiftCost": "Total : <%= cost %>$ (USD)",
|
||||
"sendGiftFromBalance": "Offrir vos propres gemmes",
|
||||
"sendGiftPurchase": "Acheter les gemmes",
|
||||
"sendGiftMessagePlaceholder": "Ajouter un message",
|
||||
"sendGiftMessagePlaceholder": "Message personnel (facultatif)",
|
||||
"sendGiftSubscription": "<%= months %> Mois : <%= price %>$ USD",
|
||||
"gemGiftsAreOptional": "Veuillez noter que Habitica ne vous demandera jamais d'offrir des gemmes aux autres joueurs. Supplier qu'on vous donne des gemmes est une <strong>violation de nos règles de vie en communauté</strong>, et toute fois où cela se produit doit être signalée à <%= hrefTechAssistanceEmail %>.",
|
||||
"battleWithFriends": "Combattez des monstres aux côtés d'amis",
|
||||
@@ -405,17 +405,5 @@
|
||||
"newGroupsBullet01": "Interagissez avec les tâches directement depuis la console des tâches partagées",
|
||||
"groupUse": "Qu'est ce qui décrit mieux l'usage de votre groupe ?*",
|
||||
"groupUseDefault": "Choisissez une réponse",
|
||||
"createGroup": "Créer un groupe",
|
||||
"groupParentChildren": "Parent(s) qui définissent des tâches pour les enfants",
|
||||
"descriptionOptionalText": "Ajouter une description",
|
||||
"nextPaymentMethod": "Suite : Méthode de paiement",
|
||||
"sendGiftLabel": "Voulez vous envoyer un message avec le cadeau ?",
|
||||
"groupCouple": "Couple qui partage ses tâches",
|
||||
"groupFriends": "Amis qui partagent leurs tâches",
|
||||
"groupCoworkers": "Collaborateurs qui partagent leurs tâches",
|
||||
"groupManager": "Responsable qui définit des tâches pour ses employés",
|
||||
"groupTeacher": "Enseignant qui définit des tâches pour les étudiants",
|
||||
"nameStar": "Nom*",
|
||||
"nameStarText": "Ajouter un titre",
|
||||
"descriptionOptional": "Description"
|
||||
"createGroup": "Créer un groupe"
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@
|
||||
"septemberYYYY": "Septembre <%= year %>",
|
||||
"royalPurpleJackolantern": "Citrouille d'Habitoween pourpre royal",
|
||||
"novemberYYYY": "Novembre <%= year %>",
|
||||
"g1g1Limitations": "Il s'agit d'un événement limité dans le temps, qui démarre le 15 décembre à 08h00 ET (13h00 UTC) et qui finit le 8 janvier à 23h59 ET (9 janvier04h59 UTC). Cette promotion ne s'applique que lorsque vous offrez à quelqu'un d'autre. Si la personne désignée a déjà un abonnement, l'abonnement offert ajoutera des mois d'abonnement qui ne seront utilisés qu'après la fin de leur abonnement actuel.",
|
||||
"g1g1Limitations": "Il s'agit d'un événement limité dans le temps, qui démarre le 16 décembre à 08h00 ET (13h00 UTC) et qui finit le 6 Janvier à 20h00 ET (01h00 UTC). Cette promotion ne s'applique que lorsque vous offrez à quelqu'un d'autre. Si la personne désignée a déjà un abonnement, l'abonnement offert ajoutera des mois d'abonnement qui ne seront utilisés qu'après la fin de leur abonnement actuel.",
|
||||
"limitations": "Limitations",
|
||||
"g1g1HowItWorks": "Entrez l'identifiant du compte auquel vous voulez faire un cadeau. Puis choisissez la durée d'abonnement que vous voulez offrir et validez. Vous recevrez automatiquement la même durée d'abonnement que celle que vous venez d'offrir.",
|
||||
"howItWorks": "Comment ça marche",
|
||||
@@ -235,10 +235,5 @@
|
||||
"fall2022WatcherHealerSet": "Voyeur (Guérisseur)",
|
||||
"fall2022KappaRogueSet": "Kappa (Voleur)",
|
||||
"gemSaleHow": "Entre le <%= eventStartOrdinal %> et le <%= eventEndOrdinal %> <%= eventStartMonth %>, achetez simplement n'importe quel ensemble de gemmes comme d'habitude et votre compte sera crédité avec le montant promotionnel de gemmes. Plus de gemmes à dépenser, à partager ou à conserver pour de nouveaux objets !",
|
||||
"gemSaleLimitations": "Cette promotion s'applique uniquement pendant la durée de l'événement. L'événement démarre le <%= eventStartOrdinal %> <%= eventStartMonth %> à 8:00 EDT (12:00 UTC) et se terminera le <%= eventEndOrdinal %> <%= eventStartMonth %> à 20:00 EDT (00:00 UTC). Cette promotion n'est disponible que pour les gemmes que vous achetez pour vous.",
|
||||
"winter2023WalrusWarriorSet": "Morse (Guerrier)",
|
||||
"winter2023FairyLightsMageSet": "Lumières féeriques (Mage)",
|
||||
"winter2023CardinalHealerSet": "Cardinal (Guérisseur)",
|
||||
"spring2023RibbonRogueSet": "Ruban (Voleur)",
|
||||
"winter2023RibbonRogueSet": "Ruban (Voleur)"
|
||||
"gemSaleLimitations": "Cette promotion s'applique uniquement pendant la durée de l'événement. L'événement démarre le <%= eventStartOrdinal %> <%= eventStartMonth %> à 8:00 EDT (12:00 UTC) et se terminera le <%= eventEndOrdinal %> <%= eventStartMonth %> à 20:00 EDT (00:00 UTC). Cette promotion n'est disponible que pour les gemmes que vous achetez pour vous."
|
||||
}
|
||||
|
||||
@@ -190,24 +190,24 @@
|
||||
"suggestMyUsername": "Suggérer mon identifiant",
|
||||
"mentioning": "Mentions",
|
||||
"bannedWordUsedInProfile": "Votre pseudo ou votre texte de présentation contenait un langage inapproprié.",
|
||||
"transaction_create_guild": "<b>Créé</b> une guilde",
|
||||
"transaction_subscription_perks": "Bonus d'<b>abonnement</b>",
|
||||
"transaction_create_guild": "Créé une guilde",
|
||||
"transaction_subscription_perks": "De bonus d'abonnement",
|
||||
"noHourglassTransactions": "Vous n'avez aucune transaction de sablier mystique pour l'instant.",
|
||||
"transaction_debug": "Action de debug",
|
||||
"transaction_buy_money": "<b>Acheté</b> avec de l'argent",
|
||||
"transaction_buy_gold": "<b>Acheté</b> avec de l'or",
|
||||
"transaction_contribution": "<b>Palier</b> modifié",
|
||||
"transaction_spend": "<b>Dépensé</b> pour",
|
||||
"transaction_buy_money": "Acheté avec de l'argent",
|
||||
"transaction_buy_gold": "Acheté avec de l'or",
|
||||
"transaction_contribution": "Via une contribution",
|
||||
"transaction_spend": "Dépensé pour",
|
||||
"transaction_release_mounts": "Libéré les montures",
|
||||
"transaction_reroll": "Utilisé une potion de fortification",
|
||||
"transactions": "Transactions",
|
||||
"gemTransactions": "Transactions de gemmes",
|
||||
"hourglassTransactions": "Transactions de sabliers mystiques",
|
||||
"noGemTransactions": "Vous n'avez aucune transaction de gemmes pour l'instant.",
|
||||
"transaction_gift_send": "<b>Offert</b> à",
|
||||
"transaction_gift_receive": "<b>Reçu</b> de",
|
||||
"transaction_create_challenge": "<b>Créé</b> un défi",
|
||||
"transaction_change_class": "Changé de <b>classe</b>",
|
||||
"transaction_gift_send": "Offert à",
|
||||
"transaction_gift_receive": "Reçu de",
|
||||
"transaction_create_challenge": "Créé un défi",
|
||||
"transaction_change_class": "Changé de classe",
|
||||
"transaction_rebirth": "Utilisé l'orbe de résurrection",
|
||||
"transaction_release_pets": "Libéré les familiers",
|
||||
"addPasswordAuth": "Ajouter le mot de passe",
|
||||
@@ -218,13 +218,7 @@
|
||||
"adjustment": "Ajustement",
|
||||
"passwordSuccess": "Mot de passe changé avec succès",
|
||||
"giftSubscriptionRateText": "<strong>$<%= price %> USD</strong> pour <strong><%= months %> mois</strong>",
|
||||
"transaction_admin_update_balance": "<b>Administration</b> donnée",
|
||||
"transaction_admin_update_balance": "Administration donnée",
|
||||
"transaction_create_bank_challenge": "Banque de défi créée",
|
||||
"transaction_admin_update_hourglasses": "<b>Admin</b> mis à jour",
|
||||
"passwordIssueLength": "Les mots de passe doivent faire entre 8 et 64 caractères.",
|
||||
"timestamp": "Horodatage",
|
||||
"amount": "Montant",
|
||||
"action": "Action",
|
||||
"note": "Note",
|
||||
"remainingBalance": "Crédit restant"
|
||||
"transaction_admin_update_hourglasses": "Admin mis à jour"
|
||||
}
|
||||
|
||||
@@ -215,6 +215,5 @@
|
||||
"mysterySet202208": "Ensemble de queue de cheval audacieuse",
|
||||
"mysterySet202209": "Ensemble d'étude de magie",
|
||||
"mysterySet202210": "Ensemble ophidien inquiétant",
|
||||
"mysterySet202211": "Ensemble d'électromancie",
|
||||
"mysterySet202212": "Ensemble de Garde des glaces"
|
||||
"mysterySet202211": "Ensemble d'électromancie"
|
||||
}
|
||||
|
||||
@@ -95,9 +95,5 @@
|
||||
"achievementGoodAsGold": "זהב טהור",
|
||||
"achievementBugBonanzaModalText": "השלמת את ההרפתקאות של חיות המחמד של החיפושית, הפרפר, החילזון והעכביש!",
|
||||
"achievementBareNecessities": "רק את הטוב",
|
||||
"achievementBoneCollector": "אספן עצמות",
|
||||
"achievementSkeletonCrew": "צוות השלדים",
|
||||
"achievementBareNecessitiesModalText": "השלמת את המסעות של הקוף, העצלן והעצים הצעירים!",
|
||||
"achievementBugBonanza": "שיגעון החרקים",
|
||||
"achievementFreshwaterFriends": "חברים ממים מתוקים"
|
||||
"achievementBoneCollector": "אספן עצמות"
|
||||
}
|
||||
|
||||
@@ -3,28 +3,28 @@
|
||||
"quest": "הרפתקה",
|
||||
"petQuests": "הרפתקאות של חיות מחמד וחיות רכיבה",
|
||||
"unlockableQuests": "הרפתקאות שאינן ניתנות לפתיחה",
|
||||
"goldQuests": "הרפתקאות מסדרת הרב-אמן",
|
||||
"goldQuests": "",
|
||||
"questDetails": "פרטי הרפתקה",
|
||||
"questDetailsTitle": "פרטי ההרפתקה",
|
||||
"questDescription": "הרפתקאות מאפשרות לשחקנים להתרכז במטרות ארוכות טווח בתוך המשחק עם חברי החבורה שלהם.",
|
||||
"questDescription": "",
|
||||
"invitations": "הזמנות",
|
||||
"completed": "הושלם!",
|
||||
"rewardsAllParticipants": "מזכה את כל המשתתפים של ההרפתקה",
|
||||
"rewardsQuestOwner": "פרסים נוספים לבעל ההרפתקה",
|
||||
"rewardsAllParticipants": "",
|
||||
"rewardsQuestOwner": "",
|
||||
"inviteParty": "הזמינו את החבורה להרפתקה",
|
||||
"questInvitation": "הזמנה להרפתקה:",
|
||||
"questInvitationInfo": "הזמנה להרפתקה <%= quest %> ",
|
||||
"invitedToQuest": "הוזמנת להרפתקה <span class=\"notification-bold-blue\"><%= quest %></span>",
|
||||
"invitedToQuest": "",
|
||||
"askLater": "שאלו אחר כך",
|
||||
"buyQuest": "קנו הרפתקה",
|
||||
"accepted": "מוסכם",
|
||||
"declined": "סירבו",
|
||||
"declined": "",
|
||||
"rejected": "נדחה",
|
||||
"pending": "ממתין לתשובה",
|
||||
"questCollection": "+ <%= val %> חפצ(ים) של ההרפתקה נמצאו",
|
||||
"questCollection": "",
|
||||
"questDamage": "+ <%= val %> damage to boss",
|
||||
"begin": "התחל",
|
||||
"bossHP": "נק\"פ של הבוס",
|
||||
"bossHP": "",
|
||||
"bossStrength": "עוצמת האויב",
|
||||
"rage": "זעם",
|
||||
"collect": "לאסוף",
|
||||
@@ -34,8 +34,8 @@
|
||||
"sureLeave": "לעזוב את ההרפתקה? כל ההתקדמות תרד לטמיון.",
|
||||
"mustComplete": "קודם עליך להשלים את <%= quest %>",
|
||||
"mustLvlQuest": "עליכם להיות בדרגה <%= level %> כדי לקנות את ההרפתקה הזו!",
|
||||
"unlockByQuesting": "כדי לפתוח את ההרפתקה, תשלימו את <%= title %>.",
|
||||
"questConfirm": "בטוחים שאתם רוצים להתחיל את ההרפתקה? לא כל חברי החבורה אישרו את ההזמנה. הרפתקאות מתחילות באופן אוטומטי אחרי שכל חברי החבורה השיבו להזמנה.",
|
||||
"unlockByQuesting": "",
|
||||
"questConfirm": "Are you sure? Only <%= questmembers %> of your <%= totalmembers %> party members have joined this quest! Quests start automatically when all players have joined or rejected the invitation.",
|
||||
"sureCancel": "האם אתם בטוחים שברצונכם לבטל את ההרפתקה? ביטול ההרפתקה תבטל את כל ההזמנות שנשלחו, גם עבור אלה שהסכימו כבר להשתתף, והמגילה תחזור לרשותכם.",
|
||||
"sureAbort": "האם אתם בטוחים שברצונכם לבטל את ההרפתקה הזו? כל ההתקדמות שלכם תאבד. המגילה תשוב לידי בעליה.",
|
||||
"doubleSureAbort": "האם אתם באמת באמת בטוחים? כל החבורה שלכם עלולה לשנוא אתכם לנצח!",
|
||||
@@ -93,10 +93,5 @@
|
||||
"selectQuestModal": "נא לבחור הרפתקה",
|
||||
"questAlreadyStartedFriendly": "ההרפתקה כבר החלה, אבל תמיד ניתן להצטרף לבאה אחריה!",
|
||||
"membersParticipating": "<%= accepted %> / <%= invited %> חברים משתתפים",
|
||||
"chatQuestAborted": "<%= username %> הפסיק את ההרפתקה <%= questName %>.",
|
||||
"bossDamage": "פגעת בבוס!",
|
||||
"questInvitationNotificationInfo": "הוזמנת להצטרף להרפתקה",
|
||||
"questItemsPending": "<%= amount %> חפצים ממתינים",
|
||||
"hatchingPotionQuests": "הרפתקאות של שיקויי הבקיעה הקסומים",
|
||||
"sureLeaveInactive": "בטוחים שאתם רוצים לעזוב את ההרפתה? אתם לא תוכלו להשתתף."
|
||||
"chatQuestAborted": "<%= username %> הפסיק את ההרפתקה <%= questName %>."
|
||||
}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
"viewAchievements": "Lihat Penghargaan",
|
||||
"letsGetStarted": "Mari kita mulai!",
|
||||
"onboardingProgress": "<%= percentage %>% kemajuan",
|
||||
"gettingStartedDesc": "Ayo selesaikan tugas pengenalan ini dan kamu akan memperoleh <strong>5 Pencapaian</strong> dan <strong class=\"gold-amount\">100 Emas</strong> setelah kamu selesai!",
|
||||
"gettingStartedDesc": "Ayo selesaikan tugas pengenalan ini dan kamu akan mendapat <strong>5 Pencapaian</strong> dan <strong class=\"gold-amount\">100 Emas</strong> setelah kamu selesai!",
|
||||
"yourProgress": "Perkembangan Anda",
|
||||
"yourRewards": "Hadiah Anda",
|
||||
"foundNewItems": "Anda menemukan barang baru!",
|
||||
@@ -123,26 +123,5 @@
|
||||
"achievementShadyCustomerModalText": "Kamu mengumpulkan semua Peliharaan Bayangan!",
|
||||
"achievementShadeOfItAll": "Segala Bayang yang Ada",
|
||||
"achievementShadeOfItAllText": "Telah menjinakkan semua Tunggangan Bayangan.",
|
||||
"achievementShadeOfItAllModalText": "Kamu menjinakkan semua Tunggangan Bayangan!",
|
||||
"achievementWoodlandWizardModalText": "Kamu telah mengumpulkan seluruh peliharaan hutan!",
|
||||
"achievementPolarProModalText": "Kamu mengumpulkan seluruh Peliharaan Kutub!",
|
||||
"achievementPolarProText": "Telah menetaskan semua peliharaan Kutub: Beruang, Rubah, Pinguin, Paus, dan Serigala!",
|
||||
"achievementBirdsOfAFeatherModalText": "Kamu mengumpulkan seluruh peliharaan yang bisa terbang!",
|
||||
"achievementBoneToPickModalText": "Kamu telah mengumpulkan semua Peliharaan Tulang Klasik dan Misi!",
|
||||
"achievementBoneToPickText": "Telah menetaskan semua Peliharaan Tulang Klasik dan Misi!",
|
||||
"achievementGroupsBeta2022": "Pengetes Beta Interaktif",
|
||||
"achievementGroupsBeta2022Text": "Kamu dan grupmu telah memberikan umpan balik yang sangat berharga dalam membantu pengetesan Habitica.",
|
||||
"achievementGroupsBeta2022ModalText": "Kamu dan grupmu membantu Habitica dengan mengetes dan memberikan umpan balik!",
|
||||
"achievementPolarPro": "Ahli Kutub",
|
||||
"achievementWoodlandWizard": "Penyihir Hutan",
|
||||
"achievementWoodlandWizardText": "Telah menetaskan semua warna standar makhluk-makhluk hutan: Luak, Beruang, Rusa, Rubah, Katak, Landak, Burung Hantu, Siput, Tupai, dan Pepohonan!",
|
||||
"achievementZodiacZookeeperText": "Telah menetaskan semua warna standar peliharaan zodiak: Tikus, Sapi, Kelinci, Ular, Kuda, Domba, Monyet, Ayam, Serigala, Harimau, Babi Terbang, dan Naga!",
|
||||
"achievementReptacularRumble": "Gelegar Reptakuler",
|
||||
"achievementReptacularRumbleText": "Telah menetaskan semua warna standar peliharaan reptil: Aligator, Pterodaktil, Ular, Triceratops, Penyu, T-Rex, dan Velociraptor!",
|
||||
"achievementReptacularRumbleModalText": "Kamu telah mengumpulkan seluruh peliharaan reptil!",
|
||||
"achievementBirdsOfAFeather": "Bulu-bulu Burung",
|
||||
"achievementBirdsOfAFeatherText": "Telah menetaskan semua warna standar peliharaan yang bisa terbang: Babi Terbang, Burung Hantu, Nuri, Pterodaktil, Grifin, Falcon, Merak, dan Ayam!",
|
||||
"achievementBoneToPick": "Ambil Tulang",
|
||||
"achievementZodiacZookeeper": "Penangkar Zodiak",
|
||||
"achievementZodiacZookeeperModalText": "Kamu mengumpulkan seluruh peliharaan zodiak!"
|
||||
"achievementShadeOfItAllModalText": "Kamu menjinakkan semua Tunggangan Bayangan!"
|
||||
}
|
||||
|
||||
@@ -348,28 +348,28 @@
|
||||
"backgroundFlyingOverAncientForestNotes": "Terbang di atas pepohonan Hutan Kuno.",
|
||||
"backgrounds052018": "SET 48: Dirilis Mei 2018",
|
||||
"backgroundTerracedRiceFieldText": "Sawah Padi Berteras",
|
||||
"backgroundTerracedRiceFieldNotes": "Nikmati Sengkedan Sawah di musim tanam.",
|
||||
"backgroundTerracedRiceFieldNotes": "Enjoy a Terraced Rice Field in the growing season.",
|
||||
"backgroundFantasticalShoeStoreText": "Toko Sepatu Fantastis",
|
||||
"backgroundFantasticalShoeStoreNotes": "Cari alas kaki lucu di Toko Sepatu Fantastik.",
|
||||
"backgroundFantasticalShoeStoreNotes": "Look for fun new footwear in the Fantastical Shoe Store.",
|
||||
"backgroundChampionsColosseumText": "Koloseum Jawara",
|
||||
"backgroundChampionsColosseumNotes": "Berjemur di bawah cahaya kejayaan Koloseum Jawara.",
|
||||
"backgrounds062018": "SET 49: Dirilis Juni 2018",
|
||||
"backgroundDocksText": "Dermaga",
|
||||
"backgroundDocksNotes": "Memancing dari atas Dermaga.",
|
||||
"backgroundRowboatText": "Perahu Dayung",
|
||||
"backgroundRowboatNotes": "Bernyanyi di Perahu Dayung.",
|
||||
"backgroundRowboatText": "Rowboat",
|
||||
"backgroundRowboatNotes": "Sing rounds in a Rowboat.",
|
||||
"backgroundPirateFlagText": "Bendera Bajak Laut",
|
||||
"backgroundPirateFlagNotes": "Kibarkan Bendera Bajak Laut yang menakutkan.",
|
||||
"backgrounds072018": "SET 50: Dirilis Juli 2018",
|
||||
"backgroundDarkDeepText": "Gelap Dalam",
|
||||
"backgroundDarkDeepNotes": "Berenang di Gelap Dalam bersama makhluk-makhluk bercahaya.",
|
||||
"backgroundDarkDeepText": "Dark Deep",
|
||||
"backgroundDarkDeepNotes": "Swim in the Dark Deep among bioluminescent critters.",
|
||||
"backgroundDilatoryCityText": "Kota Dilatory",
|
||||
"backgroundDilatoryCityNotes": "Berkelana di kedalaman Kota bawah laut Dilatory.",
|
||||
"backgroundTidePoolText": "Kolam Ombak",
|
||||
"backgroundTidePoolNotes": "Mengamati kehidupan laut dari dekat Kolam Ombak.",
|
||||
"backgroundDilatoryCityNotes": "Meander through the undersea City of Dilatory.",
|
||||
"backgroundTidePoolText": "Tide Pool",
|
||||
"backgroundTidePoolNotes": "Observe the ocean life near a Tide Pool.",
|
||||
"backgrounds082018": "SET 51: Dirilis Agustus 2018",
|
||||
"backgroundTrainingGroundsText": "Lapangan Latih",
|
||||
"backgroundTrainingGroundsNotes": "Bertanding di Lapangan Latih.",
|
||||
"backgroundTrainingGroundsText": "Training Grounds",
|
||||
"backgroundTrainingGroundsNotes": "Spar on the Training Grounds.",
|
||||
"backgroundFlyingOverRockyCanyonText": "Ngarai Berbatu",
|
||||
"backgroundFlyingOverRockyCanyonNotes": "Lihat pemandangan menakjubkan di bawahmu selagi kamu terbang di atas Ngarai Berbatu.",
|
||||
"backgroundBridgeText": "Jembatan",
|
||||
@@ -382,16 +382,16 @@
|
||||
"backgroundCozyBarnText": "Lumbung Nyaman",
|
||||
"backgroundCozyBarnNotes": "Bersantai bersama peliharaan dan tungganganmu di Lumbung Nyaman mereka.",
|
||||
"backgrounds102018": "SET 53: Dirilis Oktober 2018",
|
||||
"backgroundBayouText": "Rawa",
|
||||
"backgroundBayouNotes": "Disinari cahaya kunang-kunang di Rawa berkabut.",
|
||||
"backgroundBayouText": "Bayou",
|
||||
"backgroundBayouNotes": "Bask in the fireflies' glow on the misty Bayou.",
|
||||
"backgroundCreepyCastleText": "Kastil Menyeramkan",
|
||||
"backgroundCreepyCastleNotes": "Berani mendekati Kastil Menyeramkan.",
|
||||
"backgroundDungeonText": "Penjara Bawah Tanah",
|
||||
"backgroundDungeonNotes": "Selamatkan para tahanan dari Penjara Bawah Tanah yang menyeramkan.",
|
||||
"backgrounds112018": "SET 54: Dirilis November 2018",
|
||||
"backgroundBackAlleyText": "Gang Belakang",
|
||||
"backgroundBackAlleyNotes": "Terlihat mencurigakan berkeliaran di Gang Belakang.",
|
||||
"backgroundGlowingMushroomCaveText": "Goa Jamur Bercahaya",
|
||||
"backgroundBackAlleyText": "Back Alley",
|
||||
"backgroundBackAlleyNotes": "Look shady loitering in a Back Alley.",
|
||||
"backgroundGlowingMushroomCaveText": "Glowing Mushroom Cave",
|
||||
"backgroundGlowingMushroomCaveNotes": "Stare in awe at a Glowing Mushroom Cave.",
|
||||
"backgroundCozyBedroomText": "Kamar Tidur Nyaman",
|
||||
"backgroundCozyBedroomNotes": "Curl up in a Cozy Bedroom.",
|
||||
@@ -620,7 +620,7 @@
|
||||
"backgroundClotheslineNotes": "Bersantai sambil mengeringkan pakaian di Jemuran.",
|
||||
"backgroundClotheslineText": "Jemuran",
|
||||
"backgrounds062021": "SET 85: Dirilis Juni 2021",
|
||||
"backgroundWindmillsNotes": "Pasang pelana dan berjalan di Kincir Angin.",
|
||||
"backgroundWindmillsNotes": ".Pasang pelana dan berjalan di Kincir Angin.",
|
||||
"backgroundWindmillsText": "Kincir Angin",
|
||||
"backgroundDragonsLairNotes": "Mencoba untuk tidak mengusik Sarang Naga.",
|
||||
"backgroundDragonsLairText": "Sarang Naga",
|
||||
@@ -639,17 +639,5 @@
|
||||
"backgroundVineyardNotes": "Telusuri Kebun Anggur yang berlimpah ruah.",
|
||||
"backgroundAutumnLakeshoreText": "Tepi Danau Musim Gugur",
|
||||
"backgrounds092021": "SET 88: Dirilis September 2021",
|
||||
"backgroundVineyardText": "Kebun Anggur",
|
||||
"backgroundWinterWaterfallText": "Air Terjun Musim Dingin",
|
||||
"backgroundWinterWaterfallNotes": "Mengagumi Air Terjun Musim Dingin.",
|
||||
"backgroundOrangeGroveText": "Belukar Jingga",
|
||||
"backgroundOrangeGroveNotes": "Mengembara ke wangi Belukar Jingga.",
|
||||
"backgrounds102021": "SET 89: Dirilis Oktober 2021",
|
||||
"hideLockedBackgrounds": "Sembunyikan latar belakang yang masih terkunci",
|
||||
"backgroundCrypticCandlesNotes": "Panggil pasukan sihir rahasia di antara Lilin-Lilin Gaib.",
|
||||
"backgroundHauntedPhotoText": "Foto Berhantu",
|
||||
"backgroundHauntedPhotoNotes": "Temukan dirimu terperangkap di dunia monokromik dalam Foto Berhantu.",
|
||||
"backgroundUndeadHandsText": "Tangan Mayat Hidup",
|
||||
"backgroundUndeadHandsNotes": "Mencoba kabur dari genggaman Tangan Mayat Hidup.",
|
||||
"backgroundCrypticCandlesText": "Lilin Gaib"
|
||||
"backgroundVineyardText": "Kebun Anggur"
|
||||
}
|
||||
|
||||
@@ -103,6 +103,5 @@
|
||||
"selectParticipant": "Pilih Seorang Peserta",
|
||||
"wonChallengeDesc": "<%= challengeName %> memilihmu sebagai pemenang! Kemenanganmu telah dimasukkan ke Pencapaian.",
|
||||
"yourReward": "Hadiahmu",
|
||||
"filters": "Filters",
|
||||
"removeTasks": "Hapus Tugas"
|
||||
"filters": "Filters"
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"communityGuidelinesWarning": "Ingatlah bahwa Nama Tampilan, foto profil, dan celotehmu harus mengikuti <a href='https://habitica.com/static/community-guidelines' target='_blank'>Pedoman Komunitas</a> (misalnya, tidak menggunakan bahasa tidak senonoh, topik dewasa, penghinaan, dsb). Jika kamu mempunyai pertanyaan apapun mengenai pantasnya sesuatu hal, silahkan email <%= hrefBlankCommunityManagerEmail %>!",
|
||||
"communityGuidelinesWarning": "Ingatlah bahwa Nama Tampilan, foto profil, dan celotehmu harus mengikuti <a href='https://habitica.com/static/community-guidelines' target='_blank'>Pedoman Komunitas</a> (misalnya, tidak menggunakan bahasa senonoh, topik dewasa, penghinaan, dsb). Jika kamu mempunyai pertanyaan apapun mengenai pantasnya sesuatu hal, silahkan email <%= hrefBlankCommunityManagerEmail %>!",
|
||||
"profile": "Profil",
|
||||
"avatar": "Ubah Tampilan Avatar",
|
||||
"editAvatar": "Sunting Avatar",
|
||||
@@ -15,7 +15,7 @@
|
||||
"imageUrl": "URL Gambar",
|
||||
"inventory": "Inventori",
|
||||
"social": "Sosial",
|
||||
"lvl": "Level",
|
||||
"lvl": "Lvl",
|
||||
"buffed": "Mendapat Buff",
|
||||
"bodyBody": "Tubuh",
|
||||
"size": "Ukuran",
|
||||
@@ -37,7 +37,7 @@
|
||||
"mustache": "Kumis",
|
||||
"flower": "Bunga",
|
||||
"accent": "Aksen",
|
||||
"headband": "Ikat kepala",
|
||||
"headband": "Headband",
|
||||
"wheelchair": "Kursi Roda",
|
||||
"extra": "Ekstra",
|
||||
"rainbowSkins": "Kulit Warna-Warni",
|
||||
@@ -62,10 +62,10 @@
|
||||
"autoEquipPopoverText": "Pilih ini jika kamu ingin langsung memakai perlengkapan setelah membelinya.",
|
||||
"costumeDisabled": "Kamu telah menonaktifkan kostummu.",
|
||||
"gearAchievement": "Kamu mendapat lencana \"Ultimate Gear\" karena sudah mendapat semua perlengkapan sesuai dengan pekerjaanmu! Kamu sudah melengkapi perlengkapan berikut:",
|
||||
"gearAchievementNotification": "Kamu telah memperoleh Pencapaian \"Perlengkapan Terakhir\" karena telah meng-upgrade semua perlengkapan sampai maksimal untuk suatu pekerjaan!",
|
||||
"gearAchievementNotification": "You have earned the \"Ultimate Gear\" Achievement for upgrading to the maximum gear set for a class!",
|
||||
"moreGearAchievements": "Untuk mendapatkan lebih banyak lencana Ultimate Gear, ubah pekerjaanmu di <a href='/user/settings/site' target='_blank'>Pengaturan > Laman Situs</a> dan beli perlengkapan untuk pekerjaan barumu!",
|
||||
"armoireUnlocked": "Kalau ingin lebih banyak perlengkapan, coba cek <strong>Peti Ajaib!</strong> Klik Hadiah Peti Ajaib untuk kesempatan mendapatkan Perlengkapan spesial! Kamu juga bisa mendapatkan pengalaman atau makanan.",
|
||||
"ultimGearName": "Perlengkapan Terakhir - <%= ultClass %>",
|
||||
"ultimGearName": "Ultimate Gear - <%= ultClass %>",
|
||||
"ultimGearText": "Telah meng-upgrade set senjata dan pakaian sampai maksimal untuk pekerjaan <%= ultClass %>.",
|
||||
"level": "Level",
|
||||
"levelUp": "Naik Level!",
|
||||
@@ -85,7 +85,7 @@
|
||||
"allocatePerPop": "Tambahkan satu poin kepada Persepsi",
|
||||
"allocateInt": "Poin yang diberikan untuk Kecerdasan:",
|
||||
"allocateIntPop": "Tambahkan satu poin kepada Kecerdasan",
|
||||
"noMoreAllocate": "Sekarang kamu sudah mencapai level 100, kamu tidak akan mendapat poin atribut lagi. Kamu bisa terus menaikkan level, atau mulai petualangan baru dari level 1 dengan menggunakan <a href='https://habitica.fandom.com/wiki/Orb_of_Rebirth' target='_blank'>Orb of Rebirth</a>!",
|
||||
"noMoreAllocate": "Sekarang kamu sudah mencapai level 100, kamu tidak akan mendapat poin atribut lagi. Kamu bisa terus menaikkan level, atau mulai petualangan baru dari level 1 dengan menggunakan <a href='http://habitica.fandom.com/wiki/Orb_of_Rebirth' target='_blank'>Orb of Rebirth</a>!",
|
||||
"stats": "Atribut",
|
||||
"achievs": "Pencapaian",
|
||||
"strength": "Kekuatan",
|
||||
@@ -164,7 +164,7 @@
|
||||
"per": "PER",
|
||||
"int": "KEC",
|
||||
"notEnoughAttrPoints": "Kamu tidak memiliki cukup Poin Atribut.",
|
||||
"classNotSelected": "Kamu harus memilih Pekerjaan sebelum bisa menempatkan Poin Status.",
|
||||
"classNotSelected": "You must select Class before you can assign Stat Points.",
|
||||
"style": "Gaya",
|
||||
"facialhair": "Wajah",
|
||||
"photo": "Foto",
|
||||
@@ -174,7 +174,7 @@
|
||||
"latestCheckin": "Check In Terakhir",
|
||||
"editProfile": "Edit Profil",
|
||||
"challengesWon": "Tantangan yang Dimenangi",
|
||||
"questsCompleted": "Misi yang diselesaikan",
|
||||
"questsCompleted": "Misi yang Diselesaikan",
|
||||
"headAccess": "Hiasan Kepala.",
|
||||
"backAccess": "Hiasan Punggung.",
|
||||
"bodyAccess": "Hiasan Tubuh.",
|
||||
|
||||
@@ -8,13 +8,13 @@
|
||||
"commGuideHeadingInteractions": "Interactions in Habitica",
|
||||
"commGuidePara015": "Habitica mempunyai dua jenis ruang sosial: umum, dan pribadi. Ruang umum meliputi Kedai Minuman, Guild Umum, GitHub, Trello, dan Wiki. Sedangkan ruang pribadi meliputi Guild Pribadi, obrolan Party, dan Pesan Pribadi. Semua Nama Tampilan dan @namapengguna harus menyesuaikan dengan pedoman ruang publik. Untuk mengganti Nama Tampilanmu dan/atau @namapengguna, pada app mobile pergi ke Menu > Pengaturan > Profil. Pada situs, pergi ke Pengguna > Pengaturan.",
|
||||
"commGuidePara016": "Ketika menjelajahi ruang publik di Habitica, terdapat beberapa peraturan umum untuk memastikan semua orang tetap bahagia dan nyaman.",
|
||||
"commGuideList02A": "<strong>Hormati satu sama lain</strong>. Bersikaplah sopan, baik, ramah, dan suka membantu. Ingat: Para Habitican datang dari segala latar belakang dan punya pengalaman yang berbeda satu dengan yang lain. Inilah yang membuat Habitica sangat digemari! Membangun komunitas yang berarti saling menghormati dan merayakan segala perbedaan dan kesamaan kita semua.",
|
||||
"commGuideList02A": "<strong>Hormati satu sama lain</strong>. Bersikaplah sopan, baik, ramah, dan suka membantu. Ingat: Para Habitican datang dari segala latar belakang dan punya pengalaman yang berbeda satu dengan yang lain. Inilah yang membuat Habitica sangat digemari! Membangun komunitas yang berarti saling menghormati dan merayakan segala perbedaan dan kesamaan kita semua.",
|
||||
"commGuideList02B": "<strong>Patuhi semua<a href='/static/terms' target='_blank'>Syarat dan Ketentuan</a></strong> baik di ruang publik maupun pribadi.",
|
||||
"commGuideList02C": "<strong>Do not post images or text that are violent, threatening, or sexually explicit/suggestive, or that promote discrimination, bigotry, racism, sexism, hatred, harassment or harm against any individual or group</strong>. Not even as a joke. This includes slurs as well as statements. Not everyone has the same sense of humor, and so something that you consider a joke may be hurtful to another. Attack your Dailies, not each other.",
|
||||
"commGuideList02D": "<strong>Keep discussions appropriate for all ages</strong>. We have many young Habiticans who use the site! Let's not tarnish any innocents or hinder any Habiticans in their goals.",
|
||||
"commGuideList02E": "<strong>Avoid profanity. This includes milder, religious-based oaths that may be acceptable elsewhere</strong>. We have people from all religious and cultural backgrounds, and we want to make sure that all of them feel comfortable in public spaces. <strong>If a moderator or staff member tells you that a term is disallowed on Habitica, even if it is a term that you did not realize was problematic, that decision is final</strong>. Additionally, slurs will be dealt with very severely, as they are also a violation of the Terms of Service.",
|
||||
"commGuideList02F": "<strong>Avoid extended discussions of divisive topics in the Tavern and where it would be off-topic</strong>. If you feel that someone has said something rude or hurtful, do not engage them. If someone mentions something that is allowed by the guidelines but which is hurtful to you, it’s okay to politely let someone know that. If it is against the guidelines or the Terms of Service, you should flag it and let a mod respond. When in doubt, flag the post.",
|
||||
"commGuideList02G": "<strong>Patuhi segera segala permintaan Moderator.</strong> Ini juga termasuk, tetapi tidak terbatas pada, memintamu untuk membatasi jumlah postinganmu di ruang tertentu, menghapus konten yang tidak sesuai dari profil, memindahkan diskusimu ke tempat yang lebih sesuai, dll. Jangan berdebat dengan moderator. Jika kamu mempunyai masalah atau pendapat terkait cara bersikap, kirimkan email pada <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>untuk ditindaklanjuti oleh manager komunitas kami.",
|
||||
"commGuideList02G": "<strong>Patuhi segera segala permintaan Moderator.</strong> Ini juga termasuk, tetapi tidak terbatas pada, memintamu untuk membatasi jumlah postinganmu di ruang tertentu, menghapus konten yang tidak sesuai dari profil, memindahkan diskusimu ke tempat yang lebih sesuai, dll. Jangan berdebat dengan moderator. Jika kamu mempunyai masalah atau pendapat terkait cara bersikap, kirimkan email pada <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a>untuk ditindaklanjuti oleh manager komunitas kami.",
|
||||
"commGuideList02J": "<strong>Do not spam</strong>. Spamming may include, but is not limited to: posting the same comment or query in multiple places, posting links without explanation or context, posting nonsensical messages, posting multiple promotional messages about a Guild, Party or Challenge, or posting many messages in a row. Asking for gems or a subscription in any of the chat spaces or via Private Message is also considered spamming. If people clicking on a link will result in any benefit to you, you need to disclose that in the text of your message or that will also be considered spam.<br/><br/>It is up to the mods to decide if something constitutes spam or might lead to spam, even if you don’t feel that you have been spamming. For example, advertising a Guild is acceptable once or twice, but multiple posts in one day would probably constitute spam, no matter how useful the Guild is!",
|
||||
"commGuideList02K": "<strong>Avoid posting large header text in the public chat spaces, particularly the Tavern</strong>. Much like ALL CAPS, it reads as if you were yelling, and interferes with the comfortable atmosphere.",
|
||||
"commGuideList02L": "<strong>Kami sangat tidak menyarankan pertukaran informasi pribadi -- khususnya informasi yang dapat digunakan untuk mengidentifikasimu -- di ruang obrolan umum</strong>. Informasi mengidentifikasi dapat termasuk, namun tidak terbatas pada: alamat kamu, alamat email kamu, dan token API/passwordmu. Ini untuk keamananmu! Staf ataupun moderator bisa menghapus postingan sesuai kebijakan mereka. Jika kamu diminta untuk memberi informasi pribadi di dalam sebuah Guild tertutup (?), Party, atau PM, kami sangat menyarankan kamu menolak dengan sopan kemudian menyiagakan staf dan moderator dengan 1) menandakan pesan jika di dalam sebuah Party atau Guild tertutup, atau 2) mengisi <a href='https://contact.habitica.com/' target='_blank'>Kontak Form Moderator</a> dengan tangkapan layar.",
|
||||
@@ -109,7 +109,7 @@
|
||||
"commGuidePara013": "In a community as big as Habitica, users come and go, and sometimes a staff member or moderator needs to lay down their noble mantle and relax. The following are Staff and Moderators Emeritus. They no longer act with the power of a Staff member or Moderator, but we would still like to honor their work!",
|
||||
"commGuidePara014": "Staff and Moderators Emeritus:",
|
||||
"commGuideHeadingFinal": "Bagian Terakhir",
|
||||
"commGuidePara067": "Maka terimalah ini, wahai Habitican pemberani -- Pedoman Komunitas! Hapus penat keringat di keningmu dan hadiahkan dirimu XP karna telah membaca ini semua. jika kamu masih memiliki pertanyaan mengenai Pedoman Komunitas ini, mohon beritahu kami melalui <a href='mailto:admin@habitica.com' target='_blank'>admin@habitica.com</a> dan kami akan dengan senang hati membantumu.",
|
||||
"commGuidePara067": "Maka terimalah ini, wahai Habitican pemberani -- Pedoman Komunitas! Hapus penat keringat di keningmu dan hadiahkan dirimu XP karna telah membaca ini semua. jika kamu masih memiliki pertanyaan mengenai Pedoman Komunitas ini, mohon beritahu kami melalui <a href='https://contact.habitica.com/' target='_blank'>Formulir Kontak Moderator</a>dan kami akan dengan senang hati membantumu.",
|
||||
"commGuidePara068": "Sekarang majulah, pengembara yang berani, dan kalahkan tugas-tugas itu!",
|
||||
"commGuideHeadingLinks": "Link yang Berguna",
|
||||
"commGuideLink01": "<a href='/groups/guild/5481ccf3-5d2d-48a9-a871-70a7380cee5a' target='_blank'>Habitica Help: Ask a Question</a>: a Guild for users to ask questions!",
|
||||
|
||||
@@ -49,10 +49,9 @@
|
||||
"balance": "Saldo",
|
||||
"playerTiers": "Tingkatan Pemain",
|
||||
"tier": "Tingkat",
|
||||
"conRewardsURL": "https://habitica.fandom.com/wiki/Contributor_Rewards",
|
||||
"conRewardsURL": "http://habitica.fandom.com/wiki/Contributor_Rewards",
|
||||
"surveysSingle": "Membantu Habitica berkembang, baik dengan mengisi survey atau membantu dalam pengujian utama. Terima kasih!",
|
||||
"surveysMultiple": "Membantu Habitica berkembang sebanyak <%= count %> kali, baik dengan mengisi survey atau membantu dalam pengujian utama. Terima kasih!",
|
||||
"blurbHallPatrons": "Ini adalah Aula Patron, di mana kami memberi penghormatan kepada para petualang pemberani yang telah membantu Kickstarter asli Habitica. Kami berterima kasih kepada mereka yang membantu kami mewujudkan Habitica menjadi kenyataan!",
|
||||
"blurbHallContributors": "Ini adalah Aula para Kontributor, di mana kontributor open-source Habitica dicantumkan. Baik melalui kode, seni, musik, tulisan, atau bahkan hanya pertolongan kecil, mereka mendapatkan <a href='https://habitica.fandom.com/wiki/Contributor_Rewards' target='_blank'>permata, perlengkapan eksklusif </a>, dan <a href='https://habitica.fandom.com/wiki/Contributor_Titles' target='_blank'>titel kebanggaan </a>. Kamu juga bisa berkontribusi untuk Habitica! <a href='https://habitica.fandom.com/wiki/Contributing_to_Habitica' target='_blank'> Lihat Selengkapnya. </a>",
|
||||
"noPrivAccess": "Kamu tidak memiliki hak yang diperlukan."
|
||||
"blurbHallContributors": "Ini adalah Aula para Kontributor, di mana kontributor open-source Habitica dicantumkan. Baik melalui kode, seni, musik, tulisan, atau bahkan hanya pertolongan kecil, mereka mendapatkan <a href='http://habitica.fandom.com/wiki/Contributor_Rewards' target='_blank'>permata, perlengkapan eksklusif </a>, dan <a href='http://habitica.fandom.com/wiki/Contributor_Titles' target='_blank'>titel kebanggaan </a>. Kamu juga bisa berkontribusi untuk Habitica! <a href='http://habitica.fandom.com/wiki/Contributing_to_Habitica' target='_blank'> Lihat Selengkapnya. </a>"
|
||||
}
|
||||
|
||||