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 LootGoblinsHeimUtils v2.0.0
LootGoblinsHeimUtils.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using JetBrains.Annotations; using Jotunn; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using LootGoblinsUtils.Configuration; using LootGoblinsUtils.Conquest.Components.Spawners; using LootGoblinsUtils.Conquest.Components.Spawners.Boar; using LootGoblinsUtils.Conquest.Components.Spawners.Neck; using LootGoblinsUtils.Conquest.Creatures; using LootGoblinsUtils.Conquest.Creatures.Attacks; using LootGoblinsUtils.Conquest.Items; using LootGoblinsUtils.Conquest.Locations; using LootGoblinsUtils.Conquest.Locations.T1CoresLoaders; using LootGoblinsUtils.Conquest.Pieces; using LootGoblinsUtils.Conquest.Pieces.Core; using LootGoblinsUtils.Conquest.Pieces.DefenderTotem; using LootGoblinsUtils.Conquest.Pieces.Ghost; using LootGoblinsUtils.Conquest.TerminalCommands; using LootGoblinsUtils.Submods.Farming; using LootGoblinsUtils.Submods.Farming.Pieces; using LootGoblinsUtils.Submods.Farming.Pieces.Configurators; using LootGoblinsUtils.Submods.Farming.Pieces.Stations; using LootGoblinsUtils.Utils; using SimpleJson; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("LootGoblinsHeimUtils")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("LootGoblinsHeimUtils")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("e3243d22-4307-4008-ba36-9f326008cde5")] [assembly: AssemblyFileVersion("0.0.1.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.1.0")] namespace LootGoblinsUtils { [BepInPlugin("com.lootgoblinsheim.utils", "LootGoblinsHeimUtils", "2.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] internal class LootGoblinsHeimUtilsPlugin : BaseUnityPlugin { public const string PluginGuid = "com.lootgoblinsheim.utils"; public const string PluginName = "LootGoblinsHeimUtils"; public const string PluginVersion = "2.0.0"; private readonly Harmony _harmony = new Harmony("com.lootgoblinsheim.utils"); public static readonly CustomLocalization Localization = LocalizationManager.Instance.GetLocalization(); public static ConfigFile CFG; private void Awake() { Logger.LogInfo((object)"------------ LootGoblinsHeimUtilsPlugin start ------------"); CFG = ((BaseUnityPlugin)this).Config; Blueprints.Init(); Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); PluginConfiguration.InitConfigs((BaseUnityPlugin)(object)this); FarmingSetup.Init(); Logger.LogInfo((object)"------------ LootGoblinsHeimUtilsPlugin end ------------"); } } } namespace LootGoblinsUtils.Utils { public class Blueprint { public enum Format { VBuild, Blueprint } public string ID; public string Name; public string Creator; public string Description = string.Empty; public string Category = "Blueprints"; public PieceEntry[] PieceEntries; public GameObject Prefab; public KeyHintConfig KeyHint; public Bounds Bounds; public float GhostActiveTime; } public class SnapPointEntry { public string line; public float posX; public float posY; public float posZ; } public class TerrainModEntry { public string line; public string shape; public float posX; public float posY; public float posZ; public float radius; public int rotation; public float smooth; public string paint; } public static class Blueprints { public enum ParserState { SnapPoints, Terrain, Pieces } public static Blueprint RavenBP; public static void Init() { RavenBP = LoadBP("Relicv_Raven_V2.blueprint", "LGH_Raven_BP"); } private static Blueprint LoadBP(string filename, string targetName) { string text = AssetUtils.LoadTextFromResources(filename); if (text == null) { return null; } string[] lines = text.GetLines(removeEmptyLines: true).ToArray(); Blueprint blueprint = FromArray(targetName, lines, Blueprint.Format.Blueprint); Logger.LogInfo((object)$"Loaded BP: ${filename}; value = {blueprint.Name}; pieces = {blueprint.PieceEntries.Length}"); return blueprint; } public static void Instantiate(this Blueprint bp, Transform parent) { //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) if (bp == null) { Logger.LogError((object)"Blueprints.Instantiate: bp is null"); return; } ((Component)parent).gameObject.SetActive(false); PieceEntry[] pieceEntries = bp.PieceEntries; foreach (PieceEntry pieceEntry in pieceEntries) { if (pieceEntry == null || pieceEntry.name == null) { Logger.LogWarning((object)"Skipping empty bpPieceEntry"); continue; } GameObject prefab = PrefabManager.Instance.GetPrefab(pieceEntry.name); if ((Object)(object)prefab == (Object)null) { Logger.LogError((object)("Blueprint[" + bp.Name + "]: cant find prefab " + pieceEntry.name + " to instantiate")); } else { Object.Instantiate<GameObject>(prefab, pieceEntry.GetPosition(), pieceEntry.GetRotation(), parent); } } Logger.LogInfo((object)"Blueprints.Instantiate: done"); ((Component)parent).gameObject.SetActive(true); } public static Blueprint FromArray(string id, string[] lines, Blueprint.Format format) { Blueprint blueprint = new Blueprint { ID = id }; List<PieceEntry> list = new List<PieceEntry>(); ParserState parserState = ParserState.Pieces; foreach (string text in lines) { if (string.IsNullOrEmpty(text)) { continue; } if (text.StartsWith("#Name:")) { blueprint.Name = text.Substring("#Name:".Length); continue; } if (text.StartsWith("#Creator:")) { blueprint.Creator = text.Substring("#Creator:".Length); continue; } if (text.StartsWith("#Description:")) { blueprint.Description = text.Substring("#Description:".Length); if (blueprint.Description.StartsWith("\"")) { blueprint.Description = SimpleJson.DeserializeObject<string>(blueprint.Description); } continue; } if (text.StartsWith("#Category:")) { blueprint.Category = text.Substring("#Category:".Length); if (string.IsNullOrEmpty(blueprint.Category)) { blueprint.Category = "Blueprints"; } continue; } switch (text) { case "#SnapPoints": parserState = ParserState.SnapPoints; break; case "#Terrain": parserState = ParserState.Terrain; break; case "#Pieces": parserState = ParserState.Pieces; break; default: ParseLine(format, text, parserState, list); break; } } if (string.IsNullOrEmpty(blueprint.Name)) { blueprint.Name = blueprint.ID; } blueprint.PieceEntries = list.ToArray(); return blueprint; } private static void ParseLine(Blueprint.Format format, string line, ParserState parserState, List<PieceEntry> pieceEntryList) { if (line.StartsWith("#")) { return; } switch (parserState) { case ParserState.SnapPoints: break; case ParserState.Terrain: break; case ParserState.Pieces: switch (format) { case Blueprint.Format.VBuild: pieceEntryList.Add(PieceEntry.FromVBuild(line)); break; case Blueprint.Format.Blueprint: pieceEntryList.Add(PieceEntry.FromBlueprint(line)); break; } break; } } } public static class CustomPieceExtensions { public static CustomPiece ReplaceWntModel(this CustomPiece piece, GameObject targetModel, Vector3 targetScale) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) return piece.ReplaceWntModel(targetModel, targetScale, Vector3.zero); } public static CustomPiece ReplaceWntModel(this CustomPiece piece, GameObject targetModel, Vector3 targetScale, Vector3 offset) { //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_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) GameObject val = Object.Instantiate<GameObject>(targetModel, piece.PiecePrefab.transform); Transform transform = val.transform; transform.localPosition += offset; val.transform.localScale = targetScale; WearNTear component = piece.PiecePrefab.GetComponent<WearNTear>(); if (Object.op_Implicit((Object)(object)component.m_new)) { Object.Destroy((Object)(object)component.m_new); } component.m_new = val; if (Object.op_Implicit((Object)(object)component.m_broken)) { Object.Destroy((Object)(object)component.m_broken); } component.m_broken = val; if (Object.op_Implicit((Object)(object)component.m_worn)) { Object.Destroy((Object)(object)component.m_worn); } component.m_worn = val; return piece; } public static CustomPiece RemoveExistingWntModels(this CustomPiece piece) { piece.PiecePrefab.DestroyIfExists("new"); piece.PiecePrefab.DestroyIfExists("worn"); piece.PiecePrefab.DestroyIfExists("broken"); return piece; } public static CustomPiece SetWntSupport(this CustomPiece piece, bool support) { piece.PiecePrefab.GetComponent<WearNTear>().m_noSupportWear = support; return piece; } public static CustomPiece SetPieceHealth(this CustomPiece piece, float health) { piece.PiecePrefab.GetComponent<WearNTear>().m_health = health; return piece; } public static CustomPiece RemoveColliders(this CustomPiece piece) { Collider[] componentsInChildren = piece.PiecePrefab.GetComponentsInChildren<Collider>(); for (int i = 0; i < componentsInChildren.Length; i++) { Object.Destroy((Object)(object)componentsInChildren[i]); } return piece; } public static CustomPiece RemoveRenderers(this CustomPiece piece) { Renderer[] componentsInChildren = piece.PiecePrefab.GetComponentsInChildren<Renderer>(); for (int i = 0; i < componentsInChildren.Length; i++) { Object.Destroy((Object)(object)componentsInChildren[i]); } return piece; } } public static class GameObjectExtensions { public static void SetHuntCharacter(this GameObject monster, Player player) { if ((Object)(object)monster == (Object)null) { Logger.LogWarning((object)(((Object)monster).name + ".SetHuntCharacter: monster == null")); return; } MonsterAI component = monster.GetComponent<MonsterAI>(); if ((Object)(object)component == (Object)null) { Logger.LogWarning((object)(((Object)monster).name + ".SetHuntCharacter: monsterAi == null")); return; } ((BaseAI)component).SetHuntPlayer(true); component.SetTarget((Character)(object)player); ((BaseAI)component).SetPatrolPoint(); } public static void SetRendererColor(this GameObject target, Color color) { //IL_003a: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)target == (Object)null) { Logger.LogError((object)"SetRendererColor target == null"); return; } MeshRenderer componentInChildren = ((Component)target.transform).GetComponentInChildren<MeshRenderer>(); if ((Object)(object)componentInChildren == (Object)null) { Logger.LogError((object)"SetRendererColor renderer == null"); } else { ((Renderer)componentInChildren).sharedMaterial.color = color; } } public static GameObject AddLightningEffect(this GameObject target, Vector3 fxScale) { //IL_0016: 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) GameObject obj = Object.Instantiate<GameObject>(FinePrefabs.LightningUnitEffectCloned, target.transform); obj.transform.localPosition = Vector3.zero; obj.transform.localScale = fxScale; return target; } public static void DestroyIfExists(this GameObject target, string name) { Transform val = target.transform.Find(name); if ((Object)(object)val != (Object)null) { Object.Destroy((Object)(object)((Component)val).gameObject); } } public static GameObject ClosestToPoint(this IEnumerable<GameObject> list, Vector3 point) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) GameObject[] source = (list as GameObject[]) ?? list.ToArray(); if (!source.Any()) { return null; } return (from x in source.ToDictionary((GameObject x) => x, (GameObject x) => Vector3.Distance(x.transform.position, point)) orderby x.Value select x).FirstOrDefault().Key; } public static bool PiecePlaced(this GameObject piece) { return ((Object)piece).name.Contains("(Clone)"); } } public static class Loader { public static void RunSafe(Action target, string name = null, [CallerMemberName] string caller = "") { try { Logger.LogInfo((object)((name ?? caller) + " start loading ...")); target(); Logger.LogInfo((object)((name ?? caller) + " loading completed")); } catch (Exception ex) { Logger.LogError((object)((name ?? caller) + " loading failed")); Logger.LogError((object)ex); } } } public static class MonoExtensions { public static bool IsPiecePlaced(this MonoBehaviour script) { return false; } } public class PieceEntry { public string line; public string name; public string category; public float posX; public float posY; public float posZ; public float rotX; public float rotY; public float rotZ; public float rotW; public string additionalInfo; public float scaleX; public float scaleY; public float scaleZ; public static PieceEntry FromBlueprint(string line) { //IL_0086: 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_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) if (line.IndexOf(',') > -1) { line = line.Replace(',', '.'); } string[] array = line.Split(new char[1] { ';' }); string text = array[0]; string text2 = array[1]; float num = InvariantFloat(array[2]); float num2 = InvariantFloat(array[3]); float num3 = InvariantFloat(array[4]); float num4 = InvariantFloat(array[5]); float num5 = InvariantFloat(array[6]); float num6 = InvariantFloat(array[7]); float num7 = InvariantFloat(array[8]); Vector3 pos = default(Vector3); ((Vector3)(ref pos))..ctor(num, num2, num3); Quaternion val = new Quaternion(num4, num5, num6, num7); Quaternion normalized = ((Quaternion)(ref val)).normalized; string text3 = array[9]; string text4; if (!string.IsNullOrEmpty(text3) && !text3.Equals("\"\"")) { try { text4 = SimpleJson.DeserializeObject<string>(text3); } catch { text4 = array[9]; } } else { text4 = null; } Vector3 one = Vector3.one; if (array.Length > 10) { ((Vector3)(ref one))..ctor(InvariantFloat(array[10]), InvariantFloat(array[11]), InvariantFloat(array[12])); } return new PieceEntry(text, text2, pos, normalized, text4, one); } public static PieceEntry FromVBuild(string line) { //IL_007a: 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_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) if (line.IndexOf(',') > -1) { line = line.Replace(',', '.'); } string[] array = line.Split(new char[1] { ' ' }); string text = array[0]; float num = InvariantFloat(array[1]); float num2 = InvariantFloat(array[2]); float num3 = InvariantFloat(array[3]); float num4 = InvariantFloat(array[4]); float num5 = InvariantFloat(array[5]); float num6 = InvariantFloat(array[6]); float num7 = InvariantFloat(array[7]); string text2 = "Building"; Quaternion val = new Quaternion(num, num2, num3, num4); Quaternion normalized = ((Quaternion)(ref val)).normalized; Vector3 pos = default(Vector3); ((Vector3)(ref pos))..ctor(num5, num6, num7); string empty = string.Empty; return new PieceEntry(text, text2, pos, normalized, empty, Vector3.one); } public PieceEntry(string name, string category, Vector3 pos, Quaternion rot, string additionalInfo, Vector3 scale) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0033: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) this.name = name.Split(new char[1] { '(' })[0]; this.category = category; posX = pos.x; posY = pos.y; posZ = pos.z; rotX = rot.x; rotY = rot.y; rotZ = rot.z; rotW = rot.w; this.additionalInfo = additionalInfo; if (!string.IsNullOrEmpty(this.additionalInfo)) { this.additionalInfo = string.Concat(this.additionalInfo.Split(new char[1] { ';' })); } scaleX = scale.x; scaleY = scale.y; scaleZ = scale.z; line = string.Join(";", this.name, this.category, InvariantString(posX), InvariantString(posY), InvariantString(posZ), InvariantString(rotX), InvariantString(rotY), InvariantString(rotZ), InvariantString(rotW), SimpleJson.SerializeObject((object)additionalInfo), InvariantString(scaleX), InvariantString(scaleY), InvariantString(scaleZ)); } public Vector3 GetPosition() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new Vector3(posX, posY, posZ); } public Quaternion GetRotation() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) return new Quaternion(rotX, rotY, rotZ, rotW); } public Vector3 GetScale() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) return new Vector3(scaleX, scaleY, scaleZ); } public static float InvariantFloat(string s) { if (!string.IsNullOrEmpty(s)) { return float.Parse(s, NumberStyles.Any, NumberFormatInfo.InvariantInfo); } return 0f; } public static string InvariantString(float f) { return f.ToString(NumberFormatInfo.InvariantInfo); } } public abstract class SlowMono : MonoBehaviour { protected float UpdateStep = 1f; private float _lastUpdate = Time.time; private void Update() { if (Time.time - _lastUpdate > UpdateStep) { _lastUpdate = Time.time; if (ZoneSystem.instance.IsActiveAreaLoaded() && !ZNetScene.instance.InLoadingScreen()) { SlowUpdate(); } } } public abstract void SlowUpdate(); } public static class StringExtensionMethods { public static IEnumerable<string> GetLines(this string str, bool removeEmptyLines = false) { return str.Split(new string[3] { "\r\n", "\r", "\n" }, removeEmptyLines ? StringSplitOptions.RemoveEmptyEntries : StringSplitOptions.None); } } public static class TextureExtensions { public static Texture2D DrawCircle(this Texture2D tex, Color color, int x, int y, int radius = 3) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) float num = radius * radius; for (int i = x - radius; i < x + radius + 1; i++) { for (int j = y - radius; j < y + radius + 1; j++) { if ((float)((x - i) * (x - i) + (y - j) * (y - j)) < num) { tex.SetPixel(i, j, color); } } } return tex; } } } namespace LootGoblinsUtils.Submods.ReliableBlock { [HarmonyPatch(typeof(Character), "AddStaggerDamage")] public static class Hook { public static void Postfix(ref bool __result) { if (PluginConfiguration.ReliableBlockToggle.Value) { __result = false; } } } } namespace LootGoblinsUtils.Submods.Farming { public static class FarmingSetup { public static void Init() { PrefabManager.OnVanillaPrefabsAvailable += Setup; ItemManager.OnItemsRegistered += ObjectDbLoaded; } private static void ObjectDbLoaded() { HoePatch.Patch(); } private static void Setup() { BushUtils.CacheDependencies(); FarmersTable.Configure(); FarmersTableExtensionT1.Configure(); RaspberryBush.Setup(); BlueberryBush.Setup(); CloudberryBush.Setup(); ThistleBush.Setup(); Mushroom.Configure(); MushroomYellow.Configure(); Dandelion.Configure(); Saplings.ReplaceRecipes(); PrefabManager.OnVanillaPrefabsAvailable -= Setup; } } public static class FarmingHooks { [HarmonyPatch(typeof(Fermenter), "GetHoverText")] public static class FermenterHoverText { public static bool Prefix(Fermenter __instance, ref string __result) { //IL_001f: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Expected I4, but got Unknown if (!((Object)((Component)__instance).gameObject).name.Contains("_LG")) { return true; } if (!PrivateArea.CheckAccess(((Component)__instance).transform.position, 0f, false, false)) { __result = "Доступ запрещён"; return false; } Piece component = ((Component)__instance).GetComponent<Piece>(); TimeSpan timeSpan = TimeSpan.FromSeconds((int)((double)__instance.m_fermentationDuration - __instance.GetFermentationTime())); Status status = __instance.GetStatus(); __result = (int)status switch { 0 => Localization.instance.Localize(component.m_name + " ( Пусто )\n[<color=yellow><b>$KEY_Use</b></color>] Добавить удобрение"), 1 => $"{component.m_name} ( <color=blue>Рост</color> )\nОсталось: {timeSpan.Minutes} мин. {timeSpan.Seconds} сек.", 3 => component.m_name + " ( <color=green>Готово</color> )", _ => component.m_name, }; return false; } } [HarmonyPatch(typeof(Fermenter), "UpdateCover")] public static class FermenterCoverSkip { private static bool Prefix(Fermenter __instance) { return !((Object)((Component)__instance).gameObject).name.Contains("_LG"); } } } public static class HoePatch { public static void Patch() { Loader.RunSafe(RemoveHoeRecipe, "HoePatch", "Patch"); } private static void RemoveHoeRecipe() { Recipe val = ((IEnumerable<Recipe>)ObjectDB.instance.m_recipes).FirstOrDefault((Func<Recipe, bool>)delegate(Recipe x) { object obj; if (x == null) { obj = null; } else { ItemDrop item = x.m_item; obj = ((item != null) ? ((Object)item).name : null); } return (string?)obj == "Hoe"; }); if ((Object)(object)val != (Object)null) { val.m_enabled = false; } } } } namespace LootGoblinsUtils.Submods.Farming.Pieces { public static class BlueberryBush { public static void Setup() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Expected O, but got Unknown //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Expected O, but got Unknown BushConfiguration bushConfiguration = new BushConfiguration(); bushConfiguration.Name = "Blueberries"; bushConfiguration.LocalizedBushName = "Куст черники"; bushConfiguration.ReadyObjectName = "Berrys"; bushConfiguration.FertilizerIcon = BushUtils.BlueberryBushIcon; bushConfiguration.NewBushModel = BushUtils.BlueberryBushModel; bushConfiguration.BushRequirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Blueberries", 5, 0, false), new RequirementConfig("BoneFragments", 3, 0, false) }; bushConfiguration.FertilizerConfigs = new BushConfiguration.FertilizerConfig[2] { new BushConfiguration.FertilizerConfig { LocalizedName = "Удобрение для черники", LocalizedDescription = "Добавьте в куст черники, чтобы запустить процесс роста", AmountProduced = 5, RecipeRequirements = (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("BoneFragments", 2, 0, false) } }, new BushConfiguration.FertilizerConfig { LocalizedName = "Удобрение для черники насыщенное", LocalizedDescription = "Добавьте в куст черники, чтобы запустить процесс роста. Увеличивает количество получаемого продукта", AmountProduced = 10, RecipeRequirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("BoneFragments", 2, 0, false), new RequirementConfig("Entrails", 1, 0, false) } } }; bushConfiguration.Configure(); } } public static class CloudberryBush { public static void Setup() { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Expected O, but got Unknown //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Expected O, but got Unknown //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Expected O, but got Unknown //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Expected O, but got Unknown BushConfiguration bushConfiguration = new BushConfiguration(); bushConfiguration.Name = "Cloudberry"; bushConfiguration.LocalizedBushName = "Куст морошки"; bushConfiguration.ReadyObjectName = "Berrys"; bushConfiguration.ColliderRadius = 0.7f; bushConfiguration.FertilizerIcon = BushUtils.CloudberryVisuals.Icon; bushConfiguration.NewBushModel = BushUtils.CloudberryVisuals.Model; bushConfiguration.BushRequirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Cloudberry", 5, 0, false), new RequirementConfig("Bloodbag", 2, 0, false) }; bushConfiguration.FertilizerConfigs = new BushConfiguration.FertilizerConfig[2] { new BushConfiguration.FertilizerConfig { LocalizedName = "Удобрение для морошки", LocalizedDescription = "Добавьте в куст морошки, чтобы запустить процесс роста", AmountProduced = 5, RecipeRequirements = (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Bloodbag", 3, 0, false) } }, new BushConfiguration.FertilizerConfig { LocalizedName = "Удобрение для морошки насыщенное", LocalizedDescription = "Добавьте в куст морошки, чтобы запустить процесс роста. Увеличивает количество получаемого продукта", AmountProduced = 10, RecipeRequirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Bloodbag", 3, 0, false), new RequirementConfig("Ooze", 1, 0, false) } } }; bushConfiguration.Configure(); } } public static class Dandelion { public const string PieceName = "$piece_dandelion_LG"; public static void Configure() { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown CustomLocalization localization = LootGoblinsHeimUtilsPlugin.Localization; string text = "Russian"; string text2 = "$piece_dandelion_LG"; localization.AddTranslation(ref text, ref text2, "Одуванчик"); CustomLocalization localization2 = LootGoblinsHeimUtilsPlugin.Localization; text = "English"; text2 = "$piece_dandelion_LG"; localization2.AddTranslation(ref text, ref text2, "Dandelion"); PlantConfiguration plantConfiguration = new PlantConfiguration(); plantConfiguration.Name = "$piece_dandelion_LG"; plantConfiguration.IconItemDropPrefabName = "Dandelion"; plantConfiguration.PickablePrefabName = "Pickable_Dandelion"; plantConfiguration.PieceRecipe = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Dandelion", 1, 0, false), new RequirementConfig("Resin", 1, 0, false) }; plantConfiguration.Configure(); } } public static class Mushroom { public const string PieceName = "$piece_mushroom_LG"; public static void Configure() { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown CustomLocalization localization = LootGoblinsHeimUtilsPlugin.Localization; string text = "Russian"; string text2 = "$piece_mushroom_LG"; localization.AddTranslation(ref text, ref text2, "Гриб"); CustomLocalization localization2 = LootGoblinsHeimUtilsPlugin.Localization; text = "English"; text2 = "$piece_mushroom_LG"; localization2.AddTranslation(ref text, ref text2, "Mushroom"); PlantConfiguration plantConfiguration = new PlantConfiguration(); plantConfiguration.Name = "$piece_mushroom_LG"; plantConfiguration.IconItemDropPrefabName = "Mushroom"; plantConfiguration.PickablePrefabName = "Pickable_Mushroom"; plantConfiguration.PieceRecipe = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Mushroom", 1, 0, false), new RequirementConfig("Resin", 2, 0, false) }; plantConfiguration.Configure(); } } public static class MushroomYellow { public const string PieceName = "$piece_mushroom_yellow_LG"; public static void Configure() { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown CustomLocalization localization = LootGoblinsHeimUtilsPlugin.Localization; string text = "Russian"; string text2 = "$piece_mushroom_yellow_LG"; localization.AddTranslation(ref text, ref text2, "Желтый гриб"); CustomLocalization localization2 = LootGoblinsHeimUtilsPlugin.Localization; text = "English"; text2 = "$piece_mushroom_yellow_LG"; localization2.AddTranslation(ref text, ref text2, "Yellow Mushroom"); PlantConfiguration plantConfiguration = new PlantConfiguration(); plantConfiguration.Name = "$piece_mushroom_yellow_LG"; plantConfiguration.IconItemDropPrefabName = "MushroomYellow"; plantConfiguration.PickablePrefabName = "Pickable_Mushroom_yellow"; plantConfiguration.PieceRecipe = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("MushroomYellow", 1, 0, false), new RequirementConfig("BoneFragments", 1, 0, false) }; plantConfiguration.Configure(); } } public static class RaspberryBush { public static void Setup() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Expected O, but got Unknown //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Expected O, but got Unknown BushConfiguration bushConfiguration = new BushConfiguration(); bushConfiguration.Name = "Raspberry"; bushConfiguration.LocalizedBushName = "Малиновый куст"; bushConfiguration.ReadyObjectName = "Berrys"; bushConfiguration.FertilizerIcon = BushUtils.RaspberryBushIcon; bushConfiguration.NewBushModel = BushUtils.RaspberryBushModel; bushConfiguration.BushRequirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Raspberry", 5, 0, false), new RequirementConfig("Resin", 3, 0, false) }; bushConfiguration.FertilizerConfigs = new BushConfiguration.FertilizerConfig[2] { new BushConfiguration.FertilizerConfig { LocalizedName = "Удобрение для малины", LocalizedDescription = "Добавьте в малиновый куст, чтобы запустить процесс роста", AmountProduced = 5, RecipeRequirements = (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("Resin", 3, 0, false) } }, new BushConfiguration.FertilizerConfig { LocalizedName = "Удобрение для малины насыщенное", LocalizedDescription = "Добавьте в малиновый куст, чтобы запустить процесс роста. Увеличивает количество получаемого продукта", AmountProduced = 10, RecipeRequirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Resin", 3, 0, false), new RequirementConfig("BoneFragments", 1, 0, false) } } }; bushConfiguration.Configure(); } } public static class Saplings { public static void ReplaceRecipes() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Expected O, but got Unknown //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Expected O, but got Unknown //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Expected O, but got Unknown //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Expected O, but got Unknown //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Expected O, but got Unknown //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Expected O, but got Unknown //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Expected O, but got Unknown //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Expected O, but got Unknown //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Expected O, but got Unknown //IL_0165: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Expected O, but got Unknown //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Expected O, but got Unknown //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Expected O, but got Unknown //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Expected O, but got Unknown //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Expected O, but got Unknown //IL_01d5: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Expected O, but got Unknown //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Expected O, but got Unknown //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Expected O, but got Unknown //IL_0225: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Expected O, but got Unknown //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_023b: Expected O, but got Unknown //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Expected O, but got Unknown //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_026b: Expected O, but got Unknown PlantRecipeSwapper.SwapPieceRecipe("sapling_carrot", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("CarrotSeeds", 1, 0, false), new RequirementConfig("BoneFragments", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("sapling_seedcarrot", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Carrot", 1, 0, false), new RequirementConfig("BoneFragments", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("sapling_turnip", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("TurnipSeeds", 1, 0, false), new RequirementConfig("BoneFragments", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("sapling_seedturnip", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Turnip", 1, 0, false), new RequirementConfig("BoneFragments", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("sapling_onion", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("OnionSeeds", 1, 0, false), new RequirementConfig("Entrails", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("sapling_seedonion", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Onion", 1, 0, false), new RequirementConfig("Entrails", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("sapling_barley", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Barley", 1, 0, false), new RequirementConfig("Ooze", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("sapling_flax", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Flax", 1, 0, false), new RequirementConfig("Ooze", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("Beech_Sapling", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("BeechSeeds", 1, 0, false), new RequirementConfig("LeatherScraps", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("Birch_Sapling", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("BirchSeeds", 1, 0, false), new RequirementConfig("LeatherScraps", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("Oak_Sapling", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Acorn", 1, 0, false), new RequirementConfig("LeatherScraps", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("FirTree_Sapling", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("FirCone", 1, 0, false), new RequirementConfig("LeatherScraps", 1, 0, false) }); PlantRecipeSwapper.SwapPieceRecipe("PineTree_Sapling", (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("PineCone", 1, 0, false), new RequirementConfig("LeatherScraps", 1, 0, false) }); Logger.LogInfo((object)"Saplings recipes replaced"); } } public static class ThistleBush { public static void Setup() { //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Expected O, but got Unknown //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Expected O, but got Unknown //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Expected O, but got Unknown BushConfiguration bushConfiguration = new BushConfiguration(); bushConfiguration.Name = "Thistle"; bushConfiguration.LocalizedBushName = "Чертополох"; bushConfiguration.ReadyObjectName = "bees"; bushConfiguration.FertilizerIcon = BushUtils.thistleIcon; bushConfiguration.NewBushModel = BushUtils.thistleModel; bushConfiguration.BushRequirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("Thistle", 5, 0, false), new RequirementConfig("BoneFragments", 3, 0, false) }; bushConfiguration.FertilizerConfigs = new BushConfiguration.FertilizerConfig[2] { new BushConfiguration.FertilizerConfig { LocalizedName = "Удобрение для чертополоха", LocalizedDescription = "Добавьте в чертополох, чтобы запустить процесс роста", AmountProduced = 5, RecipeRequirements = (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("BoneFragments", 2, 0, false) } }, new BushConfiguration.FertilizerConfig { LocalizedName = "Удобрение для чертополоха насыщенное", LocalizedDescription = "Добавьте в чертополох, чтобы запустить процесс роста. Увеличивает количество получаемого продукта", AmountProduced = 10, RecipeRequirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("BoneFragments", 2, 0, false), new RequirementConfig("Entrails", 1, 0, false) } } }; bushConfiguration.Configure(); } } } namespace LootGoblinsUtils.Submods.Farming.Pieces.Stations { public static class FarmersTable { public const string TableName = "$piece_farmersTable_LG"; public const string PieceCategory = "$piececategory_farming"; public static void Configure() { try { InnerSetup(); Logger.LogInfo((object)"$piece_farmersTable_LG constructing completed"); } catch (Exception ex) { Logger.LogError((object)"$piece_farmersTable_LG constructing failed"); Logger.LogError((object)ex); } } private static void InnerSetup() { //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Expected O, but got Unknown //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Expected O, but got Unknown //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Expected O, but got Unknown //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014e: Expected O, but got Unknown //IL_0177: Unknown result type (might be due to invalid IL or missing references) CustomLocalization localization = LootGoblinsHeimUtilsPlugin.Localization; string text = "Russian"; string text2 = "$piece_farmersTable_LG"; localization.AddTranslation(ref text, ref text2, "Столик фермера"); CustomLocalization localization2 = LootGoblinsHeimUtilsPlugin.Localization; text = "English"; text2 = "$piece_farmersTable_LG"; localization2.AddTranslation(ref text, ref text2, "Farmers Table"); CustomLocalization localization3 = LootGoblinsHeimUtilsPlugin.Localization; text = "Russian"; text2 = "$piececategory_farming"; localization3.AddTranslation(ref text, ref text2, "Фермерство"); CustomLocalization localization4 = LootGoblinsHeimUtilsPlugin.Localization; text = "English"; text2 = "$piececategory_farming"; localization4.AddTranslation(ref text, ref text2, "Farming"); GameObject prefab = PrefabManager.Instance.GetPrefab("cauldron_ext5_mortarandpestle"); GameObject gameObject = ((Component)ExposedGameObjectExtension.FindDeepChild(prefab, "new", (IterativeSearchType)1)).gameObject; Sprite icon = prefab.GetComponent<Piece>().m_icon; PieceManager.Instance.AddPieceCategory(PieceTables.Hammer, "$piececategory_farming"); PieceConfig val = new PieceConfig(); val.Name = Localization.instance.Localize("$piece_farmersTable_LG"); val.PieceTable = PieceTables.Hammer; val.Category = Localization.instance.Localize("$piececategory_farming"); val.Icon = icon; val.Requirements = (RequirementConfig[])(object)new RequirementConfig[2] { new RequirementConfig("FineWood", 15, 0, true), new RequirementConfig("Bronze", 2, 0, true) }; PieceConfig val2 = val; CustomPiece val3 = new CustomPiece("$piece_farmersTable_LG", CraftingStations.Workbench, val2); GameObject val4 = Object.Instantiate<GameObject>(gameObject, val3.PiecePrefab.transform); val4.transform.localScale = new Vector3(1.8f, 1.8f, 1.3f); WearNTear component = val3.PiecePrefab.GetComponent<WearNTear>(); component.m_broken = val4; component.m_new = val4; component.m_worn = val4; Object.Destroy((Object)(object)((Component)ExposedGameObjectExtension.FindDeepChild(val3.PiecePrefab, "New", (IterativeSearchType)1)).gameObject); Object.Destroy((Object)(object)((Component)ExposedGameObjectExtension.FindDeepChild(val3.PiecePrefab, "Worn", (IterativeSearchType)1)).gameObject); Object.Destroy((Object)(object)((Component)ExposedGameObjectExtension.FindDeepChild(val3.PiecePrefab, "Broken", (IterativeSearchType)1)).gameObject); CraftingStation component2 = val3.PiecePrefab.GetComponent<CraftingStation>(); component2.m_name = "$piece_farmersTable_LG"; component2.m_showBasicRecipies = false; PieceManager.Instance.AddPiece(val3); } } public static class FarmersTableExtensionT1 { public const string TableName = "$piece_farmersTable_ext1_LG"; public const string TableDescription = "$piece_farmersTable_ext1_description_LG"; public const string PieceCategory = "$piececategory_farming"; public static void Configure() { try { InnerSetup(); Logger.LogInfo((object)"$piece_farmersTable_ext1_LG constructing completed"); } catch (Exception ex) { Logger.LogError((object)"$piece_farmersTable_ext1_LG constructing failed"); Logger.LogError((object)ex); } } private static void InnerSetup() { //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Expected O, but got Unknown //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Expected O, but got Unknown //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Expected O, but got Unknown //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Expected O, but got Unknown CustomLocalization localization = LootGoblinsHeimUtilsPlugin.Localization; string text = "Russian"; string text2 = "$piece_farmersTable_ext1_LG"; localization.AddTranslation(ref text, ref text2, "Фермерская сушилка для трав"); CustomLocalization localization2 = LootGoblinsHeimUtilsPlugin.Localization; text = "English"; text2 = "$piece_farmersTable_ext1_LG"; localization2.AddTranslation(ref text, ref text2, "Farmer's Spice Rack"); CustomLocalization localization3 = LootGoblinsHeimUtilsPlugin.Localization; text = "Russian"; text2 = "$piece_farmersTable_ext1_description_LG"; localization3.AddTranslation(ref text, ref text2, "Улучшение столика фермера"); CustomLocalization localization4 = LootGoblinsHeimUtilsPlugin.Localization; text = "English"; text2 = "$piece_farmersTable_ext1_description_LG"; localization4.AddTranslation(ref text, ref text2, "Farmer's Table improvement"); PieceConfig val = new PieceConfig(); val.Name = Localization.instance.Localize("$piece_farmersTable_ext1_LG"); val.Description = Localization.instance.Localize("$piece_farmersTable_ext1_description_LG"); val.PieceTable = PieceTables.Hammer; val.Category = Localization.instance.Localize("$piececategory_farming"); val.Requirements = (RequirementConfig[])(object)new RequirementConfig[5] { new RequirementConfig("Dandelion", 10, 0, true), new RequirementConfig("Carrot", 5, 0, true), new RequirementConfig("Mushroom", 5, 0, true), new RequirementConfig("Thistle", 5, 0, true), new RequirementConfig("Turnip", 3, 0, true) }; PieceConfig val2 = val; CustomPiece val3 = new CustomPiece("$piece_farmersTable_ext1_LG", "cauldron_ext1_spice", val2); val3.PiecePrefab.GetComponent<StationExtension>().m_craftingStation = PieceManager.Instance.GetPiece("$piece_farmersTable_LG").PiecePrefab.GetComponent<CraftingStation>(); PieceManager.Instance.AddPiece(val3); } } } namespace LootGoblinsUtils.Submods.Farming.Pieces.Configurators { public class BushConfiguration : Configurable { public struct FertilizerConfig { public string LocalizedName; public string LocalizedDescription; public RequirementConfig[] RecipeRequirements; public int AmountProduced; } public string LocalizedBushName; public string ReadyObjectName; public float ColliderRadius; public Sprite FertilizerIcon; public RequirementConfig[] BushRequirements; public GameObject NewBushModel; public FertilizerConfig[] FertilizerConfigs; private string BushName => "piece_" + Name + "Bush_LG"; private string FertilizerTierName(int tier) { return $"{Name}FertilizerT{tier}_LG"; } protected override void Setup() { CustomPiece val = MakeNewPiece(); Transform targetParentTransform = BushUtils.CleanupModel(val); Logger.LogInfo((object)(BushName + " CleanupModel complete")); GameObject val2 = BushUtils.SetupNewModel(NewBushModel, targetParentTransform); Logger.LogInfo((object)(BushName + " SetupNewModel complete")); CapsuleCollider obj = val2.GetComponent<CapsuleCollider>() ?? val2.AddComponent<CapsuleCollider>(); obj.radius = ((ColliderRadius == 0f) ? 1.6f : ColliderRadius); ((Collider)obj).isTrigger = true; Transform obj2 = ExposedGameObjectExtension.FindDeepChild(val2, ReadyObjectName, (IterativeSearchType)1); GameObject val3 = ((obj2 != null) ? ((Component)obj2).gameObject : null); if ((Object)(object)val3 == (Object)null) { Logger.LogWarning((object)(BushName + ".readyObject == null")); } else { val3.SetActive(false); } BushUtils.ConfigureFermenter(val.PiecePrefab.GetComponent<Fermenter>(), val3); PieceManager.Instance.AddPiece(val); MakeFertilizers(); } private CustomPiece MakeNewPiece() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001c: 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_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Expected O, but got Unknown PieceConfig val = new PieceConfig { Name = LocalizedBushName, PieceTable = PieceTables.Cultivator, Category = PieceCategories.Misc, Icon = FertilizerIcon, Requirements = BushRequirements }; CustomPiece val2 = new CustomPiece(BushName, Fermenters.Fermenter, val); val2.Piece.m_craftingStation = null; val2.Piece.m_cultivatedGroundOnly = true; val2.Piece.m_groundOnly = true; val2.Piece.m_noClipping = false; Logger.LogInfo((object)(BushName + " newPiece setup complete")); return val2; } private void MakeFertilizers() { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Expected O, but got Unknown //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Expected O, but got Unknown for (int i = 0; i < FertilizerConfigs.Length; i++) { FertilizerConfig fertilizerConfig = FertilizerConfigs[i]; BushUtils.MakeFertilizer(fertilizerConfig.LocalizedName, FertilizerTierName(i + 1), fertilizerConfig.LocalizedDescription, fertilizerConfig.RecipeRequirements, i + 1); FermenterConversionConfig val = new FermenterConversionConfig { ToItem = Name, FromItem = FertilizerTierName(i + 1), Station = BushName, ProducedItems = fertilizerConfig.AmountProduced }; ItemManager.Instance.AddItemConversion(new CustomItemConversion((ConversionConfig)(object)val)); } } } public static class BushUtils { public struct VisualsGroup { public GameObject Prefab; public GameObject Model; public Sprite Icon; public VisualsGroup(string prefabName, string modelChildName) { //IL_007b: Unknown result type (might be due to invalid IL or missing references) Prefab = PrefabManager.Instance.GetPrefab(prefabName); if ((Object)(object)Prefab == (Object)null) { Logger.LogWarning((object)("VisualsGroup.prefab[" + prefabName + "] is null")); } Model = ((Component)ExposedGameObjectExtension.FindDeepChild(Prefab, modelChildName, (IterativeSearchType)1)).gameObject; if ((Object)(object)Model == (Object)null) { Logger.LogWarning((object)("VisualsGroup.Model[" + modelChildName + " is null")); } Icon = RenderManager.Instance.Render(Prefab, RenderManager.IsometricRotation); if ((Object)(object)Icon == (Object)null) { Logger.LogWarning((object)("VisualsGroup.Icon[" + prefabName + " is null")); } } } private static GameObject _raspberryBushPrefab; public static GameObject RaspberryBushModel; public static Sprite RaspberryBushIcon; private static GameObject _blueberryBushPrefab; public static GameObject BlueberryBushModel; public static Sprite BlueberryBushIcon; public static VisualsGroup CloudberryVisuals; private static GameObject _thistlePrefab; public static GameObject thistleModel; public static Sprite thistleIcon; public static Sprite MeadIcon; public static void CacheDependencies() { //IL_0038: 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_0103: Unknown result type (might be due to invalid IL or missing references) _raspberryBushPrefab = PrefabManager.Instance.GetPrefab("RaspberryBush"); RaspberryBushModel = ((Component)ExposedGameObjectExtension.FindDeepChild(_raspberryBushPrefab, "model", (IterativeSearchType)1)).gameObject; RaspberryBushIcon = RenderManager.Instance.Render(_raspberryBushPrefab, RenderManager.IsometricRotation); _blueberryBushPrefab = PrefabManager.Instance.GetPrefab("BlueberryBush"); BlueberryBushModel = ((Component)ExposedGameObjectExtension.FindDeepChild(_blueberryBushPrefab, "model", (IterativeSearchType)1)).gameObject; BlueberryBushIcon = RenderManager.Instance.Render(_blueberryBushPrefab, RenderManager.IsometricRotation); CloudberryVisuals = new VisualsGroup("CloudberryBush", "high"); ExposedGameObjectExtension.FindDeepChild(CloudberryVisuals.Prefab, "Berrys", (IterativeSearchType)1).parent = CloudberryVisuals.Model.transform; _thistlePrefab = PrefabManager.Instance.GetPrefab("Pickable_Thistle"); thistleModel = ((Component)ExposedGameObjectExtension.FindDeepChild(_thistlePrefab, "visual", (IterativeSearchType)1)).gameObject; thistleIcon = RenderManager.Instance.Render(_thistlePrefab, RenderManager.IsometricRotation); MeadIcon = PrefabManager.Instance.GetPrefab("MeadBaseTasty").GetComponent<ItemDrop>().m_itemData.GetIcon(); } public static GameObject SetupNewModel(GameObject targetModel, Transform targetParentTransform) { GameObject obj = Object.Instantiate<GameObject>(targetModel, targetParentTransform); obj.layer = LayerMask.NameToLayer("Default_small"); return obj; } public static Transform CleanupModel(CustomPiece newPiece) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) Transform val = ExposedGameObjectExtension.FindDeepChild(newPiece.PiecePrefab, "barrel", (IterativeSearchType)1); ((Component)val).gameObject.SetActive(false); Object.Destroy((Object)(object)((Component)((Component)ExposedGameObjectExtension.FindDeepChild(newPiece.PiecePrefab, "_top", (IterativeSearchType)1)).transform.GetChild(0)).gameObject); foreach (Transform item in ExposedGameObjectExtension.FindDeepChild(newPiece.PiecePrefab, "_fermenting", (IterativeSearchType)1)) { Object.Destroy((Object)(object)((Component)item).gameObject); } foreach (Transform item2 in ExposedGameObjectExtension.FindDeepChild(newPiece.PiecePrefab, "_ready", (IterativeSearchType)1)) { Object.Destroy((Object)(object)((Component)item2).gameObject); } return val.parent; } public static void ConfigureFermenter(Fermenter fermenterComponent, [CanBeNull] GameObject readyObject) { fermenterComponent.m_conversion.Clear(); fermenterComponent.m_fermentationDuration = PluginConfiguration.FertilizingDuration.Value; fermenterComponent.m_addedEffects = fermenterComponent.m_spawnEffects; fermenterComponent.m_tapEffects.m_effectPrefabs = Array.Empty<EffectData>(); fermenterComponent.m_tapDelay = 0.1f; fermenterComponent.m_readyObject = readyObject; } public static void MakeFertilizer(string localizedName, string itemName, string description, RequirementConfig[] requirements, int minStationLevel) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown ItemConfig val = new ItemConfig(); val.Name = localizedName; val.Description = description; val.CraftingStation = "$piece_farmersTable_LG"; val.MinStationLevel = minStationLevel; val.Icons = (Sprite[])(object)new Sprite[1] { MeadIcon }; ItemConfig val2 = val; val2.Requirements = requirements; CustomItem val3 = new CustomItem(itemName, "Stone", val2); Object.Destroy((Object)(object)((Component)val3.ItemPrefab.transform.GetChild(0)).gameObject); Object.Instantiate<GameObject>(((Component)PrefabManager.Instance.GetPrefab("MeadBaseTasty").transform.GetChild(0)).gameObject, val3.ItemPrefab.transform); ItemManager.Instance.AddItem(val3); } } public abstract class Configurable { public string Name; public void Configure() { try { Setup(); Logger.LogInfo((object)(Name + " constructing completed")); } catch (Exception ex) { Logger.LogError((object)(Name + " constructing failed")); Logger.LogError((object)ex); } } protected abstract void Setup(); } public class PlantConfiguration : Configurable { public string IconItemDropPrefabName; public RequirementConfig[] PieceRecipe; public string PickablePrefabName; protected override void Setup() { //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_003b: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Expected O, but got Unknown //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) Sprite icon = PrefabManager.Instance.GetPrefab(IconItemDropPrefabName).GetComponent<ItemDrop>().m_itemData.GetIcon(); PieceConfig val = new PieceConfig { Name = Localization.instance.Localize(Name), PieceTable = PieceTables.Cultivator, Category = PieceCategories.Misc, Icon = icon, Requirements = PieceRecipe }; CustomPiece val2 = new CustomPiece(Name, "sapling_onion", val); GameObject val3 = PrefabManager.Instance.CreateClonedPrefab(PickablePrefabName + "_LG", PickablePrefabName); Transform child = val3.transform.GetChild(0); val3.GetComponent<Pickable>().m_amount = 5; Plant component = val2.PiecePrefab.GetComponent<Plant>(); component.m_minScale = 1.2f; component.m_maxScale = 1.7f; component.m_growTime = PluginConfiguration.PlantGrowMinDuration.Value; component.m_growTimeMax = PluginConfiguration.PlantGrowMaxDuration.Value; component.m_name = Localization.instance.Localize(Name); component.m_grownPrefabs = (GameObject[])(object)new GameObject[1] { val3 }; foreach (Transform item in val2.PiecePrefab.transform) { Object.Destroy((Object)(object)((Component)item).gameObject); } GameObject gameObject = ((Component)Object.Instantiate<Transform>(child, val2.PiecePrefab.transform)).gameObject; ((Object)gameObject).name = "healthy"; gameObject.transform.localScale = Vector3.one * 0.5f; GameObject gameObject2 = ((Component)Object.Instantiate<Transform>(child, val2.PiecePrefab.transform)).gameObject; ((Object)gameObject2).name = "unhealthy"; gameObject2.transform.localScale = Vector3.one * 0.5f; GameObject gameObject3 = ((Component)Object.Instantiate<Transform>(child, val2.PiecePrefab.transform)).gameObject; ((Object)gameObject3).name = "healthyGrown"; GameObject gameObject4 = ((Component)Object.Instantiate<Transform>(child, val2.PiecePrefab.transform)).gameObject; ((Object)gameObject4).name = "unhealthyGrown"; component.m_healthy = gameObject; component.m_unhealthy = gameObject2; component.m_healthyGrown = gameObject3; component.m_unhealthyGrown = gameObject4; PieceManager.Instance.AddPiece(val2); } } public static class PlantRecipeSwapper { public static void SwapPieceRecipe(string prefabName, RequirementConfig[] requirementConfigs) { Piece component = PrefabManager.Instance.GetPrefab(prefabName).GetComponent<Piece>(); Requirement[] array = requirementConfigs.Select((RequirementConfig req) => req.GetRequirement()).ToArray(); Requirement[] array2 = array; for (int i = 0; i < array2.Length; i++) { PrefabExtension.FixReferences((object)array2[i]); } component.m_resources = array.ToArray(); } } } namespace LootGoblinsUtils.Conquest { public static class ConquestFeature { public static void Load() { ItemsLoader.Init(); PiecesLoader.Init(); LocationLoader.Init(); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new CoresList()); } } } namespace LootGoblinsUtils.Conquest.TerminalCommands { public class CoresList : ConsoleCommand { public override string Name => "core_list"; public override string Help => "List cores nearby"; public override void Run(string[] args) { try { foreach (KeyValuePair<ConquestCore, float> item in from kvp in Object.FindObjectsOfType<ConquestCore>().ToDictionary((ConquestCore x) => x, delegate(ConquestCore x) { //IL_0006: 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) //IL_001f: Unknown result type (might be due to invalid IL or missing references) Vector3 val = ((Component)x).transform.position - ((Component)Player.m_localPlayer).transform.position; return ((Vector3)(ref val)).magnitude; }) orderby kvp.Value descending select kvp) { Console.instance.Print($"Core[{((Object)item.Key).GetInstanceID()}]: {item.Value}"); } } catch (Exception ex) { Console.instance.Print(ex.ToString()); throw; } } } } namespace LootGoblinsUtils.Conquest.Pieces { public static class PiecesLoader { public static void Init() { PrefabManager.OnVanillaPrefabsAvailable += LoadAll; } private static void LoadAll() { CorePiece.Load(); GhostCoreBoar.Load(); GhostCoreNeck.Load(); DefenderTotemPiece.Load(); PrefabManager.OnVanillaPrefabsAvailable -= LoadAll; } } } namespace LootGoblinsUtils.Conquest.Pieces.Ghost { public class ConquestGhost : SlowMono { public enum States { CoreExists, CoreDestroyed, DefenderExists, DefenderProtected } public Location location; private States _state; private States _prevState; private DefendersSpawner _spawnerRaid; private DefendersSpawner _spawnerT1; private bool _coreExists; private bool _defenderExists; private Piece _defender; private ZNetView _nview; private float _awakeTime; private float _defenderSetupTime; private static float DefenderRaidTime => PluginConfiguration.Conquest.DefenderRaidTime.Value; private static float NoBuildRadius => PluginConfiguration.Conquest.PlayerAlertRadius.Value; private void Awake() { DefendersSpawner[] components = ((Component)this).GetComponents<DefendersSpawner>(); _spawnerRaid = components.FirstOrDefault((DefendersSpawner x) => x.SpawnerType == DefendersSpawner.SpawnerTypes.Raid); SetRaidSpawnerParams(componentEnabled: false, null); _spawnerT1 = components.FirstOrDefault((DefendersSpawner x) => x.SpawnerType == DefendersSpawner.SpawnerTypes.Common); SetCommonSpawnerParams(componentEnabled: false, null); UpdateStep = 3f; _awakeTime = Time.time; location = ((IEnumerable<Location>)Location.m_allLocations).FirstOrDefault((Func<Location, bool>)((Location x) => Vector3.Distance(((Component)this).transform.position, ((Component)x).transform.position) < 20f)); if ((Object)(object)location != (Object)null) { location.m_noBuild = true; location.m_noBuildRadiusOverride = NoBuildRadius; } } private void Start() { _nview = ((Component)this).GetComponent<ZNetView>(); if ((Object)(object)_nview != (Object)null && _nview.IsValid()) { if (_nview.GetZDO().GetBool("GhostDisabled", false)) { ((Component)this).gameObject.SetActive(false); ((Behaviour)this).enabled = false; } _state = (States)_nview.GetZDO().GetInt("ghost_state", 0); Logger.LogInfo((object)$"Ghost[{((Object)this).GetInstanceID()}]: Loaded state {_state}"); } } public override void SlowUpdate() { if (!(Time.time - _awakeTime < 5f)) { location = ((IEnumerable<Location>)Location.m_allLocations).FirstOrDefault((Func<Location, bool>)((Location x) => Vector3.Distance(((Component)this).transform.position, ((Component)x).transform.position) < 20f)); UpdateState(); ProcessStates(); } } private void UpdateState() { SearchCore(); SearchDefenderTotem(); switch (_state) { case States.CoreExists: if (!_coreExists) { SetState(States.CoreDestroyed); } break; case States.CoreDestroyed: if (_defenderExists) { MessageHud.instance.ShowMessage((MessageType)2, "Защищайте тотем!", 0, (Sprite)null); _defenderSetupTime = Time.time; SetState(States.DefenderExists); } break; case States.DefenderExists: if (!_defenderExists) { MessageHud.instance.ShowMessage((MessageType)2, "Тотем уничтожен! Защитник восстановлен!", 0, (Sprite)null); RestoreCore(); } else if (Time.time - _defenderSetupTime >= DefenderRaidTime) { MessageHud.instance.ShowMessage((MessageType)2, "Область захвачена!", 0, (Sprite)null); SetState(States.DefenderProtected); } break; case States.DefenderProtected: if (!_defenderExists) { MessageHud.instance.ShowMessage((MessageType)2, "Тотем уничтожен! Защитник восстановлен!", 0, (Sprite)null); RestoreCore(); } break; } } private void RestoreCore() { //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) location.m_noBuild = false; location.m_noBuildRadiusOverride = 0f; ((Component)this).gameObject.SetActive(false); ((Behaviour)this).enabled = false; _nview.GetZDO().Set("GhostDisabled", true); ZNetScene.instance.Destroy(((Component)((Component)location).transform.parent).gameObject); ZoneLocation randomT1CoreLocation = LocationLoader.GetRandomT1CoreLocation(); ZoneSystem.instance.SpawnLocation(randomT1CoreLocation, 0, ((Component)this).transform.position, Quaternion.identity, (SpawnMode)0, new List<GameObject>()); } private void ProcessStates() { switch (_state) { case States.CoreExists: SetCommonSpawnerParams(componentEnabled: true, null); SetRaidSpawnerParams(componentEnabled: false, null); location.m_noBuild = true; location.m_noBuildRadiusOverride = NoBuildRadius; break; case States.CoreDestroyed: SetCommonSpawnerParams(componentEnabled: true, null); SetRaidSpawnerParams(componentEnabled: false, null); location.m_noBuild = false; location.m_noBuildRadiusOverride = 0f; break; case States.DefenderExists: SetCommonSpawnerParams(componentEnabled: true, (StaticTarget)(object)_defender); SetRaidSpawnerParams(componentEnabled: true, (StaticTarget)(object)_defender); location.m_noBuild = false; location.m_noBuildRadiusOverride = 0f; if (Time.time - _defenderSetupTime < DefenderRaidTime) { MessageHud.instance.ShowMessage((MessageType)1, $"Осталось: {Math.Round(DefenderRaidTime - (Time.time - _defenderSetupTime), 2)}", 0, (Sprite)null); } break; case States.DefenderProtected: SetCommonSpawnerParams(componentEnabled: false, null); SetRaidSpawnerParams(componentEnabled: false, null); location.m_noBuild = false; location.m_noBuildRadiusOverride = 0f; break; } } private void SearchCore() { _coreExists = ConquestCore.ActiveCores.Any((ConquestCore x) => Vector3.Distance(((Component)this).transform.position, ((Component)x).transform.position) < 20f); } private void SearchDefenderTotem() { DefenderTotemComponent? defenderTotemComponent = DefenderTotemComponent.ActiveTotems.FirstOrDefault((DefenderTotemComponent x) => Vector3.Distance(((Component)this).transform.position, ((Component)x).transform.position) < 20f); _defender = ((defenderTotemComponent != null) ? ((Component)defenderTotemComponent).GetComponent<Piece>() : null); _defenderExists = (Object)(object)_defender != (Object)null; } private void SetState(States state) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) if (state != _state) { Logger.LogInfo((object)$"Ghost[{Vector3.Distance(((Component)this).transform.position, ((Component)Player.m_localPlayer).transform.position)}]: {_state} => {state}"); if (_nview.IsValid() && _nview.IsOwner()) { _nview.GetZDO().Set("ghost_state", (int)state); } } _prevState = _state; _state = state; } private void SetCommonSpawnerParams(bool componentEnabled, StaticTarget forceTargetStatic) { if ((Object)(object)_spawnerT1 != (Object)null) { ((Behaviour)_spawnerT1).enabled = componentEnabled; _spawnerT1.forcedStaticTarget = forceTargetStatic; } } private void SetRaidSpawnerParams(bool componentEnabled, StaticTarget forceTargetStatic) { if ((Object)(object)_spawnerRaid != (Object)null) { ((Behaviour)_spawnerRaid).enabled = componentEnabled; _spawnerRaid.forcedStaticTarget = forceTargetStatic; } } } public static class GhostCoreBoar { public static void Load() { Loader.RunSafe(InnerSetup, "GhostCoreBoar", "Load"); } private static void InnerSetup() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown PieceConfig val = new PieceConfig(); val.Name = "GhostCoreBoar"; val.PieceTable = "_BlueprintPieceTable"; val.Category = "utils"; val.CraftingStation = CraftingStations.None; val.Requirements = (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("LGH_GreenCore", 1, 0, true) }; PieceConfig val2 = val; CustomPiece val3 = new CustomPiece("GhostCoreBoar", "stone_wall_1x1", val2); val3.SetWntSupport(support: false).SetPieceHealth(20000f).RemoveColliders() .RemoveRenderers(); val3.PiecePrefab.AddComponent<ConquestGhost>(); ((Behaviour)val3.PiecePrefab.AddComponent<SpawnerBoarsRaid>()).enabled = false; ((Behaviour)val3.PiecePrefab.AddComponent<SpawnerBoarsT1>()).enabled = false; PieceManager.Instance.AddPiece(val3); } } public static class GhostCoreNeck { public static void Load() { Loader.RunSafe(InnerSetup, "GhostCoreNeck", "Load"); } private static void InnerSetup() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Expected O, but got Unknown //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Expected O, but got Unknown PieceConfig val = new PieceConfig(); val.Name = "GhostCoreNeck"; val.PieceTable = "_BlueprintPieceTable"; val.Category = "utils"; val.CraftingStation = CraftingStations.None; val.Requirements = (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("LGH_GreenCore", 1, 0, true) }; PieceConfig val2 = val; CustomPiece val3 = new CustomPiece("GhostCoreNeck", "stone_wall_1x1", val2); val3.SetWntSupport(support: false).SetPieceHealth(20000f).RemoveColliders() .RemoveRenderers(); val3.PiecePrefab.AddComponent<ConquestGhost>(); ((Behaviour)val3.PiecePrefab.AddComponent<SpawnerNeckRaid>()).enabled = false; ((Behaviour)val3.PiecePrefab.AddComponent<SpawnerNeckT1>()).enabled = false; PieceManager.Instance.AddPiece(val3); } } } namespace LootGoblinsUtils.Conquest.Pieces.DefenderTotem { public class DefenderTotemComponent : SlowMono { public static readonly List<DefenderTotemComponent> ActiveTotems = new List<DefenderTotemComponent>(); private ZNetView _netView; private bool isPlaced; private void Awake() { UpdateStep = 1f; } private void Start() { _netView = ((Component)this).GetComponent<ZNetView>(); if ((Object)(object)_netView != (Object)null && _netView.IsValid()) { isPlaced = _netView.GetZDO().GetBool("isPlaced", false); } } private void OnDisable() { ActiveTotems.Remove(this); } private void OnDestroy() { ActiveTotems.Remove(this); } public override void SlowUpdate() { if (!((Component)this).gameObject.PiecePlaced() || ActiveTotems.Contains(this)) { return; } ActiveTotems.Add(this); if (isPlaced) { return; } isPlaced = true; if ((Object)(object)_netView != (Object)null && _netView.IsValid()) { _netView.GetZDO().Set("isPlaced", true); } foreach (WearNTear item in WearNTear.s_allInstances.Where((WearNTear wnt) => (Object)(object)((Component)wnt).gameObject != (Object)(object)((Component)this).gameObject && (Object)(object)((Component)wnt).GetComponent<ConquestGhost>() == (Object)null && Vector3.Distance(((Component)wnt).transform.position, ((Component)this).transform.position) < 20f)) { item.m_piece.m_resources = Array.Empty<Requirement>(); item.Destroy(); } } } public static class DefenderTotemPiece { public static void Load() { Loader.RunSafe(InnerLoad, "DefenderTotemPiece", "Load"); } private static void InnerLoad() { //IL_003c: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Expected O, but got Unknown //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Expected O, but got Unknown //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Expected O, but got Unknown //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Expected O, but got Unknown //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Expected O, but got Unknown //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Expected O, but got Unknown //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) GameObject obj = PrefabManager.Instance.CreateClonedPrefab("guard_stone_tmp", "guard_stone"); GameObject gameObject = ((Component)obj.transform.Find("new").GetChild(0)).gameObject; Sprite icon = obj.GetComponent<Piece>().m_icon; gameObject.AddLightningEffect(Vector3.one * 2f); PieceConfig val = new PieceConfig(); val.Name = "Защитный Тотем"; val.PieceTable = PieceTables.Hammer; val.Category = PieceCategories.Misc; val.CraftingStation = CraftingStations.Workbench; val.Icon = icon; val.Requirements = (RequirementConfig[])(object)new RequirementConfig[5] { new RequirementConfig("Wood", 20, 0, true), new RequirementConfig("TrophyBoar", 5, 0, false), new RequirementConfig("TrophyNeck", 5, 0, false), new RequirementConfig("TrophyDeer", 5, 0, false), new RequirementConfig("Resin", 15, 0, true) }; PieceConfig val2 = val; CustomPiece val3 = new CustomPiece("DefenderTotem", "stone_pillar", val2); val3.ReplaceWntModel(gameObject, Vector3.one * 2f, new Vector3(0f, -1f, 0f)).SetPieceHealth(350f); val3.PiecePrefab.AddComponent<DefenderTotemComponent>(); PieceManager.Instance.AddPiece(val3); } } } namespace LootGoblinsUtils.Conquest.Pieces.Core { public class ConquestCore : SlowMono { public static readonly List<ConquestCore> ActiveCores = new List<ConquestCore>(); private void Awake() { UpdateStep = 1f; if (((Component)this).gameObject.PiecePlaced() && !ActiveCores.Contains(this)) { ActiveCores.Add(this); } } private void Start() { if (((Component)this).gameObject.PiecePlaced() && !ActiveCores.Contains(this)) { ActiveCores.Add(this); } } private void OnDisable() { ActiveCores.Remove(this); } private void OnDestroy() { ActiveCores.Remove(this); } public override void SlowUpdate() { if (((Component)this).gameObject.PiecePlaced() && !ActiveCores.Contains(this)) { ActiveCores.Add(this); } } } public static class CorePiece { public static void Load() { Loader.RunSafe(InnerSetup, "CorePiece", "Load"); } private static void InnerSetup() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Expected O, but got Unknown //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Expected O, but got Unknown //IL_00a9: Unknown result type (might be due to invalid IL or missing references) GameObject prefab = PrefabManager.Instance.GetPrefab("SurtlingCore"); GameObject gameObject = ((Component)prefab.transform.GetChild(0)).gameObject; PieceConfig val = new PieceConfig(); val.Name = "ConquestCore"; val.PieceTable = "_BlueprintPieceTable"; val.Category = "utils"; val.CraftingStation = null; val.Icon = RenderManager.Instance.Render(prefab); val.Requirements = (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig("LGH_GreenCore", 1, 0, true) }; PieceConfig val2 = val; CustomPiece val3 = new CustomPiece("ConquestCore", "stone_wall_1x1", val2); val3.ReplaceWntModel(gameObject, new Vector3(5f, 5f, 5f)).SetWntSupport(support: false).SetPieceHealth(200f); val3.PiecePrefab.AddComponent<ConquestCore>(); PieceManager.Instance.AddPiece(val3); } } } namespace LootGoblinsUtils.Conquest.Locations { public static class LocationLoader { public static string[] PossibleT1Cores = new string[2] { "T1_Core_Boars", "T1_Core_Necks" }; public static ZoneLocation GetRandomT1CoreLocation() { CustomLocation customLocation = ZoneManager.Instance.GetCustomLocation(PossibleT1Cores[Random.Range(0, PossibleT1Cores.Length)]); if (customLocation == null) { return null; } return customLocation.ZoneLocation; } public static void Init() { LocationPatches.Patch(); ZoneManager.OnVanillaLocationsAvailable += Load; } private static void Load() { T1CoreBoars.Load(); T1CoreNecks.Load(); ZoneManager.OnVanillaLocationsAvailable -= Load; } } public static class LocationPatches { public static void Patch() { ZoneManager.OnVanillaLocationsAvailable += VanillaLocations; } private static void VanillaLocations() { PatchEikthyrnir(); ZoneManager.OnVanillaLocationsAvailable -= VanillaLocations; } private static void PatchEikthyrnir() { ZoneManager.Instance.GetZoneLocation("Eikthyrnir").m_minDistance = 900f; } } } namespace LootGoblinsUtils.Conquest.Locations.T1CoresLoaders { public static class T1CoreBoars { public static void Load() { //IL_0044: 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_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0074: 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_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Expected O, but got Unknown //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Expected O, but got Unknown GameObject val = ZoneManager.Instance.CreateLocationContainer("T1_Core_Boars"); Blueprints.RavenBP.Instantiate(val.transform); Object.Instantiate<GameObject>(PieceManager.Instance.GetPiece("GhostCoreBoar").PiecePrefab, val.transform).transform.localPosition = Vector3.zero; LocationConfig val2 = new LocationConfig { Biome = (Biome)1, Quantity = 100, Priotized = true, ExteriorRadius = 20f, MinDistance = 200f, MinDistanceFromSimilar = 100f, Group = "T1_Cores", ClearArea = true }; CustomLocation val3 = new CustomLocation(val, false, val2); ZoneManager.Instance.AddCustomLocation(val3); val3.Location.m_noBuild = false; val3.Location.m_noBuildRadiusOverride = 0f; Logger.LogInfo((object)"Location T1_Core_Boars Loaded"); } } public static class T1CoreNecks { public static void Load() { //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007a: 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_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Expected O, but got Unknown GameObject val = ZoneManager.Instance.CreateLocationContainer("T1_Core_Necks"); Blueprints.RavenBP.Instantiate(val.transform); GameObject obj = Object.Instantiate<GameObject>(PieceManager.Instance.GetPiece("GhostCoreNeck").PiecePrefab, val.transform); obj.transform.localPosition = Vector3.zero; ((Behaviour)obj.AddComponent<SpawnerNeckT1>()).enabled = false; ((Behaviour)obj.AddComponent<SpawnerNeckRaid>()).enabled = false; LocationConfig val2 = new LocationConfig { Biome = (Biome)1, Quantity = 100, Priotized = true, ExteriorRadius = 20f, MinDistance = 200f, MinDistanceFromSimilar = 100f, Group = "T1_Cores", ClearArea = true }; CustomLocation val3 = new CustomLocation(val, false, val2); ZoneManager.Instance.AddCustomLocation(val3); val3.Location.m_noBuild = false; val3.Location.m_noBuildRadiusOverride = 0f; Logger.LogInfo((object)"Location T1_Core_Necks Loaded"); } } } namespace LootGoblinsUtils.Conquest.Items { public static class GreenCore { public static void Load() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) GameObject val = PrefabManager.Instance.CreateClonedPrefab("LGH_GreenCore2", "BlackCore"); val.SetRendererColor(Color.green); Sprite val2 = RenderManager.Instance.Render(new RenderRequest(val) { Height = 64, Width = 64 }); ItemConfig val3 = new ItemConfig(); val3.Name = "Зелёное ядро защитника"; val3.Description = "Источник энергии ядер защиты мира Вальхейм. Используйте, чтобы сразиться с хранителем биома"; val3.Icons = (Sprite[])(object)new Sprite[1] { val2 }; val3.CraftingStation = CraftingStations.None; ItemConfig val4 = val3; CustomItem val5 = new CustomItem("LGH_GreenCore", "BlackCore", val4); val5.ItemPrefab.SetRendererColor(Color.green); Transform child = val5.ItemPrefab.transform.GetChild(0); child.localScale *= 2f; val5.ItemDrop.m_itemData.m_shared.m_weight = 25f; ItemManager.Instance.AddItem(val5); } } public static class ItemsLoader { public static void Init() { PrefabManager.OnVanillaPrefabsAvailable += Load; } private static void Load() { GreenCore.Load(); PrefabManager.OnVanillaPrefabsAvailable -= Load; } } } namespace LootGoblinsUtils.Conquest.Creatures { public static class CreatureDB { public static void Init() { CreatureManager.OnVanillaCreaturesAvailable += Load; } private static void Load() { StormBoar.Load(); StormHog.Load(); NeckShaman.Load(); NeckDragon.Load(); CreatureManager.OnVanillaCreaturesAvailable -= Load; } } public static class ExplorerHelpers { public static void AttackSharedData() { JsonUtility.ToJson((object)GameObject.Find("LG_StormBoar(Clone)").GetComponent<Humanoid>().m_defaultItems[0].GetComponent<ItemDrop>().m_itemData.m_shared); } } public static class FinePrefabs { public static GameObject FireExplosionProjectile => PrefabManager.Instance.GetPrefab("staff_fireball_projectile"); public static GameObject LightningUnitEffectCloned => ((Component)PrefabManager.Instance.CreateClonedPrefab("LG_fx_lightning", "fx_Lightning").transform.Find("Sparcs")).gameObject; public static AttackInfo EikthyrCharge => new AttackInfo("Eikthyr_charge"); public static AttackInfo ShamanFireball => new AttackInfo("GoblinShaman_attack_fireball"); public static AttackInfo GdkingShoot => new AttackInfo("gd_king_shoot"); } public class NeckDragon { public static void Load() { Loader.RunSafe(InnerLoad, "DragonNeck", "Load"); } private static void InnerLoad() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) CreatureConfig val = new CreatureConfig(); CustomCreature val2 = new CustomCreature("LG_DragonNeck", "Neck", val); GameObject prefab = val2.Prefab; Transform transform = prefab.transform; transform.localScale *= 3f; Humanoid component = prefab.GetComponent<Humanoid>(); ((Character)component).m_name = "Никс-дракон"; ((Character)component).m_health = 250f; float num = 0.7f; ((Character)component).m_speed = ((Character)component).m_speed * num; ((Character)component).m_turnSpeed = ((Character)component).m_turnSpeed * num; ((Character)component).m_runSpeed = ((Character)component).m_runSpeed * num; ((Character)component).m_runTurnSpeed = ((Character)component).m_runTurnSpeed * num; AttackInfo attackInfo = AttackInfo.FromCharacterAttack(val2.Prefab, 0, "neck_attack_2"); attackInfo.OverrideBy(FinePrefabs.ShamanFireball); attackInfo.GetSharedData().m_aiAttackInterval = 12f; attackInfo.GetSharedData().m_attackForce = 300f; attackInfo.GetSharedData().m_damages.m_damage = 30f; attackInfo.GetSharedData().m_damages.m_fire = 30f; attackInfo.AddToCharactersAttacks(val2.Prefab); CreatureManager.Instance.AddCreature(val2); } } public class NeckShaman { public static void Load() { Loader.RunSafe(InnerLoad, "ShamanNeck", "Load"); } private static void InnerLoad() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) CreatureConfig val = new CreatureConfig(); CustomCreature val2 = new CustomCreature("LG_ShamanNeck", "Neck", val); GameObject prefab = val2.Prefab; Transform transform = prefab.transform; transform.localScale *= 2f; Humanoid component = prefab.GetComponent<Humanoid>(); ((Character)component).m_name = "Никс-шаман"; ((Character)component).m_health = 90f; float num = 0.8f; ((Character)component).m_speed = ((Character)component).m_speed * num; ((Character)component).m_turnSpeed = ((Character)component).m_turnSpeed * num; ((Character)component).m_runSpeed = ((Character)component).m_runSpeed * num; ((Character)component).m_runTurnSpeed = ((Character)component).m_runTurnSpeed * num; AttackInfo attackInfo = AttackInfo.FromCharacterAttack(val2.Prefab, 0, "neck_attack_2"); attackInfo.OverrideBy(FinePrefabs.ShamanFireball); attackInfo.GetSharedData().m_aiAttackInterval = 8f; attackInfo.GetSharedData().m_attackForce = 100f; attackInfo.GetSharedData().m_damages.m_damage = 10f; attackInfo.GetSharedData().m_damages.m_fire = 20f; attackInfo.AddToCharactersAttacks(val2.Prefab); CreatureManager.Instance.AddCreature(val2); } } public static class StormBoar { public static void Load() { Loader.RunSafe(InnerLoad, "StormBoar", "Load"); } private static void InnerLoad() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) CreatureConfig val = new CreatureConfig(); CustomCreature val2 = new CustomCreature("LG_StormBoar", "Boar", val); GameObject prefab = val2.Prefab; Transform transform = prefab.transform; transform.localScale *= 2f; val2.Prefab.AddLightningEffect(Vector3.one); Humanoid component = prefab.GetComponent<Humanoid>(); ((Character)component).m_name = "Штормовой Кабан"; ((Character)component).m_health = 120f; float num = 1.3f; ((Character)component).m_speed = ((Character)component).m_speed * num; ((Character)component).m_turnSpeed = ((Character)component).m_turnSpeed * num; ((Character)component).m_runSpeed = ((Character)component).m_runSpeed * num; ((Character)component).m_runTurnSpeed = ((Character)component).m_runTurnSpeed * num; AttackInfo attackInfo = AttackInfo.FromCharacterAttack(val2.Prefab, 0, "boar_attack_2"); attackInfo.OverrideBy(FinePrefabs.EikthyrCharge); attackInfo.GetSharedData().m_aiAttackInterval = 5f; attackInfo.GetSharedData().m_attackForce = 100f; attackInfo.GetSharedData().m_damages.m_lightning = 20f; attackInfo.GetSharedData().m_damages.m_blunt = 10f; attackInfo.AddToCharactersAttacks(val2.Prefab); CreatureManager.Instance.AddCreature(val2); } } public static class StormHog { public static void Load() { Loader.RunSafe(InnerLoad, "StormHog", "Load"); } private static void InnerLoad() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Expected O, but got Unknown //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) CreatureConfig val = new CreatureConfig(); CustomCreature val2 = new CustomCreature("LG_StormHog", "Boar", val); GameObject prefab = val2.Prefab; Transform transform = prefab.transform; transform.localScale *= 3f; val2.Prefab.AddLightningEffect(Vector3.one * 3f); Humanoid component = prefab.GetComponent<Humanoid>(); ((Character)component).m_name = "Штормовой Боров"; ((Character)component).m_health = 220f; float num = 0.9f; ((Character)component).m_speed = ((Character)component).m_speed * num; ((Character)component).m_turnSpeed = ((Character)component).m_turnSpeed * num; ((Character)component).m_runSpeed = ((Character)component).m_runSpeed * num; ((Character)component).m_runTurnSpeed = ((Character)component).m_runTurnSpeed * num; AttackInfo attackInfo = AttackInfo.FromCharacterAttack(val2.Prefab