Decompiled source of CretaceousCreatures v1.0.3
CretaceousCreatures.dll
Decompiled 3 weeks ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Reflection.Emit; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using CreatureManager; using HarmonyLib; using ItemManager; using JetBrains.Annotations; using Microsoft.CodeAnalysis; using PieceManager; using ServerSync; using SoftReferenceableAssets; using StatusEffectManager; using TMPro; using UnityEngine; using UnityEngine.UI; [assembly: ComVisible(false)] [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Guid("E0E2F92E-557C-4A05-9D89-AA92A0BD75C4")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyFileVersion("1.0.3")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("coemt")] [assembly: AssemblyProduct("CretaceousCreatures")] [assembly: AssemblyCopyright("Copyright © 2022")] [assembly: AssemblyTrademark("")] [assembly: AssemblyTitle("CretaceousCreatures")] [assembly: AssemblyDescription("")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.3.0")] [module: <1cae11c9-874b-4fe7-8d6b-6d432ddf26d8>RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<97879e7a-8b49-4e79-9553-5a4d320bb7d4>Embedded] internal sealed class <97879e7a-8b49-4e79-9553-5a4d320bb7d4>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [<97879e7a-8b49-4e79-9553-5a4d320bb7d4>Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class <4f4dea1a-1011-467e-95fd-88719f1ff74d>NullableAttribute : Attribute { public readonly byte[] NullableFlags; public <4f4dea1a-1011-467e-95fd-88719f1ff74d>NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public <4f4dea1a-1011-467e-95fd-88719f1ff74d>NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [<97879e7a-8b49-4e79-9553-5a4d320bb7d4>Embedded] [CompilerGenerated] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class <5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContextAttribute : Attribute { public readonly byte Flag; public <5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContextAttribute(byte P_0) { Flag = P_0; } } [<97879e7a-8b49-4e79-9553-5a4d320bb7d4>Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] [CompilerGenerated] internal sealed class <1cae11c9-874b-4fe7-8d6b-6d432ddf26d8>RefSafetyRulesAttribute : Attribute { public readonly int Version; public <1cae11c9-874b-4fe7-8d6b-6d432ddf26d8>RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace CretaceousCreatures { [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] [BepInPlugin("coemt.CretaceousCreatures", "CretaceousCreatures", "1.0.3")] public class CretaceousCreaturesPlugin : BaseUnityPlugin { [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] public enum Toggle { On = 1, Off = 0 } [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] private class ConfigurationManagerAttributes { [UsedImplicitly] public int? Order; [UsedImplicitly] public bool? Browsable; [UsedImplicitly] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] public string Category; [UsedImplicitly] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(new byte[] { 2, 1 })] public Action<ConfigEntryBase> CustomDrawer; } [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] private class AcceptableShortcuts : AcceptableValueBase { public AcceptableShortcuts() : base(typeof(KeyboardShortcut)) { } public override object Clamp(object value) { return value; } public override bool IsValid(object value) { return true; } public override string ToDescriptionString() { return "# Acceptable values: " + string.Join(", ", KeyboardShortcut.AllKeyCodes); } } internal const string ModName = "CretaceousCreatures"; internal const string ModVersion = "1.0.3"; internal const string Author = "coemt"; private const string ModGUID = "coemt.CretaceousCreatures"; private static string ConfigFileName = "coemt.CretaceousCreatures.cfg"; private static string ConfigFileFullPath; internal static string ConnectionError; private readonly Harmony _harmony = new Harmony("coemt.CretaceousCreatures"); public static readonly ManualLogSource CretaceousCreaturesLogger; private static readonly ConfigSync ConfigSync; public Texture2D tex; private Sprite mySprite; private SpriteRenderer sr; private static ConfigEntry<Toggle> _serverConfigLocked; public void Awake() { //IL_21fc: Unknown result type (might be due to invalid IL or missing references) //IL_2311: Unknown result type (might be due to invalid IL or missing references) //IL_2426: Unknown result type (might be due to invalid IL or missing references) //IL_253c: Unknown result type (might be due to invalid IL or missing references) //IL_2652: Unknown result type (might be due to invalid IL or missing references) //IL_276b: Unknown result type (might be due to invalid IL or missing references) //IL_2880: Unknown result type (might be due to invalid IL or missing references) //IL_2995: Unknown result type (might be due to invalid IL or missing references) //IL_2aaa: Unknown result type (might be due to invalid IL or missing references) //IL_2bc0: Unknown result type (might be due to invalid IL or missing references) //IL_2cd5: Unknown result type (might be due to invalid IL or missing references) //IL_2deb: Unknown result type (might be due to invalid IL or missing references) //IL_2f00: Unknown result type (might be due to invalid IL or missing references) //IL_3016: Unknown result type (might be due to invalid IL or missing references) //IL_312c: Unknown result type (might be due to invalid IL or missing references) //IL_3241: Unknown result type (might be due to invalid IL or missing references) //IL_3356: Unknown result type (might be due to invalid IL or missing references) //IL_3437: Unknown result type (might be due to invalid IL or missing references) //IL_353f: Unknown result type (might be due to invalid IL or missing references) //IL_367c: Unknown result type (might be due to invalid IL or missing references) //IL_375d: Unknown result type (might be due to invalid IL or missing references) //IL_389a: Unknown result type (might be due to invalid IL or missing references) //IL_39af: Unknown result type (might be due to invalid IL or missing references) _serverConfigLocked = config("1 - General", "Lock Configuration", Toggle.On, "If on, the configuration is locked and can be changed by server admins only."); ConfigSync.AddLockingConfigEntry<Toggle>(_serverConfigLocked); GameObject val = ItemManager.PrefabManager.RegisterPrefab("dino", "fx_dilo_tarball_hit"); GameObject val2 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_dilo_hit"); GameObject val3 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_dilo_alerted"); GameObject val4 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_dilo_roar"); GameObject val5 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_dilo_idle"); GameObject val6 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_dilo_attack"); GameObject val7 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_raptor_hit"); GameObject val8 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_raptor_alerted"); GameObject val9 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_raptor_roar"); GameObject val10 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_raptor_idle"); GameObject val11 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_raptor_attack"); GameObject val12 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_raptor_attack_aoe"); GameObject val13 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_gig_hit"); GameObject val14 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_gig_alerted"); GameObject val15 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_gig_roar"); GameObject val16 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_gig_idle"); GameObject val17 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_gig_attack"); GameObject val18 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_trex_hit"); GameObject val19 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_trex_alerted"); GameObject val20 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_trex_idle"); GameObject val21 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_trex_attack"); GameObject val22 = ItemManager.PrefabManager.RegisterPrefab("dino", "vfx_trex_footstep"); GameObject val23 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_trex_footstep"); GameObject val24 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_pachy_alerted"); GameObject val25 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_pachy_idle"); GameObject val26 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_spino_roar"); GameObject val27 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_spino_idle"); GameObject val28 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_spino_hit"); GameObject val29 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_spino_attack"); GameObject val30 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_spino_alerted"); GameObject val31 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_steg_alerted"); GameObject val32 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_steg_idle"); GameObject val33 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_trike_hit"); GameObject val34 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_trike_alerted"); GameObject val35 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_trike_idle"); GameObject val36 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_comp_hit"); GameObject val37 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_comp_alerted"); GameObject val38 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_comp_idle"); GameObject val39 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_tera_hit"); GameObject val40 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_tera_alerted"); GameObject val41 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_tera_idle"); GameObject val42 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_brach_hit"); GameObject val43 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_brach_alerted"); GameObject val44 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_brach_idle"); GameObject val45 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_para_hit"); GameObject val46 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_para_alerted"); GameObject val47 = ItemManager.PrefabManager.RegisterPrefab("dino", "sfx_para_idle"); GameObject val48 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino1_base_attack"); GameObject val49 = ItemManager.PrefabManager.RegisterPrefab("dino", "dilo_attack_jump"); GameObject val50 = ItemManager.PrefabManager.RegisterPrefab("dino", "dilo_attack_aoe"); GameObject val51 = ItemManager.PrefabManager.RegisterPrefab("dino", "dilo_tar_attack"); GameObject val52 = ItemManager.PrefabManager.RegisterPrefab("dino", "dilo_aoe"); GameObject val53 = ItemManager.PrefabManager.RegisterPrefab("dino", "dilo_projectile_tarball"); GameObject val54 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino2_base_attack"); GameObject val55 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino3_base_attack"); GameObject val56 = ItemManager.PrefabManager.RegisterPrefab("dino", "spino_aoe"); GameObject val57 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino3_roar_attack"); GameObject val58 = ItemManager.PrefabManager.RegisterPrefab("dino", "Dino3_Slap_Attack"); GameObject val59 = ItemManager.PrefabManager.RegisterPrefab("dino", "spino_attack_aoe"); GameObject val60 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino4_base_attack"); GameObject val61 = ItemManager.PrefabManager.RegisterPrefab("dino", "trex_aoe"); GameObject val62 = ItemManager.PrefabManager.RegisterPrefab("dino", "trex_attack_aoe"); GameObject val63 = ItemManager.PrefabManager.RegisterPrefab("dino", "rapt_base_attack"); GameObject val64 = ItemManager.PrefabManager.RegisterPrefab("dino", "rapt_attack_jump"); GameObject val65 = ItemManager.PrefabManager.RegisterPrefab("dino", "rapt_attack_aoe"); GameObject val66 = ItemManager.PrefabManager.RegisterPrefab("dino", "rapt_call_attack"); GameObject val67 = ItemManager.PrefabManager.RegisterPrefab("dino", "rapt_aoe"); GameObject val68 = ItemManager.PrefabManager.RegisterPrefab("dino", "rapt_base_attack1"); GameObject val69 = ItemManager.PrefabManager.RegisterPrefab("dino", "rapt_attack_jump1"); GameObject val70 = ItemManager.PrefabManager.RegisterPrefab("dino", "rapt_attack_aoe1"); GameObject val71 = ItemManager.PrefabManager.RegisterPrefab("dino", "rapt_aoe1"); GameObject val72 = ItemManager.PrefabManager.RegisterPrefab("dino", "dilo_attack_aoe1"); GameObject val73 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino7_base_attack"); GameObject val74 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino7_eat_attack"); GameObject val75 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino8_stomp_base_attack"); GameObject val76 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino8_tailwhip_attack"); GameObject val77 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino9_base_attack"); GameObject val78 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino9_eat_attack"); GameObject val79 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino10_base_attack"); GameObject val80 = ItemManager.PrefabManager.RegisterPrefab("dino", "compy_attack_jump"); GameObject val81 = ItemManager.PrefabManager.RegisterPrefab("dino", "compy_base_attack"); GameObject val82 = ItemManager.PrefabManager.RegisterPrefab("dino", "compy_bite_attack"); GameObject val83 = ItemManager.PrefabManager.RegisterPrefab("dino", "ptera_base_attack"); GameObject val84 = ItemManager.PrefabManager.RegisterPrefab("dino", "gall_attack_1"); GameObject val85 = ItemManager.PrefabManager.RegisterPrefab("dino", "gall_attack_2"); GameObject val86 = ItemManager.PrefabManager.RegisterPrefab("dino", "gall_attack_jump"); GameObject val87 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino14_base_attack"); GameObject val88 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino15_base_attack"); GameObject val89 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino15_eat_attack"); GameObject val90 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino16_base_attack"); GameObject val91 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino16_eat_attack"); GameObject val92 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino17_base_attack"); GameObject val93 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino17_eat_attack"); GameObject val94 = ItemManager.PrefabManager.RegisterPrefab("dino", "dilo_tar_attack1"); GameObject val95 = ItemManager.PrefabManager.RegisterPrefab("dino", "plesiattack"); GameObject val96 = ItemManager.PrefabManager.RegisterPrefab("dino", "compy_attack_jump1"); GameObject val97 = ItemManager.PrefabManager.RegisterPrefab("dino", "compy_base_attack1"); GameObject val98 = ItemManager.PrefabManager.RegisterPrefab("dino", "compy_bite_attack1"); GameObject val99 = ItemManager.PrefabManager.RegisterPrefab("dino", "plesiattack1"); GameObject val100 = ItemManager.PrefabManager.RegisterPrefab("dino", "dino9_eat_attack1"); BuildPiece buildPiece = new BuildPiece("dino", "DinoThrone_coe"); buildPiece.Name.English("Dino Throne"); buildPiece.Description.English("A throne worthy of a Dino slayer"); buildPiece.RequiredItems.Add("FineWood", 20, recover: true); buildPiece.RequiredItems.Add("TrophyTrex_coe", 1, recover: false); buildPiece.RequiredItems.Add("IronNails", 20, recover: true); buildPiece.Category.Set("Dino"); buildPiece.Crafting.Set(PieceManager.CraftingTable.Workbench); BuildPiece buildPiece2 = new BuildPiece("dino", "DinoRug_coe"); buildPiece2.Name.English("Dino Rug"); buildPiece2.Description.English("A rug worthy of a Dino slayer (placeholder)"); buildPiece2.RequiredItems.Add("DinoHide_coe", 8, recover: true); buildPiece2.RequiredItems.Add("TrophyDilo_coe", 1, recover: false); buildPiece2.Category.Set("Dino"); buildPiece2.Crafting.Set(PieceManager.CraftingTable.Workbench); BuildPiece buildPiece3 = new BuildPiece("dino", "DinoWallArt_coe"); buildPiece3.Name.English("Dino Art"); buildPiece3.Description.English("An ancient fossil turned into a decoration"); buildPiece3.RequiredItems.Add("DinoHide_coe", 4, recover: true); buildPiece3.RequiredItems.Add("TrophyCompy_coe", 1, recover: false); buildPiece3.Category.Set("Dino"); buildPiece3.Crafting.Set(PieceManager.CraftingTable.Workbench); CustomSE customSE = new CustomSE("dino", "Deafened"); CustomSE customSE2 = new CustomSE("dino", "Frightened"); CustomSE customSE3 = new CustomSE("dino", "Terrified"); CustomSE customSE4 = new CustomSE("dino", "Primal"); Item item = new Item("dino", "DinoLegs_coe"); item.Name.English("Primal pants"); item.Description.English("Pants made from hardened skin"); item.Crafting.Add(ItemManager.CraftingTable.Workbench, 2); item.RequiredItems.Add("DinoHide_coe", 10); item.RequiredItems.Add("Blueberries", 5); item.RequiredItems.Add("Resin", 10); item.RequiredUpgradeItems.Add("DinoHide_coe", 5); item.RequiredUpgradeItems.Add("Blueberries", 5); item.RequiredUpgradeItems.Add("TrophyCompy_coe", 1); Item item2 = new Item("dino", "HelmetTrike_coe"); item2.Name.English("Trike Helmet"); item2.Description.English("A helmet made from bone"); item2.Crafting.Add(ItemManager.CraftingTable.Workbench, 1); item2.RequiredItems.Add("DinoHide_coe", 5); item2.RequiredItems.Add("TrophyTrike_coe", 1); item2.RequiredUpgradeItems.Add("DinoHide_coe", 4); item2.RequiredUpgradeItems.Add("TrophyTrike_coe", 1); Item item3 = new Item("dino", "HelmetGig_coe"); item3.Name.English("Giga Helmet"); item3.Description.English("A helmet made from bone"); item3.Crafting.Add(ItemManager.CraftingTable.Workbench, 1); item3.RequiredItems.Add("DinoHide_coe", 5); item3.RequiredItems.Add("TrophyGig_coe", 1); item3.RequiredUpgradeItems.Add("DinoHide_coe", 4); item3.RequiredUpgradeItems.Add("TrophyGig_coe", 1); Item item4 = new Item("dino", "PrimalKnife_coe"); item4.Name.English("Primal Knife"); item4.Description.English("A simple knife made with stone"); item4.Crafting.Add(ItemManager.CraftingTable.Workbench, 1); item4.RequiredItems.Add("DinoHide_coe", 3); item4.RequiredItems.Add("Resin", 2); item4.RequiredItems.Add("Stone", 3); item4.RequiredItems.Add("Wood", 5); item4.RequiredUpgradeItems.Add("DinoHide_coe", 3); item4.RequiredUpgradeItems.Add("Stone", 4); item4.RequiredUpgradeItems.Add("TrophyTera_coe", 1); Item item5 = new Item("dino", "PrimalSpear_coe"); item5.Name.English("Primal Spear"); item5.Description.English("A spear made from flesh and bone"); item5.Crafting.Add(ItemManager.CraftingTable.Workbench, 2); item5.RequiredItems.Add("DinoHide_coe", 5); item5.RequiredItems.Add("Stone", 2); item5.RequiredItems.Add("Wood", 10); item5.RequiredUpgradeItems.Add("Egg1_coe", 1); item5.RequiredUpgradeItems.Add("DinoHide_coe", 4); item5.RequiredUpgradeItems.Add("TrophySteg_coe", 1); Item item6 = new Item("dino", "DinoShield_coe"); item6.Name.English("Primal Shield"); item6.Description.English("A shield made from flesh and bone"); item6.Crafting.Add(ItemManager.CraftingTable.Workbench, 3); item6.RequiredItems.Add("DinoHide_coe", 5); item6.RequiredItems.Add("TrophyDilo_coe", 1); item6.RequiredItems.Add("FineWood", 5); item6.RequiredItems.Add("Egg1_coe", 1); item6.RequiredUpgradeItems.Add("Egg2_coe", 1); item6.RequiredUpgradeItems.Add("DinoHide_coe", 4); item6.RequiredUpgradeItems.Add("TrophyPara_coe", 1); Item item7 = new Item("dino", "DinoHide_coe"); item7.Name.English("Dinohide"); item7.Description.English("a piece of dinohide"); item7.DropsFrom.Add("Dino1_coe", 0.1f, 1, 2); item7.DropsFrom.Add("Dino2_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino3_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino4_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino5_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino6_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino7_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino8_coe", 1f, 2, 4); item7.DropsFrom.Add("Dino9_coe", 1f, 2, 4); item7.DropsFrom.Add("Dino10_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino11_coe", 1f, 1, 2); item7.DropsFrom.Add("Dino12_coe", 1f, 1, 2); item7.DropsFrom.Add("Dino13_coe", 1f, 1, 2); item7.DropsFrom.Add("Dino14_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino15_coe", 1f, 2, 4); item7.DropsFrom.Add("Dino16_coe", 1f, 2, 4); item7.DropsFrom.Add("Dino17_coe", 1f, 2, 4); item7.DropsFrom.Add("Dino18_coe", 1f, 1, 2); item7.DropsFrom.Add("Dino19_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino20_coe", 1f, 1, 2); item7.DropsFrom.Add("Dino21_coe", 1f, 1, 4); item7.DropsFrom.Add("Dino22_coe", 1f, 1, 2); Item item8 = new Item("dino", "DinoStew_coe"); item8.Name.English("Dino Stew"); item8.Description.English("A bowl of delicious dino stew"); item8.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item8.RequiredItems.Add("DinoMeat_coe", 2); item8.RequiredItems.Add("DinoHide_coe", 1); item8.RequiredItems.Add("MushroomYellow", 1); Item item9 = new Item("dino", "DinoStew2_coe"); item9.Name.English("Dilo Stew"); item9.Description.English("A bowl of dilo stew"); item9.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item9.RequiredItems.Add("DinoMeat_coe", 2); item9.RequiredItems.Add("DinoHide_coe", 1); item9.RequiredItems.Add("TrophyDilo2_coe", 1); item9.RequiredItems.Add("MushroomYellow", 1); Item item10 = new Item("dino", "DinoStew3_coe"); item10.Name.English("Raptor Soup"); item10.Description.English("A bowl of delicious Raptor soup"); item10.Crafting.Add(ItemManager.CraftingTable.Cauldron, 2); item10.RequiredItems.Add("DinoMeat_coe", 2); item10.RequiredItems.Add("DinoHide_coe", 1); item10.RequiredItems.Add("TrophyRaptor_coe", 1); item10.RequiredItems.Add("Carrot", 1); Item item11 = new Item("dino", "DinoStew4_coe"); item11.Name.English("Spino Broth"); item11.Description.English("A bowl of delicious Spinosaurus broth"); item11.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item11.RequiredItems.Add("DinoMeat_coe", 2); item11.RequiredItems.Add("DinoHide_coe", 1); item11.RequiredItems.Add("TrophySpino_coe", 1); item11.RequiredItems.Add("Turnip", 1); Item item12 = new Item("dino", "DinoStew5_coe"); item12.Name.English("Dino Chunky stew"); item12.Description.English("A bowl of delicious chunky dino stew"); item12.Crafting.Add(ItemManager.CraftingTable.Cauldron, 1); item12.RequiredItems.Add("DinoMeatBig_coe", 2); item12.RequiredItems.Add("DinoHide_coe", 1); item12.RequiredItems.Add("MushroomYellow", 1); item12.RequiredItems.Add("Onion", 1); Item item13 = new Item("dino", "DinoStew6_coe"); item13.Name.English("Trex Broth"); item13.Description.English("A bowl of delicious trex broth"); item13.Crafting.Add(ItemManager.CraftingTable.Cauldron, 4); item13.RequiredItems.Add("DinoMeatBig_coe", 2); item13.RequiredItems.Add("DinoHide_coe", 1); item13.RequiredItems.Add("TrophyTrex_coe", 1); item13.RequiredItems.Add("Barley", 1); Item item14 = new Item("dino", "DinoStew7_coe"); item14.Name.English("Marine Slop"); item14.Description.English("A bowl of ferocious delight"); item14.Crafting.Add(ItemManager.CraftingTable.Cauldron, 3); item14.RequiredItems.Add("OceanDinoMeat_coe", 2); item14.RequiredItems.Add("Onion", 2); item14.RequiredItems.Add("Mushroom", 1); Item item15 = new Item("dino", "DinoMeat_coe"); item15.Name.English("Raw Dinosaur meat"); item15.Description.English("a piece of uncooked meat"); Item item16 = new Item("dino", "DinoMeatCooked_coe"); item16.Name.English("Cooked Dinosaur meat"); item16.Description.English("a piece of cooked meat"); Item item17 = new Item("dino", "DinoMeatBig_coe"); item17.Name.English("Big Raw Dinosaur meat"); item17.Description.English("a largepiece of uncooked meat"); Item item18 = new Item("dino", "DinoMeatCookedBig_coe"); item18.Name.English("Big Cooked Dinosaur meat"); item18.Description.English("a large piece of cooked meat"); Item item19 = new Item("dino", "OceanDinoMeat_coe"); item19.Name.English("Ocean Dinosaur meat"); item19.Description.English("a large piece of ocean meat"); Item item20 = new Item("dino", "OceanDinoMeatCooked_coe"); item20.Name.English("Cooked Ocean Dinosaur meat"); item20.Description.English("a nice hunk of cooked meat"); Item item21 = new Item("dino", "Egg1_coe"); item21.Name.English("Red Dinosaur Egg"); item21.Description.English("An egg from a prehistoric beast"); item21.DropsFrom.Add("Dino1_coe", 0.05f, 1, 1); item21.DropsFrom.Add("Dino2_coe", 0.05f, 1, 1); item21.DropsFrom.Add("Dino3_coe", 0.05f, 1, 1); item21.DropsFrom.Add("Dino4_coe", 0.05f, 1, 1); item21.DropsFrom.Add("Dino5_coe", 0.05f, 1, 1); item21.DropsFrom.Add("Dino6_coe", 0.05f, 1, 1); item21.DropsFrom.Add("Dino7_coe", 0.05f, 1, 1); item21.DropsFrom.Add("Dino8_coe", 0.05f, 1, 1); item21.DropsFrom.Add("Dino9_coe", 0.05f, 1, 1); item21.DropsFrom.Add("Dino10_coe", 0.05f, 1, 1); Item item22 = new Item("dino", "Egg2_coe"); item22.Name.English("Grey Dinosaur Egg"); item22.Description.English("An egg from a prehistoric beast"); item22.DropsFrom.Add("Dino1_coe", 0.05f, 1, 1); item22.DropsFrom.Add("Dino2_coe", 0.05f, 1, 1); item22.DropsFrom.Add("Dino3_coe", 0.05f, 1, 1); item22.DropsFrom.Add("Dino4_coe", 0.05f, 1, 1); item22.DropsFrom.Add("Dino5_coe", 0.05f, 1, 1); item22.DropsFrom.Add("Dino6_coe", 0.05f, 1, 1); Item item23 = new Item("dino", "RaptorClaw_coe"); item23.Name.English("Raptor Claw"); item23.Description.English("A severed claw from a vicious beast"); item23.DropsFrom.Add("Dino5_coe", 0.5f, 1, 1); Item item24 = new Item("dino", "TrophyDilo_coe"); item24.Name.English("Dilophosaurus Trophy"); item24.Description.English("A severed head from a vicious beast"); item24.DropsFrom.Add("Dino1_coe", 0.1f, 1, 1); Item item25 = new Item("dino", "TrophyGig_coe"); item25.Name.English("Giganotosaurus Trophy"); item25.Description.English("A severed head from a vicious beast"); item25.DropsFrom.Add("Dino2_coe", 0.15f, 1, 1); Item item26 = new Item("dino", "TrophySpino_coe"); item26.Name.English("Spinosaurus Trophy"); item26.Description.English("A severed head from a vicious beast"); item26.DropsFrom.Add("Dino3_coe", 0.12f, 1, 1); Item item27 = new Item("dino", "TrophyTrex_coe"); item27.Name.English("Tyrannosaurus Trophy"); item27.Description.English("A severed head from a vicious beast"); item27.DropsFrom.Add("Dino4_coe", 0.1f, 1, 1); Item item28 = new Item("dino", "TrophyRaptor_coe"); item28.Name.English("Velociraptor Trophy"); item28.Description.English("A severed head from a vicious beast"); item28.DropsFrom.Add("Dino5_coe", 0.15f, 1, 1); item28.DropsFrom.Add("Dino6_coe", 0.15f, 1, 1); Item item29 = new Item("dino", "TrophyPachy_coe"); item29.Name.English("Pachycephalosaurus Trophy"); item29.Description.English("A severed head from a vicious beast"); item29.DropsFrom.Add("Dino7_coe", 0.15f, 1, 1); Item item30 = new Item("dino", "TrophySteg_coe"); item30.Name.English("stegosaurus Trophy"); item30.Description.English("A severed head from a cretaceous beast"); item30.DropsFrom.Add("Dino8_coe", 0.15f, 1, 1); Item item31 = new Item("dino", "TrophyTrike_coe"); item31.Name.English("Triceratops Trophy"); item31.Description.English("A severed head from a cretaceous beast"); item31.DropsFrom.Add("Dino9_coe", 0.15f, 1, 1); item31.DropsFrom.Add("Dino22_coe", 0.15f, 1, 1); Item item32 = new Item("dino", "TrophyBrach_coe"); item32.Name.English("Brachiosaurus Trophy"); item32.Description.English("A severed head from a cretaceous beast"); item32.DropsFrom.Add("Dino10_coe", 0.15f, 1, 1); Item item33 = new Item("dino", "TrophyCompy_coe"); item33.Name.English("Compsognathus Trophy"); item33.Description.English("A severed head from a cretaceous beast"); item33.DropsFrom.Add("Dino11_coe", 0.15f, 1, 1); item33.DropsFrom.Add("Dino20_coe", 0.15f, 1, 1); Item item34 = new Item("dino", "TrophyTera_coe"); item34.Name.English("Pteranodon Trophy"); item34.Description.English("A severed head from a cretaceous beast"); item34.DropsFrom.Add("Dino12_coe", 0.15f, 1, 1); Item item35 = new Item("dino", "TrophyGall_coe"); item35.Name.English("Gallimimus Trophy"); item35.Description.English("A severed head from a cretaceous beast"); item35.DropsFrom.Add("Dino13_coe", 0.15f, 1, 1); Item item36 = new Item("dino", "TrophyArg_coe"); item36.Name.English("Argentinosaurus Trophy"); item36.Description.English("A severed head from a cretaceous beast"); item36.DropsFrom.Add("Dino14_coe", 0.15f, 1, 1); Item item37 = new Item("dino", "TrophyKent_coe"); item37.Name.English("Kentrosaurus Trophy"); item37.Description.English("A severed head from a cretaceous beast"); item37.DropsFrom.Add("Dino15_coe", 0.15f, 1, 1); Item item38 = new Item("dino", "TrophyPara_coe"); item38.Name.English("Parasaurolophus Trophy"); item38.Description.English("A severed head from a cretaceous beast"); item38.DropsFrom.Add("Dino16_coe", 0.15f, 1, 1); Item item39 = new Item("dino", "TrophyDilo2_coe"); item39.Name.English("Dilophosaurus Trophy"); item39.Description.English("A severed head from a cretaceous beast"); item39.DropsFrom.Add("Dino17_coe", 0.15f, 1, 1); Item item40 = new Item("dino", "TrophyPlesi_coe"); item40.Name.English("Plesiosaurus Trophy"); item40.Description.English("A severed head from a oceanic cretaceous beast"); item40.DropsFrom.Add("Dino19_coe", 0.15f, 1, 1); Item item41 = new Item("dino", "TrophyMosa_coe"); item41.Name.English("Mosasaurus Trophy"); item41.Description.English("A severed head from a oceanic cretaceous beast"); item41.DropsFrom.Add("Dino21_coe", 0.15f, 1, 1); Item item42 = new Item("dino", "TrophyAmber_coe"); item42.Name.English("Mosquito Amber"); item42.Description.English("A chunk of amber with an insect inside"); item42.DropsFrom.Add("Dino1_coe", 0.05f, 1, 1); item42.DropsFrom.Add("Dino2_coe", 0.05f, 1, 1); item42.DropsFrom.Add("Dino3_coe", 0.05f, 1, 1); item42.DropsFrom.Add("Dino4_coe", 0.05f, 1, 1); item42.DropsFrom.Add("Dino5_coe", 0.05f, 1, 1); Creature creature = new Creature("dino", "Dino1_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)1, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 1f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 1 }; creature.Localize().English("Dilo"); creature.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(1f, 2f); creature.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature2 = new Creature("dino", "Dino2_coe") { CanBeTamed = false, FoodItems = "TrophyLox", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)8, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 1f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 1 }; creature2.Localize().English("Giga"); creature2.Drops["DinoMeatBig_coe"].Amount = new CreatureManager.Range(0f, 2f); creature2.Drops["DinoMeatBig_coe"].DropChance = 100f; Creature creature3 = new Creature("dino", "Dino3_coe") { CanBeTamed = false, FoodItems = "TrophyLox", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(0f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)2, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 1f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 1 }; creature3.Localize().English("Spino"); creature3.Drops["DinoMeatBig_coe"].Amount = new CreatureManager.Range(0f, 2f); creature3.Drops["DinoMeatBig_coe"].DropChance = 100f; Creature creature4 = new Creature("dino", "Dino4_coe") { CanBeTamed = false, FoodItems = "TrophyLox", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)16, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 1f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 1 }; creature4.Localize().English("Tyrannosaurus"); creature4.Drops["DinoMeatBig_coe"].Amount = new CreatureManager.Range(0f, 4f); creature4.Drops["DinoMeatBig_coe"].DropChance = 100f; Creature creature5 = new Creature("dino", "Dino5_coe") { CanBeTamed = true, FoodItems = "TrophyLox", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)10, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 1f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 1 }; creature5.Localize().English("Velociraptor"); creature5.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(1f, 2f); creature5.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature6 = new Creature("dino", "Dino6_coe") { CanBeTamed = true, FoodItems = "TrophyLox", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)512, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 1f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 1 }; creature6.Localize().English("Velociraptor Female"); creature6.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(1f, 2f); creature6.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature7 = new Creature("dino", "Dino7_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)1, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 1f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 1 }; creature7.Localize().English("Pachy"); creature7.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(0f, 1f); creature7.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature8 = new Creature("dino", "Dino8_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)1, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 2f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature8.Localize().English("Stegasaurus"); creature8.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(0f, 2f); creature8.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature9 = new Creature("dino", "Dino9_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)8, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 3f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature9.Localize().English("Triceratops"); creature9.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(0f, 2f); creature9.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature10 = new Creature("dino", "Dino10_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)16, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 1f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature10.Localize().English("Brachiosaurus"); creature10.Drops["DinoMeatBig_coe"].Amount = new CreatureManager.Range(1f, 4f); creature10.Drops["DinoMeatBig_coe"].DropChance = 100f; Creature creature11 = new Creature("dino", "Dino11_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)1, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(3f, 5f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature11.Localize().English("Compy"); creature11.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(0f, 1f); creature11.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature12 = new Creature("dino", "Dino12_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)25, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 2f), CheckSpawnInterval = 1500, SpawnChance = 8f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature12.Localize().English("Ptera"); creature12.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(0f, 1f); creature12.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature13 = new Creature("dino", "Dino13_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)8, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 4f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature13.Localize().English("Gallimimus"); creature13.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(1f, 3f); creature13.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature14 = new Creature("dino", "Dino14_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)16, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 1f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 1 }; creature14.Localize().English("Argentinosaurus"); creature14.Drops["DinoMeatBig_coe"].Amount = new CreatureManager.Range(5f, 8f); creature14.Drops["DinoMeatBig_coe"].DropChance = 100f; Creature creature15 = new Creature("dino", "Dino15_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)16, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 3f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature15.Localize().English("Kentrosaurus"); creature15.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(3f, 5f); creature15.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature16 = new Creature("dino", "Dino16_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)1, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 2f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature16.Localize().English("Parasaur"); creature16.Drops["DinoMeatBig_coe"].Amount = new CreatureManager.Range(3f, 4f); creature16.Drops["DinoMeatBig_coe"].DropChance = 100f; Creature creature17 = new Creature("dino", "Dino17_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)1, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 2f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature17.Localize().English("Dilo"); creature17.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(1f, 2f); creature17.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature18 = new Creature("dino", "Dino18_coe") { ConfigurationEnabled = true, CanBeTamed = true, FoodItems = "Bread", CanSpawn = true, Biome = (Biome)256, SpecificSpawnArea = SpawnArea.Everywhere, RequiredAltitude = new CreatureManager.Range(-1000f, -5f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), CheckSpawnInterval = 800, SpawnChance = 15f, SpawnAltitude = 20f, GroupSize = new CreatureManager.Range(0f, 1f), Maximum = 2, SpecificSpawnTime = SpawnTime.Always }; creature18.Localize().English("Ptera"); creature18.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(1f, 2f); creature18.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature19 = new Creature("dino", "Dino19_coe") { ConfigurationEnabled = true, CanBeTamed = true, FoodItems = "Bread", CanSpawn = true, Biome = (Biome)256, SpecificSpawnArea = SpawnArea.Center, RequiredAltitude = new CreatureManager.Range(-1000f, -5f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), CheckSpawnInterval = 800, SpawnChance = 7f, SpawnAltitude = 20f, GroupSize = new CreatureManager.Range(0f, 1f), Maximum = 1, SpecificSpawnTime = SpawnTime.Always }; creature19.Localize().English("Plesi"); creature19.Drops["OceanDinoMeat_coe"].Amount = new CreatureManager.Range(3f, 6f); creature19.Drops["OceanDinoMeat_coe"].DropChance = 100f; Creature creature20 = new Creature("dino", "Dino20_coe") { CanBeTamed = true, FoodItems = "RawMeat", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)16, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(3f, 5f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature20.Localize().English("Compy"); creature20.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(2f, 3f); creature20.Drops["DinoMeat_coe"].DropChance = 100f; Creature creature21 = new Creature("dino", "Dino21_coe") { ConfigurationEnabled = true, CanBeTamed = true, FoodItems = "Bread", CanSpawn = true, Biome = (Biome)256, SpecificSpawnArea = SpawnArea.Center, RequiredAltitude = new CreatureManager.Range(-1000f, -5f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), CheckSpawnInterval = 800, SpawnChance = 8f, SpawnAltitude = 20f, GroupSize = new CreatureManager.Range(0f, 1f), Maximum = 1, SpecificSpawnTime = SpawnTime.Always }; creature21.Localize().English("Mosasaurus"); creature21.Drops["OceanDinoMeat_coe"].Amount = new CreatureManager.Range(4f, 6f); creature21.Drops["OceanDinoMeat_coe"].DropChance = 100f; Creature creature22 = new Creature("dino", "Dino22_coe") { CanBeTamed = true, FoodItems = "TrophyLox", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 1000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)16, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 3f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature22.Localize().English("Triceratops"); creature22.Drops["DinoMeatBig_coe"].Amount = new CreatureManager.Range(3f, 5f); creature22.Drops["DinoMeatBig_coe"].DropChance = 100f; Creature creature23 = new Creature("dino", "Dino23_coe") { CanBeTamed = true, FoodItems = "TrophyLox", ConfigurationEnabled = true, CanSpawn = true, SpecificSpawnTime = SpawnTime.Day, RequiredAltitude = new CreatureManager.Range(5f, 5000f), RequiredOceanDepth = new CreatureManager.Range(0f, 0f), RequiredGlobalKey = GlobalKey.None, Biome = (Biome)4, SpecificSpawnArea = SpawnArea.Everywhere, GroupSize = new CreatureManager.Range(0f, 3f), CheckSpawnInterval = 1500, SpawnChance = 10f, ForestSpawn = Forest.Both, CanHaveStars = false, AttackImmediately = false, Maximum = 2 }; creature22.Localize().English("Dimorph"); creature22.Drops["DinoMeat_coe"].Amount = new CreatureManager.Range(2f, 3f); creature22.Drops["DinoMeat_coe"].DropChance = 100f; Assembly executingAssembly = Assembly.GetExecutingAssembly(); _harmony.PatchAll(executingAssembly); SetupWatcher(); } private void OnDestroy() { ((BaseUnityPlugin)this).Config.Save(); } private void SetupWatcher() { FileSystemWatcher fileSystemWatcher = new FileSystemWatcher(Paths.ConfigPath, ConfigFileName); fileSystemWatcher.Changed += ReadConfigValues; fileSystemWatcher.Created += ReadConfigValues; fileSystemWatcher.Renamed += ReadConfigValues; fileSystemWatcher.IncludeSubdirectories = true; fileSystemWatcher.SynchronizingObject = ThreadingHelper.SynchronizingObject; fileSystemWatcher.EnableRaisingEvents = true; } private void ReadConfigValues(object sender, FileSystemEventArgs e) { if (!File.Exists(ConfigFileFullPath)) { return; } try { CretaceousCreaturesLogger.LogDebug((object)"ReadConfigValues called"); ((BaseUnityPlugin)this).Config.Reload(); } catch { CretaceousCreaturesLogger.LogError((object)("There was an issue loading your " + ConfigFileName)); CretaceousCreaturesLogger.LogError((object)"Please check your config entries for spelling and format!"); } } private ConfigEntry<T> config<[<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] T>(string group, string name, T value, ConfigDescription description, bool synchronizedSetting = true) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Expected O, but got Unknown ConfigDescription val = new ConfigDescription(description.Description + (synchronizedSetting ? " [Synced with Server]" : " [Not Synced with Server]"), description.AcceptableValues, description.Tags); ConfigEntry<T> val2 = ((BaseUnityPlugin)this).Config.Bind<T>(group, name, value, val); SyncedConfigEntry<T> syncedConfigEntry = ConfigSync.AddConfigEntry<T>(val2); syncedConfigEntry.SynchronizedConfig = synchronizedSetting; return val2; } private ConfigEntry<T> config<[<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] T>(string group, string name, T value, string description, bool synchronizedSetting = true) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>()), synchronizedSetting); } static CretaceousCreaturesPlugin() { string configPath = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = configPath + directorySeparatorChar + ConfigFileName; ConnectionError = ""; CretaceousCreaturesLogger = Logger.CreateLogSource("CretaceousCreatures"); ConfigSync = new ConfigSync("coemt.CretaceousCreatures") { DisplayName = "CretaceousCreatures", CurrentVersion = "1.0.3", MinimumRequiredVersion = "1.0.3" }; _serverConfigLocked = null; } } [HarmonyPatch(typeof(ZNet), "OnNewConnection")] public static class RegisterAndCheckVersion { [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Expected O, but got Unknown CretaceousCreaturesPlugin.CretaceousCreaturesLogger.LogDebug((object)"Registering version RPC handler"); peer.m_rpc.Register<ZPackage>("CretaceousCreatures_VersionCheck", (Action<ZRpc, ZPackage>)RpcHandlers.RPC_CretaceousCreatures_Version); CretaceousCreaturesPlugin.CretaceousCreaturesLogger.LogDebug((object)"Invoking version check"); ZPackage val = new ZPackage(); val.Write("1.0.3"); peer.m_rpc.Invoke("CretaceousCreatures_VersionCheck", new object[1] { val }); } } [HarmonyPatch(typeof(ZNet), "RPC_PeerInfo")] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] public static class VerifyClient { private static bool Prefix(ZRpc rpc, ZPackage pkg, ref ZNet __instance) { if (!__instance.IsServer() || RpcHandlers.ValidatedPeers.Contains(rpc)) { return true; } CretaceousCreaturesPlugin.CretaceousCreaturesLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") never sent version or couldn't due to previous disconnect, disconnecting")); rpc.Invoke("Error", new object[1] { 3 }); return false; } private static void Postfix(ZNet __instance) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown ZRoutedRpc.instance.InvokeRoutedRPC(ZRoutedRpc.instance.GetServerPeerID(), "RequestAdminSync", new object[1] { (object)new ZPackage() }); } } [HarmonyPatch(typeof(FejdStartup), "ShowConnectError")] public class ShowConnectionError { [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] private static void Postfix(FejdStartup __instance) { if (__instance.m_connectionFailedPanel.activeSelf) { __instance.m_connectionFailedError.fontSizeMax = 25f; __instance.m_connectionFailedError.fontSizeMin = 15f; TMP_Text connectionFailedError = __instance.m_connectionFailedError; connectionFailedError.text = connectionFailedError.text + "\n" + CretaceousCreaturesPlugin.ConnectionError; } } } [HarmonyPatch(typeof(ZNet), "Disconnect")] public static class RemoveDisconnectedPeerFromVerified { [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] private static void Prefix(ZNetPeer peer, ref ZNet __instance) { if (__instance.IsServer()) { CretaceousCreaturesPlugin.CretaceousCreaturesLogger.LogInfo((object)("Peer (" + peer.m_rpc.m_socket.GetHostName() + ") disconnected, removing from validated list")); RpcHandlers.ValidatedPeers.Remove(peer.m_rpc); } } } [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] public static class RpcHandlers { public static readonly List<ZRpc> ValidatedPeers = new List<ZRpc>(); public static void RPC_CretaceousCreatures_Version(ZRpc rpc, ZPackage pkg) { string text = pkg.ReadString(); CretaceousCreaturesPlugin.CretaceousCreaturesLogger.LogInfo((object)("Version check, local: 1.0.3, remote: " + text)); if (text != "1.0.3") { CretaceousCreaturesPlugin.ConnectionError = "CretaceousCreatures Installed: 1.0.3\n Needed: " + text; if (ZNet.instance.IsServer()) { CretaceousCreaturesPlugin.CretaceousCreaturesLogger.LogWarning((object)("Peer (" + rpc.m_socket.GetHostName() + ") has incompatible version, disconnecting")); rpc.Invoke("Error", new object[1] { 3 }); } } else if (!ZNet.instance.IsServer()) { CretaceousCreaturesPlugin.CretaceousCreaturesLogger.LogInfo((object)"Received same version from server!"); } else { CretaceousCreaturesPlugin.CretaceousCreaturesLogger.LogInfo((object)("Adding peer (" + rpc.m_socket.GetHostName() + ") to validated list")); ValidatedPeers.Add(rpc); } } } } namespace StatusEffectManager { [PublicAPI] [Description("The ItemDrop effect to apply the status effect")] public enum EffectType { Equip, Attack, Consume, Set } public struct SE_Item { [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(1)] public StatusEffect Effect; public EffectType Type; } [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] [PublicAPI] [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] public class CustomSE { private static readonly List<CustomSE> RegisteredEffects = new List<CustomSE>(); private static readonly Dictionary<StatusEffect, CustomSE> CustomEffectMap = new Dictionary<StatusEffect, CustomSE>(); internal static readonly List<StatusEffect> CustomSEs = new List<StatusEffect>(); internal static readonly Dictionary<SE_Item, string> AddToPrefabs = new Dictionary<SE_Item, string>(); [Description("Instance of the StatusEffect.")] public readonly StatusEffect Effect; public EffectType Type; private string _folderName = "icons"; private AssetBundle _assetBundle = null; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] [Description("Sets the icon for the StatusEffect. Must be 64x64")] public Sprite IconSprite = null; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private string IconName = null; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private LocalizeKey _name; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private static Localization _english; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync = true; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private static object _configSync; [Description("Sets the icon for the StatusEffect. Must be 64x64")] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] public string Icon { [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(2)] get { return IconName; } [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(2)] set { IconName = value; IconSprite = ((IconName == null) ? null : loadSprite(IconName)); Effect.m_icon = IconSprite; } } [Description("Sets the in-game name for the StatusEffect")] public LocalizeKey Name { get { LocalizeKey name = _name; if (name != null) { return name; } StatusEffect effect = Effect; if (effect.m_name.StartsWith("$")) { _name = new LocalizeKey(effect.m_name); } else { string text = "$statuseffect_" + ((Object)Effect).name.Replace(" ", "_"); _name = new LocalizeKey(text).English(effect.m_name); effect.m_name = text; } return _name; } } private static Localization english { get { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (_english == null) { _english = new Localization(); _english.SetupLanguage("English"); } return _english; } } private static BaseUnityPlugin plugin { get { //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Expected O, but got Unknown if (_plugin == null) { IEnumerable<TypeInfo> source; try { source = Assembly.GetExecutingAssembly().DefinedTypes.ToList(); } catch (ReflectionTypeLoadException ex) { source = from t in ex.Types where t != null select t.GetTypeInfo(); } _plugin = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)source.First([<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); } return _plugin; } } [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private static object configSync { [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " ItemManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } public CustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") : this(EffectManager.RegisterAssetBundle(assetBundleFileName, folderName), customEffectName) { } public CustomSE(AssetBundle bundle, string customEffectName) { Effect = EffectManager.RegisterCustomSE(bundle, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } public CustomSE(string customEffectName) { Effect = ScriptableObject.CreateInstance<StatusEffect>(); EffectManager.RegisterCustomSE(Effect, customEffectName); RegisteredEffects.Add(this); CustomEffectMap[Effect] = this; } [return: <4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private byte[] ReadEmbeddedFileBytes(string name) { using MemoryStream memoryStream = new MemoryStream(); Stream manifestResourceStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ((_folderName == "") ? "" : ".") + _folderName + "." + name); if (manifestResourceStream == null) { return null; } manifestResourceStream.CopyTo(memoryStream); return memoryStream.ToArray(); } [return: <4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private Texture2D loadTexture(string name) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown byte[] array = ReadEmbeddedFileBytes(name); if (array != null) { Texture2D val = new Texture2D(0, 0); ImageConversion.LoadImage(val, array); return val; } return null; } private Sprite loadSprite(string name) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) Texture2D val = loadTexture(name); if (val != null) { return Sprite.Create(val, new Rect(0f, 0f, 64f, 64f), Vector2.zero); } AssetBundle assetBundle = _assetBundle; Sprite val2 = ((assetBundle != null) ? assetBundle.LoadAsset<Sprite>(name) : null); if (val2 != null) { return val2; } throw new FileNotFoundException("Could not find a file named " + name + " for the effect icon"); } public void AddSEToPrefab(CustomSE customSE, string prefabName) { SE_Item sE_Item = default(SE_Item); sE_Item.Effect = customSE.Effect; sE_Item.Type = customSE.Type; SE_Item key = sE_Item; AddToPrefabs.Add(key, prefabName); } private static ConfigEntry<T> config<[<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] T>(string group, string name, T value, ConfigDescription description) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); configSync?.GetType().GetMethod("AddConfigEntry").MakeGenericMethod(typeof(T)) .Invoke(configSync, new object[1] { val }); return val; } private static ConfigEntry<T> config<[<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] T>(string group, string name, T value, string description) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); } } [PublicAPI] [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] public class LocalizeKey { public readonly string Key; public LocalizeKey(string key) { Key = key.Replace("$", ""); } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } return this; } } [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] public static class EffectManager { [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] private struct BundleId { [UsedImplicitly] public string assetBundleFileName; [UsedImplicitly] public string folderName; } private static readonly Dictionary<BundleId, AssetBundle> bundleCache; static EffectManager() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Expected O, but got Unknown //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown bundleCache = new Dictionary<BundleId, AssetBundle>(); Harmony val = new Harmony("org.bepinex.helpers.StatusEffectManager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ObjectDB), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ObjectDBInit", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(ZNetScene), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(EffectManager), "Patch_ZNetSceneAwake", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); } public static AssetBundle RegisterAssetBundle(string assetBundleFileName, string folderName = "assets") { BundleId bundleId = default(BundleId); bundleId.assetBundleFileName = assetBundleFileName; bundleId.folderName = folderName; BundleId key = bundleId; if (!bundleCache.TryGetValue(key, out var value)) { Dictionary<BundleId, AssetBundle> dictionary = bundleCache; AssetBundle? obj = ((IEnumerable<AssetBundle>)Resources.FindObjectsOfTypeAll<AssetBundle>()).FirstOrDefault((Func<AssetBundle, bool>)([<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] (AssetBundle a) => ((Object)a).name == assetBundleFileName)) ?? AssetBundle.LoadFromStream(Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + ((folderName == "") ? "" : ".") + folderName + "." + assetBundleFileName)); AssetBundle result = obj; dictionary[key] = obj; return result; } return value; } public static StatusEffect RegisterCustomSE(string assetBundleFileName, string customEffectName, string folderName = "assets") { return RegisterCustomSE(RegisterAssetBundle(assetBundleFileName, folderName), customEffectName); } public static StatusEffect RegisterCustomSE(AssetBundle assets, string customEffectName) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown StatusEffect val = (StatusEffect)assets.LoadAsset<ScriptableObject>(customEffectName); CustomSE.CustomSEs.Add(val); return val; } public static StatusEffect RegisterCustomSE(StatusEffect customSE, string customEffectName) { ((Object)customSE).name = customEffectName; CustomSE.CustomSEs.Add(customSE); return customSE; } [HarmonyPriority(700)] private static void Patch_ObjectDBInit(ObjectDB __instance) { foreach (StatusEffect customSE in CustomSE.CustomSEs) { if (!__instance.m_StatusEffects.Contains(customSE)) { __instance.m_StatusEffects.Add(customSE); } } __instance.UpdateRegisters(); } [HarmonyPriority(700)] private static void Patch_ZNetSceneAwake(ZNetScene __instance) { foreach (KeyValuePair<SE_Item, string> addToPrefab in CustomSE.AddToPrefabs) { try { GameObject prefab = __instance.GetPrefab(addToPrefab.Value); ItemDrop val = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<ItemDrop>() : prefab.GetComponentInChildren<ItemDrop>()); Aoe val2 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<Aoe>() : prefab.GetComponentInChildren<Aoe>()); EffectArea val3 = (Object.op_Implicit((Object)(object)prefab) ? prefab.GetComponent<EffectArea>() : prefab.GetComponentInChildren<EffectArea>()); if (Object.op_Implicit((Object)(object)val)) { switch (addToPrefab.Key.Type) { case EffectType.Equip: val.m_itemData.m_shared.m_equipStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Attack: val.m_itemData.m_shared.m_attackStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Consume: val.m_itemData.m_shared.m_consumeStatusEffect = addToPrefab.Key.Effect; break; case EffectType.Set: val.m_itemData.m_shared.m_setSize = 1; val.m_itemData.m_shared.m_setName = ((Object)addToPrefab.Key.Effect).name; val.m_itemData.m_shared.m_setStatusEffect = addToPrefab.Key.Effect; break; default: throw new ArgumentOutOfRangeException(); } } else if (Object.op_Implicit((Object)(object)val2)) { val2.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else if (Object.op_Implicit((Object)(object)val3)) { val3.m_statusEffect = ((Object)addToPrefab.Key.Effect).name; } else { Debug.LogWarning((object)("The prefab '" + ((Object)prefab).name + "' does not have an ItemDrop, AOE, or EffectArea component. Cannot add the StatusEffect to the prefab.")); } } catch (Exception arg) { Debug.LogWarning((object)$"BROKE : {arg}"); } } } } } namespace SkillManager { [PublicAPI] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] public class Skill { [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] public static class LocalizationCache { private static readonly Dictionary<string, Localization> localizations = new Dictionary<string, Localization>(); internal static void LocalizationPostfix(Localization __instance, string language) { string key = localizations.FirstOrDefault([<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] (KeyValuePair<string, Localization> l) => l.Value == __instance).Key; if (key != null) { localizations.Remove(key); } if (!localizations.ContainsKey(language)) { localizations.Add(language, __instance); } } public static Localization ForLanguage([<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] string language = null) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Expected O, but got Unknown if (localizations.TryGetValue(language ?? PlayerPrefs.GetString("language", "English"), out var value)) { return value; } value = new Localization(); if (language != null) { value.SetupLanguage(language); } return value; } } [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] [PublicAPI] public class LocalizeKey { private static readonly List<LocalizeKey> keys = new List<LocalizeKey>(); public readonly string Key; public readonly Dictionary<string, string> Localizations = new Dictionary<string, string>(); public LocalizeKey(string key) { Key = key.Replace("$", ""); keys.Add(this); } public void Alias(string alias) { Localizations.Clear(); if (!alias.Contains("$")) { alias = "$" + alias; } Localizations["alias"] = alias; Localization.instance.AddWord(Key, Localization.instance.Localize(alias)); } public LocalizeKey English(string key) { return addForLang("English", key); } public LocalizeKey Swedish(string key) { return addForLang("Swedish", key); } public LocalizeKey French(string key) { return addForLang("French", key); } public LocalizeKey Italian(string key) { return addForLang("Italian", key); } public LocalizeKey German(string key) { return addForLang("German", key); } public LocalizeKey Spanish(string key) { return addForLang("Spanish", key); } public LocalizeKey Russian(string key) { return addForLang("Russian", key); } public LocalizeKey Romanian(string key) { return addForLang("Romanian", key); } public LocalizeKey Bulgarian(string key) { return addForLang("Bulgarian", key); } public LocalizeKey Macedonian(string key) { return addForLang("Macedonian", key); } public LocalizeKey Finnish(string key) { return addForLang("Finnish", key); } public LocalizeKey Danish(string key) { return addForLang("Danish", key); } public LocalizeKey Norwegian(string key) { return addForLang("Norwegian", key); } public LocalizeKey Icelandic(string key) { return addForLang("Icelandic", key); } public LocalizeKey Turkish(string key) { return addForLang("Turkish", key); } public LocalizeKey Lithuanian(string key) { return addForLang("Lithuanian", key); } public LocalizeKey Czech(string key) { return addForLang("Czech", key); } public LocalizeKey Hungarian(string key) { return addForLang("Hungarian", key); } public LocalizeKey Slovak(string key) { return addForLang("Slovak", key); } public LocalizeKey Polish(string key) { return addForLang("Polish", key); } public LocalizeKey Dutch(string key) { return addForLang("Dutch", key); } public LocalizeKey Portuguese_European(string key) { return addForLang("Portuguese_European", key); } public LocalizeKey Portuguese_Brazilian(string key) { return addForLang("Portuguese_Brazilian", key); } public LocalizeKey Chinese(string key) { return addForLang("Chinese", key); } public LocalizeKey Japanese(string key) { return addForLang("Japanese", key); } public LocalizeKey Korean(string key) { return addForLang("Korean", key); } public LocalizeKey Hindi(string key) { return addForLang("Hindi", key); } public LocalizeKey Thai(string key) { return addForLang("Thai", key); } public LocalizeKey Abenaki(string key) { return addForLang("Abenaki", key); } public LocalizeKey Croatian(string key) { return addForLang("Croatian", key); } public LocalizeKey Georgian(string key) { return addForLang("Georgian", key); } public LocalizeKey Greek(string key) { return addForLang("Greek", key); } public LocalizeKey Serbian(string key) { return addForLang("Serbian", key); } public LocalizeKey Ukrainian(string key) { return addForLang("Ukrainian", key); } private LocalizeKey addForLang(string lang, string value) { Localizations[lang] = value; if (Localization.instance.GetSelectedLanguage() == lang) { Localization.instance.AddWord(Key, value); } else if (lang == "English" && !Localization.instance.m_translations.ContainsKey(Key)) { Localization.instance.AddWord(Key, value); } return this; } [HarmonyPriority(300)] internal static void AddLocalizedKeys(Localization __instance, string language) { foreach (LocalizeKey key in keys) { string value2; if (key.Localizations.TryGetValue(language, out var value) || key.Localizations.TryGetValue("English", out value)) { __instance.AddWord(key.Key, value); } else if (key.Localizations.TryGetValue("alias", out value2)) { __instance.AddWord(key.Key, Localization.instance.Localize(value2)); } } } } [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] private class ConfigurationManagerAttributes { [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] [UsedImplicitly] public string Category; } [HarmonyPatch(typeof(Skills), "IsSkillValid")] [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] private static class Patch_Skills_IsSkillValid { private static void Postfix(SkillType type, ref bool __result) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (!__result && skills.ContainsKey(type)) { __result = true; } } } private static readonly Dictionary<SkillType, Skill> skills; internal static readonly Dictionary<string, Skill> skillByName; private readonly string skillName; private readonly string internalSkillName; private readonly SkillDef skillDef; public readonly LocalizeKey Name; public readonly LocalizeKey Description; private float skillEffectFactor = 1f; private int skillLoss = 5; public bool Configurable = false; private static bool InitializedTerminal; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private static Localization _english; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private static BaseUnityPlugin _plugin; private static bool hasConfigSync; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private static object _configSync; public float SkillGainFactor { get { return skillDef.m_increseStep; } set { skillDef.m_increseStep = value; this.SkillGainFactorChanged?.Invoke(value); } } public float SkillEffectFactor { get { return skillEffectFactor; } set { skillEffectFactor = value; this.SkillEffectFactorChanged?.Invoke(value); } } public int SkillLoss { get { return skillLoss; } set { skillLoss = value; this.SkillLossChanged?.Invoke(value); } } private static Localization english => _english ?? (_english = LocalizationCache.ForLanguage("English")); private static BaseUnityPlugin plugin { get { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown object obj = _plugin; if (obj == null) { BaseUnityPlugin val = (BaseUnityPlugin)Chainloader.ManagerObject.GetComponent((Type)Assembly.GetExecutingAssembly().DefinedTypes.First([<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] (TypeInfo t) => t.IsClass && typeof(BaseUnityPlugin).IsAssignableFrom(t))); _plugin = val; obj = (object)val; } return (BaseUnityPlugin)obj; } } [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] private static object configSync { [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(2)] get { if (_configSync == null && hasConfigSync) { Type type = Assembly.GetExecutingAssembly().GetType("ServerSync.ConfigSync"); if ((object)type != null) { _configSync = Activator.CreateInstance(type, plugin.Info.Metadata.GUID + " SkillManager"); type.GetField("CurrentVersion").SetValue(_configSync, plugin.Info.Metadata.Version.ToString()); type.GetProperty("IsLocked").SetValue(_configSync, true); } else { hasConfigSync = false; } } return _configSync; } } [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] [method: <5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(2)] [field: <4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] public event Action<float> SkillGainFactorChanged; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] [method: <5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(2)] [field: <4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] public event Action<float> SkillEffectFactorChanged; [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] [method: <5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(2)] [field: <4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] public event Action<float> SkillLossChanged; public Skill(string englishName, string icon) : this(englishName, loadSprite(icon, 64, 64)) { } public Skill(string englishName, Sprite icon) { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Expected O, but got Unknown SkillType val = fromName(englishName); string text = new Regex("[^a-zA-Z]").Replace(englishName, "_"); skills[val] = this; skillByName[englishName] = this; skillDef = new SkillDef { m_description = "$skilldesc_" + text, m_icon = icon, m_increseStep = 1f, m_skill = val }; internalSkillName = text; skillName = englishName; Name = new LocalizeKey("skill_" + ((object)(SkillType)(ref val)).ToString()).English(englishName); Description = new LocalizeKey("skilldesc_" + text); } public static SkillType fromName(string englishName) { return (SkillType)Math.Abs(StringExtensionMethods.GetStableHashCode(englishName)); } static Skill() { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Expected O, but got Unknown //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Expected O, but got Unknown //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Expected O, but got Unknown //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Expected O, but got Unknown //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01ad: Expected O, but got Unknown //IL_01ad: Expected O, but got Unknown //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Expected O, but got Unknown //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Expected O, but got Unknown //IL_023f: Expected O, but got Unknown skills = new Dictionary<SkillType, Skill>(); skillByName = new Dictionary<string, Skill>(); InitializedTerminal = false; hasConfigSync = true; Harmony val = new Harmony("org.bepinex.helpers.skillmanager"); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(FejdStartup), "Awake", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_FejdStartup", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "GetSkillDef", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_GetSkillDef", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatRaiseSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatRaiseskill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "CheatResetSkill", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_CheatResetSkill", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "LoadCSV", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(LocalizeKey), "AddLocalizedKeys", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Terminal), "InitTerminal", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_InitTerminal_Prefix", (Type[])null, (Type[])null)), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Terminal_InitTerminal", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Localization), "SetupLanguage", (Type[])null, (Type[])null), (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(LocalizationCache), "LocalizationPostfix", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null); val.Patch((MethodBase)AccessTools.DeclaredMethod(typeof(Skills), "OnDeath", (Type[])null, (Type[])null), new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_OnDeath_Prefix", (Type[])null, (Type[])null)), (HarmonyMethod)null, (HarmonyMethod)null, new HarmonyMethod(AccessTools.DeclaredMethod(typeof(Skill), "Patch_Skills_OnDeath_Finalizer", (Type[])null, (Type[])null)), (HarmonyMethod)null); } private static void Patch_FejdStartup() { //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Expected O, but got Unknown //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Expected O, but got Unknown //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Expected O, but got Unknown foreach (Skill skill in skills.Values) { if (skill.Configurable) { string key = skill.Name.Key; string group = new Regex("['[\"\\]]").Replace(english.Localize(key), "").Trim(); string category = Localization.instance.Localize(key).Trim(); ConfigEntry<float> skillGain = config(group, "Skill gain factor", skill.SkillGainFactor, new ConfigDescription("The rate at which you gain experience for the skill.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 5f), new object[1] { new ConfigurationManagerAttributes { Category = category } })); skill.SkillGainFactor = skillGain.Value; skillGain.SettingChanged += [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] (object _, EventArgs _) => { skill.SkillGainFactor = skillGain.Value; }; ConfigEntry<float> skillEffect = config(group, "Skill effect factor", skill.SkillEffectFactor, new ConfigDescription("The power of the skill, based on the default power.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0.01f, 5f), new object[1] { new ConfigurationManagerAttributes { Category = category } })); skill.SkillEffectFactor = skillEffect.Value; skillEffect.SettingChanged += [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] (object _, EventArgs _) => { skill.SkillEffectFactor = skillEffect.Value; }; ConfigEntry<int> skillLoss = config(group, "Skill loss", skill.skillLoss, new ConfigDescription("How much experience to lose on death.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 100), new object[1] { new ConfigurationManagerAttributes { Category = category } })); skill.skillLoss = skillLoss.Value; skillLoss.SettingChanged += [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] (object _, EventArgs _) => { skill.skillLoss = skillLoss.Value; }; } } } private static void Patch_Skills_GetSkillDef([<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] ref SkillDef __result, List<SkillDef> ___m_skills, SkillType type) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) if (__result == null) { SkillDef val = GetSkillDef(type); if (val != null) { ___m_skills.Add(val); __result = val; } } } private static bool Patch_Skills_CheatRaiseskill(Skills __instance, string name, float value, Player ___m_player) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) foreach (SkillType key in skills.Keys) { SkillType current = key; Skill skill = skills[current]; if (string.Equals(skill.internalSkillName, name, StringComparison.CurrentCultureIgnoreCase)) { Skill skill2 = __instance.GetSkill(current); skill2.m_level += value; skill2.m_level = Mathf.Clamp(skill2.m_level, 0f, 100f); ((Character)___m_player).Message((MessageType)1, "Skill increased " + Localization.instance.Localize("$skill_" + ((object)(SkillType)(ref current)).ToString()) + ": " + (int)skill2.m_level, 0, skill2.m_info.m_icon); Console.instance.Print("Skill " + skill.internalSkillName + " = " + skill2.m_level); return false; } } return true; } private static bool Patch_Skills_CheatResetSkill(Skills __instance, string name) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) foreach (SkillType key in skills.Keys) { Skill skill = skills[key]; if (string.Equals(skill.internalSkillName, name, StringComparison.CurrentCultureIgnoreCase)) { __instance.ResetSkill(key); Console.instance.Print("Skill " + skill.internalSkillName + " reset"); return false; } } return true; } private static void Patch_Skills_OnDeath_Prefix(Skills __instance, [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(new byte[] { 2, 1 })] ref Dictionary<SkillType, Skill> __state) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) if (__state == null) { __state = new Dictionary<SkillType, Skill>(); } foreach (KeyValuePair<SkillType, Skill> skill in skills) { if (__instance.m_skillData.TryGetValue(skill.Key, out var value)) { __state[skill.Key] = value; if (skill.Value.skillLoss > 0) { Skill obj = value; obj.m_level -= value.m_level * (float)skill.Value.SkillLoss / 100f; value.m_accumulator = 0f; } __instance.m_skillData.Remove(skill.Key); } } } private static void Patch_Skills_OnDeath_Finalizer(Skills __instance, [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(new byte[] { 2, 1 })] ref Dictionary<SkillType, Skill> __state) { //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (__state == null) { return; } foreach (KeyValuePair<SkillType, Skill> item in __state) { __instance.m_skillData[item.Key] = item.Value; } __state = null; } private static void Patch_Terminal_InitTerminal_Prefix() { InitializedTerminal = Terminal.m_terminalInitialized; } private static void Patch_Terminal_InitTerminal() { if (!InitializedTerminal) { AddSkill(Terminal.commands["raiseskill"]); AddSkill(Terminal.commands["resetskill"]); } static void AddSkill(ConsoleCommand command) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Expected O, but got Unknown ConsoleOptionsFetcher fetcher = command.m_tabOptionsFetcher; command.m_tabOptionsFetcher = (ConsoleOptionsFetcher)([<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] () => { List<string> list = fetcher.Invoke(); list.AddRange(skills.Values.Select([<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(0)] (Skill skill) => skill.internalSkillName)); return list; }); } } [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(2)] private static SkillDef GetSkillDef(SkillType skillType) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) if (!skills.ContainsKey(skillType)) { return null; } Skill skill = skills[skillType]; return skill.skillDef; } private static byte[] ReadEmbeddedFileBytes(string name) { using MemoryStream memoryStream = new MemoryStream(); Assembly.GetExecutingAssembly().GetManifestResourceStream(Assembly.GetExecutingAssembly().GetName().Name + "." + name).CopyTo(memoryStream); return memoryStream.ToArray(); } private static Texture2D loadTexture(string name) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Expected O, but got Unknown Texture2D val = new Texture2D(0, 0); ImageConversion.LoadImage(val, ReadEmbeddedFileBytes("icons." + name)); return val; } private static Sprite loadSprite(string name, int width, int height) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) return Sprite.Create(loadTexture(name), new Rect(0f, 0f, (float)width, (float)height), Vector2.zero); } private static ConfigEntry<T> config<[<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] T>(string group, string name, T value, ConfigDescription description) { ConfigEntry<T> val = plugin.Config.Bind<T>(group, name, value, description); configSync?.GetType().GetMethod("AddConfigEntry").MakeGenericMethod(typeof(T)) .Invoke(configSync, new object[1] { val }); return val; } private static ConfigEntry<T> config<[<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(2)] T>(string group, string name, T value, string description) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown return config(group, name, value, new ConfigDescription(description, (AcceptableValueBase)null, Array.Empty<object>())); } } [PublicAPI] [<5b11cb03-1a37-4abc-8b4c-e007bf744c0c>NullableContext(1)] [<4f4dea1a-1011-467e-95fd-88719f1ff74d>Nullable(0)] public static class SkillExtensions { public static float GetSkillFactor(this Character character, string name) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return character.GetSkillFactor(Skill.fromName(name)) * Skill.skillByName[name].SkillEffectFactor; } public static float GetSkillFactor(this Skills skills, string name) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return skills.GetSkillFactor(Skill.fromName(name)) * Skill.skillByName[name].SkillEffectFactor; } public static void RaiseSkill(this Character character, string