Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Cannons v0.1.0
Cannons.dll
Decompiled 2 years agousing System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using HarmonyLib; using Jotunn; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Navalheim")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Navalheim")] [assembly: AssemblyCopyright("Copyright © 2023")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("17516a32-190f-4873-8df2-3ba09afa9180")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("1.0.0.0")] namespace Cannons; public class Cannon : MonoBehaviour, Interactable, Hoverable { public string m_name = "Cañón"; public GameObject barrel; private Collider barrelCollider; public float maxPushForce = 100f; public float pushMultiplier = 1f; public Transform playerAttach; public Projectile projectile; public GameObject projectilePrefab; public Transform projectileSpawnPoint; public float projectileSpeed = 40f; public float projectileLifeTime = 15f; private bool reloading = false; private float fireTimer = 0f; private Quaternion originalBarrelRotation; private Player player; private bool loadedProjectile; private GameObject currentProjectile; private static ItemData arbalestItem; private static ItemData blackmetalBolt; private void Awake() { } private void Start() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) playerAttach = barrel.transform.parent.parent.Find("attach"); barrelCollider = barrel.GetComponentInChildren<Collider>(); originalBarrelRotation = barrel.transform.rotation; arbalestItem = PrefabManager.Instance.GetPrefab("DvergerArbalest").GetComponent<ItemDrop>().m_itemData; blackmetalBolt = PrefabManager.Instance.GetPrefab("BoltBlackmetal").GetComponent<ItemDrop>().m_itemData; } private void Update() { //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)player != (Object)null && Cannons.usingCannon) { if (!((Character)player).IsAttached()) { SetActive(value: false); } if (fireTimer >= 1f) { reloading = false; } if (reloading) { fireTimer += Time.deltaTime; } if ((Object)(object)barrel != (Object)null && (Object)(object)Cannons.cameraTransform != (Object)null) { barrel.transform.LookAt(Cannons.cameraTransform.position + Cannons.cameraTransform.forward * 100f); } if (Input.GetKeyDown((KeyCode)102) && loadedProjectile && !reloading) { ShootProjectile(); } } } public string GetHoverText() { if (!Cannons.usingCannon) { if (!loadedProjectile) { return Localization.instance.Localize(m_name + "\n[<color=yellow><b>$KEY_Use</b></color>] Cargar munición "); } return Localization.instance.Localize("\n[<color=yellow><b>$KEY_Use</b></color>] Usar " + m_name); } return ""; } public string GetHoverName() { return m_name; } public bool Interact(Humanoid _player, bool hold, bool alt) { //IL_0046: Unknown result type (might be due to invalid IL or missing references) if (loadedProjectile) { SetActive(value: true); player = Player.m_localPlayer; ((Character)player).AttachStart(playerAttach, (GameObject)null, true, false, true, "crouching", new Vector3(0f, 0.5f, 0f), (Transform)null); if (((Character)player).IsAttached()) { Logger.LogInfo((object)(player.GetPlayerName() + " is using the cannon")); } ((Collider)((Character)player).GetCollider()).enabled = false; barrelCollider.enabled = false; return true; } LoadProjectile(); return true; } public bool UseItem(Humanoid player, ItemData item) { return false; } private void SetActive(bool value) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) Cannons.usingCannon = value; Cannons.aiming = value; if (!value) { ((Collider)((Character)player).GetCollider()).enabled = true; if (((Character)player).IsAttached()) { ((Character)player).AttachStop(); } barrel.transform.rotation = originalBarrelRotation; barrelCollider.enabled = true; player = null; } } public void LoadProjectile() { //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) if (!loadedProjectile) { string name = PrefabManager.Instance.GetPrefab("Cannonball").GetComponent<ItemDrop>().m_itemData.m_shared.m_name; if (!((Humanoid)Player.m_localPlayer).GetInventory().HaveItem(name, true)) { ((Character)Player.m_localPlayer).Message((MessageType)2, "No tienes " + name, 0, (Sprite)null); return; } ((Humanoid)Player.m_localPlayer).GetInventory().RemoveItem(name, 1, -1, true); Object.Instantiate<GameObject>(Cannons.cannonLoadSfx, ((Component)this).transform.position, ((Component)this).transform.rotation); loadedProjectile = true; } } public void ShootProjectile() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_005b: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Expected O, but got Unknown //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) currentProjectile = Object.Instantiate<GameObject>(projectilePrefab, projectileSpawnPoint.position + projectileSpawnPoint.forward * 0.5f, projectileSpawnPoint.rotation); projectile = currentProjectile.GetComponent<Projectile>(); projectile.m_damage = new DamageTypes { m_blunt = Cannons.CannonballProjectileBluntDamage.Value, m_chop = Cannons.CannonballProjectileChopDamage.Value }; projectile.m_spawnOnHit = Cannons.cannonballHitAoe; projectile.m_spawnOnHit.GetComponent<Aoe>().m_damage = new DamageTypes { m_blunt = 100f }; projectile.m_canHitWater = false; currentProjectile.SetActive(false); HitData val = new HitData(); val.m_pushForce = projectileSpeed; val.m_backstabBonus = 4f; val.m_staggerMultiplier = 10f; val.m_blockable = false; val.m_dodgeable = true; val.SetAttacker((Character)(object)player); currentProjectile.SetActive(true); Object.Instantiate<GameObject>(Cannons.cannonFireSfx, projectileSpawnPoint.position, projectileSpawnPoint.rotation); IProjectile component = currentProjectile.GetComponent<IProjectile>(); if (component != null) { component.Setup((Character)(object)player, currentProjectile.transform.forward * projectileSpeed, 50f, val, arbalestItem, blackmetalBolt); } Object.Destroy((Object)(object)currentProjectile, projectileLifeTime); arbalestItem.m_lastProjectile = currentProjectile; reloading = true; fireTimer = 0f; loadedProjectile = false; currentProjectile = null; } public void OnDestroy() { if ((Object)(object)player != (Object)null && Cannons.usingCannon) { SetActive(value: false); } } } internal class Cannonball : MonoBehaviour { public Collider collider = (Collider)new SphereCollider { isTrigger = true, radius = 0.45f }; private bool didHit = false; private void Start() { } private void FixedUpdate() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) if (didHit) { GameObject val = Object.Instantiate<GameObject>(PrefabManager.Instance.GetPrefab("sledge_aoe")); val.transform.rotation = new Quaternion { x = 0f, y = 0f, z = 90f }; Object.DestroyImmediate((Object)(object)((Component)this).gameObject); didHit = false; } } private void OnTriggerEnter(Collider other) { Logger.LogInfo((object)("Cannonball hit: " + ((Object)((Component)other).gameObject).name)); if (!((Object)((Component)other).gameObject).name.Contains("WaterVolume")) { didHit = true; } } } [BepInPlugin("com.valkyrie.cannons", "Cannons!", "0.0.1")] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class Cannons : BaseUnityPlugin { public class ShowCoordsCommand : ConsoleCommand { public override string Name => "coords"; public override string Help => "Toggles showing coordinates con top left corner"; public override void Run(string[] args) { if (!showCoords) { if (GUIManager.Instance == null) { Logger.LogError((object)"GUIManager instance is null"); } else if (!Object.op_Implicit((Object)(object)GUIManager.CustomGUIFront)) { Logger.LogError((object)"GUIManager CustomGUI is null"); } else { showCoords = true; } } else { showCoords = false; } } } [HarmonyPatch] public static class GameCameraPatch { [HarmonyPatch(typeof(GameCamera), "GetCameraPosition")] [HarmonyPriority(100)] [HarmonyPostfix] private static void GetCameraPosition_Postfix(GameCamera __instance, float dt, Vector3 pos, Quaternion rot) { if ((Object)(object)__instance != (Object)null && originalFov == 0f) { originalFov = __instance.m_fov; } } [HarmonyPriority(0)] [HarmonyPrefix] [HarmonyPatch(typeof(GameCamera), "UpdateCamera")] public static void UpdateCamera_Prefix(GameCamera __instance) { if (usingCannon) { cameraTransform = ((Component)__instance).transform; if (Input.GetKey((KeyCode)304)) { __instance.m_fov = zoomFov; } if (Input.GetKeyUp((KeyCode)304)) { __instance.m_fov = originalFov; } } } } public static class PlayerPatches { [HarmonyPatch(typeof(Player), "Update")] private static class PlayerUpdatePatch { private static void Postfix() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)Player.m_localPlayer) && showCoords && !Object.op_Implicit((Object)(object)coordsText)) { playerPosition = ((Component)Player.m_localPlayer).transform.position; Object.DestroyImmediate((Object)(object)coordsText); coordsText = GUIManager.Instance.CreateText(GetPositionString(), GUIManager.CustomGUIFront.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(0f, -50f), GUIManager.Instance.AveriaSerifBold, 18, Color.white, false, Color.white, 350f, 40f, false); } else { coordsText = null; } } } [HarmonyPatch(typeof(Player), "PlayerAttackInput")] private static class PlayerAttackInputPatch { private static bool Prefix() { if (usingCannon) { return false; } return true; } } [HarmonyPatch(typeof(Character), "Damage")] private static class CharacterDamagePatch { private static bool Prefix() { if ((Object)(object)ZNet.instance != (Object)null && ZNet.instance.HasBadConnection() && Mathf.Sin(Time.time * 10f) > 0f) { return false; } return true; } } } private static readonly Cannons instance; public const string PluginGUID = "com.valkyrie.cannons"; public const string PluginName = "Cannons!"; public const string PluginVersion = "0.0.1"; public static AssetBundle bundle; private static readonly string pluginPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); private static readonly string configPath = Paths.ConfigPath; private static Harmony harm = new Harmony("ValkyrieCannons"); private static AudioSource sfxGroup; public static bool usingCannon = false; public static bool aiming = false; public static CustomPiece cannonDrakkar; public static float originalFov; public static float zoomFov = 30f; public static Vector3 playerHitPoint; public static Transform cameraTransform; public static GameObject salitre; public static GameObject cannonPrefab; public static GameObject cannonballPrefab; public static GameObject cannonFireSfx; public static GameObject cannonLoadSfx; public static GameObject cannonballHitSfx; public static GameObject cannonballProjectile; public static GameObject cannonballHitAoe; public static GameObject coordsText; public static bool showCoords; public static Vector3 playerPosition; private static string ConfigFileName = "com.valkyrie.cannons.cfg"; private static string ConfigFileFullPath; public static ConfigEntry<int> CannonShipIronCost; public static ConfigEntry<int> CannonShipFinewoodCost; public static ConfigEntry<int> CannonShipAncientBarkCost; public static ConfigEntry<int> CannonballSalitreCost; public static ConfigEntry<float> CannonballWeight; public static ConfigEntry<float> CannonballProjectileBluntDamage; public static ConfigEntry<float> CannonballProjectileChopDamage; public static ConfigEntry<float> CannonballSplashDamage; public static ConfigEntry<int> CannonballIronCost; public static ConfigEntry<int> CannonballCoalCost; public static ConfigEntry<int> SalitreMinYield; public static ConfigEntry<int> SalitreMaxYield; private static bool IsServer => (int)SystemInfo.graphicsDeviceType == 4; private void Awake() { bundle = AssetUtils.LoadAssetBundleFromResources("cannons"); CreateConfigValues(); SetupWatcher(); LoadAssets(); CommandManager.Instance.AddConsoleCommand((ConsoleCommand)(object)new ShowCoordsCommand()); PrefabManager.OnVanillaPrefabsAvailable += OnVanillaPrefabsAvailable; harm.PatchAll(); } private static string GetPositionString() { return "Coords: " + playerPosition.x.ToString("F1") + "/" + playerPosition.y.ToString("F1") + "/" + playerPosition.z.ToString("F1"); } private static void setPosition(GameObject extensions, GameObject ship, bool rotate = false) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) extensions.transform.position = ship.transform.position; extensions.transform.parent = ship.transform; extensions.transform.localPosition = new Vector3(2f, 1f, 0f); extensions.transform.rotation = Quaternion.Euler(0f, 90f, 0f); } private void LoadAssets() { //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) salitre = bundle.LoadAsset<GameObject>("Salitre"); cannonPrefab = bundle.LoadAsset<GameObject>("Cannon"); cannonballPrefab = bundle.LoadAsset<GameObject>("Cannonball"); cannonballHitAoe = bundle.LoadAsset<GameObject>("cannonball_aoe"); cannonFireSfx = bundle.LoadAsset<GameObject>("sfx_cannon_fire"); cannonLoadSfx = bundle.LoadAsset<GameObject>("sfx_cannon_load"); cannonballHitSfx = bundle.LoadAsset<GameObject>("sfx_cannonball_hit"); cannonballProjectile = bundle.LoadAsset<GameObject>("cannonball_projectile"); PrefabManager.Instance.AddPrefab(cannonballProjectile); PrefabManager.Instance.AddPrefab(cannonFireSfx); PrefabManager.Instance.AddPrefab(cannonLoadSfx); PrefabManager.Instance.AddPrefab(cannonballHitSfx); cannonballHitAoe.GetComponent<Aoe>().m_damage = new DamageTypes { m_blunt = CannonballSplashDamage.Value }; ZNetView val = cannonPrefab.GetComponent<ZNetView>(); if ((Object)(object)val == (Object)null) { val = cannonPrefab.AddComponent<ZNetView>(); } val.m_persistent = true; cannonPrefab.AddComponent<ZSyncTransform>(); Cannon cannon = cannonPrefab.AddComponent<Cannon>(); Transform val2 = cannonPrefab.transform.Find("cannon"); cannon.barrel = ((Component)val2.Find("barrel")).gameObject; cannon.playerAttach = val2.Find("attach"); cannon.projectilePrefab = cannonballProjectile; cannon.projectileSpawnPoint = cannon.barrel.transform.Find("BarrelTip"); } private void OnVanillaPrefabsAvailable() { SetupSFX(); AddSalitre(); AddCannonball(); AddCannonDrakkar(); SetupDrops(); } private void AddSalitre() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown Sprite val = RenderManager.Instance.Render(salitre, RenderManager.IsometricRotation); GameObject obj = salitre; ItemConfig val2 = new ItemConfig(); val2.Enabled = false; val2.Name = "Salitre"; val2.Description = "Uno de los ingredientes de la pólvora. Sirve para crear bolas de cañón."; val2.Icons = (Sprite[])(object)new Sprite[1] { val }; CustomItem val3 = new CustomItem(obj, false, val2); ItemManager.Instance.AddItem(val3); } private void SetupDrops() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) GameObject prefab = Cache.GetPrefab<GameObject>("Leviathan"); MineRock component = prefab.GetComponent<MineRock>(); DropData item = default(DropData); item.m_item = PrefabManager.Instance.GetPrefab("Salitre"); item.m_stackMax = 1; item.m_stackMin = 1; item.m_weight = 1f; item.m_dontScale = false; component.m_dropItems.m_drops.Add(item); } private void SetupSFX() { sfxGroup = Cache.GetPrefab<AudioSource>("sfx_arrow_hit"); cannonFireSfx.GetComponentInChildren<AudioSource>().outputAudioMixerGroup = sfxGroup.outputAudioMixerGroup; cannonLoadSfx.GetComponentInChildren<AudioSource>().outputAudioMixerGroup = sfxGroup.outputAudioMixerGroup; cannonballHitSfx.GetComponentInChildren<AudioSource>().outputAudioMixerGroup = sfxGroup.outputAudioMixerGroup; } private void AddCannonball() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Expected O, but got Unknown //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Expected O, but got Unknown //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Expected O, but got Unknown //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Expected O, but got Unknown //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Expected O, but got Unknown //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Expected O, but got Unknown //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Expected O, but got Unknown //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Expected O, but got Unknown Sprite val = RenderManager.Instance.Render(cannonballPrefab, RenderManager.IsometricRotation); GameObject obj = cannonballPrefab; ItemConfig val2 = new ItemConfig(); val2.CraftingStation = "forge"; val2.Icons = (Sprite[])(object)new Sprite[1] { val }; val2.Weight = CannonballWeight.Value; val2.StackSize = 20; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig { Item = "Salitre", Amount = CannonballSalitreCost.Value }, new RequirementConfig { Item = "Coal", Amount = CannonballCoalCost.Value }, new RequirementConfig { Item = "Iron", Amount = CannonballIronCost.Value } }; CustomItem val3 = new CustomItem(obj, false, val2); RecipeConfig val4 = new RecipeConfig(); val4.Item = "Cannonball"; val4.Name = "Cannonballx5"; val4.Amount = 5; val4.Requirements = (RequirementConfig[])(object)new RequirementConfig[3] { new RequirementConfig { Item = "Salitre", Amount = CannonballSalitreCost.Value * 5 }, new RequirementConfig { Item = "Coal", Amount = CannonballCoalCost.Value * 5 }, new RequirementConfig { Item = "Iron", Amount = CannonballIronCost.Value * 5 } }; CustomRecipe val5 = new CustomRecipe(val4); ItemManager.Instance.AddRecipe(val5); ItemManager.Instance.AddItem(val3); } private static void AddCannonPiece() { //IL_000b: 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_002b: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Expected O, but got Unknown Sprite icon = RenderManager.Instance.Render(cannonPrefab, RenderManager.IsometricRotation); GameObject val = cannonPrefab; val.AddComponent<Piece>(); PieceConfig val2 = new PieceConfig(); val2.Name = "Cañón"; val2.PieceTable = "Hammer"; val2.Category = "Misc"; val2.Icon = icon; val2.Requirements = (RequirementConfig[])(object)new RequirementConfig[1] { new RequirementConfig { Item = "Wood", Amount = 2, Recover = true } }; CustomPiece val3 = new CustomPiece(val, false, val2); ((Object)val3.PiecePrefab).name = "piece_cannon"; PieceManager.Instance.AddPiece(val3); } private static void AddCannonDrakkar() { //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: Expected O, but got Unknown //IL_0300: Unknown result type (might be due to invalid IL or missing references) //IL_0305: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_0323: Expected O, but got Unknown //IL_0325: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_0336: Unknown result type (might be due to invalid IL or missing references) //IL_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Expected O, but got Unknown //IL_034a: Unknown result type (might be due to invalid IL or missing references) //IL_034f: Unknown result type (might be due to invalid IL or missing references) //IL_035b: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_0375: Expected O, but got Unknown //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_037c: Unknown result type (might be due to invalid IL or missing references) //IL_0388: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03a2: Expected O, but got Unknown //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03b5: Unknown result type (might be due to invalid IL or missing references) //IL_03c6: Unknown result type (might be due to invalid IL or missing references) //IL_03cf: Expected O, but got Unknown //IL_03d7: Unknown result type (might be due to invalid IL or missing references) //IL_03e1: Expected O, but got Unknown GameObject prefab = Cache.GetPrefab<GameObject>("VikingShip"); GameObject val = bundle.LoadAsset<GameObject>("CannonShip"); Transform val2 = val.transform.Find("ship").Find("visual").Find("watermask"); Transform val3 = prefab.transform.Find("ship").Find("visual").Find("watermask"); Transform val4 = val.transform.Find("watereffects"); Transform val5 = prefab.transform.Find("watereffects"); Transform val6 = val4.Find("splash_effects"); Transform val7 = val5.Find("splash_effects"); Transform val8 = val4.Find("SpeedWake"); Transform val9 = val5.Find("SpeedWake"); ParticleSystemRenderer[] componentsInChildren = ((Component)val8).GetComponentsInChildren<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val10 in componentsInChildren) { if (((Object)((Component)val10).transform).name == "Trail") { ((Renderer)val10).material = ((Renderer)((Component)val9.Find("Trail")).GetComponentInChildren<ParticleSystemRenderer>()).material; } else { ((Renderer)val10).material = ((Renderer)((Component)val9.Find("rudder")).GetComponentInChildren<ParticleSystemRenderer>()).material; } } WaterTrigger[] componentsInChildren2 = ((Component)val6).GetComponentsInChildren<WaterTrigger>(); foreach (WaterTrigger val11 in componentsInChildren2) { val11.m_effects.m_effectPrefabs = ((Component)val7).GetComponentInChildren<WaterTrigger>().m_effects.m_effectPrefabs; } ((Renderer)((Component)val4.Find("WaterSurface")).GetComponentInChildren<ParticleSystemRenderer>()).material = ((Renderer)((Component)val5.Find("WaterSurface")).GetComponentInChildren<ParticleSystemRenderer>()).material; prefab.transform.Find("watereffects").localPosition = new Vector3(0f, -0.7999992f, 0f); ((Renderer)((Component)val2).GetComponent<MeshRenderer>()).materials = ((Renderer)((Component)val3).GetComponent<MeshRenderer>()).materials; Transform val12 = val.transform.Find("interactive"); Transform val13 = val12.Find("cannons"); for (int k = 0; k < val13.childCount; k++) { Transform child = val13.GetChild(k); Cannon cannon = ((Component)child).gameObject.AddComponent<Cannon>(); Transform val14 = child.Find("cannon"); cannon.barrel = ((Component)val14.Find("barrel")).gameObject; cannon.playerAttach = child.Find("attach"); cannon.projectilePrefab = cannonballProjectile; cannon.projectileSpawnPoint = cannon.barrel.transform.Find("BarrelTip"); } PieceConfig val15 = new PieceConfig(); val15.Name = "Drakkar de Cañón"; val15.Icon = val.GetComponent<Piece>().m_icon; val15.Category = "Misc"; val15.PieceTable = "Hammer"; val15.Requirements = (RequirementConfig[])(object)new RequirementConfig[5] { new RequirementConfig { Item = "IronNails", Amount = 100, Recover = true }, new RequirementConfig { Item = "DeerHide", Amount = 10, Recover = true }, new RequirementConfig { Item = "FineWood", Amount = CannonShipFinewoodCost.Value, Recover = true }, new RequirementConfig { Item = "ElderBark", Amount = CannonShipAncientBarkCost.Value, Recover = true }, new RequirementConfig { Item = "Iron", Amount = CannonShipIronCost.Value, Recover = true } }; cannonDrakkar = new CustomPiece(val, true, val15); PieceManager.Instance.AddPiece(cannonDrakkar); } 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 { Logger.LogDebug((object)"Attempting to reload configuration..."); ((BaseUnityPlugin)this).Config.Reload(); } catch { Logger.LogError((object)("There was an issue loading " + ConfigFileName)); } } private void CreateConfigValues() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Expected O, but got Unknown //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Expected O, but got Unknown //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Expected O, but got Unknown //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Expected O, but got Unknown //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01d0: Expected O, but got Unknown //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Expected O, but got Unknown //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Expected O, but got Unknown //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Expected O, but got Unknown //IL_0330: Unknown result type (might be due to invalid IL or missing references) //IL_033a: Expected O, but got Unknown //IL_038a: Unknown result type (might be due to invalid IL or missing references) //IL_0394: Expected O, but got Unknown ((BaseUnityPlugin)this).Config.SaveOnConfigSet = true; ConfigurationManagerAttributes val = new ConfigurationManagerAttributes { IsAdminOnly = true }; AcceptableValueRange<float> val2 = new AcceptableValueRange<float>(0f, 1000f); CannonballWeight = ((BaseUnityPlugin)this).Config.Bind<float>("Cannonball", "Item Weight", 10f, new ConfigDescription("Weight of the cannonball item.", (AcceptableValueBase)(object)val2, new object[1] { val })); CannonballWeight.SettingChanged += delegate { ItemManager.Instance.GetItem("Cannonball").ItemDrop.m_itemData.m_shared.m_weight = CannonballWeight.Value; }; CannonballProjectileBluntDamage = ((BaseUnityPlugin)this).Config.Bind<float>("Cannonball", "Projectile Blunt Damage", 130f, new ConfigDescription("Blunt damage for the cannonball projectile impact.", (AcceptableValueBase)(object)val2, new object[1] { val })); CannonballProjectileBluntDamage.SettingChanged += delegate { ItemManager.Instance.GetItem("Cannonball").ItemDrop.m_itemData.m_shared.m_damages.m_blunt = CannonballProjectileBluntDamage.Value; }; CannonballProjectileChopDamage = ((BaseUnityPlugin)this).Config.Bind<float>("Cannonball", "Projectile Chop Damage", 40f, new ConfigDescription("Chop damage for the cannonball projectile impact.", (AcceptableValueBase)(object)val2, new object[1] { val })); CannonballProjectileChopDamage.SettingChanged += delegate { ItemManager.Instance.GetItem("Cannonball").ItemDrop.m_itemData.m_shared.m_damages.m_chop = CannonballProjectileChopDamage.Value; }; CannonballSplashDamage = ((BaseUnityPlugin)this).Config.Bind<float>("Cannonball", "Splash Blunt Damage", 70f, new ConfigDescription("Blunt damage for the cannonball splash damage.", (AcceptableValueBase)(object)val2, new object[1] { val })); CannonballSplashDamage.SettingChanged += delegate { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0024: 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) cannonballHitAoe.GetComponent<Aoe>().m_damage = new DamageTypes { m_blunt = CannonballSplashDamage.Value }; }; CannonShipIronCost = ((BaseUnityPlugin)this).Config.Bind<int>("Cannon Drakkar", "Iron Cost", 40, new ConfigDescription("Iron cost for the Cannon Drakkar.", (AcceptableValueBase)null, new object[1] { val })); CannonShipIronCost.SettingChanged += delegate { Requirement[] resources9 = PieceManager.Instance.GetPiece("CannonShip").Piece.m_resources; foreach (Requirement val11 in resources9) { if (!(((Object)((Component)val11.m_resItem).gameObject).name != "Iron")) { val11.m_amount = CannonShipIronCost.Value; } } }; CannonShipFinewoodCost = ((BaseUnityPlugin)this).Config.Bind<int>("Cannon Drakkar", "Finewood Cost", 50, new ConfigDescription("Finewood cost for the Cannon Drakkar.", (AcceptableValueBase)null, new object[1] { val })); CannonShipFinewoodCost.SettingChanged += delegate { Requirement[] resources8 = PieceManager.Instance.GetPiece("CannonShip").Piece.m_resources; foreach (Requirement val10 in resources8) { if (!(((Object)((Component)val10.m_resItem).gameObject).name != "FineWood")) { val10.m_amount = CannonShipFinewoodCost.Value; } } }; CannonShipAncientBarkCost = ((BaseUnityPlugin)this).Config.Bind<int>("Cannon Drakkar", "Ancient Bark Cost", 50, new ConfigDescription("Ancient Bark cost for the Cannon Drakkar.", (AcceptableValueBase)null, new object[1] { val })); CannonShipAncientBarkCost.SettingChanged += delegate { Requirement[] resources7 = PieceManager.Instance.GetPiece("CannonShip").Piece.m_resources; foreach (Requirement val9 in resources7) { if (!(((Object)((Component)val9.m_resItem).gameObject).name != "ElderBark")) { val9.m_amount = CannonShipAncientBarkCost.Value; } } }; CannonballSalitreCost = ((BaseUnityPlugin)this).Config.Bind<int>("Cannonball", "Salitre Cost", 1, new ConfigDescription("Salitre cost for the cannonball item.", (AcceptableValueBase)null, new object[1] { val })); CannonballSalitreCost.SettingChanged += delegate { Requirement[] resources5 = ItemManager.Instance.GetRecipe("Cannonball").Recipe.m_resources; foreach (Requirement val7 in resources5) { if (!(((Object)((Component)val7.m_resItem).gameObject).name != "Salitre")) { val7.m_amount = CannonballSalitreCost.Value; } } Requirement[] resources6 = ItemManager.Instance.GetRecipe("Cannonballx5").Recipe.m_resources; foreach (Requirement val8 in resources6) { if (!(((Object)((Component)val8.m_resItem).gameObject).name != "Salitre")) { val8.m_amount = CannonballSalitreCost.Value * 5; } } }; CannonballIronCost = ((BaseUnityPlugin)this).Config.Bind<int>("Cannonball", "Iron Cost", 1, new ConfigDescription("Iron cost for the cannonball item.", (AcceptableValueBase)null, new object[1] { val })); CannonballIronCost.SettingChanged += delegate { Requirement[] resources3 = ItemManager.Instance.GetRecipe("Cannonball").Recipe.m_resources; foreach (Requirement val5 in resources3) { if (!(((Object)((Component)val5.m_resItem).gameObject).name != "Iron")) { val5.m_amount = CannonballIronCost.Value; } } Requirement[] resources4 = ItemManager.Instance.GetRecipe("Cannonballx5").Recipe.m_resources; foreach (Requirement val6 in resources4) { if (!(((Object)((Component)val6.m_resItem).gameObject).name != "Iron")) { val6.m_amount = CannonballIronCost.Value * 5; } } }; CannonballCoalCost = ((BaseUnityPlugin)this).Config.Bind<int>("Cannonball", "Coal Cost", 1, new ConfigDescription("Coal cost for the cannonball item.", (AcceptableValueBase)null, new object[1] { val })); CannonballCoalCost.SettingChanged += delegate { Requirement[] resources = ItemManager.Instance.GetRecipe("Cannonball").Recipe.m_resources; foreach (Requirement val3 in resources) { if (!(((Object)((Component)val3.m_resItem).gameObject).name != "Coal")) { val3.m_amount = CannonballCoalCost.Value; } } Requirement[] resources2 = ItemManager.Instance.GetRecipe("Cannonballx5").Recipe.m_resources; foreach (Requirement val4 in resources2) { if (!(((Object)((Component)val4.m_resItem).gameObject).name != "Coal")) { val4.m_amount = CannonballCoalCost.Value * 5; } } }; SynchronizationManager.OnConfigurationSynchronized += delegate(object obj, ConfigurationSynchronizationEventArgs attr) { if (attr.InitialSynchronization) { ((BaseUnityPlugin)this).Logger.LogMessage((object)"Initial Config sync event received for Cannons"); } else { ((BaseUnityPlugin)this).Logger.LogMessage((object)"Config sync event received for Cannons"); } }; } static Cannons() { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown string text = Paths.ConfigPath; char directorySeparatorChar = Path.DirectorySeparatorChar; ConfigFileFullPath = text + directorySeparatorChar + ConfigFileName; } }