Rumah >pembangunan bahagian belakang >tutorial php >Cara membuat perakam lokasi pokemon spawn dengan couchdb
Takeaways Key
Ini akan membolehkan pengguna menyimpan lokasi raksasa yang mereka hadapi di Pokemon Go. Peta Google akan digunakan untuk mencari lokasi dan penanda yang diletakkan untuk menentukan lokasi yang tepat. Sebaik sahaja pengguna berpuas hati dengan lokasi, penanda boleh berinteraksi dengan, apabila ia akan menunjukkan kotak modal yang membolehkan pengguna memasukkan nama Pokemon dan simpan lokasi. Apabila pengguna seterusnya datang dan mencari lokasi yang sama, nilai -nilai yang ditambah oleh pengguna terdahulu akan diplotkan dalam peta sebagai penanda. Inilah aplikasinya seperti:
kod sumber penuh untuk projek ini boleh didapati di GitHub.
menyediakan persekitaran pembangunan
Kotak itu tidak dilengkapi dengan CouchDB yang dipasang, jadi anda perlu melakukannya secara manual; Tetapi bukan hanya couchdb biasa. Aplikasi ini perlu berfungsi dengan data geo (latitud dan bujur): Anda akan membekalkan Couchdb dengan maklumat kotak terikat dari Peta Google. Kotak terikat mewakili kawasan yang sedang ditunjukkan dalam peta, dan semua pengguna koordinat sebelumnya telah menambah ke kawasan itu akan ditunjukkan pada peta juga. Couchdb tidak boleh melakukannya secara lalai, itulah sebabnya anda perlu memasang plugin yang dipanggil GeoCouch untuk memberi Couchdb beberapa kuasa besar spatial.
Cara paling mudah untuk melakukan itu adalah melalui bekas Docker Geocouch. Anda juga boleh cuba memasang Geocouch secara manual tetapi memerlukan anda memasang Couchdb dari sumber dan mengkonfigurasi semuanya dengan tangan. Saya tidak benar -benar mengesyorkan kaedah ini melainkan anda mempunyai janggut Unix.
Teruskan dan pasang Docker ke VM yang anda gunakan, dan kembali ke sini setelah selesai.
Pertama, klon repo dan navigasi di dalam direktori yang dibuat.
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
Seterusnya, buka Dockerfile dan ganti skrip untuk mendapatkan Couchdb dengan yang berikut:
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
anda perlu melakukan ini kerana URL muat turun yang sedang digunakan sudah gagal.
Bina imej Docker:
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
Ini akan mengambil sedikit masa bergantung kepada sambungan internet anda supaya pergi merebut snek. Sebaik sahaja ia selesai, buat bekas dan mulakannya:
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
Sebaik sahaja ia bermula, anda boleh menguji untuk melihat apakah ia berjalan dengan melaksanakan perintah berikut:
<span>curl localhost:5984 </span>
Di luar VM, jika anda mengemukakan port dengan betul, itu akan menjadi:
<span>curl 192.168.33.10:5984 </span>
ia harus mengembalikan perkara berikut:
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
Perhatikan bahawa saya akan sentiasa merujuk kepada 192.168.33.10 sepanjang artikel. Ini adalah IP yang diberikan kepada Scotchbox, yang merupakan kotak vagrant yang saya gunakan. Jika anda menggunakan Homestead bertambah baik, IP adalah 192.168.10.10. Anda boleh menggunakan IP ini untuk mengakses aplikasinya. Jika anda menggunakan sesuatu yang lain sepenuhnya, menyesuaikan diri seperti yang diperlukan.
Anda akan menggunakan rangka kerja langsing untuk mempercepatkan perkembangan aplikasinya. Buat projek baru menggunakan komposer:
php <span>composer create-project slim/slim-skeleton pokespawn </span>
Pokespawn adalah nama projek, jadi teruskan dan navigasi ke direktori itu apabila komposer selesai memasang. Kemudian, pasang pakej tambahan berikut:
<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv </span>
Berikut adalah gambaran ringkas mengenai setiap satu:
Futon akses dari penyemak imbas dan buat pangkalan data baru yang dipanggil Pokespawn. Setelah dibuat, masuk ke dalam pangkalan data dan buat pandangan baru. Anda boleh melakukannya dengan mengklik dropdown paparan dan memilih pandangan sementara. Tambahkan perkara berikut di dalam Textarea untuk fungsi peta:
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
Seterusnya, buat dokumen reka bentuk untuk bertindak balas terhadap carian spatial. Anda boleh melakukannya dengan memilih dokumen reka bentuk dalam dropdown paparan kemudian klik pada dokumen baru. Sekali dalam halaman untuk membuat dokumen reka bentuk, klik pada butang Tambah medan dan tambahkan spatial sebagai nama medan, dan berikut sebagai nilai:
Dokumen reka bentuk ini menggunakan fungsi spatial yang disediakan oleh GeoCouch. Perkara pertama yang dilakukan ialah memeriksa sama ada dokumen itu mempunyai medan LOC di dalamnya. Medan LOC adalah array yang mengandungi koordinat lokasi tertentu, dengan item pertama yang mengandungi latitud dan item kedua yang mengandungi bujur. Jika dokumen memenuhi kriteria ini, ia menggunakan fungsi emit () seperti pandangan biasa. Kuncinya adalah geometri geojson dan nilai adalah array yang mengandungi nama Pokemon dan Sprite.
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Apabila anda membuat permintaan ke dokumen reka bentuk, anda perlu menentukan start_range dan end_range yang mempunyai format array JSON. Setiap item boleh menjadi nombor atau batal. NULL digunakan jika anda mahukan julat terbuka. Berikut adalah permintaan contoh:
dan outputnya:
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
Jika anda ingin mengetahui lebih lanjut mengenai operasi tertentu yang boleh anda lakukan dengan GeoCouch, pastikan anda membaca dokumentasi atau wiki.
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
Membuat projek
Poke pengimport
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
Skrip ini membuat permintaan ke titik akhir Pokedex API Pokemon. Titik akhir ini memerlukan ID versi Pokedex yang anda mahu ia kembali. Sejak Pokemon Go hanya membolehkan pemain menangkap Pokemon dari generasi pertama, Supply 2 sebagai ID. Ini mengembalikan semua Pokemon dari rantau Kanto permainan Pokemon yang asal. Kemudian gelung melalui data, ekstrak semua maklumat yang diperlukan, simpan sprite, dan buat dokumen baru menggunakan data yang diekstrak.
Buka fail src/routes.php dan tambahkan laluan berikut:
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Setiap laluan akan bertindak balas terhadap tindakan yang boleh dilakukan di seluruh aplikasi. Laluan Root mengembalikan halaman rumah, laluan carian mengembalikan cadangan nama Pokemon, laluan simpan lokasi menjimatkan lokasi dan laluan pengambilan mengembalikan Pokemon di lokasi tertentu.
Di bawah direktori SRC, buat folder aplikasi/pengawal dan di dalam membuat fail homecontroller.php. Ini akan melaksanakan semua tindakan yang diperlukan untuk setiap laluan. Inilah kod:
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
Pengawal rumah menggunakan $ renderer yang diluluskan melalui pembina untuk menjadikan halaman rumah aplikasinya. Ia juga menggunakan kelas DB yang akan anda buat tidak lama lagi.
Buat fail UTILS/DB.PHP di bawah direktori aplikasi. Buka fail dan buat kelas:
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
Di dalam kelas, buat pelanggan Guzzle baru. Anda menggunakan Guzzle dan bukannya beberapa pelanggan PHP untuk CouchDB kerana anda boleh melakukan apa sahaja yang anda mahu dengannya.
<span>curl localhost:5984 </span>
konfigurasi adalah dari fail .env pada akar projek. Ini mengandungi URL asas Couchdb.
<span>curl 192.168.33.10:5984 </span>
SearchPokemon bertanggungjawab untuk mengembalikan data yang digunakan oleh fungsi auto-suggest. Oleh kerana CouchDB sebenarnya tidak menyokong keadaan seperti yang anda gunakan di SQL, anda menggunakan hack kecil untuk meniru. Caranya di sini menggunakan start_key dan end_key dan bukan hanya kunci yang hanya mengembalikan padanan tepat. FFF0 adalah salah satu watak Unicode khas yang diperuntukkan pada akhir pesawat berbilang bahasa. Ini menjadikannya calon yang baik untuk menambahkan pada akhir rentetan sebenar yang dicari, yang menjadikan seluruh watak menjadi pilihan kerana nilai yang tinggi. Perhatikan bahawa hack ini hanya berfungsi untuk kata -kata pendek jadi lebih daripada cukup untuk mencari nama pokemon.
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>3
SavePokemonLocation menjimatkan koordinat yang mana penanda peta Google sedang menunjuk, bersama dengan nama dan sprite. Medan doc_type juga ditambah untuk mendapatkan pengambilan semula semua dokumen yang berkaitan dengan lokasi.
php <span>composer create-project slim/slim-skeleton pokespawn </span>
isvalidcoordinates cek jika nilai latitud dan longitud mempunyai format yang sah.
<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv </span>
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
FetchPokemons adalah fungsi yang membuat permintaan untuk dokumen reka bentuk untuk carian spatial yang anda buat sebelum ini. Di sini, anda menentukan koordinat barat daya sebagai nilai untuk start_range dan koordinat timur laut sebagai nilai untuk end_range. Tanggapan ini juga terhad kepada 100 baris pertama untuk mengelakkan meminta terlalu banyak data. Terdahulu, anda juga melihat bahawa terdapat beberapa data yang dikembalikan oleh CouchDB yang tidak diperlukan. Ia berguna untuk mengekstrak dan kemudian mengembalikan hanya data yang diperlukan di bahagian depan. Saya memilih untuk meninggalkannya sebagai pengoptimuman untuk hari yang lain.
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
handleresponse menukarkan rentetan JSON yang dikembalikan oleh Couchdb ke dalam array.
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
Buka composer.json di direktori root dan tambahkan hak berikut di bawah harta yang memerlukan, kemudian laksanakan komposer dump-autoload. Ini membolehkan anda untuk autoload semua fail di dalam direktori src/app dan menjadikannya tersedia di dalam ruang nama aplikasi:
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
Akhir sekali, suntikan pengawal rumah ke dalam bekas. Anda boleh melakukannya dengan membuka fail src/dependencies.php dan tambahkan yang berikut ke bahagian bawah:
<span>curl localhost:5984 </span>
Ini membolehkan anda lulus penyokong render kepada pengawal rumah dan menjadikan homecontroller boleh diakses dari penghala.
Sekarang anda sudah bersedia untuk meneruskan dengan bahagian depan. Pertama, buat fail templat/index.html di akar direktori projek dan tambahkan yang berikut:
<span>curl 192.168.33.10:5984 </span>
Di
adalah gaya dari pelbagai perpustakaan yang digunakan oleh aplikasi, serta gaya untuk aplikasinya. Dalam adalah medan teks untuk mencari lokasi, bekas peta, dan modal untuk menyimpan lokasi baru. Di bawah mereka adalah skrip yang digunakan dalam aplikasi. Jangan lupa untuk menggantikan anda_googlemap_apikey dalam skrip Peta Google dengan kunci API anda sendiri.Untuk fail JavaScript utama (awam/js/main.js), mula -mula membuat pembolehubah untuk menyimpan nilai yang anda perlukan di seluruh fail keseluruhan.
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
Seterusnya, buat fungsi untuk memulakan peta. Min_zoomlevel ditentukan untuk mengelakkan pengguna keluar dari zum sehingga mereka dapat melihat keseluruhan peta dunia. Anda telah menambah had kepada hasil yang boleh dikembalikan oleh CouchDB, tetapi ini juga merupakan tambahan yang baik untuk menghalang pengguna daripada mengharapkan mereka dapat memilih data dari seluruh dunia.
php <span>composer create-project slim/slim-skeleton pokespawn </span>Buat penanda untuk lokasi penunjuk pin yang pengguna mahu tambah. Kemudian, tambahkan pendengar acara untuk membuka modal untuk menambah lokasi apabila penanda ditekan:
<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv </span>Inisialisasi kotak carian:
<span>function(doc){ </span> <span>if(doc.doc_type == 'pokemon'){ </span> <span>emit(doc.name, null); </span> <span>} </span><span>} </span>Tambahkan pelbagai pendengar peta:
<span>{ </span> <span>"points": "function(doc) {\n if (doc.loc) {\n emit([{\n type: \"Point\",\n coordinates: [doc.loc[0], doc.loc[1]]\n }], [doc.name, doc.sprite]);\n }};" </span><span>} </span>Tambahkan pendengar acara ketika tempat dalam kotak carian berubah.
<span>curl -X GET --globoff 'http://192.168.33.10:5984/pokespawn/_design/location/_spatial/points?start_range=[-33.87049924568689,151.2149563379288]&end_range=[33.86709181198735,151.22298150730137]' </span>Fungsi FetchPokemon bertanggungjawab untuk mengambil Pokemon yang sebelum ini diplotkan di kawasan yang boleh dilihat pada peta.
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
Ini adalah kod untuk menambahkan fungsi auto-suggest medan teks untuk memasukkan nama Pokemon. Fungsi renderitem ditentukan untuk menyesuaikan HTML yang digunakan untuk memberikan setiap cadangan. Ini membolehkan anda menambah ID Pokemon sebagai atribut data yang kemudian anda gunakan untuk menetapkan nilai medan pokemon_id sebaik sahaja cadangan dipilih.
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Apabila butang lokasi simpan ditekan, permintaan dibuat ke pelayan untuk menambah lokasi Pokemon ke Couchdb.
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>
Buat fail awam/css/styles.css dan tambahkan gaya berikut:
<span>docker create -ti -p 5984:5984 elecnix/docker-geocouch:1.6.1 </span><span>docker start <container id> </span>
Secara lalai CouchDB terbuka kepada semua. Ini bermakna apabila anda mendedahkannya ke Internet, sesiapa sahaja boleh mendatangkan malapetaka dalam pangkalan data anda. Sesiapa sahaja boleh melakukan mana -mana operasi pangkalan data dengan hanya menggunakan curl, posman atau mana -mana alat lain untuk membuat permintaan HTTP. Malah, keadaan sementara ini juga mempunyai nama: "Parti Admin". Anda telah melihat ini dalam tindakan dalam tutorial sebelumnya dan walaupun anda membuat pangkalan data baru, pandangan dan dokumen reka bentuk lebih awal. Semua tindakan ini hanya boleh dilakukan oleh pentadbir pelayan tetapi anda telah pergi ke hadapan dan melakukannya tanpa log masuk atau apa -apa. Masih tidak yakin? Cuba laksanakan ini di mesin tempatan anda:
<span>curl localhost:5984 </span>
Anda akan mendapat yang berikut sebagai respons jika anda belum mempunyai admin pelayan pada pemasangan CouchDB anda:
<span>curl 192.168.33.10:5984 </span>
yikes, kan? Berita baiknya ada masalah yang mudah. Apa yang perlu anda lakukan ialah membuat pentadbir pelayan. Anda boleh melakukannya dengan arahan berikut:
<span>{"couchdb":"Welcome","uuid":"2f0b5e00e9ce08996ace6e66ffc1dfa3","version":"1.6.1","vendor":{"version":"1.6.1","name":"The Apache Software Foundation"}} </span>
Perintah di atas membuat pentadbir pelayan baru bernama "Kami" dengan kata laluan "MySupersecureShword".
Secara lalai, CouchDB tidak mempunyai pentadbir pelayan jadi sebaik sahaja anda membuatnya, pihak pentadbir sudah berakhir. Perhatikan bahawa pentadbir pelayan mempunyai kuasa seperti Tuhan supaya anda mungkin lebih baik membuat hanya satu atau dua. Kemudian buat beberapa pentadbir pangkalan data yang hanya boleh melakukan operasi CRUD. Anda boleh melakukannya dengan melaksanakan arahan berikut:
php <span>composer create-project slim/slim-skeleton pokespawn </span>
Jika berjaya, ia akan mengembalikan tindak balas yang serupa dengan yang berikut:
<span>composer require danrovito/pokephp guzzlehttp/guzzle gregwar/image vlucas/phpdotenv </span>
Sekarang anda boleh mencuba arahan yang sama dari sebelumnya dengan nama pangkalan data yang berbeza:
<span>function(doc){ </span> <span>if(doc.doc_type == 'pokemon'){ </span> <span>emit(doc.name, null); </span> <span>} </span><span>} </span>
dan Couchdb akan berteriak kepada anda:
<span>{ </span> <span>"points": "function(doc) {\n if (doc.loc) {\n emit([{\n type: \"Point\",\n coordinates: [doc.loc[0], doc.loc[1]]\n }], [doc.name, doc.sprite]);\n }};" </span><span>} </span>
untuk ini berfungsi, anda kini perlu membekalkan nama pengguna dan kata laluan anda dalam URL seperti:
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>
OK, jadi itu? Nah, tidak semestinya kerana satu -satunya perkara yang anda lakukan ialah had operasi pangkalan data yang hanya boleh dilakukan oleh pentadbir pelayan. Ini termasuk perkara seperti membuat pangkalan data baru, memadam pangkalan data, mengurus pengguna, akses penuh ke semua pangkalan data (termasuk jadual sistem), operasi CRUD ke semua dokumen. Ini meninggalkan anda dengan pengguna yang tidak sah yang masih mempunyai kuasa untuk melakukan perkara CRUD pada mana -mana pangkalan data. Anda boleh mencubanya dengan log keluar dari Futon, pilih mana -mana pangkalan data yang anda mahu kekacauan dan melakukan perkara -perkara CRUD di dalamnya. CouchDB masih akan melaksanakan operasi tersebut untuk anda.
Jadi, bagaimana anda memasang lubang yang tinggal? Anda boleh melakukannya dengan membuat dokumen reka bentuk yang akan menyemak sama ada nama pengguna pengguna yang cuba melakukan operasi menulis (masukkan atau mengemas kini) adalah sama dengan nama pengguna yang dibenarkan untuk melakukannya. Dalam Futon, log masuk menggunakan akaun admin admin atau pangkalan data pelayan, pilih pangkalan data yang ingin anda bekerjasama, dan buat dokumen reka bentuk baru. Tetapkan id sebagai _design/blockanonymouswrites, tambahkan medan bernama Validate_doc_update, dan tetapkan nilai kepada yang berikut:
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gz
Versi baru dokumen, dokumen yang sedia ada, dan konteks pengguna diluluskan sebagai hujah untuk fungsi ini. Satu -satunya perkara yang perlu anda periksa ialah userctx yang mengandungi nama pangkalan data, nama pengguna yang melakukan operasi, dan pelbagai peranan yang diberikan kepada pengguna.
SecoBJ juga diluluskan sebagai hujah keempat, tetapi anda tidak perlu bekerja padanya; Itulah sebabnya ia ditinggalkan. Pada asasnya, SecOBJ menerangkan keistimewaan pentadbir yang telah ditetapkan pada pangkalan data.
Sebaik sahaja anda telah menambah nilai, simpan dokumen reka bentuk, log keluar, dan cuba buat dokumen baru atau mengemas kini yang sedia ada dan menonton Couchdb mengadu pada anda.
Sebagai alternatif, jika anda mempunyai banyak pengguna dalam pangkalan data tunggal, anda juga boleh menyemak peranannya. Fungsi di bawah akan membuang ralat di mana -mana pengguna yang tidak mempunyai peranan "pokemon_master".
<span>docker build -t elecnix/docker-geocouch:1.6.1 . </span>Jika anda ingin mengetahui lebih lanjut mengenai cara menjamin CouchDB, pastikan anda menyemak sumber -sumber berikut:
<span>git clone git@github.com:elecnix/docker-geocouch.git </span><span>cd docker-geocouch </span>Kemudian, kemas kini pembina kelas DB untuk menggunakan butiran baru:
# Get the CouchDB source RUN cd /opt; wget http://www-eu.apache.org/dist/couchdb/source/${COUCH_VERSION}/a$ tar xzf /opt/apache-couchdb-${COUCH_VERSION}.tar.gzKesimpulan
Adakah anda menggunakan Couchdb dalam projek anda? Apa untuk? Mana -mana cadangan / ciri untuk menambah projek kecil ini? Beritahu kami dalam komen!
soalan yang sering ditanya mengenai lokasi Spawn Pokemon
Biome di Pokemon Go adalah kawasan geografi tertentu yang mempengaruhi jenis pokemon yang bertelur di sana. Sebagai contoh, pokemon jenis air lebih cenderung untuk bertelur berhampiran badan air, manakala Pokemon jenis rumput lebih cenderung untuk bertelur di taman atau hutan. Memahami bioma yang berbeza boleh membantu anda meramalkan di mana jenis Pokemon tertentu mungkin bertelur. Satu kaedah adalah menggunakan pangkalan data seperti Couchdb untuk menyimpan lokasi Pokemon Spawns. Ini melibatkan penggunaan API Pokemon Go untuk mendapatkan data bertelur dan kemudian menyimpan data ini di CouchDB. Anda kemudian boleh menggunakan data ini untuk menganalisis corak spawn dan meramalkan lokasi bertelur masa depan. meramalkan spawns masa depan. Dengan menganalisis data, anda boleh mengenal pasti corak di lokasi dan masa bertelur. Ini dapat membantu anda meramalkan di mana dan bila jenis Pokemon tertentu mungkin bertelur di masa depan.
Atas ialah kandungan terperinci Cara membuat perakam lokasi pokemon spawn dengan couchdb. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!