From 209e89a6e33d712fc3041958879fe4a52a4abec5 Mon Sep 17 00:00:00 2001 From: ecv Date: Mon, 24 Nov 2025 11:35:21 +0100 Subject: [PATCH] fixed bot not using correct id for admin functions --- .gitignore | 6 +++ CHRANIBotTNG/CHRANIBotTNG.dll | Bin 5120 -> 13312 bytes CHRANIBotTNG/ModInfo.xml | 2 +- Harmony/CHRANIBotTNG.cs | 86 +++++++++++++++++++++++++++++----- 4 files changed, 81 insertions(+), 13 deletions(-) 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 5eddca0f4bdc2d5651412b72c89c2cef83d61d4a..4fef98c9ea1af926fbf296f3034f67126fd899ce 100644 GIT binary patch literal 13312 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 bHV;#OfBj#1V7vPpjbGth`TOhtp9lUI|4cXC delta 2243 zcmZ`*TWl0n82--b?ChoO(%o&lT`hD=DU|NAP%c5lC~YNWvCzsE2}lFm-GQ!dcgpNk ztrEA!D5CLFM`HpdV&VlKln02Yi9QhHgAYm!QQ`xVczYpHAK^j$&MbnEcsBE&|N8xx zb7tC^@tLkyp4%Lm>L}pax`c)CTCoDCqe8DLzfEwD^Vz@$XmEK6Xs&o;$IR@vso)H~ zhm>Ul@Ufh2k7#>|=7?photE`*Ria=utj?G0gtz5L{gWz(-<(JFV(Tb9{9O&?t0g0mzXjv_ z|6oM4ke2LMC=rhf6Y`iLR1k>hAwAg)>lZqQJU8Jr!s-;aYM~7`{v{&bkT+Qit;{|G z_ahOY+Ki9~5}RexCsj>4TaNfbzT_RS4iHE_(Wt7uQLcJDwF!8; zosot`l{ubZ$CH4MX@6FH#&<3`iY+ zx%4Z<+Gb<@>8RgjxE$ z;7ZT7Tp^~!Ypyig^0#<{(($TP!6|u^;vWi^LDM+F@%%SX4NTx=m%h$)5=qh;tWwj) z>p~(1Kdx|IAyS>v6&9Z*Z6Ml7v?5Ku9Z%s?xtRQzNMNb!Sx3tL4`WDdB>g~cCjC=n zNH548{H9G|l>D1AN4`~zqR|aKb3;BA{Tmq*A_EBRW$BK|E6udTho1}J+gIx&enuknjS2SVWONf ztsA?KVnw!Jba%(VNdBT^=rGrwwb%lxQ>S&xDyzm&$gw zlrzw8mda+)z@+QAH9KKohgGnR!9vNv$n>OfBZKA4#YO_#j0y7*n#_!|{D$83XeI<7PQSXC--bTFqNft8d&zA zb8>mixxApxIliDrCjJ#0VyIn?G2Ss7alk*p+i1f8)>l0aEop7KQ(5Y#P{MWVJ+9R| zO3QYXoIUZF*Y&!u8ui=a9%)qBja~PJ;Fr7Fj-7jR=*Y^S(len8W6rs*rpnTw<`v;i z4MGI9xFY;v5 zgiq>0-K(h>sr$4z!rOgk9^d^yZ1ttXy6z$~<~9*-=Lb>Lp+ - + \ 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 +}