Merged in develop

This commit is contained in:
Keith Holliday
2017-06-27 22:23:13 -06:00
897 changed files with 50434 additions and 41464 deletions
@@ -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 = [
+6
View File
@@ -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: {
+10
View File
@@ -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',
+38 -6
View File
@@ -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) => {
+56
View File
@@ -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;
},
},
+62 -29
View File
@@ -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;
}
+7 -1
View File
@@ -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});
});
+12
View File
@@ -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 = [