Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
54 changes: 46 additions & 8 deletions server/src/configs/custom-environment-variables.json
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,10 @@
"hideOldPokestops": {
"__name": "API_HIDE_OLD_POKESTOPS",
"__format": "boolean"
},
"fetchTimeoutMs": {
"__name": "API_FETCH_TIMEOUT_MS",
"__format": "number"
}
},
"multiDomains": {
Expand Down Expand Up @@ -621,6 +625,18 @@
"gymBadges": {
"__name": "DEFAULT_FILTERS_GYMS_GYM_BADGES",
"__format": "boolean"
},
"baseRaidTiers": {
"__name": "DEFAULT_FILTERS_GYMS_BASE_RAID_TIERS",
"__format": "json"
},
"baseTeamIds": {
"__name": "DEFAULT_FILTERS_GYMS_BASE_TEAM_IDS",
"__format": "json"
},
"baseGymSlotAmounts": {
"__name": "DEFAULT_FILTERS_GYMS_BASE_GYM_SLOT_AMOUNTS",
"__format": "json"
}
},
"nests": {
Expand Down Expand Up @@ -686,6 +702,36 @@
"allInvasions": {
"__name": "DEFAULT_FILTERS_POKESTOPS_ALL_INVASIONS",
"__format": "boolean"
},
"rewardTypes": {
"__name": "DEFAULT_FILTERS_POKESTOPS_REWARD_TYPES",
"__format": "boolean"
},
"baseMegaEnergyAmounts": {
"__name": "DEFAULT_FILTERS_POKESTOPS_BASE_MEGA_ENERGY_AMOUNTS",
"__format": "json"
},
"baseLureIds": {
"__name": "DEFAULT_FILTERS_POKESTOPS_BASE_LURE_IDS",
"__format": "json"
},
"stardust": {
"min": {
"__name": "DEFAULT_FILTERS_POKESTOPS_STARDUST_MIN",
"__format": "number"
},
"max": {
"__name": "DEFAULT_FILTERS_POKESTOPS_STARDUST_MAX",
"__format": "number"
},
"interval": {
"__name": "DEFAULT_FILTERS_POKESTOPS_STARDUST_INTERVAL",
"__format": "number"
},
"enabled": {
"__name": "DEFAULT_FILTERS_POKESTOPS_STARDUST_ENABLED",
"__format": "boolean"
}
}
},
"pokemon": {
Expand Down Expand Up @@ -782,14 +828,6 @@
"maxConnections": {
"__name": "DATABASE_SETTINGS_MAX_CONNECTIONS",
"__format": "number"
},
"startupDelayMs": {
"__name": "DATABASE_SETTINGS_STARTUP_DELAY_MS",
"__format": "number"
},
"availableRetryCount": {
"__name": "DATABASE_SETTINGS_AVAILABLE_RETRY_COUNT",
"__format": "number"
}
},
"schemas": {
Expand Down
42 changes: 40 additions & 2 deletions server/src/configs/default.json
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,27 @@
"raids": true,
"eggs": true,
"pokemon": true,
"gymBadges": false
"gymBadges": false,
"baseRaidTiers": [
1,
3,
5,
6
],
"baseTeamIds": [
0,
1,
2,
3
],
"baseGymSlotAmounts": [
1,
2,
3,
4,
5,
6
]
},
"nests": {
"enabled": false,
Expand All @@ -300,7 +320,25 @@
"candy": true,
"pokemon": true,
"invasions": false,
"allInvasions": true
"allInvasions": true,
"rewardTypes": false,
"baseMegaEnergyAmounts": [
10,
20
],
"baseLureIds": [
501,
502,
503,
504,
505
],
"stardust": {
"min": 100,
"max": 2000,
"interval": 100,
"enabled": true
}
},
"pokemon": {
"enabled": false,
Expand Down
39 changes: 28 additions & 11 deletions server/src/models/Gym.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const { Event } = require('../services/initialization')
const getAreaSql = require('../services/functions/getAreaSql')
const {
api: { searchResultsLimit, queryLimits, gymValidDataLimit, hideOldGyms },
defaultFilters: { gyms: { baseTeamIds, baseGymSlotAmounts } },
} = require('../services/config')
const Badge = require('./Badge')

Expand Down Expand Up @@ -92,7 +93,7 @@ module.exports = class Gym extends Model {
case 't': teams.push(gym.slice(1).split('-')[0]); break
case 'g': slots.push({
team: gym.slice(1).split('-')[0],
slots: 6 - gym.slice(1).split('-')[1],
slots: baseGymSlotAmounts.length - gym.slice(1).split('-')[1],
}); break
default: {
const [id, form] = gym.split('-')
Expand All @@ -103,11 +104,7 @@ module.exports = class Gym extends Model {
})

const finalTeams = []
const finalSlots = {
1: [],
2: [],
3: [],
}
const finalSlots = Object.fromEntries(baseTeamIds.map(team => [team, []]))

teams.forEach(team => {
let slotCount = 0
Expand All @@ -117,7 +114,7 @@ module.exports = class Gym extends Model {
finalSlots[team].push(+slot.slots)
}
})
if (slotCount === 6 || team == 0) {
if (slotCount === baseGymSlotAmounts.length || team == 0) {
delete finalSlots[team]
finalTeams.push(+team)
}
Expand Down Expand Up @@ -270,15 +267,35 @@ module.exports = class Gym extends Model {
isMad ? 'level' : 'raid_level',
])
.orderBy(isMad ? 'pokemon_id' : 'raid_pokemon_id', 'asc')
if (results.length === 0) {
return fetchRaids()
const teamResults = await this.query()
.select([
'team_id AS team',
isMad ? 'slots_available AS slots' : 'availble_slots AS slots',
])
.groupBy([
'team_id',
isMad ? 'slots_available' : 'availble_slots',
])
.then((r) => {
const unique = new Set()
r.forEach(result => {
if (result.slots) {
unique.add(`g${result.team}-${result.slots}`)
} else {
unique.add(`t${result.team}-0`)
}
})
return [...unique]
})
if (!results.length) {
return [...teamResults, ...await fetchRaids()]
}
return results.flatMap(result => {
return [...teamResults, ...results.flatMap(result => {
if (result.raid_pokemon_id) {
return `${result.raid_pokemon_id}-${result.raid_pokemon_form}`
}
return [`e${result.raid_level}`, `r${result.raid_level}`]
})
})]
}

static async search(perms, args, { isMad }, distance) {
Expand Down
32 changes: 20 additions & 12 deletions server/src/services/EventManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -22,18 +22,26 @@ module.exports = class EventManager {
}

setTimers(config, Db, Pvp) {
setInterval(async () => {
this.available.gyms = await Db.getAvailable('Gym')
}, 1000 * 60 * 60 * (config.api.queryUpdateHours.raids || 1))
setInterval(async () => {
this.available.nests = await Db.getAvailable('Nest')
}, 1000 * 60 * 60 * (config.api.queryUpdateHours.nests || 6))
setInterval(async () => {
this.available.pokemon = await Db.getAvailable('Pokemon')
}, 1000 * 60 * 60 * (config.api.queryUpdateHours.pokemon || 1))
setInterval(async () => {
this.available.pokestops = await Db.getAvailable('Pokestop')
}, 1000 * 60 * 60 * (config.api.queryUpdateHours.quests || 3))
if (!config.api.queryOnSessionInit.raids) {
setInterval(async () => {
this.available.gyms = await Db.getAvailable('Gym')
}, 1000 * 60 * 60 * (config.api.queryUpdateHours.raids || 1))
}
if (!config.api.queryOnSessionInit.nests) {
setInterval(async () => {
this.available.nests = await Db.getAvailable('Nest')
}, 1000 * 60 * 60 * (config.api.queryUpdateHours.nests || 6))
}
if (!config.api.queryOnSessionInit.pokemon) {
setInterval(async () => {
this.available.pokemon = await Db.getAvailable('Pokemon')
}, 1000 * 60 * 60 * (config.api.queryUpdateHours.pokemon || 1))
}
if (!config.api.queryOnSessionInit.quests) {
setInterval(async () => {
this.available.pokestops = await Db.getAvailable('Pokestop')
}, 1000 * 60 * 60 * (config.api.queryUpdateHours.quests || 3))
}
setInterval(async () => {
await this.getUicons(config.icons.styles)
}, 1000 * 60 * 60 * (config.icons.cacheHrs || 3))
Expand Down
2 changes: 1 addition & 1 deletion server/src/services/defaultFilters/buildDefaultFilters.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ module.exports = function buildDefault(perms, available) {
invasions: perms.invasions ? defaultFilters.pokestops.invasions : undefined,
arEligible: perms.pokestops ? false : undefined,
filter: {
...buildPokestops(perms, defaultFilters.pokestops),
...buildPokestops(perms, defaultFilters.pokestops, available),
...pokemon.quests,
},
} : undefined,
Expand Down
27 changes: 18 additions & 9 deletions server/src/services/defaultFilters/buildGyms.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,24 +4,33 @@ module.exports = function buildGyms(perms, defaults, available) {
const gymFilters = {}

if (perms.gyms) {
for (let i = 0; i <= 3; i += 1) {
gymFilters[`t${i}-0`] = new GenericFilter(defaults.allGyms)
defaults.baseTeamIds.forEach((team, i) => {
gymFilters[`t${team}-0`] = new GenericFilter(defaults.allGyms)
if (i) {
for (let j = 1; j <= 6; j += 1) {
gymFilters[`g${i}-${j}`] = new GenericFilter(defaults.allGyms)
}
defaults.baseGymSlotAmounts.forEach(slot => {
gymFilters[`g${team}-${slot}`] = new GenericFilter(defaults.allGyms)
})
}
}
})
}
if (perms.raids) {
available.gyms.forEach(avail => {
defaults.baseRaidTiers.forEach(tier => {
gymFilters[`e${tier}`] = new GenericFilter(defaults.eggs)
gymFilters[`r${tier}`] = new GenericFilter(defaults.raids)
})
}
available.gyms.forEach(avail => {
if (perms.gyms && (avail.startsWith('t') || avail.startsWith('g'))) {
gymFilters[avail] = new GenericFilter(defaults.allGyms)
}
if (perms.raids) {
if (avail.startsWith('e')) {
gymFilters[avail] = new GenericFilter(defaults.eggs)
}
if (avail.startsWith('r')) {
gymFilters[avail] = new GenericFilter(defaults.raids)
}
})
}
}
})
return gymFilters
}
2 changes: 1 addition & 1 deletion server/src/services/defaultFilters/buildPokemon.js
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ module.exports = function buildPokemon(defaults, base, custom, available) {
quests: { global: new GenericFilter() },
nests: { global: new GenericFilter() },
}
const energyAmounts = new Set(['10', '20', ...available.pokestops
const energyAmounts = new Set([...defaults.pokestops.baseMegaEnergyAmounts, ...available.pokestops
.filter((e) => e.startsWith('m'))
.map((e) => e.split('-')[1])])

Expand Down
35 changes: 27 additions & 8 deletions server/src/services/defaultFilters/buildPokestops.js
Original file line number Diff line number Diff line change
@@ -1,32 +1,51 @@
const { GenericFilter } = require('../../models/index')
const { Event } = require('../initialization')

module.exports = function buildPokestops(perms, defaults) {
module.exports = function buildPokestops(perms, defaults, available) {
const quests = { s0: new GenericFilter() }
if (perms.lures) {
for (let i = 1; i <= 5; i += 1) {
quests[`l50${i}`] = new GenericFilter(defaults.lures)
}
defaults.baseLureIds.forEach(lure => {
quests[`l${lure}`] = new GenericFilter(defaults.lures)
})
}
if (perms.quests) {
Object.keys(Event.masterfile.items).forEach(item => {
quests[`q${item}`] = new GenericFilter(defaults.items)
})
for (let i = 200; i <= 2000; i += 100) {
quests[`d${i}`] = new GenericFilter(defaults.items)
for (let i = defaults.stardust.min; i <= defaults.stardust.max; i += defaults.stardust.interval) {
quests[`d${i}`] = new GenericFilter(defaults.stardust.enabled)
}
Object.keys(Event.masterfile.questRewardTypes).forEach(type => {
if (type !== '0') {
quests[`u${type}`] = new GenericFilter()
quests[`u${type}`] = new GenericFilter(defaults.rewardTypes)
}
})
}
if (perms.invasions) {
Object.keys(Event.invasions).forEach(type => {
if (type != 0) {
if (type !== '0') {
quests[`i${type}`] = new GenericFilter(defaults.allInvasions)
}
})
}
available.pokestops.forEach(avail => {
if (perms.lures && avail.startsWith('l')) {
quests[avail] = new GenericFilter(defaults.lures)
}
if (perms.quests) {
if (avail.startsWith('q')) {
quests[avail] = new GenericFilter(defaults.items)
}
if (avail.startsWith('d')) {
quests[avail] = new GenericFilter(defaults.stardust.enabled)
}
if (avail.startsWith('u')) {
quests[avail] = new GenericFilter(defaults.rewardTypes)
}
}
if (perms.invasions && avail.startsWith('i')) {
quests[avail] = new GenericFilter(defaults.allInvasions)
}
})
return quests
}
10 changes: 6 additions & 4 deletions src/components/Container.jsx
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
import React from 'react'
import { MapContainer } from 'react-leaflet'
import { useStore } from '@hooks/useStore'

import useGenerate from '@hooks/useGenerate'
import useRefresh from '@hooks/useRefresh'

import Map from './Map'

export default function Container({ serverSettings, params }) {
const location = useStore(state => state.location)
const zoom = useStore(state => state.zoom)
export default function Container({ serverSettings, params, location, zoom }) {
useGenerate()
useRefresh()

return (
<MapContainer
Expand Down
Loading