Skip to content

Commit 3e0d338

Browse files
authored
Merge pull request #198 from Mygod/permoniv-precedence
Make per-Pokemon IV take precedence over global IV
2 parents 21f10ec + e1cc24c commit 3e0d338

File tree

1 file changed

+20
-17
lines changed

1 file changed

+20
-17
lines changed

src/data/map.js

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,8 @@ const masterfile = require('../../static/data/masterfile.json');
1818
const getPokemon = async (minLat, maxLat, minLon, maxLon, showPVP, showIV, updated, pokemonFilterExclude = null, pokemonFilterIV = null, pokemonFilterPVP = null) => {
1919
const excludePokemonIds = [];
2020
const excludeFormIds = [];
21-
let keys = Object.keys(pokemonFilterIV || []);
22-
if (keys && keys.length > 0 && showIV) {
23-
for (let i = 0; i < keys.length; i++) {
24-
const id = keys[i];
25-
if (id) {
26-
if (!pokemonFilterExclude.includes(id)) {
27-
pokemonFilterExclude.push(id);
28-
}
29-
}
30-
}
31-
}
3221

33-
keys = Object.values(pokemonFilterExclude || []);
22+
let keys = Object.values(pokemonFilterExclude || []);
3423
let sqlIncludeBigKarp = '';
3524
let sqlIncludeTinyRat = '';
3625
if (keys && keys.length > 0) {
@@ -81,9 +70,11 @@ const getPokemon = async (minLat, maxLat, minLon, maxLon, showPVP, showIV, updat
8170
args.push(excludeFormIds[i]);
8271
}
8372

84-
let sqlIncludeIv = '';
8573
let sqlOrIv = '';
8674
let sqlAndIv = '';
75+
let sqlExcludeIvPokemon = '';
76+
let sqlExcludeIvForms = '';
77+
let sqlIncludeIv = '';
8778
if (showIV) {
8879
const keys = Object.keys(pokemonFilterIV);
8980
keys.forEach(key => {
@@ -95,6 +86,7 @@ const getPokemon = async (minLat, maxLat, minLon, maxLon, showPVP, showIV, updat
9586
if (split.length === 2) {
9687
const pokemonId = parseInt(split[0]);
9788
const formId = parseInt(split[1]);
89+
sqlExcludeIvForms += `, ${formId}`;
9890
sqlPokemon = `form = ${formId}`;
9991
if ((masterfile.pokemon[pokemonId] || {}).default_form_id === split[1]) {
10092
sqlPokemon += ` OR pokemon_id = ${pokemonId} AND form = 0`;
@@ -108,12 +100,20 @@ const getPokemon = async (minLat, maxLat, minLon, maxLon, showPVP, showIV, updat
108100
} else {
109101
const id = parseInt(key);
110102
if (id) {
103+
if (sqlExcludeIvPokemon === '') {
104+
sqlExcludeIvPokemon = `AND pokemon_id NOT IN (${id}`;
105+
} else {
106+
sqlExcludeIvPokemon += `, ${id}`;
107+
}
111108
sqlPokemon = `pokemon_id = ${id} AND form = 0`;
112109
}
113110
}
114111
sqlIncludeIv += ` OR ((${sqlPokemon}) AND (${sqlFilter}))`;
115112
}
116113
});
114+
if (sqlExcludeIvPokemon !== '') {
115+
sqlExcludeIvPokemon += ')';
116+
}
117117
}
118118

119119
const sql = `
@@ -124,10 +124,13 @@ const getPokemon = async (minLat, maxLat, minLon, maxLon, showPVP, showIV, updat
124124
FROM pokemon
125125
WHERE expire_timestamp >= UNIX_TIMESTAMP() AND lat >= ? AND lat <= ? AND lon >= ? AND lon <= ? AND updated > ? AND (
126126
(
127-
(form = 0 ${sqlExcludePokemon})
128-
OR form NOT IN (0 ${sqlExcludeForms})
129-
${sqlIncludeIv} ${sqlIncludeBigKarp} ${sqlIncludeTinyRat}
130-
) ${sqlAndIv} ${sqlOrIv}
127+
(
128+
(form = 0 ${sqlExcludePokemon}) OR form NOT IN (0 ${sqlExcludeForms})
129+
${sqlIncludeBigKarp} ${sqlIncludeTinyRat}
130+
) ${sqlAndIv} ${sqlOrIv}
131+
) AND (
132+
(form = 0 ${sqlExcludeIvPokemon}) OR form NOT IN (0 ${sqlExcludeIvForms})
133+
) ${sqlIncludeIv}
131134
)`;
132135
const results = await db.query(sql, args).catch(err => {
133136
console.error('Failed to execute query:', sql, 'with arguments:', args, '\r\n:Error:', err);

0 commit comments

Comments
 (0)