diff --git a/.gitignore b/.gitignore index a731290..f451f81 100644 --- a/.gitignore +++ b/.gitignore @@ -28,3 +28,9 @@ crashlytics-build.properties fabric.properties .idea/httpRequests .idea/caches/build_file_checksums.ser +/.idea/.gitignore +/.idea/chrani-bot-tng-mod.iml +/.idea/misc.xml +/.idea/modules.xml +/.idea/vcs.xml +/CHRANIBotTNG/CHRANIBotTNG.dll diff --git a/CHRANIBotTNG/CHRANIBotTNG.dll b/CHRANIBotTNG/CHRANIBotTNG.dll index 5eddca0..4fef98c 100644 Binary files a/CHRANIBotTNG/CHRANIBotTNG.dll and b/CHRANIBotTNG/CHRANIBotTNG.dll differ diff --git a/CHRANIBotTNG/ModInfo.xml b/CHRANIBotTNG/ModInfo.xml index 68b39b7..18e6376 100644 --- a/CHRANIBotTNG/ModInfo.xml +++ b/CHRANIBotTNG/ModInfo.xml @@ -4,6 +4,6 @@ - + \ No newline at end of file diff --git a/Harmony/CHRANIBotTNG.cs b/Harmony/CHRANIBotTNG.cs index ea650fc..82c7a59 100644 --- a/Harmony/CHRANIBotTNG.cs +++ b/Harmony/CHRANIBotTNG.cs @@ -149,7 +149,6 @@ public static class MuteStorage } } -// ==================== ADMIN MANAGER (serveradmin.xml) ==================== public static class AdminManager { private static HashSet adminSteamIDs = new HashSet(); @@ -174,15 +173,12 @@ public static class AdminManager try { - // Try common locations - // GetSaveGameDir() returns the world folder (e.g., Saves/RWG/WorldName) - // serveradmin.xml is in the Saves folder, so we need to go up 2 levels string[] possiblePaths = new[] { - Path.Combine(GameIO.GetSaveGameDir(), "..", "..", "serveradmin.xml"), // Saves/serveradmin.xml (standard location) - Path.Combine(GameIO.GetSaveGameDir(), "..", "serveradmin.xml"), // Saves/RWG/serveradmin.xml - Path.Combine(GameIO.GetSaveGameDir(), "serveradmin.xml"), // Saves/RWG/WorldName/serveradmin.xml - "serveradmin.xml" // Working directory + Path.Combine(GameIO.GetSaveGameDir(), "..", "..", "serveradmin.xml"), + Path.Combine(GameIO.GetSaveGameDir(), "..", "serveradmin.xml"), + Path.Combine(GameIO.GetSaveGameDir(), "serveradmin.xml"), + "serveradmin.xml" }; foreach (string path in possiblePaths) @@ -209,7 +205,6 @@ public static class AdminManager Console.WriteLine($"[AdminManager] Error finding serveradmin.xml: {e.Message}"); } - // Log all attempted paths Console.WriteLine("[AdminManager] serveradmin.xml not found. Attempted paths:"); foreach (var path in attemptedPaths) { @@ -249,8 +244,26 @@ public static class AdminManager public static bool IsAdmin(ClientInfo _cInfo) { - if (_cInfo == null || _cInfo.InternalId == null) return false; - return adminSteamIDs.Contains(_cInfo.InternalId.ReadablePlatformUserIdentifier); + if (_cInfo == null || _cInfo.PlatformId == null) return false; + + DumpObject(_cInfo); + string steamId = _cInfo.PlatformId.ReadablePlatformUserIdentifier; + + Console.WriteLine($"[AdminManager] Checking admin-permissions for user: {steamId}"); + + // Try exact match first + if (adminSteamIDs.Contains(steamId)) + return true; + + // Try without "Steam_" prefix (serveradmin.xml might not have the prefix) + if (steamId.StartsWith("Steam_")) + { + string steamIdWithoutPrefix = steamId.Substring(6); // Remove "Steam_" + if (adminSteamIDs.Contains(steamIdWithoutPrefix)) + return true; + } + + return false; } public static int GetAdminCount() @@ -266,6 +279,55 @@ public static class AdminManager LoadAdmins(); } } + + public static void DumpObject(object obj) + { + if (obj == null) + { + Console.WriteLine("Object is null"); + return; + } + + var type = obj.GetType(); + + Console.WriteLine($"Type: {type.Name}"); + + // Alle öffentlichen Eigenschaften + Console.WriteLine("Public Properties:"); + foreach (var prop in type.GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)) + { + try + { + var val = prop.GetValue(obj); + Console.WriteLine($" {prop.Name} = {val}"); + } + catch { } + } + + // Alle privaten und geschützten Eigenschaften + Console.WriteLine("All Properties (inkl. non-public):"); + foreach (var prop in type.GetProperties(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)) + { + try + { + var val = prop.GetValue(obj); + Console.WriteLine($" {prop.Name} = {val}"); + } + catch { } + } + + // Alle Felder (inkl. private) + Console.WriteLine("Fields:"); + foreach (var field in type.GetFields(System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance)) + { + try + { + var val = field.GetValue(obj); + Console.WriteLine($" {field.Name} = {val}"); + } + catch { } + } + } } [HarmonyPatch(typeof(GameManager), "ChatMessageServer")] @@ -389,4 +451,4 @@ public class ChatMessagePatch return false; } -} \ No newline at end of file +}