From eef92f1fe654e5d28c75e834140d36afd10d9574 Mon Sep 17 00:00:00 2001 From: Mr_Goldberg Date: Sat, 6 Aug 2022 05:23:49 -0400 Subject: [PATCH] Add early version of script to generate emu config. Only generates achievements and stats configs at the moment. --- overlay_experimental/steam_overlay.cpp | 2 +- scripts/generate_emu_config.py | 75 ++++++++++++++++++++++++++ scripts/generate_emu_config_README.txt | 22 ++++++++ 3 files changed, 98 insertions(+), 1 deletion(-) create mode 100644 scripts/generate_emu_config.py create mode 100644 scripts/generate_emu_config_README.txt diff --git a/overlay_experimental/steam_overlay.cpp b/overlay_experimental/steam_overlay.cpp index 5c0fe4d..bac1e51 100644 --- a/overlay_experimental/steam_overlay.cpp +++ b/overlay_experimental/steam_overlay.cpp @@ -802,7 +802,7 @@ void Steam_Overlay::OverlayProc() ImGui::Separator(); ImGui::Text("%s", x.title.c_str()); - if (x.hidden) { + if (hidden) { ImGui::Text("hidden achievement"); } else { ImGui::TextWrapped("%s", x.description.c_str()); diff --git a/scripts/generate_emu_config.py b/scripts/generate_emu_config.py new file mode 100644 index 0000000..2c563cc --- /dev/null +++ b/scripts/generate_emu_config.py @@ -0,0 +1,75 @@ + +USERNAME = "" +PASSWORD = "" + +#steam ids with public profiles that own a lot of games +TOP_OWNER_IDS = [76561198028121353, 76561198001237877, 76561198001678750, 76561198237402290] + +from stats_schema_achievement_gen import achievements_gen +from steam.client import SteamClient +from steam.client.cdn import CDNClient +from steam.enums import common +from steam.enums.emsg import EMsg +from steam.core.msg import MsgProto +import os +import sys + +if len(sys.argv) < 2: + print("\nUsage: {} appid\n\nExample: {} 480\n".format(sys.argv[0], sys.argv[0])) + exit(1) + +appid = int(sys.argv[1]) + +client = SteamClient() +if not os.path.exists("login_temp"): + os.makedirs("login_temp") +client.set_credential_location("login_temp") + +if (len(USERNAME) == 0 or len(PASSWORD) == 0): + client.cli_login() +else: + while True: + ret = client.login(USERNAME, password=PASSWORD) + if ret != common.EResult.OK: + if ret == common.EResult.TryAnotherCM: + continue + print("error logging in with set username and password, trying cli login. error was:", ret) + client.cli_login() + break + else: + break + +def get_stats_schema(client, game_id, owner_id): + message = MsgProto(EMsg.ClientGetUserStats) + message.body.game_id = game_id + message.body.schema_local_version = -1 + message.body.crc_stats = 0 + message.body.steam_id_for_user = owner_id + + client.send(message) + return client.wait_msg(EMsg.ClientGetUserStatsResponse, timeout=5) + +def generate_achievement_stats(client, game_id, output_directory): + steam_id_list = TOP_OWNER_IDS + [client.steam_id] + for x in steam_id_list: + out = get_stats_schema(client, game_id, x) + if out is not None: + if len(out.body.schema) > 0: + with open('UserGameStatsSchema_{}.bin'.format(appid), 'wb') as f: + f.write(out.body.schema) + achievements, stats = achievements_gen.generate_stats_achievements(out.body.schema, output_directory) + return + else: + print("no schema", out) + +out_dir = os.path.join("{}".format( "{}_output".format(appid)), "steam_settings") + +if not os.path.exists(out_dir): + os.makedirs(out_dir) + +print("outputting config to", out_dir) + +generate_achievement_stats(client, appid, out_dir) +with open(os.path.join(out_dir, "steam_appid.txt"), 'w') as f: + f.write(str(appid)) + diff --git a/scripts/generate_emu_config_README.txt b/scripts/generate_emu_config_README.txt new file mode 100644 index 0000000..4b59aa9 --- /dev/null +++ b/scripts/generate_emu_config_README.txt @@ -0,0 +1,22 @@ +Install python then run this in a terminal/powershell to install the dependencies: pip install -U steam[client] + +This script depends on python files that are in subfolders so make sure to download the whole folder not just the script. + +Using the script: python generate_emu_config.py appid + +The appid is the number in the steam url. + +The first time you run the script it will ask you for your steam username, password and email code. +The email code will only be asked the first time and the sentry will be saved to the login_temp folder. + +This script will not save your username/password anywhere. If you don't want to always type it you must +open up the script in a text editor and change: + +USERNAME = "" +PASSWORD = "" + +To: + +USERNAME = "your_username" +PASSWORD = "your_password" +