From f57d3491e45a21a0d066a4be2c2975d8c83bb268 Mon Sep 17 00:00:00 2001
From: Janis <janis@nirgendwo.xyz>
Date: Wed, 21 Jun 2023 18:56:57 +0200
Subject: [PATCH] old sdk generator dll

---
 sdk-generator/Cargo.toml | 20 +++++++++
 sdk-generator/build.rs   | 11 +++++
 sdk-generator/proxy.def  | 20 +++++++++
 sdk-generator/src/lib.rs | 94 +++++++++++++++++++++++++++++++++++-----
 4 files changed, 135 insertions(+), 10 deletions(-)
 create mode 100644 sdk-generator/build.rs
 create mode 100644 sdk-generator/proxy.def

diff --git a/sdk-generator/Cargo.toml b/sdk-generator/Cargo.toml
index 911d7ed..60180fb 100644
--- a/sdk-generator/Cargo.toml
+++ b/sdk-generator/Cargo.toml
@@ -5,4 +5,24 @@ edition = "2021"
 
 # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 
+
+[lib]
+name = "sdk_generator_version"
+path = "src/lib.rs"
+crate-type = ["cdylib"]
+
 [dependencies]
+log = "0.4.0"
+anyhow = "1.0"
+pdb-helper = {path = "../pdb-helper"}
+
+simple_logger = "*"
+
+unreal-sdk = {path = "../unreal-sdk"}
+
+[dependencies.windows]
+version = "0.44"
+features = [
+"Win32_Foundation",
+"Win32_System_Threading",
+]
\ No newline at end of file
diff --git a/sdk-generator/build.rs b/sdk-generator/build.rs
new file mode 100644
index 0000000..ea6806e
--- /dev/null
+++ b/sdk-generator/build.rs
@@ -0,0 +1,11 @@
+use std::path::PathBuf;
+
+fn main() {
+    println!("cargo:rerun-if-changed=build.rs");
+
+    let root = PathBuf::from(std::env::var("CARGO_MANIFEST_DIR").unwrap());
+
+    let def = root.join("proxy.def");
+    println!("cargo:rustc-link-lib=dylib=d3d11");
+    println!("cargo:rustc-link-arg=/def:{}", def.display());
+}
diff --git a/sdk-generator/proxy.def b/sdk-generator/proxy.def
new file mode 100644
index 0000000..f8d87e3
--- /dev/null
+++ b/sdk-generator/proxy.def
@@ -0,0 +1,20 @@
+LIBRARY VERSION.dll
+EXPORTS
+	GetFileVersionInfoA=c:\windows\system32\version.dll.GetFileVersionInfoA
+	GetFileVersionInfoByHandle=c:\windows\system32\version.dll.GetFileVersionInfoByHandle
+	GetFileVersionInfoExA=c:\windows\system32\version.dll.GetFileVersionInfoExA
+	GetFileVersionInfoExW=c:\windows\system32\version.dll.GetFileVersionInfoExW
+	GetFileVersionInfoSizeA=c:\windows\system32\version.dll.GetFileVersionInfoSizeA
+	GetFileVersionInfoSizeExA=c:\windows\system32\version.dll.GetFileVersionInfoSizeExA
+	GetFileVersionInfoSizeExW=c:\windows\system32\version.dll.GetFileVersionInfoSizeExW
+	GetFileVersionInfoSizeW=c:\windows\system32\version.dll.GetFileVersionInfoSizeW
+	GetFileVersionInfoW=c:\windows\system32\version.dll.GetFileVersionInfoW
+	VerFindFileA=c:\windows\system32\version.dll.VerFindFileA
+	VerFindFileW=c:\windows\system32\version.dll.VerFindFileW
+	VerInstallFileA=c:\windows\system32\version.dll.VerInstallFileA
+	VerInstallFileW=c:\windows\system32\version.dll.VerInstallFileW
+	VerLanguageNameA=c:\windows\system32\version.dll.VerLanguageNameA
+	VerLanguageNameW=c:\windows\system32\version.dll.VerLanguageNameW
+	VerQueryValueA=c:\windows\system32\version.dll.VerQueryValueA
+	VerQueryValueW=c:\windows\system32\version.dll.VerQueryValueW
+ 
diff --git a/sdk-generator/src/lib.rs b/sdk-generator/src/lib.rs
index 7d12d9a..ee45f11 100644
--- a/sdk-generator/src/lib.rs
+++ b/sdk-generator/src/lib.rs
@@ -1,14 +1,88 @@
-pub fn add(left: usize, right: usize) -> usize {
-    left + right
-}
+use std::{collections::HashSet, time::Duration};
 
-#[cfg(test)]
-mod tests {
-    use super::*;
+use pdb_helper as pdb;
+use simple_logger::SimpleLogger;
+use unreal_sdk::sdk::output::rust::generate_partial_sdk_to_tmp;
+use windows::s;
 
-    #[test]
-    fn it_works() {
-        let result = add(2, 2);
-        assert_eq!(result, 4);
+#[no_mangle]
+pub extern "win64" fn DllMain(_module: usize, reason: u32, _: usize) -> bool {
+    match reason {
+        1 => {
+            if std::env::current_exe()
+                .expect("current exe")
+                .file_name()
+                .expect("file name")
+                .to_string_lossy()
+                == "ShooterGame.exe"
+            {
+                SimpleLogger::new().init().unwrap();
+                log::info!("hello");
+                std::thread::spawn(move || {
+                    let _wnd = loop {
+                        let window = unsafe {
+                            windows::Win32::UI::WindowsAndMessaging::FindWindowA(
+                                None,
+                                s!("ARK: Survival Evolved"),
+                            )
+                        };
+                        if window.0 != 0 {
+                            log::debug!("found window: {window:?}");
+                            break window;
+                        }
+
+                        log::trace!("window was 0");
+                        std::thread::sleep(std::time::Duration::from_millis(150));
+                    };
+
+                    let globals = pdb::get_pdb().find_ue_globals().expect("globals");
+                    unreal_sdk::global_tables::names::GNAMES
+                        .write()
+                        .unwrap()
+                        .set_names(globals.names.cast());
+                    unreal_sdk::global_tables::objects::GOBJECTS
+                        .write()
+                        .unwrap()
+                        .set_objects(globals.objects.cast());
+
+                    std::thread::sleep(Duration::from_secs(30));
+                    let sdk = unreal_sdk::sdk::Sdk::new().patch();
+                    _ = generate_partial_sdk_to_tmp(
+                        &sdk,
+                        HashSet::from_iter([
+                            "Package_ShooterGame",
+                            "Package_DeathItemCache",
+                            "Package_WeapC4",
+                            "Package_ExplorerChest_Base",
+                            "Package_PointOfInterestBP_MissionStart",
+                            "Package_BP_DedicatedStorage",
+                            "Package_ElectricGenerator",
+                            "Package_ExplorerChest_Base",
+                            "Package_FeedingTroughBaseBP",
+                            "Package_MilkGlider_Character_BP",
+                            "Package_PointOfInterestBP_MissionStart",
+                            "Package_SleepingBag",
+                            "Package_StorageBox_Huge",
+                            "Package_StorageBox_TekGenerator",
+                            "Package_StructureAmmoContainer",
+                            "Package_StructureTurretBaseBP_Heavy",
+                            "Package_StructureTurretBaseBP",
+                            "Package_StructureTurretTek",
+                            "Package_Structure_DinoLeash",
+                            "Package_Structure_TekAlarm",
+                            "Package_BP_DedicatedStorage",
+                            "Package_Buff_Companion_HLNA",
+                            "Package_Buff_TekArmor_Pants",
+                            "Package_Buff_TekArmor_Gloves",
+                            "Package_Buff_TekArmor_Sword",
+                            "Package_Buff_TekArmor_Shirt_Rework",
+                        ]),
+                    );
+                });
+            }
+        }
+        _ => {}
     }
+
+    true
 }