forked from jpgualdarrama/PokeFarmQoL
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Poke-Farm-QoL.user.js
4561 lines (4162 loc) · 291 KB
/
Poke-Farm-QoL.user.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// ==UserScript==
// @name Poké Farm QoL
// @namespace https://github.com/tarashia/
// @author Bentomon, ECEInTheHole, Tarashia (Mirzam)
// @homepageURL https://github.com/tarashia/PokeFarmQoL
// @downloadURL https://github.com/tarashia/PokeFarmQoL/raw/master/Poke-Farm-QoL.user.js
// @updateURL https://github.com/tarashia/PokeFarmQoL/raw/master/Poke-Farm-QoL.user.js
// @description Quality of Life changes to Pokéfarm!
// @version 1.7.9
// @match https://pokefarm.com/*
// @require http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js
// ==/UserScript==
// Tell ESLint that jQuery's $ is defined elsewhere
/* global $ */
class Helpers {
// Custom error handler to output in the QoL error console
// Level should be info, warn, or error; default is info
// Message is also written to the JavaScript console
// err should be the full Error object - if provided and supported, the
// stack trace for this error will be Base 64 encoded and included for the user
static writeCustomError(message,level='info',err=undefined) {
const logElement = document.getElementById('qolConsoleHolder');
if(logElement) {
logElement.innerHTML += '<li>' + Helpers.errorToString(message, level, err) +'</li>';
}
else {
console.error('Could not add custom log to log element');
}
}
static errorToString(message, level='info', err=undefined) {
let prefix = undefined;
let stackTrace = '';
if(err && err.stack) {
stackTrace = '<br>'+btoa(err.stack);
}
if(level=='warn') {
prefix = 'WARN: ';
console.warn('QoL: '+message);
}
else if(level=='error') {
prefix = 'ERROR: ';
console.error('QoL: '+message);
}
else {
prefix = 'INFO: ';
console.log('QoL: '+message);
}
return prefix + message + stackTrace;
}
/** TamperMonkey polyfill to replace GM_addStyle function */
static addGlobalStyle(css) {
const head = document.getElementsByTagName('head')[0];
const style = document.createElement('style');
style.innerHTML = css;
head.appendChild(style);
}
static buildOptionsString(arr) {
let str = '<option value="none">None</option> ';
if(Array.isArray(arr)) {
for (let i = 0; i < arr.length; i++) {
str += `<option value="${i}">${arr[i]}</option> `;
}
}
// egg groups are an object, not an array
else {
for(let key in arr) {
str += `<option value="${key}">${arr[key]}</option> `;
}
}
return str;
}
static toggleSetting(key, set, cls) {
// provide default value for cls
cls = cls || 'qolsetting';
// update values for checkboxes
if (typeof set === 'boolean') {
const element = document.querySelector(`.${cls}[data-key="${key}"]`);
if (element && element.type === 'checkbox') {
element.checked = set;
}
}
} // toggleSetting
static setupFieldArrayHTML(arr, id, div, cls) {
const n = arr.length;
for (let i = 0; i < n; i++) {
const rightDiv = i + 1;
const rightValue = arr[i];
$(`#${id}`).append(div);
$(`.${cls}`).removeClass(cls).addClass('' + rightDiv + '').find('.qolsetting').val(rightValue);
}
}
static textSearchDiv(cls, dataKey, id, arrayName) {
return `<div class='${cls}'><label><input type="text" class="qolsetting" data-key="${dataKey}" ` +
`array-name='${arrayName}'` +
`/></label><input type='button' value='Remove' id='${id}'></div>`;
}
static selectSearchDiv(cls, name, dataKey, options, id, divParent, arrayName) {
return `<div class='${cls}'> <select name='${name}' class="qolsetting" data-key='${dataKey}' ` +
`array-name='${arrayName}'> ${options} </select> <input type='button' value='Remove' id='${id}'> </div>`;
}
static parseFieldPokemonTooltip(tooltip) {
const dataElements = $(tooltip).children(0).children();
let index = 1;
// nickname
const nickname = dataElements[index].textContent;
if (!nickname) {
console.error(`Helpers.parseFieldPokemonTooltip - nickname '${nickname}' (is not a valid name)`);
}
index++;
/*
* Issue #59 - Pokefarm added a new h3 element after the nickname
* that contains no data
*/
index++;
// species
let species = '';
if (dataElements[index].textContent) {
const tc = dataElements[index].textContent;
const tcSplit = tc.trim().split(': ');
if (tcSplit.length == 1) {
console.error('Helpers.parseFieldPokemonTooltip - species text does not contain \': \'');
}
else {
species = tcSplit[1];
}
}
index++;
// dataElements[3] will be a forme if the pokemon has a forme
let forme = '';
if (dataElements[index].textContent &&
dataElements[index].textContent.startsWith('Forme')) {
forme = dataElements[index].textContent.substr('Forme: '.length);
index++;
}
// types
const typeElements = $(dataElements[index]).children().slice(1);
const typeUrls = typeElements.map(idx => typeElements[idx]['src']);
let types = typeUrls.map(idx =>
typeUrls[idx].substring(typeUrls[idx].indexOf('types/') + 'types/'.length,
typeUrls[idx].indexOf('.png')));
types = types.map(idx => types[idx].charAt(0).toUpperCase() + types[idx].substring(1));
types = types.map(idx => Globals.TYPE_LIST.indexOf(types[idx]));
index++;
// level
let level = -1;
if (dataElements[index].textContent) {
const tcSplit = dataElements[index].textContent.split(' ');
if (tcSplit.length > 1) {
level = parseInt(tcSplit[1]);
}
} else {
console.error('Helpers.parseFieldPokemonToolTip - could not load level because text was empty');
}
index++;
// if the pokemon's happiness is less than max, skip the next index, since it will be a progress bar
if (!dataElements[index].textContent ||
!dataElements[index].textContent.startsWith('Happiness')) {
index++;
}
// happiness
let happiness = -1;
if (dataElements[index].textContent) {
const tcSplit = dataElements[index].textContent.split(' ');
if (tcSplit.length > 1) {
happiness = tcSplit[1].trim();
happiness = (happiness == 'MAX') ? 100 : parseInt(happiness.substring(0, happiness.length - 1));
}
} else {
console.error('Helpers.parseFieldPokemonToolTip - could not load happiness because text was empty');
}
index++;
// nature
let nature = -1;
if (dataElements[index].textContent) {
const tcSplit = dataElements[index].textContent.split(' ');
if (tcSplit.length > 1) {
nature = tcSplit[1].replace('(', '').trim();
nature = Globals.NATURE_LIST.indexOf(nature); // .substring(0, nature.length-1))
}
} else {
console.error('Helpers.parseFieldPokemonToolTip - could not load nature because text was empty');
}
index++;
// held item
let item = '';
if (dataElements[index].textContent !== 'Item: None') {
item = dataElements[index].textContent.substring(dataElements[8].textContent.indexOf(' ') + 1);
} else {
item = 'None';
}
index++;
// egg groups
let eggGroups = [];
if (dataElements[index].textContent) {
eggGroups = dataElements[index].textContent.substring('Egg Group: '.length).split('/');
}
else {
console.error('Helpers.parseFieldPokemonToolTip - could not load egg groups because text was empty');
}
index++;
const ret = {
'nickname': nickname,
'species': species,
'types': types,
'level': level,
'happiness_percent': happiness,
'nature': nature,
'item': item,
'eggGroups': eggGroups,
};
if (forme !== '') {
ret.forme = forme;
}
return ret;
} // parseFieldPokemonToolTip
// returns true if the page is equal to or smaller to the given size class
// mobile cutoff (point when header changes): "mq2"
// ex: const isMobile = Helpers.detectPageSize('mq2');
static detectPageSize(size) {
return $('html').hasClass(size);
}
static addPkmnLinksPopup() {
let fielddiv = document.getElementById('field_field');
if(!fielddiv) {
// Ensure we're actually on a page with fields.
// I'm not sure how, but I once saw the button show in forums.
return;
}
let body = document.getElementsByTagName('body')[0];
let header = document.getElementsByTagName('h1')[0];
let core = document.getElementById('core');
let newBtn = document.createElement('button');
header.appendChild(newBtn);
newBtn.innerText = 'View links';
newBtn.style= 'vertical-align:middle;margin-left: 10px;';
newBtn.onclick = function(){
let content = '<h3>Pokemon links</h3><table style="border-collapse:collapse;">';
let fieldmon = document.getElementsByClassName('fieldmon');
for(let i=0; i<fieldmon.length; i++){
if(i%4==0) {
content += '<tr>';
}
let pkmnID = fieldmon[i].getAttribute('data-id');
let small = fieldmon[i].children[1];
let imgSRC = small.getAttribute('src');
let pkmnName = small.getAttribute('alt');
content += '<td style="padding:5px;border:1px solid;">' +
'<img style="vertical-align:middle;" src="'+imgSRC+'"> ' +
'<a href="/summary/'+pkmnID+'">'+pkmnName+'</a></td>';
if(i%4==3) {
content += '</tr>';
}
}
content += '</table>';
let dialog = document.createElement('div');
let dialogDiv1 = document.createElement('div');
let dialogDiv2 = document.createElement('div');
let dialogDiv3 = document.createElement('div');
let closeBtn = document.createElement('button');
closeBtn.setAttribute('type','button');
closeBtn.style = 'float:right;margin:8px;';
closeBtn.innerText = 'Close';
closeBtn.onclick = function() {
dialog.remove();
core.classList.remove('scrolllock');
}
dialog.classList.add('dialog');
dialog.appendChild(dialogDiv1);
dialogDiv1.appendChild(dialogDiv2);
dialogDiv2.appendChild(dialogDiv3);
dialogDiv3.innerHTML = content;
dialogDiv3.appendChild(closeBtn);
body.prepend(dialog);
core.classList.add('scrolllock');
};
}
}
class Globals {
// if you add a new page settings key, be sure to add it to the reset menu in qol-hub.html
static SETTINGS_SAVE_KEY = 'QoLSettings';
static LAB_PAGE_SETTINGS_KEY = 'QoLLab';
static MULTIUSER_PAGE_SETTINGS_KEY = 'QoLMultiuser';
static PRIVATE_FIELDS_PAGE_SETTINGS_KEY = 'QoLPrivateFields';
static PUBLIC_FIELDS_PAGE_SETTINGS_KEY = 'QoLPublicFields';
static SHELTER_PAGE_SETTINGS_KEY = 'QoLShelter';
static POKEDEX_DATA_KEY = 'QoLPokedex';
/*
* Note - the order of TYPE_LIST is important. It looks like PFQ uses an array in this order in its code
* Don't change the order without looking for where this array is used
*/
static TYPE_LIST = ["Normal","Fire","Water","Electric","Grass","Ice","Fighting","Poison","Ground","Flying","Psychic","Bug","Rock","Ghost","Dragon","Dark","Steel","Fairy"];
static NATURE_LIST = ["Lonely","Mild","Hasty","Gentle","Bold","Modest","Timid","Calm","Impish","Adamant","Jolly","Careful","Relaxed","Brave","Quiet","Sassy","Lax","Naughty","Rash","Naïve","Hardy","Docile","Serious","Bashful","Quirky"];
static EGG_GROUP_LIST = {"0":"Undiscovered","1":"Monster","2":"Dragon","3":"Field","4":"Bug","5":"Grass","6":"Water 1","7":"Water 2","8":"Water 3","9":"Amorphous","10":"Fairy","11":"Human-Like","12":"Mineral","13":"Flying","15":"Ditto"};
static SHELTER_TYPE_TABLE = ["0","Normal","<img src='//pfq-static.com/img/types/normal.png/t=1262702646'>","1","Fire","<img src='//pfq-static.com/img/types/fire.png/t=1262702645'>","2","Water","<img src='//pfq-static.com/img/types/water.png/t=1262702646'>","3","Electric","<img src='//pfq-static.com/img/types/electric.png/t=1262702645'>","4","Grass","<img src='//pfq-static.com/img/types/grass.png/t=1262702645'>","5","Ice","<img src='//pfq-static.com/img/types/ice.png/t=1262702646'>","6","fighting","<img src='//pfq-static.com/img/types/fighting.png/t=1262702645'>","7","Poison","<img src='//pfq-static.com/img/types/poison.png/t=1262702646'>","8","Ground","<img src='//pfq-static.com/img/types/ground.png/t=1262702646'>","9","Flying","<img src='//pfq-static.com/img/types/flying.png/t=1262702645'>","10","Psychic","<img src='//pfq-static.com/img/types/psychic.png/t=1262702646'>","11","Bug","<img src='//pfq-static.com/img/types/bug.png/t=1262702645'>","12","Rock","<img src='//pfq-static.com/img/types/rock.png/t=1262702646'>","13","Ghost","<img src='//pfq-static.com/img/types/ghost.png/t=1262702645'>","14","Dragon","<img src='//pfq-static.com/img/types/dragon.png/t=1263605747'>","15","Dark","<img src='//pfq-static.com/img/types/dark.png/t=1262702645'>","16","Steel","<img src='//pfq-static.com/img/types/steel.png/t=1262702646'>","17","Fairy","<img src='//pfq-static.com/img/types/fairy.png/t=1374419124'>"];
static SHELTER_SEARCH_DATA = ["findNewEgg","Egg","new egg","<img src='//pfq-static.com/img/pkmn/egg.png/t=1451852195'>","findNewPokemon","Pokémon","new Pokémon","<img src='//pfq-static.com/img/pkmn/pkmn.png/t=1451852507'>","findShiny","SHINY","Shiny","<img src='//pfq-static.com/img/pkmn/shiny.png/t=1400179603'>","findAlbino","ALBINO","Albino","<img src='//pfq-static.com/img/pkmn/albino.png/t=1414662094'>","findMelanistic","MELANISTIC","Melanistic","<img src='//pfq-static.com/img/pkmn/melanistic.png/t=1435353274'>","findPrehistoric","PREHISTORIC","Prehistoric","<img src='//pfq-static.com/img/pkmn/prehistoric.png/t=1465558964'>","findDelta","DELTA","Delta","<img src='//pfq-static.com/img/pkmn/_delta/dark.png/t=1501325214'>","findMega","MEGA","Mega","<img src='//pfq-static.com/img/pkmn/mega.png/t=1400179603'>","findStarter","STARTER","Starter","<img src='//pfq-static.com/img/pkmn/starter.png/t=1484919510'>","findCustomSprite","CUSTOM SPRITE","Custom Sprite","<img src='//pfq-static.com/img/pkmn/cs.png/t=1405806997'>","findMale","[M]","Male","<img src='//pfq-static.com/img/pkmn/gender_m.png/t=1401213006'>","findFemale","[F]","Female","<img src='//pfq-static.com/img/pkmn/gender_f.png/t=1401213007'>","findNoGender","[N]","Genderless","<img src='//pfq-static.com/img/pkmn/gender_n.png/t=1401213004'>","findLegendary","","Legendary","<img src='//pfq-static.com/img/pkmn/pkmn.png/t=1451852507'>"];
static SHELTER_SEARCH_LISTS = {"findLegendary":["Articuno","Zapdos","Moltres","Mewtwo","Mew","Raikou","Entei","Suicune","Lugia","Ho-oh","Celebi","Regirock","Regice","Registeel","Latias","Latios","Kyogre","Groudon","Rayquaza","Deoxys","Jirachi","Uxie","Mesprit","Azelf","Dialga","Palkia","Heatran","Regigigas","Giratina","Cresselia","Manaphy","Darkrai","Shaymin","Arceus","Enamorus","Victini","Cobalion","Terrakion","Virizion","Tornadus","Thundurus","Reshiram","Zekrom","Landorus","Kyurem","Keldeo","Meloetta","Genesect","Xerneas","Yveltal","Zygarde","Diancie","Hoopa","Volcanion","Type: Null","Silvally","Tapu Koko","Tapu Lele","Tapu Bulu","Tapu Fini","Cosmog","Cosmoem","Solgaleo","Lunala","Necrozma","Magearna","Marshadow","Zeraora","Nihilego","Buzzwole","Pheromosa","Xurkitree","Celesteela","Kartana","Guzzlord","Poipole","Naganadel","Stakataka","Blacephalon","Zacian","Zamazenta","Eternatus","Kubfu","Urshifu","Zarude","Regieleki","Regidrago","Glastrier","Spectrier","Calyrex","Wo-Chien","Chien-Pao","Ting-Lu","Chi-Yu","Koraidon","Miraidon","Walking Wake","Gouging Fire","Raging Bolt","Iron Leaves","Iron Boulder","Iron Crown","Okidogi","Munkidori","Fezandipiti","Ogerpon","Terapagos","Pecharunt"]};
static TYPE_OPTIONS = Helpers.buildOptionsString(this.TYPE_LIST);
static NATURE_OPTIONS = Helpers.buildOptionsString(this.NATURE_LIST);
static EGG_GROUP_OPTIONS = Helpers.buildOptionsString(this.EGG_GROUP_LIST);
}
class LocalStorageManager {
// Look for settings that contain QoL and return them as an array of keys
// Uses the same basic code as the migrateSettings function
static getAllQoLSettings(includeDex=false) {
const qolSettings = {};
for (let i = 0, len = localStorage.length; i < len; ++i) {
const key = localStorage.key(i);
// the dex is the largest data element by far; allow excluding it
if(key && key.match(/QoL/) && (includeDex || !key.match(/QoLPokedex/))) {
qolSettings[key] = localStorage.getItem(key);
}
}
return qolSettings;
}
// delete ALL QoL keys in storage
static clearAllQoLKeys() {
for (let i = 0, len = localStorage.length; i < len; ++i) {
const key = localStorage.key(i);
if(key && key.match(/QoL/)) {
localStorage.removeItem(key);
}
}
}
/**
* This function helps users use the updated script without having to
* clear their settings by looking for items in local storage that
* start with 'QoL...' and moving the settings to the correct
* translated local storage key
*/
static migrateSettings() {
const newItems = {};
const newKeys = [];
const keysToRemove = [];
// find the items that need to be replaced
for (let i = 0, len = localStorage.length; i < len; ++i) {
let match = localStorage.key(i).match(/^QoL/);
if(!match) {
// the user ID feature was just returning undefined - convert these too
match = localStorage.key(i).match(/^undefined\.QoL/);
}
if(match) {
const oldKey = match.input;
const newKey = LocalStorageManager.translateKey(oldKey);
newItems[newKey] = localStorage.getItem(oldKey);
keysToRemove.push(oldKey);
}
match = localStorage.key(i).match(/^undefined\.undefined\.QoL/);
if(match) {
keysToRemove.push(match.input);
}
}
// remove the old style keys
for(let j = 0; j < keysToRemove.length; j++) {
localStorage.removeItem(keysToRemove[j]);
}
// add the new style keys
for(const newKey in newItems) {
localStorage.setItem(newKey, newItems[newKey]);
newKeys.push(newKey);
}
if(keysToRemove.length>0 || newKeys.length>0) {
console.log('Migrated keys (old, new):');
console.log(keysToRemove);
console.log(newKeys);
}
}
static translateKey(key) {
let pos = key.indexOf('QoL');
if(pos<0) {
throw 'Bad key format';
}
key = key.substring(pos);
let userID = $('#core').attr('data-user');
if(!userID) {
userID = 'unknown';
}
return userID+'.'+key;
}
static saveSettings(key, obj) {
if (key == null){ return; }
localStorage.setItem(LocalStorageManager.translateKey(key), JSON.stringify(obj));
}
static loadSettings(KEY, DEFAULT, obj) {
if (KEY == null){ return; }
KEY = LocalStorageManager.translateKey(KEY);
if (localStorage.getItem(KEY) === null) {
this.saveSettings(KEY);
} else {
try {
const countScriptSettings = Object.keys(obj).length;
const localStorageString = JSON.parse(localStorage.getItem(KEY));
const countLocalStorageSettings = Object.keys(localStorageString).length;
if (countLocalStorageSettings < countScriptSettings) { // adds new objects (settings) to the local storage
const defaultsSetting = DEFAULT;
const userSetting = JSON.parse(localStorage.getItem(KEY));
const newSetting = $.extend(true, {}, defaultsSetting, userSetting);
obj = newSetting;
this.saveSettings(KEY, obj);
}
if (countLocalStorageSettings > countScriptSettings) {
this.saveSettings(KEY, obj);
}
}
catch (err) {
this.saveSettings(KEY, obj);
}
if (localStorage.getItem(KEY) != JSON.stringify(obj)) {
obj = JSON.parse(localStorage.getItem(KEY));
}
}
return obj;
}
static getItem(key) {
return localStorage.getItem(LocalStorageManager.translateKey(key));
}
static setItem(key, value) {
localStorage.setItem(LocalStorageManager.translateKey(key), value);
}
static removeItem(key) {
localStorage.removeItem(LocalStorageManager.translateKey(key));
}
static getDexFromStorage() {
const key = LocalStorageManager.translateKey(Globals.POKEDEX_DATA_KEY);
if(localStorage.getItem(key) === null) {
return false;
}
if(Object.keys(JSON.parse(localStorage.getItem(key))).length === 0) {
return false;
}
const dateAndDex = JSON.parse(localStorage.getItem(key));
// if QoLPokedex only contains date
if((dateAndDex.length === 1) ||
// or if the dex part of the array is empty
(dateAndDex[1] === undefined) ||
(dateAndDex[1] === null)) {
return false;
}
return dateAndDex;
}
static updateLocalStorageDex(DEX_DATA, dateString) {
const datePlusDex = [dateString].concat(DEX_DATA);
localStorage.setItem(LocalStorageManager.translateKey(Globals.POKEDEX_DATA_KEY), JSON.stringify(datePlusDex));
}
}
/**
* This class is used to store CSS and HTML snippets that were previously loaded via Tampermonkey's '@resource' tool
*/
class Resources {
static css() {
return `#announcements li[data-name=QoL]{cursor:pointer}#labsuccess{text-align:center}#labfound{padding-top:20px}.boldp{font-weight:700}.collapsible{border-radius:6px;cursor:pointer;max-width:600px;padding:4px;position:relative;text-align:left;width:100%}.collapsible_content{display:none;overflow:hidden;padding:0 18px}.oneevolutionleft{background-color:#f36971;border-radius:100%;box-shadow:0 0 25px 15px #f36971}.twoevolutionleft{background-color:#6a6df2;border-radius:100%;box-shadow:0 0 25px 15px #6a6df2}.dojoperfectstat{font-weight:700;text-decoration:underline} `+
`.qoltooltip_trigger{border-bottom:1px dotted #000;display:inline-block;position:relative}.tooltip .tooltiptext{border-radius:6px;bottom:125%;left:50%;margin-left:0;opacity:0;padding:5px 0;position:absolute;text-align:center;transition:opacity .3s;visibility:hidden;width:500px;z-index:1}.tooltip .tooltiptext:after{border-style:solid;border-width:5px;content:"";left:50%;margin-left:-5px;position:absolute;top:100%}.tooltip:hover .tooltiptext{opacity:1;visibility:visible}.customsearchtooltip{width:400px}#sheltersuccess{text-align:center}#shelterfound{padding-top:20px}.daycarefoundme,.dojofoundme,.labfoundme,.privatefoundme,.publicfoundme,.shelterfoundme{background-color:#d5e265;border-radius:100%;box-shadow:0 0 25px 15px #d5e265}.qolshelterareagrid{display:flex!important;display:grid!important;flex-direction:row;flex-flow:row wrap;grid-template-columns:repeat(6,1fr);grid-template-rows:repeat(5,70px);min-height:350px}.qolshelterareagridmq2:not(.qolshelterarealarge){grid-template-rows:repeat(5,35px);min-height:175px}.qoltooltipgrid{bottom:0;position:absolute!important;transform:translateY(100%)}.qolpokemongrid{align-items:center;display:inline-block!important;display:inline-flex!important;flex:1 1 16%;justify-content:center;position:static!important}.qolpokemongrid img{max-height:100%;max-width:100%}.qolshelterarealarge .pokemon .big{display:block!important}.qolshelterarealarge .pokemon .small,.qolshelterareasmall .pokemon .big{display:none!important}.qolshelterareasmall .pokemon .small{display:block!important} `+
`#fieldorder{border-radius:4px;padding:4px}#fieldorder,#fieldsearch{margin:16px auto;max-width:600px;position:relative}.qolSortBerry{margin:-10px!important;top:45%!important;transition:none!important}.qolSortBerry>img.big{animation:none!important;padding:25px!important}.qolSortBerry.qolAnyBerry,.qolSortBerry.qolSourBerry{left:0!important}.qolSortBerry.qolSpicyBerry{left:20%!important}.qolSortBerry.qolDryBerry{left:40%!important}.qolSortBerry.qolSweetBerry{left:60%!important}.qolSortBerry.qolBitterBerry{left:80%!important}.mq2 .qolSortBerry{margin:-10px 2%!important;overflow:hidden;top:45%!important;transition:none!important;width:16%}.mq2 .qolSortBerry>img.small{animation:none!important;margin-left:-13px!important;padding:50%!important}.qolSortMiddle{left:40%!important;margin:-10px!important;top:35%!important;transition:none!important}.qolSortMiddle>img{animation:none!important;padding:40px!important}.qolGridField{display:flex!important;display:grid;flex-flow:row wrap;grid-template-columns:repeat(8,12.5%);grid-template-rows:repeat(5,69px);min-height:345px;padding-top:0!important}.mq25 .qolGridField{grid-template-rows:repeat(5,36px);min-height:180px}.qolGridPokeSize{align-items:center;display:inline-flex;flex:1 1 12.5%;justify-content:center;margin:0!important;position:static!important}.qolGridPokeImg{animation:none!important;max-height:70px;max-width:75px}.qolSelectFlavour{display:none}.qolFlavourShown~.qolSelectFlavour{display:inline}.qolFlavourShown~.qolSelectGender,.qolNatureShown~.qolSelectGender{display:none} `+
`.qolHubSuperHead:first-child{border-top-left-radius:5px;border-top-right-radius:5px}.qolHubHead{margin:0;padding:4px;text-align:center}.qolAllSettings{vertical-align:top}.qolAllSettings,.qolChangeLog{border-top:none;height:100%;width:315px}.qolAllSettings>ul{list-style-type:none;padding:0;vertical-align:top}.qolHubTable{border-collapse:collapse;border-spacing:0;width:100%}.qolChangeLogList{margin:0;padding:4px;text-align:left;text-align:center}.qolChangeLogContent{display:none;list-style-type:disc}.expandlist{font-size:16px;list-style-type:none;text-align:center}.slidermenu{cursor:pointer}.qolChangeLogHead{margin:0}.closeHub{cursor:pointer;font-size:20px;margin:0 10px 0 0;text-align:right}.textareahub textarea{box-sizing:border-box;width:100%}#qolStorageOutput{border:1px solid;max-height:100px;overflow-y:auto;padding:3px;user-select:all;word-break:break-all} `+
`#qolpartymod{text-align:center}#qolpartymodcustom h3{font-size:100%;padding:2px}.qolPartyCustomParty{--multiuser-button-height:60pt;--multiuser-border-radius:8px}.qolPartyCustomParty h1{align-items:center;display:flex;justify-content:center}.qolPartyCustomParty #partybox{padding-top:calc(var(--multiuser-button-height) + 1em);position:relative}.qolPartyCustomParty #partybox .party{box-shadow:none}.qolPartyCustomParty #partybox .party>div{position:static}.qolPartyCustomParty #partybox .action{height:auto!important;left:0;min-height:0;position:absolute;top:0;width:100%}.qolPartyCustomParty #partybox .action>a,.qolPartyCustomParty #partybox .action>div{line-height:var(--multiuser-button-height);margin:0;min-height:var(--multiuser-button-height);padding:0}.qolPartyCustomParty #partybox .action .berrybuttons>a{box-sizing:border-box;height:100%!important;line-height:var(--multiuser-button-height)!important;width:100%}.qolPartyCustomParty #partybox .action>a{align-items:center;box-sizing:border-box;display:flex!important;justify-content:center}.qolPartyCustomParty #partybox .action.working,.qolPartyCustomParty #partybox .action:empty,.qolPartyCustomParty #partybox .action>table,.qolPartyCustomParty #partybox .berrybuttons>.tooltip_content{display:none}.qolPartyCustomParty #partybox .party>div:hover>.action a[data-berry]:after{border-color:transparent}.qolPartyCustomParty #partybox .showcase .berrybuttons>a{display:inline-block;position:absolute;text-align:center;width:100%}.qolPartyCustomParty #partybox .showcase .berrybuttons>a img{display:inline-block!important;vertical-align:middle}.qolPartyCustomParty.qolStackMore .qolGetMore,.qolPartyCustomParty.qolStackNext .qolGoNext{height:var(--multiuser-button-height);left:0;line-height:var(--multiuser-button-height);margin:0;padding:0;position:absolute;top:0;width:100%;z-index:1}.qolPartyCustomParty.qolHideParty .party,.qolPartyCustomParty.qolHideParty .showcase{border:none;height:0;overflow:hidden;padding:0}.qolPartyCustomParty.qolHideParty .mu_navlink.toggle{display:none!important}.qolPartyCustomParty.qolCompactParty #partybox .party>div{background:transparent;border:none;margin-bottom:20px;padding:0;width:unset}.qolPartyCustomParty.qolCompactParty #partybox .party .expbar,.qolPartyCustomParty.qolCompactParty #partybox .party .name{display:none}.qolPartyCustomParty.qolCompactParty #partybox .party .pkmn a.qolCompactLink{display:block;height:100%;left:0;position:absolute;top:0;width:100%;z-index:1}.qolPartyCustomParty.qolHideFieldButton .fieldslink,.qolPartyCustomParty.qolHideModeChecks #partybox>label,.qolPartyCustomParty.qolHideTrainerCard #profilebox,.qolPartyCustomParty.qolHideUserName h1{display:none}.qolPartyCustomParty.qolHideShowcase .showcase,.qolPartyCustomParty.qolHideShowcase .showcase+.toggle{display:none!important}.qolPartyCustomParty:not(.qolHideShowcase) .showcase:not(:empty)+.mu_navlink.toggle{display:block!important}.mq2 .qolPartyCustomParty #partybox .party>div,.multi-compact .qolPartyCustomParty #partybox .party>div{display:inline-block}.mq2 .qolPartyCustomParty #partybox .party>div .pkmn,.multi-compact .qolPartyCustomParty #partybox .party>div .pkmn{margin-right:0}.qolPartyCustomParty #partybox .party .action a,.qolPartyHideAll #partybox .party .action a,.qolPartyHideDislike #partybox .party .action a,.qolPartyNiceTable #partybox .party .action a{display:none;position:absolute;width:100%}.qolPartyCustomParty #partybox .party .action .berrybuttons[data-up=any] a[data-berry=aspear],.qolPartyCustomParty #partybox .party .action .berrybuttons[data-up=bitter]>a[data-berry=rawst],.qolPartyCustomParty #partybox .party .action .berrybuttons[data-up=dry]>a[data-berry=chesto],.qolPartyCustomParty #partybox .party .action .berrybuttons[data-up=sour]>a[data-berry=aspear],.qolPartyCustomParty #partybox .party .action .berrybuttons[data-up=spicy]>a[data-berry=cheri],.qolPartyCustomParty #partybox .party .action .berrybuttons[data-up=sweet]>a[data-berry=pecha],.qolPartyCustomParty #partybox .party .action>a,.qolPartyHideAll #partybox .party .action .berrybuttons[data-up=any] a[data-berry=aspear],.qolPartyHideAll #partybox .party .action .berrybuttons[data-up=bitter]>a[data-berry=rawst],.qolPartyHideAll #partybox .party .action .berrybuttons[data-up=dry]>a[data-berry=chesto],.qolPartyHideAll #partybox .party .action .berrybuttons[data-up=sour]>a[data-berry=aspear],.qolPartyHideAll #partybox .party .action .berrybuttons[data-up=spicy]>a[data-berry=cheri],.qolPartyHideAll #partybox .party .action .berrybuttons[data-up=sweet]>a[data-berry=pecha],.qolPartyHideAll #partybox .party .action>a,.qolPartyHideDislike #partybox .party .action .berrybuttons[data-up=any] a[data-berry=aspear],.qolPartyHideDislike #partybox .party .action .berrybuttons[data-up=bitter]>a[data-berry=rawst],.qolPartyHideDislike #partybox .party .action .berrybuttons[data-up=dry]>a[data-berry=chesto],.qolPartyHideDislike #partybox .party .action .berrybuttons[data-up=sour]>a[data-berry=aspear],.qolPartyHideDislike #partybox .party .action .berrybuttons[data-up=spicy]>a[data-berry=cheri],.qolPartyHideDislike #partybox .party .action .berrybuttons[data-up=sweet]>a[data-berry=pecha],.qolPartyHideDislike #partybox .party .action>a,.qolPartyNiceTable #partybox .party .action .berrybuttons[data-up=any] a[data-berry=aspear],.qolPartyNiceTable #partybox .party .action .berrybuttons[data-up=bitter]>a[data-berry=rawst],.qolPartyNiceTable #partybox .party .action .berrybuttons[data-up=dry]>a[data-berry=chesto],.qolPartyNiceTable #partybox .party .action .berrybuttons[data-up=sour]>a[data-berry=aspear],.qolPartyNiceTable #partybox .party .action .berrybuttons[data-up=spicy]>a[data-berry=cheri],.qolPartyNiceTable #partybox .party .action .berrybuttons[data-up=sweet]>a[data-berry=pecha],.qolPartyNiceTable #partybox .party .action>a{display:inline-block}.qolPartyCustomParty #partybox .party .working .berrybuttons,.qolPartyHideAll #partybox .party .working .berrybuttons,.qolPartyHideDislike #partybox .party .working .berrybuttons,.qolPartyNiceTable #partybox .party .working .berrybuttons{opacity:.3}.qolPartyCustomParty .loading,.qolPartyHideAll .loading,.qolPartyHideDislike .loading,.qolPartyNiceTable .loading{user-select:none}.qolPartyHideAll #partybox .party>div>:not(.action),.qolPartyHideAll .tooltip_content,.qolPartyNiceTable #partybox .party>div>:not(.action),.qolPartyNiceTable .tooltip_content{display:none}.qolPartyNiceTable #profilepage #partybox .party{box-shadow:none;width:250px}.qolPartyNiceTable #profilepage #partybox .party>div{border-radius:0;border-width:1px 1px 0;width:210px}.qolPartyNiceTable #profilepage #partybox .party>div:first-child{border-radius:6px 6px 0 0}.qolPartyNiceTable #profilepage #partybox .party>div:nth-child(6){border-bottom-width:1px;border-radius:0 0 6px 6px}.qolPartyCustomParty:not(.qolHideShowcase) #partybox:not(.swap-panels) .showcase,.qolPartyHideAll:not(.qolHideShowcase) #partybox:not(.swap-panels) .showcase{border:none;display:flex!important;height:0;margin:0;overflow:hidden;padding:0}.qolPartyCustomParty #partybox.swap-panels>.party,.qolPartyHideAll #partybox.swap-panels>.party{height:0;margin:0;overflow:hidden}.qolPartyCustomParty .party .action a,.qolPartyHideAll .party .action a{z-index:3}.qolPartyCustomParty .showcase .action a,.qolPartyHideAll .showcase .action a{z-index:2}.qolPartyHideAll #profilepage #partybox .party{box-shadow:none}.qolPartyHideAll #profilepage #partybox .party>div{background:transparent;border:none;height:0;overflow:hidden;padding:0;position:unset;width:0}.qolPartyHideAll .party .action,.qolPartyHideAll .party .action .berrybuttons,.qolPartyHideAll .showcase .action,.qolPartyHideAll .showcase .action .berrybuttons{height:0;position:unset!important}.qolPartyHideAll .party .action a,.qolPartyHideAll .showcase .action a{margin-left:10px;overflow:hidden;padding:3px;position:absolute;width:112px!important}.qolPartyHideAll .party .action .berrybuttons a,.qolPartyHideAll .showcase .action .berrybuttons a{border-radius:8px;padding:5px}.qolPartyHideAll .party .action table,.qolPartyHideAll .showcase .action table{display:none}.qolPartyHideAll .compact-view-toggle+label{display:inline-block;margin:0 4px 8px}.qolPartyHideAll #profilebox,.qolPartyHideAll #trainerimage,.qolPartyHideAll .fieldslink,.qolPartyHideAll .showcase+.mu_navlink.toggle,.qolPartyHideAll .working{display:none!important} `+
`.badgelist>table>tbody>tr>td>.itemtooltip{margin-top:-28px;position:relative}.badgelist>table>tbody>tr>td>p{margin-block-end:0;margin-block-start:0}.qolBadges{border-collapse:collapse}.qolBadgesTop td{border-top:1px solid}.qolBadgesBot td:first-of-type img{margin-right:5px;vertical-align:middle} `;
}
static fieldSearchHTML() {
return `<div id="fieldsearch"><button type="button" class="collapsible"><b>Advanced Field search</b></button><div class="collapsible_content"><p>Check the boxes of Pokemon you wish to find in this field! You can select multiple checkboxes at once and it will notify you whenever it will find the types of Pokemons you selected!</p><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldShiny">Shiny</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldAlbino">Albino</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldMelanistic">Melanistic</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldPrehistoric">Prehistoric</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldDelta">Delta</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldMega">Mega</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldStarter">Starter</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldCustomSprite">Custom Sprite</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldItem">Holds Item</label></td></tr></tbody></table><h4>Search on type</h4><p>Select which types of Pokemon you wish to find</p><input type="button" value="Add type" id="addFieldTypeSearch"><div id="fieldTypes"><div class="0"></div></div><h4>Search on nature</h4><p>Select which natures of Pokemon you wish to find</p><input type="button" value="Add nature" id="addFieldNatureSearch"><div id="natureTypes"><div class="0"></div></div><h4>Search on egg group</h4><p>Select which egg groups you wish to find</p><input type="button" value="Add egg group" id="addFieldEggGroupSearch"><div id="eggGroupTypes"><div class="0"></div></div><h4>Custom Search</h4><p>Here you can custom find any Pokemon you want! Hover over "Custom Search Help" for more info.</p><div class="tooltip_trigger qoltooltip_trigger">Custom Search Help</div><div class="tooltip_content customsearchtooltip"><span class="tooltiptext">Custom search by Pokemon name<br><br>Select Custom Egg and/or Custom Pokemon and type the name of the Pokemon you wish to find to find that Pokemon or the egg of that Pokemon. If you want to find a Pokemon with a specific gender, select the gender you wish to find.<br><br>Custom search by image code<br><br>Select By img code (and de-select Custom Egg & Custom Pokemon checkboxes) to find a Pokemon or egg by img code. For example you wish to find a Bulbasaur. When the URL for its image is this:<br>//pfq-static.com/img/pkmn/1/g/g.png/t=1474027727<br>paste only '1/g/g' (without the quotes), and now it will show you when a Bulbasaur is found! You may also copy the complete link.<br><a href="https://docs.google.com/spreadsheets/d/1rD1VZNTQRYXMOVKvGasjmMdMJu-iheE-ajsFkfs4QXA/edit?usp=sharing">List of Eggs Image Codes</a><br><br>More info on finding Pokemon with their img code:<br><br><a href="https://pokefarm.com/forum/thread/127552/Site-Skins-How-To-and-Helpful-CSS">"Pokemon Modifications - Make Shelter Pokemon Stand Out"</a></span></div><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldCustomEgg">Custom Egg</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldCustomPokemon">Custom Pokemon</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldCustomPng">By img code</label></td></tr></tbody></table><h4>Search on gender</h4><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldMale">Male</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldFemale">Female</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldNoGender">Genderless</label></td></tr></tbody></table><h4>Search Keys</h4><input type="button" value="Add searchfield" id="addTextField"><div id="searchkeys"><div class="0"></div></div><br></div></div>`;
}
static fieldSortHTML() {
return `<div id="fieldorder"><label><input type="checkbox" class="qolsetting qolalone" data-key="fieldByBerry"> Sort by berries</label> <label><input type="checkbox" class="qolsetting qolalone" data-key="fieldByMiddle"> Sort in the middle</label> <label><input type="checkbox" class="qolsetting qolalone" data-key="fieldByGrid"> Align to grid</label> <label><input type="checkbox" class="qolsetting" data-key="fieldClickCount"> Click counter</label></div>`;
}
static labOptionsHTML() {
return `<div id="labCustomSearch" class="center"><p class="boldp">Egg type search</p><p>Select which egg types you would like to find in the lab. You can select multiple!</p><input type="checkbox" class="qolsetting" data-key="findTypeEgg">Egg types <input type="button" value="Add typesearch" id="addLabTypeList"><div id="labTypes"><div class="0"></div></div><p class="boldp">Egg custom search</p><p>Add the pokemon name or Img code (complete link starting from //pfq..) that you would like to find in the lab in a searchfield. You can select multiple!</p><input type="checkbox" class="qolsetting" data-key="customEgg">Custom Egg <input type="button" value="Add searchfield" id="addLabSearch"><div id="searchkeys"><div class="0"></div></div></div>`;
}
static evolveFastHTML() {
return `<ul class="qolEvolveTypeList"><li class="expandlist"><h3 class="slidermenu">Normal</h3><ul class="normal 0 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Fire</h3><ul class="Fire 1 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Water</h3><ul class="Water 2 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Electric</h3><ul class="Electric 3 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Grass</h3><ul class="Grass 4 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Ice</h3><ul class="Ice 5 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Fighting</h3><ul class="Fighting 6 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Poison</h3><ul class="Poison 7 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Ground</h3><ul class="Ground 8 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Flying</h3><ul class="Flying 9 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Psychic</h3><ul class="Psychic 10 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Bug</h3><ul class="Bug 11 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Rock</h3><ul class="Rock 12 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Ghost</h3><ul class="Ghost 13 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Dragon</h3><ul class="Dragon 14 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Dark</h3><ul class="Dark 15 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Steel</h3><ul class="Steel 16 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Fairy</h3><ul class="Fairy 17 qolChangeLogContent"></ul></li><br><li class="expandlist"><h3 class="slidermenu">Unknown Types</h3><ul class="Unknown 18 qolChangeLogContent"></ul></li></ul>`;
}
static privateFieldSearchHTML() {
return `<div id="fieldsearch"><button type="button" class="collapsible"><b>Advanced Field search</b></button><div class="collapsible_content"><p>Check the boxes of Pokemon you wish to find in this field! You can select multiple checkboxes at once and it will notify you whenever it will find the types of Pokemons you selected!</p><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldShiny">Shiny</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldAlbino">Albino</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldMelanistic">Melanistic</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldPrehistoric">Prehistoric</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldDelta">Delta</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldMega">Mega</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldStarter">Starter</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldCustomSprite">Custom Sprite</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldItem">Holds Item</label></td></tr></tbody></table><h4>Search on type</h4><p>Select which types of Pokemon you wish to find</p><input type="button" value="Add type" id="addPrivateFieldTypeSearch"><div id="fieldTypes"><div class="0"></div></div><h4>Search on nature</h4><p>Select which natures of Pokemon you wish to find</p><input type="button" value="Add nature" id="addPrivateFieldNatureSearch"><div id="natureTypes"><div class="0"></div></div><h4>Search on egg group</h4><p>Select which egg groups you wish to find</p><input type="button" value="Add egg group" id="addPrivateFieldEggGroupSearch"><div id="eggGroupTypes"><div class="0"></div></div><h4>Custom Search</h4><p>Here you can custom find any Pokemon you want! Hover over "Custom Search Help" for more info.</p><div class="tooltip_trigger qoltooltip_trigger">Custom Search Help</div><div class="tooltip_content customsearchtooltip"><span class="tooltiptext">Custom search by Pokemon name<br><br>Select Custom Egg and/or Custom Pokemon and type the name of the Pokemon you wish to find to find that Pokemon or the egg of that Pokemon. If you want to find a Pokemon with a specific gender, select the gender you wish to find.<br><br>Custom search by image code<br><br>Select By img code (and de-select Custom Egg & Custom Pokemon checkboxes) to find a Pokemon or egg by img code. For example you wish to find a Bulbasaur. You paste it's Img code in the search bar:<br>//pfq-static.com/img/pkmn/1/g/g.png/t=1474027727<br>and now it will show you when a Bulbasaur is found! Copy paste the complete link (starting from //) or you won't find anything.<br><br><a href="https://docs.google.com/spreadsheets/d/1rD1VZNTQRYXMOVKvGasjmMdMJu-iheE-ajsFkfs4QXA/edit?usp=sharing">List of Eggs Image Codes</a><br><br>More info on finding Pokemon with their img code:<br><br><a href="https://pokefarm.com/forum/thread/127552/Site-Skins-How-To-and-Helpful-CSS">"Pokemon Modifications - Make Shelter Pokemon Stand Out"</a></span></div><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="customEgg">Custom Egg</label></td><td><label><input type="checkbox" class="qolsetting" data-key="customPokemon">Custom Pokemon</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="customPng">By img code</label></td></tr></tbody></table><h4>Search on gender</h4><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="fieldMale">Male</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldFemale">Female</label></td><td><label><input type="checkbox" class="qolsetting" data-key="fieldNoGender">Genderless</label></td></tr></tbody></table><h4>Search Keys</h4><input type="button" value="Add searchfield" id="addTextField"><div id="searchkeys"><div class="0"></div></div></div><br></div>`;
}
static shelterOptionsHTML() {
return `<div id="shelteroptionsqol"><p>Check the boxes of Pokemon you wish to find in the shelter! You can select multiple checkboxes at once and it will notify you whenever it will find the types of Pokemon you selected! Use the letter 'n' key to select and cycle through the Pokemon matched by the script.</p><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="findNewEgg">New Egg</label></td><td><label><input type="checkbox" class="qolsetting" data-key="findNewPokemon">New Pokemon</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="findShiny">Shiny</label></td><td><label><input type="checkbox" class="qolsetting" data-key="findAlbino">Albino</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="findMelanistic">Melanistic</label></td><td><label><input type="checkbox" class="qolsetting" data-key="findPrehistoric">Prehistoric</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="findDelta">Delta</label></td><td><label><input type="checkbox" class="qolsetting" data-key="findMega">Mega</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="findStarter">Starter</label></td><td><label><input type="checkbox" class="qolsetting" data-key="findCustomSprite">Custom Sprite</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="findLegendary">Legendary</label></td></tr></tbody></table><h4>Search on type</h4><p>Select which types of Pokemon and/or eggs you wish to find</p><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="findTypeEgg">Egg types</label></td><td><label><input type="checkbox" class="qolsetting" data-key="findTypePokemon">Pokemon types</label></td></tr></tbody></table><input type="button" value="Add typesearch" id="addShelterTypeList"><div id="shelterTypes"><div class="0"></div></div><h4>Custom Search</h4><p>Here you can custom find any Pokemon you want! Hover over "Custom Search Help" for more info.</p><div class="tooltip_trigger qoltooltip_trigger">Custom Search Help</div><div class="tooltip_content customsearchtooltip"><span class="tooltiptext">Custom search by Pokemon name<br><br>Select Custom Egg and/or Custom Pokemon and type the name of the Pokemon you wish to find to find that Pokemon or the egg of that Pokemon. If you want to find a Pokemon with a specific gender, select the gender you wish to find.<br><br>Custom search by image code<br><br>Select By img code (and de-select Custom Egg & Custom Pokemon checkboxes) to find a Pokemon or egg by img code. For example you wish to find a Bulbasaur. You paste it's Img code in the search bar:<br>//pfq-static.com/img/pkmn/1/g/g.png/t=1474027727<br>and now it will show you when a Bulbasaur is found! Copy paste the complete link (starting from //) or you won't find anything.<br><br><a href="https://docs.google.com/spreadsheets/d/1rD1VZNTQRYXMOVKvGasjmMdMJu-iheE-ajsFkfs4QXA/edit?usp=sharing">List of Eggs Image Codes</a><br><br>More info on finding Pokemon with their img code:<br><br><a href="https://pokefarm.com/forum/thread/127552/Site-Skins-How-To-and-Helpful-CSS">"Pokemon Modifications - Make Shelter Pokemon Stand Out"</a></span></div><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="customEgg">Custom Egg</label></td><td><label><input type="checkbox" class="qolsetting" data-key="customPokemon">Custom Pokemon</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="customPng">By img code</label></td></tr></tbody></table><h4>Search on Gender</h4><table><tbody><tr><td><label><input type="checkbox" class="qolsetting" data-key="findMale">Male</label></td><td><label><input type="checkbox" class="qolsetting" data-key="findFemale">Female</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting" data-key="findNoGender">Genderless</label></td></tr></tbody></table><h4>Search Keys</h4><input type="button" value="Add searchfield" id="addShelterTextfield"><div id="searchkeys"><div class="0"></div></div></div>`;
}
static shelterSortHTML() {
return `<div id="qolsheltersort"><label><input type="checkbox" class="qolsetting" data-key="shelterGrid"><span>Sort by Grid</span></label><div style="padding: 5px">Sprite size mode:<p style="margin: 5px 0"><input type="radio" id="spriteSizeAuto" name="shelterSpriteSize" value="auto"> <label for="spriteSizeAuto">Automatic</label></p><p style="margin: 5px 0"><input type="radio" id="spriteSizeLarge" name="shelterSpriteSize" value="large"> <label for="spriteSizeLarge">Large</label></p><p style="margin: 5px 0"><input type="radio" id="spriteSizeSmall" name="shelterSpriteSize" value="small"> <label for="spriteSizeSmall">Small</label></p></div></div>`;
}
static qolHubHTML() {
return `<div class="dialog"><div><div><div style="margin-top: 1em; margin-bottom: 1em;"><h3 class="qolHubHead qolHubSuperHead">Quality of Life userscript Hub</h3><div><p>Welcome to the user hub of the QoL userscript! Here you can adjust the script settings and view the latest changes to the script.</p><div><table class="qolHubTable"><tbody><tr><td><h3 class="qolHubHead">Settings</h3></td></tr><tr><td class="qolAllSettings"><ul><li><label><input type="checkbox" class="qolhubsetting" data-key="enableDaycare"> <span>Highlight Breeding Matches</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="shelterEnable"> <span>Enable All Shelter QoL Features</span></label><ul><li><label><input type="checkbox" class="qolhubsetting" data-key="shelterFeatureEnables.search"> <span>Advanced Searching</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="shelterFeatureEnables.sort"> <span>Advanced Sorting</span></label></li></ul></li><li><label><input type="checkbox" class="qolhubsetting" data-key="fishingEnable"> <span>Fishing Multi-Select Controls</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="publicFieldEnable"> <span>Enable All Public Fields QoL Features</span></label><ul><li><label><input type="checkbox" class="qolhubsetting" data-key="publicFieldFeatureEnables.search"> <span>Advanced Searching</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="publicFieldFeatureEnables.sort"> <span>Advanced Sorting</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="publicFieldFeatureEnables.tooltip"> <span>Tooltips Enable/Disable</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="publicFieldFeatureEnables.pkmnlinks"> <span>Pokemon Link List</span></label></li></ul></li><li><label><input type="checkbox" class="qolhubsetting" data-key="privateFieldEnable"> <span>Enable All Private Fields QoL Features</span></label><ul><li><label><input type="checkbox" class="qolhubsetting" data-key="privateFieldFeatureEnables.search"> <span>Advanced Searching</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="privateFieldFeatureEnables.release"> <span>Multi-Select Controls (Move & Release)</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="privateFieldFeatureEnables.tooltip"> <span>Tooltips Enable/Disable</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="privateFieldFeatureEnables.pkmnlinks"> <span>Pokemon Link List</span></label></li></ul></li><li><label><input type="checkbox" class="qolhubsetting" data-key="partyMod"> <span>Party click mod</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="easyEvolve"> <span>Easy evolving</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="labNotifier"> <span>Lab Notifier</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="dexFilterEnable"> <span>Multiple Types Filtering</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="condenseWishforge"> <span>Smaller Crafted Badges List</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="interactionsEnable"> <span>Interactions page (sent multi-link)</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="summaryEnable"> <span>Summary page (pkmnpanel code)</span></label></li><li><label><input type="checkbox" class="qolhubsetting" data-key="dojoEnable"> <span>Dojo page (perfect stat highlight)</span></label></li></ul><span><b>Note</b>: Please refresh the page to see any changes made to these settings take effect.</span></td></tr><tr><td><h3 class="qolHubHead">Change log</h3></td></tr><tr><td class="qolChangeLog"><ul class="qolChangeLogList"><li class="expandlist"><span>Change log was removed as of April 2021. Visit <a href="https://github.com/tarashia/PokeFarmQoL" target="_blank">GitHub</a> for the latest list of features</span></li></ul></td></tr><tr><td colspan="2" class="qolDexUpdate"><h3 class="qolHubHead">Pokedex Settings</h3></td></tr><tr id="qolDexUpdateRow"><td colspan="2" class="qolAllSettings"><span>Notice that you can't find the newly added Eggs or Pokemon in shelter? You may have to update your pokedex. Please visit the Dex page, and the Userscript will update itself with the newest pokemon. Then, in order to use the update, refresh the page where you are using the script's search features.</span><br><span>Date last updated: <span class="qolDate"></span></span></td></tr><tr id="qolDexClearRow"><td colspan="2"><input type="button" value="Clear Cached Dex" id="clearCachedDex"></td></tr><tr><td colspan="2" class="qolAllSettings"><h3 class="qolHubHead">Css Settings</h3></td></tr><tr><td colspan="2"><span>Add your custom CSS! If you have an error in your CSS you won't get notified, so read your code carefully. Still doesn't work? Try: '!important'. The custom CSS is being loaded after the page loads, so it's possible that there will be a short delay before your CSS changes apply. Note: LESS formatting is not supported; if you're copying LESS-formatted code from a guide, you should <a href="https://lesscss.org/less-preview/" target="_blank">convert it to plain CSS first.</a></span></td></tr><tr><td colspan="2" class="qolAllSettings"><div class="textareahub"><textarea id="qolcustomcss" rows="15" class="qolhubsetting" data-key="customCss"></textarea></div></td></tr><tr><td colspan="2" class="qolAllSettings"><h3 class="qolHubHead">Debugging Corner</h3></td></tr><tr id="qolDebuggingCornerRow"><td colspan="2" class="qolAllSettings"><span>Use these controls to reset the settings for a particular page back to its defaults</span><br><span><b>Page Select</b></span><!-- Option values correspond to keys in the PAGES object in the main script --> <select name="Page Select" class="qolHubResetSettingsSelect" data-key="resetPageSettings"><option value="None">None</option><option value="Lab">Lab</option><option value="Multiuser">Multiuser</option><option value="PrivateFields">Private Fields</option><option value="PublicFields">Public Fields</option><option value="Shelter">Shelter</option></select> <input type="button" value="Reset Page Settings" id="resetPageSettings"> <input type="button" value="Reset ALL Settings" id="resetAllSettings"></td></tr><tr><td><br>Some QoL features may log problems or errors here. You may be asked about this when reporting bugs. <input type="button" value="View errors" id="qolErrorConsole"><ul id="qolConsoleContent" style="word-break:break-all;"></ul><br>The QoL settings are stored in a cookie on your browser. You may be asked to post them when reporting bugs. <input type="button" value="Load settings" id="qolStorageLog"><div id="qolStorageOutput" style="display: none;"></div></td></tr></tbody></table></div></div><p class="closeHub">Close</p></div></div></div></div>`;
}
static publicFieldTooltipModHTML() {
return `<div id="tooltipenable"><button type="button" class="collapsible"><b>Tooltip Settings</b></button><div class="collapsible_content"><span>The "Enable tooltip" settings force the tooltip on or off. To revert back to Pokefarm's default tooltip settings, uncheck "Enable QoL Tooltip Changes" and refresh the page.</span><hr><table><tr><td><label><input type="checkbox" class="qolsetting tooltipsetting" data-key="tooltipEnableMods"> Enable QoL Tooltip Settings</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting tooltipsetting" data-key="tooltipNoBerry"> Hide tooltip<br>(No berry selected)</label></td><td><label><input type="checkbox" class="qolsetting tooltipsetting" data-key="tooltipBerry"> Hide tooltip<br>(Berry selected)</label></td></tr></table></div></div>`;
}
static privateFieldTooltipModHTML() {
return `<div id="tooltipenable"><button type="button" class="collapsible"><b>Tooltip Settings</b></button><div class="collapsible_content"><span>The "Enable tooltip" settings force the tooltip on or off. To revert back to Pokefarm's default tooltip settings, uncheck "Enable QoL Tooltip Changes" and refresh the page.</span><hr><table><tr><td><label><input type="checkbox" class="qolsetting tooltipsetting" data-key="tooltipEnableMods"> Enable QoL Tooltip Settings</label></td></tr><tr><td><label><input type="checkbox" class="qolsetting tooltipsetting" data-key="tooltipNoBerry"> Hide tooltip</label></td></tr></table></div></div>`;
}
static qolHubLinkHTML() {
return `<li data-name="QoL"><a title="QoL Settings"><img src="https://i.imgur.com/L6KRli5.png" alt="QoL Settings">QoL </a><!-- The QoL hub doesn't exist until opened; store custom errors here initially instead --><ul style="display: none;" id="qolConsoleHolder"></ul></li>`;
}
static massReleaseSelectHTML() {
return `<label id="selectallfish"><input class="qolsetting" id="selectallfishcheckbox" type="checkbox">Select all</label> <label id="movefishselectany"><input class="qolsetting" id="movefishselectanycheckbox" type="checkbox">Select Any</label> <label id="movefishselectsour"><input class="qolsetting" id="movefishselectsourcheckbox" type="checkbox">Select Sour</label> <label id="movefishselectspicy"><input class="qolsetting" id="movefishselectspicycheckbox" type="checkbox">Select Spicy</label> <label id="movefishselectdry"><input class="qolsetting" id="movefishselectdrycheckbox" type="checkbox">Select Dry</label> <label id="movefishselectsweet"><input class="qolsetting" id="movefishselectsweetcheckbox" type="checkbox">Select Sweet</label> <label id="movefishselectbitter"><input class="qolsetting" id="movefishselectbittercheckbox" type="checkbox">Select Bitter</label>`;
}
static partyModHTML() {
return `<div id="qolpartymod"><label><input type="checkbox" class="qolsetting qolalone" data-key="hideDislike">Hide disliked berries</label> <label><input type="checkbox" class="qolsetting qolalone" data-key="niceTable">Show in table</label> <label><input type="checkbox" class="qolsetting qolalone" data-key="hideAll">Hide all click fast</label> <label><input type="checkbox" class="qolsetting qolalone" data-key="customParty">Customize</label></div>`;
}
static partyModCustomHTML() {
return `<div id="qolpartymodcustom" class="panel accordion" style="display:none;"><h3><a href="#">Custom options <svg viewBox="-6 -6 12 12" width="16" height="16" class="acctoggle"><polygon fill="currentColor" points="-2,-4 4,0 -2,4"></polygon></svg></a></h3><div style="display:none;"><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="stackNextButton">Stack next button</label></div><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="stackMoreButton">Stack get more button</label></div><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="showPokemon">Show pokemon</label></div><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="compactPokemon">Compact pokemon (if shown)</label></div><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="clickablePokemon">Clickable pokemon (if compact)</label></div><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="showTrainerCard">Show trainer card</label></div><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="showFieldButton">Show field button</label></div><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="showModeChecks">Show view mode checks</label></div><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="showUserName">Show user name</label></div><div class="customopt"><label><input type="checkbox" class="qolsetting" data-key="includeShowcase">Include showcase</label></div></div></div>`;
}
}
/*
This is a singleton wrapper on the settings/dex classes
It makes it easier to get the master settings instance,
without needing to explicitly pass it around between functions
*/
let UserSettingsHandle = (function () {
let settings;
let dex;
return {
getSettings: function () {
if (!settings) {
settings = new UserSettings();
}
return settings;
},
getDex: function() {
if (!dex) {
dex = new UserPokedex();
}
return dex;
}
};
})();
// Do not call this constructor directly to get or create a settings object
// Always call UserSettingsHandle.getSettings();
class UserSettings {
constructor() {
this.setDefaults();
/*
* used to tie "global" enable settings in USER_SETTINGS to the more
* granular settings that are related to the same page
*/
this.LINKED_SETTINGS = [
{
'manager': 'shelterEnable',
'managed': 'shelterFeatureEnables'
},
{
'manager': 'publicFieldEnable',
'managed': 'publicFieldFeatureEnables'
},
{
'manager': 'privateFieldEnable',
'managed': 'privateFieldFeatureEnables'
},
];
}
setDefaults() {
// default settings when the script gets loaded the first time
this.customCss = '';
this.enableDaycare = true;
this.shelterEnable = true;
this.fishingEnable = true;
this.publicFieldEnable = true;
this.privateFieldEnable = true;
this.partyMod = true;
this.easyEvolve = true;
this.labNotifier = true;
this.dexFilterEnable = true;
this.condenseWishforge = true;
this.interactionsEnable = true;
this.summaryEnable = true;
this.dojoEnable = true;
this.shelterFeatureEnables = {
search: true,
sort: true,
};
this.publicFieldFeatureEnables = {
search: true,
sort: true,
release: true,
tooltip: true,
pkmnlinks: true
};
this.privateFieldFeatureEnables = {
search: true,
release: true,
tooltip: true,
pkmnlinks: true
};
}
/// load settings from an object that is not of type UserSettings
load(settingsObj) {
try {
const countScriptSettings = Object.keys(this).length;
const localStorageString = settingsObj;
const countLocalStorageSettings = Object.keys(localStorageString).length;
// adds new settings to this class
if (countLocalStorageSettings < countScriptSettings) {
const newSettings = $.extend(true, this, settingsObj);
this.copyFields(newSettings);
}
// removes objects from the local storage if they don't exist anymore. Not yet possible..
if (countLocalStorageSettings > countScriptSettings) {
/* do nothing at the moment */
}
}
catch (err) {
Helpers.writeCustomError('Error while loading settings object: '+err,'error',err);
}
if (settingsObj != this) {
this.copyFields(settingsObj);
// this = JSON.parse(LocalStorageManager.getItem(this.SETTINGS_SAVE_KEY));
}
}
copyFields(settingsObj) {
const recursiveCopy = (object, key, value) => {
// typeof null returns "object" - disclude it explicitly
if (value !== null && typeof value === 'object') {
for (const [_key, _value] of Object.entries(value)) {
recursiveCopy(object[key], _key, _value);
}
} else {
object[key] = value;
}
};
for (const [key, value] of Object.entries(settingsObj)) {
recursiveCopy(this, key, value);
}
}
}
// Do not call this constructor directly to get or create a dex object
// Always call UserSettingsHandle.getDex();
class UserPokedex {
constructor() {
this.loadDexFromStorage();
}
loadDexFromStorage() {
console.log('Requesting dex from storage');
const dateAndDex = LocalStorageManager.getDexFromStorage();
if(!dateAndDex) {
console.log('No cached dex data found, loading static data');
this.DEX_UPDATE_DATE = undefined;
this.DEX_DATA = (`{"columns":["id","name","type1","type2","eggs","eggdex","pkmn","pokedex","shinydex","albidex","melandex"],"types":["normal","fire","water","electric","grass","ice","fighting","poison","ground","flying","psychic","bug","rock","ghost","dragon","dark","steel","fairy"],"regions":{"1":[["001","Bulbasaur",4,7,1,1,1,1,0,0,0],["002","Ivysaur",4,7,0,0,1,1,0,0,0],["003","Venusaur",4,7,0,0,2,2,1,0,0],["004","Charmander",1,-1,1,1,1,1,1,0,0],["005","Charmeleon",1,-1,0,0,1,1,1,0,0],["006","Charizard",1,9,0,0,3,3,3,0,1],["007","Squirtle",2,-1,1,1,1,1,1,1,0],["008","Wartortle",2,-1,0,0,1,1,1,1,0],["009","Blastoise",2,-1,0,0,2,2,2,1,0],["010","Caterpie",11,-1,1,1,1,1,1,0,0],["011","Metapod",11,-1,0,0,1,1,1,0,0],["012","Butterfree",11,9,0,0,1,1,1,0,0],["013","Weedle",11,7,1,1,1,1,1,0,0],["014","Kakuna",11,7,0,0,1,1,1,0,0],["015","Beedrill",11,7,0,0,2,2,1,1,0],["016","Pidgey",0,9,1,1,1,1,0,0,0],["017","Pidgeotto",0,9,0,0,1,1,0,0,0],["018","Pidgeot",0,9,0,0,2,2,0,0,0],["019","Rattata",0,-1,2,2,2,2,1,0,0],["020","Raticate",0,-1,0,0,3,3,2,0,0],["021","Spearow",0,9,1,1,1,1,0,0,0],["022","Fearow",0,9,0,0,1,1,0,0,0],["023","Ekans",7,-1,1,1,1,1,1,0,0],["024","Arbok",7,-1,0,0,1,1,1,0,0],["025","Pichu",3,-1,1,1,1,1,1,1,0],["026","Pikachu",3,-1,0,0,1,1,1,0,0],["027","Raichu",3,-1,0,0,2,2,2,0,0],["028","Sandshrew",8,-1,2,2,2,2,0,1,0],["029","Sandslash",8,-1,0,0,2,2,0,0,0],["030","Nidoran",7,-1,1,1,1,1,1,1,0],["031","Nidorina",7,-1,0,0,1,1,1,0,0],["032","Nidoqueen",7,8,0,0,1,1,1,0,0],["033","Nidorino",7,-1,0,0,1,1,1,0,0],["034","Nidoking",7,8,0,0,1,1,1,0,0],["035","Cleffa",17,-1,1,1,1,1,1,0,0],["036","Clefairy",17,-1,0,0,1,1,0,0,0],["037","Clefable",17,-1,0,0,1,1,0,0,0],["038","Vulpix",1,-1,2,2,2,2,2,2,2],["039","Ninetales",1,-1,0,0,2,2,2,2,0],["040","Igglybuff",0,17,1,1,1,1,1,0,0],["041","Jigglypuff",0,17,0,0,1,1,1,0,0],["042","Wigglytuff",0,17,0,0,1,1,1,0,0],["043","Zubat",7,9,1,1,1,1,0,0,0],["044","Golbat",7,9,0,0,1,1,0,0,0],["045","Crobat",7,9,0,0,1,1,0,0,0],["046","Oddish",4,7,1,1,1,1,1,0,0],["047","Gloom",4,7,0,0,1,1,1,0,0],["048","Vileplume",4,7,0,0,1,1,1,0,0],["049","Bellossom",4,-1,0,0,1,1,0,0,0],["050","Paras",11,4,1,1,1,1,0,0,0],["051","Parasect",11,4,0,0,1,1,0,0,0],["052","Venonat",11,7,1,1,1,1,1,0,0],["053","Venomoth",11,7,0,0,1,1,1,0,0],["054","Diglett",8,-1,2,2,2,2,0,0,0],["055","Dugtrio",8,-1,0,0,2,2,0,0,0],["056","Meowth",0,-1,3,3,3,3,0,1,0],["057","Persian",0,-1,0,0,2,2,0,0,0],["058","Psyduck",2,-1,1,1,1,1,0,0,0],["059","Golduck",2,-1,0,0,1,1,0,0,0],["060","Mankey",6,-1,1,1,1,1,0,0,0],["061","Primeape",6,-1,0,0,1,1,0,0,0],["062","Growlithe",1,-1,1,1,1,1,1,1,1],["063","Arcanine",1,-1,0,0,1,1,1,0,0],["064","Poliwag",2,-1,1,1,1,1,0,0,0],["065","Poliwhirl",2,-1,0,0,1,1,0,0,0],["066","Poliwrath",2,6,0,0,1,1,0,0,0],["067","Politoed",2,-1,0,0,1,1,0,0,0],["068","Abra",10,-1,1,1,1,1,1,0,0],["069","Kadabra",10,-1,0,0,1,1,0,1,0],["070","Alakazam",10,-1,0,0,2,2,0,0,0],["071","Machop",6,-1,1,1,1,1,0,0,0],["072","Machoke",6,-1,0,0,1,1,0,0,0],["073","Machamp",6,-1,0,0,1,1,0,0,0],["074","Bellsprout",4,7,1,1,1,1,0,0,0],["075","Weepinbell",4,7,0,0,1,1,0,0,0],["076","Victreebell",4,7,0,0,1,1,0,0,0],["077","Tentacool",2,7,1,1,1,1,1,0,0],["078","Tentacruel",2,7,0,0,1,1,1,0,0],["079","Geodude",12,8,2,2,2,2,1,0,0],["080","Graveler",12,8,0,0,2,2,0,0,0],["081","Golem",12,8,0,0,2,2,0,0,0],["082","Ponyta",1,-1,2,2,2,2,1,2,0],["083","Rapidash",1,-1,0,0,2,2,0,1,0],["084","Slowpoke",2,10,2,2,2,2,0,0,0],["085","Slowbro",2,10,0,0,3,3,1,0,0],["086","Slowking",2,10,0,0,2,2,1,0,0],["087","Magnemite",3,16,1,1,1,1,1,0,0],["088","Magneton",3,16,0,0,1,1,0,0,0],["089","Magnezone",3,16,0,0,1,1,0,0,0],["090","Farfetch'd",0,9,2,2,2,2,0,0,0],["091","Doduo",0,9,1,1,1,1,1,0,0],["092","Dodrio",0,9,0,0,1,1,0,0,0],["093","Seel",2,-1,1,1,1,1,0,0,0],["094","Dewgong",2,5,0,0,1,1,0,0,0],["095","Grimer",7,-1,2,2,2,2,0,0,0],["096","Muk",7,-1,0,0,2,2,0,0,0],["097","Shellder",2,-1,1,1,1,1,0,0,0],["098","Cloyster",2,5,0,0,1,1,0,0,0],["099","Gastly",13,7,1,1,1,1,1,1,0],["100","Haunter",13,7,0,0,1,1,1,0,0],["101","Gengar",13,7,0,0,2,2,2,0,0],["102","Onix",12,8,1,1,1,1,0,0,0],["103","Steelix",16,8,0,0,2,2,1,0,0],["104","Drowzee",10,-1,1,1,1,1,0,0,0],["105","Hypno",10,-1,0,0,1,1,0,0,0],["106","Krabby",2,-1,1,1,1,1,0,0,0],["107","Kingler",2,-1,0,0,1,1,0,0,0],["108","Voltorb",3,-1,1,1,1,1,0,0,0],["109","Electrode",3,-1,0,0,1,1,0,0,0],["110","Exeggcute",4,10,1,1,1,1,0,0,0],["111","Exeggutor",4,10,0,0,2,2,0,0,0],["112","Cubone",8,-1,1,1,1,1,1,0,0],["113","Marowak",8,-1,0,0,3,3,2,0,0],["114","Lickitung",0,-1,1,1,1,1,0,0,0],["115","Lickilicky",0,-1,0,0,1,1,0,0,0],["116","Koffing",7,-1,1,1,1,1,0,0,0],["117","Weezing",7,-1,0,0,2,2,0,0,0],["118","Rhyhorn",8,12,1,1,1,1,0,0,0],["119","Rhydon",8,12,0,0,1,1,0,0,0],["120","Rhyperior",8,12,0,0,1,1,0,0,0],["121","Tangela",4,-1,1,1,1,1,0,0,0],["122","Tangrowth",4,-1,0,0,1,1,1,0,0],["123","Kangaskhan",0,-1,1,1,2,2,0,0,0],["124","Horsea",2,-1,1,1,1,1,0,1,0],["125","Seadra",2,-1,0,0,1,1,0,0,0],["126","Kingdra",2,14,0,0,1,1,0,0,0],["127","Goldeen",2,-1,1,1,1,1,1,0,0],["128","Seaking",2,-1,0,0,1,1,1,0,0],["129","Staryu",2,-1,1,1,1,1,0,0,0],["130","Starmie",2,10,0,0,1,1,0,0,0],["131","Mime Jr.",10,17,1,1,1,1,0,0,0],["132","Mr. Mime",10,17,2,2,2,2,0,0,0],["133","Scyther",11,9,1,1,1,1,1,0,0],["134","Scizor",11,16,0,0,2,2,0,0,0],["135","Smoochum",5,10,1,1,1,1,0,0,0],["136","Jynx",5,10,0,0,1,1,0,0,0],["137","Pinsir",11,-1,1,1,2,2,0,0,0],["138","Tauros",0,-1,1,1,1,1,0,0,0],["139","Magikarp",2,-1,1,1,1,1,1,0,0],["140","Gyarados",2,9,0,0,2,2,1,0,0],["141","Lapras",2,5,1,1,1,1,0,1,0],["142","Ditto",0,-1,1,1,1,1,0,0,0],["143","Eevee",0,-1,1,1,1,1,1,1,0],["144","Vaporeon",2,-1,0,0,1,1,1,0,0],["145","Jolteon",3,-1,0,0,1,1,1,0,0],["146","Flareon",1,-1,0,0,1,1,1,1,0],["147","Espeon",10,-1,0,0,1,1,1,0,0],["148","Umbreon",15,-1,0,0,1,1,1,0,0],["149","Leafeon",4,-1,0,0,1,1,1,1,0],["150","Glaceon",5,-1,0,0,1,1,1,1,0],["151","Sylveon",17,-1,0,0,1,1,1,0,0],["152","Omanyte",12,2,1,1,1,1,1,0,0],["153","Omastar",12,2,0,0,1,1,0,0,0],["154","Kabuto",12,2,1,1,1,1,0,0,0],["155","Kabutops",12,2,0,0,1,1,0,0,0],["156","Aerodactyl",12,9,1,1,2,2,2,1,0],["157","Munchlax",0,-1,1,1,1,1,0,0,0],["158","Snorlax",0,-1,1,1,1,1,0,0,0],["159","Articuno",5,9,2,2,2,2,0,0,0],["160","Zapdos",3,9,2,2,2,2,0,0,0],["161","Moltres",1,9,2,2,2,2,0,0,0],["162","Dratini",14,-1,1,1,1,1,1,1,1],["163","Dragonair",14,-1,0,0,1,1,1,1,0],["164","Dragonite",14,9,0,0,1,1,1,0,0],["165","Mewtwo",10,-1,1,1,3,3,0,0,0],["166","Mew",10,-1,1,1,1,1,0,0,0]],"2":[["167","Chikorita",4,-1,1,1,1,1,0,0,0],["168","Bayleef",4,-1,0,0,1,1,0,0,0],["169","Meganium",4,-1,0,0,1,1,1,0,0],["170","Cyndaquil",1,-1,1,1,1,1,1,0,0],["171","Quilava",1,-1,0,0,1,1,1,0,0],["172","Typhlosion",1,-1,0,0,2,2,1,0,0],["173","Totodile",2,-1,1,1,1,1,0,0,0],["174","Croconaw",2,-1,0,0,1,1,0,0,0],["175","Feraligator",2,-1,0,0,1,1,0,0,0],["176","Sentret",0,-1,1,1,1,1,1,0,0],["177","Furret",0,-1,0,0,1,1,1,0,0],["178","Hoothoot",0,9,1,1,1,1,0,0,0],["179","Noctowl",0,9,0,0,1,1,0,0,0],["180","Ledyba",11,9,1,1,1,1,0,0,0],["181","Ledian",11,9,0,0,1,1,0,0,0],["182","Spinarak",11,7,1,1,1,1,0,0,0],["183","Ariados",11,7,0,0,1,1,0,0,0],["184","Chinchou",2,3,1,1,1,1,0,0,0],["185","Lanturn",2,3,0,0,1,1,0,0,0],["186","Togepi",17,-1,1,1,1,1,1,0,0],["187","Togetic",17,9,0,0,1,1,1,0,0],["188","Togekiss",17,9,0,0,1,1,1,0,0],["189","Natu",10,9,1,1,1,1,0,0,0],["190","Xatu",10,9,0,0,1,1,0,0,0],["191","Mareep",3,-1,1,1,1,1,1,1,0],["192","Flaaffy",3,-1,0,0,1,1,0,0,0],["193","Ampharos",3,-1,0,0,2,2,1,0,0],["194","Azurill",0,17,1,1,1,1,1,0,0],["195","Marill",2,17,1,1,1,1,1,0,0],["196","Azumarill",2,17,0,0,1,1,1,0,0],["197","Bonsly",12,-1,1,1,1,1,0,0,0],["198","Sudowoodo",12,-1,1,1,1,1,0,0,0],["199","Hoppip",4,9,1,1,1,1,1,0,0],["200","Skiploom",4,9,0,0,1,1,0,0,0],["201","Jumpluff",4,9,0,0,1,1,0,0,0],["202","Aipom",0,-1,1,1,1,1,0,0,0],["203","Ambipom",0,-1,0,0,1,1,0,0,0],["204","Sunkern",4,-1,1,1,1,1,0,1,0],["205","Sunflora",4,-1,0,0,1,1,0,0,0],["206","Yanma",11,9,1,1,1,1,0,0,0],["207","Yanmega",11,9,0,0,1,1,0,0,0],["208","Wooper",2,8,1,1,1,1,0,0,0],["209","Quagsire",2,8,0,0,1,1,0,0,0],["210","Murkrow",15,9,1,1,1,1,0,0,0],["211","Honchkrow",15,9,0,0,1,1,0,0,0],["212","Misdreavus",13,-1,1,1,1,1,0,0,0],["213","Mismagius",13,-1,0,0,1,1,0,0,0],["214a","Unown",10,-1,28,28,28,28,0,0,0],["215","Girafarig",0,10,1,1,1,1,0,0,0],["216","Pineco",11,-1,1,1,1,1,0,0,0],["217","Forretress",11,16,0,0,1,1,0,0,0],["218","Dunsparce",0,-1,1,1,1,1,0,0,0],["219","Gligar",8,9,1,1,1,1,1,0,0],["220","Gliscor",8,9,0,0,1,1,1,0,0],["221","Snubbull",17,-1,1,1,1,1,0,0,0],["222","Granbull",17,-1,0,0,1,1,0,0,0],["223","Qwilfish",2,7,2,2,2,2,0,0,0],["224","Shuckle",11,12,1,1,1,1,0,0,0],["225","Heracross",11,6,1,1,2,2,0,0,0],["226","Sneasel",15,5,1,1,1,1,0,0,0],["227","Weavile",15,5,0,0,1,1,1,0,0],["228","Teddiursa",0,-1,1,1,1,1,0,0,0],["229","Ursaring",0,-1,0,0,1,1,0,0,0],["230","Slugma",1,-1,1,1,1,1,0,0,0],["231","Magcargo",1,12,0,0,1,1,0,0,0],["232","Swinub",5,8,1,1,1,1,1,0,0],["233","Piloswine",5,8,0,0,1,1,1,0,0],["234","Mamoswine",5,8,0,0,1,1,1,0,0],["235","Corsola",2,12,2,2,2,2,1,0,0],["236","Remoraid",2,-1,1,1,1,1,0,0,0],["237","Octillery",2,-1,0,0,1,1,0,0,0],["238","Delibird",5,9,1,1,1,1,0,0,0],["239","Skarmory",16,9,1,1,1,1,1,1,0],["240","Houndour",15,1,1,1,1,1,1,1,1],["241","Houndoom",15,1,0,0,2,2,1,0,1],["242","Phanpy",8,-1,1,1,1,1,0,0,0],["243","Donphan",8,-1,0,0,1,1,0,0,0],["244","Stantler",0,-1,1,1,1,1,0,0,0],["245","Smeargle",0,-1,1,1,1,1,0,0,0],["246","Tyrogue",6,-1,1,1,1,1,0,0,0],["247","Hitmonlee",6,-1,0,0,1,1,0,0,0],["248","Hitmonchan",6,-1,0,0,1,1,0,0,0],["249","Hitmontop",6,-1,0,0,1,1,0,0,0],["250","Elekid",3,-1,1,1,1,1,0,0,0],["251","Electabuzz",3,-1,0,0,1,1,0,0,0],["252","Electivire",3,-1,0,0,1,1,1,0,0],["253","Magby",1,-1,1,1,1,1,0,0,0],["254","Magmar",1,-1,0,0,1,1,1,0,0],["255","Magmortar",1,-1,0,0,1,1,0,0,0],["256","Miltank",0,-1,1,1,1,1,1,0,0],["257","Raikou",3,-1,1,1,1,1,1,0,0],["258","Entei",1,-1,1,1,1,1,0,0,0],["259","Suicune",2,-1,1,1,1,1,0,0,0],["260","Larvitar",12,8,1,1,1,1,1,1,0],["261","Pupitar",12,8,0,0,1,1,0,0,0],["262","Tyranitar",12,15,0,0,2,2,1,0,0],["263","Lugia",10,9,1,1,1,1,0,0,0],["264","Ho-oh",1,9,1,1,1,1,0,0,0],["265","Celebi",10,4,1,1,1,1,0,0,0]],"3":[["266","Treecko",4,-1,1,1,1,1,0,0,0],["267","Grovyle",4,-1,0,0,1,1,0,0,0],["268","Sceptile",4,-1,0,0,2,2,1,0,0],["269","Torchic",1,-1,1,1,1,1,0,0,0],["270","Combusken",1,6,0,0,1,1,0,0,0],["271","Blaziken",1,6,0,0,2,2,1,0,0],["272","Mudkip",2,-1,1,1,1,1,0,0,0],["273","Marshtomp",2,8,0,0,1,1,0,0,0],["274","Swampert",2,8,0,0,2,2,0,0,0],["275","Poochyena",15,-1,1,1,1,1,0,0,0],["276","Mightyena",15,-1,0,0,1,1,1,0,0],["277","Zigzagoon",0,-1,2,2,2,2,0,0,0],["278","Linoone",0,-1,0,0,2,2,0,0,0],["279","Wurmple",11,-1,1,1,1,1,1,1,0],["280","Silcoon",11,-1,0,0,1,1,0,1,0],["281","Beautifly",11,9,0,0,1,1,1,1,0],["282","Cascoon",11,-1,0,0,1,1,0,0,0],["283","Dustox",11,7,0,0,1,1,0,0,0],["284","Lotad",2,4,1,1,1,1,1,0,0],["285","Lombre",2,4,0,0,1,1,1,0,0],["286","Ludicolo",2,4,0,0,1,1,1,0,0],["287","Seedot",4,-1,1,1,1,1,0,0,0],["288","Nuzleaf",4,15,0,0,1,1,0,0,0],["289","Shiftry",4,15,0,0,1,1,0,0,0],["290","Taillow",0,9,1,1,1,1,0,0,0],["291","Swellow",0,9,0,0,1,1,0,0,0],["292","Wingull",2,9,1,1,1,1,0,0,0],["293","Pelipper",2,9,0,0,1,1,1,0,0],["294","Ralts",10,17,1,1,1,1,1,1,0],["295","Kirlia",10,17,0,0,1,1,1,0,0],["296","Gardevoir",10,17,0,0,2,2,1,0,0],["297","Gallade",10,6,0,0,2,2,2,0,0],["298","Surskit",11,2,1,1,1,1,0,0,0],["299","Masquerain",11,9,0,0,1,1,0,0,0],["300","Shroomish",4,-1,1,1,1,1,1,1,0],["301","Breloom",4,6,0,0,1,1,1,1,0],["302","Slakoth",0,-1,1,1,1,1,0,0,0],["303","Vigoroth",0,-1,0,0,1,1,0,0,0],["304","Slaking",0,-1,0,0,1,1,0,0,0],["305","Nincada",11,8,1,1,1,1,0,0,0],["306","Ninjask",11,9,0,0,1,1,0,0,0],["307","Shedinja",11,13,0,0,1,1,0,0,0],["308","Whismur",0,-1,1,1,1,1,0,0,0],["309","Loudred",0,-1,0,0,1,1,0,0,0],["310","Exploud",0,-1,0,0,1,1,0,0,0],["311","Makuhita",6,-1,1,1,1,1,0,0,0],["312","Hariyama",6,-1,0,0,1,1,0,0,0],["313","Nosepass",12,-1,1,1,1,1,1,0,0],["314","Probopass",12,16,0,0,1,1,0,0,0],["315","Skitty",0,-1,1,1,1,1,1,1,0],["316","Delcatty",0,-1,0,0,1,1,1,0,0],["317","Sableye",15,13,1,1,2,2,1,0,0],["318","Mawile",16,17,1,1,2,2,2,1,0],["319","Aron",16,12,1,1,1,1,1,1,0],["320","Lairon",16,12,0,0,1,1,0,0,0],["321","Aggron",16,12,0,0,2,2,0,0,0],["322","Meditite",6,10,1,1,1,1,1,0,0],["323","Medicham",6,10,0,0,2,2,1,0,0],["324","Electrike",3,-1,1,1,1,1,1,1,0],["325","Manectric",3,-1,0,0,2,2,1,0,0],["326","Plusle",3,-1,1,1,1,1,1,0,0],["327","Minun",3,-1,1,1,1,1,1,0,0],["328","Volbeat",11,-1,1,1,1,1,0,0,0],["329","Illumise",11,-1,1,1,1,1,0,0,0],["330","Gulpin",7,-1,1,1,1,1,1,0,0],["331","Swalot",7,-1,0,0,1,1,1,0,0],["332","Carvanha",2,15,1,1,1,1,1,0,0],["333","Sharpedo",2,15,0,0,2,2,0,0,0],["334","Wailmer",2,-1,1,1,1,1,0,0,0],["335","Wailord",2,-1,0,0,1,1,0,0,0],["336","Numel",1,8,1,1,1,1,0,0,0],["337","Camerupt",1,8,0,0,2,2,0,0,0],["338","Torkoal",1,-1,1,1,1,1,0,0,0],["339","Spoink",10,-1,1,1,1,1,1,0,0],["340","Grumpig",10,-1,0,0,1,1,1,0,0],["341","Spinda",0,-1,1,1,1,1,0,0,0],["342","Trapinch",8,-1,1,1,1,1,1,1,0],["343","Vibrava",8,14,0,0,1,1,0,0,0],["344","Flygon",8,14,0,0,1,1,1,0,0],["345","Cacnea",4,-1,1,1,1,1,0,0,0],["346","Cacturne",4,15,0,0,1,1,0,0,0],["347","Swablu",0,9,1,1,1,1,0,0,0],["348","Altaria",14,9,0,0,2,2,1,0,0],["349","Zangoose",0,-1,1,1,1,1,0,0,0],["350","Seviper",7,-1,1,1,1,1,1,0,0],["351","Lunatone",12,10,1,1,1,1,0,0,0],["352","Solrock",12,10,1,1,1,1,0,0,0],["353","Barboach",2,8,1,1,1,1,0,0,0],["354","Whiscash",2,8,0,0,1,1,0,0,0],["355","Corphish",2,-1,1,1,1,1,0,0,0],["356","Crawdaunt",2,15,0,0,1,1,0,0,0],["357","Baltoy",8,10,1,1,1,1,0,0,0],["358","Claydol",8,10,0,0,1,1,0,0,0],["359","Lileep",12,4,1,1,1,1,1,1,0],["360","Cradily",12,4,0,0,1,1,0,0,0],["361","Anorith",12,11,1,1,1,1,0,0,0],["362","Armaldo",12,11,0,0,1,1,0,0,0],["363","Feebas",2,-1,1,1,1,1,0,0,0],["364","Milotic",2,-1,0,0,1,1,0,0,0],["365","Castform",0,-1,1,1,4,4,4,0,0],["366","Kecleon",0,-1,1,1,1,1,0,0,0],["367","Shuppet",13,-1,1,1,1,1,0,0,0],["368","Banette",13,-1,0,0,2,2,1,0,0],["369","Duskull",13,-1,1,1,1,1,1,0,0],["370","Dusclops",13,-1,0,0,1,1,0,0,0],["371","Dusknoir",13,-1,0,0,1,1,0,0,0],["372","Tropius",4,9,1,1,1,1,1,0,0],["373","Chingling",10,-1,1,1,1,1,0,0,0],["374","Chimecho",10,-1,1,1,1,1,0,0,0],["375","Absol",15,-1,1,1,2,2,1,1,0],["376","Wynaut",10,-1,1,1,1,1,0,0,0],["377","Wobbuffet",10,-1,1,1,1,1,0,0,0],["378","Snorunt",5,-1,1,1,1,1,1,0,0],["379","Glalie",5,-1,0,0,2,2,1,0,0],["380","Froslass",5,13,0,0,1,1,0,0,0],["381","Spheal",5,2,1,1,1,1,0,1,0],["382","Sealeo",5,2,0,0,1,1,0,0,0],["383","Walrein",5,2,0,0,1,1,0,0,0],["384","Clamperl",2,-1,1,1,1,1,0,0,0],["385","Huntail",2,-1,0,0,1,1,0,0,0],["386","Gorebyss",2,-1,0,0,1,1,0,0,0],["387","Relicanth",2,12,1,1,1,1,0,0,0],["388","Luvdisc",2,-1,1,1,1,1,0,0,0],["389","Bagon",14,-1,1,1,1,1,1,0,0],["390","Shelgon",14,-1,0,0,1,1,1,0,0],["391","Salamence",14,9,0,0,2,2,0,0,0],["392","Beldum",16,10,1,1,1,1,0,0,0],["393","Metang",16,10,0,0,1,1,0,0,0],["394","Metagross",16,10,0,0,2,2,0,0,0],["395","Regirock",12,-1,1,1,1,1,0,0,0],["396","Regice",5,-1,1,1,1,1,0,0,0],["397","Registeel",16,-1,1,1,1,1,0,0,0],["398","Latias",14,10,1,1,2,2,0,0,0],["399","Latios",14,10,1,1,2,2,0,0,0],["400","Kyogre",2,-1,1,1,2,2,0,0,0],["401","Groudon",8,-1,1,1,2,2,0,0,0],["402","Rayquaza",14,9,1,1,2,2,0,0,0],["403","Jirachi",16,10,1,1,1,1,0,0,0],["404","Deoxys",10,-1,1,1,4,4,0,0,0]],"4":[["405","Turtwig",4,-1,1,1,1,1,0,0,0],["406","Grotle",4,-1,0,0,1,1,0,0,0],["407","Torterra",4,8,0,0,1,1,0,0,0],["408","Chimchar",1,-1,1,1,1,1,0,0,0],["409","Monferno",1,6,0,0,1,1,0,0,0],["410","Infernape",1,6,0,0,1,1,0,0,0],["411","Piplup",2,-1,1,1,1,1,0,0,0],["412","Prinplup",2,-1,0,0,1,1,0,0,0],["413","Empoleon",2,16,0,0,1,1,0,0,0],["414","Starly",0,9,1,1,1,1,1,0,0],["415","Staravia",0,9,0,0,1,1,1,0,0],["416","Staraptor",0,9,0,0,1,1,1,0,0],["417","Bidoof",0,-1,1,1,1,1,1,0,0],["418","Bibarel",0,2,0,0,1,1,0,0,0],["419","Kricketot",11,-1,1,1,1,1,0,0,0],["420","Kricketune",11,-1,0,0,1,1,0,0,0],["421","Shinx",3,-1,1,1,1,1,1,1,0],["422","Luxio",3,-1,0,0,1,1,0,0,0],["423","Luxray",3,-1,0,0,1,1,0,0,0],["424","Budew",4,7,1,1,1,1,1,0,0],["425","Roselia",4,7,1,1,1,1,0,0,0],["426","Roserade",4,7,0,0,1,1,0,0,0],["427","Cranidos",12,-1,1,1,1,1,0,0,0],["428","Rampardos",12,-1,0,0,1,1,0,0,0],["429","Shieldon",12,16,1,1,1,1,1,0,0],["430","Bastiodon",12,16,0,0,1,1,0,0,0],["431","Burmy",11,-1,1,1,3,3,0,0,0],["432","Wormadam",11,4,0,0,3,3,3,0,0],["433","Mothim",11,9,0,0,1,1,0,0,0],["434","Combee",11,9,1,1,1,1,1,0,0],["435","Vespiquen",11,9,0,0,1,1,0,0,0],["436","Pachirisu",3,-1,1,1,1,1,1,1,0],["437","Buizel",2,-1,1,1,1,1,1,0,0],["438","Floatzel",2,-1,0,0,1,1,0,0,0],["439","Cherubi",4,-1,1,1,1,1,1,0,0],["440s","Cherrim",4,-1,0,0,2,2,2,0,0],["441","Shellos",2,-1,1,1,2,2,0,1,0],["442","Gastrodon",2,8,0,0,2,2,0,0,0],["443","Drifloon",13,9,1,1,1,1,0,0,0],["444","Drifblim",13,9,0,0,1,1,1,0,0],["445","Buneary",0,-1,1,1,1,1,0,0,0],["446","Lopunny",0,-1,0,0,2,2,2,0,0],["447","Glameow",0,-1,1,1,1,1,0,0,0],["448","Purugly",0,-1,0,0,1,1,0,0,0],["449","Stunky",7,15,1,1,1,1,1,1,0],["450","Skuntank",7,15,0,0,1,1,1,0,0],["451","Bronzor",16,10,1,1,1,1,0,0,0],["452","Bronzong",16,10,0,0,1,1,0,0,0],["453","Happiny",0,-1,1,1,1,1,0,0,0],["454","Chansey",0,-1,1,1,1,1,0,0,0],["455","Blissey",0,-1,0,0,1,1,0,0,0],["456","Chatot",0,9,1,1,1,1,0,0,0],["457","Spiritomb",13,15,1,1,1,1,1,1,0],["458","Gible",14,8,1,1,1,1,0,0,0],["459","Gabite",14,8,0,0,1,1,1,0,0],["460","Garchomp",14,8,0,0,2,2,0,0,0],["461","Riolu",6,-1,1,1,1,1,1,1,0],["462","Lucario",6,16,0,0,2,2,1,1,0],["463","Hippopotas",8,-1,1,1,1,1,0,0,0],["464","Hippowdon",8,-1,0,0,1,1,0,0,0],["465","Skorupi",7,11,1,1,1,1,1,0,0],["466","Drapion",7,15,0,0,1,1,1,1,0],["467","Croagunk",7,6,1,1,1,1,0,0,0],["468","Toxicroak",7,6,0,0,1,1,0,0,0],["469","Carnivine",4,-1,1,1,1,1,0,0,0],["470","Finneon",2,-1,1,1,1,1,0,0,0],["471","Lumineon",2,-1,0,0,1,1,0,0,0],["472","Mantyke",2,9,1,1,1,1,0,1,0],["473","Mantine",2,9,1,1,1,1,0,1,0],["474","Snover",5,4,1,1,1,1,0,0,0],["475","Abomasnow",5,4,0,0,2,2,0,0,0],["476","Porygon",0,-1,1,1,1,1,0,1,0],["477","Porygon2",0,-1,0,0,1,1,1,1,1],["478","Porygon-Z",0,-1,0,0,1,1,1,1,0],["479","Rotom",3,13,1,1,6,6,6,0,0],["480","Uxie",10,-1,1,1,1,1,0,0,0],["481","Mesprit",10,-1,1,1,1,1,0,0,0],["482","Azelf",10,-1,1,1,1,1,0,0,0],["483","Dialga",16,14,1,1,1,1,0,0,0],["484","Palkia",2,14,1,1,1,1,0,0,0],["485","Heatran",1,16,1,1,1,1,0,0,0],["486","Regigigas",0,-1,1,1,1,1,0,0,0],["487","Giratina",13,14,1,1,2,2,0,0,0],["488","Cresselia",10,-1,1,1,1,1,0,0,0],["489","Phione",2,-1,1,1,1,1,0,0,0],["490","Manaphy",2,-1,1,1,1,1,0,0,0],["491","Darkrai",15,-1,1,1,1,1,0,0,0],["492","Shaymin",4,-1,1,1,2,2,0,0,0],["493","Arceus",0,-1,1,1,18,18,18,0,0],["898","Wyrdeer",0,10,0,0,1,1,0,0,0],["899","Kleavor",11,12,0,0,1,1,0,1,0],["903","Overqwil",15,7,0,0,1,1,0,1,0]],"5":[["494","Victini",10,1,1,1,1,1,0,0,0],["495","Snivy",4,-1,1,1,1,1,0,0,0],["496","Servine",4,-1,0,0,1,1,0,0,0],["497","Serperior",4,-1,0,0,1,1,1,0,0],["498","Tepig",1,-1,1,1,1,1,0,0,0],["499","Pignite",1,6,0,0,1,1,0,0,0],["500","Emboar",1,6,0,0,1,1,0,0,0],["501","Oshawott",2,-1,1,1,1,1,0,0,0],["502","Dewott",2,-1,0,0,1,1,0,0,0],["503","Samurott",2,-1,0,0,2,2,1,0,0],["504","Patrat",0,-1,1,1,1,1,0,0,0],["505","Watchog",0,-1,0,0,1,1,0,0,0],["506","Lillipup",0,-1,1,1,1,1,0,0,0],["507","Herdier",0,-1,0,0,1,1,0,0,0],["508","Stoutland",0,-1,0,0,1,1,0,0,0],["509","Purrloin",15,-1,1,1,1,1,0,0,0],["510","Liepard",15,-1,0,0,1,1,1,0,0],["511","Pansage",4,-1,1,1,1,1,0,0,0],["512","Simisage",4,-1,0,0,1,1,0,0,0],["513","Pansear",1,-1,1,1,1,1,0,0,0],["514","Simisear",1,-1,0,0,1,1,0,0,0],["515","Panpour",2,-1,1,1,1,1,0,0,0],["516","Simipour",2,-1,0,0,1,1,0,0,0],["517","Munna",10,-1,1,1,1,1,1,0,0],["518","Musharna",10,-1,0,0,1,1,0,0,0],["519","Pidove",0,9,1,1,1,1,0,0,0],["520","Tranquill",0,9,0,0,1,1,0,0,0],["521","Unfezant",0,9,0,0,1,1,1,0,0],["522","Blitzle",3,-1,1,1,1,1,0,0,0],["523","Zebstrika",3,-1,0,0,1,1,0,0,0],["524","Roggenrola",12,-1,1,1,1,1,1,1,0],["525","Boldore",12,-1,0,0,1,1,0,0,0],["526","Gigalith",12,-1,0,0,1,1,0,0,0],["527","Woobat",10,9,1,1,1,1,0,1,0],["528","Swoobat",10,9,0,0,1,1,0,0,0],["529","Drilbur",8,-1,1,1,1,1,0,0,0],["530","Excadrill",8,16,0,0,1,1,0,0,0],["531","Audino",0,-1,1,1,2,2,0,0,0],["532","Timburr",6,-1,1,1,1,1,0,0,0],["533","Gurdurr",6,-1,0,0,1,1,0,0,0],["534","Conkeldurr",6,-1,0,0,1,1,0,0,0],["535","Tympole",2,-1,1,1,1,1,0,0,0],["536","Palpitoad",2,8,0,0,1,1,0,0,0],["537","Seismitoad",2,8,0,0,1,1,0,0,0],["538","Throh",6,-1,1,1,1,1,0,0,0],["539","Sawk",6,-1,1,1,1,1,0,0,0],["540","Sewaddle",11,4,1,1,1,1,0,0,0],["541","Swadloon",11,4,0,0,1,1,0,0,0],["542","Leavanny",11,4,0,0,1,1,0,0,0],["543","Venipede",11,7,1,1,1,1,1,1,0],["544","Whirlipede",11,7,0,0,1,1,0,1,0],["545","Scolipede",11,7,0,0,1,1,1,1,0],["546","Cottonee",4,17,1,1,1,1,0,0,0],["547","Whimsicott",4,17,0,0,1,1,0,0,0],["548","Petilil",4,-1,1,1,1,1,0,0,0],["549","Lilligant",4,-1,0,0,1,1,1,0,0],["550","Basculin",2,-1,1,1,2,2,0,0,0],["551","Sandile",8,15,1,1,1,1,0,0,0],["552","Krokorok",8,15,0,0,1,1,0,0,0],["553","Krookodile",8,15,0,0,1,1,1,0,0],["554","Darumaka",1,-1,2,2,2,2,1,0,0],["555","Darmanitan",1,-1,0,0,4,4,2,0,0],["556","Maractus",4,-1,1,1,1,1,0,0,0],["557","Dwebble",11,12,1,1,1,1,0,0,0],["558","Crustle",11,12,0,0,1,1,0,0,0],["559","Scraggy",15,6,1,1,1,1,1,0,0],["560","Scrafty",15,6,0,0,1,1,1,0,0],["561","Sigilyph",10,9,1,1,1,1,1,0,0],["562","Yamask",13,-1,2,2,2,2,0,0,0],["563","Cofagrigus",13,-1,0,0,1,1,0,0,0],["564","Tirtouga",2,12,1,1,1,1,0,0,0],["565","Carracosta",2,12,0,0,1,1,0,0,0],["566","Archen",12,9,1,1,1,1,0,0,0],["567","Archeops",12,9,0,0,1,1,1,0,0],["568","Trubbish",7,-1,1,1,1,1,0,0,0],["569","Garbodor",7,-1,0,0,1,1,0,0,0],["570","Zorua",15,-1,1,1,1,1,0,1,0],["571","Zoroark",15,-1,0,0,1,1,1,0,0],["572","Minccino",0,-1,1,1,1,1,0,0,0],["573","Cinccino",0,-1,0,0,1,1,0,0,0],["574","Gothita",10,-1,1,1,1,1,0,0,0],["575","Gothorita",10,-1,0,0,1,1,0,0,0],["576","Gothitelle",10,-1,0,0,1,1,0,0,0],["577","Solosis",10,-1,1,1,1,1,1,0,0],["578","Duosion",10,-1,0,0,1,1,0,0,0],["579","Reuniclus",10,-1,0,0,1,1,0,0,0],["580","Ducklett",2,9,1,1,1,1,1,0,0],["581","Swanna",2,9,0,0,1,1,1,0,0],["582","Vanillite",5,-1,1,1,1,1,1,0,0],["583","Vanillish",5,-1,0,0,1,1,0,0,0],["584","Vanilluxe",5,-1,0,0,1,1,0,0,0],["585","Deerling",0,4,1,1,1,1,1,0,0],["586","Sawsbuck",0,4,0,0,1,1,1,0,0],["587","Emolga",3,9,1,1,1,1,1,0,0],["588","Karrablast",11,-1,1,1,1,1,0,0,0],["589","Escavalier",11,16,0,0,1,1,0,0,0],["590","Foongus",4,7,1,1,1,1,0,0,0],["591","Amoonguss",4,7,0,0,1,1,0,0,0],["592","Frillish",2,13,1,1,1,1,0,0,0],["593","Jellicent",2,13,0,0,1,1,0,0,0],["594","Alomomola",2,-1,1,1,1,1,0,0,0],["595","Joltik",11,3,1,1,1,1,1,1,0],["596","Galvantula",11,3,0,0,1,1,1,0,0],["597","Ferroseed",4,16,1,1,1,1,0,0,0],["598","Ferrothorn",4,16,0,0,1,1,0,0,0],["599","Klink",16,-1,1,1,1,1,1,0,0],["600","Klang",16,-1,0,0,1,1,0,0,0],["601","Klinklang",16,-1,0,0,1,1,0,0,0],["602","Tynamo",3,-1,1,1,1,1,1,0,0],["603","Eelektrik",3,-1,0,0,1,1,1,0,0],["604","Eelektross",3,-1,0,0,1,1,1,0,0],["605","Elgyem",10,-1,1,1,1,1,0,0,0],["606","Beheeyem",10,-1,0,0,1,1,0,0,0],["607","Litwick",13,1,1,1,1,1,1,1,0],["608","Lampent",13,1,0,0,1,1,1,0,0],["609","Chandelure",13,1,0,0,1,1,1,0,0],["610","Axew",14,-1,1,1,1,1,0,0,0],["611","Fraxure",14,-1,0,0,1,1,0,0,0],["612","Haxorus",14,-1,0,0,1,1,0,0,0],["613","Cubchoo",5,-1,1,1,1,1,0,0,0],["614","Beartic",5,-1,0,0,1,1,0,0,0],["615","Cryogonal",5,-1,1,1,1,1,0,0,0],["616","Shelmet",11,-1,1,1,1,1,0,0,0],["617","Accelgor",11,-1,0,0,1,1,0,0,0],["618","Stunfisk",8,3,2,2,2,2,0,0,0],["619","Mienfoo",6,-1,1,1,1,1,0,0,0],["620","Mienshao",6,-1,0,0,1,1,0,0,0],["621","Druddigon",14,-1,1,1,1,1,0,0,0],["622","Golett",8,13,1,1,1,1,0,0,0],["623","Golurk",8,13,0,0,1,1,0,0,0],["624","Pawniard",15,16,1,1,1,1,0,0,0],["625","Bisharp",15,16,0,0,1,1,0,0,0],["626","Bouffalant",0,-1,1,1,1,1,0,0,0],["627","Rufflet",0,9,1,1,1,1,0,0,0],["628","Braviary",0,9,0,0,1,1,1,0,0],["629","Vullaby",15,9,1,1,1,1,0,0,0],["630","Mandibuzz",15,9,0,0,1,1,0,0,0],["631","Heatmor",1,-1,1,1,1,1,0,0,0],["632","Durant",11,16,1,1,1,1,0,0,0],["633","Deino",15,14,1,1,1,1,0,1,0],["634","Zweilous",15,14,0,0,1,1,0,0,0],["635","Hydreigon",15,14,0,0,1,1,0,0,0],["636","Larvesta",11,1,1,1,1,1,1,1,0],["637","Volcarona",11,1,0,0,1,1,0,0,0],["638","Cobalion",16,6,1,1,1,1,0,0,0],["639","Terrakion",12,6,1,1,1,1,0,0,0],["640","Virizion",4,6,1,1,1,1,0,0,0],["641","Tornadus",9,-1,1,1,2,2,0,0,0],["642","Thundurus",3,9,1,1,2,2,0,0,0],["643","Reshiram",14,1,1,1,1,1,0,0,0],["644","Zekrom",14,3,1,1,1,1,0,0,0],["645","Landorus",8,9,1,1,2,2,0,0,0],["646","Kyurem",14,5,1,1,3,3,0,0,0],["647","Keldeo",2,6,1,1,2,2,0,0,0],["648","Meloetta",0,10,1,1,2,2,0,0,0],["649","Genesect",11,16,1,1,5,5,0,0,0]],"6":[["650","Chespin",4,-1,1,1,1,1,0,0,0],["651","Quilladin",4,-1,0,0,1,1,0,0,0],["652","Chesnaught",4,6,0,0,1,1,0,0,0],["653","Fennekin",1,-1,1,1,1,1,1,1,0],["654","Braixen",1,-1,0,0,1,1,1,0,0],["655","Delphox",1,10,0,0,1,1,1,0,0],["656","Froakie",2,-1,1,1,1,1,0,0,0],["657","Frogadier",2,-1,0,0,1,1,0,0,0],["658","Greninja",2,15,0,0,1,1,0,0,0],["659","Bunnelby",0,-1,1,1,1,1,0,0,0],["660","Diggersby",0,8,0,0,1,1,0,0,0],["661","Fletchling",0,9,1,1,1,1,0,0,0],["662","Fletchinder",1,9,0,0,1,1,0,0,0],["663","Talonflame",1,9,0,0,1,1,0,0,0],["664","Scatterbug",11,-1,1,1,1,1,0,0,0],["665","Spewpa",11,-1,0,0,1,1,0,0,0],["666","Vivillon",11,9,0,0,1,1,1,0,0],["667","Litleo",1,0,1,1,1,1,0,0,0],["668","Pyroar",1,0,0,0,1,1,0,0,0],["669","Flabébé",17,-1,1,1,1,1,0,0,0],["670","Floette",17,-1,0,0,1,1,0,0,0],["671","Florges",17,-1,0,0,1,1,0,0,0],["672","Skiddo",4,-1,1,1,1,1,0,0,0],["673","Gogoat",4,-1,0,0,1,1,0,0,0],["674","Pancham",6,-1,1,1,1,1,0,1,0],["675","Pangoro",6,15,0,0,1,1,0,0,0],["676","Furfrou",0,-1,1,1,1,1,1,0,0],["677","Espurr",10,-1,1,1,1,1,0,0,0],["678","Meowstic",10,-1,0,0,1,1,1,0,0],["679","Honedge",16,13,1,1,1,1,0,1,0],["680","Doublade",16,13,0,0,1,1,0,0,0],["681","Aegislash",16,13,0,0,2,2,0,2,0],["682","Spritzee",17,-1,1,1,1,1,0,0,0],["683","Aromatisse",17,-1,0,0,1,1,0,0,0],["684","Swirlix",17,-1,1,1,1,1,0,0,0],["685","Slurpuff",17,-1,0,0,1,1,0,0,0],["686","Inkay",15,10,1,1,1,1,0,0,0],["687","Malamar",15,10,0,0,1,1,0,0,0],["688","Binacle",12,2,1,1,1,1,0,0,0],["689","Barbaracle",12,2,0,0,1,1,0,0,0],["690","Skrelp",7,2,1,1,1,1,0,0,0],["691","Dragalge",7,14,0,0,1,1,1,0,0],["692","Clauncher",2,-1,1,1,1,1,1,0,0],["693","Clawitzer",2,-1,0,0,1,1,0,0,0],["694","Helioptile",3,0,1,1,1,1,0,0,0],["695","Heliolisk",3,0,0,0,1,1,0,0,0],["696","Tyrunt",12,14,1,1,1,1,0,0,0],["697","Tyrantrum",12,14,0,0,1,1,0,0,0],["698","Amaura",12,5,1,1,1,1,1,0,0],["699","Aurorus",12,5,0,0,1,1,0,0,0],["700","Hawlucha",6,9,1,1,1,1,1,0,0],["701","Dedenne",3,17,1,1,1,1,0,0,0],["702","Carbink",12,17,1,1,1,1,0,0,0],["703","Goomy",14,-1,1,1,1,1,1,1,0],["704","Sliggoo",14,-1,0,0,1,1,1,1,0],["705","Goodra",14,-1,0,0,1,1,1,1,0],["706","Klefki",16,17,1,1,1,1,1,0,0],["707","Phantump",13,4,1,1,1,1,0,0,0],["708","Trevenant",13,4,0,0,1,1,1,0,0],["709","Pumpkaboo",13,4,1,1,4,4,3,0,0],["710","Gourgeist",13,4,0,0,4,4,1,0,0],["711","Bergmite",5,-1,1,1,1,1,0,0,0],["712","Avalugg",5,-1,0,0,1,1,0,0,0],["713","Noibat",9,14,1,1,1,1,1,1,0],["714","Noivern",9,14,0,0,1,1,1,0,0],["715","Xerneas",17,-1,1,1,1,1,0,0,0],["716","Yveltal",15,9,1,1,1,1,0,0,0],["717","Zygarde",14,8,1,1,4,4,0,0,0],["718","Diancie",12,17,1,1,2,2,0,0,0],["719","Hoopa",10,13,1,1,2,2,0,0,0],["720","Volcanion",1,2,1,1,1,1,0,0,0]],"7":[["721","Rowlet",4,9,1,1,1,1,0,0,0],["722","Dartrix",4,9,0,0,1,1,0,0,0],["723","Decidueye",4,13,0,0,2,2,2,0,0],["724","Litten",1,-1,1,1,1,1,1,0,0],["725","Torracat",1,-1,0,0,1,1,0,0,0],["726","Incineroar",1,15,0,0,1,1,0,0,0],["727","Popplio",2,-1,1,1,1,1,0,0,0],["728","Brionne",2,-1,0,0,1,1,0,0,0],["729","Primarina",2,17,0,0,1,1,0,0,0],["730","Pikipek",0,9,1,1,1,1,0,0,0],["731","Trumbeak",0,9,0,0,1,1,0,0,0],["732","Toucannon",0,9,0,0,1,1,0,0,0],["733","Yungoos",0,-1,1,1,1,1,0,0,0],["734","Gumshoos",0,-1,0,0,2,2,0,0,0],["735","Grubbin",11,-1,1,1,1,1,0,0,0],["736","Charjabug",11,3,0,0,1,1,0,0,0],["737","Vikavolt",11,3,0,0,2,2,1,0,0],["738","Crabrawler",6,-1,1,1,1,1,0,0,0],["739","Crabominable",6,5,0,0,1,1,0,0,0],["740","Oricorio",1,9,1,1,4,4,3,0,0],["741","Cutiefly",11,17,1,1,1,1,1,0,0],["742","Ribombee",11,17,0,0,2,2,2,0,0],["743","Rockruff",12,-1,1,1,1,1,1,1,0],["744","Lycanroc",12,-1,0,0,3,3,3,1,0],["745","Wishiwashi",2,-1,1,1,3,3,1,0,0],["746","Mareanie",7,2,1,1,1,1,0,0,0],["747","Toxapex",7,2,0,0,1,1,0,0,0],["748","Mudbray",8,-1,1,1,1,1,0,0,0],["749","Mudsdale",8,-1,0,0,1,1,0,0,0],["750","Dewpider",2,11,1,1,1,1,0,0,0],["751","Araquanid",2,11,0,0,2,2,2,0,0],["752","Fomantis",4,-1,1,1,1,1,0,0,0],["753t","Lurantis",4,-1,0,0,2,2,2,0,0],["754","Morelull",4,17,1,1,1,1,0,0,0],["755","Shiinotic",4,17,0,0,1,1,0,0,0],["756","Salandit",7,1,1,1,1,1,1,0,0],["757","Salazzle",7,1,0,0,2,2,2,0,0],["758","Stufful",0,6,1,1,1,1,1,0,0],["759","Bewear",0,6,0,0,1,1,0,0,0],["760","Bounsweet",4,-1,1,1,1,1,0,0,0],["761","Steenee",4,-1,0,0,1,1,0,0,0],["762","Tsareena",4,-1,0,0,1,1,0,0,0],["763","Comfey",17,-1,1,1,1,1,1,0,0],["764","Oranguru",0,10,1,1,1,1,0,0,0],["765","Passimian",6,-1,1,1,1,1,0,0,0],["766","Wimpod",11,2,1,1,1,1,0,0,0],["767","Golisopod",11,2,0,0,1,1,0,0,0],["768","Sandygast",13,8,1,1,1,1,1,1,0],["769","Palossand",13,8,0,0,1,1,1,0,0],["770","Pyukumuku",2,-1,1,1,1,1,0,0,0],["771","Type: Null",0,-1,1,1,1,1,0,0,0],["772","Silvally",0,-1,0,0,18,18,0,0,0],["773","Minior",12,9,1,1,2,2,0,0,0],["774","Komala",0,-1,1,1,1,1,1,0,0],["775","Turtonator",1,14,1,1,1,1,0,0,0],["776","Togedemaru",3,16,1,1,2,2,1,1,0],["777","Mimikyu",13,17,1,1,2,2,2,0,0],["778","Bruxish",2,10,1,1,1,1,0,0,0],["779","Drampa",0,14,1,1,1,1,1,0,0],["780","Dhelmise",13,4,1,1,1,1,0,0,0],["781","Jangmo-o",14,-1,1,1,1,1,1,1,0],["782","Hakamo-o",14,6,0,0,1,1,0,0,0],["783","Kommo-o",14,6,0,0,2,2,1,0,0],["784","Tapu Koko",3,17,1,1,1,1,0,0,0],["785","Tapu Lele",10,17,1,1,1,1,0,0,0],["786","Tapu Bulu",4,17,1,1,1,1,0,0,0],["787","Tapu Fini",2,17,1,1,1,1,0,0,0],["788","Cosmog",10,-1,1,1,1,1,0,0,0],["789","Cosmoem",10,-1,0,0,1,1,0,0,0],["790","Solgaleo",10,16,0,0,1,1,0,0,0],["791","Lunala",10,13,0,0,1,1,0,0,0],["792","Nihilego",12,7,1,1,1,1,0,0,0],["793","Buzzwole",11,6,1,1,1,1,0,0,0],["794","Pheromosa",11,6,1,1,1,1,0,0,0],["795","Xurkitree",3,-1,1,1,1,1,0,0,0],["796","Celesteela",16,9,1,1,1,1,0,0,0],["797","Kartana",4,16,1,1,1,1,0,0,0],["798","Guzzlord",15,14,1,1,1,1,0,0,0],["799","Poipole",7,-1,1,1,1,1,0,0,0],["800","Naganadel",7,14,0,0,1,1,0,0,0],["801","Stakataka",12,16,1,1,1,1,0,0,0],["802","Blacephalon",1,13,1,1,1,1,0,0,0],["803","Necrozma",10,-1,1,1,4,4,0,0,0],["804","Magearna",16,17,1,1,1,1,0,0,0],["805","Marshadow",6,13,1,1,1,1,0,0,0],["806","Zeraora",3,-1,1,1,1,1,0,0,0],["807","Meltan",16,-1,1,1,1,1,0,0,0],["808","Melmetal",16,-1,0,0,1,1,0,0,0]],"8":[["809","Grookey",4,-1,1,1,1,1,0,0,0],["810","Thwackey",4,-1,0,0,1,1,0,0,0],["811","Rillaboom",4,-1,0,0,1,1,0,0,0],["812","Scorbunny",1,-1,1,1,1,1,0,0,0],["813","Raboot",1,-1,0,0,1,1,0,0,0],["814","Cinderace",1,-1,0,0,1,1,0,0,0],["815","Sobble",2,-1,1,1,1,1,0,0,0],["816","Drizzile",2,-1,0,0,1,1,0,0,0],["817","Inteleon",2,-1,0,0,1,1,0,0,0],["818","Skwovet",0,-1,1,1,1,1,0,0,0],["819","Greedent",0,-1,0,0,1,1,0,0,0],["820","Rookidee",9,-1,1,1,1,1,1,1,0],["821","Corvisquire",9,-1,0,0,1,1,1,1,0],["822","Corviknight",9,16,0,0,1,1,1,1,0],["823","Blipbug",11,-1,1,1,1,1,0,0,0],["824","Dottler",11,10,0,0,1,1,0,0,0],["825","Orbeetle",11,10,0,0,1,1,0,0,0],["826","Nickit",15,-1,1,1,1,1,1,1,0],["827","Thievul",15,-1,0,0,1,1,0,0,0],["828","Gossifleur",4,-1,1,1,1,1,0,0,0],["829","Eldegoss",4,-1,0,0,1,1,0,0,0],["830","Wooloo",0,-1,1,1,1,1,0,0,0],["831","Dubwool",0,-1,0,0,1,1,0,0,0],["832","Chewtle",2,-1,1,1,1,1,0,0,0],["833","Drednaw",2,12,0,0,1,1,0,0,0],["834","Yamper",3,-1,1,1,1,1,0,0,0],["835","Boltund",3,-1,0,0,1,1,0,0,0],["836","Rolycoly",12,-1,1,1,1,1,0,0,0],["837","Carkol",12,1,0,0,1,1,0,0,0],["838","Coalossal",12,1,0,0,1,1,0,0,0],["839","Applin",4,14,1,1,1,1,1,0,0],["840","Flapple",4,14,0,0,1,1,1,0,0],["841","Appletun",4,14,0,0,1,1,0,0,0],["842","Silicobra",8,-1,1,1,1,1,0,0,0],["843","Sandaconda",8,-1,0,0,1,1,0,0,0],["844","Cramorant",9,2,1,1,3,3,0,0,0],["845","Arrokuda",2,-1,1,1,1,1,0,0,0],["846","Barraskewda",2,-1,0,0,1,1,0,0,0],["847","Toxel",3,7,1,1,1,1,1,0,0],["848","Toxtricity",3,7,0,0,2,2,2,0,0],["849","Sizzlipede",1,11,1,1,1,1,0,0,0],["850","Centiskorch",1,11,0,0,1,1,0,0,0],["851","Clobbopus",6,-1,1,1,1,1,0,0,0],["852","Grapploct",6,-1,0,0,1,1,0,0,0],["853","Sinistea",13,-1,1,1,1,1,1,1,0],["854","Polteageist",13,-1,0,0,1,1,0,0,0],["855","Hatenna",10,-1,1,1,1,1,0,0,0],["856","Hattrem",10,-1,0,0,1,1,0,0,0],["857","Hatterene",10,17,0,0,1,1,0,0,0],["858","Impidimp",15,17,1,1,1,1,0,0,0],["859","Morgrem",15,17,0,0,1,1,0,0,0],["860","Grimmsnarl",15,17,0,0,1,1,0,0,0],["861","Obstagoon",15,0,0,0,1,1,0,0,0],["862","Perrserker",16,-1,0,0,1,1,0,0,0],["863","Cursola",13,-1,0,0,1,1,1,0,0],["864","Sirfetch'd",6,-1,0,0,1,1,0,0,0],["865","Mr. Rime",5,10,0,0,1,1,0,0,0],["866","Runerigus",8,13,0,0,1,1,0,0,0],["867","Milcery",17,-1,1,1,1,1,1,0,0],["868","Alcremie",17,-1,0,0,1,1,0,0,0],["869","Falinks",6,-1,1,1,1,1,0,0,0],["870","Pincurchin",3,-1,1,1,1,1,0,0,0],["871","Snom",5,11,1,1,1,1,1,1,0],["872","Frosmoth",5,11,0,0,1,1,0,0,0],["873","Stonjourner",12,-1,1,1,1,1,0,0,0],["874","Eiscue",5,-1,1,1,2,2,0,0,0],["875","Indeedee",10,0,1,1,2,2,1,0,0],["876","Morpeko",3,15,1,1,2,2,0,0,0],["877","Cufant",16,-1,1,1,1,1,0,0,0],["878","Copperajah",16,-1,0,0,1,1,0,0,0],["879","Dracozolt",3,14,1,1,1,1,0,0,0],["880","Arctozolt",3,5,1,1,1,1,0,0,0],["881","Dracovish",2,14,1,1,1,1,0,0,0],["882","Arctovish",2,5,1,1,1,1,0,0,0],["883","Duraludon",16,14,1,1,1,1,0,0,0],["884","Dreepy",14,13,1,1,1,1,0,0,0],["885","Drakloak",14,13,0,0,1,1,0,0,0],["886","Dragapult",14,13,0,0,1,1,0,0,0],["887","Zacian",17,-1,1,1,2,2,0,0,0],["888","Zamazenta",6,-1,1,1,2,2,0,0,0],["889","Eternatus",7,14,1,1,1,1,0,0,0],["890","Kubfu",6,-1,1,1,1,1,0,0,0],["891","Urshifu",6,15,0,0,2,2,0,0,0],["892","Zarude",15,4,1,1,1,1,0,0,0],["893","Regieleki",3,-1,1,1,1,1,0,0,0],["894","Regidrago",14,-1,1,1,1,1,0,0,0],["895","Glastrier",5,-1,1,1,1,1,0,0,0],["896","Spectrier",13,-1,1,1,1,1,0,0,0],["897","Calyrex",10,4,1,1,3,3,0,0,0]],"97":[["000a1","Lunupine",15,-1,1,1,1,1,0,0,0],["000-L","Lunupine/Mega Forme Q",15,17,0,0,1,1,0,0,0],["000a2","Blophin",2,-1,1,1,1,1,0,0,0],["000a3","Inflale",2,-1,0,0,1,1,0,0,0],["000a4","Orkit",2,-1,1,1,1,1,0,0,0],["000a6","Orcalot",2,16,0,0,1,1,0,0,0],["000a7","Faemueño",17,9,1,1,1,1,0,0,0],["000a8","Faemilarín",17,9,0,0,1,1,0,0,0],["000a9","Faemísimo",17,9,0,0,1,1,0,0,0],["000aa","Wagell",7,17,1,1,1,1,0,0,0],["000ab","Wanamangora",7,17,0,0,1,1,0,0,0],["000-W","Wanamangora/Mega Forme Q",7,17,0,0,1,1,0,0,0],["000ac","Gosold",0,9,1,1,1,1,0,0,0],["000ad","Goldesem",10,9,0,0,1,1,0,0,0],["000ae","Impyre",15,-1,1,1,1,1,1,0,0],["000af","Baflammet",15,1,0,0,1,1,1,0,0],["000ag","Searene",14,2,1,1,1,1,0,0,0],["000ah","Solynx",1,-1,1,1,1,1,0,0,0],["000-S","Solynx/Mega Forme Q",1,3,0,0,1,1,0,0,0],["000ai","Ardik",5,-1,1,1,1,1,0,0,0],["000aj","Sibex",5,-1,0,0,1,1,0,0,0],["000ak","Boxaby",12,6,1,1,1,1,0,0,0],["000al","Kangspar",12,6,0,0,1,1,0,0,0],["000-X","Kangspar/Mega Forme Q",12,6,0,0,1,1,0,1,0],["000am","Bunbori",5,17,1,1,1,1,1,0,0],["000-B","Bunbori/Mega Forme Q",5,17,0,0,1,1,1,0,0],["000an","Taiveret",4,-1,1,1,1,1,0,0,0],["000ao","Taipaeus",4,-1,0,0,1,1,0,0,0],["000ap","Taimorpha",4,6,0,0,1,1,1,0,0],["000aq","Flarbat",1,9,1,1,1,1,0,0,0],["000ar","Flarotis",1,17,0,0,1,1,0,0,0],["000as","Flaroptera",1,17,0,0,1,1,0,0,0],["000at","Hydrark",2,-1,1,1,1,1,0,0,0],["000au","Hydrinus",2,-1,0,0,1,1,0,0,0],["000av","Hydrinifor",2,16,0,0,1,1,0,0,0],["000aw","Gragon",13,14,1,1,1,1,0,0,0],["000ay","Greegon",13,14,0,0,1,1,0,0,0],["000az","Avaragon",13,14,0,0,1,1,0,0,0],["000b0","Kinaster",15,1,1,1,1,1,0,0,0],["000b1","Luckoo",4,9,1,1,1,1,0,0,0],["000b2","Peckoo",4,9,0,0,1,1,0,0,0],["000b3","Peekoo",4,10,0,0,1,1,0,0,0],["000b4","Arasprit",8,-1,1,1,1,1,0,0,0],["000b5","Arthreux",8,11,0,0,1,1,0,0,0],["000b6","Quetzephyr",3,9,1,1,1,1,0,0,0],["000b7","Quetzaptyl",3,9,0,0,1,1,0,0,0],["000b8","Pixrine",12,17,1,1,1,1,0,0,0],["000b9","Kitsunari",10,-1,1,1,1,1,0,0,0],["000ba","Kitsubuki",10,13,0,0,1,1,0,0,0],["000bb","Kryptik",12,13,1,1,1,1,0,0,0],["000bc","Bandicoon",0,15,1,1,1,1,0,0,0],["000bd","Phastix",11,-1,1,1,1,1,0,0,0],["000be","Phasmaleef/Forest Forme",11,-1,0,0,1,1,0,0,0],["000bf","Phasmaleef/Desert Forme",11,-1,0,0,1,1,0,0,0],["000bg","Pasovan",0,-1,1,1,1,1,0,0,0],["000bh","Glaquine",5,-1,1,1,1,1,1,0,0],["000bi","Cavallost",5,-1,0,0,1,1,0,0,0],["000bk","Minibbit",16,-1,1,1,1,1,1,0,0],["000bl","Metabbit",16,-1,0,0,1,1,0,0,0],["000bm","Terabbit",16,-1,0,0,1,1,0,0,0],["000-T","Terabbit/Mega Forme Q",16,-1,0,0,1,1,0,0,0],["000bn","Tillink",8,-1,1,1,1,1,0,0,0],["000bo","Terrink",8,-1,0,0,1,1,0,0,0],["000bp","Bezerell",2,15,1,1,1,1,0,0,0],["000bq","Bezermuur",2,15,0,0,1,1,0,0,0],["000br","Bezermuut",2,15,0,0,1,1,0,0,0],["000bt","Ayeren",0,10,1,1,1,1,0,0,0],["000bu","Aytheraye",0,13,0,0,1,1,0,0,0],["000bv","Skeleco",2,13,1,1,1,1,0,0,0],["000bw","Phantiidae",2,13,0,0,1,1,0,0,0],["000bx","Klaatupillar",11,-1,1,1,1,1,0,0,0],["000by","Charaxalis",11,-1,0,0,1,1,0,0,0],["000bz","Incantasius",11,10,0,0,1,1,0,0,0],["000c0","Maravol",11,7,1,1,1,1,0,0,0],["000cm","Kyutopi",10,17,1,1,1,1,0,0,0],["000cn","Konatus",10,17,0,0,1,1,0,0,0],["000co","Kenyip",8,-1,1,1,1,1,0,0,0],["000cp","Arfrica",8,6,0,0,1,1,0,0,0],["000cq","Kalahowli",8,6,0,0,1,1,0,0,0],["000cr","Petripeep",12,-1,1,1,1,1,0,0,0],["000cs","Chirock",12,14,0,0,1,1,0,0,0],["000ct","Toxitrice",12,14,0,0,1,1,0,0,0],["000cu","Serpetone",12,7,0,0,1,1,0,0,0],["000cv","Toxilisk",12,7,0,0,1,1,0,0,0],["000cw","Gumairy",4,17,1,1,1,1,0,0,0],["000cx","Eucylph",4,17,0,0,1,1,0,0,0],["000cy","Puppod",7,0,1,1,1,1,1,0,0],["000cz","Slugdog",7,0,0,0,1,1,1,0,0],["000d0","Rokiwi",4,-1,1,1,1,1,0,0,0],["000d1","Brushiwi",4,15,0,0,1,1,0,0,0],["000d2","Alicalf",5,12,1,1,1,1,0,0,0],["000d3","Cetacorn",5,12,0,0,1,1,0,0,0],["000d4","Valkind",17,6,1,1,1,1,0,0,0],["000d5","Frayja",17,6,0,0,1,1,0,0,0],["000d6","Croaket",15,-1,1,1,1,1,0,0,0],["000d7","Quibbit/Toxic Forme",15,7,0,0,1,1,0,0,0],["000d8","Quibbit/Charged Forme",15,3,0,0,1,1,0,0,0],["000d9","Quibbit/Herbal Forme",15,4,0,0,1,1,0,0,0],["000da","Quibbit/Magma Forme",15,1,0,0,1,1,0,0,0],["000db","Quibbit/Fae Forme",15,17,0,0,1,1,0,0,0],["000de","Slypin",10,15,1,1,1,1,0,0,0],["000df","Haredini",10,15,0,0,1,1,0,0,0],["000dg","Selkrub",11,7,1,1,1,1,0,0,0],["000dh","Aqrabion",11,7,0,0,1,1,0,0,0],["000di","Skargas",11,7,0,0,1,1,0,0,0],["000dj","Kawotor",2,0,1,1,1,1,0,0,0],["000dk","Lutriva",2,6,0,0,1,1,0,0,0],["000dl","Selutian",2,5,0,0,1,1,0,0,0],["000dm","Kitwurm",11,-1,1,1,1,1,0,0,0],["000dn","Purrpa",11,-1,0,0,1,1,0,0,0],["000do","Moffkat",11,17,0,0,1,1,0,0,0],["000dp","Pepyre",4,1,1,1,1,1,0,0,0],["000dq","Skarasear",4,1,0,0,1,1,0,0,0],["000dr","Aphreyd",11,-1,1,1,1,1,0,0,0],["000ds","Scavady",11,-1,0,0,1,1,0,0,0],["000dt","Mantidra",11,14,0,0,1,1,0,0,0],["000du","Caimaw",16,-1,1,1,1,1,0,0,0],["000dv","Caimangle",16,-1,0,0,1,1,0,0,0],["000dw","Valimp",17,15,1,1,1,1,0,0,0],["000dx","Valladox",17,15,0,0,1,1,0,0,0],["000dy","Valenoir",17,15,0,0,1,1,0,0,0],["000dz","Frusky",5,-1,1,1,1,1,0,0,0],["000f0","Glacifur",5,-1,0,0,1,1,0,0,0],["000f1","Skyrie",9,-1,1,1,1,1,0,0,0],["000f2","Grymphony",9,-1,0,0,1,1,0,0,0],["000f3","Shinorin",14,6,1,1,1,1,0,0,0],["000f4","Shinorin/Incandescent",14,1,0,0,1,1,0,0,0],["000f5","Sikannos",0,1,1,1,1,1,0,0,0],["000f6","Sikannos/Unfettered",13,1,0,0,1,1,0,0,0],["000f7","Goschief",17,-1,1,1,1,1,0,0,0],["000f8","Havonk",17,15,0,0,1,1,0,0,0],["000f9","Mocknock",13,16,1,1,1,1,0,0,0],["000fa","Portalgeist",13,16,0,0,1,1,0,0,0],["000fb","Flurrawr/Boreal",5,-1,1,1,1,1,0,0,0],["000fc","Flurrawr/Austral",5,-1,0,0,1,1,0,0,0],["000fd","Tundrasail/Boreal",5,8,0,0,1,1,0,0,0],["000fe","Tundrasail/Austral",5,8,0,0,1,1,0,0,0],["000ff","Parapod",4,-1,1,1,1,1,0,0,0],["000fg","Craysprout",4,-1,0,0,1,1,0,0,0],["000fh","Strelitzgon",4,14,0,0,1,1,0,0,0],["000fi","Caprikid",6,-1,1,1,1,1,0,0,0],["000fj","Saytaries",6,16,0,0,1,1,0,0,0],["000fk","Taurminos",6,15,0,0,1,1,0,0,0],["000fl","Sagidamas",6,17,0,0,1,1,0,1,0],["000fm","Tenrekki",3,8,1,1,1,1,0,0,0],["000fn","Possmol",0,-1,1,1,1,1,0,0,0],["000fo","Opposham",0,7,0,0,1,1,0,0,0],["000fp","Opposkull",13,7,0,0,1,1,0,0,0],["000fq","Lunamor",17,-1,1,1,1,1,0,0,0],["000fr","Astrolochi",17,12,0,0,1,1,0,0,0],["000fs","Exilant",16,13,1,1,1,1,0,0,0],["000ft","Scorupt",16,13,0,0,1,1,0,0,0],["000fu","Lyruse",16,17,1,1,1,1,0,0,0],["000fv","Musharp",16,17,0,0,1,1,0,0,0],["000fw","Smokackle",1,0,1,1,1,1,0,0,0],["000fx","Hycano",1,12,0,0,1,1,0,0,0],["000fy","Inferial",14,-1,1,1,1,1,0,0,0],["000fz","Gargodyle",14,9,0,0,1,1,0,0,0],["000g0","Mirrasma",13,14,1,1,1,1,0,0,0],["000g1","Mirrarch",13,14,0,0,1,1,0,0,0],["000g2","Slithugi",13,8,1,1,1,1,0,0,0],["000g3","Sugikobra",13,8,0,0,1,1,0,0,0]],"98":[["012-Q","Butterfree/Mega Forme Q",11,10,0,0,1,1,1,0,0],["024-Q","Arbok/Mega Forme Q",7,15,0,0,1,1,0,0,0],["027-Q","Raichu/Mega Forme Q",3,6,0,0,1,1,1,0,0],["039-Q","Ninetales/Mega Forme Q",1,10,0,0,1,1,1,0,0],["057-Q","Persian/Mega Forme Q",0,13,0,0,1,1,0,0,0],["063-Q","Arcanine/Mega Forme Q",1,14,0,0,1,1,1,0,0],["083-Q","Rapidash/Mega Forme Q",1,9,0,0,1,1,1,0,0],["090-Q","Farfetch'd/Mega Forme Q",0,9,0,0,1,1,1,0,0],["094-Q","Dewgong/Mega Forme Q",2,5,0,0,1,1,1,0,0],["113-Q","Marowak/Alolan Mega Forme Q",1,13,0,0,1,1,0,0,0],["136-Q","Jynx/Mega Forme Q",5,10,0,0,1,1,0,0,0],["141-Q","Lapras/Mega Forme Q",2,5,0,0,1,1,0,0,0],["144-Q","Vaporeon/Mega Forme Q",2,-1,0,0,1,1,0,0,0],["145-Q","Jolteon/Mega Forme Q",3,-1,0,0,1,1,0,0,0],["146-Q","Flareon/Mega Forme Q",1,-1,0,0,1,1,1,0,0],["147-Q","Espeon/Mega Forme Q",10,-1,0,0,1,1,0,0,0],["148-Q","Umbreon/Mega Forme Q",15,-1,0,0,1,1,0,0,0],["149-Q","Leafeon/Mega Forme Q",4,-1,0,0,1,1,0,0,0],["150-Q","Glaceon/Mega Forme Q",5,-1,0,0,1,1,1,0,0],["151-Q","Sylveon/Mega Forme Q",17,-1,0,0,1,1,0,0,0],["164-Q","Dragonite/Mega Forme Q",14,9,0,0,1,1,0,0,0],["166-Q","Mew/Mega Forme Q",10,-1,0,0,1,1,1,0,0],["177-Q","Furret/Mega Forme Q",0,14,0,0,1,1,0,0,0],["201-Q","Jumpluff/Mega Forme Q",4,17,0,0,1,1,1,0,0],["215-Q","Girafarig/Mega Forme Q",0,10,0,0,1,1,0,0,0],["218-Q","Dunsparce/Mega Forme Q",0,14,0,0,1,1,1,0,0],["227-Q","Weavile/Mega Forme Q",15,5,0,0,1,1,1,0,0],["239-Q","Skarmory/Mega Forme Q",16,14,0,0,1,1,0,0,0],["263-Q","Lugia/Mega Forme Q",10,9,0,0,1,1,0,0,0],["264-Q","Ho-oh/Mega Forme Q",1,9,0,0,1,1,0,0,0],["265-Q","Celebi/Mega Forme Q",10,4,0,0,1,1,0,1,0],["276-Q","Mightyena/Mega Forme Q",15,-1,0,0,1,1,1,0,0],["301-Q","Breloom/Mega Forme Q",4,6,0,0,1,1,0,0,0],["325-Q","Manectric/Mega Forme Q",3,1,0,0,1,1,0,1,0],["335-Q","Wailord/Mega Forme Q",2,9,0,0,1,1,0,0,0],["344-Q","Flygon/Mega Forme Q",8,14,0,0,1,1,0,0,0],["349-Q","Zangoose/Mega Forme Q",0,15,0,0,1,1,0,1,0],["350-Q","Seviper/Mega Forme Q",7,2,0,0,1,1,0,0,0],["364-Q","Milotic/Mega Forme Q",2,17,0,0,1,1,1,0,0],["380-Q","Froslass/Mega Forme Q",5,13,0,0,1,1,1,0,0],["403-Q","Jirachi/Mega Forme Q",16,10,0,0,1,1,0,0,0],["423-Q","Luxray/Mega Forme Q",3,15,0,0,1,1,0,0,0],["438-Q","Floatzel/Mega Forme Q",2,-1,0,0,1,1,0,0,0],["471-Q","Lumineon/Mega Forme Q",2,17,0,0,1,1,0,0,0],["487-Q","Giratina/Mega Forme Q",13,14,0,0,1,1,0,0,0],["490-Q","Manaphy/Mega Forme Q",2,17,0,0,1,1,0,0,0],["494-Q","Victini/Mega Forme Q",10,1,0,0,1,1,0,0,0],["510-Q","Liepard/Mega Forme Q",15,-1,0,0,1,1,1,0,0],["545-Q","Scolipede/Mega Forme Q",11,7,0,0,1,1,0,0,0],["560-Q","Scrafty/Mega Forme Q",15,6,0,0,1,1,0,1,0],["571-Q","Zoroark/Mega Forme Q",15,-1,0,0,1,1,0,0,0],["586-Q","Sawsbuck/Mega Forme Q",17,4,0,0,1,1,0,0,0],["609-Q","Chandelure/Mega Forme Q",13,1,0,0,1,1,0,1,0],["612-Q","Haxorus/Mega Forme Q",14,16,0,0,1,1,1,0,0],["614-Q","Beartic/Mega Forme Q",5,-1,0,0,1,1,1,0,0],["621-Q","Druddigon/Mega Forme Q",14,12,0,0,1,1,0,0,0],["668-Q","Pyroar/Mega Forme Q",1,0,0,0,1,1,1,0,0],["673-Q","Gogoat/Mega Forme Q",4,-1,0,0,1,1,1,0,0],["695-Q","Heliolisk/Mega Forme Q",3,1,0,0,1,1,0,0,0],["700-Q","Hawlucha/Mega Forme Q",6,9,0,0,1,1,0,0,0],["705-Q","Goodra/Mega Forme Q",14,7,0,0,1,1,0,1,0],["714-Q","Noivern/Mega Forme Q",9,14,0,0,1,1,0,1,0],["762-Q","Tsareena/Mega Forme Q",4,6,0,0,1,1,1,0,0]],"99":[["019s1","Saiyan Rattata",0,6,1,1,1,1,1,1,0],["019s2","Super-Saiyan Rattata",0,6,0,0,1,1,1,1,0],["020s1","Super-Saiyan Raticate",0,6,0,0,1,1,0,0,0],["020s2","Super-Saiyan 2 Raticate",0,6,0,0,1,1,0,0,0],["020-S","Super-Saiyan 3 Raticate",0,6,0,0,1,1,1,0,0],["020-T","Super-Saiyan 4 Raticate",0,6,0,0,1,1,1,0,0],["025f","Flying Pichu",3,-1,1,1,1,1,0,0,0],["025s","Surfing Pichu",3,-1,1,1,1,1,0,0,0],["026f","Flying Pikachu",3,-1,0,0,1,1,0,0,0],["026s","Surfing Pikachu",3,-1,0,0,1,1,0,0,0],["026w","Snowboarding Pikachu",3,-1,0,0,1,1,0,0,0],["027f","Flying Raichu",3,9,0,0,1,1,0,0,0],["027s","Surfing Raichu",3,2,0,0,1,1,0,0,0],["027w","Snowboarding Raichu",3,5,0,0,1,1,0,0,0],["029t","Sandslash/Totem Forme Q",8,-1,0,0,1,1,0,0,0],["035s","Shooting Star Cleffa",17,-1,1,1,1,1,1,0,0],["036s","Shooting Star Clefairy",17,-1,0,0,1,1,1,0,0],["037s","Shooting Star Clefable",17,-1,0,0,1,1,0,0,0],["038a","Koroku",1,5,1,1,1,1,0,0,0],["039-A","Kyukori",1,5,0,0,1,1,0,0,0],["040g","Guild Igglybuff",0,17,1,1,1,1,0,0,0],["041g","Guild Jigglypuff",0,17,0,0,1,1,0,0,0],["042g","Guild Wigglytuff",0,17,0,0,1,1,0,0,0],["062x","Apocalyptic Growlithe",1,-1,1,1,1,1,0,0,0],["063x","Apocalyptic Arcanine",1,1,0,0,1,1,0,0,0],["084s","Snowpoke",5,10,1,1,1,1,0,0,0],["085s","Snowbro",5,10,0,0,1,1,0,0,0],["086s","Snowking",5,10,0,0,1,1,0,0,0],["108ds","Death Star Voltorb",3,-1,1,1,1,1,0,0,0],["109ds","Death Star Electrode",3,-1,0,0,1,1,0,0,0],["189e","Early Bird Natu",10,9,1,1,1,1,0,0,0],["190e","Early Bird Xatu",10,9,0,0,1,1,0,0,0],["198t","Sudowoodo/Totem Forme Q",12,-1,0,0,1,1,0,0,0],["208e","Wooper/Galvanic",3,-1,1,1,1,1,0,0,0],["209e","Quagsire/Galvanic",3,-1,0,0,1,1,0,0,0],["219v","Gligar/Vampire",8,9,1,1,1,1,0,0,0],["220v","Gliscor/Vampire",8,9,0,0,1,1,0,0,0],["225s","Scaracross",11,13,1,1,1,1,0,0,0],["226p","Snichu",15,3,1,1,1,1,0,0,0],["227p","Vilechu",15,3,0,0,1,1,0,0,0],["230bm","Blue Moon Slugma",2,-1,1,1,1,1,0,0,0],["231bm","Blue Moon Magcargo",2,12,0,0,1,1,0,0,0],["240c","Houndour/Orthrus",1,14,1,1,1,1,1,0,0],["240i","Frosdour",15,5,1,1,1,1,0,0,0],["241c","Houndoom/Cerberus",1,14,0,0,1,1,0,0,0],["241i","Chilldoom",15,5,0,0,1,1,1,0,0],["243t","Donphan/Totem Forme Q",8,-1,0,0,1,1,0,0,0],["263xd","XD001",10,9,1,1,1,1,1,0,0],["275x","Apocalyptic Poochyena",15,13,1,1,1,1,1,0,0],["276x","Apocalyptic Mightyena",15,13,0,0,1,1,0,0,0],["294b","Snoralts",5,17,1,1,1,1,0,0,0],["295b","Snolia",5,17,0,0,1,1,0,0,0],["296b","Frosvoir",5,13,0,0,1,1,0,1,0],["297b","Glaillade",5,6,0,0,1,1,0,0,0],["300x","Apocalyptic Shroomish",4,7,1,1,1,1,0,0,0],["301x","Apocalyptic Breloom",4,7,0,0,1,1,0,0,0],["336i","Numel/Arctic",5,8,1,1,1,1,0,0,0],["337i","Camerupt/Arctic",5,8,0,0,1,1,0,0,0],["354t","Whiscash/Totem Forme Q",2,8,0,0,1,1,0,0,0],["383t","Walrein/Totem Forme Q",5,2,0,0,1,1,0,0,0],["402f","Ryukuza",14,9,1,1,1,1,0,0,0],["402m","Magquaza",14,13,1,1,1,1,0,0,0],["405s","Seasonal Turtwig",4,-1,1,1,1,1,1,0,0],["406s","Seasonal Grotle",4,-1,0,0,1,1,0,0,0],["407s","Seasonal Torterra",4,-1,0,0,1,1,0,0,0],["417b","Bidoof/Igneous",1,-1,1,1,1,1,0,0,0],["418b","Bibarel/Igneous",1,12,0,0,1,1,0,0,0],["421f","Shinxel",3,2,1,1,1,1,0,0,0],["422f","Fluxio",3,2,0,0,1,1,0,0,0],["423f","Fluxray",3,2,0,0,1,1,0,0,0],["423-F","Fluxray/Mega Forme Q",3,2,0,0,1,1,0,0,0],["434s","Snow Combee",11,5,1,1,1,1,0,0,0],["435s","Snow Vespiquen",11,5,0,0,1,1,0,0,0],["435t","Snow Vespiquen/Totem Forme Q",11,5,0,0,1,1,0,0,0],["447i","Glameow/Siberian",0,5,1,1,1,1,0,0,0],["448i","Purugly/Siberian",0,5,0,0,1,1,0,0,0],["450t","Skuntank/Totem Forme Q",7,15,0,0,1,1,1,1,0],["457t","Spiritomb/Totem Forme Q",13,15,0,0,1,1,1,0,0],["458a","Gibolu",14,6,1,1,1,1,0,0,0],["459a","Gabolu",14,6,0,0,1,1,0,0,0],["460a","Garcario",14,6,0,0,1,1,0,0,0],["478t","Porygon-Z/Totem Forme Q",0,-1,0,0,1,1,0,1,0],["483p","Dialga/Primal Forme Q",16,14,0,0,1,1,0,0,0],["484p","Palkia/Primal Forme Q",2,14,0,0,1,1,0,0,0],["509h","Purrloin/Hallowe'en Witch",15,-1,1,1,1,1,0,0,0],["510h","Liepard/Hallowe'en Witch",15,-1,0,0,1,1,1,0,0],["542t","Leavanny/Totem Forme Q",11,4,0,0,1,1,0,0,0],["556t","Maractus/Totem Forme Q",4,-1,0,0,1,1,0,0,0],["622x","Apocalyptic Golett",12,16,1,1,1,1,0,0,0],["623x","Apocalyptic Golurk",12,16,0,0,1,1,0,0,0],["628t","Braviary/Totem Forme Q",0,9,0,0,1,1,1,0,0],["630t","Mandibuzz/Totem Forme Q",15,9,0,0,1,1,1,0,0],["667g","Glileo",1,7,1,1,1,1,0,0,0],["668g","Pyriscor",1,7,0,0,1,1,0,0,0],["682p","Spritzkrow",17,15,1,1,1,1,0,0,0],["683p","Aromakrow",17,15,0,0,1,1,0,0,0],["708t","Trevenant/Totem Forme Q",13,4,0,0,1,1,0,1,0],["713b","Noismog",10,14,1,1,1,1,0,0,0],["713c","Noismoem",10,14,0,0,1,1,0,0,0],["714b","Solgavern",16,14,0,0,1,1,0,0,0],["714c","Lunavern",13,14,0,0,1,1,0,0,0],["726b","Incineroar/Feral",1,3,0,0,1,1,0,0,0],["740q","Oricorio/Pointe Style",4,9,0,0,1,1,1,0,0]]}}`).split(',');
}
else {
this.DEX_UPDATE_DATE = dateAndDex[0];
const dex = dateAndDex.slice(1);
this.DEX_DATA = dex;
}
}
updateDexFromPage(dexText) {
console.log('Updating dex from site');
let dateString = new Date().toLocaleString('en-GB', { timeZone: 'UTC' });
this.DEX_DATA = dexText.split(',');
LocalStorageManager.updateLocalStorageDex(this.DEX_DATA, dateString);
$('.qolDate').val(dateString);
}
resetDex() {
this.DEX_UPDATE_DATE = undefined;
this.DEX_DATA = undefined;
LocalStorageManager.removeItem(Globals.POKEDEX_DATA_KEY);
}
}
class PagesManager {
constructor() {
this.USER_SETTINGS = UserSettingsHandle.getSettings();
this.pages = {
'Daycare': {
class: DaycarePage,
object: undefined,
setting: 'enableDaycare'
},
'Farm': {
class: FarmPage,
object: undefined,
setting: 'easyEvolve'
},
'Fishing': {
class: FishingPage,
object: undefined,
setting: 'fishingEnable'
},
'Lab': {
class: LabPage,
object: undefined,
setting: 'labNotifier'
},
'Multiuser': {
class: MultiuserPage,
object: undefined,
setting: 'partyMod'
},
'PrivateFields': {
class: PrivateFieldsPage,
object: undefined,
setting: 'privateFieldEnable'
},
'PublicFields': {
class: PublicFieldsPage,
object: undefined,
setting: 'publicFieldEnable'
},
'Shelter': {
class: ShelterPage,
object: undefined,
setting: 'shelterEnable'
},
'Dex': {
class: DexPage,
object: undefined,
setting: 'dexFilterEnable'
},
'Wishforge': {
class: WishforgePage,
object: undefined,
setting: 'condenseWishforge'
},
'Interactions': {
class: InteractionsPage,
object: undefined,
setting: 'interactionsEnable'
},
'Summary': {
class: SummaryPage,
object: undefined,
setting: 'summaryEnable'
},
'Dojo': {
class: DojoPage,
object: undefined,
setting: 'dojoEnable'
}
};
}
instantiatePages() {
for (const key of Object.keys(this.pages)) {
const pg = this.pages[key];
if (this.USER_SETTINGS[pg.setting] === true) {
pg.object = new pg.class(this.USER_SETTINGS);
}
}
}
loadSettings() {
for (const key of Object.keys(this.pages)) {
const pg = this.pages[key];
if (this.USER_SETTINGS[pg.setting] === true && pg.object.onPage(window)) {
pg.object.loadSettings();
}
}
}
saveSettings() {
for (const key of Object.keys(this.pages)) {
const pg = this.pages[key];
if (this.USER_SETTINGS[pg.setting] === true && pg.object.onPage(window)) {
pg.object.saveSettings();
}
}
}
populateSettings() {
for (const key of Object.keys(this.pages)) {
const pg = this.pages[key];
if (this.USER_SETTINGS[pg.setting] === true && pg.object.onPage(window)) {
pg.object.populateSettings();
}
}
}
clearPageSettings(pageName) {
if (!(pageName in this.pages)) {
console.error(`Could not proceed with clearing page settings. Page ${pageName} not found in list of pages`);
} else if (this.pages[pageName].object) {
this.pages[pageName].object.resetSettings();
}
}
clearAllPageSettings() {
for(let pageName in this.pages) {
this.clearPageSettings(pageName);
}
}
setupHTML() {
for (const key of Object.keys(this.pages)) {
const pg = this.pages[key];
if (this.USER_SETTINGS[pg.setting] === true && pg.object.onPage(window)) {
pg.object.setupHTML();
}
}
}
setupCSS() {
for (const key of Object.keys(this.pages)) {
const pg = this.pages[key];
if (this.USER_SETTINGS[pg.setting] === true && pg.object.onPage(window)) {
pg.object.setupCSS();
}
}
}
setupObservers() {
for (const key of Object.keys(this.pages)) {
const pg = this.pages[key];
if (this.USER_SETTINGS[pg.setting] === true && pg.object.onPage(window)) {
pg.object.setupObserver();
}
}
}
setupHandlers() {
for (const key of Object.keys(this.pages)) {
const pg = this.pages[key];
if (this.USER_SETTINGS[pg.setting] === true && pg.object.onPage(window)) {
pg.object.setupHandlers();
}
}
}
}
/*
* This class handles creating, removing, and handling the DOM object actions
* for the QoL Hub.
*/
class QoLHub {
constructor(PAGES) {
this.PAGES = PAGES;
this.SETTINGS_SAVE_KEY = Globals.SETTINGS_SAVE_KEY;
this.USER_SETTINGS = UserSettingsHandle.getSettings();
this.LINKED_SETTINGS = this.USER_SETTINGS.LINKED_SETTINGS;
}
setupCSS() {
//custom user css
$('head').append('<style type="text/css">' + this.USER_SETTINGS.customCss + '</style>');
}
setupHandlers() {
const obj = this;
$('#qolcustomcss', document).on('keydown', function (e) {
if (e.keyCode == 9 || e.which == 9) {
e.preventDefault();
const s = this.selectionStart;
$(this).val(function (i, v) {
return v.substring(0, s) + '\t' + v.substring(this.selectionEnd);
});
this.selectionEnd = s + 1;
}
});
$(document).on('input', '.qolhubsetting', (function () { //Changes QoL settings
const dataKey = this.getAttribute('data-key');
obj.settingsChange(this.getAttribute('data-key'),
$(this).val(),
$(this).parent().parent().attr('class'),
$(this).parent().attr('class'),
(this.hasAttribute('array-name') ? this.getAttribute('array-name') : ''));
obj.handleLinkedSetting(dataKey);
}));
$(document).on('click', '.closeHub', (function () { //close QoL hub
obj.close(document);
}));
$(document).on('click', '#resetPageSettings', (function () {
const page = $(this).parent().find('select').val();
obj.clearPageSettings(page);
}));
$(document).on('click', '#resetAllSettings', (function () {
if(window.confirm('Are you sure? All settings, including your custom CSS, will be reset.')) {
obj.clearAllSettings();
}
}))
$(document).on('click', 'h3.slidermenu', (function () { //show hidden li in change log
$(this).next().slideToggle();
}));
// Issue #61 - Item 6 - Remove the 'Cleared!' message so the user knows they can click it again
$(document).on('mouseover', '#clearCachedDex', (function () {
$('#clearCachedDex').next().remove();
}));
// Issue #61 - Item 6 - Add a 'Cleared!' message so the user knows that the clearing works
$(document).on('click', '#clearCachedDex', (function () {
obj.resetDex();
}));
$(document).on('click', '#qolErrorConsole', (function() {
let consoleContent = $('#qolConsoleHolder').html();
if(consoleContent.trim() == '') {
consoleContent = '[ No errors to display ]';
}
$('#qolConsoleContent').html(consoleContent);
}));
$(document).on('click', '#qolStorageLog', (function() {
let storedSettings = LocalStorageManager.getAllQoLSettings();
console.log(storedSettings);
// get relevant browser/screen size data, add to object
// convert to JSON, then base 64 encode
let output = JSON.stringify(storedSettings);
output = btoa(output);
// output to somewhere user can copy/paste it
$('#qolStorageOutput').text(output);
$('#qolStorageOutput').css('display','block');
}));
}
loadSettings() {
try {
if (LocalStorageManager.getItem(this.SETTINGS_SAVE_KEY) === null) {
this.saveSettings();
} else {
if(this.USER_SETTINGS.load(JSON.parse(LocalStorageManager.getItem(this.SETTINGS_SAVE_KEY)))) {
this.saveSettings();
}
}
} catch(err) {
Helpers.writeCustomError('Error while loading user settings: '+err,'error',err);
}
}
clearAllSettings() {
LocalStorageManager.clearAllQoLKeys();
location.reload();
}
saveSettings() {
LocalStorageManager.setItem(this.SETTINGS_SAVE_KEY, JSON.stringify(this.USER_SETTINGS));
}
populateSettings() {
function populateSetting(object, key, self, oldKeys) {
oldKeys = oldKeys || [];
const _object = object[key];
const newKeys = [...oldKeys, key];
if (typeof _object === 'boolean') {
const _key = newKeys.join('.');
Helpers.toggleSetting(_key, _object, 'qolhubsetting');
}
else if (typeof _object === 'string') {
const _key = newKeys.join('.');
Helpers.toggleSetting(_key, _object, 'qolhubsetting');
} else if (typeof _object === 'object') {
for (const _key in _object) {
populateSetting(_object, _key, self, newKeys);
}
}
}
for (const key in this.USER_SETTINGS) {
if (Object.hasOwnProperty.call(this.USER_SETTINGS, key)) {
populateSetting(this.USER_SETTINGS, key, this);
}
this.handleLinkedSetting(key);
}
}
settingsChange(element, textElement) {
function getProperty( propertyName, object ) {
const parts = propertyName.split( '.' );
const length = parts.length;
let property = object || this;
for (let i = 0; i < length; i++ ) {
if ( ! Object.hasOwnProperty.call(property, parts[i])) {
return null;
}
property = property[parts[i]];
}
return property;
}
function setProperty( propertyName, object, newValue) {
const parts = propertyName.split('.');
const first = parts[0];