Skip to content

Instantly share code, notes, and snippets.

@ihciah
Created August 3, 2018 05:28
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ihciah/adef26b49d3b7cff6070ac8ad0838ba4 to your computer and use it in GitHub Desktop.
Save ihciah/adef26b49d3b7cff6070ac8ad0838ba4 to your computer and use it in GitHub Desktop.
某辣鸡微信小游戏的挂机脚本==
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