diff --git a/.idea/encodings.xml b/.idea/encodings.xml deleted file mode 100644 index 62e2e30..0000000 --- a/.idea/encodings.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/src/koalageddon/koalageddon.cpp b/src/koalageddon/koalageddon.cpp index 2f347e1..3067d5d 100644 --- a/src/koalageddon/koalageddon.cpp +++ b/src/koalageddon/koalageddon.cpp @@ -2,6 +2,8 @@ #include #include #include +#include +#include namespace koalageddon { KoalageddonConfig config = {}; @@ -10,16 +12,41 @@ namespace koalageddon { * @return A string representing the source of the config. */ String init_koalageddon_config() { + if (!smoke_api::config.koalageddon_config.is_null()) { + try { + // First try to read a local config override + config = smoke_api::config.koalageddon_config.get(); + + return "local config override"; + } catch (const Exception& ex) { + logger->error("Local koalageddon config parse exception: {}", ex.what()); + } + } + + const auto config_cache_path = smoke_api::self_directory / "SmokeAPI.koalageddon.json"; try { - // First try to read a local config override - config = smoke_api::config.koalageddon_config.get(); - return "local config override"; + // Then try to fetch config from GitHub + const String url = "https://raw.githubusercontent.com/acidicoala/public-entitlements/main/koalageddon/v2/steam.json"; + config = http_client::fetch_json(url).get(); + + io::write_file(config_cache_path, nlohmann::json(config).dump(2)); + + return "GitHub repository"; } catch (const Exception& ex) { - logger->debug("Local koalageddon config parse exception: {}", ex.what()); + logger->error("Remote koalageddon config parse exception: {}", ex.what()); } - // TODO: Remote source with local cache + try { + // Then try to get a cached copy of a previously fetched config + const auto cache = io::read_file(config_cache_path); + + config = nlohmann::json::parse(cache).get(); + + return "Local cache"; + } catch (const Exception& ex) { + logger->error("Cached koalageddon config parse exception: {}", ex.what()); + } // Finally, fallback on the default config return "default config bundled in the binary"; @@ -29,21 +56,30 @@ namespace koalageddon { #ifndef _WIN64 logger->info("🐨 Detected Koalageddon mode 💥"); - const auto kg_config_source = init_koalageddon_config(); - logger->info("Loaded Koalageddon config from the {}", kg_config_source); + std::thread([]() { + const auto kg_config_source = init_koalageddon_config(); + logger->info("Loaded Koalageddon config from the {}", kg_config_source); + }).detach(); dll_monitor::init({VSTDLIB_DLL, STEAMCLIENT_DLL}, [](const HMODULE& library, const String& name) { try { smoke_api::original_library = library; + static auto init_count = 0; if (name == VSTDLIB_DLL) { // VStdLib DLL handles Family Sharing functions if (smoke_api::config.unlock_family_sharing) { init_vstdlib_hooks(); } + init_count++; } else if (name == STEAMCLIENT_DLL) { // SteamClient DLL handles unlocking functions init_steamclient_hooks(); + init_count++; + } + + if (init_count == 2) { + dll_monitor::shutdown(); } } catch (const Exception& ex) { logger->error("Koalageddon mode dll monitor init error. Module: '{}', Message: {}", name, ex.what()); diff --git a/src/koalageddon/steamclient.cpp b/src/koalageddon/steamclient.cpp index 839de90..10555c1 100644 --- a/src/koalageddon/steamclient.cpp +++ b/src/koalageddon/steamclient.cpp @@ -255,6 +255,7 @@ namespace koalageddon { DETOUR(SteamClient_Interface_Interceptor, interface_interceptor_address) } } + } /** diff --git a/src/smoke_api/smoke_api.cpp b/src/smoke_api/smoke_api.cpp index 28c0fd5..118cddf 100644 --- a/src/smoke_api/smoke_api.cpp +++ b/src/smoke_api/smoke_api.cpp @@ -42,7 +42,7 @@ namespace smoke_api { DETOUR_ORIGINAL(CreateInterface) }); - // Hooking steam_api has show itself to be less desirable than steamclient + // Hooking steam_api has shown itself to be less desirable than steamclient // for the reasons outlined below: // // Calling original in flat functions will actually call the hooked functions diff --git a/src/steam_api_exports/steam_api_unversioned.cpp b/src/steam_api_exports/steam_api_unversioned.cpp index 006b6ab..524f768 100644 --- a/src/steam_api_exports/steam_api_unversioned.cpp +++ b/src/steam_api_exports/steam_api_unversioned.cpp @@ -70,7 +70,6 @@ DLL_EXPORT(void*) SteamUser() { }); } - DLL_EXPORT(void*) SteamInventory() { static auto version = get_versioned_interface(STEAM_INVENTORY, "001"); diff --git a/src/steam_impl/steam_client.cpp b/src/steam_impl/steam_client.cpp index b5b447d..42ff085 100644 --- a/src/steam_impl/steam_client.cpp +++ b/src/steam_impl/steam_client.cpp @@ -1,7 +1,4 @@ -#include -#include - -using namespace smoke_api; +#include namespace steam_client { diff --git a/src/steam_impl/steam_client.hpp b/src/steam_impl/steam_client.hpp index df7a977..a1a1c3a 100644 --- a/src/steam_impl/steam_client.hpp +++ b/src/steam_impl/steam_client.hpp @@ -1,9 +1,8 @@ #include #include -using namespace smoke_api; - namespace steam_client { + using namespace smoke_api; void* GetGenericInterface( const String& function_name, diff --git a/src/steam_impl/steam_inventory.cpp b/src/steam_impl/steam_inventory.cpp index c7e0509..67840a0 100644 --- a/src/steam_impl/steam_inventory.cpp +++ b/src/steam_impl/steam_inventory.cpp @@ -210,7 +210,7 @@ namespace steam_inventory { if (pItemDefIDs) { // Definitions were copied for (int i = 0; i < *punItemDefIDsArraySize; i++) { const auto& def = pItemDefIDs[i]; - logger->debug(" Index: {}, ID: {}", i, def); + logger->debug(" Index: {}, ID: {}", i, def); } }