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);
}
}