using System; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using Alexandria.BreakableAPI; using Alexandria.ItemAPI; using Alexandria.Misc; using Alexandria.SoundAPI; using BepInEx; using Gungeon; using Microsoft.CodeAnalysis; using SteveCC; 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("Mod")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Mod")] [assembly: AssemblyCopyright("Copyright © 2020")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("d6d7a494-722e-4763-959b-c2d6b6a42b01")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace Mod { public class ExamplePassive : PassiveItem { public static void Register() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) string text = "Example Item Name"; string text2 = "SteveCC/Resources/example_item_sprite"; GameObject val = new GameObject(text); ExamplePassive examplePassive = val.AddComponent(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "Example Short Desc."; string text4 = "Example Long Description\n\nWow this description is really looooooooooong!"; ItemBuilder.SetupItem((PickupObject)(object)examplePassive, text3, text4, "example"); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)examplePassive, (StatType)3, 1f, (ModifyMethod)0); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)examplePassive, (StatType)4, 1f, (ModifyMethod)0); ((PickupObject)examplePassive).quality = (ItemQuality)2; } public override void Pickup(PlayerController player) { ((PassiveItem)this).Pickup(player); Plugin.Log("Player picked up " + ((PickupObject)this).DisplayName); } public override void DisableEffect(PlayerController player) { Plugin.Log("Player dropped or got rid of " + ((PickupObject)this).DisplayName); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("fenix.etg.stevecc", "Steve CC", "0.0.1")] public class Plugin : BaseUnityPlugin { public const string GUID = "fenix.etg.stevecc"; public const string NAME = "Steve CC"; public const string VERSION = "0.0.1"; public const string TEXT_COLOR = "#00FFFF"; public void Start() { ETGModMainBehaviour.WaitForGameManagerStart((Action)GMStart); } public void GMStart(GameManager g) { SoundManager.LoadSoundbanksFromAssembly((Assembly)null); Looting.Init(); SplashPot.Init(); BowGun.Add(); Emerald.Add(); HeroOfTheVillage.Init(); Villager_launcher.Add(); TotemOfUndying.Add(); TntCannon.Add(); Log("Steve CC v0.0.1 started successfully.", "#00FFFF"); } public static void Log(string text, string color = "#FFFFFF") { ETGModConsole.Log((object)("" + text + ""), false); } } } namespace SteveCC { public class BowGun : GunBehaviour { public static void Add() { //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022d: 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_023b: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_025e: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Expected O, but got Unknown //IL_028e: Unknown result type (might be due to invalid IL or missing references) Gun val = Databases.Items.NewGun("Minecraft Bow", "sccbow"); Game.Items.Rename("outdated_gun_mods:minecraft_bow", "scc:sccbow"); ((Component)val).gameObject.AddComponent(); GunExt.SetShortDescription((PickupObject)(object)val, "Bulseye!"); GunExt.SetLongDescription((PickupObject)(object)val, "A simple ranged weapon crafted of 3 sticks and 3 string\n\ntrusty ranged weaponry"); GunExt.SetupSprite(val, (tk2dSpriteCollectionData)null, "sccbow_idle_001", 1); GunExt.SetAnimationFPS(val, val.shootAnimation, 18); GunExt.SetAnimationFPS(val, val.reloadAnimation, 5); PickupObject byId = PickupObjectDatabase.GetById(8); Gun val2 = (Gun)(object)((byId is Gun) ? byId : null); GunExt.AddProjectileModuleFrom(val, val2, true, false); Projectile val3 = Object.Instantiate(val.DefaultModule.projectiles[0]); ((Component)val3).gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject); Object.DontDestroyOnLoad((Object)(object)val3); ((BraveBehaviour)val3).transform.parent = val.barrelOffset; val.DefaultModule.ammoCost = 1; val.DefaultModule.shootStyle = (ShootStyle)0; val.DefaultModule.cooldownTime = 0.4f; val.DefaultModule.numberOfShotsInClip = 8; val.reloadTime = 1f; val.InfiniteAmmo = true; val.SetBaseMaxAmmo(0); val.PreventNormalFireAudio = true; val.DefaultModule.ammoType = (AmmoType)14; val.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Arrow Ammo", "SteveCC/Resources/CustomGunAmmoTypes/mcarrow_clipfull", "SteveCC/Resources/CustomGunAmmoTypes/mcarrow_clipempty"); val3.baseData.damage = 5f; val3.baseData.speed = 22f; val3.baseData.force = 8f; val3.baseData.range = 20f; val3.AdditionalScaleMultiplier = 1f; val.DefaultModule.angleVariance = 5f; GunTools.SetProjectileSpriteRight(val3, "bow_arrow", 16, 5, false, (Anchor)4, (int?)16, (int?)7, true, false, (int?)null, (int?)null, (Projectile)null); GameObject gameObject = ((Component)BreakableAPIToolbox.GenerateDebrisObject("SteveCC/Resources/Debris/sccarrow.png", true, 1f, 1f, 0f, 0f, (tk2dSprite)null, 1f, (string)null, (GameObject)null, 0, false, (GoopDefinition)null, 1f)).gameObject; val3.hitEffects = new ProjectileImpactVFXPool { suppressHitEffectsIfOffscreen = false, suppressMidairDeathVfx = false, overrideMidairZHeight = -1, overrideEarlyDeathVfx = gameObject, overrideMidairDeathVFX = gameObject, midairInheritsVelocity = true, midairInheritsFlip = true, midairInheritsRotation = true, alwaysUseMidair = true, CenterDeathVFXOnProjectile = false, HasProjectileDeathVFX = true }; val.DefaultModule.projectiles[0] = val3; ((PickupObject)val).quality = (ItemQuality)(-100); ((BraveBehaviour)val).encounterTrackable.EncounterGuid = "scc_bow"; Databases.Items.Add(val, (tk2dSpriteCollectionData)null, "ANY"); } public override void OnPostFired(PlayerController player, Gun gun) { ((GunBehaviour)this).OnPostFired(player, gun); gun.PreventNormalFireAudio = true; AkSoundEngine.PostEvent("sccbow_fire", ((Component)gun).gameObject); } public override void OnReloadPressed(PlayerController player, Gun gun, bool manual) { ((GunBehaviour)this).OnReloadPressed(player, gun, manual); if (gun.ClipShotsRemaining < gun.ClipCapacity) { AkSoundEngine.PostEvent("sccbow_reload", ((Component)gun).gameObject); } } public override void PostProcessProjectile(Projectile projectile) { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown ((GunBehaviour)this).PostProcessProjectile(projectile); string[] arrowLandClips = new string[4] { "arrow_land_000", "arrow_land_001", "arrow_land_002", "arrow_land_003" }; SpeculativeRigidbody specRigidbody = ((BraveBehaviour)projectile).specRigidbody; specRigidbody.OnTileCollision = (OnTileCollisionDelegate)Delegate.Combine((Delegate?)(object)specRigidbody.OnTileCollision, (Delegate?)(OnTileCollisionDelegate)delegate { AkSoundEngine.PostEvent(arrowLandClips[Random.Range(0, arrowLandClips.Length)], ((Component)projectile).gameObject); }); string[] arrowHitClips = new string[1] { "arrow_hit_000" }; Projectile obj = projectile; obj.OnHitEnemy = (Action)Delegate.Combine(obj.OnHitEnemy, (Action)delegate(Projectile proj, SpeculativeRigidbody hitRigidbody, bool killed) { AkSoundEngine.PostEvent(arrowHitClips[Random.Range(0, arrowHitClips.Length)], ((Component)proj).gameObject); }); } public override void Update() { ((GunBehaviour)this).Update(); if ((Object)(object)base.gun != (Object)null) { base.gun.PreventNormalFireAudio = true; } } public override void OnPlayerPickup(PlayerController playerOwner) { ((GunBehaviour)this).OnPlayerPickup(playerOwner); AkSoundEngine.PostEvent("Snes_pop", ((Component)base.gun).gameObject); } } public class Emerald : GunBehaviour { public static void Add() { //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Expected O, but got Unknown //IL_0291: Unknown result type (might be due to invalid IL or missing references) Gun val = Databases.Items.NewGun("Emerald", "sccemerald"); Game.Items.Rename("outdated_gun_mods:emerald", "scc:emerald"); ((Component)val).gameObject.AddComponent(); GunExt.SetShortDescription((PickupObject)(object)val, "Star Trader!"); GunExt.SetLongDescription((PickupObject)(object)val, "simple monetary currency, now in gun form\n\nwould you like to trade?"); GunExt.SetupSprite(val, (tk2dSpriteCollectionData)null, "sccemerald_idle_001", 1); GunExt.SetAnimationFPS(val, val.shootAnimation, 25); GunExt.SetAnimationFPS(val, val.reloadAnimation, 2); PickupObject byId = PickupObjectDatabase.GetById(8); Gun val2 = (Gun)(object)((byId is Gun) ? byId : null); GunExt.AddProjectileModuleFrom(val, val2, true, false); Projectile val3 = Object.Instantiate(val.DefaultModule.projectiles[0]); ((Component)val3).gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject); Object.DontDestroyOnLoad((Object)(object)val3); ((BraveBehaviour)val3).transform.parent = val.barrelOffset; val.DefaultModule.ammoCost = 1; val.DefaultModule.shootStyle = (ShootStyle)0; val.DefaultModule.cooldownTime = 0.3f; val.DefaultModule.numberOfShotsInClip = 16; val.reloadTime = 0.8f; val.InfiniteAmmo = true; val.SetBaseMaxAmmo(0); val.PreventNormalFireAudio = true; val.DefaultModule.ammoType = (AmmoType)14; val.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Emerald Ammo", "SteveCC/Resources/CustomGunAmmoTypes/mcemerald_clipfull", "SteveCC/Resources/CustomGunAmmoTypes/mcemerald_clipempty"); val3.baseData.damage = 6f; val3.baseData.speed = 22f; val3.baseData.force = 8f; val3.baseData.range = 20f; val3.AdditionalScaleMultiplier = 1f; val.DefaultModule.angleVariance = 5f; GunTools.SetProjectileSpriteRight(val3, "sccemerald", 16, 16, false, (Anchor)4, (int?)16, (int?)16, true, false, (int?)null, (int?)null, (Projectile)null); GameObject gameObject = ((Component)BreakableAPIToolbox.GenerateDebrisObject("SteveCC/Resources/Debris/sccemerald.png", true, 1f, 1f, 540f, 180f, (tk2dSprite)null, 1f, (string)null, (GameObject)null, 0, false, (GoopDefinition)null, 1f)).gameObject; val3.hitEffects = new ProjectileImpactVFXPool { suppressHitEffectsIfOffscreen = false, suppressMidairDeathVfx = false, overrideMidairZHeight = -1, overrideEarlyDeathVfx = gameObject, overrideMidairDeathVFX = gameObject, midairInheritsVelocity = true, midairInheritsFlip = true, midairInheritsRotation = true, alwaysUseMidair = true, CenterDeathVFXOnProjectile = false, HasProjectileDeathVFX = true }; val.DefaultModule.projectiles[0] = val3; ((PickupObject)val).quality = (ItemQuality)(-100); ((BraveBehaviour)val).encounterTrackable.EncounterGuid = "scc_emerald"; Databases.Items.Add(val, (tk2dSpriteCollectionData)null, "ANY"); } public override void OnPostFired(PlayerController player, Gun gun) { ((GunBehaviour)this).OnPostFired(player, gun); gun.PreventNormalFireAudio = true; AkSoundEngine.PostEvent("Snes_pop", ((Component)gun).gameObject); } public override void OnReloadPressed(PlayerController player, Gun gun, bool manual) { ((GunBehaviour)this).OnReloadPressed(player, gun, manual); if (gun.ClipShotsRemaining < gun.ClipCapacity) { AkSoundEngine.PostEvent("sccbow_reload", ((Component)gun).gameObject); } } public override void PostProcessProjectile(Projectile projectile) { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0051: 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 ((GunBehaviour)this).PostProcessProjectile(projectile); string[] arrowLandClips = new string[1] { "Random_break" }; SpeculativeRigidbody specRigidbody = ((BraveBehaviour)projectile).specRigidbody; specRigidbody.OnTileCollision = (OnTileCollisionDelegate)Delegate.Combine((Delegate?)(object)specRigidbody.OnTileCollision, (Delegate?)(OnTileCollisionDelegate)delegate { AkSoundEngine.PostEvent(arrowLandClips[Random.Range(0, arrowLandClips.Length)], ((Component)projectile).gameObject); }); string[] arrowHitClips = new string[4] { "Amethyst_Cluster_break1", "Amethyst_Cluster_break2", "Amethyst_Cluster_break3", "Amethyst_Cluster_break4" }; Projectile obj = projectile; obj.OnHitEnemy = (Action)Delegate.Combine(obj.OnHitEnemy, (Action)delegate(Projectile proj, SpeculativeRigidbody hitRigidbody, bool killed) { AkSoundEngine.PostEvent(arrowHitClips[Random.Range(0, arrowHitClips.Length)], ((Component)proj).gameObject); }); } public override void Update() { ((GunBehaviour)this).Update(); if ((Object)(object)base.gun != (Object)null) { base.gun.PreventNormalFireAudio = true; } } public override void OnPlayerPickup(PlayerController playerOwner) { ((GunBehaviour)this).OnPlayerPickup(playerOwner); AkSoundEngine.PostEvent("Snes_pop", ((Component)base.gun).gameObject); } } internal class Looting : PassiveItem { public float chanceToActivate = 0.3f; public int CurrencyToGiveMin = 0; public int CurrencyToGiveMax = 4; public static void Init() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) string text = "Looting"; string text2 = "SteveCC/Resources/Looting"; GameObject val = new GameObject(text); Looting looting = val.AddComponent(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "Lucky!"; string text4 = "Enemies drop casings when they die \n \n Last I checked you couldnt put this on a ranged weapon"; ItemBuilder.SetupItem((PickupObject)(object)looting, text3, text4, "scc"); ((PickupObject)looting).quality = (ItemQuality)(-100); } public override void Pickup(PlayerController player) { if (!base.m_pickedUp) { ((PassiveItem)this).Pickup(player); player.OnKilledEnemyContext += OnKilledEnemyContext; } } private void OnKilledEnemyContext(PlayerController player, HealthHaver healthHaver) { //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0040: 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) if (!(Random.value > chanceToActivate)) { Vector2 position = (((Object)(object)((BraveBehaviour)healthHaver).specRigidbody != (Object)null) ? ((BraveBehaviour)healthHaver).specRigidbody.UnitCenter : Vector2.op_Implicit(((BraveBehaviour)healthHaver).transform.position)); SpawnCasings(player, position); } } private void SpawnCasings(PlayerController player, Vector2 position) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) int num = Random.Range(CurrencyToGiveMin, CurrencyToGiveMax); if (num > 0) { AkSoundEngine.PostEvent("Play_OBJ_coin_spill_01", ((Component)this).gameObject); LootEngine.SpawnCurrency(position, num, false); } } public override DebrisObject Drop(PlayerController player) { DebrisObject result = ((PassiveItem)this).Drop(player); player.OnKilledEnemyContext -= OnKilledEnemyContext; return result; } } internal class SplashPot : PlayerItem { public static void Init() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0046: Unknown result type (might be due to invalid IL or missing references) string text = "Splash Potion of Health"; string text2 = "SteveCC/Resources/SplashPot"; GameObject val = new GameObject(text); SplashPot splashPot = val.AddComponent(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "Local Brewery"; string text4 = "Heals half a heart of damage\n\nthis feels like cheating"; ItemBuilder.SetupItem((PickupObject)(object)splashPot, text3, text4, "scc"); ((PickupObject)splashPot).quality = (ItemQuality)(-100); ItemBuilder.SetCooldownType((PlayerItem)(object)splashPot, (CooldownType)1, 500f); ((PlayerItem)splashPot).consumable = false; } public override void DoEffect(PlayerController user) { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Expected O, but got Unknown ((BraveBehaviour)user).healthHaver.ApplyHealing(0.5f); string[] array = new string[3] { "Glass_dig1", "Glass_dig2", "Glass_dig3" }; AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)user).gameObject); GameObject val = new GameObject("silencer"); SilencerInstance val2 = val.AddComponent(); val2.TriggerSilencer(((BraveBehaviour)user).specRigidbody.UnitCenter, 20f, 10f, (GameObject)BraveResources.Load("Global VFX/BlankVFX_Ghost", ".prefab"), 0f, 3f, 3f, 3f, 30f, 3f, 0.25f, user, false, false); } } public class TntCannon : GunBehaviour { public static ExplosionData tntBoom; public static void Add() { //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0233: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0249: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_027b: Unknown result type (might be due to invalid IL or missing references) //IL_0286: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02ad: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Expected O, but got Unknown //IL_02f1: Unknown result type (might be due to invalid IL or missing references) Gun val = Databases.Items.NewGun("Mini TNT cannon", "tnt_cannon"); Game.Items.Rename("outdated_gun_mods:mini_tnt_cannon", "scc:tnt_cannon"); ((Component)val).gameObject.AddComponent(); GunExt.SetShortDescription((PickupObject)(object)val, "BANG!"); GunExt.SetLongDescription((PickupObject)(object)val, "TNT powered TNT launcher\n\nbase bustin' fun"); GunExt.SetupSprite(val, (tk2dSpriteCollectionData)null, "tnt_cannon_idle_001", 1); GunExt.SetAnimationFPS(val, val.shootAnimation, 20); GunExt.SetAnimationFPS(val, val.reloadAnimation, 15); PickupObject byId = PickupObjectDatabase.GetById(8); Gun val2 = (Gun)(object)((byId is Gun) ? byId : null); GunExt.AddProjectileModuleFrom(val, val2, true, false); Projectile val3 = Object.Instantiate(val.DefaultModule.projectiles[0]); ((Component)val3).gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject); Object.DontDestroyOnLoad((Object)(object)val3); ((BraveBehaviour)val3).transform.parent = val.barrelOffset; val.DefaultModule.ammoCost = 1; val.DefaultModule.shootStyle = (ShootStyle)0; val.DefaultModule.cooldownTime = 1f; val.DefaultModule.numberOfShotsInClip = 9; val.reloadTime = 2f; val.InfiniteAmmo = false; val.SetBaseMaxAmmo(64); val.PreventNormalFireAudio = true; val.DefaultModule.ammoType = (AmmoType)14; val.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("TNT Ammo", "SteveCC/Resources/CustomGunAmmoTypes/TNT_clipfull", "SteveCC/Resources/CustomGunAmmoTypes/TNT_clipempty"); val3.baseData.damage = 8f; val3.baseData.speed = 17f; val3.baseData.force = 8f; val3.baseData.range = 18f; val.DefaultModule.angleVariance = 8f; GunTools.SetProjectileSpriteRight(val3, "tnt_grenade", 9, 9, false, (Anchor)4, (int?)9, (int?)9, true, false, (int?)null, (int?)null, (Projectile)null); tntBoom = new ExplosionData { effect = GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultSmallExplosionData.effect, ignoreList = new List(), ss = GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultExplosionData.ss, damageRadius = 2.5f, damageToPlayer = 0f, doDamage = true, damage = 7f, doDestroyProjectiles = false, doForce = true, debrisForce = 15f, preventPlayerForce = true, explosionDelay = 0.1f, usesComprehensiveDelay = false, doScreenShake = true, playDefaultSFX = true, force = 20f, breakSecretWalls = true, secretWallsRadius = 3.5f }; ExplosiveModifier orAddComponent = GameObjectExtensions.GetOrAddComponent(((Component)val3).gameObject); orAddComponent.explosionData = tntBoom; orAddComponent.doExplosion = true; val.DefaultModule.projectiles[0] = val3; ((PickupObject)val).quality = (ItemQuality)(-100); ((BraveBehaviour)val).encounterTrackable.EncounterGuid = "scc_tnt_cannon"; Databases.Items.Add(val, (tk2dSpriteCollectionData)null, "ANY"); } public override void OnPostFired(PlayerController player, Gun gun) { ((GunBehaviour)this).OnPostFired(player, gun); string[] array = new string[1] { "Fuse" }; gun.PreventNormalFireAudio = true; AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)gun).gameObject); } public override void OnReloadPressed(PlayerController player, Gun gun, bool manual) { ((GunBehaviour)this).OnReloadPressed(player, gun, manual); string[] array = new string[4] { "Grass_dig1", "Grass_dig2", "Grass_dig3", "Grass_dig4" }; if (gun.ClipShotsRemaining < gun.ClipCapacity) { AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)gun).gameObject); } } public override void PostProcessProjectile(Projectile projectile) { //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Expected O, but got Unknown //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown ((GunBehaviour)this).PostProcessProjectile(projectile); string[] landClips = new string[4] { "Explosion1", "Explosion2", "Explosion3", "Explosion4" }; SpeculativeRigidbody specRigidbody = ((BraveBehaviour)projectile).specRigidbody; specRigidbody.OnTileCollision = (OnTileCollisionDelegate)Delegate.Combine((Delegate?)(object)specRigidbody.OnTileCollision, (Delegate?)(OnTileCollisionDelegate)delegate { AkSoundEngine.PostEvent(landClips[Random.Range(0, landClips.Length)], ((Component)projectile).gameObject); }); Projectile obj = projectile; obj.OnHitEnemy = (Action)Delegate.Combine(obj.OnHitEnemy, (Action)delegate(Projectile proj, SpeculativeRigidbody hitRigidbody, bool killed) { AkSoundEngine.PostEvent(landClips[Random.Range(0, landClips.Length)], ((Component)proj).gameObject); }); } public override void Update() { ((GunBehaviour)this).Update(); if ((Object)(object)base.gun != (Object)null) { base.gun.PreventNormalFireAudio = true; } } public override void OnPlayerPickup(PlayerController playerOwner) { ((GunBehaviour)this).OnPlayerPickup(playerOwner); AkSoundEngine.PostEvent("Snes_pop", ((Component)base.gun).gameObject); } } public class TotemOfUndying : PlayerItem { public static int TotemOfUndyingItemID; private PlayerController m_owner; public static void Add() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Expected O, but got Unknown //IL_004f: Unknown result type (might be due to invalid IL or missing references) string text = "Totem of Undying"; GameObject val = new GameObject(text); TotemOfUndying totemOfUndying = val.AddComponent(); ItemBuilder.AddSpriteToObject(text, "SteveCC/Resources/Totemofundying_icon", val, (Assembly)null); ItemBuilder.SetupItem((PickupObject)(object)totemOfUndying, "Postmortal!", "Revives you, but only once (also can revive your friend)", "scc"); ItemBuilder.SetCooldownType((PlayerItem)(object)totemOfUndying, (CooldownType)1, 0f); ((PlayerItem)totemOfUndying).consumable = false; ((PickupObject)totemOfUndying).quality = (ItemQuality)3; TotemOfUndyingItemID = ((PickupObject)totemOfUndying).PickupObjectId; } private void ModifyDamage(HealthHaver player, ModifyDamageEventArgs args) { if (!((Object)(object)m_owner == (Object)null) && PlayerUtility.NextHitWillKillPlayer(m_owner, args.InitialDamage)) { args.ModifiedDamage = 0f; Trigger(); } } private void OnPreDeath(Vector2 damageDirection) { Trigger(); } private void Trigger() { if (!((Object)(object)m_owner == (Object)null)) { ((BraveBehaviour)m_owner).healthHaver.OnPreDeath -= OnPreDeath; HealthHaver healthHaver = ((BraveBehaviour)m_owner).healthHaver; healthHaver.ModifyDamage = (Action)Delegate.Remove(healthHaver.ModifyDamage, new Action(ModifyDamage)); float maxHealth = ((BraveBehaviour)m_owner).healthHaver.GetMaxHealth(); ((BraveBehaviour)m_owner).healthHaver.ApplyHealing(maxHealth); m_owner.ForceBlank(25f, 0.5f, false, true, (Vector2?)null, true, -1f); AkSoundEngine.PostEvent("totem_pop", ((Component)m_owner).gameObject); m_owner.RemoveActiveItem(((PickupObject)this).PickupObjectId); } } public override void DoEffect(PlayerController user) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Invalid comparison between Unknown and I4 if ((int)GameManager.Instance.CurrentGameType == 1) { PlayerController otherPlayer = GameManager.Instance.GetOtherPlayer(user); if ((Object)(object)otherPlayer != (Object)null && ((BraveBehaviour)otherPlayer).healthHaver.IsDead) { otherPlayer.ResurrectFromBossKill(); AkSoundEngine.PostEvent("totem_pop", ((Component)user).gameObject); user.RemoveActiveItem(((PickupObject)this).PickupObjectId); } } } public override bool CanBeUsed(PlayerController user) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Invalid comparison between Unknown and I4 if ((int)GameManager.Instance.CurrentGameType == 1) { PlayerController otherPlayer = GameManager.Instance.GetOtherPlayer(user); return (Object)(object)otherPlayer != (Object)null && ((BraveBehaviour)otherPlayer).healthHaver.IsDead; } return false; } public override void Pickup(PlayerController player) { m_owner = player; ((BraveBehaviour)player).healthHaver.OnPreDeath += OnPreDeath; HealthHaver healthHaver = ((BraveBehaviour)player).healthHaver; healthHaver.ModifyDamage = (Action)Delegate.Combine(healthHaver.ModifyDamage, new Action(ModifyDamage)); ((PlayerItem)this).Pickup(player); } public override void OnDestroy() { if ((Object)(object)m_owner != (Object)null) { ((BraveBehaviour)m_owner).healthHaver.OnPreDeath -= OnPreDeath; HealthHaver healthHaver = ((BraveBehaviour)m_owner).healthHaver; healthHaver.ModifyDamage = (Action)Delegate.Remove(healthHaver.ModifyDamage, new Action(ModifyDamage)); } ((PlayerItem)this).OnDestroy(); } } internal class HeroOfTheVillage : PassiveItem { public static void Init() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Expected O, but got Unknown //IL_0055: Unknown result type (might be due to invalid IL or missing references) string text = "Hero Of The Village"; string text2 = "SteveCC/Resources/Hero_of_the_Village"; GameObject val = new GameObject(text); HeroOfTheVillage heroOfTheVillage = val.AddComponent(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "Hero Of The Village!"; string text4 = "Reduced trading prices\n\nWould you like to trade?"; ItemBuilder.SetupItem((PickupObject)(object)heroOfTheVillage, text3, text4, "scc"); ItemBuilder.AddPassiveStatModifier((PickupObject)(object)heroOfTheVillage, (StatType)13, -0.15f, (ModifyMethod)0); ((PickupObject)heroOfTheVillage).quality = (ItemQuality)(-100); } } public class Villager_launcher : GunBehaviour { public static ExplosionData villagerBoom; public static void Add() { //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_0261: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Expected O, but got Unknown //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02a3: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02cd: Unknown result type (might be due to invalid IL or missing references) //IL_02d8: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_02f1: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_0315: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_0323: 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_0335: Unknown result type (might be due to invalid IL or missing references) //IL_033c: Unknown result type (might be due to invalid IL or missing references) //IL_034c: Expected O, but got Unknown //IL_0383: Unknown result type (might be due to invalid IL or missing references) Gun val = Databases.Items.NewGun("Villager Launcher", "sccvillager"); Game.Items.Rename("outdated_gun_mods:villager_launcher", "scc:villager_launcher"); ((Component)val).gameObject.AddComponent(); GunExt.SetShortDescription((PickupObject)(object)val, "Du Du DU du, Villager news"); GunExt.SetLongDescription((PickupObject)(object)val, "This towering, timber-trimmed, trigger-twitching, tube-bodied testificate throws terrified testificates through the turbulent, thunderous, treacherous skies, the talking launcher itself being Villager #27, tirelessly tossing its teammates until they touch terrain and terminate in tremendous, totally theatrical explosions.\n\nTradition tells that this terrifying, triumphantly terrible tool was thoughtfully tinkered together by Villagers #13 and #4, transforming #27 into the tireless throwing titan that to this day transports testificates toward their thunderous, terminal touchdowns."); GunExt.SetupSprite(val, (tk2dSpriteCollectionData)null, "sccvillager_idle_001", 1); GunExt.SetAnimationFPS(val, val.shootAnimation, 20); GunExt.SetAnimationFPS(val, val.reloadAnimation, 15); PickupObject byId = PickupObjectDatabase.GetById(39); Gun val2 = (Gun)(object)((byId is Gun) ? byId : null); GunExt.AddProjectileModuleFrom(val, val2, true, false); Projectile val3 = Object.Instantiate(val.DefaultModule.projectiles[0]); ((Component)val3).gameObject.SetActive(false); FakePrefab.MarkAsFakePrefab(((Component)val3).gameObject); Object.DontDestroyOnLoad((Object)(object)val3); ((BraveBehaviour)val3).transform.parent = val.barrelOffset; val.DefaultModule.ammoCost = 1; val.DefaultModule.shootStyle = (ShootStyle)0; val.DefaultModule.cooldownTime = 1f; val.DefaultModule.numberOfShotsInClip = 1; val.reloadTime = 1.5f; val.InfiniteAmmo = false; val.SetBaseMaxAmmo(128); val.PreventNormalFireAudio = true; val.DefaultModule.ammoType = (AmmoType)14; val.DefaultModule.customAmmoType = CustomClipAmmoTypeToolbox.AddCustomAmmoType("Villager Ammo", "SteveCC/Resources/CustomGunAmmoTypes/villager_clipfull", "SteveCC/Resources/CustomGunAmmoTypes/villager_clipempty"); val3.baseData.damage = 15f; val3.baseData.speed = 17f; val3.baseData.force = 8f; val3.baseData.range = 20f; val.DefaultModule.angleVariance = 2f; GunTools.SetProjectileSpriteRight(val3, "sccvillager", 32, 16, false, (Anchor)4, (int?)30, (int?)7, true, false, (int?)null, (int?)null, (Projectile)null); GameObject gameObject = ((Component)BreakableAPIToolbox.GenerateDebrisObject("SteveCC/Resources/Debris/sccvillager.png", true, 1f, 1f, 0f, 0f, (tk2dSprite)null, 1f, (string)null, (GameObject)null, 0, false, (GoopDefinition)null, 1f)).gameObject; val3.hitEffects = new ProjectileImpactVFXPool { suppressHitEffectsIfOffscreen = false, suppressMidairDeathVfx = false, overrideMidairZHeight = -1, overrideEarlyDeathVfx = gameObject, overrideMidairDeathVFX = gameObject, midairInheritsVelocity = true, midairInheritsFlip = true, midairInheritsRotation = true, alwaysUseMidair = true, CenterDeathVFXOnProjectile = false, HasProjectileDeathVFX = true }; villagerBoom = new ExplosionData { effect = GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultSmallExplosionData.effect, ignoreList = new List(), ss = GameManager.Instance.Dungeon.sharedSettingsPrefab.DefaultExplosionData.ss, damageRadius = 2.5f, damageToPlayer = 0f, doDamage = true, damage = 10f, doDestroyProjectiles = false, doForce = true, debrisForce = 15f, preventPlayerForce = true, explosionDelay = 0.1f, usesComprehensiveDelay = false, doScreenShake = true, playDefaultSFX = true, force = 20f, breakSecretWalls = true, secretWallsRadius = 3.5f }; ExplosiveModifier orAddComponent = GameObjectExtensions.GetOrAddComponent(((Component)val3).gameObject); orAddComponent.explosionData = villagerBoom; orAddComponent.doExplosion = true; val.DefaultModule.projectiles[0] = val3; ((PickupObject)val).quality = (ItemQuality)(-100); ((BraveBehaviour)val).encounterTrackable.EncounterGuid = "scc_villager_launcher"; Databases.Items.Add(val, (tk2dSpriteCollectionData)null, "ANY"); } public override void OnPostFired(PlayerController player, Gun gun) { ((GunBehaviour)this).OnPostFired(player, gun); string[] array = new string[2] { "vn_bang1", "vn_bang2" }; gun.PreventNormalFireAudio = true; AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)gun).gameObject); } public override void OnReloadPressed(PlayerController player, Gun gun, bool manual) { ((GunBehaviour)this).OnReloadPressed(player, gun, manual); string[] array = new string[1] { "vn_reloading" }; if (gun.ClipShotsRemaining < gun.ClipCapacity) { AkSoundEngine.PostEvent(array[Random.Range(0, array.Length)], ((Component)gun).gameObject); } } public override void PostProcessProjectile(Projectile projectile) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Expected O, but got Unknown //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown ((GunBehaviour)this).PostProcessProjectile(projectile); string[] landClips = new string[6] { "vn_explode1", "vn_explode2", "vn_ow2", "vn_ow3", "vn_ow4", "vn_ow5" }; SpeculativeRigidbody specRigidbody = ((BraveBehaviour)projectile).specRigidbody; specRigidbody.OnTileCollision = (OnTileCollisionDelegate)Delegate.Combine((Delegate?)(object)specRigidbody.OnTileCollision, (Delegate?)(OnTileCollisionDelegate)delegate { AkSoundEngine.PostEvent(landClips[Random.Range(0, landClips.Length)], ((Component)projectile).gameObject); }); string[] hitClips = new string[1] { "vn_yay" }; Projectile obj = projectile; obj.OnHitEnemy = (Action)Delegate.Combine(obj.OnHitEnemy, (Action)delegate(Projectile proj, SpeculativeRigidbody hitRigidbody, bool killed) { AkSoundEngine.PostEvent(landClips[Random.Range(0, landClips.Length)], ((Component)proj).gameObject); AkSoundEngine.PostEvent(hitClips[Random.Range(0, hitClips.Length)], ((Component)proj).gameObject); }); } public override void Update() { ((GunBehaviour)this).Update(); if ((Object)(object)base.gun != (Object)null) { base.gun.PreventNormalFireAudio = true; } } public override void OnPlayerPickup(PlayerController playerOwner) { ((GunBehaviour)this).OnPlayerPickup(playerOwner); AkSoundEngine.PostEvent("villager_news", ((Component)base.gun).gameObject); } } }