@@ -18,19 +18,8 @@ const masterfile = require('../../static/data/masterfile.json');
1818const 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