mirror of
https://github.com/HabitRPG/habitica.git
synced 2025-12-17 06:37:23 +01:00
Implement new scheduling for time travelers shop
This commit is contained in:
committed by
Sabe Jones
parent
ce796fa1d9
commit
278d9b74f9
@@ -1,18 +1,26 @@
|
||||
import moment from 'moment';
|
||||
|
||||
function backgroundMatcher(month, oddYear) {
|
||||
return function (background) {
|
||||
const key = background.set.key;
|
||||
const keyLength = key.length;
|
||||
return parseInt(key.substring(keyLength-6, keyLength-4)) === month && parseInt(key.subtring(keyLength-2, keyLength)) % 2 === oddYear;
|
||||
}
|
||||
function backgroundMatcher (month1, month2, oddYear) {
|
||||
return function call (key) {
|
||||
if (!key.startsWith('backgrounds')) return true;
|
||||
const keyLength = key.length;
|
||||
const month = parseInt(key.substring(keyLength - 6, keyLength - 4), 10);
|
||||
return (month === month1 || month === month2)
|
||||
&& parseInt(key.substring(keyLength - 2, keyLength), 10) % 2 === (oddYear ? 1 : 0);
|
||||
};
|
||||
}
|
||||
|
||||
function timeTravelersMatcher(month1, month2) {
|
||||
return function (item) {
|
||||
console.log(item, month1, month2)
|
||||
return item;
|
||||
}
|
||||
function timeTravelersMatcher (month1, month2) {
|
||||
return function call (item) {
|
||||
const itemMonth = parseInt(item.substring(4, 6), 10);
|
||||
return itemMonth === month1 || itemMonth === month2;
|
||||
};
|
||||
}
|
||||
|
||||
function inListMatcher (list) {
|
||||
return function call (item) {
|
||||
return list.indexOf(item) !== -1;
|
||||
};
|
||||
}
|
||||
|
||||
export const FIRST_RELEASE_DAY = 1;
|
||||
@@ -21,204 +29,262 @@ export const THIRD_RELEASE_DAY = 14;
|
||||
export const FOURTH_RELEASE_DAY = 21;
|
||||
|
||||
export const MONTHLY_SCHEDULE = {
|
||||
0: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(1, 7),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
1: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(2, 8),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
2: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(3, 9),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
3: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(4, 10),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
4: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(5, 11),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
5: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(6, 12),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
6: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(7, 1),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
7: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(8, 2),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
8: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(9, 3),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
9: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(10, 4),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
10: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(11, 5),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
11: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
"type": "timeTravelers",
|
||||
"matcher": timeTravelersMatcher(12, 6),
|
||||
}
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
0: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(1, 7),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(1, 7, false),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'petQuests',
|
||||
matcher: inListMatcher([
|
||||
'ghost_stag',
|
||||
'trex',
|
||||
'harpy',
|
||||
'sabretooth',
|
||||
'dolphin',
|
||||
]),
|
||||
},
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
1: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(2, 8),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(2, 8, false),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
2: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(3, 9),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(3, 9, false),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
3: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(4, 10),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(4, 10, false),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
4: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(5, 11),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(5, 11, false),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
5: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(6, 12),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(6, 12, false),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
6: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(7, 1),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(7, 1, true),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
7: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(8, 2),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(8, 2, true),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
8: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(9, 3),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(9, 3, true),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
9: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(10, 4),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(10, 4, true),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
10: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(11, 5),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(11, 5, true),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
11: {
|
||||
[FIRST_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'timeTravelers',
|
||||
matcher: timeTravelersMatcher(12, 6),
|
||||
},
|
||||
],
|
||||
[SECOND_RELEASE_DAY]: [
|
||||
{
|
||||
type: 'backgrounds',
|
||||
matcher: backgroundMatcher(12, 6, true),
|
||||
},
|
||||
],
|
||||
[THIRD_RELEASE_DAY]: [
|
||||
],
|
||||
[FOURTH_RELEASE_DAY]: [
|
||||
],
|
||||
},
|
||||
};
|
||||
|
||||
export const GALA_SWITCHOVER_DAY = 21;
|
||||
export const GALA_SCHEDULE = {
|
||||
0: [],
|
||||
1: [],
|
||||
2: [],
|
||||
3: [],
|
||||
0: [],
|
||||
1: [],
|
||||
2: [],
|
||||
3: [],
|
||||
};
|
||||
|
||||
export function assembleScheduledMatchers(date) {
|
||||
const items = [];
|
||||
const month = date instanceof moment ? date.month() : date.getMonth();
|
||||
const todayDay = date instanceof moment ? date.date() : date.getDate();
|
||||
const previousMonth = month === 0 ? 11 : month - 1;
|
||||
for (const [day, value] of Object.entries(MONTHLY_SCHEDULE[previousMonth])) {
|
||||
if (day > todayDay) {
|
||||
items.push(...value);
|
||||
}
|
||||
export function assembleScheduledMatchers (date) {
|
||||
const items = [];
|
||||
const month = date instanceof moment ? date.month() : date.getMonth();
|
||||
const todayDay = date instanceof moment ? date.date() : date.getDate();
|
||||
const previousMonth = month === 0 ? 11 : month - 1;
|
||||
for (const [day, value] of Object.entries(MONTHLY_SCHEDULE[previousMonth])) {
|
||||
if (day > todayDay) {
|
||||
items.push(...value);
|
||||
}
|
||||
for (const [day, value] of Object.entries(MONTHLY_SCHEDULE[month])) {
|
||||
if (day <= todayDay) {
|
||||
items.push(...value);
|
||||
}
|
||||
}
|
||||
for (const [day, value] of Object.entries(MONTHLY_SCHEDULE[month])) {
|
||||
if (day <= todayDay) {
|
||||
items.push(...value);
|
||||
}
|
||||
let galaMonth = month;
|
||||
const galaCount = Object.keys(GALA_SCHEDULE).length;
|
||||
if (todayDay >= GALA_SWITCHOVER_DAY) {
|
||||
galaMonth += 1;
|
||||
}
|
||||
items.push(...GALA_SCHEDULE[parseInt((galaCount / 12) * galaMonth)]);
|
||||
return items;
|
||||
}
|
||||
}
|
||||
let galaMonth = month;
|
||||
const galaCount = Object.keys(GALA_SCHEDULE).length;
|
||||
if (todayDay >= GALA_SWITCHOVER_DAY) {
|
||||
galaMonth += 1;
|
||||
}
|
||||
items.push(...GALA_SCHEDULE[parseInt((galaCount / 12) * galaMonth, 10)]);
|
||||
return items;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user