+5

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 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 =))

fb8c3b758e6ffdd1abd01294f60af60b.png

Để 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 😦. Để làm giao diện thì mình sẽ dùng thư viện Shoes. Cái này cực dễ dùng luôn, hiểu hao hao html với đầy đủ button. edit box. Design thì đầy đủ margin, height, width...

Giao diện cũng sẽ không có nhiều. sẽ chỉ như bên dưới thôi

b144908267c3b0d192936f97db279f3b.png

Phần code sẽ như sau:

Shoes.app do
  flow do
    para "GENYSHELL PATH", width: 600, margin_right: 20
    @shell_path = edit_line width: 300, height: 30
  end

  flow do
    para "START LOCATION", width: 600, margin_right: 26
    @start_location = edit_line width: 300, height: 30
  end

  flow do
    para "END LOCATION", width: 600, margin_right: 44
    @end_location = edit_line width: 300, height: 30
  end

  flow do
    @go_button = button "GO", margin_right: 100, margin_left: 100
    @pause_button = button "PAUSE", margin_right: 100
    @stop_button = button "STOP"
  end

  @log_box = edit_box width: 1.0, height: 400, text: 'LOG HERE...'
end

Việc cuối cùng là kết hợp giao diện với phần code set GPS bên trên. Các bạn có thể tham khảo link git cuối bài

Kết Luận

Ngoài những chức năng chính trên thì mình còn thêm button là pause. Để khi nào bạn đi qua cái pokestop hay gym mà muốn dừng lại oánh thì có thể pause, chiếm gym sau đó đi tiếp.

Vì chỉ là demo đơn giản nên chắc còn nhiều bug =)) nếu các bạn có chạy mà bị lỗi thì tắt đi chạy lại nhé =))

Link Github sau đây:

https://github.com/linuxhjkaru/geny_walking


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí