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 Datys Professions v7.3.1
plugins/Datys_Professions.dll
Decompiled 7 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Concurrent; using System.Collections.Generic; using System.Collections.ObjectModel; using System.ComponentModel; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Linq.Expressions; using System.Net; using System.Net.Sockets; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using System.Threading; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CreatureManager; using HarmonyLib; using HarmonyLib.Public.Patching; using ItemManager; using JetBrains.Annotations; using KeyManager; using LocalizationManager; using Microsoft.CodeAnalysis; using Mono.Cecil; using Mono.Cecil.Cil; using Mono.Collections.Generic; using MonoMod.Utils; using PieceManager; using ServerSync; using SkillManager; using SoftReferenceableAssets; using StatusEffectManager; using TMPro; using UnityEngine; using UnityEngine.Diagnostics; using UnityEngine.Rendering; using UnityEngine.UI; using YamlDotNet.Core; using YamlDotNet.Core.Events; using YamlDotNet.Core.Tokens; using YamlDotNet.Helpers; using YamlDotNet.Serialization; using YamlDotNet.Serialization.Converters; using YamlDotNet.Serialization.EventEmitters; using YamlDotNet.Serialization.NamingConventions; using YamlDotNet.Serialization.NodeDeserializers; using YamlDotNet.Serialization.NodeTypeResolvers; using YamlDotNet.Serialization.ObjectFactories; using YamlDotNet.Serialization.ObjectGraphTraversalStrategies; using YamlDotNet.Serialization.ObjectGraphVisitors; using YamlDotNet.Serialization.Schemas; using YamlDotNet.Serialization.TypeInspectors; using YamlDotNet.Serialization.TypeResolvers; using YamlDotNet.Serialization.Utilities; using YamlDotNet.Serialization.ValueDeserializers; [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = "")] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Datys_Professions")] [assembly: CompilationRelaxations(8)] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("Datys")] [assembly: AssemblyProduct("Datys_Professions")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: AssemblyFileVersion("7.3.0")] [assembly: AssemblyDescription("")] [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: ComVisible(false)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("7.3.0.0")] [module: UnverifiableCode] internal class <Module> { internal struct \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e { internal uint \u202e\u206a\u206f\u206f\u202b\u200c\u202d\u206a\u200d\u202b\u200b\u206d\u200d\u200d\u206b\u206a\u200f\u200d\u206b\u206b\u206e\u206a\u200e\u200f\u206f\u202c\u202c\u202e\u200c\u202c\u202e\u200e\u200e\u206b\u200b\u206e\u206d\u200f\u200d\u202e\u202e; internal void \u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e() { \u202e\u206a\u206f\u206f\u202b\u200c\u202d\u206a\u200d\u202b\u200b\u206d\u200d\u200d\u206b\u206a\u200f\u200d\u206b\u206b\u206e\u206a\u200e\u200f\u206f\u202c\u202c\u202e\u200c\u202c\u202e\u200e\u200e\u206b\u200b\u206e\u206d\u200f\u200d\u202e\u202e = 1024u; } internal uint \u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(\u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e rangeDecoder) { uint num = (rangeDecoder.\u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e >> 11) * \u202e\u206a\u206f\u206f\u202b\u200c\u202d\u206a\u200d\u202b\u200b\u206d\u200d\u200d\u206b\u206a\u200f\u200d\u206b\u206b\u206e\u206a\u200e\u200f\u206f\u202c\u202c\u202e\u200c\u202c\u202e\u200e\u200e\u206b\u200b\u206e\u206d\u200f\u200d\u202e\u202e; while (true) { int num2 = -1509796492; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0x950FE341u) % 11) { case 5u: break; case 8u: rangeDecoder.\u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e -= num; \u202e\u206a\u206f\u206f\u202b\u200c\u202d\u206a\u200d\u202b\u200b\u206d\u200d\u200d\u206b\u206a\u200f\u200d\u206b\u206b\u206e\u206a\u200e\u200f\u206f\u202c\u202c\u202e\u200c\u202c\u202e\u200e\u200e\u206b\u200b\u206e\u206d\u200f\u200d\u202e\u202e -= \u202e\u206a\u206f\u206f\u202b\u200c\u202d\u206a\u200d\u202b\u200b\u206d\u200d\u200d\u206b\u206a\u200f\u200d\u206b\u206b\u206e\u206a\u200e\u200f\u206f\u202c\u202c\u202e\u200c\u202c\u202e\u200e\u200e\u206b\u200b\u206e\u206d\u200f\u200d\u202e\u202e >> 5; num2 = (int)((num3 * 864039495) ^ 0x64FBE02D); continue; case 7u: rangeDecoder.\u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e = (rangeDecoder.\u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e << 8) | (byte)rangeDecoder.\u202a\u206b\u200c\u202b\u202e\u206f\u200d\u200e\u202c\u202e\u202c\u206b\u202e\u200c\u200f\u206b\u202b\u202d\u206e\u202c\u206f\u202b\u202c\u202e\u206a\u206e\u200c\u200b\u200f\u202a\u206a\u200c\u206e\u202b\u206e\u202c\u206f\u202e\u200b\u202b\u202e.ReadByte(); rangeDecoder.\u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e <<= 8; num2 = (int)((num3 * 312321158) ^ 0x15780DB3); continue; case 0u: rangeDecoder.\u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e = num; num2 = ((int)num3 * -1570310461) ^ 0xF5A0023; continue; case 10u: { \u202e\u206a\u206f\u206f\u202b\u200c\u202d\u206a\u200d\u202b\u200b\u206d\u200d\u200d\u206b\u206a\u200f\u200d\u206b\u206b\u206e\u206a\u200e\u200f\u206f\u202c\u202c\u202e\u200c\u202c\u202e\u200e\u200e\u206b\u200b\u206e\u206d\u200f\u200d\u202e\u202e += 2048 - \u202e\u206a\u206f\u206f\u202b\u200c\u202d\u206a\u200d\u202b\u200b\u206d\u200d\u200d\u206b\u206a\u200f\u200d\u206b\u206b\u206e\u206a\u200e\u200f\u206f\u202c\u202c\u202e\u200c\u202c\u202e\u200e\u200e\u206b\u200b\u206e\u206d\u200f\u200d\u202e\u202e >> 5; int num6; int num7; if (rangeDecoder.\u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e < 16777216) { num6 = 2141636055; num7 = num6; } else { num6 = 1580111331; num7 = num6; } num2 = num6 ^ (int)(num3 * 907534386); continue; } case 9u: { int num8; int num9; if (rangeDecoder.\u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e >= 16777216) { num8 = 548481730; num9 = num8; } else { num8 = 1945314602; num9 = num8; } num2 = num8 ^ ((int)num3 * -247627701); continue; } case 3u: { int num4; int num5; if (rangeDecoder.\u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e >= num) { num4 = -156918177; num5 = num4; } else { num4 = -763133580; num5 = num4; } num2 = num4 ^ (int)(num3 * 1515962437); continue; } case 6u: rangeDecoder.\u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e -= num; num2 = -1633623473; continue; case 4u: return 0u; case 2u: rangeDecoder.\u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e = (rangeDecoder.\u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e << 8) | (byte)rangeDecoder.\u202a\u206b\u200c\u202b\u202e\u206f\u200d\u200e\u202c\u202e\u202c\u206b\u202e\u200c\u200f\u206b\u202b\u202d\u206e\u202c\u206f\u202b\u202c\u202e\u206a\u206e\u200c\u200b\u200f\u202a\u206a\u200c\u206e\u202b\u206e\u202c\u206f\u202e\u200b\u202b\u202e.ReadByte(); rangeDecoder.\u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e <<= 8; num2 = (int)(num3 * 940955477) ^ -130670755; continue; default: return 1u; } break; } } } } internal struct \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e { internal readonly \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] \u200e\u202b\u202c\u206b\u206b\u202c\u202a\u200b\u200e\u206e\u206a\u202d\u206c\u202c\u206e\u202b\u200f\u206d\u206a\u202b\u202c\u200e\u202a\u206b\u200b\u206f\u206a\u206c\u202e\u202d\u200c\u200e\u206d\u200d\u202a\u202d\u206d\u206a\u202b\u206d\u202e; internal readonly int \u200b\u206b\u200e\u202b\u202e\u202b\u200e\u200b\u202b\u206b\u206d\u206f\u200f\u200b\u206b\u202d\u206f\u200c\u200d\u200e\u202a\u206a\u206e\u202d\u200e\u206f\u206c\u200f\u206a\u200e\u206b\u200f\u200f\u202b\u202b\u200b\u202a\u200e\u200f\u200f\u202e; internal \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e(int numBitLevels) { \u200b\u206b\u200e\u202b\u202e\u202b\u200e\u200b\u202b\u206b\u206d\u206f\u200f\u200b\u206b\u202d\u206f\u200c\u200d\u200e\u202a\u206a\u206e\u202d\u200e\u206f\u206c\u200f\u206a\u200e\u206b\u200f\u200f\u202b\u202b\u200b\u202a\u200e\u200f\u200f\u202e = numBitLevels; \u200e\u202b\u202c\u206b\u206b\u202c\u202a\u200b\u200e\u206e\u206a\u202d\u206c\u202c\u206e\u202b\u200f\u206d\u206a\u202b\u202c\u200e\u202a\u206b\u200b\u206f\u206a\u206c\u202e\u202d\u200c\u200e\u206d\u200d\u202a\u202d\u206d\u206a\u202b\u206d\u202e = new \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[1 << numBitLevels]; } internal void \u200c\u200f\u206d\u206c\u200e\u206b\u200b\u202a\u202d\u206b\u200d\u200b\u202d\u200f\u202c\u202b\u206a\u200d\u202c\u202b\u200b\u206c\u202d\u200f\u206e\u200f\u202c\u200f\u200b\u206b\u200b\u206e\u200f\u202b\u200c\u206d\u206b\u200f\u206a\u202e() { uint num = 1u; while (true) { int num2 = 634446447; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0x5DABED08u) % 6) { case 5u: break; default: return; case 0u: { int num4; if (num < 1 << \u200b\u206b\u200e\u202b\u202e\u202b\u200e\u200b\u202b\u206b\u206d\u206f\u200f\u200b\u206b\u202d\u206f\u200c\u200d\u200e\u202a\u206a\u206e\u202d\u200e\u206f\u206c\u200f\u206a\u200e\u206b\u200f\u200f\u202b\u202b\u200b\u202a\u200e\u200f\u200f\u202e) { num2 = 2030365814; num4 = num2; } else { num2 = 1660456034; num4 = num2; } continue; } case 3u: num++; num2 = (int)(num3 * 1230441251) ^ -1853022711; continue; case 2u: \u200e\u202b\u202c\u206b\u206b\u202c\u202a\u200b\u200e\u206e\u206a\u202d\u206c\u202c\u206e\u202b\u200f\u206d\u206a\u202b\u202c\u200e\u202a\u206b\u200b\u206f\u206a\u206c\u202e\u202d\u200c\u200e\u206d\u200d\u202a\u202d\u206d\u206a\u202b\u206d\u202e[num].\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); num2 = 114208061; continue; case 1u: num2 = (int)(num3 * 1757643174) ^ -535563268; continue; case 4u: return; } break; } } } internal uint \u202c\u202b\u206c\u206c\u202d\u202d\u202a\u206e\u206f\u200d\u202a\u206f\u206c\u206e\u200c\u206b\u200c\u202e\u200b\u202c\u206d\u202b\u202a\u206d\u202e\u206a\u206b\u206c\u200b\u206b\u202d\u200c\u206b\u202b\u206f\u206f\u206c\u200c\u206b\u202e(\u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e rangeDecoder) { uint num = 1u; int num2 = \u200b\u206b\u200e\u202b\u202e\u202b\u200e\u200b\u202b\u206b\u206d\u206f\u200f\u200b\u206b\u202d\u206f\u200c\u200d\u200e\u202a\u206a\u206e\u202d\u200e\u206f\u206c\u200f\u206a\u200e\u206b\u200f\u200f\u202b\u202b\u200b\u202a\u200e\u200f\u200f\u202e; while (true) { int num3; int num4; if (num2 <= 0) { num3 = -320626260; num4 = num3; } else { num3 = -913716710; num4 = num3; } while (true) { uint num5; switch ((num5 = (uint)num3 ^ 0xB3E1C238u) % 5) { case 2u: num3 = -913716710; continue; case 3u: num = (num << 1) + \u200e\u202b\u202c\u206b\u206b\u202c\u202a\u200b\u200e\u206e\u206a\u202d\u206c\u202c\u206e\u202b\u200f\u206d\u206a\u202b\u202c\u200e\u202a\u206b\u200b\u206f\u206a\u206c\u202e\u202d\u200c\u200e\u206d\u200d\u202a\u202d\u206d\u206a\u202b\u206d\u202e[num].\u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(rangeDecoder); num3 = -1952290770; continue; case 0u: num2--; num3 = ((int)num5 * -667902704) ^ -1808977499; continue; case 1u: break; default: return num - (uint)(1 << \u200b\u206b\u200e\u202b\u202e\u202b\u200e\u200b\u202b\u206b\u206d\u206f\u200f\u200b\u206b\u202d\u206f\u200c\u200d\u200e\u202a\u206a\u206e\u202d\u200e\u206f\u206c\u200f\u206a\u200e\u206b\u200f\u200f\u202b\u202b\u200b\u202a\u200e\u200f\u200f\u202e); } break; } } } internal uint \u200f\u202c\u206d\u200e\u206e\u200c\u202e\u202e\u202c\u206b\u206b\u206a\u202e\u202b\u202d\u202d\u202a\u206a\u206a\u206a\u202d\u206e\u200e\u200e\u202e\u202a\u206c\u202b\u206f\u202c\u200f\u202d\u206d\u202b\u200d\u206c\u200f\u206a\u200d\u206e\u202e(\u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e rangeDecoder) { uint num = 1u; uint num7 = default(uint); uint num4 = default(uint); int num5 = default(int); while (true) { int num2 = -57603700; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0xDAFEECF6u) % 11) { case 9u: break; case 2u: num7 = \u200e\u202b\u202c\u206b\u206b\u202c\u202a\u200b\u200e\u206e\u206a\u202d\u206c\u202c\u206e\u202b\u200f\u206d\u206a\u202b\u202c\u200e\u202a\u206b\u200b\u206f\u206a\u206c\u202e\u202d\u200c\u200e\u206d\u200d\u202a\u202d\u206d\u206a\u202b\u206d\u202e[num].\u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(rangeDecoder); num2 = -581521304; continue; case 10u: num4 |= num7 << num5; num2 = ((int)num3 * -1734293047) ^ 0x75C1ECFC; continue; case 3u: num5++; num2 = ((int)num3 * -1993165746) ^ 0x4EDA6EC5; continue; case 7u: num4 = 0u; num2 = ((int)num3 * -1972685346) ^ -351535445; continue; case 6u: num += num7; num2 = ((int)num3 * -2118783792) ^ -1814172133; continue; case 1u: num <<= 1; num2 = ((int)num3 * -758541991) ^ -114555115; continue; case 4u: { int num6; if (num5 >= \u200b\u206b\u200e\u202b\u202e\u202b\u200e\u200b\u202b\u206b\u206d\u206f\u200f\u200b\u206b\u202d\u206f\u200c\u200d\u200e\u202a\u206a\u206e\u202d\u200e\u206f\u206c\u200f\u206a\u200e\u206b\u200f\u200f\u202b\u202b\u200b\u202a\u200e\u200f\u200f\u202e) { num2 = -1544069113; num6 = num2; } else { num2 = -1049919395; num6 = num2; } continue; } case 0u: num5 = 0; num2 = (int)((num3 * 600218172) ^ 0x14A81CDF); continue; case 8u: num2 = (int)(num3 * 1296485158) ^ -1418962423; continue; default: return num4; } break; } } } internal static uint \u206d\u200b\u200e\u206f\u206d\u206a\u200e\u202a\u200f\u200d\u206e\u200b\u200e\u200f\u200e\u200b\u206d\u202b\u206b\u200b\u202d\u200c\u200b\u206a\u206f\u206b\u206e\u200b\u202d\u206f\u202d\u206a\u200e\u202d\u206b\u200c\u206c\u202e\u202b\u206b\u202e(\u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] Models, uint startIndex, \u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e rangeDecoder, int NumBitLevels) { uint num = 1u; uint num2 = 0u; int num3 = 0; uint num7 = default(uint); while (true) { int num4; int num5; if (num3 >= NumBitLevels) { num4 = 892472191; num5 = num4; } else { num4 = 982162372; num5 = num4; } while (true) { uint num6; switch ((num6 = (uint)num4 ^ 0x4961A875u) % 6) { case 0u: num4 = 982162372; continue; case 5u: num7 = Models[startIndex + num].\u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(rangeDecoder); num4 = 168378942; continue; case 1u: num3++; num4 = ((int)num6 * -514094202) ^ -1309474507; continue; case 3u: num <<= 1; num += num7; num2 |= num7 << num3; num4 = (int)(num6 * 1661330712) ^ -1420972610; continue; case 4u: break; default: return num2; } break; } } } } internal class \u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e { internal uint \u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e; internal uint \u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e; internal Stream \u202a\u206b\u200c\u202b\u202e\u206f\u200d\u200e\u202c\u202e\u202c\u206b\u202e\u200c\u200f\u206b\u202b\u202d\u206e\u202c\u206f\u202b\u202c\u202e\u206a\u206e\u200c\u200b\u200f\u202a\u206a\u200c\u206e\u202b\u206e\u202c\u206f\u202e\u200b\u202b\u202e; internal void \u202c\u202c\u206c\u202a\u206a\u206d\u202b\u200f\u202a\u206f\u200f\u206a\u200c\u202c\u200f\u202e\u200d\u200c\u202e\u206c\u206d\u200d\u206f\u200d\u206b\u200f\u200b\u202d\u202c\u200e\u206c\u202e\u202b\u200f\u206f\u202a\u200c\u200f\u202c\u206b\u202e(Stream stream) { \u202a\u206b\u200c\u202b\u202e\u206f\u200d\u200e\u202c\u202e\u202c\u206b\u202e\u200c\u200f\u206b\u202b\u202d\u206e\u202c\u206f\u202b\u202c\u202e\u206a\u206e\u200c\u200b\u200f\u202a\u206a\u200c\u206e\u202b\u206e\u202c\u206f\u202e\u200b\u202b\u202e = stream; int num3 = default(int); while (true) { int num = 1971194389; while (true) { uint num2; switch ((num2 = (uint)num ^ 0x18661A78u) % 7) { case 4u: break; default: return; case 1u: \u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e = 0u; num = (int)(num2 * 152978272) ^ -703757614; continue; case 0u: \u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e = uint.MaxValue; num3 = 0; num = ((int)num2 * -355643718) ^ -2025354896; continue; case 6u: num = (int)((num2 * 1554741917) ^ 0xDCB791F); continue; case 5u: \u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e = (\u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e << 8) | (byte)\u202a\u206b\u200c\u202b\u202e\u206f\u200d\u200e\u202c\u202e\u202c\u206b\u202e\u200c\u200f\u206b\u202b\u202d\u206e\u202c\u206f\u202b\u202c\u202e\u206a\u206e\u200c\u200b\u200f\u202a\u206a\u200c\u206e\u202b\u206e\u202c\u206f\u202e\u200b\u202b\u202e.ReadByte(); num3++; num = 1635495939; continue; case 2u: { int num4; if (num3 < 5) { num = 389078088; num4 = num; } else { num = 1561905895; num4 = num; } continue; } case 3u: return; } break; } } } internal void \u206d\u202d\u200d\u202b\u202c\u202b\u200d\u202e\u200d\u206f\u202d\u202a\u206b\u206c\u200b\u200f\u200f\u202d\u206c\u206f\u200e\u202e\u206b\u200b\u202c\u206c\u200f\u202b\u200f\u206a\u206c\u206e\u202e\u202c\u200f\u206e\u202d\u202d\u202b\u202c\u202e() { \u202a\u206b\u200c\u202b\u202e\u206f\u200d\u200e\u202c\u202e\u202c\u206b\u202e\u200c\u200f\u206b\u202b\u202d\u206e\u202c\u206f\u202b\u202c\u202e\u206a\u206e\u200c\u200b\u200f\u202a\u206a\u200c\u206e\u202b\u206e\u202c\u206f\u202e\u200b\u202b\u202e = null; } internal void \u206c\u206d\u202a\u200c\u202a\u202d\u202e\u202d\u200e\u200d\u200b\u200f\u206e\u200f\u200d\u206e\u202d\u202d\u202c\u206d\u206b\u200d\u206c\u202c\u206a\u200d\u200d\u200b\u200c\u206a\u202c\u200d\u202d\u206a\u202a\u202b\u206d\u206d\u206f\u206f\u202e() { while (true) { int num; int num2; if (\u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e < 16777216) { num = -1964760174; num2 = num; } else { num = -2024902027; num2 = num; } while (true) { uint num3; switch ((num3 = (uint)num ^ 0x9B09384Bu) % 5) { case 4u: num = -1964760174; continue; default: return; case 3u: \u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e = (\u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e << 8) | (byte)\u202a\u206b\u200c\u202b\u202e\u206f\u200d\u200e\u202c\u202e\u202c\u206b\u202e\u200c\u200f\u206b\u202b\u202d\u206e\u202c\u206f\u202b\u202c\u202e\u206a\u206e\u200c\u200b\u200f\u202a\u206a\u200c\u206e\u202b\u206e\u202c\u206f\u202e\u200b\u202b\u202e.ReadByte(); num = -227042428; continue; case 1u: \u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e <<= 8; num = ((int)num3 * -2108718942) ^ 0x7E41389F; continue; case 2u: break; case 0u: return; } break; } } } internal uint \u200b\u206f\u206b\u202e\u206e\u202e\u206f\u202e\u202c\u202d\u206a\u200f\u200d\u200c\u202e\u206e\u200d\u202e\u206f\u206f\u202c\u200d\u200f\u202c\u206b\u206b\u202a\u200f\u202b\u202e\u202a\u200b\u206a\u200d\u206f\u206f\u200e\u206f\u200b\u202e\u202e(int numTotalBits) { uint num = \u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e; uint num5 = default(uint); int num7 = default(int); uint num4 = default(uint); while (true) { int num2 = 1919931047; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0x29B7C7AAu) % 12) { case 0u: break; case 5u: num5 = \u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e; num2 = ((int)num3 * -265300350) ^ 0x5842ACF; continue; case 4u: { int num10; if (num7 > 0) { num2 = 510649810; num10 = num2; } else { num2 = 1998208277; num10 = num2; } continue; } case 7u: num4 = 0u; num7 = numTotalBits; num2 = (int)(num3 * 1746443579) ^ -694141129; continue; case 6u: num5 = (num5 << 8) | (byte)\u202a\u206b\u200c\u202b\u202e\u206f\u200d\u200e\u202c\u202e\u202c\u206b\u202e\u200c\u200f\u206b\u202b\u202d\u206e\u202c\u206f\u202b\u202c\u202e\u206a\u206e\u200c\u200b\u200f\u202a\u206a\u200c\u206e\u202b\u206e\u202c\u206f\u202e\u200b\u202b\u202e.ReadByte(); num2 = (int)(num3 * 1958847558) ^ -1025355525; continue; case 8u: num >>= 1; num2 = 2053648288; continue; case 9u: { int num8; int num9; if (num < 16777216) { num8 = 1140420850; num9 = num8; } else { num8 = 1531428478; num9 = num8; } num2 = num8 ^ (int)(num3 * 1538104890); continue; } case 10u: num7--; num2 = 945377778; continue; case 2u: { uint num6 = num5 - num >> 31; num5 -= num & (num6 - 1); num4 = (num4 << 1) | (1 - num6); num2 = (int)((num3 * 1190794549) ^ 0x1F031D6D); continue; } case 3u: \u206f\u200b\u202d\u206c\u200c\u206d\u202d\u202b\u206f\u206d\u202e\u206e\u200e\u206f\u202c\u206e\u202a\u206d\u200e\u206b\u206d\u200b\u200d\u206e\u206d\u200d\u202d\u200d\u200d\u200f\u206b\u206f\u200f\u202e\u206b\u206a\u202b\u206d\u200b\u200d\u202e = num; \u206d\u206b\u200f\u206d\u200b\u206d\u202e\u200c\u200f\u200e\u206b\u206e\u200d\u206e\u206b\u202d\u202e\u206b\u206e\u200e\u206d\u206b\u206c\u200b\u202a\u202c\u200e\u200d\u200e\u206a\u200f\u202e\u202d\u206a\u202b\u206e\u200b\u206d\u206f\u202e\u202e = num5; num2 = ((int)num3 * -1518493646) ^ -1448391029; continue; case 1u: num <<= 8; num2 = (int)(num3 * 2060706973) ^ -787650299; continue; default: return num4; } break; } } } internal \u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e() { } } internal class \u200c\u202b\u200c\u200e\u202b\u206a\u206d\u200d\u200e\u200b\u200f\u202b\u206e\u200b\u200d\u200f\u202b\u206c\u202e\u202e\u200f\u202c\u200d\u206d\u206b\u202d\u200d\u200c\u206a\u206e\u200e\u202e\u202d\u206a\u202a\u200d\u202c\u202e\u202d\u206c\u202e { internal class \u206d\u206f\u202e\u202a\u202d\u202a\u202c\u200e\u202c\u206a\u206c\u206b\u200e\u202c\u202d\u200e\u202d\u200c\u200c\u202c\u200f\u200e\u206b\u202b\u206e\u202d\u202a\u206a\u206b\u200f\u202a\u206a\u202c\u206e\u200b\u202b\u206b\u206c\u202b\u200d\u202e { internal readonly \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e[] \u206b\u206e\u206a\u202d\u202c\u202e\u200c\u200f\u202a\u206e\u200d\u206e\u202d\u206e\u202e\u200f\u200d\u206e\u206b\u200e\u202a\u200f\u200f\u206b\u206a\u202a\u200b\u202e\u202c\u202e\u200f\u202d\u206a\u206a\u200e\u200d\u200d\u202a\u200f\u200c\u202e = new \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e[16]; internal readonly \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e[] \u202e\u200e\u200c\u200d\u200e\u200f\u206e\u200d\u200c\u200c\u202a\u206a\u206c\u206f\u206c\u200f\u202a\u202d\u200b\u202c\u206f\u202a\u206b\u206a\u202c\u206d\u200b\u200e\u206b\u202c\u200d\u200b\u202a\u202d\u200b\u200e\u206d\u206f\u206d\u202c\u202e = new \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e[16]; internal \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e \u200b\u206f\u206e\u206e\u200d\u200b\u200c\u206a\u202c\u200f\u206e\u200d\u202d\u200d\u200e\u202a\u206d\u206a\u202d\u206d\u202a\u202b\u202d\u202d\u202c\u200b\u202a\u202c\u202a\u202b\u200c\u202e\u200b\u202e\u206d\u200d\u206e\u206f\u206c\u202b\u202e; internal \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e \u200f\u200f\u202d\u202b\u202d\u206a\u200c\u202d\u202b\u200b\u206f\u200b\u206a\u206f\u200f\u202e\u200b\u206e\u206c\u200f\u206b\u202d\u200f\u200c\u202e\u202d\u200c\u202c\u206d\u206e\u202d\u200b\u200d\u202c\u200b\u200c\u206e\u200e\u202b\u206c\u202e; internal \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e \u206e\u200f\u206c\u206f\u200b\u200f\u206d\u202d\u202c\u200e\u206e\u200b\u202e\u202c\u206e\u202e\u206a\u200b\u200f\u200c\u202c\u200b\u200b\u206e\u206a\u206a\u202e\u202a\u200d\u200e\u202c\u206a\u206e\u206d\u200b\u202b\u200e\u200c\u200e\u206b\u202e = new \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e(8); internal uint \u202e\u206d\u200f\u200b\u202d\u200e\u202c\u202c\u202c\u206d\u200c\u202d\u202d\u200c\u202c\u206d\u206e\u202a\u206f\u202b\u206e\u206a\u202a\u206f\u206b\u206f\u206f\u206c\u202a\u206f\u206e\u202e\u202d\u202a\u200d\u202e\u200e\u206f\u206e\u206d\u202e; internal void \u206f\u206e\u206d\u202b\u206d\u200e\u202e\u202c\u202a\u206d\u200d\u206c\u202c\u206b\u200e\u200e\u200d\u202e\u200d\u200b\u200e\u206f\u200d\u200f\u206e\u200c\u202c\u200c\u202d\u202a\u200d\u200c\u206f\u200b\u200c\u202d\u200b\u200c\u206f\u206b\u202e(uint numPosStates) { uint num = \u202e\u206d\u200f\u200b\u202d\u200e\u202c\u202c\u202c\u206d\u200c\u202d\u202d\u200c\u202c\u206d\u206e\u202a\u206f\u202b\u206e\u206a\u202a\u206f\u206b\u206f\u206f\u206c\u202a\u206f\u206e\u202e\u202d\u202a\u200d\u202e\u200e\u206f\u206e\u206d\u202e; while (true) { int num2 = -688215483; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0x88877E2Bu) % 5) { case 0u: break; case 4u: { int num4; if (num >= numPosStates) { num2 = -1465846755; num4 = num2; } else { num2 = -339058563; num4 = num2; } continue; } case 2u: \u206b\u206e\u206a\u202d\u202c\u202e\u200c\u200f\u202a\u206e\u200d\u206e\u202d\u206e\u202e\u200f\u200d\u206e\u206b\u200e\u202a\u200f\u200f\u206b\u206a\u202a\u200b\u202e\u202c\u202e\u200f\u202d\u206a\u206a\u200e\u200d\u200d\u202a\u200f\u200c\u202e[num] = new \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e(3); \u202e\u200e\u200c\u200d\u200e\u200f\u206e\u200d\u200c\u200c\u202a\u206a\u206c\u206f\u206c\u200f\u202a\u202d\u200b\u202c\u206f\u202a\u206b\u206a\u202c\u206d\u200b\u200e\u206b\u202c\u200d\u200b\u202a\u202d\u200b\u200e\u206d\u206f\u206d\u202c\u202e[num] = new \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e(3); num++; num2 = -2063505822; continue; case 1u: num2 = ((int)num3 * -672108408) ^ 0x4DE99C12; continue; default: \u202e\u206d\u200f\u200b\u202d\u200e\u202c\u202c\u202c\u206d\u200c\u202d\u202d\u200c\u202c\u206d\u206e\u202a\u206f\u202b\u206e\u206a\u202a\u206f\u206b\u206f\u206f\u206c\u202a\u206f\u206e\u202e\u202d\u202a\u200d\u202e\u200e\u206f\u206e\u206d\u202e = numPosStates; return; } break; } } } internal void \u206f\u200b\u200c\u202c\u202a\u202e\u202c\u200c\u200e\u202c\u206b\u200b\u202e\u202e\u200b\u206b\u202a\u206a\u200c\u206b\u206d\u202a\u206d\u202d\u202a\u202b\u206d\u200f\u206b\u206d\u202e\u206c\u200f\u200f\u200d\u206d\u206b\u202e\u206e\u206d\u202e() { \u200b\u206f\u206e\u206e\u200d\u200b\u200c\u206a\u202c\u200f\u206e\u200d\u202d\u200d\u200e\u202a\u206d\u206a\u202d\u206d\u202a\u202b\u202d\u202d\u202c\u200b\u202a\u202c\u202a\u202b\u200c\u202e\u200b\u202e\u206d\u200d\u206e\u206f\u206c\u202b\u202e.\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); uint num = 0u; while (true) { int num2; int num3; if (num >= \u202e\u206d\u200f\u200b\u202d\u200e\u202c\u202c\u202c\u206d\u200c\u202d\u202d\u200c\u202c\u206d\u206e\u202a\u206f\u202b\u206e\u206a\u202a\u206f\u206b\u206f\u206f\u206c\u202a\u206f\u206e\u202e\u202d\u202a\u200d\u202e\u200e\u206f\u206e\u206d\u202e) { num2 = 76211878; num3 = num2; } else { num2 = 312361305; num3 = num2; } while (true) { uint num4; switch ((num4 = (uint)num2 ^ 0x23CBB60Fu) % 8) { case 7u: num2 = 312361305; continue; default: return; case 2u: break; case 4u: \u202e\u200e\u200c\u200d\u200e\u200f\u206e\u200d\u200c\u200c\u202a\u206a\u206c\u206f\u206c\u200f\u202a\u202d\u200b\u202c\u206f\u202a\u206b\u206a\u202c\u206d\u200b\u200e\u206b\u202c\u200d\u200b\u202a\u202d\u200b\u200e\u206d\u206f\u206d\u202c\u202e[num].\u200c\u200f\u206d\u206c\u200e\u206b\u200b\u202a\u202d\u206b\u200d\u200b\u202d\u200f\u202c\u202b\u206a\u200d\u202c\u202b\u200b\u206c\u202d\u200f\u206e\u200f\u202c\u200f\u200b\u206b\u200b\u206e\u200f\u202b\u200c\u206d\u206b\u200f\u206a\u202e(); num2 = ((int)num4 * -666706342) ^ 0x676F47AC; continue; case 6u: \u206b\u206e\u206a\u202d\u202c\u202e\u200c\u200f\u202a\u206e\u200d\u206e\u202d\u206e\u202e\u200f\u200d\u206e\u206b\u200e\u202a\u200f\u200f\u206b\u206a\u202a\u200b\u202e\u202c\u202e\u200f\u202d\u206a\u206a\u200e\u200d\u200d\u202a\u200f\u200c\u202e[num].\u200c\u200f\u206d\u206c\u200e\u206b\u200b\u202a\u202d\u206b\u200d\u200b\u202d\u200f\u202c\u202b\u206a\u200d\u202c\u202b\u200b\u206c\u202d\u200f\u206e\u200f\u202c\u200f\u200b\u206b\u200b\u206e\u200f\u202b\u200c\u206d\u206b\u200f\u206a\u202e(); num2 = 750930291; continue; case 1u: \u200f\u200f\u202d\u202b\u202d\u206a\u200c\u202d\u202b\u200b\u206f\u200b\u206a\u206f\u200f\u202e\u200b\u206e\u206c\u200f\u206b\u202d\u200f\u200c\u202e\u202d\u200c\u202c\u206d\u206e\u202d\u200b\u200d\u202c\u200b\u200c\u206e\u200e\u202b\u206c\u202e.\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); num2 = ((int)num4 * -409541149) ^ -1882072031; continue; case 5u: \u206e\u200f\u206c\u206f\u200b\u200f\u206d\u202d\u202c\u200e\u206e\u200b\u202e\u202c\u206e\u202e\u206a\u200b\u200f\u200c\u202c\u200b\u200b\u206e\u206a\u206a\u202e\u202a\u200d\u200e\u202c\u206a\u206e\u206d\u200b\u202b\u200e\u200c\u200e\u206b\u202e.\u200c\u200f\u206d\u206c\u200e\u206b\u200b\u202a\u202d\u206b\u200d\u200b\u202d\u200f\u202c\u202b\u206a\u200d\u202c\u202b\u200b\u206c\u202d\u200f\u206e\u200f\u202c\u200f\u200b\u206b\u200b\u206e\u200f\u202b\u200c\u206d\u206b\u200f\u206a\u202e(); num2 = ((int)num4 * -1382724683) ^ -1292458474; continue; case 3u: num++; num2 = ((int)num4 * -1501894711) ^ -1676989706; continue; case 0u: return; } break; } } } internal uint \u206c\u202c\u200c\u206e\u202b\u206e\u202a\u202b\u206e\u202d\u200d\u202b\u202e\u202a\u202b\u206e\u206a\u202e\u202a\u202b\u200e\u206e\u202a\u206f\u200c\u206f\u200c\u202e\u206f\u206d\u206d\u200c\u206e\u202e\u206d\u206c\u206d\u200b\u200d\u206e\u202e(\u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e rangeDecoder, uint posState) { if (\u200b\u206f\u206e\u206e\u200d\u200b\u200c\u206a\u202c\u200f\u206e\u200d\u202d\u200d\u200e\u202a\u206d\u206a\u202d\u206d\u202a\u202b\u202d\u202d\u202c\u200b\u202a\u202c\u202a\u202b\u200c\u202e\u200b\u202e\u206d\u200d\u206e\u206f\u206c\u202b\u202e.\u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(rangeDecoder) == 0) { goto IL_0011; } goto IL_00e9; IL_00e9: uint num = 8u; int num2 = -167508651; goto IL_0016; IL_0016: while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0xE4B46A2Cu) % 8) { case 6u: break; case 2u: num += \u202e\u200e\u200c\u200d\u200e\u200f\u206e\u200d\u200c\u200c\u202a\u206a\u206c\u206f\u206c\u200f\u202a\u202d\u200b\u202c\u206f\u202a\u206b\u206a\u202c\u206d\u200b\u200e\u206b\u202c\u200d\u200b\u202a\u202d\u200b\u200e\u206d\u206f\u206d\u202c\u202e[posState].\u202c\u202b\u206c\u206c\u202d\u202d\u202a\u206e\u206f\u200d\u202a\u206f\u206c\u206e\u200c\u206b\u200c\u202e\u200b\u202c\u206d\u202b\u202a\u206d\u202e\u206a\u206b\u206c\u200b\u206b\u202d\u200c\u206b\u202b\u206f\u206f\u206c\u200c\u206b\u202e(rangeDecoder); num2 = ((int)num3 * -1868336809) ^ -1443203843; continue; case 1u: { int num4; int num5; if (\u200f\u200f\u202d\u202b\u202d\u206a\u200c\u202d\u202b\u200b\u206f\u200b\u206a\u206f\u200f\u202e\u200b\u206e\u206c\u200f\u206b\u202d\u200f\u200c\u202e\u202d\u200c\u202c\u206d\u206e\u202d\u200b\u200d\u202c\u200b\u200c\u206e\u200e\u202b\u206c\u202e.\u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(rangeDecoder) != 0) { num4 = -622439466; num5 = num4; } else { num4 = -1029536983; num5 = num4; } num2 = num4 ^ ((int)num3 * -211438065); continue; } case 0u: num += \u206e\u200f\u206c\u206f\u200b\u200f\u206d\u202d\u202c\u200e\u206e\u200b\u202e\u202c\u206e\u202e\u206a\u200b\u200f\u200c\u202c\u200b\u200b\u206e\u206a\u206a\u202e\u202a\u200d\u200e\u202c\u206a\u206e\u206d\u200b\u202b\u200e\u200c\u200e\u206b\u202e.\u202c\u202b\u206c\u206c\u202d\u202d\u202a\u206e\u206f\u200d\u202a\u206f\u206c\u206e\u200c\u206b\u200c\u202e\u200b\u202c\u206d\u202b\u202a\u206d\u202e\u206a\u206b\u206c\u200b\u206b\u202d\u200c\u206b\u202b\u206f\u206f\u206c\u200c\u206b\u202e(rangeDecoder); num2 = ((int)num3 * -493493105) ^ 0x439E633B; continue; case 3u: return \u206b\u206e\u206a\u202d\u202c\u202e\u200c\u200f\u202a\u206e\u200d\u206e\u202d\u206e\u202e\u200f\u200d\u206e\u206b\u200e\u202a\u200f\u200f\u206b\u206a\u202a\u200b\u202e\u202c\u202e\u200f\u202d\u206a\u206a\u200e\u200d\u200d\u202a\u200f\u200c\u202e[posState].\u202c\u202b\u206c\u206c\u202d\u202d\u202a\u206e\u206f\u200d\u202a\u206f\u206c\u206e\u200c\u206b\u200c\u202e\u200b\u202c\u206d\u202b\u202a\u206d\u202e\u206a\u206b\u206c\u200b\u206b\u202d\u200c\u206b\u202b\u206f\u206f\u206c\u200c\u206b\u202e(rangeDecoder); case 5u: num += 8; num2 = -1807346300; continue; case 4u: goto IL_00e9; default: return num; } break; } goto IL_0011; IL_0011: num2 = -133987249; goto IL_0016; } internal \u206d\u206f\u202e\u202a\u202d\u202a\u202c\u200e\u202c\u206a\u206c\u206b\u200e\u202c\u202d\u200e\u202d\u200c\u200c\u202c\u200f\u200e\u206b\u202b\u206e\u202d\u202a\u206a\u206b\u200f\u202a\u206a\u202c\u206e\u200b\u202b\u206b\u206c\u202b\u200d\u202e() { } } internal class \u202b\u202e\u200d\u206c\u200e\u200e\u200b\u200b\u206f\u200e\u202e\u202d\u206d\u206f\u206e\u200b\u206d\u202b\u200c\u202c\u200d\u200c\u202b\u202e\u202d\u202e\u206f\u202e\u202e\u200b\u200c\u202e\u206e\u206d\u200f\u200b\u206c\u206a\u200f\u200e\u202e { internal struct \u200f\u206f\u200c\u206c\u200c\u202e\u200c\u206d\u206b\u200b\u206c\u206b\u206b\u202a\u206a\u206b\u202b\u200c\u206b\u206b\u200f\u206c\u200e\u202a\u202a\u202c\u200c\u206a\u206a\u206a\u206a\u206e\u206f\u202d\u200d\u206a\u202c\u200c\u200c\u206f\u202e { internal \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] \u200e\u202d\u206b\u206c\u200d\u206b\u206e\u200e\u202d\u202a\u206a\u202e\u206d\u200f\u206f\u206c\u200f\u206c\u206c\u200f\u206d\u200f\u200c\u206f\u202e\u200e\u202c\u200d\u206d\u200c\u202d\u206b\u206d\u202b\u200f\u206e\u206a\u202d\u200e\u200c\u202e; internal void \u200f\u202c\u206c\u206b\u206f\u200e\u202e\u206e\u206b\u206c\u206d\u206b\u206c\u206c\u202e\u200d\u206b\u202e\u206e\u200d\u202c\u206b\u206f\u200f\u206c\u206a\u206d\u202c\u202c\u202c\u206b\u202b\u206c\u202c\u202c\u200b\u200e\u200e\u200b\u206b\u202e() { \u200e\u202d\u206b\u206c\u200d\u206b\u206e\u200e\u202d\u202a\u206a\u202e\u206d\u200f\u206f\u206c\u200f\u206c\u206c\u200f\u206d\u200f\u200c\u206f\u202e\u200e\u202c\u200d\u206d\u200c\u202d\u206b\u206d\u202b\u200f\u206e\u206a\u202d\u200e\u200c\u202e = new \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[768]; } internal void \u202d\u206a\u200b\u200d\u200b\u206f\u202d\u200d\u206c\u206f\u206a\u202b\u202e\u202e\u206d\u202e\u200c\u202c\u202a\u206a\u206f\u206f\u200e\u202b\u206f\u202b\u202e\u206c\u200b\u206a\u206e\u206b\u206c\u206f\u200b\u202d\u202b\u202d\u206f\u202b\u202e() { int num = 0; while (true) { int num2 = -596113153; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0xF47316E8u) % 6) { case 0u: break; default: return; case 5u: num2 = ((int)num3 * -643861160) ^ -974233407; continue; case 1u: \u200e\u202d\u206b\u206c\u200d\u206b\u206e\u200e\u202d\u202a\u206a\u202e\u206d\u200f\u206f\u206c\u200f\u206c\u206c\u200f\u206d\u200f\u200c\u206f\u202e\u200e\u202c\u200d\u206d\u200c\u202d\u206b\u206d\u202b\u200f\u206e\u206a\u202d\u200e\u200c\u202e[num].\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); num2 = -2035998560; continue; case 4u: num++; num2 = ((int)num3 * -353018735) ^ 0xB8B24E1; continue; case 3u: { int num4; if (num < 768) { num2 = -570546943; num4 = num2; } else { num2 = -28567252; num4 = num2; } continue; } case 2u: return; } break; } } } internal byte \u206e\u200e\u202a\u206e\u206b\u200d\u206b\u200f\u202e\u202d\u200f\u206f\u202c\u206c\u200e\u200d\u206e\u206d\u202a\u202c\u200e\u202d\u200c\u200f\u202a\u202c\u206f\u206c\u202b\u202e\u206a\u202d\u202b\u200e\u202c\u206b\u202d\u206b\u202c\u202b\u202e(\u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e rangeDecoder) { uint num = 1u; while (true) { int num2 = 2249583; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0x11504AD1u) % 3) { case 0u: break; case 1u: { num = (num << 1) | \u200e\u202d\u206b\u206c\u200d\u206b\u206e\u200e\u202d\u202a\u206a\u202e\u206d\u200f\u206f\u206c\u200f\u206c\u206c\u200f\u206d\u200f\u200c\u206f\u202e\u200e\u202c\u200d\u206d\u200c\u202d\u206b\u206d\u202b\u200f\u206e\u206a\u202d\u200e\u200c\u202e[num].\u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(rangeDecoder); int num4; if (num < 256) { num2 = 2249583; num4 = num2; } else { num2 = 143407047; num4 = num2; } continue; } default: return (byte)num; } break; } } } internal byte \u206d\u200d\u206a\u206d\u206a\u202d\u206f\u206f\u200d\u200d\u200b\u202a\u200c\u206f\u200f\u202e\u202e\u200e\u202a\u202c\u206c\u202b\u200c\u202d\u206b\u200d\u200c\u200d\u202e\u202d\u200e\u206c\u202a\u202d\u202e\u202a\u202b\u206b\u206f\u202e\u202e(\u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e rangeDecoder, byte matchByte) { uint num = 1u; uint num5 = default(uint); uint num6 = default(uint); while (true) { int num2 = -1610480790; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0xF2CA45A8u) % 9) { case 0u: break; case 3u: num5 = (uint)(matchByte >> 7) & 1u; matchByte <<= 1; num6 = \u200e\u202d\u206b\u206c\u200d\u206b\u206e\u200e\u202d\u202a\u206a\u202e\u206d\u200f\u206f\u206c\u200f\u206c\u206c\u200f\u206d\u200f\u200c\u206f\u202e\u200e\u202c\u200d\u206d\u200c\u202d\u206b\u206d\u202b\u200f\u206e\u206a\u202d\u200e\u200c\u202e[(1 + num5 << 8) + num].\u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(rangeDecoder); num2 = -1801383034; continue; case 7u: { int num9; if (num >= 256) { num2 = -614492853; num9 = num2; } else { num2 = -1610480790; num9 = num2; } continue; } case 4u: num2 = ((int)num3 * -8253132) ^ -282446868; continue; case 8u: { num = (num << 1) | num6; int num7; int num8; if (num5 != num6) { num7 = -1266612296; num8 = num7; } else { num7 = -329099976; num8 = num7; } num2 = num7 ^ (int)(num3 * 456149449); continue; } case 6u: num = (num << 1) | \u200e\u202d\u206b\u206c\u200d\u206b\u206e\u200e\u202d\u202a\u206a\u202e\u206d\u200f\u206f\u206c\u200f\u206c\u206c\u200f\u206d\u200f\u200c\u206f\u202e\u200e\u202c\u200d\u206d\u200c\u202d\u206b\u206d\u202b\u200f\u206e\u206a\u202d\u200e\u200c\u202e[num].\u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(rangeDecoder); num2 = -1516188876; continue; case 5u: { int num4; if (num < 256) { num2 = -378425201; num4 = num2; } else { num2 = -1020194622; num4 = num2; } continue; } case 2u: num2 = (int)((num3 * 125073179) ^ 0x6F61DD65); continue; default: return (byte)num; } break; } } } } internal \u200f\u206f\u200c\u206c\u200c\u202e\u200c\u206d\u206b\u200b\u206c\u206b\u206b\u202a\u206a\u206b\u202b\u200c\u206b\u206b\u200f\u206c\u200e\u202a\u202a\u202c\u200c\u206a\u206a\u206a\u206a\u206e\u206f\u202d\u200d\u206a\u202c\u200c\u200c\u206f\u202e[] \u206b\u200d\u202d\u206e\u200c\u200e\u202c\u200c\u202c\u202b\u200e\u202b\u202b\u200b\u202c\u206f\u206f\u206c\u200f\u202b\u206b\u200f\u206e\u206a\u202a\u200d\u206a\u206e\u200f\u206f\u206f\u202d\u206d\u202c\u200e\u202b\u202d\u206c\u200e\u202e; internal int \u202d\u206a\u200c\u206c\u206f\u202e\u200e\u200e\u200f\u206a\u206e\u206f\u200b\u200c\u206a\u200c\u206c\u202d\u200f\u200c\u206a\u200e\u202c\u206e\u202c\u206e\u202b\u200d\u200d\u206b\u206d\u206f\u202d\u200b\u206e\u206f\u200c\u202a\u202a\u206a\u202e; internal int \u206a\u200e\u206b\u202d\u202e\u202a\u200d\u206b\u202b\u200f\u200f\u206c\u202a\u206d\u206b\u200d\u202e\u200c\u202b\u200f\u200d\u206b\u202e\u200f\u206f\u206a\u200e\u200f\u206d\u206d\u200c\u202a\u206c\u202b\u202c\u200d\u206d\u200f\u206c\u202b\u202e; internal uint \u202d\u202c\u202e\u200f\u202e\u200d\u202d\u200e\u202d\u202c\u206b\u202e\u206e\u202d\u206d\u200c\u202e\u206d\u206f\u202c\u206e\u200c\u206f\u200b\u200f\u202b\u202b\u200e\u206f\u200c\u200e\u200d\u202a\u206b\u200e\u206a\u202b\u202e\u202a\u206b\u202e; internal void \u206c\u202d\u202d\u200c\u200b\u206c\u202d\u206e\u200f\u206e\u200c\u206e\u206d\u200e\u206b\u202a\u200e\u206f\u206c\u200e\u202b\u202a\u200d\u202e\u202a\u206a\u206b\u202e\u202d\u206d\u200c\u206a\u200d\u200d\u206e\u200c\u200c\u200e\u206d\u206b\u202e(int numPosBits, int numPrevBits) { if (\u206b\u200d\u202d\u206e\u200c\u200e\u202c\u200c\u202c\u202b\u200e\u202b\u202b\u200b\u202c\u206f\u206f\u206c\u200f\u202b\u206b\u200f\u206e\u206a\u202a\u200d\u206a\u206e\u200f\u206f\u206f\u202d\u206d\u202c\u200e\u202b\u202d\u206c\u200e\u202e != null) { goto IL_000b; } goto IL_00c8; IL_00c8: \u202d\u206a\u200c\u206c\u206f\u202e\u200e\u200e\u200f\u206a\u206e\u206f\u200b\u200c\u206a\u200c\u206c\u202d\u200f\u200c\u206a\u200e\u202c\u206e\u202c\u206e\u202b\u200d\u200d\u206b\u206d\u206f\u202d\u200b\u206e\u206f\u200c\u202a\u202a\u206a\u202e = numPosBits; \u202d\u202c\u202e\u200f\u202e\u200d\u202d\u200e\u202d\u202c\u206b\u202e\u206e\u202d\u206d\u200c\u202e\u206d\u206f\u202c\u206e\u200c\u206f\u200b\u200f\u202b\u202b\u200e\u206f\u200c\u200e\u200d\u202a\u206b\u200e\u206a\u202b\u202e\u202a\u206b\u202e = (uint)((1 << numPosBits) - 1); int num = -442124116; goto IL_0010; IL_0010: uint num4 = default(uint); uint num3 = default(uint); while (true) { uint num2; switch ((num2 = (uint)num ^ 0xF4AFDC6Eu) % 13) { case 8u: break; default: return; case 6u: num = ((int)num2 * -1792695353) ^ -16173206; continue; case 4u: goto IL_0068; case 0u: num4++; num = ((int)num2 * -1904990641) ^ 0x79B82192; continue; case 12u: { int num7; int num8; if (\u202d\u206a\u200c\u206c\u206f\u202e\u200e\u200e\u200f\u206a\u206e\u206f\u200b\u200c\u206a\u200c\u206c\u202d\u200f\u200c\u206a\u200e\u202c\u206e\u202c\u206e\u202b\u200d\u200d\u206b\u206d\u206f\u202d\u200b\u206e\u206f\u200c\u202a\u202a\u206a\u202e != numPosBits) { num7 = 393740191; num8 = num7; } else { num7 = 591956600; num8 = num7; } num = num7 ^ (int)(num2 * 1612593023); continue; } case 3u: return; case 7u: goto IL_00c8; case 1u: { int num5; int num6; if (\u206a\u200e\u206b\u202d\u202e\u202a\u200d\u206b\u202b\u200f\u200f\u206c\u202a\u206d\u206b\u200d\u202e\u200c\u202b\u200f\u200d\u206b\u202e\u200f\u206f\u206a\u200e\u200f\u206d\u206d\u200c\u202a\u206c\u202b\u202c\u200d\u206d\u200f\u206c\u202b\u202e == numPrevBits) { num5 = 163234210; num6 = num5; } else { num5 = 684208173; num6 = num5; } num = num5 ^ ((int)num2 * -201025215); continue; } case 10u: \u206a\u200e\u206b\u202d\u202e\u202a\u200d\u206b\u202b\u200f\u200f\u206c\u202a\u206d\u206b\u200d\u202e\u200c\u202b\u200f\u200d\u206b\u202e\u200f\u206f\u206a\u200e\u200f\u206d\u206d\u200c\u202a\u206c\u202b\u202c\u200d\u206d\u200f\u206c\u202b\u202e = numPrevBits; num3 = (uint)(1 << \u206a\u200e\u206b\u202d\u202e\u202a\u200d\u206b\u202b\u200f\u200f\u206c\u202a\u206d\u206b\u200d\u202e\u200c\u202b\u200f\u200d\u206b\u202e\u200f\u206f\u206a\u200e\u200f\u206d\u206d\u200c\u202a\u206c\u202b\u202c\u200d\u206d\u200f\u206c\u202b\u202e + \u202d\u206a\u200c\u206c\u206f\u202e\u200e\u200e\u200f\u206a\u206e\u206f\u200b\u200c\u206a\u200c\u206c\u202d\u200f\u200c\u206a\u200e\u202c\u206e\u202c\u206e\u202b\u200d\u200d\u206b\u206d\u206f\u202d\u200b\u206e\u206f\u200c\u202a\u202a\u206a\u202e); num = (int)((num2 * 1580466855) ^ 0x1D9CD2BA); continue; case 2u: \u206b\u200d\u202d\u206e\u200c\u200e\u202c\u200c\u202c\u202b\u200e\u202b\u202b\u200b\u202c\u206f\u206f\u206c\u200f\u202b\u206b\u200f\u206e\u206a\u202a\u200d\u206a\u206e\u200f\u206f\u206f\u202d\u206d\u202c\u200e\u202b\u202d\u206c\u200e\u202e[num4].\u200f\u202c\u206c\u206b\u206f\u200e\u202e\u206e\u206b\u206c\u206d\u206b\u206c\u206c\u202e\u200d\u206b\u202e\u206e\u200d\u202c\u206b\u206f\u200f\u206c\u206a\u206d\u202c\u202c\u202c\u206b\u202b\u206c\u202c\u202c\u200b\u200e\u200e\u200b\u206b\u202e(); num = -1429857588; continue; case 11u: num4 = 0u; num = ((int)num2 * -1397587442) ^ 0x1B9598DC; continue; case 9u: \u206b\u200d\u202d\u206e\u200c\u200e\u202c\u200c\u202c\u202b\u200e\u202b\u202b\u200b\u202c\u206f\u206f\u206c\u200f\u202b\u206b\u200f\u206e\u206a\u202a\u200d\u206a\u206e\u200f\u206f\u206f\u202d\u206d\u202c\u200e\u202b\u202d\u206c\u200e\u202e = new \u200f\u206f\u200c\u206c\u200c\u202e\u200c\u206d\u206b\u200b\u206c\u206b\u206b\u202a\u206a\u206b\u202b\u200c\u206b\u206b\u200f\u206c\u200e\u202a\u202a\u202c\u200c\u206a\u206a\u206a\u206a\u206e\u206f\u202d\u200d\u206a\u202c\u200c\u200c\u206f\u202e[num3]; num = (int)(num2 * 1098710434) ^ -409948802; continue; case 5u: return; } break; IL_0068: int num9; if (num4 < num3) { num = -1899136716; num9 = num; } else { num = -2095085138; num9 = num; } } goto IL_000b; IL_000b: num = -1291443065; goto IL_0010; } internal void \u206e\u202c\u206b\u202c\u200f\u202b\u202b\u200f\u200e\u206d\u200e\u200d\u206e\u206d\u200d\u202c\u202e\u202e\u202e\u206d\u206d\u200f\u206a\u206e\u206e\u200d\u206d\u200e\u202b\u200c\u200e\u200e\u206d\u206d\u200e\u206c\u200e\u200b\u202b\u202c\u202e() { uint num = (uint)(1 << \u206a\u200e\u206b\u202d\u202e\u202a\u200d\u206b\u202b\u200f\u200f\u206c\u202a\u206d\u206b\u200d\u202e\u200c\u202b\u200f\u200d\u206b\u202e\u200f\u206f\u206a\u200e\u200f\u206d\u206d\u200c\u202a\u206c\u202b\u202c\u200d\u206d\u200f\u206c\u202b\u202e + \u202d\u206a\u200c\u206c\u206f\u202e\u200e\u200e\u200f\u206a\u206e\u206f\u200b\u200c\u206a\u200c\u206c\u202d\u200f\u200c\u206a\u200e\u202c\u206e\u202c\u206e\u202b\u200d\u200d\u206b\u206d\u206f\u202d\u200b\u206e\u206f\u200c\u202a\u202a\u206a\u202e); uint num4 = default(uint); while (true) { int num2 = 681663432; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0x3FF2278Fu) % 6) { case 0u: break; default: return; case 1u: num4 = 0u; num2 = ((int)num3 * -624719531) ^ -1485886963; continue; case 4u: num4++; num2 = (int)((num3 * 63402024) ^ 0x51B174EE); continue; case 3u: \u206b\u200d\u202d\u206e\u200c\u200e\u202c\u200c\u202c\u202b\u200e\u202b\u202b\u200b\u202c\u206f\u206f\u206c\u200f\u202b\u206b\u200f\u206e\u206a\u202a\u200d\u206a\u206e\u200f\u206f\u206f\u202d\u206d\u202c\u200e\u202b\u202d\u206c\u200e\u202e[num4].\u202d\u206a\u200b\u200d\u200b\u206f\u202d\u200d\u206c\u206f\u206a\u202b\u202e\u202e\u206d\u202e\u200c\u202c\u202a\u206a\u206f\u206f\u200e\u202b\u206f\u202b\u202e\u206c\u200b\u206a\u206e\u206b\u206c\u206f\u200b\u202d\u202b\u202d\u206f\u202b\u202e(); num2 = 728685369; continue; case 5u: { int num5; if (num4 >= num) { num2 = 2073524475; num5 = num2; } else { num2 = 2077577842; num5 = num2; } continue; } case 2u: return; } break; } } } internal uint \u202a\u202d\u200c\u206c\u200e\u200b\u200c\u200d\u200e\u206c\u200b\u202a\u206f\u202c\u202d\u202b\u200b\u200d\u200b\u202c\u206c\u206d\u202b\u206c\u206c\u206e\u202e\u202e\u206d\u206e\u206b\u206a\u206b\u202b\u200b\u202b\u202d\u202a\u206f\u206f\u202e(uint pos, byte prevByte) { return ((pos & \u202d\u202c\u202e\u200f\u202e\u200d\u202d\u200e\u202d\u202c\u206b\u202e\u206e\u202d\u206d\u200c\u202e\u206d\u206f\u202c\u206e\u200c\u206f\u200b\u200f\u202b\u202b\u200e\u206f\u200c\u200e\u200d\u202a\u206b\u200e\u206a\u202b\u202e\u202a\u206b\u202e) << \u206a\u200e\u206b\u202d\u202e\u202a\u200d\u206b\u202b\u200f\u200f\u206c\u202a\u206d\u206b\u200d\u202e\u200c\u202b\u200f\u200d\u206b\u202e\u200f\u206f\u206a\u200e\u200f\u206d\u206d\u200c\u202a\u206c\u202b\u202c\u200d\u206d\u200f\u206c\u202b\u202e) + (uint)(prevByte >> 8 - \u206a\u200e\u206b\u202d\u202e\u202a\u200d\u206b\u202b\u200f\u200f\u206c\u202a\u206d\u206b\u200d\u202e\u200c\u202b\u200f\u200d\u206b\u202e\u200f\u206f\u206a\u200e\u200f\u206d\u206d\u200c\u202a\u206c\u202b\u202c\u200d\u206d\u200f\u206c\u202b\u202e); } internal byte \u202c\u202b\u206a\u202b\u206d\u200b\u202c\u200f\u202d\u206f\u206f\u202c\u202a\u206c\u200f\u202d\u206a\u200f\u200c\u202c\u200b\u200d\u200d\u202e\u206c\u206d\u206b\u202b\u202e\u206e\u200d\u202a\u200b\u202c\u200c\u200c\u202a\u206a\u202c\u202c\u202e(\u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e rangeDecoder, uint pos, byte prevByte) { return \u206b\u200d\u202d\u206e\u200c\u200e\u202c\u200c\u202c\u202b\u200e\u202b\u202b\u200b\u202c\u206f\u206f\u206c\u200f\u202b\u206b\u200f\u206e\u206a\u202a\u200d\u206a\u206e\u200f\u206f\u206f\u202d\u206d\u202c\u200e\u202b\u202d\u206c\u200e\u202e[\u202a\u202d\u200c\u206c\u200e\u200b\u200c\u200d\u200e\u206c\u200b\u202a\u206f\u202c\u202d\u202b\u200b\u200d\u200b\u202c\u206c\u206d\u202b\u206c\u206c\u206e\u202e\u202e\u206d\u206e\u206b\u206a\u206b\u202b\u200b\u202b\u202d\u202a\u206f\u206f\u202e(pos, prevByte)].\u206e\u200e\u202a\u206e\u206b\u200d\u206b\u200f\u202e\u202d\u200f\u206f\u202c\u206c\u200e\u200d\u206e\u206d\u202a\u202c\u200e\u202d\u200c\u200f\u202a\u202c\u206f\u206c\u202b\u202e\u206a\u202d\u202b\u200e\u202c\u206b\u202d\u206b\u202c\u202b\u202e(rangeDecoder); } internal byte \u206a\u206c\u200b\u200d\u200e\u206b\u206f\u200c\u200b\u206e\u206a\u200b\u202d\u202e\u200c\u206d\u206b\u206a\u206a\u202d\u202e\u200b\u206c\u206e\u202a\u200d\u202d\u202a\u200e\u202d\u202b\u206c\u202d\u206f\u206e\u202a\u200f\u202a\u206e\u200c\u202e(\u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e rangeDecoder, uint pos, byte prevByte, byte matchByte) { return \u206b\u200d\u202d\u206e\u200c\u200e\u202c\u200c\u202c\u202b\u200e\u202b\u202b\u200b\u202c\u206f\u206f\u206c\u200f\u202b\u206b\u200f\u206e\u206a\u202a\u200d\u206a\u206e\u200f\u206f\u206f\u202d\u206d\u202c\u200e\u202b\u202d\u206c\u200e\u202e[\u202a\u202d\u200c\u206c\u200e\u200b\u200c\u200d\u200e\u206c\u200b\u202a\u206f\u202c\u202d\u202b\u200b\u200d\u200b\u202c\u206c\u206d\u202b\u206c\u206c\u206e\u202e\u202e\u206d\u206e\u206b\u206a\u206b\u202b\u200b\u202b\u202d\u202a\u206f\u206f\u202e(pos, prevByte)].\u206d\u200d\u206a\u206d\u206a\u202d\u206f\u206f\u200d\u200d\u200b\u202a\u200c\u206f\u200f\u202e\u202e\u200e\u202a\u202c\u206c\u202b\u200c\u202d\u206b\u200d\u200c\u200d\u202e\u202d\u200e\u206c\u202a\u202d\u202e\u202a\u202b\u206b\u206f\u202e\u202e(rangeDecoder, matchByte); } internal \u202b\u202e\u200d\u206c\u200e\u200e\u200b\u200b\u206f\u200e\u202e\u202d\u206d\u206f\u206e\u200b\u206d\u202b\u200c\u202c\u200d\u200c\u202b\u202e\u202d\u202e\u206f\u202e\u202e\u200b\u200c\u202e\u206e\u206d\u200f\u200b\u206c\u206a\u200f\u200e\u202e() { } } internal readonly \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] \u200e\u206a\u206c\u202d\u202a\u200b\u206d\u200e\u206a\u200d\u200f\u202d\u200c\u200d\u202a\u200c\u202e\u202c\u200c\u206e\u202c\u206b\u200e\u206b\u202a\u200e\u202e\u206b\u206a\u206d\u206c\u202a\u202e\u206f\u206b\u206f\u200c\u202b\u200b\u206a\u202e = new \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[192]; internal readonly \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] \u202a\u202d\u200c\u202a\u200f\u206c\u200f\u200e\u206f\u202c\u202a\u206a\u200d\u206a\u200b\u200c\u200e\u200d\u200b\u206a\u206a\u200d\u206e\u202a\u200c\u200c\u206b\u200e\u200d\u202b\u200c\u200f\u200b\u206e\u202b\u206d\u202b\u200c\u206a\u200e\u202e = new \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[192]; internal readonly \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] \u206b\u200b\u200b\u206b\u206d\u206e\u202e\u206f\u206f\u206d\u202a\u202e\u206f\u206e\u202a\u206c\u202c\u206c\u202b\u200f\u200b\u200f\u200d\u202d\u202d\u200c\u206e\u202e\u206c\u202a\u200c\u202d\u202c\u200d\u200e\u202a\u206c\u202c\u202b\u200f\u202e = new \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[12]; internal readonly \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] \u206a\u200d\u200b\u206b\u202d\u202d\u206e\u200b\u202a\u206d\u206c\u206b\u202b\u202e\u202d\u202c\u206f\u206b\u206e\u206e\u206d\u202e\u202b\u200d\u200f\u202c\u206d\u202b\u206b\u202b\u206a\u206a\u200c\u202c\u206c\u206d\u206d\u202a\u200e\u206e\u202e = new \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[12]; internal readonly \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] \u206e\u200f\u206f\u206a\u206e\u200d\u200c\u202e\u200f\u200e\u202b\u202c\u202e\u200b\u200e\u200e\u206d\u206a\u206d\u206e\u202e\u202e\u200d\u202c\u202a\u202a\u206e\u202d\u206c\u206f\u206e\u200d\u202c\u202d\u202c\u200f\u200c\u206c\u206d\u202b\u202e = new \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[12]; internal readonly \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] \u202b\u200c\u202e\u202c\u202d\u206c\u202c\u200f\u202b\u206f\u206f\u200d\u206f\u202a\u206f\u202b\u206f\u206b\u202d\u202a\u202c\u206c\u206d\u202e\u202b\u200d\u200d\u206a\u200c\u206b\u206f\u202d\u206e\u206f\u200b\u206d\u200b\u206f\u202b\u200d\u202e = new \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[12]; internal readonly \u206d\u206f\u202e\u202a\u202d\u202a\u202c\u200e\u202c\u206a\u206c\u206b\u200e\u202c\u202d\u200e\u202d\u200c\u200c\u202c\u200f\u200e\u206b\u202b\u206e\u202d\u202a\u206a\u206b\u200f\u202a\u206a\u202c\u206e\u200b\u202b\u206b\u206c\u202b\u200d\u202e \u206c\u200f\u202d\u202b\u206e\u202d\u202e\u206b\u200b\u202d\u202c\u206a\u202a\u200b\u200b\u202e\u206e\u206c\u202c\u206e\u206c\u206a\u206f\u202c\u200d\u206d\u200f\u200d\u200c\u200c\u206e\u200f\u200b\u200f\u206e\u200e\u206d\u200d\u206f\u202d\u202e = new \u206d\u206f\u202e\u202a\u202d\u202a\u202c\u200e\u202c\u206a\u206c\u206b\u200e\u202c\u202d\u200e\u202d\u200c\u200c\u202c\u200f\u200e\u206b\u202b\u206e\u202d\u202a\u206a\u206b\u200f\u202a\u206a\u202c\u206e\u200b\u202b\u206b\u206c\u202b\u200d\u202e(); internal readonly \u202b\u202e\u200d\u206c\u200e\u200e\u200b\u200b\u206f\u200e\u202e\u202d\u206d\u206f\u206e\u200b\u206d\u202b\u200c\u202c\u200d\u200c\u202b\u202e\u202d\u202e\u206f\u202e\u202e\u200b\u200c\u202e\u206e\u206d\u200f\u200b\u206c\u206a\u200f\u200e\u202e \u206f\u206b\u206e\u206a\u200c\u202c\u202d\u206d\u206a\u206e\u206f\u202c\u200e\u200b\u200f\u200d\u206b\u202d\u206a\u206e\u200d\u200b\u206f\u200e\u202a\u202a\u200c\u206f\u202e\u200f\u206f\u200e\u200b\u200d\u206b\u206a\u206c\u200f\u200d\u200e\u202e = new \u202b\u202e\u200d\u206c\u200e\u200e\u200b\u200b\u206f\u200e\u202e\u202d\u206d\u206f\u206e\u200b\u206d\u202b\u200c\u202c\u200d\u200c\u202b\u202e\u202d\u202e\u206f\u202e\u202e\u200b\u200c\u202e\u206e\u206d\u200f\u200b\u206c\u206a\u200f\u200e\u202e(); internal readonly \u202a\u206e\u202b\u202a\u202a\u200e\u202a\u206f\u206c\u206b\u206d\u200d\u202c\u202d\u202c\u206c\u200f\u200e\u206a\u202d\u206d\u206a\u206b\u200c\u206d\u200b\u200e\u206f\u202a\u200d\u200b\u200c\u200d\u200f\u206d\u200d\u206d\u206c\u206c\u200d\u202e \u206e\u206e\u200d\u202d\u202a\u206c\u200b\u200b\u206f\u202c\u200f\u206e\u206d\u202d\u206f\u206c\u206d\u202d\u202b\u200f\u200f\u202d\u206b\u206a\u202c\u200b\u202c\u200d\u202c\u202b\u202c\u200e\u200e\u200b\u202a\u200d\u200d\u200f\u206e\u202d\u202e = new \u202a\u206e\u202b\u202a\u202a\u200e\u202a\u206f\u206c\u206b\u206d\u200d\u202c\u202d\u202c\u206c\u200f\u200e\u206a\u202d\u206d\u206a\u206b\u200c\u206d\u200b\u200e\u206f\u202a\u200d\u200b\u200c\u200d\u200f\u206d\u200d\u206d\u206c\u206c\u200d\u202e(); internal readonly \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[] \u206a\u206f\u206d\u200b\u200e\u200e\u200f\u206c\u206c\u202a\u202e\u200f\u206e\u202c\u206f\u200d\u206c\u206d\u202a\u206b\u200e\u206b\u206c\u206a\u200b\u200d\u202c\u200c\u202a\u200d\u200c\u206d\u202a\u206b\u206d\u202e\u200f\u206d\u206d\u200c\u202e = new \u200c\u206e\u206b\u202c\u206b\u206c\u202b\u206b\u206f\u200f\u206e\u202b\u206e\u206e\u202b\u200d\u202c\u200c\u200f\u202c\u202a\u206f\u202e\u206a\u202d\u200d\u202b\u202e\u200c\u202a\u206c\u202e\u206e\u206b\u206e\u206d\u200c\u200b\u200c\u206e\u202e[114]; internal readonly \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e[] \u200d\u206a\u206b\u206c\u206e\u202a\u202e\u206a\u200c\u200c\u206f\u202b\u202e\u206d\u200c\u206b\u206f\u200d\u206d\u200b\u200f\u206c\u206e\u200b\u202a\u202c\u206f\u206a\u200d\u206c\u202b\u202c\u206e\u206e\u202a\u200d\u206b\u202e\u202a\u206a\u202e = new \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e[4]; internal readonly \u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e \u206f\u206c\u200e\u200f\u200f\u206b\u202e\u202e\u202e\u202e\u200b\u200f\u206e\u200f\u202b\u206f\u202a\u202d\u202d\u202b\u200c\u200e\u206d\u200b\u200f\u206c\u200d\u200e\u206e\u206c\u200e\u206f\u200c\u206a\u202e\u206c\u200e\u200f\u200e\u202a\u202e = new \u200e\u206e\u206f\u206c\u206d\u206d\u200e\u206b\u200f\u202a\u206a\u206a\u206d\u200d\u202d\u206f\u206f\u202d\u200d\u202d\u206b\u200f\u202b\u206d\u200f\u200d\u206a\u206d\u202c\u200f\u202d\u206b\u206f\u206b\u200f\u206e\u200c\u200d\u202a\u200c\u202e(); internal readonly \u206d\u206f\u202e\u202a\u202d\u202a\u202c\u200e\u202c\u206a\u206c\u206b\u200e\u202c\u202d\u200e\u202d\u200c\u200c\u202c\u200f\u200e\u206b\u202b\u206e\u202d\u202a\u206a\u206b\u200f\u202a\u206a\u202c\u206e\u200b\u202b\u206b\u206c\u202b\u200d\u202e \u206b\u202d\u206f\u206b\u202c\u202c\u202c\u202b\u206c\u202d\u206a\u200d\u206b\u206e\u206c\u206b\u200e\u202c\u200d\u200b\u200e\u200f\u200f\u200d\u206d\u206e\u200c\u202d\u206a\u202c\u206c\u202b\u206e\u202a\u200d\u202b\u202c\u200d\u206c\u206e\u202e = new \u206d\u206f\u202e\u202a\u202d\u202a\u202c\u200e\u202c\u206a\u206c\u206b\u200e\u202c\u202d\u200e\u202d\u200c\u200c\u202c\u200f\u200e\u206b\u202b\u206e\u202d\u202a\u206a\u206b\u200f\u202a\u206a\u202c\u206e\u200b\u202b\u206b\u206c\u202b\u200d\u202e(); internal bool \u206d\u202c\u200b\u202d\u206a\u200e\u206e\u200f\u206f\u206c\u202b\u206b\u206e\u202c\u206e\u206e\u200d\u202d\u202d\u200c\u206f\u206d\u202e\u206f\u206f\u206e\u206b\u200e\u206c\u200e\u200b\u202e\u206f\u200c\u200d\u206c\u200f\u200d\u206c\u206b\u202e; internal uint \u202b\u206b\u206d\u202b\u202d\u202c\u202c\u202b\u200f\u206e\u202b\u206a\u206b\u202a\u206e\u202c\u200b\u206a\u202c\u206d\u202a\u200e\u200e\u200c\u200d\u206c\u206a\u202c\u200d\u206d\u206d\u202b\u200d\u206f\u200e\u200e\u202a\u200c\u206f\u206a\u202e; internal uint \u202b\u200f\u202a\u202b\u202b\u200c\u202b\u202a\u200c\u206f\u202e\u206b\u206c\u206b\u200e\u202d\u206e\u202c\u200f\u200d\u202e\u206d\u206b\u202d\u200b\u202e\u202a\u206d\u206c\u202a\u206b\u202b\u202d\u200b\u206b\u206d\u202a\u202b\u206a\u202e\u202e; internal \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e \u200e\u206f\u206b\u200f\u202a\u200d\u200b\u200d\u200b\u200d\u206e\u206b\u202d\u202b\u206d\u202d\u200d\u206b\u200b\u202b\u202c\u206b\u206e\u200f\u200e\u200f\u206c\u200f\u206e\u206d\u206f\u202c\u202d\u206c\u200c\u206f\u206d\u200e\u202a\u206d\u202e = new \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e(4); internal uint \u206a\u200d\u206f\u206f\u202c\u202c\u202e\u206f\u202c\u202d\u200c\u206d\u202c\u206d\u206e\u206a\u206d\u202b\u200f\u202e\u202a\u206e\u200c\u200d\u202e\u202e\u200f\u206a\u200c\u206b\u206f\u200b\u202e\u206d\u202a\u202e\u202d\u206f\u200b\u200c\u202e; internal \u200c\u202b\u200c\u200e\u202b\u206a\u206d\u200d\u200e\u200b\u200f\u202b\u206e\u200b\u200d\u200f\u202b\u206c\u202e\u202e\u200f\u202c\u200d\u206d\u206b\u202d\u200d\u200c\u206a\u206e\u200e\u202e\u202d\u206a\u202a\u200d\u202c\u202e\u202d\u206c\u202e() { \u202b\u206b\u206d\u202b\u202d\u202c\u202c\u202b\u200f\u206e\u202b\u206a\u206b\u202a\u206e\u202c\u200b\u206a\u202c\u206d\u202a\u200e\u200e\u200c\u200d\u206c\u206a\u202c\u200d\u206d\u206d\u202b\u200d\u206f\u200e\u200e\u202a\u200c\u206f\u206a\u202e = uint.MaxValue; for (int i = 0; (long)i < 4L; i++) { \u200d\u206a\u206b\u206c\u206e\u202a\u202e\u206a\u200c\u200c\u206f\u202b\u202e\u206d\u200c\u206b\u206f\u200d\u206d\u200b\u200f\u206c\u206e\u200b\u202a\u202c\u206f\u206a\u200d\u206c\u202b\u202c\u206e\u206e\u202a\u200d\u206b\u202e\u202a\u206a\u202e[i] = new \u202d\u200b\u200d\u202c\u202a\u200d\u202c\u200c\u200e\u202b\u200f\u202c\u206f\u200f\u206a\u202c\u206e\u202d\u206f\u200f\u200d\u206e\u200b\u200b\u200c\u206a\u206b\u202d\u200d\u202b\u200c\u200b\u202c\u200c\u206e\u200e\u200e\u202a\u202d\u202e(6); } } internal void \u200b\u206c\u206e\u200e\u202a\u206f\u202a\u202b\u200c\u200b\u202c\u202d\u202b\u202d\u206a\u200d\u200e\u206d\u206d\u200d\u202a\u200c\u200e\u206a\u206c\u206f\u206d\u206b\u202d\u206f\u200e\u202b\u200b\u202e\u202d\u200c\u202e\u206e\u206f\u200c\u202e(uint dictionarySize) { if (\u202b\u206b\u206d\u202b\u202d\u202c\u202c\u202b\u200f\u206e\u202b\u206a\u206b\u202a\u206e\u202c\u200b\u206a\u202c\u206d\u202a\u200e\u200e\u200c\u200d\u206c\u206a\u202c\u200d\u206d\u206d\u202b\u200d\u206f\u200e\u200e\u202a\u200c\u206f\u206a\u202e == dictionarySize) { return; } uint windowSize = default(uint); while (true) { int num = 1572125907; while (true) { uint num2; switch ((num2 = (uint)num ^ 0x5B3D3F2Eu) % 6) { case 0u: break; default: return; case 5u: \u202b\u206b\u206d\u202b\u202d\u202c\u202c\u202b\u200f\u206e\u202b\u206a\u206b\u202a\u206e\u202c\u200b\u206a\u202c\u206d\u202a\u200e\u200e\u200c\u200d\u206c\u206a\u202c\u200d\u206d\u206d\u202b\u200d\u206f\u200e\u200e\u202a\u200c\u206f\u206a\u202e = dictionarySize; num = (int)(num2 * 1101615401) ^ -1103965398; continue; case 3u: \u206e\u206e\u200d\u202d\u202a\u206c\u200b\u200b\u206f\u202c\u200f\u206e\u206d\u202d\u206f\u206c\u206d\u202d\u202b\u200f\u200f\u202d\u206b\u206a\u202c\u200b\u202c\u200d\u202c\u202b\u202c\u200e\u200e\u200b\u202a\u200d\u200d\u200f\u206e\u202d\u202e.\u202b\u202e\u200e\u200f\u202e\u202b\u202b\u206c\u202d\u206d\u200e\u206d\u206e\u202e\u200d\u200f\u202d\u206f\u200e\u200e\u200f\u200b\u206a\u200c\u206e\u206b\u200b\u202e\u206e\u202c\u206f\u206a\u202a\u200d\u202d\u200f\u202d\u202c\u202b\u206e\u202e(windowSize); num = (int)((num2 * 1467928912) ^ 0x287C96B4); continue; case 1u: \u202b\u200f\u202a\u202b\u202b\u200c\u202b\u202a\u200c\u206f\u202e\u206b\u206c\u206b\u200e\u202d\u206e\u202c\u200f\u200d\u202e\u206d\u206b\u202d\u200b\u202e\u202a\u206d\u206c\u202a\u206b\u202b\u202d\u200b\u206b\u206d\u202a\u202b\u206a\u202e\u202e = Math.Max(\u202b\u206b\u206d\u202b\u202d\u202c\u202c\u202b\u200f\u206e\u202b\u206a\u206b\u202a\u206e\u202c\u200b\u206a\u202c\u206d\u202a\u200e\u200e\u200c\u200d\u206c\u206a\u202c\u200d\u206d\u206d\u202b\u200d\u206f\u200e\u200e\u202a\u200c\u206f\u206a\u202e, 1u); num = ((int)num2 * -1566037534) ^ 0x1F386F20; continue; case 4u: windowSize = Math.Max(\u202b\u200f\u202a\u202b\u202b\u200c\u202b\u202a\u200c\u206f\u202e\u206b\u206c\u206b\u200e\u202d\u206e\u202c\u200f\u200d\u202e\u206d\u206b\u202d\u200b\u202e\u202a\u206d\u206c\u202a\u206b\u202b\u202d\u200b\u206b\u206d\u202a\u202b\u206a\u202e\u202e, 4096u); num = ((int)num2 * -1959207830) ^ -1572749741; continue; case 2u: return; } break; } } } internal void \u206e\u202b\u206a\u206b\u206c\u202e\u206d\u206e\u200b\u206e\u206c\u202e\u200c\u206b\u206e\u206f\u200f\u206a\u200f\u202a\u206a\u202d\u200e\u202a\u202a\u202c\u202a\u206b\u200c\u202d\u206a\u200c\u206a\u200e\u200e\u202d\u206b\u202c\u200b\u200f\u202e(int lp, int lc) { \u206f\u206b\u206e\u206a\u200c\u202c\u202d\u206d\u206a\u206e\u206f\u202c\u200e\u200b\u200f\u200d\u206b\u202d\u206a\u206e\u200d\u200b\u206f\u200e\u202a\u202a\u200c\u206f\u202e\u200f\u206f\u200e\u200b\u200d\u206b\u206a\u206c\u200f\u200d\u200e\u202e.\u206c\u202d\u202d\u200c\u200b\u206c\u202d\u206e\u200f\u206e\u200c\u206e\u206d\u200e\u206b\u202a\u200e\u206f\u206c\u200e\u202b\u202a\u200d\u202e\u202a\u206a\u206b\u202e\u202d\u206d\u200c\u206a\u200d\u200d\u206e\u200c\u200c\u200e\u206d\u206b\u202e(lp, lc); } internal void \u202c\u200e\u202c\u206d\u206b\u206d\u206f\u206b\u206e\u200e\u200e\u202c\u200e\u200e\u202b\u202e\u202a\u206e\u202a\u202e\u200d\u202e\u200d\u206b\u200f\u202e\u200b\u200b\u202c\u200b\u200d\u206e\u202c\u206b\u206b\u206c\u200e\u206c\u202d\u200e\u202e(int pb) { uint num = (uint)(1 << pb); while (true) { int num2 = -1570572080; while (true) { uint num3; switch ((num3 = (uint)num2 ^ 0xACDBDAB5u) % 5) { case 2u: break; default: return; case 4u: \u206c\u200f\u202d\u202b\u206e\u202d\u202e\u206b\u200b\u202d\u202c\u206a\u202a\u200b\u200b\u202e\u206e\u206c\u202c\u206e\u206c\u206a\u206f\u202c\u200d\u206d\u200f\u200d\u200c\u200c\u206e\u200f\u200b\u200f\u206e\u200e\u206d\u200d\u206f\u202d\u202e.\u206f\u206e\u206d\u202b\u206d\u200e\u202e\u202c\u202a\u206d\u200d\u206c\u202c\u206b\u200e\u200e\u200d\u202e\u200d\u200b\u200e\u206f\u200d\u200f\u206e\u200c\u202c\u200c\u202d\u202a\u200d\u200c\u206f\u200b\u200c\u202d\u200b\u200c\u206f\u206b\u202e(num); num2 = (int)((num3 * 302618161) ^ 0x4C7DE2D5); continue; case 0u: \u206b\u202d\u206f\u206b\u202c\u202c\u202c\u202b\u206c\u202d\u206a\u200d\u206b\u206e\u206c\u206b\u200e\u202c\u200d\u200b\u200e\u200f\u200f\u200d\u206d\u206e\u200c\u202d\u206a\u202c\u206c\u202b\u206e\u202a\u200d\u202b\u202c\u200d\u206c\u206e\u202e.\u206f\u206e\u206d\u202b\u206d\u200e\u202e\u202c\u202a\u206d\u200d\u206c\u202c\u206b\u200e\u200e\u200d\u202e\u200d\u200b\u200e\u206f\u200d\u200f\u206e\u200c\u202c\u200c\u202d\u202a\u200d\u200c\u206f\u200b\u200c\u202d\u200b\u200c\u206f\u206b\u202e(num); num2 = ((int)num3 * -1996346409) ^ 0x6872FAD9; continue; case 3u: \u206a\u200d\u206f\u206f\u202c\u202c\u202e\u206f\u202c\u202d\u200c\u206d\u202c\u206d\u206e\u206a\u206d\u202b\u200f\u202e\u202a\u206e\u200c\u200d\u202e\u202e\u200f\u206a\u200c\u206b\u206f\u200b\u202e\u206d\u202a\u202e\u202d\u206f\u200b\u200c\u202e = num - 1; num2 = ((int)num3 * -284923074) ^ -139805671; continue; case 1u: return; } break; } } } internal void \u202c\u206d\u206b\u202b\u202c\u206f\u202e\u200c\u200b\u206b\u202b\u200e\u206c\u206a\u200e\u206c\u202a\u206b\u206a\u206f\u200e\u202b\u206a\u206f\u202d\u200b\u200c\u202e\u206b\u202d\u206c\u206d\u206e\u200d\u206d\u202c\u200f\u200d\u206b\u206f\u202e(Stream inStream, Stream outStream) { \u206f\u206c\u200e\u200f\u200f\u206b\u202e\u202e\u202e\u202e\u200b\u200f\u206e\u200f\u202b\u206f\u202a\u202d\u202d\u202b\u200c\u200e\u206d\u200b\u200f\u206c\u200d\u200e\u206e\u206c\u200e\u206f\u200c\u206a\u202e\u206c\u200e\u200f\u200e\u202a\u202e.\u202c\u202c\u206c\u202a\u206a\u206d\u202b\u200f\u202a\u206f\u200f\u206a\u200c\u202c\u200f\u202e\u200d\u200c\u202e\u206c\u206d\u200d\u206f\u200d\u206b\u200f\u200b\u202d\u202c\u200e\u206c\u202e\u202b\u200f\u206f\u202a\u200c\u200f\u202c\u206b\u202e(inStream); \u206e\u206e\u200d\u202d\u202a\u206c\u200b\u200b\u206f\u202c\u200f\u206e\u206d\u202d\u206f\u206c\u206d\u202d\u202b\u200f\u200f\u202d\u206b\u206a\u202c\u200b\u202c\u200d\u202c\u202b\u202c\u200e\u200e\u200b\u202a\u200d\u200d\u200f\u206e\u202d\u202e.\u200e\u206e\u206a\u206e\u202d\u200c\u200d\u202c\u206f\u200d\u206f\u202b\u206a\u202c\u206a\u202b\u200f\u202b\u200c\u200e\u202e\u202e\u202b\u202c\u206e\u202c\u206a\u202c\u200e\u206e\u200c\u200b\u200f\u206d\u202c\u202c\u200b\u200c\u206c\u206d\u202e(outStream, \u206d\u202c\u200b\u202d\u206a\u200e\u206e\u200f\u206f\u206c\u202b\u206b\u206e\u202c\u206e\u206e\u200d\u202d\u202d\u200c\u206f\u206d\u202e\u206f\u206f\u206e\u206b\u200e\u206c\u200e\u200b\u202e\u206f\u200c\u200d\u206c\u200f\u200d\u206c\u206b\u202e); uint num = 0u; uint num5 = default(uint); uint num8 = default(uint); while (true) { int num2; int num3; if (num >= 12) { num2 = 745594027; num3 = num2; } else { num2 = 261031227; num3 = num2; } while (true) { uint num4; switch ((num4 = (uint)num2 ^ 0x31198F0u) % 21) { case 5u: num2 = 261031227; continue; default: return; case 20u: \u206a\u200d\u200b\u206b\u202d\u202d\u206e\u200b\u202a\u206d\u206c\u206b\u202b\u202e\u202d\u202c\u206f\u206b\u206e\u206e\u206d\u202e\u202b\u200d\u200f\u202c\u206d\u202b\u206b\u202b\u206a\u206a\u200c\u202c\u206c\u206d\u206d\u202a\u200e\u206e\u202e[num].\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); num2 = (int)((num4 * 11648541) ^ 0x18988A0D); continue; case 14u: num2 = (int)(num4 * 2095762050) ^ -307330654; continue; case 17u: { int num7; if (num >= 4) { num2 = 204747157; num7 = num2; } else { num2 = 574849566; num7 = num2; } continue; } case 7u: \u200d\u206a\u206b\u206c\u206e\u202a\u202e\u206a\u200c\u200c\u206f\u202b\u202e\u206d\u200c\u206b\u206f\u200d\u206d\u200b\u200f\u206c\u206e\u200b\u202a\u202c\u206f\u206a\u200d\u206c\u202b\u202c\u206e\u206e\u202a\u200d\u206b\u202e\u202a\u206a\u202e[num].\u200c\u200f\u206d\u206c\u200e\u206b\u200b\u202a\u202d\u206b\u200d\u200b\u202d\u200f\u202c\u202b\u206a\u200d\u202c\u202b\u200b\u206c\u202d\u200f\u206e\u200f\u202c\u200f\u200b\u206b\u200b\u206e\u200f\u202b\u200c\u206d\u206b\u200f\u206a\u202e(); num++; num2 = 1294623922; continue; case 8u: \u206e\u200f\u206f\u206a\u206e\u200d\u200c\u202e\u200f\u200e\u202b\u202c\u202e\u200b\u200e\u200e\u206d\u206a\u206d\u206e\u202e\u202e\u200d\u202c\u202a\u202a\u206e\u202d\u206c\u206f\u206e\u200d\u202c\u202d\u202c\u200f\u200c\u206c\u206d\u202b\u202e[num].\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); \u202b\u200c\u202e\u202c\u202d\u206c\u202c\u200f\u202b\u206f\u206f\u200d\u206f\u202a\u206f\u202b\u206f\u206b\u202d\u202a\u202c\u206c\u206d\u202e\u202b\u200d\u200d\u206a\u200c\u206b\u206f\u202d\u206e\u206f\u200b\u206d\u200b\u206f\u202b\u200d\u202e[num].\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); num++; num2 = (int)((num4 * 386290511) ^ 0x74F17DBF); continue; case 6u: \u206b\u200b\u200b\u206b\u206d\u206e\u202e\u206f\u206f\u206d\u202a\u202e\u206f\u206e\u202a\u206c\u202c\u206c\u202b\u200f\u200b\u200f\u200d\u202d\u202d\u200c\u206e\u202e\u206c\u202a\u200c\u202d\u202c\u200d\u200e\u202a\u206c\u202c\u202b\u200f\u202e[num].\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); num2 = (int)(num4 * 697412328) ^ -1301510672; continue; case 2u: \u200e\u206f\u206b\u200f\u202a\u200d\u200b\u200d\u200b\u200d\u206e\u206b\u202d\u202b\u206d\u202d\u200d\u206b\u200b\u202b\u202c\u206b\u206e\u200f\u200e\u200f\u206c\u200f\u206e\u206d\u206f\u202c\u202d\u206c\u200c\u206f\u206d\u200e\u202a\u206d\u202e.\u200c\u200f\u206d\u206c\u200e\u206b\u200b\u202a\u202d\u206b\u200d\u200b\u202d\u200f\u202c\u202b\u206a\u200d\u202c\u202b\u200b\u206c\u202d\u200f\u206e\u200f\u202c\u200f\u200b\u206b\u200b\u206e\u200f\u202b\u200c\u206d\u206b\u200f\u206a\u202e(); num2 = (int)(num4 * 22079652) ^ -992634247; continue; case 19u: num = 0u; num2 = (int)(num4 * 827582775) ^ -776939893; continue; case 9u: \u206f\u206b\u206e\u206a\u200c\u202c\u202d\u206d\u206a\u206e\u206f\u202c\u200e\u200b\u200f\u200d\u206b\u202d\u206a\u206e\u200d\u200b\u206f\u200e\u202a\u202a\u200c\u206f\u202e\u200f\u206f\u200e\u200b\u200d\u206b\u206a\u206c\u200f\u200d\u200e\u202e.\u206e\u202c\u206b\u202c\u200f\u202b\u202b\u200f\u200e\u206d\u200e\u200d\u206e\u206d\u200d\u202c\u202e\u202e\u202e\u206d\u206d\u200f\u206a\u206e\u206e\u200d\u206d\u200e\u202b\u200c\u200e\u200e\u206d\u206d\u200e\u206c\u200e\u200b\u202b\u202c\u202e(); num2 = ((int)num4 * -883190199) ^ -1648497476; continue; case 11u: num5 = 0u; num2 = 1538870549; continue; case 0u: { int num9; if (num5 > \u206a\u200d\u206f\u206f\u202c\u202c\u202e\u206f\u202c\u202d\u200c\u206d\u202c\u206d\u206e\u206a\u206d\u202b\u200f\u202e\u202a\u206e\u200c\u200d\u202e\u202e\u200f\u206a\u200c\u206b\u206f\u200b\u202e\u206d\u202a\u202e\u202d\u206f\u200b\u200c\u202e) { num2 = 135295772; num9 = num2; } else { num2 = 1883290212; num9 = num2; } continue; } case 4u: break; case 16u: \u200e\u206a\u206c\u202d\u202a\u200b\u206d\u200e\u206a\u200d\u200f\u202d\u200c\u200d\u202a\u200c\u202e\u202c\u200c\u206e\u202c\u206b\u200e\u206b\u202a\u200e\u202e\u206b\u206a\u206d\u206c\u202a\u202e\u206f\u206b\u206f\u200c\u202b\u200b\u206a\u202e[num8].\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); \u202a\u202d\u200c\u202a\u200f\u206c\u200f\u200e\u206f\u202c\u202a\u206a\u200d\u206a\u200b\u200c\u200e\u200d\u200b\u206a\u206a\u200d\u206e\u202a\u200c\u200c\u206b\u200e\u200d\u202b\u200c\u200f\u200b\u206e\u202b\u206d\u202b\u200c\u206a\u200e\u202e[num8].\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); num2 = (int)((num4 * 1702044387) ^ 0x3242937F); continue; case 10u: \u206c\u200f\u202d\u202b\u206e\u202d\u202e\u206b\u200b\u202d\u202c\u206a\u202a\u200b\u200b\u202e\u206e\u206c\u202c\u206e\u206c\u206a\u206f\u202c\u200d\u206d\u200f\u200d\u200c\u200c\u206e\u200f\u200b\u200f\u206e\u200e\u206d\u200d\u206f\u202d\u202e.\u206f\u200b\u200c\u202c\u202a\u202e\u202c\u200c\u200e\u202c\u206b\u200b\u202e\u202e\u200b\u206b\u202a\u206a\u200c\u206b\u206d\u202a\u206d\u202d\u202a\u202b\u206d\u200f\u206b\u206d\u202e\u206c\u200f\u200f\u200d\u206d\u206b\u202e\u206e\u206d\u202e(); \u206b\u202d\u206f\u206b\u202c\u202c\u202c\u202b\u206c\u202d\u206a\u200d\u206b\u206e\u206c\u206b\u200e\u202c\u200d\u200b\u200e\u200f\u200f\u200d\u206d\u206e\u200c\u202d\u206a\u202c\u206c\u202b\u206e\u202a\u200d\u202b\u202c\u200d\u206c\u206e\u202e.\u206f\u200b\u200c\u202c\u202a\u202e\u202c\u200c\u200e\u202c\u206b\u200b\u202e\u202e\u200b\u206b\u202a\u206a\u200c\u206b\u206d\u202a\u206d\u202d\u202a\u202b\u206d\u200f\u206b\u206d\u202e\u206c\u200f\u200f\u200d\u206d\u206b\u202e\u206e\u206d\u202e(); num2 = (int)(num4 * 446639824) ^ -1051734206; continue; case 12u: \u206a\u206f\u206d\u200b\u200e\u200e\u200f\u206c\u206c\u202a\u202e\u200f\u206e\u202c\u206f\u200d\u206c\u206d\u202a\u206b\u200e\u206b\u206c\u206a\u200b\u200d\u202c\u200c\u202a\u200d\u200c\u206d\u202a\u206b\u206d\u202e\u200f\u206d\u206d\u200c\u202e[num].\u206d\u206a\u206d\u206f\u206f\u202e\u206e\u206a\u202e\u202d\u200b\u206a\u200e\u200e\u206a\u202a\u200e\u206a\u202c\u206f\u206a\u202d\u206f\u206f\u202a\u202a\u202d\u202d\u200b\u202d\u202a\u200d\u202d\u200e\u202b\u206d\u202b\u206c\u200f\u200d\u202e(); num++; num2 = 414418744; continue; case 18u: num = 0u; num2 = (int)(num4 * 984463903) ^ -823204205; continue; case 15u: num8 = (num << 4) + num5; num2 = 1304004278; continue; case 3u: { int num6; if (num >= 114) { num2 = 110545862; num6 = num2; } else { num2 = 2046207499; num6 = num2; } continue; } case 13u: num5++; num2 = ((int)num4 * -1074682212) ^ 0x37E0044; continue; case 1u: return; } break; } } } internal void \u200d\u206d\u206a\u206b\u202a\u206b\u202d\u200b\u200f\u202e\u202a\u206a\u202a\u200d\u206c\u200c\u202e\u200c\u206e\u206f\u206c\u206f\u206a\u206d\u202a\u206f\u200d\u200c\u200c\u202a\u202c\u200e\u202b\u206c\u200d\u200e\u206d\u200f\u202a\u206c\u202e(Stream inStream, Stream outStream, long inSize, long outSize) { \u202c\u206d\u206b\u202b\u202c\u206f\u202e\u200c\u200b\u206b\u202b\u200e\u206c\u206a\u200e\u206c\u202a\u206b\u206a\u206f\u200e\u202b\u206a\u206f\u202d\u200b\u200c\u202e\u206b\u202d\u206c\u206d\u206e\u200d\u206d\u202c\u200f\u200d\u206b\u206f\u202e(inStream, outStream); \u200c\u200c\u206a\u200f\u206f\u206d\u200c\u202a\u200c\u206a\u206d\u200f\u206e\u206d\u200f\u202d\u206a\u202c\u206f\u202d\u202b\u200e\u202a\u206f\u200d\u200e\u206a\u206b\u202d\u202d\u200e\u200e\u200f\u202e\u202a\u206a\u202d\u202d\u206e\u202b\u202e obj = default(\u200c\u200c\u206a\u200f\u206f\u206d\u200c\u202a\u200c\u206a\u206d\u200f\u206e\u206d\u200f\u202d\u206a\u202c\u206f\u202d\u202b\u200e\u202a\u206f\u200d\u200e\u206a\u206b\u202d\u202d\u200e\u200e\u200f\u202e\u202a\u206a\u202d\u202d\u206e\u202b\u202e); ulong num3 = default(ulong); uint num21 = default(uint); byte b = default(byte); byte b2 = default(byte); byte prevByte = default(byte); uint num13 = default(uint); uint num11 = default(uint); uint num15 = default(uint); int num17 = default(int); uint num16 = default(uint); uint num20 = default(uint); uint num12 = default(uint); uint num7 = default(uint); ulong num4 = default(ulong); while (true) { int num = 1142462908; while (true) { uint num2; switch ((num2 = (uint)num ^ 0xEA8670Cu) % 57) { case 22u: break; default: return; case 30u: { int num6; if (\u206b\u200b\u200b\u206b\u206d\u206e\u202e\u206f\u206f\u206d\u202a\u202e\u206f\u206e\u202a\u206c\u202c\u206c\u202b\u200f\u200b\u200f\u200d\u202d\u202d\u200c\u206e\u202e\u206c\u202a\u200c\u202d\u202c\u200d\u200e\u202a\u206c\u202c\u202b\u200f\u202e[obj.\u200d\u200f\u202c\u206f\u206f\u206b\u206f\u206e\u202a\u206c\u200f\u202c\u200c\u202d\u202d\u206a\u200d\u202a\u202a\u206a\u200d\u202b\u200c\u200c\u202e\u206a\u200d\u202c\u202d\u206e\u200b\u206e\u206d\u200d\u202c\u202c\u200b\u202e\u206a\u202e].\u202b\u202e\u206c\u206b\u200e\u202c\u202c\u206c\u202c\u202d\u206d\u202e\u206a\u206a\u202a\u200c\u206c\u206e\u200f\u200e\u202b\u206f\u202c\u202c\u202a\u202e\u206d\u200f\u206a\u202e\u206a\u202d\u202b\u200b\u206d\u200d\u200e\u202d\u202b\u200f\u202e(\u206f\u206c\u200e\u200f\u200f\u206b\u202e\u202e\u202e\u202e\u200b\u200f\u206e\u200f\u202b\u206f\u202a\u202d\u202d\u202b\u200c\u200e\u206d\u200b\u200f\u206c\u200d\u200e\u206e\u206c\u200e\u206f\u200c\u206a\u202e\u206c\u200e\u200f\u200e\u202a\u202e) == 1) { num = 799902436; num6 = num; } else { num = 1275849024; num6 = num; } continue; } case 54u: num3 += num21; num = ((int)num2 * -771768738) ^ 0x4ECD4275; continue; case 39u: \u206e\u206e\u200d\u202d\u202a\u206c\u200b\u200b\u206f\u202c\u200f\u206e\u206d\u202d\u206f\u206c\u206d\u202d\u202b\u200f\u200f\u202d\u206b\u206a\u202c\u200b\u202c\u200d\u202c\u202b\u202c\u200e\u200e\u200b\u202a\u200d\u200d\u200f\u206e\u202d\u202e.\u206e\u202e\u206c\u200f\u200d\u206c\u206a\u200d\u202a\u206d\u200c\u206b\u200d\u202a\u200b\u206c\u200f\u200e\u200e\u206a\u202d\u202c\u200f\u202d\u206e\u200f\u200e\u200e\u200b\u202a\u206e\u202e\u206d\u202a\u202b\u200f\u206b\u202a\u200f\u200d\u202e(b); num3++; num = ((int)num2 * -1335055279) ^ 0x2B286928; continue; case 40u: b2 = \u206f\u206b\u206e\u206a\u200c\u202c\u202d\u206d\u206a\u206e\u206f\u202c\u200e\u200b\u200f\u200d\u206b\u202d\u206a\u206e\u200d\u200b\u206f\u200e\u202a\u202a\u200c\u206f\u202e\u200f\u206f\u200e\u200b\u200d\u206b\u206a\u206c\u200f\u200d\u200e\u202e.\u202c\u202b\u206a\u202b\u206d\u200b\u202c\u200f\u202d\u206f\u206f\u202c\u202a\u206c\u200f\u202d\u206a\u200f\u200c\u202c\u200b\u200d\u200d\u202e\u206c\u206d\u206b\u202b\u202e\u206e\u200d\u202a\u200b\u202c\u200c\u200c\u202a\u206a\u202c\u202c\u202e(\u206f\u206c\u200e\u200f\u200f\u206b\u202e\u202e\u202e\u202e\u200b\u200f\u206e\u200f\u202b\u206f\u202a\u202d\u202d\u202b\u200c\u200e\u206d\u200b\u200f\u206c\u200d\u200e\u206e\u206c\u200e\u206f\u200c\u206a\u202e\u206c\u200e\u200f\u200e\u202a\u202e, (uint)num3, prevByte); num = 1715331959; continue; case 16u: num13 = 0u; num11 = 0u; num = (int)(num2 * 1235246952) ^ -613196745; continue; case 7u: num = ((int)num2 * -1142286223) ^ -583067791; continue; case 35u: num13 = num15; num = 960223403; continue; case 20u: num = ((int)num2 * -2005804662) ^ 0x7CB22D0F; continue; case 52u: { num13 = (2 | (num15 & 1)) << num17; int num33; int num34; if (num15 >= 14) { num33 = 109533321; num34 = num33; } else { num33 = 1104895350; num34 = num33; } num = num33 ^ (int)(num2 * 366719371); continue; } case 8u: obj.\u200e\u202c\u206a\u202a\u206a\u200b\u200e\u206b\u200b\u206a\u202a\u206d\u206e\u206f\u206d\u200e\u200d\u200b\u200b\u202c\u202d\u206a\u200d\u200d\u200c\u202a\u200e\u202c\u206f\u200b\u200e\u200b\u200d\u206e\u
plugins/Datys_Skills.dll
Decompiled 7 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Datys_Skills; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using ServerSync; using SoftReferenceableAssets; using StatusEffectManager; using TMPro; using UnityEngine; using UnityEngine.UI; using YamlDotNet.Serialization; [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyProduct("Datys_Skills")] [assembly: AssemblyCompany("Datys")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyDescription("")] [assembly: AssemblyTitle("Datys_Skills")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyFileVersion("1.1.0")] [assembly: AssemblyConfiguration("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<de706399-a352-4e0e-aacb-2ecb610bbe53>Embedded] internal sealed class <de706399-a352-4e0e-aacb-2ecb610bbe53>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] [<de706399-a352-4e0e-aacb-2ecb610bbe53>Embedded] [CompilerGenerated] internal sealed class <0f213f35-8a2a-422b-8983-f1876bd13d3f>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <0f213f35-8a2a-422b-8983-f1876bd13d3f>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <0f213f35-8a2a-422b-8983-f1876bd13d3f>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] [<de706399-a352-4e0e-aacb-2ecb610bbe53>Embedded] [CompilerGenerated] internal sealed class <09d365fe-f346-48cd-812c-04f81944c53a>NullableContextAttribute : Attribute { public readonly byte Flag; public <09d365fe-f346-48cd-812c-04f81944c53a>NullableContextAttribute(byte P_0) { Flag = P_0; } } } [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] public static class DualWieldSystem { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] [HarmonyPatch(typeof(Attack), "Start")] private static class AttackStartPatch { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] private static void Prefix(Attack __instance, Humanoid character) { if (!((Character)character).IsPlayer() || !HasDualWieldEffect(character)) { return; } rightItem = character.GetRightItem(); leftItem = character.GetLeftItem(); if (IsDualWieldSetupValid(rightItem, leftItem)) { isDualWielding = true; string attackAnimation = __instance.m_attackAnimation; string text = attackAnimation.ToLowerInvariant(); bool flag = HasSkill((SkillType)2, rightItem, leftItem); bool flag2 = text.EndsWith("_secondary") || text.Contains("special"); if (text.Contains("axe") && text.Contains("special")) { flag2 = true; } __instance.m_attackAnimation = ((!flag) ? (flag2 ? "dualaxes_secondary" : "dualaxes") : (flag2 ? "dual_knives_secondary" : "dual_knives")); __instance.m_attackChainLevels = (flag2 ? 1 : 4); } } } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] [HarmonyPatch(typeof(Character), "Damage")] private static class CharacterDamagePatch { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] private static void Prefix(Character __instance, ref HitData hit) { //IL_003f: 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) //IL_0053: 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_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: 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) if ((Object)(object)hit.GetAttacker() == (Object)(object)Player.m_localPlayer && isDualWielding && rightItem != null && leftItem != null) { DamageTypes damages = leftItem.m_shared.m_damages; hit.m_damage.m_blunt += damages.m_blunt * 0.5f; hit.m_damage.m_slash += damages.m_slash * 0.5f; hit.m_damage.m_pierce += damages.m_pierce * 0.5f; hit.m_damage.m_fire += damages.m_fire * 0.5f; hit.m_damage.m_frost += damages.m_frost * 0.5f; hit.m_damage.m_lightning += damages.m_lightning * 0.5f; hit.m_damage.m_poison += damages.m_poison * 0.5f; hit.m_damage.m_spirit += damages.m_spirit * 0.5f; } } } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] [HarmonyPatch(typeof(Humanoid), "EquipItem")] private static class EquipItemPatch { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] private static bool Prefix(Humanoid __instance, ItemData item, bool triggerEquipEffects, ref bool __result) { if (!((Character)__instance).IsPlayer() || (Object)(object)__instance != (Object)(object)Player.m_localPlayer) { return true; } if (!HasDualWieldEffect(__instance)) { return true; } ItemData rightItem = __instance.GetRightItem(); ItemData leftItem = __instance.GetLeftItem(); if (rightItem == null || !IsValidDualWeapon(item) || !IsValidDualWeapon(rightItem)) { isDualWielding = false; return true; } if (leftItem != null) { leftItem.m_equipped = false; __instance.UnequipItem(leftItem, false); } __instance.m_leftItem = item; __instance.m_leftItem.m_equipped = true; __instance.m_hiddenLeftItem = null; __instance.m_hiddenRightItem = null; DualWieldSystem.leftItem = item; DualWieldSystem.rightItem = rightItem; isDualWielding = true; m_changeAttach = true; __result = true; __instance.SetupEquipment(); if (triggerEquipEffects) { __instance.TriggerEquipEffect(item); } return false; } } [HarmonyPatch(typeof(Humanoid), "UnequipItem")] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] private static class UnequipItemPatch { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] private static void Postfix(Humanoid __instance, ItemData item) { if (!((Object)(object)__instance != (Object)(object)Player.m_localPlayer) && isDualWielding) { m_lastLeftItem = DualWieldSystem.leftItem?.m_shared.m_name ?? ""; ItemData leftItem = DualWieldSystem.leftItem; if (leftItem != null && leftItem.m_customData.TryGetValue("transmog_skin_name", out var value)) { m_lastLeftItem = value; } if (item == rightItem && DualWieldSystem.leftItem != null) { __instance.m_rightItem = DualWieldSystem.leftItem; __instance.m_leftItem = null; __instance.SetupVisEquipment(__instance.m_visEquipment, false); } rightItem = null; DualWieldSystem.leftItem = null; isDualWielding = false; } } } [HarmonyPatch(typeof(VisEquipment), "AttachItem")] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] private static class AttachItemPatch { private static void Prefix(VisEquipment __instance, int itemHash, ref Transform joint) { if (!Object.op_Implicit((Object)(object)Player.m_localPlayer) || !m_changeAttach || (Object)(object)joint != (Object)(object)__instance.m_backMelee) { return; } GameObject itemPrefab = ObjectDB.instance.GetItemPrefab(itemHash); ItemDrop val = default(ItemDrop); if (!((Object)(object)itemPrefab == (Object)null) && itemPrefab.TryGetComponent<ItemDrop>(ref val)) { string name = val.m_itemData.m_shared.m_name; val.m_itemData.m_customData.TryGetValue("transmog_skin_name", out var value); if (!(name != m_lastLeftItem) || !(value != m_lastLeftItem)) { joint = __instance.m_backMelee; ((MonoBehaviour)Player.m_localPlayer).StartCoroutine(AdjustBackWeaponTransform(__instance)); m_lastLeftItem = ""; m_changeAttach = false; } } } private static IEnumerator AdjustBackWeaponTransform(VisEquipment vis) { yield return null; Transform weapon = ((IEnumerable<Transform>)((Component)vis.m_backMelee).GetComponentsInChildren<Transform>()).FirstOrDefault((Func<Transform, bool>)([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Transform t) => (Object)(object)t != (Object)(object)vis.m_backMelee && ((Object)t).name.ToLower().Contains("attach"))); if ((Object)(object)weapon == (Object)null) { weapon = ((IEnumerable<Transform>)((Component)vis.m_backMelee).GetComponentsInChildren<Transform>()).FirstOrDefault((Func<Transform, bool>)([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Transform t) => (Object)(object)t != (Object)(object)vis.m_backMelee)); } if ((Object)(object)weapon != (Object)null) { Transform obj = weapon; obj.localPosition += new Vector3(-0.0035f, 0f, 0.002f); Transform obj2 = weapon; obj2.localRotation *= Quaternion.Euler(0f, 60f, 0f); ((Object)weapon).name = "[AdjustedDualWeapon]"; } else { Debug.LogWarning((object)"[DualWield] ❌ Žádná připojená zbraň nalezena pro úpravu."); } } } [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static ItemData rightItem; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static ItemData leftItem; private static bool isDualWielding; private static string m_lastLeftItem = ""; private static bool m_changeAttach; private static readonly HashSet<string> AllowedDualCategories = new HashSet<string> { "1haxe", "1hmaces", "1hswords", "daggers" }; public static bool IsDualWielding => isDualWielding; private static bool HasDualWieldEffect(Humanoid h) { return ((Character)h).GetSEMan().HaveStatusEffect(StringExtensionMethods.GetStableHashCode("SE_DualWield")); } private static bool HasSkill(SkillType skill, ItemData a, ItemData b) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) return a.m_shared.m_skillType == skill || b.m_shared.m_skillType == skill; } private static bool IsValidDualWeapon(ItemData item) { if ((Object)(object)item?.m_dropPrefab == (Object)null) { return false; } string name = ((Object)item.m_dropPrefab).name; string category; return !string.IsNullOrEmpty(name) && GemRules.TryGetCategory(name, out category) && AllowedDualCategories.Contains(category.ToLower()); } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] private static bool IsDualWieldSetupValid(ItemData right, ItemData left) { return right != null && left != null && IsValidDualWeapon(right) && IsValidDualWeapon(left); } } public static class InterruptHelper { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] public static bool CancelCurrentAttack(Player player, float minTime = 0f) { if ((Object)(object)player == (Object)null || ((Humanoid)player).m_currentAttack == null) { return false; } if (((Humanoid)player).m_currentAttack.m_time <= minTime) { return false; } ((Humanoid)player).m_currentAttack.Abort(); ((Character)player).m_attack = false; ((Character)player).m_attackHold = false; ((Character)player).m_secondaryAttack = false; ((Character)player).m_secondaryAttackHold = false; ((Character)player).m_zanim.SetSpeed(10000f); ((Character)((Humanoid)player).m_currentAttack.m_character).FreezeFrame(0f); ((Humanoid)player).m_previousAttack = null; ((Humanoid)player).m_currentAttack = null; return true; } } [HarmonyPatch(typeof(InventoryGrid), "UpdateGui")] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] public static class InventoryGrid_SocketIconOverlay { private static readonly Dictionary<string, Sprite> _spriteCache = new Dictionary<string, Sprite>(); private static bool socketsVisible = false; [HarmonyPostfix] public static void Postfix(InventoryGrid __instance) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //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) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Expected O, but got Unknown //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0246: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Expected O, but got Unknown //IL_0296: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02b9: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02dd: Unknown result type (might be due to invalid IL or missing references) //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_0350: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0508: Unknown result type (might be due to invalid IL or missing references) //IL_050d: Unknown result type (might be due to invalid IL or missing references) //IL_0517: Unknown result type (might be due to invalid IL or missing references) //IL_0355: Unknown result type (might be due to invalid IL or missing references) //IL_037f: Unknown result type (might be due to invalid IL or missing references) //IL_0384: Unknown result type (might be due to invalid IL or missing references) //IL_0392: Unknown result type (might be due to invalid IL or missing references) //IL_0397: Unknown result type (might be due to invalid IL or missing references) //IL_03a5: Unknown result type (might be due to invalid IL or missing references) //IL_03aa: Unknown result type (might be due to invalid IL or missing references) //IL_03f5: Unknown result type (might be due to invalid IL or missing references) //IL_03fa: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_041b: Unknown result type (might be due to invalid IL or missing references) //IL_0420: Unknown result type (might be due to invalid IL or missing references) //IL_042e: Unknown result type (might be due to invalid IL or missing references) //IL_0433: Unknown result type (might be due to invalid IL or missing references) //IL_0482: Unknown result type (might be due to invalid IL or missing references) //IL_0487: Unknown result type (might be due to invalid IL or missing references) //IL_0495: Unknown result type (might be due to invalid IL or missing references) //IL_049a: Unknown result type (might be due to invalid IL or missing references) //IL_04a8: Unknown result type (might be due to invalid IL or missing references) //IL_04ad: Unknown result type (might be due to invalid IL or missing references) //IL_04bb: Unknown result type (might be due to invalid IL or missing references) //IL_04c0: Unknown result type (might be due to invalid IL or missing references) //IL_04ce: Unknown result type (might be due to invalid IL or missing references) //IL_04d3: Unknown result type (might be due to invalid IL or missing references) //IL_03b8: Unknown result type (might be due to invalid IL or missing references) //IL_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_0441: Unknown result type (might be due to invalid IL or missing references) //IL_0446: Unknown result type (might be due to invalid IL or missing references) //IL_04e1: Unknown result type (might be due to invalid IL or missing references) //IL_04e6: Unknown result type (might be due to invalid IL or missing references) //IL_03c5: Unknown result type (might be due to invalid IL or missing references) //IL_03c7: Unknown result type (might be due to invalid IL or missing references) //IL_044e: Unknown result type (might be due to invalid IL or missing references) //IL_0450: Unknown result type (might be due to invalid IL or missing references) //IL_04ee: Unknown result type (might be due to invalid IL or missing references) //IL_04f0: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown((KeyCode)104)) { socketsVisible = !socketsVisible; } Vector2 val = Vector2.op_Implicit(Input.mousePosition); Rect val3 = default(Rect); foreach (Element element in __instance.m_elements) { if ((Object)(object)element?.m_icon == (Object)null) { continue; } foreach (Transform item in ((Component)element.m_icon).transform.parent) { Transform val2 = item; if (((Object)val2).name.StartsWith("SocketIcon_")) { Object.Destroy((Object)(object)((Component)val2).gameObject); } } ItemData itemAt = __instance.m_inventory.GetItemAt(element.m_pos.x, element.m_pos.y); if (itemAt == null) { continue; } RectTransform component = ((Component)element.m_icon).GetComponent<RectTransform>(); bool flag = false; if ((Object)(object)component != (Object)null) { Vector3[] array = (Vector3[])(object)new Vector3[4]; component.GetWorldCorners(array); ((Rect)(ref val3))..ctor(array[0].x, array[0].y, array[2].x - array[0].x, array[2].y - array[0].y); flag = ((Rect)(ref val3)).Contains(val); } if (!socketsVisible && !flag) { continue; } List<(string, string)> socketData = SocketHelper.GetSocketData(itemAt); for (int i = 0; i < socketData.Count; i++) { string type = ((socketData[i].Item2 != "empty") ? socketData[i].Item2 : socketData[i].Item1); Sprite val4 = LoadSocketSpriteByType(type); if ((Object)(object)val4 == (Object)null) { continue; } GameObject val5 = new GameObject($"SocketIcon_{i}", new Type[2] { typeof(RectTransform), typeof(Image) }); val5.transform.SetParent(((Component)element.m_icon).transform.parent, false); val5.transform.SetAsLastSibling(); Image component2 = val5.GetComponent<Image>(); component2.sprite = val4; ((Graphic)component2).raycastTarget = false; ((Graphic)component2).color = Color.white; RectTransform component3 = val5.GetComponent<RectTransform>(); component3.anchorMin = Vector2.zero; component3.anchorMax = Vector2.zero; component3.pivot = Vector2.zero; component3.sizeDelta = new Vector2(25f, 25f); RectTransform val6 = component3; int count = socketData.Count; if (1 == 0) { } Vector2 anchoredPosition; switch (count) { case 1: anchoredPosition = new Vector2(22f, 22f); break; case 2: anchoredPosition = ((i == 0) ? new Vector2(12f, 22f) : new Vector2(32f, 22f)); break; case 3: { if (1 == 0) { } Vector2 val7 = (Vector2)(i switch { 0 => new Vector2(10f, 28f), 1 => new Vector2(34f, 28f), 2 => new Vector2(22f, 10f), _ => new Vector2(22f, 22f), }); if (1 == 0) { } anchoredPosition = val7; break; } case 4: { if (1 == 0) { } Vector2 val7 = (Vector2)(i switch { 0 => new Vector2(10f, 28f), 1 => new Vector2(34f, 28f), 2 => new Vector2(10f, 8f), 3 => new Vector2(34f, 8f), _ => new Vector2(22f, 22f), }); if (1 == 0) { } anchoredPosition = val7; break; } case 5: { if (1 == 0) { } Vector2 val7 = (Vector2)(i switch { 0 => new Vector2(22f, 36f), 1 => new Vector2(6f, 26f), 2 => new Vector2(38f, 26f), 3 => new Vector2(12f, 6f), 4 => new Vector2(32f, 6f), _ => new Vector2(22f, 22f), }); if (1 == 0) { } anchoredPosition = val7; break; } default: anchoredPosition = new Vector2(4f + (float)i * 14f, 4f); break; } if (1 == 0) { } val6.anchoredPosition = anchoredPosition; } } } private static Sprite LoadSocketSpriteByType(string type) { string text = type.ToLower(); if (1 == 0) { } string text2 = text switch { "green" => "D_Icon_Green", "red" => "D_Icon_Red", "blue" => "D_Icon_Blue", "yellow" => "D_Icon_Yellow", "krump_mat_tribe_16_fehu" => "Krump_Mat_Tribe_16_Fehu", "krump_mat_tribe_14_hagalaz" => "Krump_Mat_Tribe_14_Hagalaz", "krump_mat_tribe_17_gebo" => "Krump_Mat_Tribe_17_Gebo", "krump_mat_tribe_09_algiz" => "Krump_Mat_Tribe_09_Algiz", "krump_mat_tribe_13_thurisaz" => "Krump_Mat_Tribe_13_Thurisaz", "krump_mat_tribe_02_eihwaz" => "Krump_Mat_Tribe_02_Eihwaz", "krump_mat_tribe_01_inguz" => "Krump_Mat_Tribe_01_Inguz", "krump_mat_tribe_03_uruz" => "Krump_Mat_Tribe_03_Uruz", "krump_mat_tribe_04_perth" => "Krump_Mat_Tribe_04_Perth", "krump_mat_tribe_05_mannaz" => "Krump_Mat_Tribe_05_Mannaz", "krump_mat_tribe_06_wunjo" => "Krump_Mat_Tribe_06_Wunjo", "krump_mat_tribe_08_isa" => "Krump_Mat_Tribe_08_Isa", "krump_mat_tribe_18_teiwaz" => "Krump_Mat_Tribe_18_Teiwaz", "krump_mat_tribe_20_kano" => "Krump_Mat_Tribe_20_Kano", "krump_mat_tribe_07_raido" => "Krump_Mat_Tribe_07_Raido", "krump_mat_tribe_10_othila" => "Krump_Mat_Tribe_10_Othila", "d_transmog_gem" => "D_Transmog_Gem", "d_smog_demonic_blade" => "D_Smog_Demonic_Blade", "d_smog_umbrafang_blade" => "D_Smog_Umbrafang_Blade", "d_smog_demonic_sword" => "D_Smog_Demonic_Sword", "d_smog_snake_sword" => "D_Smog_Snake_Sword", "d_smog_butcher_sword" => "D_Smog_Butcher_Sword", "d_smog_baldur_sword" => "D_Smog_Baldur_Sword", "d_smog_demonic_shield" => "D_Smog_Demonic_Shield", "d_smog_forest_bow" => "D_Smog_Forest_Bow", "d_smog_demonic_bow" => "D_Smog_Demonic_Bow", "d_smog_demonic_hammer" => "D_Smog_Demonic_Hammer", "d_smog_demonic_dagger" => "D_Smog_Demonic_Dagger", "d_smog_demonic_greataxe" => "D_Smog_Demonic_GreatAxe", "d_smog_demonic_axe" => "D_Smog_Demonic_Axe", "d_smog_scrapfang_axe" => "D_Smog_Scrapfang_Axe", "d_smog_demonic_mace" => "D_Smog_Demonic_Mace", "d_smog_soulpiercer_mace" => "D_Smog_Soulpiercer_Mace", "d_smog_demonic_spear" => "D_Smog_Demonic_Spear", "grausten" => "Grausten", _ => type.ToLower(), }; if (1 == 0) { } string text3 = text2; if (!_spriteCache.TryGetValue(text3, out var value)) { ObjectDB instance = ObjectDB.instance; GameObject val = ((instance != null) ? instance.GetItemPrefab(text3) : null); Sprite[] array = ((val == null) ? null : val.GetComponent<ItemDrop>()?.m_itemData?.m_shared?.m_icons); if (array == null || array.Length <= 0) { return null; } value = array[0]; _spriteCache[text3] = value; } return value; } } namespace StatusEffectManager { [PublicAPI] [Description("The ItemDrop effect to apply the status effect")] public enum EffectType { Equip, Attack, Consume, Set } public struct SE_Item { [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(1)] public StatusEffect Effect; public EffectType Type; } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [PublicAPI] public class CustomSE { private static readonly List<CustomSE> RegisteredEffects = new List<CustomSE>(); private static readonly Dictionary<StatusEffect, CustomSE> CustomEffectMap = new Dictionary<StatusEffect, CustomSE>(); internal static readonly List<StatusEffect> CustomSEs = new List<StatusEffect>(); internal static readonly Dictionary<SE_Item, string> AddToPrefabs = new Dictionary<SE_Item, string>(); [Description("Instance of the StatusEffect.")] public readonly StatusEffect Effect; public EffectType Type; private string _folderName = "icons"; private AssetBundle _assetBundle = null; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] [Description("Sets the icon for the StatusEffect. Must be 64x64")] public Sprite IconSprite = null; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private string IconName = null; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private LocalizeKey _name; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static Localization _english; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync = true; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static object _configSync; [Description("Sets the icon for the StatusEffect. Must be 64x64")] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] public string Icon { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] get { return IconName; } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] set { IconName = value; IconSprite = ((IconName == null) ? null : loadSprite(IconName)); Effect.m_icon = IconSprite; } } [Description("Sets the in-game name for the StatusEffect")] public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } StatusEffect effect = Effect; if (effect.m_name.StartsWith("$")) { _name = new LocalizeKey(effect.m_name); } else { string text = "$statuseffect_" + ((Object)Effect).name.Replace(" ", "_"); _name = new LocalizeKey(text).English(effect.m_name); effect.m_name = text; } return _name; } } private static Localization english { get { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (_english == null) { _english = new Localization(); _english.SetupLanguage("English"); } return _english; } } private static BaseUnityPlugin plugin { get { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown if (_plugin == null) { IEnumerable<TypeInfo> source; try { source = Assembly.GetExecutingAssembly().DefinedTypes.ToList(); } catch (ReflectionTypeLoadException ex) { source = from t in ex.Types where t != null select t.GetTypeInfo(); } _plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); } return _plugin; } } [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static object configSync { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " ItemManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } public CustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") : this(EffectManager.RegisterAssetBundle(assetBundleFileName, folderName), customEffectName) { } public CustomSE(AssetBundle bundle, string customEffectName) { Effect = EffectManager.RegisterCustomSE(bundle, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } public CustomSE(string customEffectName) { Effect = ScriptableObject.CreateInstance<StatusEffect>(); EffectManager.RegisterCustomSE(Effect, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } [return: <0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private byte[] ReadEmbeddedFileBytes(string name) { using MemoryStream memoryStream = new MemoryStream(); Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ((_folderName == "") ? "" : ".") + _folderName + "." + name); if (manifestResourceStream == null) { return null; } manifestResourceStream.CopyTo(memoryStream); return memoryStream.ToArray(); } [return: <0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private Texture2D loadTexture(string name) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown byte[] array = ReadEmbeddedFileBytes(name); if (array != null) { Texture2D val = new Texture2D(0, 0); ImageConversion.LoadImage(val, array); return val; } return null; } private Sprite loadSprite(string name) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) Texture2D val = loadTexture(name); if (val != null) { return Sprite.Create(val, new Rect(0f, 0f, 64f, 64f), Vector2.zero); } AssetBundle assetBundle = _assetBundle; Sprite val2 = ((assetBundle != null) ? assetBundle.LoadAsset<Sprite>(name) : null); if (val2 != null) { return val2; } throw new FileNotFoundException("Could not find a file named " + name + " for the effect icon"); } public void AddSEToPrefab(CustomSE customSE, string prefabName) { SE_Item sE_Item = default(SE_Item); sE_Item.Effect = customSE.Effect; sE_Item.Type = customSE.Type; SE_Item key = sE_Item; AddToPrefabs.Add(key, prefabName); } private static ConfigEntry<T> config<[<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] T>(string group, string name, T value, ConfigDescription description) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); configSync?.GetType().GetMethod("AddConfigEntry").MakeGenericMethod(typeof(T)) .Invoke(configSync, new object[1] { val }); return val; } private static ConfigEntry<T> config<[<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] T>(string group, string name, T value, string description) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); } } [PublicAPI] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] public class LocalizeKey { public readonly string Key; public LocalizeKey(string key) { Key = key.Replace("$", ""); } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } return this; } } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] public static class EffectManager { [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] private struct BundleId { [UsedImplicitly] public string assetBundleFileName; [UsedImplicitly] public string folderName; } private static readonly Dictionary<BundleId, AssetBundle> bundleCache; static EffectManager() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown bundleCache = new Dictionary<BundleId, AssetBundle>(); Harmony val = new Harmony("org.bepinex.helpers.StatusEffectManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ObjectDB), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ObjectDBInit", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZNetScene), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ZNetSceneAwake", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static AssetBundle RegisterAssetBundle(string assetBundleFileName, string folderName = "assets") { foreach (AssetBundle allLoadedAssetBundle in AssetBundle.GetAllLoadedAssetBundles()) { if (string.Equals(((Object)allLoadedAssetBundle).name, assetBundleFileName)) { return allLoadedAssetBundle; } } string s = "iEuZ2v1I394uA7RF"; Aes aes = Aes.Create(); aes.Key = Encoding.UTF8.GetBytes(s); aes.IV = Encoding.UTF8.GetBytes(s); aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.PKCS7; ICryptoTransform cryptoTransform = aes.CreateDecryptor(aes.Key, aes.IV); Assembly executingAssembly = Assembly.GetExecutingAssembly(); string name = null; string[] manifestResourceNames = executingAssembly.GetManifestResourceNames(); foreach (string text in manifestResourceNames) { if (text.EndsWith(assetBundleFileName)) { name = text; break; } } Stream manifestResourceStream = executingAssembly.GetManifestResourceStream(name); byte[] array = new byte[manifestResourceStream.Length]; manifestResourceStream.Read(array, 0, array.Length); byte[] array2 = cryptoTransform.TransformFinalBlock(array, 0, array.Length); AssetBundle result = AssetBundle.LoadFromMemory(array2); manifestResourceStream.Dispose(); return result; } public static StatusEffect RegisterCustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") { return RegisterCustomSE(RegisterAssetBundle(assetBundleFileName, folderName), customEffectName); } public static StatusEffect RegisterCustomSE(AssetBundle assets, string customEffectName) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown StatusEffect val = (StatusEffect)assets.LoadAsset<ScriptableObject>(customEffectName); CustomSE.CustomSEs.Add(val); return val; } public static StatusEffect RegisterCustomSE(StatusEffect customSE, string customEffectName) { ((Object)customSE).name = customEffectName; CustomSE.CustomSEs.Add(customSE); return customSE; } [HarmonyPriority(700)] private static void Patch_ObjectDBInit(ObjectDB __instance) { foreach (StatusEffect customSE in CustomSE.CustomSEs) { if (!__instance.m_StatusEffects.Contains(customSE)) { __instance.m_StatusEffects.Add(customSE); } } __instance.UpdateRegisters(); } [HarmonyPriority(700)] private static void Patch_ZNetSceneAwake(ZNetScene __instance) { foreach (KeyValuePair<SE_Item, string> addToPrefab in CustomSE.AddToPrefabs) { try { GameObject prefab = __instance.GetPrefab(addToPrefab.Value); ItemDrop val = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<ItemDrop>() : prefab.GetComponentInChildren<ItemDrop>()); Aoe val2 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<Aoe>() : prefab.GetComponentInChildren<Aoe>()); EffectArea val3 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<EffectArea>() : prefab.GetComponentInChildren<EffectArea>()); if (Object.op_Implicit((Object)(object)val)) { switch (addToPrefab.Key.Type) { case EffectType.Equip: val.m_itemData.m_shared.m_equipStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Attack: val.m_itemData.m_shared.m_attackStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Consume: val.m_itemData.m_shared.m_consumeStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Set: val.m_itemData.m_shared.m_setSize = 1; val.m_itemData.m_shared.m_setName = ((Object)addToPrefab.Key.Effect).name; val.m_itemData.m_shared.m_setStatusEffect = addToPrefab.Key.Effect; break; default: throw new ArgumentOutOfRangeException(); } } else if (Object.op_Implicit((Object)(object)val2)) { val2.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else if (Object.op_Implicit((Object)(object)val3)) { val3.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else { Debug.LogWarning((object)("The prefab '" + ((Object)prefab).name + "' does not have an ItemDrop, AOE, or EffectArea component. Cannot add the StatusEffect to the prefab.")); } } catch (Exception arg) { Debug.LogWarning((object)$"BROKE : {arg}"); } } } } } namespace SkillManager { [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [PublicAPI] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] public class Skill { [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] public static class LocalizationCache { private static readonly Dictionary<string, Localization> localizations = new Dictionary<string, Localization>(); internal static void LocalizationPostfix(Localization __instance, string language) { string key = localizations.FirstOrDefault([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (KeyValuePair<string, Localization> l) => l.Value == __instance).Key; if (key != null) { localizations.Remove(key); } if (!localizations.ContainsKey(language)) { localizations.Add(language, __instance); } } public static Localization ForLanguage([<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] string language = null) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown if (localizations.TryGetValue(language ?? PlayerPrefs.GetString("language", "English"), out var value)) { return value; } value = new Localization(); if (language != null) { value.SetupLanguage(language); } return value; } } [PublicAPI] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] public class LocalizeKey { private static readonly List<LocalizeKey> keys = new List<LocalizeKey>(); public readonly string Key; public readonly Dictionary<string, string> Localizations = new Dictionary<string, string>(); public LocalizeKey(string key) { Key = key.Replace("$", ""); keys.Add(this); } public void Alias(string alias) { Localizations.Clear(); if (!alias.Contains("$")) { alias = "$" + alias; } Localizations["alias"] = alias; Localization.instance.AddWord(Key, Localization.instance.Localize(alias)); } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { Localizations[lang] = value; if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } return this; } [HarmonyPriority(300)] internal static void AddLocalizedKeys(Localization __instance, string language) { foreach (LocalizeKey key in keys) { string value2; if (key.Localizations.TryGetValue(language, out var value) || key.Localizations.TryGetValue("English", out value)) { __instance.AddWord(key.Key, value); } else if (key.Localizations.TryGetValue("alias", out value2)) { __instance.AddWord(key.Key, Localization.instance.Localize(value2)); } } } } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] private class ConfigurationManagerAttributes { [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] [UsedImplicitly] public string Category; } [HarmonyPatch(typeof(Skills), "IsSkillValid")] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] private static class Patch_Skills_IsSkillValid { private static void Postfix(SkillType type, ref bool __result) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!__result && skills.ContainsKey(type)) { __result = true; } } } private static readonly Dictionary<SkillType, Skill> skills; internal static readonly Dictionary<string, Skill> skillByName; private readonly string skillName; private readonly string internalSkillName; private readonly SkillDef skillDef; public readonly LocalizeKey Name; public readonly LocalizeKey Description; private float skillEffectFactor = 1f; private int skillLoss = 5; public bool Configurable = false; private static bool InitializedTerminal; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static Localization _english; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static object _configSync; public float SkillGainFactor { get { return skillDef.m_increseStep; } set { skillDef.m_increseStep = value; this.SkillGainFactorChanged?.Invoke(value); } } public float SkillEffectFactor { get { return skillEffectFactor; } set { skillEffectFactor = value; this.SkillEffectFactorChanged?.Invoke(value); } } public int SkillLoss { get { return skillLoss; } set { skillLoss = value; this.SkillLossChanged?.Invoke(value); } } private static Localization english => _english ?? (_english = LocalizationCache.ForLanguage("English")); private static BaseUnityPlugin plugin { get { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown object obj = _plugin; if (obj == null) { BaseUnityPlugin val = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)Assembly.GetExecutingAssembly().DefinedTypes.First([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); _plugin = val; obj = (object)val; } return (BaseUnityPlugin)obj; } } [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static object configSync { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " SkillManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] [method: <09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] [field: <0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] public event Action<float> SkillGainFactorChanged; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] [method: <09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] [field: <0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] public event Action<float> SkillEffectFactorChanged; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] [method: <09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] [field: <0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] public event Action<float> SkillLossChanged; public Skill(string englishName, string icon) : this(englishName, loadSprite(icon, 64, 64)) { } public Skill(string englishName, Sprite icon) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_005e: 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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown SkillType val = fromName(englishName); string text = new Regex("[^a-zA-Z]").Replace(englishName, "_"); skills[val] = this; skillByName[englishName] = this; skillDef = new SkillDef { m_description = "$skilldesc_" + text, m_icon = icon, m_increseStep = 0.5f, m_skill = val }; internalSkillName = text; skillName = englishName; Name = new LocalizeKey("skill_" + ((object)(SkillType)(ref val)).ToString()).English(englishName); Description = new LocalizeKey("skilldesc_" + text); } public static SkillType fromName(string englishName) { return (SkillType)Math.Abs(StringExtensionMethods.GetStableHashCode(englishName)); } static Skill() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Expected O, but got Unknown //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Expected O, but got Unknown //IL_01ad: Expected O, but got Unknown //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Expected O, but got Unknown //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Expected O, but got Unknown //IL_023f: Expected O, but got Unknown skills = new Dictionary<SkillType, Skill>(); skillByName = new Dictionary<string, Skill>(); InitializedTerminal = false; hasConfigSync = true; Harmony val = new Harmony("org.bepinex.helpers.skillmanager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_FejdStartup", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "GetSkillDef", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_GetSkillDef", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatRaiseSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatRaiseskill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatResetSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatResetSkill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "LoadCSV", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(LocalizeKey), "AddLocalizedKeys", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Terminal), "InitTerminal", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_InitTerminal_Prefix", (Type[])null, (Type[])null)), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_InitTerminal", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "SetupLanguage", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(LocalizationCache), "LocalizationPostfix", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "OnDeath", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_OnDeath_Prefix", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_OnDeath_Finalizer", (Type[])null, (Type[])null)), (HarmonyMethod)null); } private static void Patch_FejdStartup() { //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Expected O, but got Unknown foreach (Skill skill in skills.Values) { if (skill.Configurable) { string text = skill.skillName; string group = new Regex("['[\"\\]]").Replace(english.Localize(text), "").Trim(); string category = Localization.instance.Localize(text).Trim(); ConfigEntry<float> skillGain = config(group, "Skill gain factor", skill.SkillGainFactor, new ConfigDescription("The rate at which you gain experience for the skill.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 5f), new object[1] { new ConfigurationManagerAttributes { Category = category } })); skill.SkillGainFactor = skillGain.Value; skillGain.SettingChanged += [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (object _, EventArgs _) => { skill.SkillGainFactor = skillGain.Value; }; } } } private static void Patch_Skills_GetSkillDef([<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] ref SkillDef __result, List<SkillDef> ___m_skills, SkillType type) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) if (__result == null) { SkillDef val = GetSkillDef(type); if (val != null) { ___m_skills.Add(val); __result = val; } } } private static bool Patch_Skills_CheatRaiseskill(Skills __instance, string name, float value, Player ___m_player) { //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_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) foreach (SkillType key in skills.Keys) { SkillType current = key; Skill skill = skills[current]; if (string.Equals(skill.internalSkillName, name, StringComparison.CurrentCultureIgnoreCase)) { Skill skill2 = __instance.GetSkill(current); skill2.m_level += value; skill2.m_level = Mathf.Clamp(skill2.m_level, 0f, 100f); ((Character)___m_player).Message((MessageType)1, "Skill increased " + Localization.instance.Localize("$skill_" + ((object)(SkillType)(ref current)).ToString()) + ": " + (int)skill2.m_level, 0, skill2.m_info.m_icon); Console.instance.Print("Skill " + skill.internalSkillName + " = " + skill2.m_level); return false; } } return true; } private static bool Patch_Skills_CheatResetSkill(Skills __instance, string name) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) foreach (SkillType key in skills.Keys) { Skill skill = skills[key]; if (string.Equals(skill.internalSkillName, name, StringComparison.CurrentCultureIgnoreCase)) { __instance.ResetSkill(key); Console.instance.Print("Skill " + skill.internalSkillName + " reset"); return false; } } return true; } private static void Patch_Skills_OnDeath_Prefix(Skills __instance, [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(new byte[] { 2, 1 })] ref Dictionary<SkillType, Skill> __state) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) if (__state == null) { __state = new Dictionary<SkillType, Skill>(); } foreach (KeyValuePair<SkillType, Skill> skill in skills) { if (__instance.m_skillData.TryGetValue(skill.Key, out var value)) { __state[skill.Key] = value; if (skill.Value.skillLoss > 0) { Skill obj = value; obj.m_level -= value.m_level * (float)skill.Value.SkillLoss / 100f; value.m_accumulator = 0f; } __instance.m_skillData.Remove(skill.Key); } } } private static void Patch_Skills_OnDeath_Finalizer(Skills __instance, [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(new byte[] { 2, 1 })] ref Dictionary<SkillType, Skill> __state) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (__state == null) { return; } foreach (KeyValuePair<SkillType, Skill> item in __state) { __instance.m_skillData[item.Key] = item.Value; } __state = null; } private static void Patch_Terminal_InitTerminal_Prefix() { InitializedTerminal = Terminal.m_terminalInitialized; } private static void Patch_Terminal_InitTerminal() { if (!InitializedTerminal) { AddSkill(Terminal.commands["raiseskill"]); AddSkill(Terminal.commands["resetskill"]); } static void AddSkill(ConsoleCommand command) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown ConsoleOptionsFetcher fetcher = command.m_tabOptionsFetcher; command.m_tabOptionsFetcher = (ConsoleOptionsFetcher)([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] () => { List<string> list = fetcher.Invoke(); list.AddRange(skills.Values.Select([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Skill skill) => skill.internalSkillName)); return list; }); } } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] private static SkillDef GetSkillDef(SkillType skillType) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (!skills.ContainsKey(skillType)) { return null; } Skill skill = skills[skillType]; return skill.skillDef; } private static byte[] ReadEmbeddedFileBytes(string name) { using MemoryStream memoryStream = new MemoryStream(); Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + "." + name).CopyTo(memoryStream); return memoryStream.ToArray(); } private static Texture2D loadTexture(string name) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown Texture2D val = new Texture2D(0, 0); ImageConversion.LoadImage(val, ReadEmbeddedFileBytes("icons." + name)); return val; } private static Sprite loadSprite(string name, int width, int height) { //IL_0014: 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) return Sprite.Create(loadTexture(name), new Rect(0f, 0f, (float)width, (float)height), Vector2.zero); } private static ConfigEntry<T> config<[<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] T>(string group, string name, T value, ConfigDescription description) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); configSync?.GetType().GetMethod("AddConfigEntry").MakeGenericMethod(typeof(T)) .Invoke(configSync, new object[1] { val }); return val; } private static ConfigEntry<T> config<[<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] T>(string group, string name, T value, string description) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); } } [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] [PublicAPI] public static class SkillExtensions { public static float GetSkillFactor(this Character character, string name) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return character.GetSkillFactor(Skill.fromName(name)) * Skill.skillByName[name].SkillEffectFactor; } public static float GetSkillFactor(this Skills skills, string name) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return skills.GetSkillFactor(Skill.fromName(name)) * Skill.skillByName[name].SkillEffectFactor; } public static void RaiseSkill(this Character character, string name, float value = 1f) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) character.RaiseSkill(Skill.fromName(name), value); } public static void RaiseSkill(this Skills skill, string name, float value = 1f) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) skill.RaiseSkill(Skill.fromName(name), value); } public static void LowerSkill(this Character character, string name, float factor = 1f) { character.GetSkills().LowerSkill(name, factor); } public static void LowerSkill(this Skills skills, string name, float factor) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (factor > 0f && skills.m_skillData.TryGetValue(Skill.fromName(name), out var value)) { Skill obj = value; obj.m_level -= value.m_level * factor; value.m_accumulator = 0f; } } } } namespace PieceManager { [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] [PublicAPI] public static class MaterialReplacer { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] public enum ShaderType { PieceShader, VegetationShader, RockShader, RugShader, GrassShader, CustomCreature, UseUnityShader } private static readonly Dictionary<GameObject, bool> ObjectToSwap; private static readonly Dictionary<string, Material> OriginalMaterials; private static readonly Dictionary<GameObject, ShaderType> ObjectsForShaderReplace; private static readonly HashSet<Shader> CachedShaders; private static bool hasRun; static MaterialReplacer() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown CachedShaders = new HashSet<Shader>(); hasRun = false; OriginalMaterials = new Dictionary<string, Material>(); ObjectToSwap = new Dictionary<GameObject, bool>(); ObjectsForShaderReplace = new Dictionary<GameObject, ShaderType>(); Harmony val = new Harmony("org.bepinex.helpers.PieceManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZoneSystem), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(MaterialReplacer), "ReplaceAllMaterialsWithOriginal", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static void RegisterGameObjectForShaderSwap(GameObject go, ShaderType type) { if (!ObjectsForShaderReplace.ContainsKey(go)) { ObjectsForShaderReplace.Add(go, type); } } public static void RegisterGameObjectForMatSwap(GameObject go, bool isJotunnMock = false) { if (!ObjectToSwap.ContainsKey(go)) { ObjectToSwap.Add(go, isJotunnMock); } } private static void GetAllMaterials() { Material[] array = Resources.FindObjectsOfTypeAll<Material>(); foreach (Material val in array) { OriginalMaterials[((Object)val).name] = val; } } [HarmonyPriority(700)] private static void ReplaceAllMaterialsWithOriginal() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 if ((int)SystemInfo.graphicsDeviceType == 4 || hasRun) { return; } if (OriginalMaterials.Count == 0) { GetAllMaterials(); } foreach (KeyValuePair<GameObject, bool> item in ObjectToSwap) { GameObject key = item.Key; bool value = item.Value; ProcessGameObjectMaterials(key, value); } AssetBundle[] array = Resources.FindObjectsOfTypeAll<AssetBundle>(); AssetBundle[] array2 = array; foreach (AssetBundle val in array2) { IEnumerable<Shader> enumerable3; try { IEnumerable<Shader> enumerable2; if (!val.isStreamedSceneAssetBundle || !Object.op_Implicit((Object)(object)val)) { IEnumerable<Shader> enumerable = val.LoadAllAssets<Shader>(); enumerable2 = enumerable; } else { enumerable2 = from shader in ((IEnumerable<string>)val.GetAllAssetNames()).Select((Func<string, Shader>)val.LoadAsset<Shader>) where (Object)(object)shader != (Object)null select shader; } enumerable3 = enumerable2; } catch (Exception) { continue; } if (enumerable3 == null) { continue; } foreach (Shader item2 in enumerable3) { CachedShaders.Add(item2); } } foreach (KeyValuePair<GameObject, ShaderType> item3 in ObjectsForShaderReplace) { GameObject key2 = item3.Key; ShaderType value2 = item3.Value; ProcessGameObjectShaders(key2, value2); } hasRun = true; } private static void ProcessGameObjectMaterials(GameObject go, bool isJotunnMock) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { Material[] sharedMaterials = val.sharedMaterials.Select([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Material material) => ReplaceMaterial(material, isJotunnMock)).ToArray(); val.sharedMaterials = sharedMaterials; } } private static Material ReplaceMaterial(Material originalMaterial, bool isJotunnMock) { string text = (isJotunnMock ? "JVLmock_" : "_REPLACE_"); if (!((Object)originalMaterial).name.StartsWith(text, StringComparison.Ordinal)) { return originalMaterial; } string text2 = ((Object)originalMaterial).name.Replace(" (Instance)", "").Replace(text, ""); if (OriginalMaterials.TryGetValue(text2, out var value)) { return value; } Debug.LogWarning((object)("No suitable material found to replace: " + text2)); return originalMaterial; } private static void ProcessGameObjectShaders(GameObject go, ShaderType shaderType) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { if (((Object)val).name == "Impostor") { continue; } Material[] sharedMaterials = val.sharedMaterials; foreach (Material val2 in sharedMaterials) { if ((Object)(object)val2 != (Object)null) { val2.shader = GetShaderForType(val2.shader, shaderType, ((Object)val2.shader).name); } } } } private static Shader GetShaderForType(Shader orig, ShaderType shaderType, string originalShaderName) { return (Shader)(shaderType switch { ShaderType.PieceShader => FindShaderWithName(orig, "Custom/Piece"), ShaderType.VegetationShader => FindShaderWithName(orig, "Custom/Vegetation"), ShaderType.RockShader => FindShaderWithName(orig, "Custom/StaticRock"), ShaderType.RugShader => FindShaderWithName(orig, "Custom/Rug"), ShaderType.GrassShader => FindShaderWithName(orig, "Custom/Grass"), ShaderType.CustomCreature => FindShaderWithName(orig, "Custom/Creature"), ShaderType.UseUnityShader => FindShaderWithName(orig, ((Object)(object)FindShaderWithName(orig, originalShaderName) != (Object)null) ? originalShaderName : "ToonDeferredShading2017"), _ => FindShaderWithName(orig, "Standard"), }); } public static Shader FindShaderWithName(Shader origShader, string name) { foreach (Shader cachedShader in CachedShaders) { if (((Object)cachedShader).name == name) { return cachedShader; } } return origShader; } } [PublicAPI] public enum CraftingTable { None, [InternalName("piece_workbench")] Workbench, [InternalName("piece_cauldron")] Cauldron, [InternalName("forge")] Forge, [InternalName("piece_artisanstation")] ArtisanTable, [InternalName("piece_stonecutter")] StoneCutter, [InternalName("piece_magetable")] MageTable, [InternalName("blackforge")] BlackForge, [InternalName("piece_preptable")] FoodPreparationTable, [InternalName("piece_MeadCauldron")] MeadKetill, Custom } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] public class InternalName : Attribute { public readonly string internalName; public InternalName(string internalName) { this.internalName = internalName; } } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [PublicAPI] public class ExtensionList { public readonly List<ExtensionConfig> ExtensionStations = new List<ExtensionConfig>(); public void Set(CraftingTable table, int maxStationDistance = 5) { ExtensionStations.Add(new ExtensionConfig { Table = table, maxStationDistance = maxStationDistance }); } public void Set(string customTable, int maxStationDistance = 5) { ExtensionStations.Add(new ExtensionConfig { Table = CraftingTable.Custom, custom = customTable, maxStationDistance = maxStationDistance }); } } public struct ExtensionConfig { public CraftingTable Table; public float maxStationDistance; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] public string custom; } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [PublicAPI] public class CraftingStationList { public readonly List<CraftingStationConfig> Stations = new List<CraftingStationConfig>(); public void Set(CraftingTable table) { Stations.Add(new CraftingStationConfig { Table = table }); } public void Set(string customTable) { Stations.Add(new CraftingStationConfig { Table = CraftingTable.Custom, custom = customTable }); } } public struct CraftingStationConfig { public CraftingTable Table; public int level; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] public string custom; } [PublicAPI] public enum BuildPieceCategory { Misc = 0, Crafting = 1, BuildingWorkbench = 2, BuildingStonecutter = 3, Furniture = 4, All = 100, Custom = 99 } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [PublicAPI] public class RequiredResourcesList { public readonly List<Requirement> Requirements = new List<Requirement>(); public void Add(string item, int amount, bool recover) { Requirements.Add(new Requirement { itemName = item, amount = amount, recover = recover }); } } public struct Requirement { [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(1)] public string itemName; public int amount; public bool recover; } public struct SpecialProperties { [Description("Admins should be the only ones that can build this piece.")] public bool AdminOnly; [Description("Turns off generating a config for this build piece.")] public bool NoConfig; } [PublicAPI] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] public class BuildingPieceCategory { public BuildPieceCategory Category; public string custom = ""; public void Set(BuildPieceCategory category) { Category = category; } public void Set(string customCategory) { Category = BuildPieceCategory.Custom; custom = customCategory; } } [PublicAPI] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] public class PieceTool { public readonly HashSet<string> Tools = new HashSet<string>(); public void Add(string tool) { Tools.Add(tool); } } [PublicAPI] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(1)] public class BuildPiece { [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] internal class PieceConfig { public ConfigEntry<string> craft = null; public ConfigEntry<BuildPieceCategory> category = null; public ConfigEntry<string> customCategory = null; public ConfigEntry<string> tools = null; public ConfigEntry<CraftingTable> extensionTable = null; public ConfigEntry<string> customExtentionTable = null; public ConfigEntry<float> maxStationDistance = null; public ConfigEntry<CraftingTable> table = null; public ConfigEntry<string> customTable = null; } [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order; [UsedImplicitly] public bool? Browsable; [UsedImplicitly] [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] public string Category; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(new byte[] { 2, 1 })] [UsedImplicitly] public Action<ConfigEntryBase> CustomDrawer; } [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(0)] private class SerializedRequirements { public readonly List<Requirement> Reqs; public SerializedRequirements(List<Requirement> reqs) { Reqs = reqs; } public SerializedRequirements(string reqs) { Reqs = reqs.Split(new char[1] { ',' }).Select([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (string r) => { string[] array = r.Split(new char[1] { ':' }); Requirement result = default(Requirement); result.itemName = array[0]; result.amount = ((array.Length <= 1 || !int.TryParse(array[1], out var result2)) ? 1 : result2); bool result3 = default(bool); result.recover = array.Length <= 2 || !bool.TryParse(array[2], out result3) || result3; return result; }).ToList(); } public override string ToString() { return string.Join(",", Reqs.Select([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Requirement r) => $"{r.itemName}:{r.amount}:{r.recover}")); } [return: <0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] public static ItemDrop fetchByName(ObjectDB objectDB, string name) { GameObject itemPrefab = objectDB.GetItemPrefab(name); ItemDrop val = ((itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)(((!string.IsNullOrWhiteSpace(((Object)plugin).name)) ? ("[" + ((Object)plugin).name + "]") : "") + " The required item '" + name + "' does not exist.")); } return val; } public static Requirement[] toPieceReqs(SerializedRequirements craft) { Dictionary<string, Requirement> dictionary = craft.Reqs.Where((Requirement r) => r.itemName != "").ToDictionary((Func<Requirement, string>)([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Requirement r) => r.itemName), (Func<Requirement, Requirement>)([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Requirement r) => { //IL_000d: 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_001e: 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) ItemDrop val = ResItem(r); return (val == null) ? ((Requirement)null) : new Requirement { m_amount = r.amount, m_resItem = val, m_recover = r.recover }; })); return dictionary.Values.Where([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Requirement v) => v != null).ToArray(); [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] static ItemDrop ResItem(Requirement r) { return fetchByName(ObjectDB.instance, r.itemName); } } } internal static readonly List<BuildPiece> registeredPieces = new List<BuildPiece>(); private static readonly Dictionary<Piece, BuildPiece> pieceMap = new Dictionary<Piece, BuildPiece>(); internal static Dictionary<BuildPiece, PieceConfig> pieceConfigs = new Dictionary<BuildPiece, PieceConfig>(); internal List<Conversion> Conversions = new List<Conversion>(); internal List<ItemConversion> conversions = new List<ItemConversion>(); [Description("Disables generation of the configs for your pieces. This is global, this turns it off for all pieces in your mod.")] public static bool ConfigurationEnabled = true; public readonly GameObject Prefab; [Description("Specifies the resources needed to craft the piece.\nUse .Add to add resources with their internal ID and an amount.\nUse one .Add for each resource type the building piece should need.")] public readonly RequiredResourcesList RequiredItems = new RequiredResourcesList(); [Description("Sets the category for the building piece.")] public readonly BuildingPieceCategory Category = new BuildingPieceCategory(); [Description("Specifies the tool needed to build your piece.\nUse .Add to add a tool.")] public readonly PieceTool Tool = new PieceTool(); [Description("Specifies the crafting station needed to build your piece.\nUse .Add to add a crafting station, using the CraftingTable enum and a minimum level for the crafting station.")] public CraftingStationList Crafting = new CraftingStationList(); [Description("Makes this piece a station extension")] public ExtensionList Extension = new ExtensionList(); [Description("Change the extended/special properties of your build piece.")] public SpecialProperties SpecialProperties; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] [Description("Specifies a config entry which toggles whether a recipe is active.")] public ConfigEntryBase RecipeIsActive = null; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private LocalizeKey _name; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private LocalizeKey _description; internal string[] activeTools = null; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static object configManager; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static Localization _english; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] internal static BaseUnityPlugin _plugin = null; private static bool hasConfigSync = true; [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static object _configSync; public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } Piece component = Prefab.GetComponent<Piece>(); if (component.m_name.StartsWith("$")) { _name = new LocalizeKey(component.m_name); } else { string text = "$piece_" + ((Object)Prefab).name.Replace(" ", "_"); _name = new LocalizeKey(text).English(component.m_name); component.m_name = text; } return _name; } } public LocalizeKey Description { get { LocalizeKey description = _description; if (description != null) { return description; } Piece component = Prefab.GetComponent<Piece>(); if (component.m_description.StartsWith("$")) { _description = new LocalizeKey(component.m_description); } else { string text = "$piece_" + ((Object)Prefab).name.Replace(" ", "_") + "_description"; _description = new LocalizeKey(text).English(component.m_description); component.m_description = text; } return _description; } } private static Localization english => _english ?? (_english = LocalizationCache.ForLanguage("English")); internal static BaseUnityPlugin plugin { get { //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Expected O, but got Unknown if (_plugin != null) { return _plugin; } IEnumerable<TypeInfo> source; try { source = Assembly.GetExecutingAssembly().DefinedTypes.ToList(); } catch (ReflectionTypeLoadException ex) { source = from t in ex.Types where t != null select t.GetTypeInfo(); } _plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); return _plugin; } } [<0f213f35-8a2a-422b-8983-f1876bd13d3f>Nullable(2)] private static object configSync { [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(2)] get { if (_configSync != null || !hasConfigSync) { return _configSync; } Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " PieceManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } return _configSync; } } public BuildPiece(string assetBundleFileName, string prefabName, string folderName = "assets") : this(PiecePrefabManager.RegisterAssetBundle(assetBundleFileName, folderName), prefabName) { } public BuildPiece(AssetBundle bundle, string prefabName) { Prefab = PiecePrefabManager.RegisterPrefab(bundle, prefabName); registeredPieces.Add(this); } internal static void Patch_FejdStartup(FejdStartup __instance) { //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: 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_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Expected O, but got Unknown //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Expected O, but got Unknown //IL_0431: Unknown result type (might be due to invalid IL or missing references) //IL_040b: Unknown result type (might be due to invalid IL or missing references) //IL_0410: Unknown result type (might be due to invalid IL or missing references) //IL_048c: Unknown result type (might be due to invalid IL or missing references) //IL_0496: Expected O, but got Unknown //IL_0606: Unknown result type (might be due to invalid IL or missing references) //IL_0610: Expected O, but got Unknown //IL_08ea: Unknown result type (might be due to invalid IL or missing references) //IL_08f4: Expected O, but got Unknown //IL_067b: Unknown result type (might be due to invalid IL or missing references) //IL_0685: Expected O, but got Unknown //IL_0721: Unknown result type (might be due to invalid IL or missing references) //IL_072b: Expected O, but got Unknown //IL_095f: Unknown result type (might be due to invalid IL or missing references) //IL_0969: Expected O, but got Unknown //IL_0b7e: Unknown result type (might be due to invalid IL or missing references) //IL_0b88: Expected O, but got Unknown //IL_0c18: Unknown result type (might be due to invalid IL or missing references) //IL_0c22: Expected O, but got Unknown Type configManagerType = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Assembly a) => a.GetName().Name == "ConfigurationManager")?.GetType("ConfigurationManager.ConfigurationManager"); configManager = ((configManagerType == null) ? null : Chainloader.ManagerObject.GetComponent(configManagerType)); foreach (BuildPiece registeredPiece in registeredPieces) { registeredPiece.activeTools = registeredPiece.Tool.Tools.DefaultIfEmpty("Hammer").ToArray(); if (registeredPiece.Category.Category != BuildPieceCategory.Custom) { registeredPiece.Prefab.GetComponent<Piece>().m_category = (PieceCategory)registeredPiece.Category.Category; } else { registeredPiece.Prefab.GetComponent<Piece>().m_category = PiecePrefabManager.GetCategory(registeredPiece.Category.custom); } } if (!ConfigurationEnabled) { return; } bool saveOnConfigSet = plugin.Config.SaveOnConfigSet; plugin.Config.SaveOnConfigSet = false; foreach (BuildPiece registeredPiece2 in registeredPieces) { BuildPiece piece = registeredPiece2; if (piece.SpecialProperties.NoConfig) { continue; } PieceConfig pieceConfig2 = (pieceConfigs[piece] = new PieceConfig()); PieceConfig cfg = pieceConfig2; Piece piecePrefab2 = piece.Prefab.GetComponent<Piece>(); string pieceName = piecePrefab2.m_name; string englishName = new Regex("[=\\n\\t\\\\\"\\'\\[\\]]*").Replace(english.Localize(pieceName), "").Trim(); string localizedName = Localization.instance.Localize(pieceName).Trim(); int order = 0; cfg.category = config(englishName, "Build Table Category", piece.Category.Category, new ConfigDescription("Build Category where " + localizedName + " is available.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = (order -= 1), Category = localizedName } })); ConfigurationManagerAttributes customTableAttributes = new ConfigurationManagerAttributes { Order = (order -= 1), Browsable = (cfg.category.Value == BuildPieceCategory.Custom), Category = localizedName }; cfg.customCategory = config(englishName, "Custom Build Category", piece.Category.custom, new ConfigDescription("", (AcceptableValueBase)null, new object[1] { customTableAttributes })); cfg.category.SettingChanged += BuildTableConfigChanged; cfg.customCategory.SettingChanged += BuildTableConfigChanged; if (cfg.category.Value == BuildPieceCategory.Custom) { piecePrefab2.m_category = PiecePrefabManager.GetCategory(cfg.customCategory.Value); } else { piecePrefab2.m_category = (PieceCategory)cfg.category.Value; } cfg.tools = config(englishName, "Tools", string.Join(", ", piece.activeTools), new ConfigDescription("Comma separated list of tools where " + localizedName + " is available.", (AcceptableValueBase)null, new object[1] { customTableAttributes })); piece.activeTools = (from s in cfg.tools.Value.Split(new char[1] { ',' }) select s.Trim()).ToArray(); cfg.tools.SettingChanged += [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (object _, EventArgs _) => { Inventory[] source = (from c in Player.s_players.Select([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Player p) => ((Humanoid)p).GetInventory()).Concat(from c in Object.FindObjectsOfType<Container>() select c.GetInventory()) where c != null select c).ToArray(); Dictionary<string, List<PieceTable>> dictionary = (from kv in (from i in (from p in ObjectDB.instance.m_items select p.GetComponent<ItemDrop>() into c where Object.op_Implicit((Object)(object)c) && Object.op_Implicit((Object)(object)((Component)c).GetComponent<ZNetView>()) select c).Concat(ItemDrop.s_instances) select new KeyValuePair<string, ItemData>(Utils.GetPrefabName(((Component)i).gameObject), i.m_itemData)).Concat(from i in source.SelectMany([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (Inventory i) => i.GetAllItems()) select new KeyValuePair<string, ItemData>(((Object)i.m_dropPrefab).name, i)) where Object.op_Implicit((Object)(object)kv.Value.m_shared.m_buildPieces) group kv by kv.Key).ToDictionary([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (IGrouping<string, KeyValuePair<string, ItemData>> g) => g.Key, [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (IGrouping<string, KeyValuePair<string, ItemData>> g) => g.Select([<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (KeyValuePair<string, ItemData> kv) => kv.Value.m_shared.m_buildPieces).Distinct().ToList()); string[] array5 = piece.activeTools; foreach (string key in array5) { if (dictionary.TryGetValue(key, out var value3)) { foreach (PieceTable item3 in value3) { item3.m_pieces.Remove(piece.Prefab); } } } piece.activeTools = (from s in cfg.tools.Value.Split(new char[1] { ',' }) select s.Trim()).ToArray(); if (Object.op_Implicit((Object)(object)ObjectDB.instance)) { string[] array6 = piece.activeTools; foreach (string key2 in array6) { if (dictionary.TryGetValue(key2, out var value4)) { foreach (PieceTable item4 in value4) { if (!item4.m_pieces.Contains(piece.Prefab)) { item4.m_pieces.Add(piece.Prefab); } } } } if (Object.op_Implicit((Object)(object)Player.m_localPlayer) && Object.op_Implicit((Object)(object)Player.m_localPlayer.m_buildPieces)) { PiecePrefabManager.CategoryRefreshNeeded = true; ((Humanoid)Player.m_localPlayer).SetPlaceMode(Player.m_localPlayer.m_buildPieces); } } }; StationExtension pieceExtensionComp; List<ConfigurationManagerAttributes> hideWhenNoneAttributes2; if (piece.Extension.ExtensionStations.Count > 0) { pieceExtensionComp = piece.Prefab.GetOrAddComponent<StationExtension>(); PieceConfig pieceConfig3 = cfg; string group = englishName; CraftingTable table = piece.Extension.ExtensionStations.First().Table; string text = "Crafting station that " + localizedName + " extends."; object[] array = new object[1]; ConfigurationManagerAttributes configurationManagerAttributes = new ConfigurationManagerAttributes(); int num = order - 1; order = num; configurationManagerAttributes.Order = num; array[0] = configurationManagerAttributes; pieceConfig3.extensionTable = config(group, "Extends Station", table, new ConfigDescription(text, (AcceptableValueBase)null, array)); cfg.customExtentionTable = config(englishName, "Custom Extend Station", piece.Extension.ExtensionStations.First().custom ?? "", new ConfigDescription("", (AcceptableValueBase)null, new object[1] { customTableAttributes })); PieceConfig pieceConfig4 = cfg; string group2 = englishName; float maxStationDistance = piece.Extension.ExtensionStations.First().maxStationDistance; string text2 = "Distance from the station that " + localizedName + " can be placed."; object[] array2 = new object[1]; ConfigurationManagerAttributes configurationManagerAttributes2 = new ConfigurationManagerAttributes(); num = order - 1; order = num; configurationManagerAttributes2.Order = num; array2[0] = configurationManagerAttributes2; pieceConfig4.maxStationDistance = config(group2, "Max Station Distance", maxStationDistance, new ConfigDescription(text2, (AcceptableValueBase)null, array2)); hideWhenNoneAttributes2 = new List<ConfigurationManagerAttributes>(); cfg.extensionTable.SettingChanged += ExtensionTableConfigChanged; cfg.customExtentionTable.SettingChanged += ExtensionTableConfigChanged; cfg.maxStationDistance.SettingChanged += ExtensionTableConfigChanged; ConfigurationManagerAttributes configurationManagerAttributes3 = new ConfigurationManagerAttributes(); num = order - 1; order = num; configurationManagerAttributes3.Order = num; configurationManagerAttributes3.Browsable = cfg.extensionTable.Value != CraftingTable.None; ConfigurationManagerAttributes item = configurationManagerAttributes3; hideWhenNoneAttributes2.Add(item); } List<ConfigurationManagerAttributes> hideWhenNoneAttributes; if (piece.Crafting.Stations.Count > 0) { hideWhenNoneAttributes = new List<ConfigurationManagerAttributes>(); PieceConfig pieceConfig5 = cfg; string group3 = englishName; CraftingTable table2 = piece.Crafting.Stations.First().Table; string text3 = "Crafting station where " + localizedName + " is available."; object[] array3 = new object[1]; ConfigurationManagerAttributes configurationManagerAttributes4 = new ConfigurationManagerAttributes(); int num = order - 1; order = num; configurationManagerAttributes4.Order = num; array3[0] = configurationManagerAttributes4; pieceConfig5.table = config(group3, "Crafting Station", table2, new ConfigDescription(text3, (AcceptableValueBase)null, array3)); cfg.customTable = config(englishName, "Custom Crafting Station", piece.Crafting.Stations.First().custom ?? "", new ConfigDescription("", (AcceptableValueBase)null, new object[1] { customTableAttributes })); cfg.table.SettingChanged += TableConfigChanged; cfg.customTable.SettingChanged += TableConfigChanged; ConfigurationManagerAttributes configurationManagerAttributes5 = new ConfigurationManagerAttributes(); num = order - 1; order = num; configurationManagerAttributes5.Order = num; configurationManagerAttributes5.Browsable = cfg.table.Value != CraftingTable.None; ConfigurationManagerAttributes item2 = configurationManagerAttributes5; hideWhenNoneAttributes.Add(item2); } cfg.craft = itemConfig("Crafting Costs", new SerializedRequirements(piece.RequiredItems.Requirements).ToString(), "Item costs to craft " + localizedName); cfg.craft.SettingChanged += [<09d365fe-f346-48cd-812c-04f81944c53a>NullableContext(0)] (object _, EventArgs _) => { if (Object.op_Implicit((Object)(object)ObjectDB.instance) && (Object)(object)ObjectDB.instance.GetItemPrefab("YmirRemains") != (Object)null) { Requirement[] resources = SerializedRequirements.toPieceReqs(new SerializedRequirements(cfg.craft.Value)); piecePrefab2.m_resources = resources; Piece[] array4 = Object.FindObjectsOfType<Piece>(); foreach (Piece val in array4) { if (val.m_name == pieceName) { val.m_resources = resources; } } } }; for (int j = 0; j < piece.Conversions.Count; j++) { string text4 = ((piece.Conversions.Count > 1) ? $"{j + 1}. " : ""); Conversion conversion = piece.Conversions[j]; conversion.config = new Conversion.ConversionConfig(); int index = j; conversion.config.input = config(englishName, text4 + "Conversion Input Item", conversion.Input, new ConfigDescription("Conversion input item within " + englishName, (AcceptableValueBase)null, new object[1] { new
plugins/Datys_Mounts.dll
Decompiled 7 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Cryptography; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CreatureManager; using Datys_Mounts; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using LocalizationManager; using Microsoft.CodeAnalysis; using ServerSync; using SoftReferenceableAssets; using StatusEffectManager; using TMPro; using UnityEngine; using UnityEngine.UI; using YamlDotNet.Serialization; [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: ComVisible(false)] [assembly: AssemblyTrademark("")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyProduct("Datys_Mounts")] [assembly: AssemblyCompany("Datys")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyDescription("")] [assembly: AssemblyTitle("Datys_Mounts")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: CompilationRelaxations(8)] [assembly: AssemblyFileVersion("1.1.0")] [assembly: AssemblyConfiguration("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.0.0")] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<d641aebe-2ba0-4b7f-b668-0c41f0c47646>Embedded] internal sealed class <d641aebe-2ba0-4b7f-b668-0c41f0c47646>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<d641aebe-2ba0-4b7f-b668-0c41f0c47646>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <3f536a75-6b05-42a2-b72e-ee3aa942b990>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <3f536a75-6b05-42a2-b72e-ee3aa942b990>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <3f536a75-6b05-42a2-b72e-ee3aa942b990>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [<d641aebe-2ba0-4b7f-b668-0c41f0c47646>Embedded] [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class <fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContextAttribute : Attribute { public readonly byte Flag; public <fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContextAttribute(byte P_0) { Flag = P_0; } } } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] public static class MountCartHelper { [HarmonyPatch(typeof(Vagon), "FixedUpdate")] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] public static class Cart_AttachPatch { [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] public static void Prefix(Vagon __instance) { if (!__instance.m_nview.IsValid()) { return; } __instance.UpdateAudio(Time.fixedDeltaTime); if (!__instance.m_nview.IsOwner()) { return; } if (Object.op_Implicit((Object)(object)__instance.m_useRequester)) { if (__instance.IsAttached()) { RestoreRunSpeed(AttachedCharacter(__instance)); __instance.Detach(); } else { Character val = FindClosestAttachableAnimal(__instance.m_attachPoint); if ((Object)(object)val != (Object)null) { AttachCartTo(val, __instance); } else if (__instance.CanAttach(((Component)__instance.m_useRequester).gameObject)) { AttachCartTo((Character)(object)__instance.m_useRequester, __instance); } else { ((Character)__instance.m_useRequester).Message((MessageType)2, "❌ Nejsi v dosahu!", 0, (Sprite)null); } } __instance.m_useRequester = null; } if (__instance.IsAttached()) { Character c = AttachedCharacter(__instance); __instance.m_detachDistance = GetDetachDistance(c); if (!__instance.CanAttach(((Component)((Joint)__instance.m_attachJoin).connectedBody).gameObject)) { RestoreRunSpeed(c); __instance.Detach(); } } } } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] [HarmonyPatch(typeof(Vagon), "LateUpdate")] public static class Vagon_LateUpdatePatch { [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] public static void Prefix(Vagon __instance) { if ((Object)(object)__instance.m_attachJoin != (Object)null && (Object)(object)((Joint)__instance.m_attachJoin).connectedBody == (Object)null) { RestoreRunSpeed(AttachedCharacter(__instance)); __instance.Detach(); } } } public static Vector3 GetCartOffset(Character c) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) return new Vector3(0f, 0.8f, 0f - c.GetRadius()); } public static bool IsAttachable(Character c) { return c.IsTamed() && !c.IsPlayer(); } public static float GetDetachDistance(Character c) { return c.GetRadius() * 3.5f; } public static Character FindClosestAttachableAnimal(Transform cartPoint) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: 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_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) Character result = null; float num = float.MaxValue; foreach (Character allCharacter in Character.GetAllCharacters()) { if ((Object)(object)allCharacter != (Object)null && IsAttachable(allCharacter)) { Vector3 cartOffset = GetCartOffset(allCharacter); float num2 = Vector3.Distance(((Component)allCharacter).transform.position + cartOffset, cartPoint.position); if (num2 < GetDetachDistance(allCharacter) && num2 < num) { result = allCharacter; num = num2; } } } return result; } public static void AttachCartTo(Character c, Vagon cart) { //IL_001c: 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) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_007d: 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_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) ConfigurableJoint val = ((Component)cart).gameObject.AddComponent<ConfigurableJoint>(); ((Joint)val).autoConfigureConnectedAnchor = false; ((Joint)val).anchor = cart.m_attachPoint.localPosition; ((Joint)val).connectedAnchor = GetCartOffset(c); ((Joint)val).breakForce = cart.m_breakForce; val.xMotion = (ConfigurableJointMotion)1; val.yMotion = (ConfigurableJointMotion)1; val.zMotion = (ConfigurableJointMotion)0; SoftJointLimitSpring val2 = default(SoftJointLimitSpring); ((SoftJointLimitSpring)(ref val2)).spring = cart.m_spring; ((SoftJointLimitSpring)(ref val2)).damper = cart.m_springDamping; SoftJointLimitSpring linearLimitSpring = val2; val.linearLimitSpring = linearLimitSpring; SoftJointLimit linearLimit = default(SoftJointLimit); ((SoftJointLimit)(ref linearLimit)).limit = 0.001f; val.linearLimit = linearLimit; ((Joint)val).connectedBody = ((Component)c).GetComponent<Rigidbody>(); cart.m_attachJoin = val; if ((Object)(object)Player.m_localPlayer != (Object)null && Vector3.Distance(((Component)c).transform.position, ((Component)Player.m_localPlayer).transform.position) < 20f) { ((Character)Player.m_localPlayer).Message((MessageType)2, "\ud83d\uded2 " + c.m_name + " táhne vůz.", 0, (Sprite)null); } if (c.IsPlayer()) { return; } ZNetView component = ((Component)c).GetComponent<ZNetView>(); if ((Object)(object)component != (Object)null && component.IsValid()) { if (!component.IsOwner()) { component.ClaimOwnership(); } component.GetZDO().Set("CartAttached", true); MountUtils.SaddleSpeedBonusApplier component2 = ((Component)c).GetComponent<MountUtils.SaddleSpeedBonusApplier>(); if ((Object)(object)component2 != (Object)null) { string @string = component.GetZDO().GetString("CustomSaddle", ""); component2.ApplyBonus(@string); } } } public static Character AttachedCharacter(Vagon cart) { if ((Object)(object)cart != (Object)null && (Object)(object)cart.m_attachJoin != (Object)null && (Object)(object)((Joint)cart.m_attachJoin).connectedBody != (Object)null) { return ((Component)((Joint)cart.m_attachJoin).connectedBody).GetComponent<Character>(); } return null; } public static void RestoreRunSpeed(Character c) { if ((Object)(object)c == (Object)null || c.IsPlayer()) { return; } ZNetView component = ((Component)c).GetComponent<ZNetView>(); if ((Object)(object)component != (Object)null && component.IsValid()) { if (!component.IsOwner()) { component.ClaimOwnership(); } component.GetZDO().Set("CartAttached", false); MountUtils.SaddleSpeedBonusApplier component2 = ((Component)c).GetComponent<MountUtils.SaddleSpeedBonusApplier>(); if ((Object)(object)component2 != (Object)null) { string @string = component.GetZDO().GetString("CustomSaddle", ""); component2.ApplyBonus(@string); } } } } [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] public class MultiSaddleHandler : MonoBehaviour { private List<ItemDrop> allowedSaddles = new List<ItemDrop>(); public void SetAllowedSaddles(List<ItemDrop> saddles) { allowedSaddles = saddles; } public bool IsAllowedSaddle(ItemData item) { foreach (ItemDrop allowedSaddle in allowedSaddles) { if (item.m_shared.m_name == allowedSaddle.m_itemData.m_shared.m_name) { return true; } } return false; } } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [HarmonyPatch(typeof(Tameable), "UseItem")] public static class Tameable_UseItem_Patch { private static readonly MethodInfo originalUseItem = typeof(Tameable).GetMethod("UseItem", BindingFlags.Instance | BindingFlags.Public); private static bool _isProcessing = false; private static bool Prefix(Tameable __instance, Humanoid user, ItemData item, ref bool __result) { if ((Object)(object)__instance == (Object)null || item == null || (Object)(object)user == (Object)null) { return true; } MultiSaddleHandler component = ((Component)__instance).GetComponent<MultiSaddleHandler>(); if ((Object)(object)component == (Object)null) { return true; } if (!component.IsAllowedSaddle(item)) { return true; } if (_isProcessing) { return false; } _isProcessing = true; try { if (!__instance.m_character.IsTamed()) { _isProcessing = false; return false; } if (__instance.HaveSaddle()) { _isProcessing = false; return false; } __instance.m_saddleItem = item.m_dropPrefab.GetComponent<ItemDrop>(); if ((Object)(object)__instance.m_saddleItem == (Object)null) { _isProcessing = false; return false; } __instance.SetSaddle(true); __instance.m_nview.GetZDO().Set("HaveSaddle", true); __instance.m_nview.GetZDO().Set("CustomSaddle", ((Object)item.m_dropPrefab).name); user.GetInventory().RemoveOneItem(item); __result = true; _isProcessing = false; return false; } catch (Exception) { _isProcessing = false; return true; } } } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] public class CustomSaddleReplacer : MonoBehaviour { private ZNetView m_nview; private Tameable m_tameable; private Character m_character; private void Awake() { m_nview = ((Component)this).GetComponent<ZNetView>(); m_tameable = ((Component)this).GetComponent<Tameable>(); m_character = ((Component)this).GetComponent<Character>(); if (!((Object)(object)m_nview == (Object)null) && !((Object)(object)m_tameable == (Object)null) && !((Object)(object)m_character == (Object)null)) { string prefabName = ((Object)((Component)this).gameObject).name.Replace("(Clone)", "").Trim(); MountSaddleConfig config = MountConfigManager.GetConfig(prefabName); if (config != null) { ((MonoBehaviour)this).StartCoroutine(DelayedReplaceSaddleItems(config.AllowedSaddles)); } } } private IEnumerator DelayedReplaceSaddleItems(List<string> allowedSaddles) { yield return (object)new WaitForSeconds(1f); List<ItemDrop> validSaddles = new List<ItemDrop>(); ItemDrop itemDrop = default(ItemDrop); foreach (string saddleName in allowedSaddles) { GameObject prefab = ZNetScene.instance.GetPrefab(saddleName); if ((Object)(object)prefab != (Object)null && prefab.TryGetComponent<ItemDrop>(ref itemDrop)) { validSaddles.Add(itemDrop); } itemDrop = null; } if (validSaddles.Count > 0) { MultiSaddleHandler handler = ((Component)m_tameable).GetComponent<MultiSaddleHandler>() ?? ((Component)m_tameable).gameObject.AddComponent<MultiSaddleHandler>(); handler.SetAllowedSaddles(validSaddles); } } } namespace StatusEffectManager { [Description("The ItemDrop effect to apply the status effect")] [PublicAPI] public enum EffectType { Equip, Attack, Consume, Set } public struct SE_Item { [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(1)] public StatusEffect Effect; public EffectType Type; } [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [PublicAPI] public class CustomSE { private static readonly List<CustomSE> RegisteredEffects = new List<CustomSE>(); private static readonly Dictionary<StatusEffect, CustomSE> CustomEffectMap = new Dictionary<StatusEffect, CustomSE>(); internal static readonly List<StatusEffect> CustomSEs = new List<StatusEffect>(); internal static readonly Dictionary<SE_Item, string> AddToPrefabs = new Dictionary<SE_Item, string>(); [Description("Instance of the StatusEffect.")] public readonly StatusEffect Effect; public EffectType Type; private string _folderName = "icons"; private AssetBundle _assetBundle = null; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] [Description("Sets the icon for the StatusEffect. Must be 64x64")] public Sprite IconSprite = null; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private string IconName = null; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private LocalizeKey _name; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static Localization _english; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync = true; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static object _configSync; [Description("Sets the icon for the StatusEffect. Must be 64x64")] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] public string Icon { [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] get { return IconName; } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] set { IconName = value; IconSprite = ((IconName == null) ? null : loadSprite(IconName)); Effect.m_icon = IconSprite; } } [Description("Sets the in-game name for the StatusEffect")] public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } StatusEffect effect = Effect; if (effect.m_name.StartsWith("$")) { _name = new LocalizeKey(effect.m_name); } else { string text = "$statuseffect_" + ((Object)Effect).name.Replace(" ", "_"); _name = new LocalizeKey(text).English(effect.m_name); effect.m_name = text; } return _name; } } private static Localization english { get { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (_english == null) { _english = new Localization(); _english.SetupLanguage("English"); } return _english; } } private static BaseUnityPlugin plugin { get { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown if (_plugin == null) { IEnumerable<TypeInfo> source; try { source = Assembly.GetExecutingAssembly().DefinedTypes.ToList(); } catch (ReflectionTypeLoadException ex) { source = from t in ex.Types where t != null select t.GetTypeInfo(); } _plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); } return _plugin; } } [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static object configSync { [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " ItemManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } public CustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") : this(EffectManager.RegisterAssetBundle(assetBundleFileName, folderName), customEffectName) { } public CustomSE(AssetBundle bundle, string customEffectName) { Effect = EffectManager.RegisterCustomSE(bundle, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } public CustomSE(string customEffectName) { Effect = ScriptableObject.CreateInstance<StatusEffect>(); EffectManager.RegisterCustomSE(Effect, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } [return: <3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private byte[] ReadEmbeddedFileBytes(string name) { using MemoryStream memoryStream = new MemoryStream(); Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ((_folderName == "") ? "" : ".") + _folderName + "." + name); if (manifestResourceStream == null) { return null; } manifestResourceStream.CopyTo(memoryStream); return memoryStream.ToArray(); } [return: <3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private Texture2D loadTexture(string name) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown byte[] array = ReadEmbeddedFileBytes(name); if (array != null) { Texture2D val = new Texture2D(0, 0); ImageConversion.LoadImage(val, array); return val; } return null; } private Sprite loadSprite(string name) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) Texture2D val = loadTexture(name); if (val != null) { return Sprite.Create(val, new Rect(0f, 0f, 64f, 64f), Vector2.zero); } AssetBundle assetBundle = _assetBundle; Sprite val2 = ((assetBundle != null) ? assetBundle.LoadAsset<Sprite>(name) : null); if (val2 != null) { return val2; } throw new FileNotFoundException("Could not find a file named " + name + " for the effect icon"); } public void AddSEToPrefab(CustomSE customSE, string prefabName) { SE_Item sE_Item = default(SE_Item); sE_Item.Effect = customSE.Effect; sE_Item.Type = customSE.Type; SE_Item key = sE_Item; AddToPrefabs.Add(key, prefabName); } private static ConfigEntry<T> config<[<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] T>(string group, string name, T value, ConfigDescription description) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); configSync?.GetType().GetMethod("AddConfigEntry").MakeGenericMethod(typeof(T)) .Invoke(configSync, new object[1] { val }); return val; } private static ConfigEntry<T> config<[<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] T>(string group, string name, T value, string description) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); } } [PublicAPI] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] public class LocalizeKey { public readonly string Key; public LocalizeKey(string key) { Key = key.Replace("$", ""); } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } return this; } } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] public static class EffectManager { [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] private struct BundleId { [UsedImplicitly] public string assetBundleFileName; [UsedImplicitly] public string folderName; } private static readonly Dictionary<BundleId, AssetBundle> bundleCache; static EffectManager() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown bundleCache = new Dictionary<BundleId, AssetBundle>(); Harmony val = new Harmony("org.bepinex.helpers.StatusEffectManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ObjectDB), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ObjectDBInit", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZNetScene), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ZNetSceneAwake", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static AssetBundle RegisterAssetBundle(string assetBundleFileName, string folderName = "assets") { foreach (AssetBundle allLoadedAssetBundle in AssetBundle.GetAllLoadedAssetBundles()) { if (string.Equals(((Object)allLoadedAssetBundle).name, assetBundleFileName)) { return allLoadedAssetBundle; } } string s = "5mtRtMwctdeooLLg"; Aes aes = Aes.Create(); aes.Key = Encoding.UTF8.GetBytes(s); aes.IV = Encoding.UTF8.GetBytes(s); aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.PKCS7; ICryptoTransform cryptoTransform = aes.CreateDecryptor(aes.Key, aes.IV); Assembly executingAssembly = Assembly.GetExecutingAssembly(); string name = null; string[] manifestResourceNames = executingAssembly.GetManifestResourceNames(); foreach (string text in manifestResourceNames) { if (text.EndsWith(assetBundleFileName)) { name = text; break; } } Stream manifestResourceStream = executingAssembly.GetManifestResourceStream(name); byte[] array = new byte[manifestResourceStream.Length]; manifestResourceStream.Read(array, 0, array.Length); byte[] array2 = cryptoTransform.TransformFinalBlock(array, 0, array.Length); AssetBundle result = AssetBundle.LoadFromMemory(array2); manifestResourceStream.Dispose(); return result; } public static StatusEffect RegisterCustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") { return RegisterCustomSE(RegisterAssetBundle(assetBundleFileName, folderName), customEffectName); } public static StatusEffect RegisterCustomSE(AssetBundle assets, string customEffectName) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown StatusEffect val = (StatusEffect)assets.LoadAsset<ScriptableObject>(customEffectName); CustomSE.CustomSEs.Add(val); return val; } public static StatusEffect RegisterCustomSE(StatusEffect customSE, string customEffectName) { ((Object)customSE).name = customEffectName; CustomSE.CustomSEs.Add(customSE); return customSE; } [HarmonyPriority(700)] private static void Patch_ObjectDBInit(ObjectDB __instance) { foreach (StatusEffect customSE in CustomSE.CustomSEs) { if (!__instance.m_StatusEffects.Contains(customSE)) { __instance.m_StatusEffects.Add(customSE); } } __instance.UpdateRegisters(); } [HarmonyPriority(700)] private static void Patch_ZNetSceneAwake(ZNetScene __instance) { foreach (KeyValuePair<SE_Item, string> addToPrefab in CustomSE.AddToPrefabs) { try { GameObject prefab = __instance.GetPrefab(addToPrefab.Value); ItemDrop val = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<ItemDrop>() : prefab.GetComponentInChildren<ItemDrop>()); Aoe val2 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<Aoe>() : prefab.GetComponentInChildren<Aoe>()); EffectArea val3 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<EffectArea>() : prefab.GetComponentInChildren<EffectArea>()); if (Object.op_Implicit((Object)(object)val)) { switch (addToPrefab.Key.Type) { case EffectType.Equip: val.m_itemData.m_shared.m_equipStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Attack: val.m_itemData.m_shared.m_attackStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Consume: val.m_itemData.m_shared.m_consumeStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Set: val.m_itemData.m_shared.m_setSize = 1; val.m_itemData.m_shared.m_setName = ((Object)addToPrefab.Key.Effect).name; val.m_itemData.m_shared.m_setStatusEffect = addToPrefab.Key.Effect; break; default: throw new ArgumentOutOfRangeException(); } } else if (Object.op_Implicit((Object)(object)val2)) { val2.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else if (Object.op_Implicit((Object)(object)val3)) { val3.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else { Debug.LogWarning((object)("The prefab '" + ((Object)prefab).name + "' does not have an ItemDrop, AOE, or EffectArea component. Cannot add the StatusEffect to the prefab.")); } } catch (Exception arg) { Debug.LogWarning((object)$"BROKE : {arg}"); } } } } } namespace SkillManager { [PublicAPI] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] public class Skill { [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] public static class LocalizationCache { private static readonly Dictionary<string, Localization> localizations = new Dictionary<string, Localization>(); internal static void LocalizationPostfix(Localization __instance, string language) { string key = localizations.FirstOrDefault([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (KeyValuePair<string, Localization> l) => l.Value == __instance).Key; if (key != null) { localizations.Remove(key); } if (!localizations.ContainsKey(language)) { localizations.Add(language, __instance); } } public static Localization ForLanguage([<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] string language = null) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown if (localizations.TryGetValue(language ?? PlayerPrefs.GetString("language", "English"), out var value)) { return value; } value = new Localization(); if (language != null) { value.SetupLanguage(language); } return value; } } [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [PublicAPI] public class LocalizeKey { private static readonly List<LocalizeKey> keys = new List<LocalizeKey>(); public readonly string Key; public readonly Dictionary<string, string> Localizations = new Dictionary<string, string>(); public LocalizeKey(string key) { Key = key.Replace("$", ""); keys.Add(this); } public void Alias(string alias) { Localizations.Clear(); if (!alias.Contains("$")) { alias = "$" + alias; } Localizations["alias"] = alias; Localization.instance.AddWord(Key, Localization.instance.Localize(alias)); } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { Localizations[lang] = value; if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } return this; } [HarmonyPriority(300)] internal static void AddLocalizedKeys(Localization __instance, string language) { foreach (LocalizeKey key in keys) { string value2; if (key.Localizations.TryGetValue(language, out var value) || key.Localizations.TryGetValue("English", out value)) { __instance.AddWord(key.Key, value); } else if (key.Localizations.TryGetValue("alias", out value2)) { __instance.AddWord(key.Key, Localization.instance.Localize(value2)); } } } } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] private class ConfigurationManagerAttributes { [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] [UsedImplicitly] public string Category; } [HarmonyPatch(typeof(Skills), "IsSkillValid")] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] private static class Patch_Skills_IsSkillValid { private static void Postfix(SkillType type, ref bool __result) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!__result && skills.ContainsKey(type)) { __result = true; } } } private static readonly Dictionary<SkillType, Skill> skills; internal static readonly Dictionary<string, Skill> skillByName; private readonly string skillName; private readonly string internalSkillName; private readonly SkillDef skillDef; public readonly LocalizeKey Name; public readonly LocalizeKey Description; private float skillEffectFactor = 1f; private int skillLoss = 5; public bool Configurable = false; private static bool InitializedTerminal; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static Localization _english; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static object _configSync; public float SkillGainFactor { get { return skillDef.m_increseStep; } set { skillDef.m_increseStep = value; this.SkillGainFactorChanged?.Invoke(value); } } public float SkillEffectFactor { get { return skillEffectFactor; } set { skillEffectFactor = value; this.SkillEffectFactorChanged?.Invoke(value); } } public int SkillLoss { get { return skillLoss; } set { skillLoss = value; this.SkillLossChanged?.Invoke(value); } } private static Localization english => _english ?? (_english = LocalizationCache.ForLanguage("English")); private static BaseUnityPlugin plugin { get { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown object obj = _plugin; if (obj == null) { BaseUnityPlugin val = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)Assembly.GetExecutingAssembly().DefinedTypes.First([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); _plugin = val; obj = (object)val; } return (BaseUnityPlugin)obj; } } [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static object configSync { [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " SkillManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] [method: <fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] [field: <3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] public event Action<float> SkillGainFactorChanged; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] [method: <fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] [field: <3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] public event Action<float> SkillEffectFactorChanged; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] [method: <fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] [field: <3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] public event Action<float> SkillLossChanged; public Skill(string englishName, string icon) : this(englishName, loadSprite(icon, 64, 64)) { } public Skill(string englishName, Sprite icon) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0043: 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_005e: 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_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown SkillType val = fromName(englishName); string text = new Regex("[^a-zA-Z]").Replace(englishName, "_"); skills[val] = this; skillByName[englishName] = this; skillDef = new SkillDef { m_description = "$skilldesc_" + text, m_icon = icon, m_increseStep = 0.5f, m_skill = val }; internalSkillName = text; skillName = englishName; Name = new LocalizeKey("skill_" + ((object)(SkillType)(ref val)).ToString()).English(englishName); Description = new LocalizeKey("skilldesc_" + text); } public static SkillType fromName(string englishName) { return (SkillType)Math.Abs(StringExtensionMethods.GetStableHashCode(englishName)); } static Skill() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Expected O, but got Unknown //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Expected O, but got Unknown //IL_01ad: Expected O, but got Unknown //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Expected O, but got Unknown //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Expected O, but got Unknown //IL_023f: Expected O, but got Unknown skills = new Dictionary<SkillType, Skill>(); skillByName = new Dictionary<string, Skill>(); InitializedTerminal = false; hasConfigSync = true; Harmony val = new Harmony("org.bepinex.helpers.skillmanager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_FejdStartup", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "GetSkillDef", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_GetSkillDef", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatRaiseSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatRaiseskill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatResetSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatResetSkill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "LoadCSV", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(LocalizeKey), "AddLocalizedKeys", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Terminal), "InitTerminal", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_InitTerminal_Prefix", (Type[])null, (Type[])null)), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_InitTerminal", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "SetupLanguage", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(LocalizationCache), "LocalizationPostfix", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "OnDeath", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_OnDeath_Prefix", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_OnDeath_Finalizer", (Type[])null, (Type[])null)), (HarmonyMethod)null); } private static void Patch_FejdStartup() { //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Expected O, but got Unknown foreach (Skill skill in skills.Values) { if (skill.Configurable) { string text = skill.skillName; string group = new Regex("['[\"\\]]").Replace(english.Localize(text), "").Trim(); string category = Localization.instance.Localize(text).Trim(); ConfigEntry<float> skillGain = config(group, "Skill gain factor", skill.SkillGainFactor, new ConfigDescription("The rate at which you gain experience for the skill.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 5f), new object[1] { new ConfigurationManagerAttributes { Category = category } })); skill.SkillGainFactor = skillGain.Value; skillGain.SettingChanged += [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (object _, EventArgs _) => { skill.SkillGainFactor = skillGain.Value; }; } } } private static void Patch_Skills_GetSkillDef([<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] ref SkillDef __result, List<SkillDef> ___m_skills, SkillType type) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) if (__result == null) { SkillDef val = GetSkillDef(type); if (val != null) { ___m_skills.Add(val); __result = val; } } } private static bool Patch_Skills_CheatRaiseskill(Skills __instance, string name, float value, Player ___m_player) { //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_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) foreach (SkillType key in skills.Keys) { SkillType current = key; Skill skill = skills[current]; if (string.Equals(skill.internalSkillName, name, StringComparison.CurrentCultureIgnoreCase)) { Skill skill2 = __instance.GetSkill(current); skill2.m_level += value; skill2.m_level = Mathf.Clamp(skill2.m_level, 0f, 100f); ((Character)___m_player).Message((MessageType)1, "Skill increased " + Localization.instance.Localize("$skill_" + ((object)(SkillType)(ref current)).ToString()) + ": " + (int)skill2.m_level, 0, skill2.m_info.m_icon); Console.instance.Print("Skill " + skill.internalSkillName + " = " + skill2.m_level); return false; } } return true; } private static bool Patch_Skills_CheatResetSkill(Skills __instance, string name) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) foreach (SkillType key in skills.Keys) { Skill skill = skills[key]; if (string.Equals(skill.internalSkillName, name, StringComparison.CurrentCultureIgnoreCase)) { __instance.ResetSkill(key); Console.instance.Print("Skill " + skill.internalSkillName + " reset"); return false; } } return true; } private static void Patch_Skills_OnDeath_Prefix(Skills __instance, [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(new byte[] { 2, 1 })] ref Dictionary<SkillType, Skill> __state) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) if (__state == null) { __state = new Dictionary<SkillType, Skill>(); } foreach (KeyValuePair<SkillType, Skill> skill in skills) { if (__instance.m_skillData.TryGetValue(skill.Key, out var value)) { __state[skill.Key] = value; if (skill.Value.skillLoss > 0) { Skill obj = value; obj.m_level -= value.m_level * (float)skill.Value.SkillLoss / 100f; value.m_accumulator = 0f; } __instance.m_skillData.Remove(skill.Key); } } } private static void Patch_Skills_OnDeath_Finalizer(Skills __instance, [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(new byte[] { 2, 1 })] ref Dictionary<SkillType, Skill> __state) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (__state == null) { return; } foreach (KeyValuePair<SkillType, Skill> item in __state) { __instance.m_skillData[item.Key] = item.Value; } __state = null; } private static void Patch_Terminal_InitTerminal_Prefix() { InitializedTerminal = Terminal.m_terminalInitialized; } private static void Patch_Terminal_InitTerminal() { if (!InitializedTerminal) { AddSkill(Terminal.commands["raiseskill"]); AddSkill(Terminal.commands["resetskill"]); } static void AddSkill(ConsoleCommand command) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown ConsoleOptionsFetcher fetcher = command.m_tabOptionsFetcher; command.m_tabOptionsFetcher = (ConsoleOptionsFetcher)([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] () => { List<string> list = fetcher.Invoke(); list.AddRange(skills.Values.Select([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (Skill skill) => skill.internalSkillName)); return list; }); } } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] private static SkillDef GetSkillDef(SkillType skillType) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (!skills.ContainsKey(skillType)) { return null; } Skill skill = skills[skillType]; return skill.skillDef; } private static byte[] ReadEmbeddedFileBytes(string name) { using MemoryStream memoryStream = new MemoryStream(); Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + "." + name).CopyTo(memoryStream); return memoryStream.ToArray(); } private static Texture2D loadTexture(string name) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown Texture2D val = new Texture2D(0, 0); ImageConversion.LoadImage(val, ReadEmbeddedFileBytes("icons." + name)); return val; } private static Sprite loadSprite(string name, int width, int height) { //IL_0014: 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) return Sprite.Create(loadTexture(name), new Rect(0f, 0f, (float)width, (float)height), Vector2.zero); } private static ConfigEntry<T> config<[<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] T>(string group, string name, T value, ConfigDescription description) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); configSync?.GetType().GetMethod("AddConfigEntry").MakeGenericMethod(typeof(T)) .Invoke(configSync, new object[1] { val }); return val; } private static ConfigEntry<T> config<[<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] T>(string group, string name, T value, string description) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); } } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [PublicAPI] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] public static class SkillExtensions { public static float GetSkillFactor(this Character character, string name) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return character.GetSkillFactor(Skill.fromName(name)) * Skill.skillByName[name].SkillEffectFactor; } public static float GetSkillFactor(this Skills skills, string name) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return skills.GetSkillFactor(Skill.fromName(name)) * Skill.skillByName[name].SkillEffectFactor; } public static void RaiseSkill(this Character character, string name, float value = 1f) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) character.RaiseSkill(Skill.fromName(name), value); } public static void RaiseSkill(this Skills skill, string name, float value = 1f) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) skill.RaiseSkill(Skill.fromName(name), value); } public static void LowerSkill(this Character character, string name, float factor = 1f) { character.GetSkills().LowerSkill(name, factor); } public static void LowerSkill(this Skills skills, string name, float factor) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (factor > 0f && skills.m_skillData.TryGetValue(Skill.fromName(name), out var value)) { Skill obj = value; obj.m_level -= value.m_level * factor; value.m_accumulator = 0f; } } } } namespace PieceManager { [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [PublicAPI] public static class MaterialReplacer { [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] public enum ShaderType { PieceShader, VegetationShader, RockShader, RugShader, GrassShader, CustomCreature, UseUnityShader } private static readonly Dictionary<GameObject, bool> ObjectToSwap; private static readonly Dictionary<string, Material> OriginalMaterials; private static readonly Dictionary<GameObject, ShaderType> ObjectsForShaderReplace; private static readonly HashSet<Shader> CachedShaders; private static bool hasRun; static MaterialReplacer() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Expected O, but got Unknown CachedShaders = new HashSet<Shader>(); hasRun = false; OriginalMaterials = new Dictionary<string, Material>(); ObjectToSwap = new Dictionary<GameObject, bool>(); ObjectsForShaderReplace = new Dictionary<GameObject, ShaderType>(); Harmony val = new Harmony("org.bepinex.helpers.PieceManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZoneSystem), "Start", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(typeof(MaterialReplacer), "ReplaceAllMaterialsWithOriginal", (Type[])null), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static void RegisterGameObjectForShaderSwap(GameObject go, ShaderType type) { if (!ObjectsForShaderReplace.ContainsKey(go)) { ObjectsForShaderReplace.Add(go, type); } } public static void RegisterGameObjectForMatSwap(GameObject go, bool isJotunnMock = false) { if (!ObjectToSwap.ContainsKey(go)) { ObjectToSwap.Add(go, isJotunnMock); } } private static void GetAllMaterials() { Material[] array = Resources.FindObjectsOfTypeAll<Material>(); foreach (Material val in array) { OriginalMaterials[((Object)val).name] = val; } } [HarmonyPriority(700)] private static void ReplaceAllMaterialsWithOriginal() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 if ((int)SystemInfo.graphicsDeviceType == 4 || hasRun) { return; } if (OriginalMaterials.Count == 0) { GetAllMaterials(); } foreach (KeyValuePair<GameObject, bool> item in ObjectToSwap) { GameObject key = item.Key; bool value = item.Value; ProcessGameObjectMaterials(key, value); } AssetBundle[] array = Resources.FindObjectsOfTypeAll<AssetBundle>(); AssetBundle[] array2 = array; foreach (AssetBundle val in array2) { IEnumerable<Shader> enumerable3; try { IEnumerable<Shader> enumerable2; if (!val.isStreamedSceneAssetBundle || !Object.op_Implicit((Object)(object)val)) { IEnumerable<Shader> enumerable = val.LoadAllAssets<Shader>(); enumerable2 = enumerable; } else { enumerable2 = from shader in ((IEnumerable<string>)val.GetAllAssetNames()).Select((Func<string, Shader>)val.LoadAsset<Shader>) where (Object)(object)shader != (Object)null select shader; } enumerable3 = enumerable2; } catch (Exception) { continue; } if (enumerable3 == null) { continue; } foreach (Shader item2 in enumerable3) { CachedShaders.Add(item2); } } foreach (KeyValuePair<GameObject, ShaderType> item3 in ObjectsForShaderReplace) { GameObject key2 = item3.Key; ShaderType value2 = item3.Value; ProcessGameObjectShaders(key2, value2); } hasRun = true; } private static void ProcessGameObjectMaterials(GameObject go, bool isJotunnMock) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { Material[] sharedMaterials = val.sharedMaterials.Select([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (Material material) => ReplaceMaterial(material, isJotunnMock)).ToArray(); val.sharedMaterials = sharedMaterials; } } private static Material ReplaceMaterial(Material originalMaterial, bool isJotunnMock) { string text = (isJotunnMock ? "JVLmock_" : "_REPLACE_"); if (!((Object)originalMaterial).name.StartsWith(text, StringComparison.Ordinal)) { return originalMaterial; } string text2 = ((Object)originalMaterial).name.Replace(" (Instance)", "").Replace(text, ""); if (OriginalMaterials.TryGetValue(text2, out var value)) { return value; } Debug.LogWarning((object)("No suitable material found to replace: " + text2)); return originalMaterial; } private static void ProcessGameObjectShaders(GameObject go, ShaderType shaderType) { Renderer[] componentsInChildren = go.GetComponentsInChildren<Renderer>(true); Renderer[] array = componentsInChildren; foreach (Renderer val in array) { if (((Object)val).name == "Impostor") { continue; } Material[] sharedMaterials = val.sharedMaterials; foreach (Material val2 in sharedMaterials) { if ((Object)(object)val2 != (Object)null) { val2.shader = GetShaderForType(val2.shader, shaderType, ((Object)val2.shader).name); } } } } private static Shader GetShaderForType(Shader orig, ShaderType shaderType, string originalShaderName) { return (Shader)(shaderType switch { ShaderType.PieceShader => FindShaderWithName(orig, "Custom/Piece"), ShaderType.VegetationShader => FindShaderWithName(orig, "Custom/Vegetation"), ShaderType.RockShader => FindShaderWithName(orig, "Custom/StaticRock"), ShaderType.RugShader => FindShaderWithName(orig, "Custom/Rug"), ShaderType.GrassShader => FindShaderWithName(orig, "Custom/Grass"), ShaderType.CustomCreature => FindShaderWithName(orig, "Custom/Creature"), ShaderType.UseUnityShader => FindShaderWithName(orig, ((Object)(object)FindShaderWithName(orig, originalShaderName) != (Object)null) ? originalShaderName : "ToonDeferredShading2017"), _ => FindShaderWithName(orig, "Standard"), }); } public static Shader FindShaderWithName(Shader origShader, string name) { foreach (Shader cachedShader in CachedShaders) { if (((Object)cachedShader).name == name) { return cachedShader; } } return origShader; } } [PublicAPI] public enum CraftingTable { None, [InternalName("piece_workbench")] Workbench, [InternalName("piece_cauldron")] Cauldron, [InternalName("forge")] Forge, [InternalName("piece_artisanstation")] ArtisanTable, [InternalName("piece_stonecutter")] StoneCutter, [InternalName("piece_magetable")] MageTable, [InternalName("blackforge")] BlackForge, [InternalName("piece_preptable")] FoodPreparationTable, [InternalName("piece_MeadCauldron")] MeadKetill, Custom } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] public class InternalName : Attribute { public readonly string internalName; public InternalName(string internalName) { this.internalName = internalName; } } [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [PublicAPI] public class ExtensionList { public readonly List<ExtensionConfig> ExtensionStations = new List<ExtensionConfig>(); public void Set(CraftingTable table, int maxStationDistance = 5) { ExtensionStations.Add(new ExtensionConfig { Table = table, maxStationDistance = maxStationDistance }); } public void Set(string customTable, int maxStationDistance = 5) { ExtensionStations.Add(new ExtensionConfig { Table = CraftingTable.Custom, custom = customTable, maxStationDistance = maxStationDistance }); } } public struct ExtensionConfig { public CraftingTable Table; public float maxStationDistance; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] public string custom; } [PublicAPI] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] public class CraftingStationList { public readonly List<CraftingStationConfig> Stations = new List<CraftingStationConfig>(); public void Set(CraftingTable table) { Stations.Add(new CraftingStationConfig { Table = table }); } public void Set(string customTable) { Stations.Add(new CraftingStationConfig { Table = CraftingTable.Custom, custom = customTable }); } } public struct CraftingStationConfig { public CraftingTable Table; public int level; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] public string custom; } [PublicAPI] public enum BuildPieceCategory { Misc = 0, Crafting = 1, BuildingWorkbench = 2, BuildingStonecutter = 3, Furniture = 4, All = 100, Custom = 99 } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [PublicAPI] public class RequiredResourcesList { public readonly List<Requirement> Requirements = new List<Requirement>(); public void Add(string item, int amount, bool recover) { Requirements.Add(new Requirement { itemName = item, amount = amount, recover = recover }); } } public struct Requirement { [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(1)] public string itemName; public int amount; public bool recover; } public struct SpecialProperties { [Description("Admins should be the only ones that can build this piece.")] public bool AdminOnly; [Description("Turns off generating a config for this build piece.")] public bool NoConfig; } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [PublicAPI] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] public class BuildingPieceCategory { public BuildPieceCategory Category; public string custom = ""; public void Set(BuildPieceCategory category) { Category = category; } public void Set(string customCategory) { Category = BuildPieceCategory.Custom; custom = customCategory; } } [PublicAPI] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] public class PieceTool { public readonly HashSet<string> Tools = new HashSet<string>(); public void Add(string tool) { Tools.Add(tool); } } [PublicAPI] [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(1)] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] public class BuildPiece { [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] internal class PieceConfig { public ConfigEntry<string> craft = null; public ConfigEntry<BuildPieceCategory> category = null; public ConfigEntry<string> customCategory = null; public ConfigEntry<string> tools = null; public ConfigEntry<CraftingTable> extensionTable = null; public ConfigEntry<string> customExtentionTable = null; public ConfigEntry<float> maxStationDistance = null; public ConfigEntry<CraftingTable> table = null; public ConfigEntry<string> customTable = null; } [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order; [UsedImplicitly] public bool? Browsable; [UsedImplicitly] [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] public string Category; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(new byte[] { 2, 1 })] [UsedImplicitly] public Action<ConfigEntryBase> CustomDrawer; } [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(0)] private class SerializedRequirements { public readonly List<Requirement> Reqs; public SerializedRequirements(List<Requirement> reqs) { Reqs = reqs; } public SerializedRequirements(string reqs) { Reqs = reqs.Split(new char[1] { ',' }).Select([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (string r) => { string[] array = r.Split(new char[1] { ':' }); Requirement result = default(Requirement); result.itemName = array[0]; result.amount = ((array.Length <= 1 || !int.TryParse(array[1], out var result2)) ? 1 : result2); bool result3 = default(bool); result.recover = array.Length <= 2 || !bool.TryParse(array[2], out result3) || result3; return result; }).ToList(); } public override string ToString() { return string.Join(",", Reqs.Select([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (Requirement r) => $"{r.itemName}:{r.amount}:{r.recover}")); } [return: <3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] public static ItemDrop fetchByName(ObjectDB objectDB, string name) { GameObject itemPrefab = objectDB.GetItemPrefab(name); ItemDrop val = ((itemPrefab != null) ? itemPrefab.GetComponent<ItemDrop>() : null); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)(((!string.IsNullOrWhiteSpace(((Object)plugin).name)) ? ("[" + ((Object)plugin).name + "]") : "") + " The required item '" + name + "' does not exist.")); } return val; } public static Requirement[] toPieceReqs(SerializedRequirements craft) { Dictionary<string, Requirement> dictionary = craft.Reqs.Where((Requirement r) => r.itemName != "").ToDictionary((Func<Requirement, string>)([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (Requirement r) => r.itemName), (Func<Requirement, Requirement>)([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (Requirement r) => { //IL_000d: 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_001e: 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) ItemDrop val = ResItem(r); return (val == null) ? ((Requirement)null) : new Requirement { m_amount = r.amount, m_resItem = val, m_recover = r.recover }; })); return dictionary.Values.Where([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (Requirement v) => v != null).ToArray(); [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] static ItemDrop ResItem(Requirement r) { return fetchByName(ObjectDB.instance, r.itemName); } } } internal static readonly List<BuildPiece> registeredPieces = new List<BuildPiece>(); private static readonly Dictionary<Piece, BuildPiece> pieceMap = new Dictionary<Piece, BuildPiece>(); internal static Dictionary<BuildPiece, PieceConfig> pieceConfigs = new Dictionary<BuildPiece, PieceConfig>(); internal List<Conversion> Conversions = new List<Conversion>(); internal List<ItemConversion> conversions = new List<ItemConversion>(); [Description("Disables generation of the configs for your pieces. This is global, this turns it off for all pieces in your mod.")] public static bool ConfigurationEnabled = true; public readonly GameObject Prefab; [Description("Specifies the resources needed to craft the piece.\nUse .Add to add resources with their internal ID and an amount.\nUse one .Add for each resource type the building piece should need.")] public readonly RequiredResourcesList RequiredItems = new RequiredResourcesList(); [Description("Sets the category for the building piece.")] public readonly BuildingPieceCategory Category = new BuildingPieceCategory(); [Description("Specifies the tool needed to build your piece.\nUse .Add to add a tool.")] public readonly PieceTool Tool = new PieceTool(); [Description("Specifies the crafting station needed to build your piece.\nUse .Add to add a crafting station, using the CraftingTable enum and a minimum level for the crafting station.")] public CraftingStationList Crafting = new CraftingStationList(); [Description("Makes this piece a station extension")] public ExtensionList Extension = new ExtensionList(); [Description("Change the extended/special properties of your build piece.")] public SpecialProperties SpecialProperties; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] [Description("Specifies a config entry which toggles whether a recipe is active.")] public ConfigEntryBase RecipeIsActive = null; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private LocalizeKey _name; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private LocalizeKey _description; internal string[] activeTools = null; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static object configManager; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static Localization _english; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] internal static BaseUnityPlugin _plugin = null; private static bool hasConfigSync = true; [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static object _configSync; public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } Piece component = Prefab.GetComponent<Piece>(); if (component.m_name.StartsWith("$")) { _name = new LocalizeKey(component.m_name); } else { string text = "$piece_" + ((Object)Prefab).name.Replace(" ", "_"); _name = new LocalizeKey(text).English(component.m_name); component.m_name = text; } return _name; } } public LocalizeKey Description { get { LocalizeKey description = _description; if (description != null) { return description; } Piece component = Prefab.GetComponent<Piece>(); if (component.m_description.StartsWith("$")) { _description = new LocalizeKey(component.m_description); } else { string text = "$piece_" + ((Object)Prefab).name.Replace(" ", "_") + "_description"; _description = new LocalizeKey(text).English(component.m_description); component.m_description = text; } return _description; } } private static Localization english => _english ?? (_english = LocalizationCache.ForLanguage("English")); internal static BaseUnityPlugin plugin { get { //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Expected O, but got Unknown if (_plugin != null) { return _plugin; } IEnumerable<TypeInfo> source; try { source = Assembly.GetExecutingAssembly().DefinedTypes.ToList(); } catch (ReflectionTypeLoadException ex) { source = from t in ex.Types where t != null select t.GetTypeInfo(); } _plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); return _plugin; } } [<3f536a75-6b05-42a2-b72e-ee3aa942b990>Nullable(2)] private static object configSync { [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] get { if (_configSync != null || !hasConfigSync) { return _configSync; } Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " PieceManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } return _configSync; } } public BuildPiece(string assetBundleFileName, string prefabName, string folderName = "assets") : this(PiecePrefabManager.RegisterAssetBundle(assetBundleFileName, folderName), prefabName) { } public BuildPiece(AssetBundle bundle, string prefabName) { Prefab = PiecePrefabManager.RegisterPrefab(bundle, prefabName); registeredPieces.Add(this); } internal static void Patch_FejdStartup(FejdStartup __instance) { //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0101: 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_02e1: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Expected O, but got Unknown //IL_0389: Unknown result type (might be due to invalid IL or missing references) //IL_0393: Expected O, but got Unknown //IL_0431: Unknown result type (might be due to invalid IL or missing references) //IL_040b: Unknown result type (might be due to invalid IL or missing references) //IL_0410: Unknown result type (might be due to invalid IL or missing references) //IL_048c: Unknown result type (might be due to invalid IL or missing references) //IL_0496: Expected O, but got Unknown //IL_0606: Unknown result type (might be due to invalid IL or missing references) //IL_0610: Expected O, but got Unknown //IL_08ea: Unknown result type (might be due to invalid IL or missing references) //IL_08f4: Expected O, but got Unknown //IL_067b: Unknown result type (might be due to invalid IL or missing references) //IL_0685: Expected O, but got Unknown //IL_0721: Unknown result type (might be due to invalid IL or missing references) //IL_072b: Expected O, but got Unknown //IL_095f: Unknown result type (might be due to invalid IL or missing references) //IL_0969: Expected O, but got Unknown //IL_0b7e: Unknown result type (might be due to invalid IL or missing references) //IL_0b88: Expected O, but got Unknown //IL_0c18: Unknown result type (might be due to invalid IL or missing references) //IL_0c22: Expected O, but got Unknown Type configManagerType = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (Assembly a) => a.GetName().Name == "ConfigurationManager")?.GetType("ConfigurationManager.ConfigurationManager"); configManager = ((configManagerType == null) ? null : Chainloader.ManagerObject.GetComponent(configManagerType)); foreach (BuildPiece registeredPiece in registeredPieces) { registeredPiece.activeTools = registeredPiece.Tool.Tools.DefaultIfEmpty("Hammer").ToArray(); if (registeredPiece.Category.Category != BuildPieceCategory.Custom) { registeredPiece.Prefab.GetComponent<Piece>().m_category = (PieceCategory)registeredPiece.Category.Category; } else { registeredPiece.Prefab.GetComponent<Piece>().m_category = PiecePrefabManager.GetCategory(registeredPiece.Category.custom); } } if (!ConfigurationEnabled) { return; } bool saveOnConfigSet = plugin.Config.SaveOnConfigSet; plugin.Config.SaveOnConfigSet = false; foreach (BuildPiece registeredPiece2 in registeredPieces) { BuildPiece piece = registeredPiece2; if (piece.SpecialProperties.NoConfig) { continue; } PieceConfig pieceConfig2 = (pieceConfigs[piece] = new PieceConfig()); PieceConfig cfg = pieceConfig2; Piece piecePrefab2 = piece.Prefab.GetComponent<Piece>(); string pieceName = piecePrefab2.m_name; string englishName = new Regex("[=\\n\\t\\\\\"\\'\\[\\]]*").Replace(english.Localize(pieceName), "").Trim(); string localizedName = Localization.instance.Localize(pieceName).Trim(); int order = 0; cfg.category = config(englishName, "Build Table Category", piece.Category.Category, new ConfigDescription("Build Category where " + localizedName + " is available.", (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Order = (order -= 1), Category = localizedName } })); ConfigurationManagerAttributes customTableAttributes = new ConfigurationManagerAttributes { Order = (order -= 1), Browsable = (cfg.category.Value == BuildPieceCategory.Custom), Category = localizedName }; cfg.customCategory = config(englishName, "Custom Build Category", piece.Category.custom, new ConfigDescription("", (AcceptableValueBase)null, new object[1] { customTableAttributes })); cfg.category.SettingChanged += BuildTableConfigChanged; cfg.customCategory.SettingChanged += BuildTableConfigChanged; if (cfg.category.Value == BuildPieceCategory.Custom) { piecePrefab2.m_category = PiecePrefabManager.GetCategory(cfg.customCategory.Value); } else { piecePrefab2.m_category = (PieceCategory)cfg.category.Value; } cfg.tools = config(englishName, "Tools", string.Join(", ", piece.activeTools), new ConfigDescription("Comma separated list of tools where " + localizedName + " is available.", (AcceptableValueBase)null, new object[1] { customTableAttributes })); piece.activeTools = (from s in cfg.tools.Value.Split(new char[1] { ',' }) select s.Trim()).ToArray(); cfg.tools.SettingChanged += [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (object _, EventArgs _) => { Inventory[] source = (from c in Player.s_players.Select([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (Player p) => ((Humanoid)p).GetInventory()).Concat(from c in Object.FindObjectsOfType<Container>() select c.GetInventory()) where c != null select c).ToArray(); Dictionary<string, List<PieceTable>> dictionary = (from kv in (from i in (from p in ObjectDB.instance.m_items select p.GetComponent<ItemDrop>() into c where Object.op_Implicit((Object)(object)c) && Object.op_Implicit((Object)(object)((Component)c).GetComponent<ZNetView>()) select c).Concat(ItemDrop.s_instances) select new KeyValuePair<string, ItemData>(Utils.GetPrefabName(((Component)i).gameObject), i.m_itemData)).Concat(from i in source.SelectMany([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (Inventory i) => i.GetAllItems()) select new KeyValuePair<string, ItemData>(((Object)i.m_dropPrefab).name, i)) where Object.op_Implicit((Object)(object)kv.Value.m_shared.m_buildPieces) group kv by kv.Key).ToDictionary([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (IGrouping<string, KeyValuePair<string, ItemData>> g) => g.Key, [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (IGrouping<string, KeyValuePair<string, ItemData>> g) => g.Select([<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (KeyValuePair<string, ItemData> kv) => kv.Value.m_shared.m_buildPieces).Distinct().ToList()); string[] array5 = piece.activeTools; foreach (string key in array5) { if (dictionary.TryGetValue(key, out var value3)) { foreach (PieceTable item3 in value3) { item3.m_pieces.Remove(piece.Prefab); } } } piece.activeTools = (from s in cfg.tools.Value.Split(new char[1] { ',' }) select s.Trim()).ToArray(); if (Object.op_Implicit((Object)(object)ObjectDB.instance)) { string[] array6 = piece.activeTools; foreach (string key2 in array6) { if (dictionary.TryGetValue(key2, out var value4)) { foreach (PieceTable item4 in value4) { if (!item4.m_pieces.Contains(piece.Prefab)) { item4.m_pieces.Add(piece.Prefab); } } } } if (Object.op_Implicit((Object)(object)Player.m_localPlayer) && Object.op_Implicit((Object)(object)Player.m_localPlayer.m_buildPieces)) { PiecePrefabManager.CategoryRefreshNeeded = true; ((Humanoid)Player.m_localPlayer).SetPlaceMode(Player.m_localPlayer.m_buildPieces); } } }; StationExtension pieceExtensionComp; List<ConfigurationManagerAttributes> hideWhenNoneAttributes2; if (piece.Extension.ExtensionStations.Count > 0) { pieceExtensionComp = piece.Prefab.GetOrAddComponent<StationExtension>(); PieceConfig pieceConfig3 = cfg; string group = englishName; CraftingTable table = piece.Extension.ExtensionStations.First().Table; string text = "Crafting station that " + localizedName + " extends."; object[] array = new object[1]; ConfigurationManagerAttributes configurationManagerAttributes = new ConfigurationManagerAttributes(); int num = order - 1; order = num; configurationManagerAttributes.Order = num; array[0] = configurationManagerAttributes; pieceConfig3.extensionTable = config(group, "Extends Station", table, new ConfigDescription(text, (AcceptableValueBase)null, array)); cfg.customExtentionTable = config(englishName, "Custom Extend Station", piece.Extension.ExtensionStations.First().custom ?? "", new ConfigDescription("", (AcceptableValueBase)null, new object[1] { customTableAttributes })); PieceConfig pieceConfig4 = cfg; string group2 = englishName; float maxStationDistance = piece.Extension.ExtensionStations.First().maxStationDistance; string text2 = "Distance from the station that " + localizedName + " can be placed."; object[] array2 = new object[1]; ConfigurationManagerAttributes configurationManagerAttributes2 = new ConfigurationManagerAttributes(); num = order - 1; order = num; configurationManagerAttributes2.Order = num; array2[0] = configurationManagerAttributes2; pieceConfig4.maxStationDistance = config(group2, "Max Station Distance", maxStationDistance, new ConfigDescription(text2, (AcceptableValueBase)null, array2)); hideWhenNoneAttributes2 = new List<ConfigurationManagerAttributes>(); cfg.extensionTable.SettingChanged += ExtensionTableConfigChanged; cfg.customExtentionTable.SettingChanged += ExtensionTableConfigChanged; cfg.maxStationDistance.SettingChanged += ExtensionTableConfigChanged; ConfigurationManagerAttributes configurationManagerAttributes3 = new ConfigurationManagerAttributes(); num = order - 1; order = num; configurationManagerAttributes3.Order = num; configurationManagerAttributes3.Browsable = cfg.extensionTable.Value != CraftingTable.None; ConfigurationManagerAttributes item = configurationManagerAttributes3; hideWhenNoneAttributes2.Add(item); } List<ConfigurationManagerAttributes> hideWhenNoneAttributes; if (piece.Crafting.Stations.Count > 0) { hideWhenNoneAttributes = new List<ConfigurationManagerAttributes>(); PieceConfig pieceConfig5 = cfg; string group3 = englishName; CraftingTable table2 = piece.Crafting.Stations.First().Table; string text3 = "Crafting station where " + localizedName + " is available."; object[] array3 = new object[1]; ConfigurationManagerAttributes configurationManagerAttributes4 = new ConfigurationManagerAttributes(); int num = order - 1; order = num; configurationManagerAttributes4.Order = num; array3[0] = configurationManagerAttributes4; pieceConfig5.table = config(group3, "Crafting Station", table2, new ConfigDescription(text3, (AcceptableValueBase)null, array3)); cfg.customTable = config(englishName, "Custom Crafting Station", piece.Crafting.Stations.First().custom ?? "", new ConfigDescription("", (AcceptableValueBase)null, new object[1] { customTableAttributes })); cfg.table.SettingChanged += TableConfigChanged; cfg.customTable.SettingChanged += TableConfigChanged; ConfigurationManagerAttributes configurationManagerAttributes5 = new ConfigurationManagerAttributes(); num = order - 1; order = num; configurationManagerAttributes5.Order = num; configurationManagerAttributes5.Browsable = cfg.table.Value != CraftingTable.None; ConfigurationManagerAttributes item2 = configurationManagerAttributes5; hideWhenNoneAttributes.Add(item2); } cfg.craft = itemConfig("Crafting Costs", new SerializedRequirements(piece.RequiredItems.Requirements).ToString(), "Item costs to craft " + localizedName); cfg.craft.SettingChanged += [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (object _, EventArgs _) => { if (Object.op_Implicit((Object)(object)ObjectDB.instance) && (Object)(object)ObjectDB.instance.GetItemPrefab("YmirRemains") != (Object)null) { Requirement[] resources = SerializedRequirements.toPieceReqs(new SerializedRequirements(cfg.craft.Value)); piecePrefab2.m_resources = resources; Piece[] array4 = Object.FindObjectsOfType<Piece>(); foreach (Piece val in array4) { if (val.m_name == pieceName) { val.m_resources = resources; } } } }; for (int j = 0; j < piece.Conversions.Count; j++) { string text4 = ((piece.Conversions.Count > 1) ? $"{j + 1}. " : ""); Conversion conversion = piece.Conversions[j]; conversion.config = new Conversion.ConversionConfig(); int index = j; conversion.config.input = config(englishName, text4 + "Conversion Input Item", conversion.Input, new ConfigDescription("Conversion input item within " + englishName, (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Category = localizedName } })); conversion.config.input.SettingChanged += [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (object _, EventArgs _) => { if (index < piece.conversions.Count) { ObjectDB instance2 = ObjectDB.instance; if (instance2 != null) { ItemDrop from = SerializedRequirements.fetchByName(instance2, conversion.config.input.Value); piece.conversions[index].m_from = from; } } }; conversion.config.output = config(englishName, text4 + "Conversion Output Item", conversion.Output, new ConfigDescription("Conversion output item within " + englishName, (AcceptableValueBase)null, new object[1] { new ConfigurationManagerAttributes { Category = localizedName } })); conversion.config.output.SettingChanged += [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(0)] (object _, EventArgs _) => { if (index < piece.conversions.Count) { ObjectDB instance = ObjectDB.instance; if (instance != null) { ItemDrop to = SerializedRequirements.fetchByName(instance, conversion.config.output.Value); piece.conversions[index].m_to = to; } } }; } void BuildTableConfigChanged(object o, EventArgs e) { //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0042: 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) if (registeredPieces.Count > 0) { if (cfg.category.Value == BuildPieceCategory.Custom) { piecePrefab2.m_category = PiecePrefabManager.GetCategory(cfg.customCategory.Value); } else { piecePrefab2.m_category = (PieceCategory)cfg.category.Value; } if (Object.op_Implicit((Object)(object)Hud.instance)) { PiecePrefabManager.CategoryRefreshNeeded = true; PiecePrefabManager.CreateCategoryTabs(); } } customTableAttributes.Browsable = cfg.category.Value == BuildPieceCategory.Custom; ReloadConfigDisplay(); } void ExtensionTableConfigChanged(object o, EventArgs e) { if (piece.RequiredItems.Requirements.Count > 0) { CraftingTable value2 = cfg.extensionTable.Value; CraftingTable craftingTable = value2; if (craftingTable == CraftingTable.Custom) { StationExtension obj2 = pieceExtensionComp; GameObject prefab2 = ZNetScene.instance.GetPrefab(cfg.customExtentionTable.Value); obj2.m_craftingStation = ((prefab2 != null) ? prefab2.GetComponent<CraftingStation>() : null); } else { pieceExtensionComp.m_craftingStation = ZNetScene.instance.GetPrefab(((InternalName)typeof(CraftingTable).GetMember(cfg.extensionTable.Value.ToString())[0].GetCustomAttributes(typeof(InternalName)).First()).internalName).GetComponent<CraftingStation>(); } pieceExtensionComp.m_maxStationDistance = cfg.maxStationDistance.Value; } customTableAttributes.Browsable = cfg.extensionTable.Value == CraftingTable.Custom; foreach (ConfigurationManagerAttributes item5 in hideWhenNoneAttributes2) { item5.Browsable = cfg.extensionTable.Value != CraftingTable.None; } ReloadConfigDisplay(); plugin.Config.Save(); } void TableConfigChanged(object o, EventArgs e) { if (piece.RequiredItems.Requirements.Count > 0) { switch (cfg.table.Value) { case CraftingTable.None: piecePrefab2.m_craftingStation = null; break; case CraftingTable.Custom: { Piece obj = piecePrefab2; GameObject prefab = ZNetScene.instance.GetPrefab(cfg.customTable.Value); obj.m_craftingStation = ((prefab != null) ? prefab.GetComponent<CraftingStation>() : null); break; } default: piecePrefab2.m_craftingStation = ZNetScene.instance.GetPrefab(((InternalName)typeof(CraftingTable).GetMember(cfg.table.Value.ToString())[0].GetCustomAttributes(typeof(InternalName)).First()).internalName).GetComponent<CraftingStation>(); break; } } customTableAttributes.Browsable = cfg.table.Value == CraftingTable.Custom; foreach (ConfigurationManagerAttributes item6 in hideWhenNoneAttributes) { item6.Browsable = cfg.table.Value != CraftingTable.None; } ReloadConfigDisplay(); plugin.Config.Save(); } ConfigEntry<string> itemConfig(string name, string value, string desc) { //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown ConfigurationManagerAttributes configurationManagerAttributes6 = new ConfigurationManagerAttributes { CustomDrawer = DrawConfigTable, Order = (order -= 1), Category = localizedName }; return config(englishName, name, value, new ConfigDescription(desc, (AcceptableValueBase)null, new object[1] { configurationManagerAttributes6 })); } } foreach (BuildPiece registeredPiece3 in registeredPieces) { ConfigEntryBase enabledCfg = registeredPiece3.RecipeIsActive; Piece piecePrefab; if (enabledCfg != null) { piecePrefab = registeredPiece3.Prefab.GetComponent<Piece>(); ConfigChanged(null, null); ((object)enabledCfg).GetType().GetEvent("SettingChanged").AddEventHandler(enabledCfg, new EventHandler(ConfigChanged)); } registeredPiece3.InitializeNewRegisteredPiece(registeredPiece3); [<fe31496f-f1d0-433c-b9cf-7d83520d6761>NullableContext(2)] void ConfigChanged(object o, EventArgs e) { piecePrefab.m_enabled = (int)enabledCfg.BoxedValue != 0; } } if (saveOnConfigSet) { plugin.Config.SaveOnConfigSet = true; plugin.Config.Save(); } void ReloadConfigDisplay() { object obj3 = configManagerType?.GetProperty("DisplayingWindow").GetValue(configManager); if (obj3 is bool && (bool)obj3) { configManagerType.GetMethod("BuildSettingList").Invoke(configManager, Array.Empty<object>()); } } } private void InitializeNewRegisteredPiece(BuildPiece piece) { ConfigEntryBase recipeIsActive = piece.RecipeIsActive; PieceConfig cfg; Piece piecePrefab; string pieceName; if (recipeIsActive != null) { pieceConfigs.TryGetValue(piece, out cfg); piecePrefab = piece.Prefab.GetComponent<Piece>(); pieceName = piecePrefab.m_name; ((object)recipeIsActive).GetType().GetEvent("SettingChanged").AddEventHandler(recipeIsActive, new EventHandler(ConfigChanged)); } void ConfigChanged(object o, EventArgs e) { if (Object.op_Implicit((Object)(object)ObjectDB.instance) && (Object)(object)ObjectDB.instance.GetItemPrefab("YmirRemains") != (Object)null && cfg != null) { Requirement[] resources = SerializedRequirements.toPieceReqs(new SerializedRequirements(cfg.craft.Value)); piecePrefab.m_resources = resources; Piece[] array = Object.FindObjectsOfType<Piece>(); foreach (Piece val in array) { if (val.m_name == pieceName) { val.m_resources = resources; } } } } } [HarmonyPriority(700)] internal static void Patch_ObjectDBInit(ObjectDB __instance) { //IL_0489: Unknown result type (might be due to invalid IL or missing references) //IL_048e: Unknown result type (might be due to invalid IL or missing references) //IL_04c1: Unknown result type (might be due to invalid IL or missing references) //IL_04f9: Expected O, but got Unknown if ((Object)(object)__instance.GetItemPrefab("YmirRemains") == (Object)null) { return; } foreach (BuildPiece registeredPiece in registeredPieces) { pieceConfigs.TryGetValue(registeredPiece, out var value); registeredPiece.Prefab.GetComponent<Piece>().m_resources = SerializedRequirements.toPieceReqs((value == null) ? new SerializedRequirements(registeredPiece.RequiredItems.Requirements) : new SerializedRequirements(value.craft.Value)); foreach (ExtensionConfig extensionStation in registeredPiece.Extension.ExtensionStations) { switch ((value == null || registeredPiece.Extension.ExtensionStations.Count > 0) ? extensionStation.Table : value.extensionTable.Value) { case CraftingTable.None: registeredPiece.Prefab.GetComponent<StationExtension>().m_craftingStation = null; break; case CraftingTable.Custom: { GameObject prefab = ZNetScene.instance.GetPrefab((value == null || registeredPiece.Extension.ExtensionStations.Count > 0) ? extensionStation.custom : value.customExtentionTable.Value); if (prefab != null) { registeredPiece.Prefab.GetComponent<StationExtension>().m_craftingStation = prefab.GetComponent<CraftingStation>(); } else { Debug.LogWarning((object)("Custom crafting station '" + ((value == null || registeredPiece.Extension.ExtensionStations.Count > 0) ? extensionStation.custom : value.customExtentionTable.Value) + "' does not exist")); } break; } default: if (value != null && value.table.Value == CraftingTable.None) { registeredPiece.Prefab.GetComponent<StationExtension>().m_craftingStation = null; } else { registeredPiece.Prefab.GetComponent<StationExtension>().m_craftingStation = ZNetScene.instance.GetPrefab(((InternalName)typeof(CraftingTable).GetMember(((value == null || registeredPiece.Extension.ExtensionStations.Count > 0) ? extensionStation.Table : value.extensionTable.Value).ToString())[0].GetCustomAttributes(typeof(InternalName)).First()).internalName).GetComponent<CraftingStation>(); } break; } } foreach (CraftingStationConfig station in registeredPiece.Crafting.Stations) { switch ((value == null || registeredPiece.Crafting.Stations.Count > 0) ? station.Table : value.table.Value) { case CraftingTable.None: registeredPiece.Prefab.GetComponent<Piece>().m_craftingStation = null; break; case CraftingTable.Custom: { GameObject prefab2 = ZNetScene.instance.GetPrefab((value == null ||