Merged in develop
This commit is contained in:
@@ -107,6 +107,11 @@ let basicAchievs = {
|
||||
titleKey: 'joinedGuild',
|
||||
textKey: 'joinedGuildText',
|
||||
},
|
||||
joinedChallenge: {
|
||||
icon: 'achievement-challenge',
|
||||
titleKey: 'joinedChallenge',
|
||||
textKey: 'joinedChallengeText',
|
||||
},
|
||||
};
|
||||
Object.assign(achievementsData, basicAchievs);
|
||||
|
||||
@@ -181,7 +186,7 @@ let ultimateGearAchievs = ['healer', 'rogue', 'warrior', 'mage'].reduce((achievs
|
||||
}, {});
|
||||
Object.assign(achievementsData, ultimateGearAchievs);
|
||||
|
||||
let cardAchievs = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday'].reduce((achievs, type) => {
|
||||
let cardAchievs = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday', 'congrats', 'getwell'].reduce((achievs, type) => {
|
||||
achievs[`${type}Cards`] = {
|
||||
icon: `achievement-${type}`,
|
||||
titleKey: `${type}CardAchievementTitle`,
|
||||
|
||||
@@ -28,6 +28,7 @@ export const EVENTS = {
|
||||
fall2016: { start: '2016-09-20', end: '2016-11-02' },
|
||||
winter2017: { start: '2016-12-16', end: '2017-02-02' },
|
||||
spring2017: { start: '2017-03-21', end: '2017-05-02' },
|
||||
summer2017: { start: '2017-06-20', end: '2017-08-02' },
|
||||
};
|
||||
|
||||
export const GEAR_TYPES = [
|
||||
|
||||
@@ -320,6 +320,12 @@ let quests = {
|
||||
adjective: t('questEggButterflyAdjective'),
|
||||
canBuy: hasQuestAchievementFunction('butterfly'),
|
||||
},
|
||||
Nudibranch: {
|
||||
text: t('questEggNudibranchText'),
|
||||
mountText: t('questEggNudibranchMountText'),
|
||||
adjective: t('questEggNudibranchAdjective'),
|
||||
canBuy: hasQuestAchievementFunction('nudibranch'),
|
||||
},
|
||||
};
|
||||
|
||||
applyEggDefaults(drops, {
|
||||
|
||||
@@ -244,6 +244,12 @@ let back = {
|
||||
mystery: '201704',
|
||||
value: 0,
|
||||
},
|
||||
201706: {
|
||||
text: t('backMystery201706Text'),
|
||||
notes: t('backMystery201706Notes'),
|
||||
mystery: '201706',
|
||||
value: 0,
|
||||
},
|
||||
};
|
||||
|
||||
let body = {
|
||||
@@ -253,6 +259,12 @@ let body = {
|
||||
mystery: '201705',
|
||||
value: 0,
|
||||
},
|
||||
201706: {
|
||||
text: t('bodyMystery201706Text'),
|
||||
notes: t('bodyMystery201706Notes'),
|
||||
mystery: '201706',
|
||||
value: 0,
|
||||
},
|
||||
};
|
||||
|
||||
let eyewear = {
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -3,7 +3,7 @@ import defaults from 'lodash/defaults';
|
||||
import each from 'lodash/each';
|
||||
import t from './translation';
|
||||
|
||||
const CURRENT_SEASON = 'June';
|
||||
const CURRENT_SEASON = 'None';
|
||||
|
||||
let drops = {
|
||||
Base: {
|
||||
|
||||
@@ -144,6 +144,16 @@ api.cardTypes = {
|
||||
messageOptions: 1,
|
||||
yearRound: true,
|
||||
},
|
||||
congrats: {
|
||||
key: 'congrats',
|
||||
messageOptions: 5,
|
||||
yearRound: true,
|
||||
},
|
||||
getwell: {
|
||||
key: 'getwell',
|
||||
messageOptions: 4,
|
||||
yearRound: true,
|
||||
},
|
||||
};
|
||||
|
||||
api.special = api.spells.special;
|
||||
|
||||
@@ -162,6 +162,10 @@ let mysterySets = {
|
||||
start: '2017-05-23',
|
||||
end: '2017-06-02',
|
||||
},
|
||||
201706: {
|
||||
start: '2017-06-22',
|
||||
end: '2017-07-02',
|
||||
},
|
||||
301404: {
|
||||
start: '3014-03-24',
|
||||
end: '3014-04-02',
|
||||
|
||||
@@ -442,7 +442,7 @@ let quests = {
|
||||
collect: {
|
||||
lightCrystal: {
|
||||
text: t('questVice2CollectLightCrystal'),
|
||||
count: 45,
|
||||
count: 30,
|
||||
},
|
||||
},
|
||||
drop: {
|
||||
@@ -511,7 +511,7 @@ let quests = {
|
||||
collect: {
|
||||
plainEgg: {
|
||||
text: t('questEggHuntCollectPlainEgg'),
|
||||
count: 100,
|
||||
count: 40,
|
||||
},
|
||||
},
|
||||
drop: {
|
||||
@@ -846,7 +846,7 @@ let quests = {
|
||||
collect: {
|
||||
moonstone: {
|
||||
text: t('questMoonstone1CollectMoonstone'),
|
||||
count: 500,
|
||||
count: 100,
|
||||
},
|
||||
},
|
||||
drop: {
|
||||
@@ -953,7 +953,7 @@ let quests = {
|
||||
collect: {
|
||||
testimony: {
|
||||
text: t('questGoldenknight1CollectTestimony'),
|
||||
count: 300,
|
||||
count: 60,
|
||||
},
|
||||
},
|
||||
drop: {
|
||||
@@ -1396,11 +1396,11 @@ let quests = {
|
||||
collect: {
|
||||
fireCoral: {
|
||||
text: t('questDilatoryDistress1CollectFireCoral'),
|
||||
count: 25,
|
||||
count: 20,
|
||||
},
|
||||
blueFins: {
|
||||
text: t('questDilatoryDistress1CollectBlueFins'),
|
||||
count: 25,
|
||||
count: 20,
|
||||
},
|
||||
},
|
||||
drop: {
|
||||
@@ -2688,6 +2688,38 @@ let quests = {
|
||||
exp: 650,
|
||||
},
|
||||
},
|
||||
nudibranch: {
|
||||
text: t('questNudibranchText'),
|
||||
notes: t('questNudibranchNotes'),
|
||||
completion: t('questNudibranchCompletion'),
|
||||
value: 4,
|
||||
category: 'pet',
|
||||
boss: {
|
||||
name: t('questNudibranchBoss'),
|
||||
hp: 400,
|
||||
str: 1.5,
|
||||
},
|
||||
drop: {
|
||||
items: [
|
||||
{
|
||||
type: 'eggs',
|
||||
key: 'Nudibranch',
|
||||
text: t('questNudibranchDropNudibranchEgg'),
|
||||
}, {
|
||||
type: 'eggs',
|
||||
key: 'Nudibranch',
|
||||
text: t('questNudibranchDropNudibranchEgg'),
|
||||
}, {
|
||||
type: 'eggs',
|
||||
key: 'Nudibranch',
|
||||
text: t('questNudibranchDropNudibranchEgg'),
|
||||
},
|
||||
],
|
||||
gp: 31,
|
||||
exp: 200,
|
||||
unlock: t('questNudibranchUnlockText'),
|
||||
},
|
||||
},
|
||||
};
|
||||
|
||||
each(quests, (v, key) => {
|
||||
|
||||
@@ -511,6 +511,62 @@ spells.special = {
|
||||
if (!target.flags) target.flags = {};
|
||||
target.flags.cardReceived = true;
|
||||
|
||||
user.stats.gp -= 10;
|
||||
},
|
||||
},
|
||||
congrats: {
|
||||
text: t('congratsCard'),
|
||||
mana: 0,
|
||||
value: 10,
|
||||
immediateUse: true,
|
||||
silent: true,
|
||||
target: 'user',
|
||||
notes: t('congratsCardNotes'),
|
||||
cast (user, target) {
|
||||
if (user === target) {
|
||||
if (!user.achievements.congrats) user.achievements.congrats = 0;
|
||||
user.achievements.congrats++;
|
||||
} else {
|
||||
each([user, target], (u) => {
|
||||
if (!u.achievements.congrats) u.achievements.congrats = 0;
|
||||
u.achievements.congrats++;
|
||||
});
|
||||
}
|
||||
|
||||
if (!target.items.special.congratsReceived) target.items.special.congratsReceived = [];
|
||||
target.items.special.congratsReceived.push(user.profile.name);
|
||||
|
||||
if (!target.flags) target.flags = {};
|
||||
target.flags.cardReceived = true;
|
||||
|
||||
user.stats.gp -= 10;
|
||||
},
|
||||
},
|
||||
getwell: {
|
||||
text: t('getwellCard'),
|
||||
mana: 0,
|
||||
value: 10,
|
||||
immediateUse: true,
|
||||
silent: true,
|
||||
target: 'user',
|
||||
notes: t('getwellCardNotes'),
|
||||
cast (user, target) {
|
||||
if (user === target) {
|
||||
if (!user.achievements.getwell) user.achievements.getwell = 0;
|
||||
user.achievements.getwell++;
|
||||
} else {
|
||||
each([user, target], (u) => {
|
||||
if (!u.achievements.getwell) u.achievements.getwell = 0;
|
||||
u.achievements.getwell++;
|
||||
});
|
||||
}
|
||||
|
||||
if (!target.items.special.getwellReceived) target.items.special.getwellReceived = [];
|
||||
target.items.special.getwellReceived.push(user.profile.name);
|
||||
|
||||
if (!target.flags) target.flags = {};
|
||||
target.flags.cardReceived = true;
|
||||
|
||||
user.stats.gp -= 10;
|
||||
},
|
||||
},
|
||||
|
||||
@@ -96,7 +96,7 @@ export function daysSince (yesterday, options = {}) {
|
||||
*/
|
||||
|
||||
export function shouldDo (day, dailyTask, options = {}) {
|
||||
if (dailyTask.type !== 'daily') {
|
||||
if (dailyTask.type !== 'daily' || dailyTask.startDate === null || dailyTask.everyX < 1 || dailyTask.everyX > 9999) {
|
||||
return false;
|
||||
}
|
||||
let o = sanitizeOptions(options);
|
||||
@@ -112,7 +112,6 @@ export function shouldDo (day, dailyTask, options = {}) {
|
||||
}
|
||||
|
||||
let daysOfTheWeek = [];
|
||||
|
||||
if (dailyTask.repeat) {
|
||||
for (let [repeatDay, active] of Object.entries(dailyTask.repeat)) {
|
||||
if (!isFinite(DAY_MAPPING_STRING_TO_NUMBER[repeatDay])) continue; // eslint-disable-line no-continue
|
||||
@@ -125,7 +124,14 @@ export function shouldDo (day, dailyTask, options = {}) {
|
||||
let schedule = moment(startDate).recur()
|
||||
.every(dailyTask.everyX).days();
|
||||
|
||||
if (options.nextDue) return schedule.fromDate(startOfDayWithCDSTime).next(6);
|
||||
if (options.nextDue) {
|
||||
let filteredDates = [];
|
||||
for (let i = 1; filteredDates.length < 6; i++) {
|
||||
let calcDate = moment(startDate).add(dailyTask.everyX * i, 'days');
|
||||
if (calcDate > startOfDayWithCDSTime) filteredDates.push(calcDate);
|
||||
}
|
||||
return filteredDates;
|
||||
}
|
||||
|
||||
return schedule.matches(startOfDayWithCDSTime);
|
||||
} else if (dailyTask.frequency === 'weekly') {
|
||||
@@ -136,15 +142,20 @@ export function shouldDo (day, dailyTask, options = {}) {
|
||||
|
||||
if (daysOfTheWeek.length === 0) return false;
|
||||
schedule = schedule.every(daysOfTheWeek).daysOfWeek();
|
||||
|
||||
if (options.nextDue) {
|
||||
let dates = schedule.fromDate(startOfDayWithCDSTime.subtract('1', 'days')).next(6);
|
||||
let filterDates = dates.filter((momentDate) => {
|
||||
let weekDiff = momentDate.week() - moment(startDate).week();
|
||||
let matchX = weekDiff % dailyTask.everyX === 0;
|
||||
return matchX;
|
||||
let filteredDates = [];
|
||||
for (let i = 0; filteredDates.length < 6; i++) {
|
||||
for (let j = 0; j < daysOfTheWeek.length && filteredDates.length < 6; j++) {
|
||||
let calcDate = moment(startDate).day(daysOfTheWeek[j]).add(dailyTask.everyX * i, 'weeks');
|
||||
if (calcDate > startOfDayWithCDSTime) filteredDates.push(calcDate);
|
||||
}
|
||||
}
|
||||
let sortedDates = filteredDates.sort((date1, date2) => {
|
||||
if (date1.toDate() > date2.toDate()) return 1;
|
||||
if (date2.toDate() > date1.toDate()) return -1;
|
||||
return 0;
|
||||
});
|
||||
return filterDates;
|
||||
return sortedDates;
|
||||
}
|
||||
|
||||
return schedule.matches(startOfDayWithCDSTime) && matchEveryX;
|
||||
@@ -155,20 +166,44 @@ export function shouldDo (day, dailyTask, options = {}) {
|
||||
let matchEveryX = differenceInMonths % dailyTask.everyX === 0;
|
||||
|
||||
if (dailyTask.weeksOfMonth && dailyTask.weeksOfMonth.length > 0) {
|
||||
if (daysOfTheWeek.length === 0) return false;
|
||||
schedule = schedule.every(daysOfTheWeek).daysOfWeek()
|
||||
.every(dailyTask.weeksOfMonth).weeksOfMonthByDay();
|
||||
.every(dailyTask.weeksOfMonth).weeksOfMonthByDay();
|
||||
|
||||
if (options.nextDue) {
|
||||
let filteredDates = [];
|
||||
for (let i = 1; filteredDates.length < 6; i++) {
|
||||
let recurDate = moment(startDate).add(dailyTask.everyX * i, 'months');
|
||||
let calcDate = recurDate.clone();
|
||||
calcDate.day(daysOfTheWeek[0]);
|
||||
|
||||
let startDateWeek = Math.ceil(moment(startDate).date() / 7);
|
||||
let calcDateWeek = Math.ceil(calcDate.date() / 7);
|
||||
|
||||
// adjust week since weeks will rollover to other months
|
||||
if (calcDate.month() < recurDate.month()) calcDate.add(1, 'weeks');
|
||||
else if (calcDate.month() > recurDate.month()) calcDate.subtract(1, 'weeks');
|
||||
else if (calcDateWeek > startDateWeek) calcDate.subtract(1, 'weeks');
|
||||
else if (calcDateWeek < startDateWeek) calcDate.add(1, 'weeks');
|
||||
|
||||
calcDateWeek = Math.ceil(calcDate.date() / 7);
|
||||
|
||||
if (calcDate >= startOfDayWithCDSTime &&
|
||||
calcDateWeek === startDateWeek && calcDate.month() === recurDate.month()) filteredDates.push(calcDate);
|
||||
}
|
||||
return filteredDates;
|
||||
}
|
||||
return schedule.matches(startOfDayWithCDSTime) && matchEveryX;
|
||||
} else if (dailyTask.daysOfMonth && dailyTask.daysOfMonth.length > 0) {
|
||||
schedule = schedule.every(dailyTask.daysOfMonth).daysOfMonth();
|
||||
}
|
||||
|
||||
if (options.nextDue) {
|
||||
let dates = schedule.fromDate(startOfDayWithCDSTime).next(6);
|
||||
let filterDates = dates.filter((momentDate) => {
|
||||
let monthDiff = momentDate.month() - moment(startDate).month();
|
||||
let matchX = monthDiff % dailyTask.everyX === 0;
|
||||
return matchX;
|
||||
});
|
||||
return filterDates;
|
||||
if (options.nextDue) {
|
||||
let filteredDates = [];
|
||||
for (let i = 1; filteredDates.length < 6; i++) {
|
||||
let calcDate = moment(startDate).add(dailyTask.everyX * i, 'months');
|
||||
if (calcDate >= startOfDayWithCDSTime) filteredDates.push(calcDate);
|
||||
}
|
||||
return filteredDates;
|
||||
}
|
||||
}
|
||||
|
||||
return schedule.matches(startOfDayWithCDSTime) && matchEveryX;
|
||||
@@ -178,17 +213,15 @@ export function shouldDo (day, dailyTask, options = {}) {
|
||||
schedule = schedule.every(dailyTask.everyX).years();
|
||||
|
||||
if (options.nextDue) {
|
||||
let dates = schedule.fromDate(startOfDayWithCDSTime).next(6);
|
||||
let filterDates = dates.filter((momentDate) => {
|
||||
let monthDiff = momentDate.years() - moment(startDate).years();
|
||||
let matchX = monthDiff % dailyTask.everyX === 0;
|
||||
return matchX;
|
||||
});
|
||||
return filterDates;
|
||||
let filteredDates = [];
|
||||
for (let i = 1; filteredDates.length < 6; i++) {
|
||||
let calcDate = moment(startDate).add(dailyTask.everyX * i, 'years');
|
||||
if (calcDate > startOfDayWithCDSTime) filteredDates.push(calcDate);
|
||||
}
|
||||
return filteredDates;
|
||||
}
|
||||
|
||||
return schedule.matches(startOfDayWithCDSTime);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -181,6 +181,7 @@ function _getBasicAchievements (user, language) {
|
||||
_addSimple(result, user, {path: 'partyOn', language});
|
||||
_addSimple(result, user, {path: 'joinedGuild', language});
|
||||
_addSimple(result, user, {path: 'royallyLoyal', language});
|
||||
_addSimple(result, user, {path: 'joinedChallenge', language});
|
||||
|
||||
_addSimpleWithMasterCount(result, user, {path: 'beastMaster', language});
|
||||
_addSimpleWithMasterCount(result, user, {path: 'mountMaster', language});
|
||||
@@ -191,6 +192,11 @@ function _getBasicAchievements (user, language) {
|
||||
_addUltimateGear(result, user, {path: 'warrior', language});
|
||||
_addUltimateGear(result, user, {path: 'mage', altPath: 'wizard', language});
|
||||
|
||||
let cardAchievements = ['greeting', 'thankyou', 'birthday', 'congrats', 'getwell'];
|
||||
cardAchievements.forEach(path => {
|
||||
_addSimpleWithCount(result, user, {path, key: `${path}Cards`, language});
|
||||
});
|
||||
|
||||
let rebirthTitle;
|
||||
let rebirthText;
|
||||
|
||||
@@ -240,7 +246,7 @@ function _getSeasonalAchievements (user, language) {
|
||||
|
||||
_addPlural(result, user, {path: 'costumeContests', language});
|
||||
|
||||
let cardAchievements = ['greeting', 'thankyou', 'nye', 'valentine', 'birthday'];
|
||||
let cardAchievements = ['nye', 'valentine'];
|
||||
cardAchievements.forEach(path => {
|
||||
_addSimpleWithCount(result, user, {path, key: `${path}Cards`, language});
|
||||
});
|
||||
|
||||
@@ -297,6 +297,18 @@ shops.getTimeTravelersCategories = function getTimeTravelersCategories (user, la
|
||||
// };
|
||||
shops.getSeasonalShopCategories = function getSeasonalShopCategories (user, language) {
|
||||
const AVAILABLE_SETS = {
|
||||
summerHealer: i18n.t('reefSeahealerSet', language),
|
||||
summer2015Healer: i18n.t('strappingSailorSet', language),
|
||||
summer2016Healer: i18n.t('summer2016SeahorseHealerSet', language),
|
||||
summerMage: i18n.t('emeraldMermageSet', language),
|
||||
summer2015Mage: i18n.t('shipSoothsayerSet', language),
|
||||
summer2016Mage: i18n.t('summer2016DolphinMageSet', language),
|
||||
summerRogue: i18n.t('roguishPirateSet', language),
|
||||
summer2015Rogue: i18n.t('reefRenegadeSet', language),
|
||||
summer2016Rogue: i18n.t('summer2016EelSet', language),
|
||||
summerWarrior: i18n.t('daringSwashbucklerSet', language),
|
||||
summer2015Warrior: i18n.t('sunfishWarriorSet', language),
|
||||
summer2016Warrior: i18n.t('summer2016SharkWarriorSet', language),
|
||||
};
|
||||
|
||||
const AVAILABLE_SPELLS = [
|
||||
|
||||
Reference in New Issue
Block a user