Pokemon GO Auto Walking
Chắc hẳn hiện tại nếu như phải kể tên game trên điện thoai nào đang nổi tiếng nhất hiện này thì 90% người sử dụng mobile sẽ trả lời là: POKEMON GO. Hồi mới ra thì Pokemon GO đã thực sự tạo nên cơn sốt trên toàn thế giới. Hiện nay thì cơn sốt này đã suy giảm đi khá nhiều, nếu không muốn nói là đang ...
Chắc hẳn hiện tại nếu như phải kể tên game trên điện thoai nào đang nổi tiếng nhất hiện này thì 90% người sử dụng mobile sẽ trả lời là: POKEMON GO. Hồi mới ra thì Pokemon GO đã thực sự tạo nên cơn sốt trên toàn thế giới. Hiện nay thì cơn sốt này đã suy giảm đi khá nhiều, nếu không muốn nói là đang vào giai đoạn thoái trào. Lý do chủ yếu vì Niantic có chiến lược phát triển khá chậm, các feature hay như: cho người chơi pk với nhau, trao đổi pokemon... mãi chả thấy đâu nên người dùng dần chán và bỏ game. Ngoài ra lại còn vụ chống hack và không cho các third party truy cập lây location pokemon làm cho Niantic cũng mất kha khá người chơi (ban xừ mất cái nick lv 37 của mình (khoc3)).
Mình là một người chơi pokemon từ những ngày đầu và đến bây giờ vẫn còn chơi (căn bản gấu vẫn chơi nên là chơi cho vui =)). Nick hack cũng có, nick tử tế cũng có (để khi nào đi chơi công viên bắt pokemon vs gấu thì có nick mà chơi =)) ). Nick hack ngày xưa thì chạy terminal chả phải làm cái mei gì, sau khi bị ban thì chuyển sang chơi genymotion hack GPS =)).
Việc chơi trên genymotion khá là thuận tiện ngoài việc là cứ phải click trên bản đồ để di chuyển đến vị trí mình đến. Ví dụ đi từ hồ Tây sang hồ Hoàn Kiếm cứ phải click từng tí từng tí 1 khá là ức chế (haiz). Tất nhiên là nếu bạn chấp nhận soft ban thì click 1 phát sang Hồ Hoàn Kiếm rồi chấp nhận ban mấy phút thì không nói. Tuy nhiên hiện nay Pokemon GO đang có chức năng Buddy. Là chức năng chọn 1 Pokemon đi bộ cùng bạn, bạn đi bộ càng nhiều thì càng đươc nhiều candy của Pokemon đó. Thế nên đi bộ càng nhiều thì bạnc càng có nhiều candy cả Dratini chẳng hạn. (À đi bộ còn giúp nở trứng nữa =)) )
Thế nên vấn đề đặt ra cho mấy thanh niên lười đi bộ thích hack như mình là viết tool đi bộ trên genymotion =)))
Cảm ơn thầy giáo Tiến hiệu trưởng là người đưa em vào con đưa tà đạo genymotion =)) cũng như là người dìu dắt em viết code chạy tool =))
Cài đặt Pokemon GO
Việc cài đặt Pokemon GO trên genymotion rất đơn giản. Bạn chỉ cần làm theo link sau đến bước 8 là hoàn toàn có thể chơi được rồi:
http://catchemall.co/genymotion
Mình làm theo trên cả Ubuntu lẫn Window đều OK =)) Hiện tại bạn có thể cài phiên bản cao nhất cho pokemon go là 0.35 để chơi. Bản 0.37 có chống root nên hẻm chơi được =))
Vào game thì bạn chỉ cần bật GPS và bản đồ lên, thích đi đến chỗ nào thì click trên bản đồ và nhân vật tự đi thôi =))
Auto Walking
Thực ra bản auto walking đầu tiên thầy giáo Tiến hiệu trưởng đã code bằng python. Tuy nhiên có một thư viện củ chuối lại ếch chạy trên Window nên là mình phải chuyển sang code ngôn ngữ khác là Ruby.
Phải nói thật là mình lười code + lười tìm hiểu + code tiều nên biết mỗi Ruby thôi =)). Căn bản là code cái tool cho gấu dùng nên mới ngồi code(love2). Thế nên mình mới chọn Ruby, chứ C++, C#... các kiểu là mình đếch biết code.
Set GPS
Đầu tiên phải nói đến là genymotion có hỗ trợ một chức năng là Genyshell, cho phép bạn làm việc trên cửa sổ terminal. Và trong genyshell hỗ trợ một câu lệnh để set GPS cho máy android ảo(hihi). Công việc của chúng ta rất đơn giản: code ruby, sử dụng genyshell để set GPS cho máy ảo đang chạy =))
Để khởi động được genyshell từ ruby thì mình sẽ dùng pseudo terminals (PTYs). PTY cho phép bạn mở một terminal giả lập và chạy một câu lệnh trên terminal đó. Câu lệnh ở đây của mình là khởi động genyshell, ví dụ {PATH}/genymotion/genymotion/genyshell trên ubuntu.
PTY.spawn('#{PATH}/genymotion/genymotion/genyshell') do |stdout, stdin, pid| end
Vì đây là terminal giả lập nên để chạy câu lệnh set GPS thì ta chạy qua stdin với hàm puts. Dùng thêm expect với stdout để chắc chắn câu lệnh chạy xong. Code set GPS sẽ như sau:
PTY.spawn("#{PATH}/genymotion/genymotion/genyshell") do |stdout, stdin, pid| stdin.puts "gps setlongitude #{new_long}" stdout.expect('Genymotion Shell >') stdin.puts "gps setlatitude #{new_lat}" stdout.expect('Genymotion Shell >') end
Tính toán địa điểm
Việc tiếp theo cũng là công việc rất đơn giản. Tính toán việc di chuyển khi có điểm đầu điểm cuối. Trước hết cần phải nhớ rằng tốc độ maximum để Pokemon GO biết rằng bạn đang đi bộ là 10km/h. Thế nên khi có tọa độ của điểm đầu và điểm cuối thì mình sẽ tính ra các tọa độ con để set GPS. Code đơn giản như bên dưới thôi, các bạn đọc là hiểu =))
MAX_SPEED = 12.5 # Chỗ này lười tìm hiểu nên dùng gem geocoder tính khoảng cách cho nhanh =)) total_kms = Geocoder::Calculations.distance_between start_position, end_position, :units => :km steps = (total_kms * 1000 / MAX_SPEED).to_i lat_step = (end_pos[0] - start_pos[0]) / steps long_step = (end_pos[1] - start_pos[1]) / steps new_latitude += lat_step new_longtitude += long_step cur_step = 0 while cur_step < steps cur_step += 1 new_latitude += lat_step new_longtitude += long_step sleep 5 end
Thế là xong!!! Kết hợp 2 phần trên là bạn có thể auto walking rồi =)) Code cụ thể bạn có thể xem ở link github cuối bài. Về cơ bản chỉ cần file geny_walking.rb rồi chạy ở terminal là bạn đã có thể auto walking
Làm UI
Tất nhiên mục tiêu cuối cùng là làm cho gấu của mình dùng nên mình sẽ phải làm thành giao diện cho dễ sử dụng. Lại phải ngồi mò mẫm