Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ZonePermissions v1.0.1
plugins/ZonePermissions.dll
Decompiled 2 years agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Jotunn; using Jotunn.Entities; using Jotunn.Utils; using Steamworks; using UnityEngine; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("ZonePermissions")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("ZonePermissions")] [assembly: AssemblyCopyright("Copyright © 2024")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("1815f7f4-1df3-4e82-9365-033f3811675a")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.6.2", FrameworkDisplayName = ".NET Framework 4.6.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace ZonePermissions; public static class Client { public struct Client_List { public ZDOID UID; public string SteamID; } public static class Ward { public static bool Damage; public static bool Pickup; public static bool Drop; } public static List<Client_List> CList = new List<Client_List>(); public static bool IsZoneAdmin = false; public static bool EnforceZones = false; public static bool PVPEnforced = false; public static bool PVPMode = false; public static bool PositionEnforce = false; public static bool ShowPosition = false; public static bool NoItemLoss = false; public static float RespawnTimer = 10f; public static void _debug() { Debug.Log((object)"Loaded Client Data: "); Debug.Log((object)(" EnforceZones: " + EnforceZones)); Debug.Log((object)(" PVPEnforced: " + PVPEnforced)); Debug.Log((object)(" PVPMode: " + PVPMode)); Debug.Log((object)(" ShowPosition: " + ShowPosition)); Debug.Log((object)(" PositionEnforce: " + PositionEnforce)); } public static ZPackage Serialize() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown ZPackage val = new ZPackage(); if (PVPEnforced) { PVPMode = true; } else { PVPMode = false; } val.Write(EnforceZones); val.Write(PVPEnforced); val.Write(PVPMode); val.Write(PositionEnforce); val.Write(ShowPosition); val.Write(Ward.Damage); val.Write(Ward.Drop); val.Write(Ward.Pickup); val.Write(NoItemLoss); val.Write(RespawnTimer); return val; } public static void Deserialize(ZPackage data) { EnforceZones = data.ReadBool(); PVPEnforced = data.ReadBool(); PVPMode = data.ReadBool(); PositionEnforce = data.ReadBool(); ShowPosition = data.ReadBool(); Ward.Damage = data.ReadBool(); Ward.Drop = data.ReadBool(); Ward.Pickup = data.ReadBool(); NoItemLoss = data.ReadBool(); RespawnTimer = data.ReadSingle(); } public static void RPC(ZRpc rpc, ZPackage data) { Debug.Log((object)"S2C Client (RPC Call)"); Debug.Log((object)"Before"); _debug(); Deserialize(data); Debug.Log((object)"After"); _debug(); } public static void RPC(long uid, ZPackage data) { Debug.Log((object)"S2C Client (RPC Call)"); Debug.Log((object)"Before"); _debug(); Deserialize(data); Debug.Log((object)"After"); _debug(); } } [BepInPlugin("com.valkyrie.zonepermissions", "Zone Permissions", "1.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class ZonePermissions : BaseUnityPlugin { [HarmonyPatch(typeof(FejdStartup), "AwakePlayFab")] private static class FejdStartupAwakePlayfabPatch { private static void Postfix(FejdStartup __instance) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (!Util.isServer()) { CSteamID steamID = SteamUser.GetSteamID(); MySteamID = ((object)(CSteamID)(ref steamID)).ToString(); Debug.Log((object)("Caching our SteamID as " + MySteamID)); } } } [HarmonyPatch(typeof(ZNet), "Awake")] private static class ZNetAwakePatch { private static void Postfix(ZNet __instance) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { Debug.Log((object)"Registering Server RPCs"); AddServerRPC(); return; } CSteamID steamID = SteamUser.GetSteamID(); MySteamID = ((object)(CSteamID)(ref steamID)).ToString(); Debug.Log((object)("Caching our SteamID as " + MySteamID)); Debug.Log((object)"Registering Client RPCs"); AddClientRPC(); } } [HarmonyPatch(typeof(ZNet))] public class ZNetPatch { [HarmonyPrefix] [HarmonyPatch("OnNewConnection")] private static void ZNet_OnNewConnectionPrefix(ZNet __instance, ZNetPeer peer) { if (!Util.isServer()) { Debug.Log((object)$"Server Zone Enforced: {Client.EnforceZones}"); peer.m_rpc.Register<ZPackage>("ZP_ZoneHandler", (Action<ZRpc, ZPackage>)ZoneHandler.RPC); peer.m_rpc.Register<ZPackage>("ZP_Client", (Action<ZRpc, ZPackage>)Client.RPC); ZoneHandler.CurrentZoneID = -2; } } [HarmonyPrefix] [HarmonyPatch("SendPeerInfo")] private static void ZNet_SendPeerInfo(ZNet __instance, ZRpc rpc) { if (Util.isServer()) { Debug.Log((object)"SendPeerInfo"); Debug.Log((object)"S2C ZoneHandler (SendPeerInfo)"); ZoneHandler._debug(); rpc.Invoke("ZP_ZoneHandler", new object[1] { ZoneHandler.Serialize(0L) }); Debug.Log((object)"S2C ClientState (SendPeerInfo)"); Client._debug(); rpc.Invoke("ZP_Client", new object[1] { Client.Serialize() }); Util.Connections.Add(new Util.ConnectionData { rpc = rpc }); } } } [HarmonyPatch] public static class ZoneEnforcer { [HarmonyPatch(typeof(InventoryGui), "UpdateCharacterStats")] public static class PVP_Patch { private static void Postfix(InventoryGui __instance) { ((Selectable)__instance.m_pvp).interactable = Client.IsZoneAdmin || !Client.PVPEnforced; } } [HarmonyPostfix] [HarmonyPatch(typeof(Game), "Update")] private static void Game__Update() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)Player.m_localPlayer)) { return; } string text = ""; bool changed; ZoneHandler.Zone z; ZoneHandler.ZoneTypes zt; bool flag = ZoneHandler.Detect(((Component)Player.m_localPlayer).transform.position, out changed, out z, out zt); if (changed) { if (flag) { Client.IsZoneAdmin = Util.IsZoneAdmin(z.ID); string text2 = ((!zt.PVPEnforce) ? NonEnforcedColor.Value : (zt.PVP ? PVPColor.Value : PVEColor.Value)); string text3 = z.Name.Replace("_", " "); text = "<color=" + text2 + ">Now entering <b>" + text3 + "</b>.</color>"; string text4 = ((!zt.PVPEnforce) ? string.Empty : (zt.PVP ? "PVP Enabled" : "PVP Disabled")); ((Character)Player.m_localPlayer).Message((MessageType)2, text, 0, (Sprite)null); if (Client.EnforceZones && zt.PVPEnforce && zt.PVP != ((Character)Player.m_localPlayer).IsPVPEnabled() && BiomePVPAnnouncement.Value) { MessageHud.instance.ShowBiomeFoundMsg(text4, true); } } else { Client.IsZoneAdmin = Util.IsZoneAdmin(-1); string text5 = ((!zt.PVPEnforce) ? NonEnforcedColor.Value : (zt.PVP ? PVPColor.Value : PVEColor.Value)); string text6 = "The Wilderness"; text = "<color=" + text5 + ">Now entering <b>" + text6 + "</b>.</color>"; string text7 = ((!zt.PVPEnforce) ? string.Empty : (zt.PVP ? "PVP Enabled" : "PVP Disabled")); ((Character)Player.m_localPlayer).Message((MessageType)2, text, 0, (Sprite)null); if (Client.EnforceZones && zt.PVPEnforce && zt.PVP != ((Character)Player.m_localPlayer).IsPVPEnabled() && BiomePVPAnnouncement.Value) { MessageHud.instance.ShowBiomeFoundMsg(text7, true); } } if (!Client.IsZoneAdmin && Client.EnforceZones) { Client.PVPEnforced = zt.PVPEnforce; if (zt.PVPEnforce) { Client.PVPMode = zt.PVP; } Client.PositionEnforce = zt.PositionEnforce; if (zt.PositionEnforce) { Client.ShowPosition = zt.ShowPosition; } Player.m_localPlayer.SetPVP(Client.PVPMode); InventoryGui.instance.m_pvp.isOn = Client.PVPMode; ((Selectable)InventoryGui.instance.m_pvp).interactable = !Client.PVPEnforced; ZNet.instance.SetPublicReferencePosition(Client.ShowPosition); ((Character)Player.m_localPlayer).Message((MessageType)2, text, 0, (Sprite)null); } ZoneHandler._debug(zt); Client._debug(); return; } if (!Client.IsZoneAdmin && Client.PVPEnforced && ((Character)Player.m_localPlayer).IsPVPEnabled() != Client.PVPMode) { Player.m_localPlayer.SetPVP(Client.PVPMode); } if (!Client.IsZoneAdmin && Client.PositionEnforce) { ZNet instance = ZNet.instance; if (((instance != null) ? new bool?(instance.IsReferencePositionPublic()) : null) != Client.ShowPosition) { ZNet.instance.SetPublicReferencePosition(Client.ShowPosition); } } } [HarmonyPostfix] [HarmonyPatch(typeof(Minimap), "Update")] public static void Minimap_Start(Toggle ___m_publicPosition) { ((Selectable)___m_publicPosition).interactable = Client.IsZoneAdmin || !Client.PositionEnforce; } } private static string ConfigFileName = "com.valkyrie.zonepermissions.cfg"; private static string ConfigFileFullPath; public static ConfigEntry<string> ZonePath; public static ConfigEntry<int> NexusID; public static ConfigEntry<bool> BiomePVPAnnouncement; public static ConfigEntry<bool> NoItemLoss; public static ConfigEntry<float> RespawnTimer; public static ConfigEntry<string> PVPColor; public static ConfigEntry<string> PVEColor; public static ConfigEntry<string> NonEnforcedColor; public static ConfigEntry<bool> WardProtectItemDrop; public static ConfigEntry<bool> WardProtectItemPickup; public static ConfigEntry<bool> WardProtectDamage; public static ConfigEntry<bool> ReloadDetection; public static readonly WaitForSeconds OneSecondWait; public static readonly WaitForSeconds HalfSecondWait; public static CustomRPC RPC_ZoneHandler; private static readonly ZonePermissions instance; public const string PluginGUID = "com.valkyrie.zonepermissions"; public const string PluginName = "Zone Permissions"; public const string PluginVersion = "1.0.0"; public static string ZoneDir; public static string DefaultZonePath; public const int AreaRange = 100; public static int HealTick; public static int DamageTick; public static int EffectTick; public static Harmony harm; public static string MySteamID; private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { Logger.LogDebug((object)"Attempting to reload configuration..."); ((BaseUnityPlugin)this).Config.Reload(); } catch { Logger.LogError((object)("There was an issue loading " + ConfigFileName)); } } private void SetupConfigWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void CreateConfigValues() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; ConfigurationManagerAttributes val = new ConfigurationManagerAttributes { IsAdminOnly = true }; if (Util.isServer()) { ReloadDetection = ((BaseUnityPlugin)this).Config.Bind<bool>("Config", "ReloadDetection", false, "SERVER ONLY: Should the server auto reload if the config file is changed? (May cause DeSync)"); NoItemLoss = ((BaseUnityPlugin)this).Config.Bind<bool>("Death", "NoItemLoss", false, "SERVER ONLY: Should we prevent a user from losing items/skills on death globally?"); RespawnTimer = ((BaseUnityPlugin)this).Config.Bind<float>("Death", "RespawnTimer", 10f, "SERVER ONLY: How fast should the clients respawn?"); ZonePath = ((BaseUnityPlugin)this).Config.Bind<string>("WorldofValheimZones", "ZonePath", DefaultZonePath, "SERVER ONLY: The file path to the zone file. If it does not exist, it will be created with a default zone."); WardProtectDamage = ((BaseUnityPlugin)this).Config.Bind<bool>("Ward", "Building_ProtectDamage", false, "SERVER ONLY: Protect buildings from being damaged inside Warded Areas?"); WardProtectItemPickup = ((BaseUnityPlugin)this).Config.Bind<bool>("Ward", "Item_Pickup", false, "SERVER ONLY: Protect Picking up items in Warded Areas?"); WardProtectItemDrop = ((BaseUnityPlugin)this).Config.Bind<bool>("Ward", "Item_Drop", false, "SERVER ONLY: Protect Dropping items in Warded Areas?"); } else { Debug.Log((object)"[ZonePermissions - Client Mode]"); BiomePVPAnnouncement = ((BaseUnityPlugin)this).Config.Bind<bool>("Biome", "BiomePVPAnnouncement", true, "Should we announce changing PVP in a Biome Announcement? true or false"); PVPColor = ((BaseUnityPlugin)this).Config.Bind<string>("Colors", "PVPColor", "Red", "What color should our 'Now Entering' message be if the zone type has PVP on"); PVEColor = ((BaseUnityPlugin)this).Config.Bind<string>("Colors", "PVEColor", "White", "What color should our 'Now Entering' message be if the zone type has PVE off"); NonEnforcedColor = ((BaseUnityPlugin)this).Config.Bind<string>("Colors", "NonEnforcedColor", "Yellow", "What color should our 'Now Entering' message be if the zone type has No PVP Enforcement"); } } [HarmonyPostfix] [HarmonyPatch(typeof(Player), "OnRespawn")] private static void Player__OnRespawn(Player __instance) { if (!ZNet.instance.IsServer()) { ZoneHandler.CurrentZoneID = -2; } } private static IEnumerator SRPC_Null(long sender, ZPackage package) { yield return null; } private static IEnumerator CRPC_ZoneHandler(long sender, ZPackage package) { Debug.Log((object)"CRPC ZoneHandler"); ZoneHandler.RPC(sender, package); yield return null; } private void Awake() { CreateConfigValues(); if (Util.isServer()) { CreateFiles(); SetupZoneWatcher(); Client.Ward.Damage = WardProtectDamage.Value; Client.Ward.Pickup = WardProtectItemPickup.Value; Client.Ward.Drop = WardProtectItemDrop.Value; Client.NoItemLoss = NoItemLoss.Value; Client.RespawnTimer = RespawnTimer.Value; ZoneHandler.LoadZoneData(DefaultZonePath); } Client.EnforceZones = true; harm.PatchAll(); } private void FixedUpdate() { ZonePatches.FixedUpdate(); } private static void SetupZoneWatcher() { Debug.Log((object)"Creating file watcher for Zones"); FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(ZoneDir); fileSystemWatcher.Changed += OnZoneConfigChange; fileSystemWatcher.Created += OnZoneConfigChange; fileSystemWatcher.Renamed += OnZoneConfigChange; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private static void OnZoneConfigChange(object sender, FileSystemEventArgs e) { Debug.Log((object)"ZONES FILE CHANGED!"); ZoneHandler.LoadZoneData(DefaultZonePath); SendAllUpdate(); } private static void AddServerRPC() { ZRoutedRpc.instance.Register<ZPackage>("ZonePermissions_AddZone", (Action<long, ZPackage>)AddZone); ZRoutedRpc.instance.Register<ZPackage>("ZonePermissions_ReloadZones", (Action<long, ZPackage>)ReloadZones); ZRoutedRpc.instance.Register<ZPackage>("ZonePermissions_ZoneHandler", (Action<long, ZPackage>)ZoneHandler.RPC); } private static void AddClientRPC() { ZRoutedRpc.instance.Register<ZPackage>("ZonePermissions_AddZone", (Action<long, ZPackage>)AddZone); ZRoutedRpc.instance.Register<ZPackage>("ZonePermissions_ReloadZones", (Action<long, ZPackage>)ReloadZones); ZRoutedRpc.instance.Register<ZPackage>("ZonePermissions_ZoneHandler", (Action<long, ZPackage>)ZoneHandler.RPC); ZRoutedRpc.instance.Register<ZPackage>("ZonePermissions_ChatMessage", (Action<long, ZPackage>)Util.ShowChatMessage); ZRoutedRpc.instance.Register<int, string>("ZonePermissions_ShowMessage", (Action<long, int, string>)RPC_ShowMessage); ZRoutedRpc.instance.Register<ZPackage>("ZonePermissions_Client", (Action<long, ZPackage>)Client.RPC); } private void CreateFiles() { if (!Directory.Exists(ZoneDir)) { Directory.CreateDirectory(ZoneDir); } if (!File.Exists(DefaultZonePath)) { File.Create(DefaultZonePath); } } public static void ReloadZones(long sender, ZPackage pkg) { ZNetPeer peer = ZNet.instance.GetPeer(sender); if (peer != null) { string text = "HackShardGaming.WoV-Zones.Reload"; string text2 = peer.m_uid.ToString(); if (true) { ZoneHandler.LoadZoneData(DefaultZonePath); Util.Broadcast("Reloading Zone"); Debug.Log((object)"S2C ZoneHandler (SendPeerInfo)"); SendAllUpdate(); } else { Util.RoutedBroadcast(sender, "Sorry! You do not have the permission to use !ReloadZones (Required Permission: " + text + ")"); } } } public static void SendAllUpdate() { Debug.Log((object)"SendAllUpdate"); foreach (ZNetPeer peer in ZNet.instance.GetPeers()) { ZRoutedRpc.instance.InvokeRoutedRPC(peer.m_uid, "ZonePermissions_ZoneHandler", new object[1] { ZoneHandler.Serialize(peer.m_uid) }); Debug.Log((object)("Sent update to " + peer.m_uid)); } Debug.Log((object)"Broadcast Reloading Zone"); Util.Broadcast("Reloading Zones"); } public static void RPC_ShowMessage(long uid, int type, string msg) { Util.ShowMessage(type, msg); } public static void AddZone(long sender, ZPackage pkg) { if (pkg == null || pkg.Size() <= 0) { return; } ZNetPeer peer = ZNet.instance.GetPeer(sender); if (peer == null) { return; } string text = "HackShardGaming.WoV-Zones.Add"; string text2 = peer.m_uid.ToString(); if (false) { string text3 = pkg.ReadString(); string[] array = text3.Split(new char[1] { ' ' }); string text4 = array[0]; Debug.Log((object)"C-<S AddZone (RPC Call)"); string text5 = array[1]; ZoneHandler.ZoneTypes zoneTypes = ZoneHandler.FindZoneType(array[1]); if (zoneTypes.Name != text5) { text3 = "ERROR: The requested Zone Type " + text5 + " does not exist!"; Util.RoutedBroadcast(sender, text3); return; } int num = int.Parse(array[2]); if (num < 1 || num > 5) { text3 = $"ERROR: The requested Priority {num} is out of bounds! (Priorities are ranged from 1-5)!"; Util.RoutedBroadcast(sender, text3); return; } string text6 = array[3]; if (text6.ToLower() != "circle" && text6.ToLower() != "square") { text3 = "ERROR: The requested Shape: " + text6 + " is incorrectly formated! (Shapes can either be circle or square only)"; Util.RoutedBroadcast(sender, text3); return; } float result = 0f; string text7 = array[4]; if (!float.TryParse(text7, out result)) { text3 = "ERROR: The requested X " + text7 + " is incorrectly formated! (Correct Format is 0.0)!"; Util.RoutedBroadcast(sender, text3); return; } string text8 = array[5]; if (!float.TryParse(text8, out result)) { text3 = "ERROR: The requested Y " + text8 + " is incorrectly formated! (Correct Format is 0.0)!"; Util.RoutedBroadcast(sender, text3); return; } string text9 = array[6]; if (!float.TryParse(text9, out result)) { text3 = "ERROR: The requested Radius " + text9 + " is incorrectly formated! (Correct Format is 0.0)!"; Util.RoutedBroadcast(sender, text3); return; } string text10 = text4 + " " + text5 + " " + num + " " + text6 + " " + text7 + " " + text8 + " " + text9; File.AppendAllText(DefaultZonePath, text10 + Environment.NewLine); } else { Util.RoutedBroadcast(sender, "Sorry! You do not have the permission to use !AddZone (Required Permission: " + text + ")"); Debug.Log((object)("An unauthorized user " + text2 + " attempted to use the AddZone RPC!")); string text11 = pkg.ReadString(); Debug.Log((object)("Here is a log of the attempted AddZone " + text11)); } } static ZonePermissions() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Expected O, but got Unknown string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; OneSecondWait = new WaitForSeconds(1f); HalfSecondWait = new WaitForSeconds(0.5f); ZoneDir = Path.Combine(Paths.ConfigPath, "ZonePermissions"); DefaultZonePath = Path.Combine(ZoneDir, "Zones.txt"); HealTick = 0; DamageTick = 0; EffectTick = 0; harm = new Harmony("ZonePermissions"); MySteamID = ""; } } public class Util { public class ConnectionData { public ZRpc rpc; } public static BindingFlags NonPublicFlags = BindingFlags.Instance | BindingFlags.NonPublic; public static List<ConnectionData> Connections = new List<ConnectionData>(); public static IEnumerator ZoneHandler2(ZRpc rpc) { Debug.Log((object)"ZoneHandler2"); rpc.Invoke("ZP_ZoneHandler", new object[1] { ZoneHandler.Serialize(0L) }); yield return (object)new WaitForSeconds(1f); } public static IEnumerator Client2(ZRpc rpc) { Debug.Log((object)"Client2"); rpc.Invoke("ZP_Client", new object[1] { Client.Serialize() }); yield return (object)new WaitForSeconds(1f); } public static void InsertChatMessage(string Message) { ((Terminal)Chat.instance).AddString("<color=grey><b>[Zone Permissions]</b></color> " + Message); } public static float RestrictionCheckFloatReturn(string restriction) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) CSteamID steamID = SteamUser.GetSteamID(); string text = ((object)(CSteamID)(ref steamID)).ToString(); Player localPlayer = Player.m_localPlayer; ZoneHandler.Zone zone = default(ZoneHandler.Zone); ZoneHandler.ZoneTypes zoneTypes = new ZoneHandler.ZoneTypes(); List<ZoneHandler.Zone> list = ZoneHandler.ListOccupiedZones(((Component)localPlayer).transform.position); zoneTypes = ((list.Count != 0) ? ZoneHandler.FindZoneType(ZoneHandler.TopZone(list).Type) : ZoneHandler.FindZoneType("wilderness")); string text2 = ""; string text3 = ""; text3 = zoneTypes.Admins; text2 = zoneTypes.Configurations; if (text3.Contains(ZonePermissions.MySteamID)) { return 1f; } if (text2.ToLower().Contains(restriction)) { string text4 = text2.ToLower(); string text5 = restriction + "("; int num = text4.IndexOf(text5) + text5.Length; string text6 = ""; for (int i = num; i < num + 20 && text4[i] != ')'; i++) { text6 += text4[i]; } float num2 = 1f; return Convert.ToSingle(text6, new CultureInfo("en-US")); } return 1f; } public static float RestrictionCheckFloatReturnCharacter(Character __instance, string restriction) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) ZNet instance = ZNet.instance; ZDOID zDOID = __instance.GetZDOID(); string hostName = instance.GetPeer(((ZDOID)(ref zDOID)).UserID).m_socket.GetHostName(); ZoneHandler.Zone zone = default(ZoneHandler.Zone); ZoneHandler.ZoneTypes zoneTypes = new ZoneHandler.ZoneTypes(); List<ZoneHandler.Zone> list = ZoneHandler.ListOccupiedZones(((Component)__instance).transform.position); zoneTypes = ((list.Count != 0) ? ZoneHandler.FindZoneType(ZoneHandler.TopZone(list).Type) : ZoneHandler.FindZoneType("wilderness")); string text = ""; string text2 = ""; text2 = zoneTypes.Admins; text = zoneTypes.Configurations; if (text2.Contains(hostName)) { return 1f; } if (text.ToLower().Contains(restriction)) { string text3 = text.ToLower(); string text4 = restriction + "("; int num = text3.IndexOf(text4) + text4.Length; string text5 = ""; for (int i = num; i < num + 20 && text3[i] != ')'; i++) { text5 += text3[i]; } float num2 = 1f; return Convert.ToSingle(text5, new CultureInfo("en-US")); } return 1f; } public static float RestrictionCheckFloatReturnNone(Character __instance, string restriction) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) ZoneHandler.Zone zone = default(ZoneHandler.Zone); ZoneHandler.ZoneTypes zoneTypes = new ZoneHandler.ZoneTypes(); List<ZoneHandler.Zone> list = ZoneHandler.ListOccupiedZones(((Component)__instance).transform.position); zoneTypes = ((list.Count != 0) ? ZoneHandler.FindZoneType(ZoneHandler.TopZone(list).Type) : ZoneHandler.FindZoneType("wilderness")); string text = ""; string text2 = ""; text2 = zoneTypes.Admins; text = zoneTypes.Configurations; if (text.ToLower().Contains(restriction)) { string text3 = text.ToLower(); string text4 = restriction + "("; int num = text3.IndexOf(text4) + text4.Length; string text5 = ""; for (int i = num; i < num + 20 && text3[i] != ')'; i++) { text5 += text3[i]; } float num2 = 1f; return Convert.ToSingle(text5, new CultureInfo("en-US")); } return 1f; } public static bool RestrictionCheckCharacter(Character __instance, string restriction) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) ZNet instance = ZNet.instance; ZDOID zDOID = __instance.GetZDOID(); string hostName = instance.GetPeer(((ZDOID)(ref zDOID)).UserID).m_socket.GetHostName(); if (ZoneHandler.Zones.Count() == 0) { return false; } ZoneHandler.Zone zone = default(ZoneHandler.Zone); ZoneHandler.ZoneTypes zoneTypes = new ZoneHandler.ZoneTypes(); List<ZoneHandler.Zone> list = ZoneHandler.ListOccupiedZones(((Component)__instance).transform.position); zoneTypes = ((list.Count != 0) ? ZoneHandler.FindZoneType(ZoneHandler.TopZone(list).Type) : ZoneHandler.FindZoneType("wilderness")); string text = ""; string text2 = ""; text2 = zoneTypes.Admins; text = zoneTypes.Configurations; if (text2.Contains(hostName)) { return false; } if (text.ToLower().Contains(restriction)) { return true; } return false; } public static bool RestrictionCheckTerrain(TerrainComp __instance, string restriction) { //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (ZoneHandler.Zones.Count() == 0) { return false; } ZoneHandler.Zone zone = default(ZoneHandler.Zone); ZoneHandler.ZoneTypes zoneTypes = new ZoneHandler.ZoneTypes(); List<ZoneHandler.Zone> list = ZoneHandler.ListOccupiedZones(((Component)__instance).transform.position); zoneTypes = ((list.Count != 0) ? ZoneHandler.FindZoneType(ZoneHandler.TopZone(list).Type) : ZoneHandler.FindZoneType("wilderness")); string text = ""; string text2 = ""; text2 = zoneTypes.Admins; text = zoneTypes.Configurations; if (text.ToLower().Contains(restriction)) { return true; } return false; } public static bool RestrictionCheckNone(Character __instance, string restriction) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) if (ZoneHandler.Zones.Count() == 0) { return false; } ZoneHandler.Zone zone = default(ZoneHandler.Zone); ZoneHandler.ZoneTypes zoneTypes = new ZoneHandler.ZoneTypes(); List<ZoneHandler.Zone> list = ZoneHandler.ListOccupiedZones(((Component)__instance).transform.position); zoneTypes = ((list.Count != 0) ? ZoneHandler.FindZoneType(ZoneHandler.TopZone(list).Type) : ZoneHandler.FindZoneType("wilderness")); string text = ""; text = zoneTypes.Configurations; if (text.ToLower().Contains(restriction)) { return true; } return false; } public static bool RestrictionCheck(string restriction) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) Player localPlayer = Player.m_localPlayer; if (ZoneHandler.Zones.Count() == 0) { return false; } ZoneHandler.Zone zone = default(ZoneHandler.Zone); ZoneHandler.ZoneTypes zoneTypes = new ZoneHandler.ZoneTypes(); List<ZoneHandler.Zone> list = ZoneHandler.ListOccupiedZones(((Component)localPlayer).transform.position); zoneTypes = ((list.Count != 0) ? ZoneHandler.FindZoneType(ZoneHandler.TopZone(list).Type) : ZoneHandler.FindZoneType("wilderness")); string text = ""; string text2 = ""; text2 = zoneTypes.Admins; text = zoneTypes.Configurations; if (text2.Contains(ZonePermissions.MySteamID)) { return false; } if (text.ToLower().Contains(restriction)) { return true; } return false; } public static void DoPrivateAreaEffect(Vector3 pos) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) GameObject prefab = ZNetScene.instance.GetPrefab("vfx_lootspawn"); GameObject val = Object.Instantiate<GameObject>(prefab, pos, Quaternion.identity); if (!((Object)(object)Player.m_localPlayer == (Object)null)) { ShowChatMessage(Player.m_localPlayer.GetPlayerID(), "Zone Permissions", "PRIVATE AREA", inWorld: true, pos, (Type)1); } } public static void DoWardedAreaEffect(Vector3 pos) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) GameObject prefab = ZNetScene.instance.GetPrefab("vfx_lootspawn"); GameObject val = Object.Instantiate<GameObject>(prefab, pos, Quaternion.identity); if (!((Object)(object)Player.m_localPlayer == (Object)null)) { ShowChatMessage(Player.m_localPlayer.GetPlayerID(), "Zone Permissions", "WARDED AREA", inWorld: true, pos, (Type)1); } } public static void ShowMessage(int type, string msg) { ((Character)Player.m_localPlayer).Message((MessageType)type, msg, 0, (Sprite)null); } public static void ShowChatMessage(long uid, ZPackage pkg) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Expected O, but got Unknown //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) UserInfo val = new UserInfo { Name = pkg.ReadString(), Gamertag = null, NetworkUserId = uid.ToString() }; string text = pkg.ReadString(); bool flag = pkg.ReadBool(); Vector3 val2 = pkg.ReadVector3(); Type type = ((object)Chat.instance).GetType(); if (flag) { type.GetMethod("AddInworldText", NonPublicFlags).Invoke(Chat.instance, new object[6] { null, uid, val2, (object)(Type)2, val, text }); } type.GetField("m_hideTimer", NonPublicFlags).SetValue(Chat.instance, 0f); ((Terminal)Chat.instance).AddString("Zone Permissions", text, (Type)2, false); } public static void ShowChatMessage(long uid, string username, string msg, bool inWorld = false, Vector3 pos = default(Vector3), Type type = 1) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) UserInfo val = new UserInfo { Name = username, Gamertag = null, NetworkUserId = uid.ToString() }; Type type2 = ((object)Chat.instance).GetType(); if (inWorld) { type2.GetMethod("AddInworldText", NonPublicFlags).Invoke(Chat.instance, new object[6] { null, uid, pos, type, val, msg }); } type2.GetField("m_hideTimer", NonPublicFlags).SetValue(Chat.instance, 0f); ((Terminal)Chat.instance).AddString("Zone Permissions", msg, (Type)2, false); } public static void Broadcast(string text, string username = "Zone Permissions", bool inWorld = false) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_002f: Unknown result type (might be due to invalid IL or missing references) ZPackage val = new ZPackage(); val.Write(username); val.Write(text); val.Write(inWorld); val.Write(new Vector3(0f, 100f, 0f)); ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.Everybody, "ZonePermissions_ChatMessage", new object[1] { val }); } public static void RoutedBroadcast(long peer, string text, string username = "Zone Permissions") { //IL_002f: Unknown result type (might be due to invalid IL or missing references) WorldTextInstance val = Chat.instance.FindExistingWorldText(peer); ZRoutedRpc.instance.InvokeRoutedRPC(peer, "ChatMessage", new object[6] { (object)new Vector3(0f, 100f, 0f), (object)(Type)2, username, val.m_userInfo, text, val.m_userInfo.NetworkUserId }); } public static bool isServer() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 return (int)SystemInfo.graphicsDeviceType == 4; } public static bool isAdmin(long sender) { ZNetPeer peer = ZNet.instance.GetPeer(sender); string text = sender.ToString(); if (ZNet.instance.m_adminList != null && ZNet.instance.m_adminList.Contains(text)) { return true; } return false; } public static bool IsZoneAdmin(int zoneID) { ZoneHandler.ZoneTypes zoneTypes; if (zoneID < 0) { zoneTypes = ZoneHandler.FindZoneType("wilderness"); } else { Debug.Log((object)$"Checking admin for zone id {zoneID}"); ZoneHandler.Zone zone = ZoneHandler.Zones.Find((ZoneHandler.Zone z) => z.ID == zoneID); Debug.Log((object)("Got Zone: " + zone.Name)); zoneTypes = ZoneHandler.FindZoneType(zone.Type); } return zoneTypes.Admins.Contains(ZonePermissions.MySteamID); } public static ConnectionData GetServer() { return Connections[0]; } } internal class ZonePatches { [HarmonyPatch(typeof(Player), "OnDeath")] public static class Death_Patch { private static bool Prefix(Player __instance) { //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Expected O, but got Unknown //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Expected O, but got Unknown //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Expected O, but got Unknown //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Expected I4, but got Unknown //IL_0338: Unknown result type (might be due to invalid IL or missing references) //IL_0404: Unknown result type (might be due to invalid IL or missing references) //IL_045f: Unknown result type (might be due to invalid IL or missing references) //IL_0464: Unknown result type (might be due to invalid IL or missing references) if (Util.RestrictionCheck("noitemloss") || Client.NoItemLoss) { Type type = ((object)__instance).GetType(); bool flag = (bool)type.GetMethod("HardDeath", Util.NonPublicFlags).Invoke(__instance, new object[0]); ZNetView val = (ZNetView)type.GetField("m_nview", Util.NonPublicFlags).GetValue(__instance); HitData val2 = (HitData)type.GetField("m_lastHit", Util.NonPublicFlags).GetValue(__instance); List<Food> list = (List<Food>)type.GetField("m_foods", Util.NonPublicFlags).GetValue(__instance); Skills val3 = (Skills)type.GetField("m_skills", Util.NonPublicFlags).GetValue(__instance); SEMan val4 = (SEMan)type.GetField("m_seman", Util.NonPublicFlags).GetValue(__instance); val.GetZDO().Set(ZDOVars.s_dead, true); Game.instance.IncrementPlayerStat((PlayerStatType)0, 1f); HitType hitType = val2.m_hitType; HitType val5 = hitType; switch ((int)val5) { case 0: Game.instance.IncrementPlayerStat((PlayerStatType)55, 1f); break; case 1: Game.instance.IncrementPlayerStat((PlayerStatType)56, 1f); break; case 2: Game.instance.IncrementPlayerStat((PlayerStatType)57, 1f); break; case 3: Game.instance.IncrementPlayerStat((PlayerStatType)58, 1f); break; case 4: Game.instance.IncrementPlayerStat((PlayerStatType)59, 1f); break; case 5: Game.instance.IncrementPlayerStat((PlayerStatType)60, 1f); break; case 6: Game.instance.IncrementPlayerStat((PlayerStatType)61, 1f); break; case 7: Game.instance.IncrementPlayerStat((PlayerStatType)62, 1f); break; case 8: Game.instance.IncrementPlayerStat((PlayerStatType)64, 1f); break; case 9: Game.instance.IncrementPlayerStat((PlayerStatType)63, 1f); break; case 10: Game.instance.IncrementPlayerStat((PlayerStatType)65, 1f); break; case 11: Game.instance.IncrementPlayerStat((PlayerStatType)66, 1f); break; case 12: Game.instance.IncrementPlayerStat((PlayerStatType)67, 1f); break; case 13: Game.instance.IncrementPlayerStat((PlayerStatType)68, 1f); break; case 14: Game.instance.IncrementPlayerStat((PlayerStatType)69, 1f); break; case 15: Game.instance.IncrementPlayerStat((PlayerStatType)70, 1f); break; case 16: Game.instance.IncrementPlayerStat((PlayerStatType)71, 1f); break; case 17: Game.instance.IncrementPlayerStat((PlayerStatType)72, 1f); break; case 18: Game.instance.IncrementPlayerStat((PlayerStatType)73, 1f); break; default: ZLog.LogWarning((object)("Not implemented death type " + ((object)(HitType)(ref val2.m_hitType)).ToString())); break; } Game.instance.GetPlayerProfile().SetDeathPoint(((Component)__instance).transform.position); type.GetMethod("CreateDeathEffects", Util.NonPublicFlags).Invoke(__instance, new object[0]); list.Clear(); if (ZoneSystem.instance.GetGlobalKey((GlobalKeys)17)) { val3.Clear(); } else if (flag) { val3.OnDeath(); } val4.RemoveAllStatusEffects(false); Game.instance.RequestRespawn(10f, true); type.GetField("m_timeSinceDeath", Util.NonPublicFlags).SetValue(__instance, 0f); if (!flag) { Util.ShowMessage(1, "$msg_softdeath"); } ((Character)__instance).Message((MessageType)2, "$msg_youdied", 0, (Sprite)null); Minimap.instance.AddPin(((Component)__instance).transform.position, (PinType)4, $"$hud_mapday {EnvMan.instance.GetDay(ZNet.instance.GetTimeSeconds())}", true, false, 0L, ""); if (((Character)__instance).m_onDeath != null) { ((Character)__instance).m_onDeath(); } Biome currentBiome = __instance.GetCurrentBiome(); string text = "biome:" + ((object)(Biome)(ref currentBiome)).ToString(); Gogan.LogEvent("Game", "Death", text, 0L); return false; } ZoneHandler.CurrentZoneID = -2; return true; } } [HarmonyPatch(typeof(Attack), "SpawnOnHitTerrain")] public static class Attack_Patch { private static bool Prefix(Vector3 hitPoint) { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if (Util.isServer()) { return true; } if (Util.RestrictionCheck("nopickaxe") || Util.RestrictionCheck("noterrain")) { flag = true; Util.DoPrivateAreaEffect(hitPoint + ((Component)Player.m_localPlayer).transform.forward * 1f); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } return !flag; } } [HarmonyPatch(typeof(TerrainOp), "Awake")] public static class TerrainComp_Patch { private static bool Prefix(TerrainOp __instance) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)Player.m_localPlayer) && Util.RestrictionCheck("noterrain")) { Util.DoPrivateAreaEffect(((Component)__instance).transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); return false; } return true; } } [HarmonyPatch(typeof(Container), "Interact")] public static class Container_Patch { private static bool Prefix(Container __instance) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if (Util.isServer()) { return true; } if (Util.RestrictionCheck("nochest")) { flag = true; Util.DoPrivateAreaEffect(((Component)__instance).transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } return !flag; } } [HarmonyPatch(typeof(Door), "Interact")] public static class Door_Patch { private static bool Prefix(Door __instance) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { return true; } bool flag = false; if (Util.RestrictionCheck("nodoors")) { flag = true; Util.DoPrivateAreaEffect(((Component)__instance).transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } return !flag; } } [HarmonyPatch(typeof(Sign), "Interact")] public static class Sign_Patch { private static bool Prefix(Door __instance) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { return true; } bool flag = false; if (Util.RestrictionCheck("nosigns")) { flag = true; Util.DoPrivateAreaEffect(((Component)__instance).transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } return !flag; } } [HarmonyPatch(typeof(Player), "PlacePiece")] public static class NoBuild_Patch { private static bool Prefix(Player __instance) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Expected O, but got Unknown //IL_004e: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { return true; } bool flag = false; if (Util.RestrictionCheck("nobuilding")) { flag = true; Type type = ((object)__instance).GetType(); GameObject val = (GameObject)type.GetField("m_placementGhost", Util.NonPublicFlags).GetValue(__instance); Util.DoPrivateAreaEffect(val.transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } return !flag; } } [HarmonyPatch(typeof(Player), "RemovePiece")] public static class NoBuild_Patch2 { private static bool Prefix(Player __instance) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { return true; } bool flag = false; if (Util.RestrictionCheck("nobuilding")) { flag = true; Util.DoPrivateAreaEffect(((Component)__instance).transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } return !flag; } } [HarmonyPatch(typeof(WearNTear), "Damage")] public static class Building_Wear_N_Tear_Patch { private static bool Prefix(WearNTear __instance, HitData hit) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { return true; } bool flag = false; bool flag2 = false; Debug.Log((object)"pre allPrivateAreas"); List<PrivateArea> list = (List<PrivateArea>)typeof(PrivateArea).GetField("m_allAreas", BindingFlags.Static | BindingFlags.NonPublic).GetValue((object?)new PrivateArea()); Debug.Log((object)"post allPrivateAreas"); foreach (PrivateArea item in list) { Debug.Log((object)"privateArea"); Type type = ((object)item).GetType(); Debug.Log((object)"privateArea type"); bool flag3 = (bool)type.GetMethod("IsEnabled", Util.NonPublicFlags).Invoke(item, new object[0]); Debug.Log((object)"privateArea reflection 1"); bool flag4 = (bool)type.GetMethod("IsInside", Util.NonPublicFlags).Invoke(item, new object[2] { ((Component)__instance).transform.position, 0 }); Debug.Log((object)"privateArea reflection 2"); if (flag3 && flag4) { flag = true; break; } } Debug.Log((object)"wnt check iswarded"); if (Client.Ward.Damage && flag) { ZDOID attacker = hit.m_attacker; bool flag5 = false; List<Character> list2 = new List<Character>(); foreach (Character allCharacter in Character.GetAllCharacters()) { if (allCharacter.GetZDOID() == attacker && Object.op_Implicit((Object)(object)((Component)allCharacter).GetComponent<Player>())) { flag5 = true; } } if (!flag5) { PrivateArea.CheckAccess(((Component)__instance).transform.position, 0f, true, false); flag2 = true; return !flag2; } if (!PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, true, false)) { Util.DoWardedAreaEffect(((Component)__instance).transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Warded Area", 0, (Sprite)null); flag2 = true; return !flag2; } } Debug.Log((object)"wnt check nobuilddamage"); if (Util.RestrictionCheck("nobuilddamage")) { flag2 = true; Util.DoPrivateAreaEffect(((Component)__instance).transform.position + Vector3.up * 0.5f); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } return !flag2; } } [HarmonyPatch(typeof(ItemDrop), "Interact")] public static class NoDropInteraction_Patch { private static bool Prefix(ItemDrop __instance) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { return true; } bool flag = false; if (Client.Ward.Drop && PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, true, false) && !PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, true, false)) { Util.DoWardedAreaEffect(((Component)__instance).transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Warded Area", 0, (Sprite)null); flag = true; return !flag; } if (Util.RestrictionCheck("noitempickup")) { flag = true; Util.DoPrivateAreaEffect(((Component)__instance).transform.position + Vector3.up * 0.5f); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } return !flag; } } [HarmonyPatch(typeof(Player), "AutoPickup")] public static class NoAutoPickup_Patch { private static bool Prefix(Player __instance) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { return true; } bool flag = false; Vector3 position = ((Component)__instance).transform.position; if (Client.Ward.Pickup && PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, true, false) && !PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, false, false)) { flag = true; return !flag; } if (Util.RestrictionCheck("noitempickup")) { flag = true; } return !flag; } } [HarmonyPatch(typeof(InventoryGrid), "OnLeftClick")] public static class No_Inventory_Ctrl_Left_Click { private static bool Prefix(InventoryGrid __instance) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { return true; } bool flag = false; if (Object.op_Implicit((Object)(object)Player.m_localPlayer) && (Input.GetKey((KeyCode)306) || Input.GetKey((KeyCode)305))) { if (Client.Ward.Drop && PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, true, false) && !PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, true, false)) { Util.DoWardedAreaEffect(((Component)Player.m_localPlayer).transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Warded Area", 0, (Sprite)null); flag = true; return !flag; } if (Util.RestrictionCheck("noitemdrop") && (Input.GetKey((KeyCode)306) || Input.GetKey((KeyCode)305))) { flag = true; Util.DoPrivateAreaEffect(((Component)Player.m_localPlayer).transform.position + Vector3.up * 0.5f); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } } return !flag; } } [HarmonyPatch(typeof(InventoryGui), "OnDropOutside")] public static class InventoryGui_No_Drop_Patch { private static bool Prefix(InventoryGui __instance) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) if (Util.isServer()) { return true; } bool flag = false; if (Client.Ward.Drop && PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, true, false) && !PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, true, false)) { bool flag2 = PrivateArea.CheckAccess(((Component)Player.m_localPlayer).transform.position, 0f, true, false); long playerID = Player.m_localPlayer.GetPlayerID(); Util.DoWardedAreaEffect(((Component)Player.m_localPlayer).transform.position); MessageHud.instance.ShowMessage((MessageType)1, "This is a Warded Area", 0, (Sprite)null); flag = true; return !flag; } if (Util.RestrictionCheck("noitemdrop")) { flag = true; Util.DoPrivateAreaEffect(((Component)Player.m_localPlayer).transform.position + Vector3.up * 0.5f); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } return !flag; } } [HarmonyPatch(typeof(Character), "Damage")] public static class Damage_Modifier { public static void Prefix(Character __instance, HitData hit, ZNetView ___m_nview) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Invalid comparison between Unknown and I4 //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Invalid comparison between Unknown and I4 if ((int)__instance.m_faction > 0) { Debug.Log((object)"A monster is being attacked!"); if (Util.RestrictionCheckNone(__instance, "damagemultipliertomobs") && (int)__instance.m_faction > 0) { float num = Util.RestrictionCheckFloatReturnNone(__instance, "damagemultipliertomobs"); Debug.Log((object)$"Multiplier: {num}"); hit.m_damage.m_damage *= num; hit.m_damage.m_blunt *= num; hit.m_damage.m_slash *= num; hit.m_damage.m_pierce *= num; hit.m_damage.m_chop *= num; hit.m_damage.m_pickaxe *= num; hit.m_damage.m_fire *= num; hit.m_damage.m_frost *= num; hit.m_damage.m_lightning *= num; hit.m_damage.m_poison *= num; hit.m_damage.m_spirit *= num; } } else if ((int)__instance.m_faction == 0) { Debug.Log((object)"A player is being Attacked!"); if (Util.RestrictionCheckNone(__instance, "damagemultipliertoplayers")) { float num2 = Util.RestrictionCheckFloatReturnNone(__instance, "damagemultipliertoplayers"); Debug.Log((object)$"Mutliplier: {num2}"); hit.m_damage.m_damage *= num2; hit.m_damage.m_blunt *= num2; hit.m_damage.m_slash *= num2; hit.m_damage.m_pierce *= num2; hit.m_damage.m_chop *= num2; hit.m_damage.m_pickaxe *= num2; hit.m_damage.m_fire *= num2; hit.m_damage.m_frost *= num2; hit.m_damage.m_lightning *= num2; hit.m_damage.m_poison *= num2; hit.m_damage.m_spirit *= num2; } } } } [HarmonyPatch(typeof(Destructible), "Damage")] public static class Destructible_Modifier { public static void Prefix(Destructible __instance, HitData hit) { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) if (!Util.isServer()) { if (Util.RestrictionCheck("nodamagetotrees")) { float num = 0f; hit.m_damage.m_damage *= num; hit.m_damage.m_blunt *= num; hit.m_damage.m_slash *= num; hit.m_damage.m_pierce *= num; hit.m_damage.m_chop *= num; hit.m_damage.m_pickaxe *= num; hit.m_damage.m_fire *= num; hit.m_damage.m_frost *= num; hit.m_damage.m_lightning *= num; hit.m_damage.m_poison *= num; hit.m_damage.m_spirit *= num; Util.DoPrivateAreaEffect(((Component)Player.m_localPlayer).transform.position + Vector3.up * 0.5f); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } else if (Util.RestrictionCheck("damagemultipliertotrees")) { float num2 = Util.RestrictionCheckFloatReturn("damagemultipliertotrees"); hit.m_damage.m_damage *= num2; hit.m_damage.m_blunt *= num2; hit.m_damage.m_slash *= num2; hit.m_damage.m_pierce *= num2; hit.m_damage.m_chop *= num2; hit.m_damage.m_pickaxe *= num2; hit.m_damage.m_fire *= num2; hit.m_damage.m_frost *= num2; hit.m_damage.m_lightning *= num2; hit.m_damage.m_poison *= num2; hit.m_damage.m_spirit *= num2; } } } } [HarmonyPatch(typeof(TreeBase), "Damage")] public static class TreeBase_Modifier { public static void Prefix(TreeBase __instance, HitData hit) { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) if (!Util.isServer()) { if (Util.RestrictionCheck("nodamagetotrees")) { float num = 0f; hit.m_damage.m_damage *= num; hit.m_damage.m_blunt *= num; hit.m_damage.m_slash *= num; hit.m_damage.m_pierce *= num; hit.m_damage.m_chop *= num; hit.m_damage.m_pickaxe *= num; hit.m_damage.m_fire *= num; hit.m_damage.m_frost *= num; hit.m_damage.m_lightning *= num; hit.m_damage.m_poison *= num; hit.m_damage.m_spirit *= num; Util.DoPrivateAreaEffect(((Component)Player.m_localPlayer).transform.position + Vector3.up * 0.5f); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } else if (Util.RestrictionCheck("damagemultipliertotrees")) { float num2 = Util.RestrictionCheckFloatReturn("damagemultipliertotrees"); hit.m_damage.m_damage *= num2; hit.m_damage.m_blunt *= num2; hit.m_damage.m_slash *= num2; hit.m_damage.m_pierce *= num2; hit.m_damage.m_chop *= num2; hit.m_damage.m_pickaxe *= num2; hit.m_damage.m_fire *= num2; hit.m_damage.m_frost *= num2; hit.m_damage.m_lightning *= num2; hit.m_damage.m_poison *= num2; hit.m_damage.m_spirit *= num2; } } } } [HarmonyPatch(typeof(TreeLog), "Damage")] public static class TreeLog_Modifier { public static void Prefix(TreeLog __instance, HitData hit) { //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) if (!Util.isServer()) { if (Util.RestrictionCheck("nodamagetotrees")) { float num = 0f; hit.m_damage.m_damage *= num; hit.m_damage.m_blunt *= num; hit.m_damage.m_slash *= num; hit.m_damage.m_pierce *= num; hit.m_damage.m_chop *= num; hit.m_damage.m_pickaxe *= num; hit.m_damage.m_fire *= num; hit.m_damage.m_frost *= num; hit.m_damage.m_lightning *= num; hit.m_damage.m_poison *= num; hit.m_damage.m_spirit *= num; Util.DoPrivateAreaEffect(((Component)Player.m_localPlayer).transform.position + Vector3.up * 0.5f); MessageHud.instance.ShowMessage((MessageType)1, "This is a Private Area", 0, (Sprite)null); } else if (Util.RestrictionCheck("damagemultipliertotrees")) { float num2 = Util.RestrictionCheckFloatReturn("damagemultipliertotrees"); hit.m_damage.m_damage *= num2; hit.m_damage.m_blunt *= num2; hit.m_damage.m_slash *= num2; hit.m_damage.m_pierce *= num2; hit.m_damage.m_chop *= num2; hit.m_damage.m_pickaxe *= num2; hit.m_damage.m_fire *= num2; hit.m_damage.m_frost *= num2; hit.m_damage.m_lightning *= num2; hit.m_damage.m_poison *= num2; hit.m_damage.m_spirit *= num2; } } } } public static void FixedUpdate() { //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_0240: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Expected O, but got Unknown if (ZonePermissions.EffectTick > 0) { ZonePermissions.EffectTick--; } if (ZonePermissions.HealTick > 0) { ZonePermissions.HealTick--; } if (ZonePermissions.DamageTick > 0) { ZonePermissions.DamageTick--; } Player localPlayer = Player.m_localPlayer; if (!((Object)(object)localPlayer != (Object)null)) { return; } ZoneHandler.Zone zone = default(ZoneHandler.Zone); ZoneHandler.ZoneTypes zoneTypes = new ZoneHandler.ZoneTypes(); List<ZoneHandler.Zone> list = ZoneHandler.ListOccupiedZones(((Component)localPlayer).transform.position); if (list.Count == 0) { zoneTypes = ZoneHandler.FindZoneType("wilderness"); } else { zone = ZoneHandler.TopZone(list); zoneTypes = ZoneHandler.FindZoneType(zone.Type); } string admins = zoneTypes.Admins; string configurations = zoneTypes.Configurations; if (admins.Contains(ZonePermissions.MySteamID)) { return; } if (configurations.ToLower().Contains("pushaway")) { Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(zone.Position.x, ((Component)localPlayer).transform.position.y, zone.Position.y); Vector3 position = ((Component)localPlayer).transform.position; Vector3 val2 = ((Component)localPlayer).transform.position - val; Vector3 val3 = position + ((Vector3)(ref val2)).normalized * 0.15f; ((Component)localPlayer).transform.position = new Vector3(val3.x, ((Component)localPlayer).transform.position.y, val3.z); } if (configurations.ToLower().Contains("periodicdamage") && ZonePermissions.DamageTick <= 0) { ZonePermissions.DamageTick = 100; string text = configurations.ToLower(); int num = text.IndexOf("periodicdamage(") + "periodicdamage(".Length; string text2 = ""; for (int i = num; i < num + 30 && text[i] != ')'; i++) { text2 += text[i]; } int result = 0; HitData val4 = new HitData(); string[] array = text2.Split(new char[1] { ',' }); if (array.Count() == 2) { int.TryParse(array[1], out result); if (array[0].ToLower() == "fire") { val4.m_damage.m_fire = result; } else if (array[0].ToLower() == "frost") { val4.m_damage.m_frost = result; } else if (array[0].ToLower() == "poison") { val4.m_damage.m_poison = result; } else if (array[0].ToLower() == "lightning") { val4.m_damage.m_lightning = result; } else if (array[0].ToLower() == "pierce") { val4.m_damage.m_pierce = result; } else if (array[0].ToLower() == "blunt") { val4.m_damage.m_blunt = result; } else if (array[0].ToLower() == "slash") { val4.m_damage.m_slash = result; } else if (array[0].ToLower() == "damage") { val4.m_damage.m_damage = result; } else { val4.m_damage.m_fire = result; } } else { int.TryParse(text2, out result); val4.m_damage.m_fire = result; } ((Character)localPlayer).Damage(val4); } if (configurations.ToLower().Contains("periodicheal") && ZonePermissions.HealTick <= 0) { ZonePermissions.HealTick = 50; string text3 = configurations.ToLower(); int num2 = text3.IndexOf("periodicheal(") + "periodicheal(".Length; string text4 = ""; for (int j = num2; j < num2 + 20 && text3[j] != ')'; j++) { text4 += text3[j]; } int result2 = 0; int.TryParse(text4, out result2); ((Character)localPlayer).Heal((float)result2, true); } } } public static class ZoneHandler { public class ZoneTypes { public string Name = "Unknown"; public bool PVP = false; public bool PVPEnforce = false; public bool ShowPosition = true; public bool PositionEnforce = false; public string Admins = "null"; public string Configurations = "none"; } public struct Zone { public int ID; public string Name; public string Type; public int Priority; public string Shape; public Vector2 Position; public float Radius; public Zone(int _ID, string _Name, string _Type, int _Priority, string _Shape, Vector2 _Position, float _Radius) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) ID = _ID; Name = _Name; Type = _Type; Priority = _Priority; Shape = _Shape; Position = _Position; Radius = _Radius; } } public static int CurrentZoneID = -2; public static List<Zone> Zones = new List<Zone>(); public static List<ZoneTypes> ZoneT = new List<ZoneTypes>(); public static void _debug(Zone z) { //IL_003d: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)$" {z.ID} ({z.Name}, {z.Type}, {z.Priority}, {z.Position}, {z.Radius})"); } public static void _debug(List<Zone> z) { Debug.Log((object)"Loaded Zone Data: "); Debug.Log((object)(" Zone Cnt: " + z.Count)); foreach (Zone item in z) { _debug(item); } } public static void _debug(ZoneTypes zt) { Debug.Log((object)$" Type: {zt.Name} -> [ {zt.PVP}, {zt.PVPEnforce}, {zt.ShowPosition}, {zt.PositionEnforce}, [{zt.Admins}], [{zt.Configurations}] ]"); } public static void _debug(List<ZoneTypes> zt) { Debug.Log((object)"Loaded Zone Type Data: "); Debug.Log((object)(" Zone Type Cnt: " + zt.Count)); foreach (ZoneTypes item in zt) { _debug(item); } } public static void _debug() { _debug(ZoneT); _debug(Zones); } public static List<Zone> ListOccupiedZones(Vector3 point) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) Vector2 val = default(Vector2); ((Vector2)(ref val))..ctor(point.x, point.z); List<Zone> list = new List<Zone>(); foreach (Zone zone in Zones) { string shape = zone.Shape; string text = shape; if (text == "square") { float radius = zone.Radius; if (zone.Position.x + radius > val.x && zone.Position.x - radius < val.x && zone.Position.y + radius > val.y && zone.Position.y - radius < val.y) { list.Add(zone); } } else if (Vector2.Distance(val, zone.Position) <= zone.Radius) { list.Add(zone); } } return list; } public static Zone TopZone(List<Zone> z) { z.Sort((Zone a, Zone b) => a.Priority.CompareTo(b.Priority)); return z[0]; } public static ZoneTypes FindZoneType(string ztType) { if (!ZoneT.Any((ZoneTypes b) => b.Name == ztType)) { return new ZoneTypes(); } return ZoneT.Find((ZoneTypes a) => a.Name == ztType) ?? new ZoneTypes(); } public static bool Detect(Vector3 position, out bool changed, out Zone z, out ZoneTypes zt) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) List<Zone> list = ListOccupiedZones(position); if (list.Count == 0) { z = default(Zone); zt = new ZoneTypes(); if (CurrentZoneID != -1) { CurrentZoneID = -1; zt = FindZoneType("wilderness"); changed = true; } else { changed = false; } return false; } z = TopZone(list); zt = new ZoneTypes(); if (CurrentZoneID != z.ID) { zt = FindZoneType(z.Type); CurrentZoneID = z.ID; changed = true; } else { changed = false; } return true; } public static ZPackage Serialize(long SteamID = 0L) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) ZPackage val = new ZPackage(); val.Write(ZoneT.Count); foreach (ZoneTypes item in ZoneT) { val.Write(item.Name); val.Write(item.PVP); val.Write(item.PVPEnforce); val.Write(item.ShowPosition); val.Write(item.PositionEnforce); val.Write(item.Admins); val.Write(item.Configurations); } val.Write(Zones.Count); foreach (Zone zone in Zones) { val.Write(zone.ID); val.Write(zone.Name); val.Write(zone.Type); val.Write(zone.Priority); val.Write(zone.Shape); val.Write(zone.Position.x); val.Write(zone.Position.y); val.Write(zone.Radius); } return val; } public static void Deserialize(ZPackage package) { //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) ZoneT.Clear(); int num = package.ReadInt(); for (int i = 0; i < num; i++) { ZoneT.Add(new ZoneTypes { Name = package.ReadString(), PVP = package.ReadBool(), PVPEnforce = package.ReadBool(), ShowPosition = package.ReadBool(), PositionEnforce = package.ReadBool(), Admins = package.ReadString(), Configurations = package.ReadString() }); } Zones.Clear(); int num2 = package.ReadInt(); for (int j = 0; j < num2; j++) { Zones.Add(new Zone { ID = package.ReadInt(), Name = package.ReadString(), Type = package.ReadString(), Priority = package.ReadInt(), Shape = package.ReadString(), Position = new Vector2(package.ReadSingle(), package.ReadSingle()), Radius = package.ReadSingle() }); } } public static void RPC(ZRpc rpc, ZPackage data) { Debug.Log((object)"S2C Zone (RPC Call)"); Debug.Log((object)"Before"); _debug(); Deserialize(data); Debug.Log((object)"After"); _debug(); } public static void RPC(long rpc, ZPackage data) { Debug.Log((object)"S2C Zone (RPC Call)"); Debug.Log((object)"Before"); _debug(); Deserialize(data); Debug.Log((object)"After"); _debug(); } public static void LoadZoneData(string ZonePath) { //IL_02bc: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02c4: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)("Loading zone file: " + ZonePath)); ZoneT.Clear(); Zones.Clear(); int num = 0; string[] array = File.ReadAllLines(ZonePath); foreach (string text in array) { if (string.IsNullOrWhiteSpace(text) || text[0] == '#') { continue; } string[] array2 = text.Split(new char[1] { ' ' }); if (array2[0].ToLower() == "type:") { Debug.Log((object)("Loading Type: " + array2[1])); ZoneTypes zoneTypes = new ZoneTypes { Name = array2[1] }; if (array2.Length >= 3) { zoneTypes.PVP = bool.Parse(array2[2]); } if (array2.Length >= 4) { zoneTypes.PVPEnforce = bool.Parse(array2[3]); } if (array2.Length >= 5) { zoneTypes.ShowPosition = bool.Parse(array2[4]); } if (array2.Length >= 6) { zoneTypes.PositionEnforce = bool.Parse(array2[5]); } ZoneT.Add(zoneTypes); } else if (array2[0].ToLower() == "configuration:") { string text2 = text.Replace(": ", "|"); string[] array3 = text2.Replace(" | ", "|").Split(new char[1] { '|' }); ZoneTypes zoneTypes2 = FindZoneType(array3[1]); if (zoneTypes2.Name.ToLower() != array3[1].ToString().ToLower()) { Debug.Log((object)("ERROR: While applying custom configuration for the Zone Type: " + array3[1] + ",")); Debug.Log((object)("Zone Type: " + array3[1] + " Does not exist in the " + ZonePermissions.DefaultZonePath + " file!")); return; } zoneTypes2.Admins = array3[2]; zoneTypes2.Configurations = array3[3]; } else if (array2.Length != 7) { Debug.Log((object)("Zone " + text + " is not correctly formated!")); } else { Debug.Log((object)("Loading Zone: " + array2[0])); Zone item = default(Zone); item.Name = array2[0]; item.Type = array2[1]; item.Priority = int.Parse(array2[2]); item.Shape = array2[3]; Vector2 val = Vector2.op_Implicit(default(Vector3)); CultureInfo provider = new CultureInfo("en-US"); item.Position = new Vector2(Convert.ToSingle(array2[4], provider), Convert.ToSingle(array2[5], provider)); item.Radius = Convert.ToSingle(array2[6], provider); item.ID = num; Zones.Add(item); num++; } } _debug(); } }