Created
August 3, 2018 05:28
-
-
Save ihciah/adef26b49d3b7cff6070ac8ad0838ba4 to your computer and use it in GitHub Desktop.
某辣鸡微信小游戏的挂机脚本==
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import requests | |
import time | |
import json | |
import random | |
headers = { | |
"User-Agent": "Mozilla/5.0 (iPhone; CPU iPhone OS 11_4_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15G77 MicroMessenger/6.7.1", | |
"Referer": "https://servicewechat.com/wx89db226245a4cdc4/18/page-frame.html", | |
"Content-Type": "application/json", | |
"Accept-Encoding": "gzip, deflate" | |
} | |
proxies = { | |
"http": "http://127.0.0.1:9999", | |
"https": "http://127.0.0.1:9999", | |
} | |
MAX_POSITION = 15 | |
MAX_RACING = 10 | |
def get_time(): | |
return int(time.time()*1000) | |
def get(url): | |
# return requests.get(url, headers=headers, proxies=proxies, verify=False) | |
return requests.get(url, headers=headers) | |
def post(url, body): | |
# return requests.post(url, json.dumps(body), headers=headers, proxies=proxies, verify=False) | |
return requests.post(url, json.dumps(body), headers=headers) | |
class User: | |
uid = "" | |
token = "" | |
serverURL = "" | |
cars = [] | |
gold = 0 | |
total = 0 | |
# def __init__(self, code): | |
# self.wxlogin(code) | |
# self.get_game_info() | |
# self.enter() | |
def __init__(self, token): | |
self.token = token | |
self.get_game_info() | |
self.enter() | |
def wxlogin(self, code): | |
body = {"cmd": "wxaLogin", | |
"gameid": 395, | |
"code": code, | |
"appid": "wx89db226245a4cdc4", | |
"chid": 0, | |
"subchid": "" | |
} | |
res = post("https://wxlogin.kxtoo.com/wxlogin", body).json() | |
self.uid = res['uid'] | |
self.token = res['token'] | |
def get_game_info(self): | |
res = get("https://api.kxtoo.com/conf?cmd=getGameInfo&gameid=395").json() | |
self.serverURL = res['ext']['serverURL'] | |
def enter(self): | |
param = "/game?cmd=enter&token={}&now={}&inviteId=undefined&cp_from=undefined&cp_link=undefined&cp_shareId=0".format(self.token, get_time()) | |
res = get(self.serverURL + param).json() | |
data = res['data'] | |
self.cars = data[5] | |
self.gold = data[3] | |
self.total = data[4] | |
def sync(self): | |
param = "/game?cmd=sync&token={}&now={}&gold={}&total={}".format(self.token, get_time(), self.gold, self.total) | |
res = get(self.serverURL + param).json() | |
self.gold = res['gold'] | |
self.total = res['maxGold'] | |
if 'dropBox' in res: | |
drop_box = res['dropBox'] | |
self.cars[drop_box['pos']] = drop_box['car'] | |
print("Get car!", drop_box['car']) | |
def delete_car(self, pos): | |
param = "/game?cmd=sellCar&token={}&now={}&pos={}".format(self.token, get_time(), pos) | |
res = get(self.serverURL + param).json() | |
self.cars[pos] = {"id": 0, "state": -1} | |
self.gold = res['gold'] | |
def merge_car(self, pos1, pos2): | |
param = "/game?cmd=mergeCar&token={}&now={}&pos1={}&pos2={}".format(self.token, get_time(), pos1, pos2) | |
if self.cars[pos1]['state'] != 1: | |
self.change_car_state(pos1, 1) | |
if self.cars[pos2]['state'] != 1: | |
self.change_car_state(pos2, 1) | |
self.cars[pos1] = {"id": 0, "state": -1} | |
self.cars[pos2] = {"id": 0, "state": -1} | |
res = get(self.serverURL + param).json() | |
self.cars[res['getCar']['pos']] = res['getCar']['car'] | |
print("Merge success. Get car {}".format(res['getCar']['car']['id'])) | |
def change_car_state(self, pos, state): | |
if self.cars[pos]['state'] == 0: | |
param = "/game?cmd=openBox&token={}&now={}&pos={}".format(self.token, get_time(), pos) | |
res = get(self.serverURL + param).json() | |
self.cars[pos]['state'] = 1 | |
if state != self.cars[pos]['state']: | |
param = "/game?cmd=chgCarState&token={}&now={}&pos={}&state={}".format(self.token, get_time(), pos, state) | |
res = get(self.serverURL + param).json() | |
self.cars[pos]['state'] = state | |
def share_will_get_gold(self): | |
param = "/game?cmd=shareWillGetGold&token={}&now={}".format(self.token, get_time()) | |
res = get(self.serverURL + param).json() | |
print(res) | |
def share_get_gold(self): | |
self.share_will_get_gold() | |
time.sleep(20) | |
param = "/game?cmd=shareGetGold&token={}&now={}".format(self.token, get_time()) | |
res = get(self.serverURL + param).json() | |
print(res) | |
def share_get_speed(self): | |
param = "/game?cmd=shareGetSpeed&token={}&now={}".format(self.token, get_time()) | |
res = get(self.serverURL + param).json() | |
print(res) | |
def delete_useless(self): | |
ids = [car['id'] for car in self.cars] | |
max_id = max(ids) | |
min_keep_id = max_id - MAX_POSITION + 2 | |
for pos, car in enumerate(self.cars): | |
if 0 < car['id'] < min_keep_id: | |
self.delete_car(car[pos]) | |
def merge_one(self): | |
tmp = {} | |
for pos, car in enumerate(self.cars): | |
if car['id'] == 0: | |
continue | |
if car['id'] not in tmp: | |
tmp[car['id']] = pos | |
else: | |
self.merge_car(tmp[car['id']], pos) | |
return True | |
return False | |
def merge_all(self): | |
while not self.merge_one(): | |
return | |
def go_racing(self): | |
level_pos = {pos: car['id'] for pos, car in filter(lambda t: t[1]['id'] != 0, enumerate(self.cars))} | |
sorted_pos = list(map(lambda y: y[0], sorted(level_pos.items(), key=lambda item: item[1]))) | |
race = sorted_pos[:MAX_RACING] | |
for pos, car in enumerate(self.cars): | |
if pos in race: | |
self.change_car_state(pos, 2) | |
else: | |
self.change_car_state(pos, 1) | |
def act(self): | |
self.sync() | |
self.merge_all() | |
self.delete_useless() | |
self.go_racing() | |
if random.random() < 0.3: | |
self.share_get_gold() | |
self.share_get_speed() | |
if __name__ == "__main__": | |
u = User("") | |
print(u.gold, u.total, u.token, u.cars) | |
while True: | |
u.act() | |
time.sleep(5) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment