fix generate_emu_config login, thanks to Sak32009

replace 'client_id' error with simple 'wrong username and / or password' message, asking for correct username and / or password
add pcgw_page script to download PCGamingWiki page (source code only), not yet enabled in main script
generate steam_emu.ini for CODEX and RUNE versions, update gse_generate_interfaces
This commit is contained in:
alex47exe 2024-10-14 00:24:49 +01:00
parent 9c18c68ce9
commit 3ccce93a74
18 changed files with 541 additions and 157 deletions

View File

@ -106,10 +106,20 @@ FileWrite($hFile,$sNew)
FileClose($hFile)
$interfaces_ini = @ScriptDir & '\steam_settings\steam_interfaces.ini'
$codex_ini = @ScriptDir & '\steam_misc\extra_cdx\steam_emu.ini'
If FileExists($codex_ini) Then
$codex_ini = @ScriptDir & '\steam_misc\extra_cdx\CODEX\steam_emu.ini'
_AddInterfaces($codex_ini)
$rune_ini = @ScriptDir & '\steam_misc\extra_cdx\RUNE\steam_emu.ini'
_AddInterfaces($rune_ini)
FileDelete($interfaces_ini)
Func _AddInterfaces($crack_ini)
If FileExists($crack_ini) Then
_ReplaceStringInFile($interfaces_ini, 'SteamAppDisableUpdate', 'SteamAppDisableUpdate=SteamAppDisableUpdate', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMAPPLIST_', 'SteamAppList=STEAMAPPLIST_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMAPPS_', 'SteamApps=STEAMAPPS_', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMAPPTICKET_', 'SteamAppTicket=STEAMAPPTICKET_', 1, 1)
@ -156,45 +166,46 @@ If FileExists($codex_ini) Then
_ReplaceStringInFile($interfaces_ini, 'SteamUtils', 'SteamUtils=SteamUtils', 1, 1)
_ReplaceStringInFile($interfaces_ini, 'STEAMVIDEO_', 'SteamVideo=STEAMVIDEO_', 1, 1)
IniWrite($codex_ini, 'Interfaces', 'SteamAppList', IniRead($interfaces_ini, 'steam_interfaces', 'SteamAppList', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamApps', IniRead($interfaces_ini, 'steam_interfaces', 'SteamApps', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamAppTicket', IniRead($interfaces_ini, 'steam_interfaces', 'SteamAppTicket', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamClient', IniRead($interfaces_ini, 'steam_interfaces', 'SteamClient', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamController', IniRead($interfaces_ini, 'steam_interfaces', 'SteamController', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamFriends', IniRead($interfaces_ini, 'steam_interfaces', 'SteamFriends', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamGameCoordinator', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameCoordinator', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamGameServerStats', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameServerStats', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamGameServer', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameServer', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamGameStats', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameStats', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamHTMLSurface', IniRead($interfaces_ini, 'steam_interfaces', 'SteamHTMLSurface', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamHTTP', IniRead($interfaces_ini, 'steam_interfaces', 'SteamHTTP', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamInput', IniRead($interfaces_ini, 'steam_interfaces', 'SteamInput', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamInventory', IniRead($interfaces_ini, 'steam_interfaces', 'SteamInventory', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMasterServerUpdater', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMasterServerUpdater', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMatchGameSearch', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMatchGameSearch', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMatchMakingServers', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMatchMakingServers', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMatchMaking', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMatchMaking', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMusic', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMusic', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamMusicRemote', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMusicRemote', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworkingMessages', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingMessages', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworkingSocketsSerialized', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingSocketsSerialized', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworkingSockets', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingSockets', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworkingUtils', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingUtils', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamNetworking', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworking', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamParentalSettings', IniRead($interfaces_ini, 'steam_interfaces', 'SteamParentalSettings', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamParties', IniRead($interfaces_ini, 'steam_interfaces', 'SteamParties', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamRemotePlay', IniRead($interfaces_ini, 'steam_interfaces', 'SteamRemotePlay', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamRemoteStorage', IniRead($interfaces_ini, 'steam_interfaces', 'SteamRemoteStorage', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamScreenshots', IniRead($interfaces_ini, 'steam_interfaces', 'SteamScreenshots', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamTimeline', IniRead($interfaces_ini, 'steam_interfaces', 'SteamTimeline', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamTV', IniRead($interfaces_ini, 'steam_interfaces', 'SteamTV', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUGC', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUGC', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUnifiedMessages', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUnifiedMessages', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUserStats', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUserStats', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUser', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUser', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamUtils', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUtils', ''))
IniWrite($codex_ini, 'Interfaces', 'SteamVideo', IniRead($interfaces_ini, 'steam_interfaces', 'SteamVideo', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamAppDisableUpdate', IniRead($interfaces_ini, 'steam_interfaces', 'SteamAppDisableUpdate', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamAppList', IniRead($interfaces_ini, 'steam_interfaces', 'SteamAppList', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamApps', IniRead($interfaces_ini, 'steam_interfaces', 'SteamApps', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamAppTicket', IniRead($interfaces_ini, 'steam_interfaces', 'SteamAppTicket', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamClient', IniRead($interfaces_ini, 'steam_interfaces', 'SteamClient', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamController', IniRead($interfaces_ini, 'steam_interfaces', 'SteamController', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamFriends', IniRead($interfaces_ini, 'steam_interfaces', 'SteamFriends', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamGameCoordinator', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameCoordinator', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamGameServerStats', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameServerStats', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamGameServer', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameServer', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamGameStats', IniRead($interfaces_ini, 'steam_interfaces', 'SteamGameStats', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamHTMLSurface', IniRead($interfaces_ini, 'steam_interfaces', 'SteamHTMLSurface', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamHTTP', IniRead($interfaces_ini, 'steam_interfaces', 'SteamHTTP', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamInput', IniRead($interfaces_ini, 'steam_interfaces', 'SteamInput', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamInventory', IniRead($interfaces_ini, 'steam_interfaces', 'SteamInventory', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamMasterServerUpdater', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMasterServerUpdater', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamMatchGameSearch', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMatchGameSearch', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamMatchMakingServers', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMatchMakingServers', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamMatchMaking', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMatchMaking', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamMusic', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMusic', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamMusicRemote', IniRead($interfaces_ini, 'steam_interfaces', 'SteamMusicRemote', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamNetworkingMessages', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingMessages', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamNetworkingSocketsSerialized', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingSocketsSerialized', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamNetworkingSockets', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingSockets', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamNetworkingUtils', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworkingUtils', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamNetworking', IniRead($interfaces_ini, 'steam_interfaces', 'SteamNetworking', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamParentalSettings', IniRead($interfaces_ini, 'steam_interfaces', 'SteamParentalSettings', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamParties', IniRead($interfaces_ini, 'steam_interfaces', 'SteamParties', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamRemotePlay', IniRead($interfaces_ini, 'steam_interfaces', 'SteamRemotePlay', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamRemoteStorage', IniRead($interfaces_ini, 'steam_interfaces', 'SteamRemoteStorage', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamScreenshots', IniRead($interfaces_ini, 'steam_interfaces', 'SteamScreenshots', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamTimeline', IniRead($interfaces_ini, 'steam_interfaces', 'SteamTimeline', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamTV', IniRead($interfaces_ini, 'steam_interfaces', 'SteamTV', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamUGC', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUGC', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamUnifiedMessages', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUnifiedMessages', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamUserStats', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUserStats', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamUser', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUser', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamUtils', IniRead($interfaces_ini, 'steam_interfaces', 'SteamUtils', ''))
IniWrite($crack_ini, 'Interfaces', 'SteamVideo', IniRead($interfaces_ini, 'steam_interfaces', 'SteamVideo', ''))
EndIf
EndIf
FileDelete($interfaces_ini)
EndFunc

View File

@ -1,5 +1,5 @@
@echo off
pip install -U steam[client]
pip install -U git+https://github.com/Sak32009/steam_py_fork.git@fix-cm-servers
pip install pyinstaller
pip install requests
pip install certifi

View File

@ -1,3 +1,3 @@
@echo off
set /p arg="Generate Emu Config for Steam AppId: "
python -W ignore::DeprecationWarning generate_emu_config.py -img -scr -vids_low -vids_max -scx -cdx -acw -clr -anon %arg%
python -W ignore::DeprecationWarning generate_emu_config.py -img -scr -vids_low -vids_max -scx -cdx -rne -acw -clr -anon %arg%

View File

@ -1,3 +1,3 @@
@echo off
set /p arg="Generate Emu Config for Steam AppId: "
python -W ignore::DeprecationWarning generate_emu_config.py -img -scr -vids_low -vids_max -scx -cdx -acw -clr %arg%
python -W ignore::DeprecationWarning generate_emu_config.py -img -scr -vids_low -vids_max -scx -cdx -rne -acw -clr %arg%

View File

@ -1,3 +1,3 @@
@echo off
set /p arg="Generate Emu Config for Steam AppId: "
python -W ignore::DeprecationWarning generate_emu_config.py -cdx -acw -clr %arg%
python -W ignore::DeprecationWarning generate_emu_config.py -cdx -rne -acw -clr %arg%

View File

@ -3,7 +3,7 @@ from steam_id_converter.SteamID import (
SteamID
)
__codex_ini = '''
__codex_ini = r'''###
### ÜÛÛÛÛÛ Ü
### °ÛÛÛÛ ßÛÛ Û² ßßßÛÛÛÛÛÛÛÜ ßßßßßÛÛ²ÛÛÜ Ü²ÛÛÛß
### ±ÛÛÛß ±ÛÛß ßßÛÛÛÛ° ßÛÛÛ ±ÛÛÛß
@ -61,6 +61,7 @@ SelfProtect=0
###
### Steam Client API interface versions
###
SteamAppDisableUpdate=
SteamAppList=
SteamApps=
SteamAppTicket=
@ -136,11 +137,11 @@ def generate_cdx_ini(
dlc: list[tuple[int, str]],
achs: list[dict]) -> None:
if not os.path.exists(os.path.join(base_out_dir, "steam_misc\\extra_cdx")):
os.makedirs(os.path.join(base_out_dir, "steam_misc\\extra_cdx"))
if not os.path.exists(os.path.join(base_out_dir, "steam_misc\\extra_crk\\CODEX")):
os.makedirs(os.path.join(base_out_dir, "steam_misc\\extra_crk\\CODEX"))
codex_ini_path = os.path.join(base_out_dir, "steam_misc\\extra_cdx\\steam_emu.ini")
print(f"[ ] Generating RUNE / CODEX / PLAZA config --- writing 'steam_emu.ini'")
codex_ini_path = os.path.join(base_out_dir, "steam_misc\\extra_crk\\CODEX\\steam_emu.ini")
print(f"[ ] Generating CODEX config --- writing 'steam_emu.ini'")
print(f"[ ] __ if to be used, make sure it has the correct interface versions")
dlc_list = [f"{d[0]}={d[1]}" for d in dlc]

View File

@ -0,0 +1,23 @@
import os
import urllib.request
# download PCGamingWiki page source code only
# to be parsed for additional game info, e.g. config and saved games files locations, extended developer and publisher info, etc
# not yet implemented in main script
def download_pcgw(base_out_dir : str, appid : int):
pcgw_link = f"https://www.pcgamingwiki.com/api/appid.php?appid={appid}"
if not os.path.exists(os.path.join(base_out_dir, 'steam_misc\\app_info')):
os.makedirs(os.path.join(base_out_dir, 'steam_misc\\app_info'))
with urllib.request.urlopen(pcgw_link) as f:
html = f.read().decode('utf-8')
file = os.path.join(base_out_dir, f"steam_misc\\app_info\\pcgw.tmp")
with open(file, 'w', encoding='utf-8') as f:
f.write(html)
if os.path.isfile(os.path.join(base_out_dir, 'steam_misc\\app_info\\pcgw.tmp')):
with open(os.path.join(base_out_dir, 'steam_misc\\app_info\\pcgw.tmp'), 'r', encoding='utf-8') as app_pcgw:
app_pcgw_line = app_pcgw.readlines()

View File

@ -0,0 +1,172 @@
import os
from steam_id_converter.SteamID import (
SteamID
)
__rune_ini = r'''###
### \ /
### _ _ _ _ \\__//
### ____ ._/______:_//\//_/____ _ //___ ./_ __//_____:_\\//
### :\ //_/ _ . /_/ / /_/__:_//_/ /\ /\__/_ _ . /\\\
### \\/// ____/___./ / / / / / / \X_/ //___/ /_\_
### . \/// _______ _/_ /_/ _/_/ \\/ // /_\_\ /.
### z_/ _/\ _/ // / // / \ /// __// :\//
### | / _ / /\// /__// __//_ _ /\ /X/ /__/ |/\/2
### --+-_=\__/ / / / \_____:__/ //\____// /\ /\/__:_______=_-+--\4
### |-\__\- / /________\____.__\/- -\--/_\/_______\--.\________\|___\
### = dS!\/- -\_______\ =-RUNE- -== \/ ==-\______\-= ======== --\__\
###
###
### Game data is stored at %SystemDrive%\Users\Public\Documents\Steam\RUNE\{rne_id}
###
[Settings]
###
### Game identifier (http://store.steampowered.com/app/{rne_id})
###
AppId={rne_id}
###
### Steam Account ID, set it to 0 to get a random Account ID
###
AccountId={rne_accountid}
###
### Name of the current player
###
UserName={rne_username}
###
### Language that will be used in the game
###
Language={rne_language}
###
### Enable lobby mode
###
LobbyEnabled=1
###
### Lobby port to listen on
###
#LobbyPort=31183
###
### Enable/Disable Steam overlay
###
Overlays=1
###
### Set Steam connection to offline mode
###
Offline=0
###
BlockConnection=0
###
[Interfaces]
###
### Steam Client API interface versions
###
SteamAppDisableUpdate=
SteamAppList=
SteamApps=
SteamAppTicket=
SteamClient=
SteamController=
SteamFriends=
SteamGameCoordinator=
SteamGameServerStats=
SteamGameServer=
SteamGameStats=
SteamHTMLSurface=
SteamHTTP=
SteamInput=
SteamInventory=
SteamMasterServerUpdater=
SteamMatchGameSearch=
SteamMatchMakingServers=
SteamMatchMaking=
SteamMusic=
SteamMusicRemote=
SteamNetworkingMessages=
SteamNetworkingSocketsSerialized=
SteamNetworkingSockets=
SteamNetworkingUtils=
SteamNetworking=
SteamParentalSettings=
SteamParties=
SteamRemotePlay=
SteamRemoteStorage=
SteamScreenshots=
SteamTimeline=
SteamTV=
SteamUGC=
SteamUnifiedMessages=
SteamUserStats=
SteamUser=
SteamUtils=
SteamVideo=
###
[DLC]
###
### Automatically unlock all DLCs
###
DLCUnlockall=0
###
### Identifiers for DLCs
###
#ID=Name
{rne_dlc_list}
###
[Crack]
7f508eddb6d6c0b1=3681a9beddbae875
'''
def generate_rne_ini(
base_out_dir : str,
appid: int,
accountid: int,
username: str,
language: str,
dlc: list[tuple[int, str]],
achs: list[dict]) -> None:
if not os.path.exists(os.path.join(base_out_dir, "steam_misc\\extra_crk\\RUNE")):
os.makedirs(os.path.join(base_out_dir, "steam_misc\\extra_crk\\RUNE"))
rune_ini_path = os.path.join(base_out_dir, "steam_misc\\extra_crk\\RUNE\\steam_emu.ini")
print(f"[ ] Generating RUNE config --- writing 'steam_emu.ini'")
print(f"[ ] __ if to be used, make sure it has the correct interface versions")
dlc_list = [f"{d[0]}={d[1]}" for d in dlc]
achs_list = []
for ach in achs:
icon = ach.get("icon", None)
if icon:
icon = f"steam_settings\\img\\{icon}"
else:
icon = 'steam_settings\\img\\steam_default_icon_unlocked.jpg'
icon_gray = ach.get("icon_gray", None)
if icon_gray:
icon_gray = f"steam_settings\\img\\{icon_gray}"
else:
icon_gray = 'steam_settings\\img\\steam_default_icon_locked.jpg'
icongray = ach.get("icongray", None)
if icongray:
icon_gray = f"steam_settings\\img\\{icongray}"
achs_list.append(f'{ach["name"]} Achieved={icon}') # unlocked
achs_list.append(f'{ach["name"]} Unachieved={icon_gray}') # locked
steam_id = SteamID(accountid)
formatted_ini = __rune_ini.format(
rne_id = appid,
rne_username = username,
rne_accountid = steam_id.get_steam32_id(),
rne_language = language,
rne_dlc_list = "\n".join(dlc_list),
rne_ach_list = "\n".join(achs_list)
)
with open(rune_ini_path, "wt", encoding='utf-8') as f:
f.writelines(formatted_ini)

View File

@ -7,13 +7,13 @@ ALLOWED_CHARS = set([
'=', '+', '[', '{',
']', '}', ';', '\'',
',', '.', ' ', '\t',
'®', '',
#'®', '™',
])
def create_safe_name(app_name : str):
safe_name = ''.join(c for c in f'{app_name}' if c.isalnum() or c in ALLOWED_CHARS)\
.rstrip()\
.rstrip('.')\
.replace('\t', ' ')
safe_name = re.sub('\s\s+', ' ', safe_name)
.replace(r'\t', ' ')
safe_name = re.sub(r'\s\s+', ' ', safe_name)
return safe_name

View File

@ -2,10 +2,11 @@ import pathlib
import time
from stats_schema_achievement_gen import achievements_gen
from external_components import (
ach_watcher_gen, cdx_gen, app_images, app_details, safe_name, scx_gen, top_own
ach_watcher_gen, cdx_gen, rne_gen, app_images, app_details, safe_name, scx_gen, pcgw_page, top_own
)
from controller_config_generator import parse_controller_vdf
from steam.client import SteamClient
from steam.webauth import WebAuth
from steam.enums.common import EResult
from steam.enums.emsg import EMsg
from steam.core.msg import MsgProto
@ -580,7 +581,7 @@ def help():
exe_name = os.path.basename(sys.argv[0])
print(f"\nUsage: {exe_name} [Switches] appid appid appid ... ")
print(f" Example: {exe_name} 421050 420 480")
print(f" Example: {exe_name} -img -scr -vids_max -scx -cdx -acw -clr 421050 480")
print(f" Example: {exe_name} -img -scr -vids_max -scx -cdx -rne -acw -clr 421050 480")
print("\nSwitches:")
print(" -img: download art images for each app: Steam generated background, icon, logo, etc...")
print(" -scr: download screenshots for each app if they're available")
@ -588,6 +589,7 @@ def help():
print(" -vids_max: download max quality videos for each app if they're available")
print(" -scx: download market images for each app: Steam trading cards, badges, backgrounds, etc...")
print(" -cdx: generate .ini file for CODEX Steam emu for each app")
print(" -rne: generate .ini file for RUNE Steam emu for each app")
print(" -acw: generate schemas of all possible languages for Achievement Watcher")
print(" -skip_ach: skip downloading & generating achievements and their images")
print(" -skip_con: skip downloading & generating controller configuration files")
@ -611,7 +613,6 @@ def main():
PASSWORD = ""
DOWNLOAD_SCREENSHOTS = False
DOWNLOAD_THUMBNAILS = True
DOWNLOAD_VIDEOS = False
DOWNLOAD_LOW = False
DOWNLOAD_MAX = False
@ -619,6 +620,7 @@ def main():
DOWNLOAD_SCX = False
SAVE_APP_NAME = False
GENERATE_CODEX_INI = False
GENERATE_RUNE_INI = False
GENERATE_ACHIEVEMENT_WATCHER_SCHEMAS = False
CLEANUP_BEFORE_GENERATING = False
ANON_LOGIN = False
@ -629,7 +631,6 @@ def main():
DEFAULT_PRESET = True
DEFAULT_PRESET_NO = 1
prompt_for_unavailable = True
if len(sys.argv) < 2:
help()
@ -655,6 +656,8 @@ def main():
DOWNLOAD_SCX = True
elif f'{appid}'.lower() == '-cdx':
GENERATE_CODEX_INI = True
elif f'{appid}'.lower() == '-rne':
GENERATE_RUNE_INI = True
elif f'{appid}'.lower() == '-acw':
GENERATE_ACHIEVEMENT_WATCHER_SCHEMAS = True
elif f'{appid}'.lower() == '-clr':
@ -695,10 +698,10 @@ def main():
sys.exit(1)
client = SteamClient()
login_tmp_folder = os.path.join(get_exe_dir(RELATIVE_DIR), "login_temp")
if not os.path.exists(login_tmp_folder):
os.makedirs(login_tmp_folder)
client.set_credential_location(login_tmp_folder)
# login_tmp_folder = os.path.join(get_exe_dir(RELATIVE_DIR), "login_temp")
# if not os.path.exists(login_tmp_folder):
# os.makedirs(login_tmp_folder)
# client.set_credential_location(login_tmp_folder)
# first read the 'my_login.txt' file
my_login_file = os.path.join(get_exe_dir(RELATIVE_DIR), "my_login.txt")
@ -727,44 +730,14 @@ def main():
time.sleep(1000)
result = client.anonymous_login()
trials -= 1
elif (len(USERNAME) == 0 or len(PASSWORD) == 0):
client.cli_login()
else:
result = client.login(USERNAME, password=PASSWORD)
auth_code, two_factor_code = None, None
while result in (
EResult.AccountLogonDenied, EResult.InvalidLoginAuthCode,
EResult.AccountLoginDeniedNeedTwoFactor, EResult.TwoFactorCodeMismatch,
EResult.TryAnotherCM, EResult.ServiceUnavailable,
EResult.InvalidPassword,
):
if result == EResult.InvalidPassword:
print("__ Invalid password. The password you set is wrong.")
exit(1)
elif result in (EResult.AccountLogonDenied, EResult.InvalidLoginAuthCode):
prompt = ("__ Enter email code: " if result == EResult.AccountLogonDenied else
"__ Incorrect code. Enter email code: ")
auth_code, two_factor_code = input(prompt), None
elif result in (EResult.AccountLoginDeniedNeedTwoFactor, EResult.TwoFactorCodeMismatch):
prompt = ("__ Enter 2FA code: " if result == EResult.AccountLoginDeniedNeedTwoFactor else
"__ Incorrect code. Enter 2FA code: ")
auth_code, two_factor_code = None, input(prompt)
elif result in (EResult.TryAnotherCM, EResult.ServiceUnavailable):
if prompt_for_unavailable and result == EResult.ServiceUnavailable:
while True:
answer = input("__ Steam is down. Keep retrying? [y/n]: ").lower()
if answer in 'yn': break
prompt_for_unavailable = False
if answer == 'n': break
client.reconnect(maxdelay=15)
result = client.login(USERNAME, PASSWORD, None, auth_code, two_factor_code)
webauth = WebAuth(USERNAME, PASSWORD)
if (len(USERNAME) > 0 and len(PASSWORD) > 0):
webauth.cli_login(USERNAME, PASSWORD)
else:
webauth_prompt_username = input("Enter Steam username: ")
webauth.cli_login(webauth_prompt_username)
client.login(webauth.username, access_token=webauth.refresh_token)
# generate 'top_owners_ids.txt' if 'top_owners_ids.html' exists
top_own.top_owners()
@ -1345,6 +1318,16 @@ def main():
dlc_config_list,
achievements)
if GENERATE_RUNE_INI:
rne_gen.generate_rne_ini(
base_out_dir,
appid,
cfg_user_account_steamid,
cfg_user_account_name,
cfg_user_language,
dlc_config_list,
achievements)
if DOWNLOAD_SCX:
scx_gen.download_scx(base_out_dir, appid)
@ -1352,15 +1335,38 @@ def main():
print(f"*** FINISHED config for app id {appid} ***")
print(" ")
def _tracebackPrint(_errorValue):
print("Unexpected error:")
print(_errorValue)
print("-----------------------")
for line in traceback.format_exception(_errorValue):
print(line)
print("-----------------------")
if __name__ == "__main__":
try:
main()
except Exception as e:
print("Unexpected error:")
print(e)
print("-----------------------")
for line in traceback.format_exception(e):
print(line)
print("-----------------------")
if 'client_id' in e.args:
print("Wrong Steam username and / or password. Please try again!")
try:
main()
except Exception as e:
if 'client_id' in e.args:
print("Wrong Steam username and / or password. Please try again!")
try:
main()
except Exception as e:
if 'client_id' in e.args:
print("Wrong Steam username and / or password. Please try again!")
sys.exit(1)
else:
_tracebackPrint(e)
sys.exit(1)
else:
_tracebackPrint(e)
sys.exit(1)
else:
_tracebackPrint(e)
sys.exit(1)

View File

@ -1,3 +1,3 @@
@echo off
set /p arg="Generate Emu Config for Steam AppId: "
generate_emu_config.exe -cdx -acw -clr -anon %arg%
generate_emu_config.exe -cdx -rne -acw -clr -anon %arg%

View File

@ -0,0 +1,3 @@
@echo off
set /p arg="Generate Emu Config for Steam AppId: "
generate_emu_config.exe -img -scr -vids_low -vids_max -scx -cdx -rne -acw -clr %arg%

View File

@ -1,3 +1,3 @@
@echo off
set /p arg="Generate Emu Config for Steam AppId: "
generate_emu_config.exe -cdx -acw -clr %arg%
generate_emu_config.exe -cdx -rne -acw -clr %arg%

View File

@ -0,0 +1,167 @@
[General]
# 0 - Show Advanced Run window
# 1 - Skip Advanced Run window
AutoRun=1
#
# 1 - Run .EXE File
# 2 - ShellExecute - Open the specified file, folder or URL with the default program
# 3 - Command Prompt - Execute command or batch file of Windows Command Prompt (.BAT, .CMD)
# 4 - PowerShell Command - Execute the specified PowerShell command
# 5 - PowerShell Script File - Run the specified PowerShell script (.PS1)
RunMode=3
# open, edit, explore, print - only for RunMode 2
ShellExecuteAction=open
# Program to Run - only for RunMode 1. For RunMode 2, 3, 4, 5 use CommandLine
EXEFilename=
# Command-line arguments, file to ShellExecute, Command Prompt / PowerShell file to run or Command Prompt / PowerShell command string to execute
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandLine=.\bat\generate_emu_config.exe_test.bat & pause
# Start Directory - make sure any paths in CommandLine are relative to the start directory
StartDirectory=.\
# AdvancedRun process will wait in the background until the process executed by AdvancedRun is terminated, 0 - disabled, 1 -enabled
WaitProcess=1
# Process Priority Class:
# 64 - low, 32 - normal, 128 - high, 256 - realtime, 16384 - below normal, 32768 - above normal
PriorityClass=32
# Command Window Mode - only for RunMode 3, 4, 5
# 1 - Leave window opened after executing commands (same as 'CMD /K'), 2 - Close window after executing commands (same as 'CMD /C') - only for RunMode 3, 4, 5
# For RunMode 3, DO NOTE that if your .BAT file ends with 'pause' or you add '& pause' at the end of CommandLine, CommandWindowMode 2 will have no effect - CMD window will show 'Press any key to continue . . .'
CommandWindowMode=2
# Main window state
# 0 - hidden, 1 - normal, 2 - minimized, 3 - maximized
WindowState=1
# Main window position
UseWindowPosition=0
WindowPosition=20,20
# Main window size
UseWindowSize=0
WindowSize=640,400
#
# 1 - Current User - Allow UAC Elevation
# 2 - Current User - Without UAC Elevation
# 3 - Administrator (Force UAC Elevation)
# 4 - SYSTEM User
# 5 - User of the selected process
# 6 - Child of the selected process (Using code injection)
# 7 - Specified username and password
# 8 - TrustedInstaller
# 9 - Another logged-in user
# 10 - Network Service
# 11 - Local Service
RunAs=1
# Selected process name - only for RunAs 5, 6
RunAsProcessName=
# Specified username - only for RunAs 7, 9 (password can't be set in this .CFG file, so it's better to run with /RunAsUserName "username" /RunAsPassword "password" parameters instead)
RunAsUserName=
# Specified domain - only for RunAs 7
RunAsDomain=
#
# Run on remote computer with temporary Windows service, 0 - disabled, 1 - enabled
RunFromService=0
# Remote computer name - only for RunFromService 1
ComputerName=
#
# Use search path to find the program location if the full path is not specified, 0 - disabled, 1 - enabled
UseSearchPath=0
# Parse the environment variables inside the command-line string before passing it to the program
ParseVarCommandLine=0
#
# Use process affinity mask, 0 - disabled, 1 - enabled
UseAffinityMask=0
# Set process affinity mask (space-delimited list) - e.g. '0 1 2 3' process runs only on first 4 cores
AffinityMask=0 1
#
# 0 - Compatibility mode disabled
# 1 - Windows 95
# 2 - Windows 98
# 3 - Windows NT 4.0 SP5
# 4 - Windows 2000
# 5 - Windows XP SP2
# 6 - Windows XP SP3
# 7 - Server 2003 SP1
# 8 - Server 2008 SP1
# 9 - Vista
# 10 - Vista SP1
# 11 - Vista SP2
# 12 - Windows 7
# 13 - Windows 8
OSCompatMode=0
# Use 1 to disable visual themes
CompatDisableVisualThemes=0
# Use 1 to disable desktop composition
CompatDisableDesktopComp=0
# Use 1 to run in 640 x 480 resolution
Compat640480=0
# Use 1 to disable full screen optimizations
CompatDisableFullScreenOpt=0
# 0 - Reduced colors disabled
# 1 - 8-bit, 256 colors
# 2 - 16-bit, 65536 colors
CompatColors=0
# 0 - High DPI scaling override disabled
# 1 - Application
# 2 - System
# 3 - System Enhanced
CompatHighDPI=0
# 1 - Use current system environment variables without any change
# 2 - Merge the following environment variables with the system variables
# 3 - Use only the following environment variables (ignore the system variables)
EnvironmentVariablesMode=1
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF D5 03 00 00 4B 04 00 00 A2 08 00 00 FC 07 00 00
[EnvironmentVariables]
# Advanced Run window position - only for AutoRun 0
WinPos=2C 00 00 00 00 00 00 00 01 00 00 00 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 78 03 00 00 FC 02 00 00 45 08 00 00 AD 06 00 00
# Number of environment variables to merge - only for EnvironmentVariablesMode 2, 3
Lines=0
# Merge the following environment variables, one by one on each line
Line1=
Line2=
Line3=
Line4=
Line5=
Line6=
Line7=
Line8=
Line9=

View File

@ -1,4 +1,4 @@
steam[client]
steam[client] @ git+https://github.com/Sak32009/steam_py_fork.git@fix-cm-servers
pyinstaller
requests
certifi

View File

@ -7,8 +7,9 @@
// these are defined in dll.cpp at the top like this:
// static char old_xxx[128] = ...
const static std::vector<std::string> interface_patterns = {
R"(STEAMAPPS_INTERFACE_VERSION\d+)",
R"(SteamAppDisableUpdate\d+)",
R"(STEAMAPPLIST_INTERFACE_VERSION\d+)",
R"(STEAMAPPS_INTERFACE_VERSION\d+)",
R"(STEAMAPPTICKET_INTERFACE_VERSION\d+)",
R"(SteamClient\d+)",
R"(STEAMCONTROLLER_INTERFACE_VERSION)",