Beispiel #1
0
async def main():
	nas = nnas.NNASClient()
	nas.set_device(DEVICE_ID, SERIAL_NUMBER, SYSTEM_VERSION)
	nas.set_title(MK8.TITLE_ID_EUR, MK8.LATEST_VERSION)
	nas.set_locale(REGION_ID, COUNTRY_NAME, LANGUAGE)
	
	access_token = await nas.login(USERNAME, PASSWORD)
	nex_token = await nas.get_nex_token(access_token.token, MK8.GAME_SERVER_ID)
	
	s = settings.default()
	s.configure(MK8.ACCESS_KEY, MK8.NEX_VERSION)
	async with backend.connect(s, nex_token.host, nex_token.port) as be:
		async with be.login(str(nex_token.pid), nex_token.password) as client:
			ranking_client = ranking.RankingClient(client)
	
			order_param = ranking.RankingOrderParam()
			order_param.order_calc = ranking.RankingOrderCalc.ORDINAL
			order_param.offset = 499 #Start at 500th place
			order_param.count = 20 #Download 20 highscores
	
			rankings = await ranking_client.get_ranking(
				ranking.RankingMode.GLOBAL, TRACK_ID,
				order_param, 0, 0
			)
	
			ranking_stats = await ranking_client.get_stats(
				TRACK_ID, order_param, ranking.RankingStatFlags.ALL
			)
		
			names = await nas.get_nnids([data.pid for data in rankings.data])
	
			#Print some interesting stats
			stats = ranking_stats.stats
			print("Total:", int(stats[0]))
			print("Total time:", format_time(stats[1]))
			print("Lowest time:", format_time(stats[2]))
			print("Highest time:", format_time(stats[3]))
			print("Average time:", format_time(stats[4]))
	
			print("Rankings:")
			for rankdata in rankings.data:
				time = format_time(rankdata.score)
				print("\t%5i   %20s   %s" %(rankdata.rank, names[rankdata.pid], time))
		
			#Let's download the replay file of whoever is in 500th place
			store = datastore.DataStoreClient(client)
			
			rankdata = rankings.data[0]
			get_param = datastore.DataStorePrepareGetParam()
			get_param.persistence_target.owner_id = rankdata.pid
			get_param.persistence_target.persistence_id = TRACK_ID - 16
			get_param.extra_data = ["WUP", str(REGION_ID), REGION_NAME, str(COUNTRY_ID), COUNTRY_NAME, ""]
			
			req_info = await store.prepare_get_object(get_param)
			headers = {header.key: header.value for header in req_info.headers}
			response = await http.get(req_info.url, headers=headers)
			response.raise_if_error()
			
			with open("replay.bin", "wb") as f:
				f.write(response.body)
Beispiel #2
0
async def main():
    nas = nnas.NNASClient()
    nas.set_device(DEVICE_ID, SERIAL_NUMBER, SYSTEM_VERSION)
    nas.set_title(DKCTF.TITLE_ID_EUR, DKCTF.LATEST_VERSION)
    nas.set_locale(REGION, COUNTRY, LANGUAGE)

    access_token = await nas.login(USERNAME, PASSWORD)
    nex_token = await nas.get_nex_token(access_token.token,
                                        DKCTF.GAME_SERVER_ID)

    s = settings.default()
    s.configure(DKCTF.ACCESS_KEY, DKCTF.NEX_VERSION)
    async with backend.connect(s, nex_token.host, nex_token.port) as be:
        async with be.login(str(nex_token.pid), nex_token.password) as client:
            order_param = ranking.RankingOrderParam()
            order_param.offset = 0  #Start with the world record
            order_param.count = 20  #Download 20 highscores

            ranking_client = ranking.RankingClient(client)
            rankings = await ranking_client.get_ranking(
                ranking.RankingMode.GLOBAL,  #Get the global leaderboard
                0x893EB726,  #Category, this is 3-A (Magrove Cove)
                order_param,
                0,
                0)

            print("Total:", rankings.total)
            print("Rankings:")
            for rankdata in rankings.data:
                seconds = (rankdata.score >> 1) / 60
                time = "%i:%02i.%02i" % (seconds / 60, seconds % 60,
                                         (seconds * 100) % 100)
                damage = " Damaged " if rankdata.score & 1 else "No damage"
                kong = ["No Kong", "Diddy", "Dixie",
                        "Cranky"][rankdata.groups[1]]
                name = rankdata.common_data.decode("ascii")[:-1]

                print("\t%2i   %20s   %s (%s)   %s" %
                      (rankdata.rank, name, time, damage, kong))

            #Now download the world record replay file if available
            world_record = rankings.data[0]
            if world_record.param:  #If world record has a replay file
                store = datastore.DataStoreClient(client)

                get_param = datastore.DataStorePrepareGetParam()
                get_param.data_id = world_record.param

                req_info = await store.prepare_get_object(get_param)
                headers = {
                    header.key: header.value
                    for header in req_info.headers
                }
                response = await http.get(req_info.url, headers=headers)
                response.raise_if_error()

                with open("replay.bin", "wb") as f:
                    f.write(response.body)
Beispiel #3
0
print("Total:", rankings.total)
print("Rankings:")
for rankdata in rankings.data:
    seconds = (rankdata.score >> 1) / 60
    time = "%i:%02i.%02i" % (seconds / 60, seconds % 60, (seconds * 100) % 100)
    damage = " Damaged " if rankdata.score & 1 else "No damage"
    kong = ["No Kong", "Diddy", "Dixie", "Cranky"][rankdata.groups[1]]
    name = rankdata.common_data.decode("ascii")[:-1]

    print("\t%2i   %20s   %s (%s)   %s" %
          (rankdata.rank, name, time, damage, kong))

#Now download the world record replay file if available
world_record = rankings.data[0]
if world_record.param:  #If world record has a replay file
    store = datastore.DataStoreClient(backend.secure_client)

    get_param = datastore.DataStorePrepareGetParam()
    get_param.data_id = world_record.param

    req_info = store.prepare_get_object(get_param)
    headers = {header.key: header.value for header in req_info.headers}
    replay_data = requests.get("http://" + req_info.url,
                               headers=headers).content

    with open("replay.bin", "wb") as f:
        f.write(replay_data)

#Close connection
backend.close()
async def main():
    keys = KeySet.load(PATH_KEYS)
    info = ProdInfo(keys, PATH_PRODINFO)

    with open(PATH_TICKET, "rb") as f:
        ticket = f.read()

    cert = info.get_tls_cert()
    pkey = info.get_tls_key()

    dauth = DAuthClient(keys)
    dauth.set_certificate(cert, pkey)
    dauth.set_system_version(SYSTEM_VERSION)
    response = await dauth.device_token(dauth.BAAS)
    device_token = response["device_auth_token"]

    aauth = AAuthClient()
    aauth.set_system_version(SYSTEM_VERSION)
    response = await aauth.auth_digital(GBG.TITLE_ID, GBG.LATEST_VERSION,
                                        device_token, ticket)
    app_token = response["application_auth_token"]

    baas = BAASClient()
    baas.set_system_version(SYSTEM_VERSION)

    response = await baas.authenticate(device_token)
    access_token = response["accessToken"]

    response = await baas.login(BAAS_USER_ID, BAAS_PASSWORD, access_token,
                                app_token)
    user_id = int(response["user"]["id"], 16)
    id_token = response["idToken"]

    auth_info = authentication.AuthenticationInfo()
    auth_info.token = id_token
    auth_info.ngs_version = 4  #Switch
    auth_info.token_type = 2

    s = settings.load("switch")
    s.configure(GBG.ACCESS_KEY, GBG.NEX_VERSION, GBG.CLIENT_VERSION)
    async with backend.connect(s, HOST, PORT) as be:
        async with be.login(str(user_id), auth_info=auth_info) as client:
            store = datastore.DataStoreClient(client)

            # Request meta data
            param = datastore.DataStoreGetMetaParam()
            param.data_id = code_to_data_id(GAME_CODE)

            meta = await store.get_meta(param)
            print("Data id:", meta.data_id)
            print("Owner id:", meta.owner_id)
            print("Uploaded at:", meta.create_time)
            print("Expires at:", meta.expire_time)

            # Download game file
            result = await store.get_object_infos([meta.data_id])
            result.results[0].raise_if_error()

            info = result.infos[0]
            url = "https://" + info.url
            headers = {h.key: h.value for h in info.headers}
            response = await http.get(url, headers=headers)
            response.raise_if_error()
            with open("game.bin", "wb") as f:
                f.write(response.body)