Skip to content

Commit 35d34e3

Browse files
committed
fix: quest pokemon filtering in advanced menu
Fixes #1082.
1 parent a7996be commit 35d34e3

File tree

3 files changed

+101
-3
lines changed

3 files changed

+101
-3
lines changed

packages/locales/lib/human/en.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,7 @@
107107
"all_pokestops": "All PokéStops",
108108
"lures": "Lures",
109109
"quests": "Quests",
110+
"quest_pokemon": "Quest Pokémon",
110111
"invasions": "Invasions",
111112
"portals": "Portals",
112113
"submission_cells": "Submission Cells",

server/src/ui/advMenus.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const CATEGORIES = /** @type {const} */ ({
88
'items',
99
'quest_reward_12',
1010
'invasions',
11-
'pokemon',
11+
'quest_pokemon',
1212
'rocket_pokemon',
1313
'showcase',
1414
'quest_reward_4',

src/pages/map/hooks/useGenPokestops.js

Lines changed: 99 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ export function useGenPokestops() {
3838
}
3939

4040
Object.keys(pokestops.filter).forEach((id) => {
41-
if (id !== 'global' && !/\d/.test(id.charAt(0))) {
41+
if (id !== 'global') {
4242
switch (id.charAt(0)) {
4343
case 'a':
4444
if (tempObj.rocket_pokemon) {
@@ -192,7 +192,104 @@ export function useGenPokestops() {
192192
}
193193
break
194194
default:
195-
if (tempObj.pokestops) {
195+
if (/\d/.test(id.charAt(0))) {
196+
// Handle numbered IDs - these are pokemon encounters
197+
// ID format: pokemonId or pokemonId-formId
198+
const [pokemonId, formId] = id.split('-', 2)
199+
const pokemonData = pokemon[pokemonId]
200+
if (tempObj.quest_pokemon && pokemonData) {
201+
if (formId) {
202+
// Handle specific form
203+
const form = pokemonData.forms[formId]
204+
if (form) {
205+
const pokeName = t(`poke_${pokemonId}`)
206+
const formName = t(`form_${formId}`)
207+
const formTypes = (
208+
form.types ||
209+
pokemonData.types ||
210+
[]
211+
).map((x) => `poke_type_${x}`)
212+
const name =
213+
form.name &&
214+
form.name !== 'Normal' &&
215+
formId !== '0' &&
216+
+formId !== pokemonData.defaultFormId
217+
? formName
218+
: pokeName
219+
220+
tempObj.quest_pokemon[id] = {
221+
name: form.name === '*' ? `${name}*` : name,
222+
category: form.name === '*' ? form.category : undefined,
223+
pokedexId: +pokemonId,
224+
formId: +formId,
225+
defaultFormId: pokemonData.defaultFormId,
226+
pokeName,
227+
formName,
228+
formTypes,
229+
rarity: form.rarity || pokemonData.rarity,
230+
historic: pokemonData.historic,
231+
legendary: pokemonData.legendary,
232+
mythical: pokemonData.mythical,
233+
ultraBeast: pokemonData.ultraBeast,
234+
genId: `generation_${pokemonData.genId}`,
235+
perms: ['quests'],
236+
family: pokemonData.family,
237+
}
238+
tempObj.quest_pokemon[id].searchMeta = `${Object.entries(
239+
tempObj.quest_pokemon[id],
240+
)
241+
.flatMap(([k, v]) =>
242+
Array.isArray(v)
243+
? v.map((y) => t(y))
244+
: typeof v === 'boolean'
245+
? v
246+
? t(k)
247+
: ''
248+
: t(v),
249+
)
250+
.join(' ')
251+
.toLowerCase()} ${t('pokemon').toLowerCase()}`
252+
}
253+
} else {
254+
// Handle pokemon without specific form (use pokemonData directly)
255+
const pokeName = t(`poke_${pokemonId}`)
256+
const formTypes = pokemonData.types.map(
257+
(x) => `poke_type_${x}`,
258+
)
259+
260+
tempObj.quest_pokemon[id] = {
261+
name: pokeName,
262+
pokedexId: +pokemonId,
263+
formId: pokemonData.defaultFormId,
264+
defaultFormId: pokemonData.defaultFormId,
265+
pokeName,
266+
formTypes,
267+
rarity: pokemonData.rarity,
268+
historic: pokemonData.historic,
269+
legendary: pokemonData.legendary,
270+
mythical: pokemonData.mythical,
271+
ultraBeast: pokemonData.ultraBeast,
272+
genId: `generation_${pokemonData.genId}`,
273+
perms: ['quests'],
274+
family: pokemonData.family,
275+
}
276+
tempObj.quest_pokemon[id].searchMeta = `${Object.entries(
277+
tempObj.quest_pokemon[id],
278+
)
279+
.flatMap(([k, v]) =>
280+
Array.isArray(v)
281+
? v.map((y) => t(y))
282+
: typeof v === 'boolean'
283+
? v
284+
? t(k)
285+
: ''
286+
: t(v),
287+
)
288+
.join(' ')
289+
.toLowerCase()} ${t('pokemon').toLowerCase()}`
290+
}
291+
}
292+
} else if (tempObj.pokestops) {
196293
tempObj.pokestops[id] = {
197294
name: t('pokestop'),
198295
perms: ['pokestops'],

0 commit comments

Comments
 (0)