Decompiled source of ChildrenOfKaliber v4.0.14
plugins/Items.dll
Decompiled 2 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.Collections.ObjectModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Text; using Alexandria.CharacterAPI; using Alexandria.DungeonAPI; using Alexandria.EnemyAPI; using Alexandria.ItemAPI; using Alexandria.Misc; using Alexandria.NPCAPI; using Alexandria.PrefabAPI; using BepInEx; using BepInEx.Bootstrap; using BreakAbleAPI; using Dungeonator; using FullSerializer; using Gungeon; using InControl; using Ionic.Zip; using MonoMod.RuntimeDetour; using MonoMod.Utils; using Pathfinding; using SaveAPI; using UnityEngine; using UnityEngine.Rendering; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: AssemblyTitle("Items")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("Items")] [assembly: AssemblyCopyright("Copyright © 2019")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("ffba1617-0851-4332-b99d-65e9086fa8ac")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] internal class AdvancedGunBehaviour : MonoBehaviour, IGunInheritable, ILevelLoadedListener { private bool pickedUpLast = false; private GameActor lastOwner = null; public bool everPickedUpByPlayer = false; public bool everPickedUp = false; protected Gun gun; private bool hasReloaded = true; public bool preventNormalFireAudio; public bool preventNormalReloadAudio; public string overrideNormalFireAudio; public string overrideReloadSwitchGroup; public string overrideNormalReloadAudio; public bool usesOverrideHeroSwordCooldown; public float overrideHeroSwordCooldown; private static FieldInfo heroSwordCooldown = typeof(Gun).GetField("HeroSwordCooldown", BindingFlags.Instance | BindingFlags.NonPublic); public bool PickedUp => (Object)(object)gun.CurrentOwner != (Object)null; public PlayerController Player { get { if (gun.CurrentOwner is PlayerController) { GameActor currentOwner = gun.CurrentOwner; return (PlayerController)(object)((currentOwner is PlayerController) ? currentOwner : null); } return null; } } public float HeroSwordCooldown { get { if ((Object)(object)gun != (Object)null) { return (float)heroSwordCooldown.GetValue(gun); } return -1f; } set { if ((Object)(object)gun != (Object)null) { heroSwordCooldown.SetValue(gun, value); } } } public GameActor Owner => gun.CurrentOwner; public bool PickedUpByPlayer => (Object)(object)Player != (Object)null; protected virtual void Update() { if ((Object)(object)Player != (Object)null && !everPickedUpByPlayer) { everPickedUpByPlayer = true; } if ((Object)(object)Owner != (Object)null && !everPickedUp) { everPickedUp = true; } if ((Object)(object)lastOwner != (Object)(object)Owner) { lastOwner = Owner; } if ((Object)(object)Owner != (Object)null && !pickedUpLast) { OnPickup(Owner); pickedUpLast = true; } if ((Object)(object)Owner == (Object)null && pickedUpLast) { if ((Object)(object)lastOwner != (Object)null) { OnPostDrop(lastOwner); lastOwner = null; } pickedUpLast = false; } if ((Object)(object)gun != (Object)null && !gun.IsReloading && !hasReloaded) { hasReloaded = true; if ((Object)(object)Owner != (Object)null) { GameActor owner = Owner; OnReloadEnded((PlayerController)(object)((owner is PlayerController) ? owner : null), gun); } } gun.PreventNormalFireAudio = preventNormalFireAudio; gun.OverrideNormalFireAudioEvent = overrideNormalFireAudio; } public virtual void InheritData(Gun source) { AdvancedGunBehaviour component = ((Component)source).GetComponent<AdvancedGunBehaviour>(); if ((Object)(object)component != (Object)null) { preventNormalFireAudio = component.preventNormalFireAudio; preventNormalReloadAudio = component.preventNormalReloadAudio; overrideNormalReloadAudio = component.overrideNormalReloadAudio; overrideNormalFireAudio = component.overrideNormalFireAudio; everPickedUpByPlayer = component.everPickedUpByPlayer; everPickedUp = component.everPickedUp; usesOverrideHeroSwordCooldown = component.usesOverrideHeroSwordCooldown; overrideHeroSwordCooldown = component.overrideHeroSwordCooldown; overrideReloadSwitchGroup = component.overrideReloadSwitchGroup; } } public virtual void MidGameSerialize(List<object> data, int dataIndex) { data.Add(preventNormalFireAudio); data.Add(preventNormalReloadAudio); data.Add(overrideNormalReloadAudio); data.Add(overrideNormalFireAudio); data.Add(everPickedUpByPlayer); data.Add(everPickedUp); data.Add(usesOverrideHeroSwordCooldown); data.Add(overrideHeroSwordCooldown); data.Add(overrideReloadSwitchGroup); } public virtual void MidGameDeserialize(List<object> data, ref int dataIndex) { preventNormalFireAudio = (bool)data[dataIndex]; preventNormalReloadAudio = (bool)data[dataIndex + 1]; overrideNormalReloadAudio = (string)data[dataIndex + 2]; overrideNormalFireAudio = (string)data[dataIndex + 3]; everPickedUpByPlayer = (bool)data[dataIndex + 4]; everPickedUp = (bool)data[dataIndex + 5]; usesOverrideHeroSwordCooldown = (bool)data[dataIndex + 6]; overrideHeroSwordCooldown = (float)data[dataIndex + 7]; overrideReloadSwitchGroup = (string)data[dataIndex + 8]; dataIndex += 9; } public virtual void Start() { gun = ((Component)this).GetComponent<Gun>(); Gun obj = gun; obj.OnInitializedWithOwner = (Action<GameActor>)Delegate.Combine(obj.OnInitializedWithOwner, new Action<GameActor>(OnInitializedWithOwner)); if ((Object)(object)gun.CurrentOwner != (Object)null) { OnInitializedWithOwner(gun.CurrentOwner); } Gun obj2 = gun; obj2.PostProcessProjectile = (Action<Projectile>)Delegate.Combine(obj2.PostProcessProjectile, new Action<Projectile>(PostProcessProjectile)); Gun obj3 = gun; obj3.PostProcessVolley = (Action<ProjectileVolleyData>)Delegate.Combine(obj3.PostProcessVolley, new Action<ProjectileVolleyData>(PostProcessVolley)); Gun obj4 = gun; obj4.OnDropped = (Action)Delegate.Combine(obj4.OnDropped, new Action(OnDropped)); Gun obj5 = gun; obj5.OnAutoReload = (Action<PlayerController, Gun>)Delegate.Combine(obj5.OnAutoReload, new Action<PlayerController, Gun>(OnAutoReload)); Gun obj6 = gun; obj6.OnReloadPressed = (Action<PlayerController, Gun, bool>)Delegate.Combine(obj6.OnReloadPressed, new Action<PlayerController, Gun, bool>(OnReloadPressed)); Gun obj7 = gun; obj7.OnFinishAttack = (Action<PlayerController, Gun>)Delegate.Combine(obj7.OnFinishAttack, new Action<PlayerController, Gun>(OnFinishAttack)); Gun obj8 = gun; obj8.OnPostFired = (Action<PlayerController, Gun>)Delegate.Combine(obj8.OnPostFired, new Action<PlayerController, Gun>(OnPostFired)); Gun obj9 = gun; obj9.OnAmmoChanged = (Action<PlayerController, Gun>)Delegate.Combine(obj9.OnAmmoChanged, new Action<PlayerController, Gun>(OnAmmoChanged)); Gun obj10 = gun; obj10.OnBurstContinued = (Action<PlayerController, Gun>)Delegate.Combine(obj10.OnBurstContinued, new Action<PlayerController, Gun>(OnBurstContinued)); Gun obj11 = gun; obj11.OnPreFireProjectileModifier = (Func<Gun, Projectile, ProjectileModule, Projectile>)Delegate.Combine(obj11.OnPreFireProjectileModifier, new Func<Gun, Projectile, ProjectileModule, Projectile>(OnPreFireProjectileModifier)); ((MonoBehaviour)this).StartCoroutine(UpdateCR()); } public virtual void BraveOnLevelWasLoaded() { } private IEnumerator UpdateCR() { while (true) { NonCurrentGunUpdate(); yield return null; } } protected virtual void NonCurrentGunUpdate() { } public virtual void OnInitializedWithOwner(GameActor actor) { } public virtual void PostProcessProjectile(Projectile projectile) { } public virtual void PostProcessVolley(ProjectileVolleyData volley) { } public virtual void OnDropped() { } public virtual void OnAutoReload(PlayerController player, Gun gun) { if ((Object)(object)player != (Object)null) { OnAutoReloadSafe(player, gun); } } public virtual void OnAutoReloadSafe(PlayerController player, Gun gun) { } public virtual void OnReloadPressed(PlayerController player, Gun gun, bool manualReload) { if (hasReloaded && gun.IsReloading) { OnReload(player, gun); hasReloaded = false; } if ((Object)(object)player != (Object)null) { OnReloadPressedSafe(player, gun, manualReload); } } public virtual void OnGunsChanged(Gun previous, Gun current, bool newGun) { if ((Object)(object)previous != (Object)(object)gun && (Object)(object)current == (Object)(object)gun) { OnSwitchedToThisGun(); } if ((Object)(object)previous == (Object)(object)gun && (Object)(object)current != (Object)(object)gun) { OnSwitchedAwayFromThisGun(); } } public virtual void OnSwitchedToThisGun() { } public virtual void OnSwitchedAwayFromThisGun() { } public virtual void OnReloadPressedSafe(PlayerController player, Gun gun, bool manualReload) { if (hasReloaded && gun.IsReloading) { OnReloadSafe(player, gun); hasReloaded = false; } } public virtual void OnReload(PlayerController player, Gun gun) { if (preventNormalReloadAudio) { AkSoundEngine.PostEvent("Stop_WPN_All", ((Component)this).gameObject); if (!string.IsNullOrEmpty(overrideNormalReloadAudio)) { AkSoundEngine.PostEvent(overrideNormalReloadAudio, ((Component)this).gameObject); } } } public virtual void OnReloadEnded(PlayerController player, Gun gun) { if ((Object)(object)player != (Object)null) { OnReloadEndedSafe(player, gun); } } public virtual void OnReloadEndedSafe(PlayerController player, Gun gun) { } public virtual void OnReloadSafe(PlayerController player, Gun gun) { } public virtual void OnFinishAttack(PlayerController player, Gun gun) { } public virtual void OnPostFired(PlayerController player, Gun gun) { if (gun.IsHeroSword && HeroSwordCooldown == 0.5f) { OnHeroSwordCooldownStarted(player, gun); } } public virtual void OnHeroSwordCooldownStarted(PlayerController player, Gun gun) { if (usesOverrideHeroSwordCooldown) { HeroSwordCooldown = overrideHeroSwordCooldown; } } public virtual void OnAmmoChanged(PlayerController player, Gun gun) { if ((Object)(object)player != (Object)null) { OnAmmoChangedSafe(player, gun); } } public virtual void OnAmmoChangedSafe(PlayerController player, Gun gun) { } public virtual void OnBurstContinued(PlayerController player, Gun gun) { if ((Object)(object)player != (Object)null) { OnBurstContinuedSafe(player, gun); } } public virtual void OnBurstContinuedSafe(PlayerController player, Gun gun) { } public virtual Projectile OnPreFireProjectileModifier(Gun gun, Projectile projectile, ProjectileModule mod) { return projectile; } protected virtual void OnPickup(GameActor owner) { if (owner is PlayerController) { OnPickedUpByPlayer((PlayerController)(object)((owner is PlayerController) ? owner : null)); } if (owner is AIActor) { OnPickedUpByEnemy((AIActor)(object)((owner is AIActor) ? owner : null)); } } protected virtual void OnPostDrop(GameActor owner) { if (owner is PlayerController) { OnPostDroppedByPlayer((PlayerController)(object)((owner is PlayerController) ? owner : null)); } if (owner is AIActor) { OnPostDroppedByEnemy((AIActor)(object)((owner is AIActor) ? owner : null)); } } protected virtual void OnPickedUpByPlayer(PlayerController player) { player.GunChanged += OnGunsChanged; } protected virtual void OnPostDroppedByPlayer(PlayerController player) { } protected virtual void OnPickedUpByEnemy(AIActor enemy) { } protected virtual void OnPostDroppedByEnemy(AIActor enemy) { } } public class EnemyGuidDatabase { public static Dictionary<string, string> Entries { get; set; } = new Dictionary<string, string> { { "bullet_kin", "01972dee89fc4404a5c408d50007dad5" }, { "ak47_bullet_kin", "db35531e66ce41cbb81d507a34366dfe" }, { "bandana_bullet_kin", "88b6b6a93d4b4234a67844ef4728382c" }, { "veteran_bullet_kin", "70216cae6c1346309d86d4a0b4603045" }, { "treadnaughts_bullet_kin", "df7fb62405dc4697b7721862c7b6b3cd" }, { "minelet", "3cadf10c489b461f9fb8814abc1a09c1" }, { "cardinal", "8bb5578fba374e8aae8e10b754e61d62" }, { "shroomer", "e5cffcfabfae489da61062ea20539887" }, { "ashen_bullet_kin", "1a78cfb776f54641b832e92c44021cf2" }, { "mutant_bullet_kin", "d4a9836f8ab14f3fadd0f597438b1f1f" }, { "fallen_bullet_kin", "5f3abc2d561b4b9c9e72b879c6f10c7e" }, { "hooded_bullet", "844657ad68894a4facb1b8e1aef1abf9" }, { "office_bullet_kin", "906d71ccc1934c02a6f4ff2e9c07c9ec" }, { "office_bullette_kin", "9eba44a0ea6c4ea386ff02286dd0e6bd" }, { "brollet", "05cb719e0178478685dc610f8b3e8bfc" }, { "western_bullet_kin", "5861e5a077244905a8c25c2b7b4d6ebb" }, { "pirate_bullet_kin", "6f818f482a5c47fd8f38cce101f6566c" }, { "armored_bullet_kin", "39e6f47a16ab4c86bec4b12984aece4c" }, { "key_bullet_kin", "699cd24270af4cd183d671090d8323a1" }, { "chance_bullet_kin", "a446c626b56d4166915a4e29869737fd" }, { "hollowpoint", "4db03291a12144d69fe940d5a01de376" }, { "spectre", "56f5a0f2c1fc4bc78875aea617ee31ac" }, { "skullet", "336190e29e8a4f75ab7486595b700d4a" }, { "skullmet", "95ec774b5a75467a9ab05fa230c0c143" }, { "gummy", "5288e86d20184fa69c91ceb642d31474" }, { "spent", "249db525a9464e5282d02162c88e0357" }, { "gummy_spent", "e21ac9492110493baef6df02a2682a0d" }, { "red_shotgun_kin", "128db2f0781141bcb505d8f00f9e4d47" }, { "blue_shotgun_kin", "b54d89f9e802455cbb2b8a96a31e8259" }, { "veteran_shotgun_kin", "2752019b770f473193b08b4005dc781f" }, { "mutant_shotgun_kin", "7f665bd7151347e298e4d366f8818284" }, { "executioner", "b1770e0f1c744d9d887cc16122882b4f" }, { "ashen_shotgun_kin", "1bd8e49f93614e76b140077ff2e33f2b" }, { "shotgrub", "044a9f39712f456597b9762893fbc19c" }, { "creech", "37340393f97f41b2822bc02d14654172" }, { "western_shotgun_kin", "ddf12a4881eb43cfba04f36dd6377abb" }, { "pirate_shotgun_kin", "86dfc13486ee4f559189de53cfb84107" }, { "blobulon", "0239c0680f9f467dbe5c4aab7dd1eca6" }, { "blobuloid", "042edb1dfb614dc385d5ad1b010f2ee3" }, { "blobulin", "42be66373a3d4d89b91a35c9ff8adfec" }, { "poisbulon", "e61cab252cfb435db9172adc96ded75f" }, { "poisbuloid", "fe3fe59d867347839824d5d9ae87f244" }, { "poisbulin", "b8103805af174924b578c98e95313074" }, { "blizzbulon", "022d7c822bc146b58fe3b0287568aaa2" }, { "leadbulon", "ccf6d241dad64d989cbcaca2a8477f01" }, { "bloodbulon", "062b9b64371e46e195de17b6f10e47c8" }, { "poopulon", "116d09c26e624bca8cca09fc69c714b3" }, { "cubulon", "864ea5a6a9324efc95a0dd2407f42810" }, { "cubulead", "0b547ac6b6fc4d68876a241a88f5ca6a" }, { "chancebulon", "1bc2a07ef87741be90c37096910843ab" }, { "skusket", "af84951206324e349e1f13f9b7b60c1a" }, { "black_skusket", "1cec0cdf383e42b19920787798353e46" }, { "skusket_head", "c2f902b7cbe745efb3db4399927eab34" }, { "shelleton", "21dd14e5ca2a4a388adab5b11b69a1e1" }, { "revolvenant", "d5a7b95774cd41f080e517bea07bf495" }, { "gunreaper", "88f037c3f93b4362a040a87b30770407" }, { "bullat", "2feb50a6a40f4f50982e89fd276f6f15" }, { "shotgat", "2d4f8b5404614e7d8b235006acde427a" }, { "grenat", "b4666cb6ef4f4b038ba8924fd8adf38f" }, { "spirat", "7ec3e8146f634c559a7d58b19191cd43" }, { "king_bullat", "1a4872dafdb34fd29fe8ac90bd2cea67" }, { "gargoyle", "981d358ffc69419bac918ca1bdf0c7f7" }, { "apprentice_gunjurer", "206405acad4d4c33aac6717d184dc8d4" }, { "gunjurer", "c4fba8def15e47b297865b18e36cbef8" }, { "high_gunjurer", "9b2cf2949a894599917d4d391a0b7394" }, { "lore_gunjurer", "56fb939a434140308b8f257f0f447829" }, { "bookllet", "c0ff3744760c4a2eb0bb52ac162056e6" }, { "blue_bookllet", "6f22935656c54ccfb89fca30ad663a64" }, { "green_bookllet", "a400523e535f41ac80a43ff6b06dc0bf" }, { "necronomicon", "216fd3dfb9da439d9bd7ba53e1c76462" }, { "tablet_bookllett", "78e0951b097b46d89356f004dda27c42" }, { "mountain_cube", "f155fd2759764f4a9217db29dd21b7eb" }, { "lead_cube", "33b212b856b74ff09252bf4f2e8b8c57" }, { "flesh_cube", "3f2026dc3712490289c4658a2ba4a24b" }, { "brown_chest_mimic", "2ebf8ef6728648089babb507dec4edb7" }, { "blue_chest_mimic", "d8d651e3484f471ba8a2daa4bf535ce6" }, { "green_chest_mimic", "abfb454340294a0992f4173d6e5898a8" }, { "red_chest_mimic", "d8fd592b184b4ac9a3be217bc70912a2" }, { "black_chest_mimic", "6450d20137994881aff0ddd13e3d40c8" }, { "rat_chest_mimic", "ac9d345575444c9a8d11b799e8719be0" }, { "pedestal_mimic", "796a7ed4ad804984859088fc91672c7f" }, { "wall_mimic", "479556d05c7c44f3b6abb3b2067fc778" }, { "gun_nut", "ec8ea75b557d4e7b8ceeaacdf6f8238c" }, { "chain_gunner", "463d16121f884984abe759de38418e48" }, { "spectral_gun_nut", "383175a55879441d90933b5c4e60cf6f" }, { "det", "ac986dabc5a24adab11d48a4bccf4cb1" }, { "x_det", "48d74b9c65f44b888a94f9e093554977" }, { "diagonal_x_det", "c5a0fd2774b64287bf11127ca59dd8b4" }, { "vertical_det", "b67ffe82c66742d1985e5888fd8e6a03" }, { "diagonal_det", "d9632631a18849539333a92332895ebd" }, { "horizontal_det", "1898f6fe1ee0408e886aaf05c23cc216" }, { "vertical_x_det", "abd816b0bcbf4035b95837ca931169df" }, { "horizontal_x_det", "07d06d2b23cc48fe9f95454c839cb361" }, { "gunsinger", "cf2b7021eac44e3f95af07db9a7c442c" }, { "aged_gunsinger", "c50a862d19fc4d30baeba54795e8cb93" }, { "ammomancer", "b1540990a4f1480bbcb3bea70d67f60d" }, { "jammomancer", "8b4a938cdbc64e64822e841e482ba3d2" }, { "jamerlengo", "ba657723b2904aa79f9e51bce7d23872" }, { "gun_cultist", "57255ed50ee24794b7aac1ac3cfb8a95" }, { "gat", "9b4fb8a2a60a457f90dcf285d34143ac" }, { "grey_cylinder", "d4f4405e0ff34ab483966fd177f2ece3" }, { "red_cylinder", "534f1159e7cf4f6aa00aeea92459065e" }, { "bullet_mech", "2b6854c0849b4b8fb98eb15519d7db1c" }, { "grenade_kin", "4d37ce3d666b4ddda8039929225b7ede" }, { "dynamite_kin", "c0260c286c8d4538a697c5bf24976ccf" }, { "bombshee", "19b420dec96d4e9ea4aebc3398c0ba7a" }, { "m80_kin", "5f15093e6f684f4fb09d3e7e697216b4" }, { "rubber_kin", "6b7ef9e5d05b4f96b04f05ef4a0d1b18" }, { "tazie", "98fdf153a4dd4d51bf0bafe43f3c77ff" }, { "sniper_shell", "31a3ea0c54a745e182e22ea54844a82d" }, { "professional", "c5b11bfc065d417b9c4d03a5e385fe2c" }, { "muzzle_wisp", "ffdc8680bdaa487f8f31995539f74265" }, { "muzzle_flare", "d8a445ea4d944cc1b55a40f22821ae69" }, { "wizbang", "43426a2e39584871b287ac31df04b544" }, { "coaler", "9d50684ce2c044e880878e86dbada919" }, { "fungun", "f905765488874846b7ff257ff81d6d0c" }, { "bullet_shark", "72d2f44431da43b8a3bae7d8a114a46d" }, { "arrow_head", "05891b158cd542b1a5f3df30fb67a7ff" }, { "pot_fairy", "c182a5cb704d460d9d099a47af49c913" }, { "musketball", "226fd90be3a64958a5b13cb0a4f43e97" }, { "western_cactus", "3b0bd258b4c9432db3339665cc61c356" }, { "candle_kin", "37de0df92697431baa47894a075ba7e9" }, { "gigi", "ed37fa13e0fa4fcf8239643957c51293" }, { "misfire_beast", "45192ff6d6cb43ed8f1a874ab6bef316" }, { "phaser_spider", "98ca70157c364750a60f5e0084f9d3e2" }, { "gunzookie", "6e972cd3b11e4b429b888b488e308551" }, { "gunzockie", "8a9e9bedac014a829a48735da6daf3da" }, { "chameleon", "80ab6cd15bfc46668a8844b2975c6c26" }, { "bird_parrot", "4b21a913e8c54056bc05cafecf9da880" }, { "western_snake", "e861e59012954ab2b9b6977da85cb83c" }, { "kalibullet", "ff4f54ce606e4604bf8d467c1279be3e" }, { "kbullet", "f020570a42164e2699dcf57cac8a495c" }, { "blue_fish_bullet_kin", "tit" }, { "green_fish_bullet_kin", "143be8c9bbb84e3fb3ab98bcd4cf5e5b" }, { "tarnisher", "475c20c1fd474dfbad54954e7cba29c1" }, { "agonizer", "3f6d6b0c4a7c4690807435c7b37c35a5" }, { "lead_maiden", "cd4a4b7f612a4ba9a720b9f97c52f38c" }, { "grip_master", "22fc2c2c45fb47cf9fb5f7b043a70122" }, { "shambling_round", "98ea2fe181ab4323ab6e9981955a9bca" }, { "great_bullet_shark", "b70cbd875fea498aa7fd14b970248920" }, { "killithid", "3e98ccecf7334ff2800188c417e67c15" }, { "spogre", "eed5addcc15148179f300cc0d9ee7f94" }, { "fridge_maiden", "9215d1a221904c7386b481a171e52859" }, { "titan_bullet_kin", "c4cf0620f71c4678bb8d77929fd4feff" }, { "titan_bullet_kin_boss", "1f290ea06a4c416cabc52d6b3cf47266" }, { "titaness_bullet_kin_boss", "df4e9fedb8764b5a876517431ca67b86" }, { "beadie", "7b0b1b6d9ce7405b86b75ce648025dd6" }, { "tombstoner", "cf27dd464a504a428d87a8b2560ad40a" }, { "ammoconda_ball", "f38686671d524feda75261e469f30e0b" }, { "summoned_treadnaughts_bullet_kin", "47bdfec22e8e4568a619130a267eab5b" }, { "mine_flayers_bell", "78a8ee40dff2477e9c2134f6990ef297" }, { "mine_flayers_claymore", "566ecca5f3b04945ac6ce1f26dedbf4f" }, { "candle_guy", "eeb33c3a5a8e4eaaaaf39a743e8767bc" }, { "bullet_kings_toadie", "b5e699a0abb94666bda567ab23bd91c4" }, { "bullet_kings_toadie_revenge", "d4dd2b2bbda64cc9bcec534b4e920518" }, { "old_kings_toadie", "02a14dec58ab45fb8aacde7aacd25b01" }, { "fusebot", "4538456236f64ea79f483784370bc62f" }, { "mouser", "be0683affb0e41bbb699cb7125fdded6" }, { "draguns_knife", "78eca975263d4482a4bfa4c07b32e252" }, { "dragun_knife_advanced", "2e6223e42e574775b56c6349921f42cb" }, { "marines_past_imp", "a9cc6a4e9b3d46ea871e70a03c9f77d4" }, { "convicts_past_soldier", "556e9f2a10f9411cb9dbfd61e0e0f1e1" }, { "robots_past_terminator", "12a054b8a6e549dcac58a82b89e319e5" }, { "blockner_rematch", "edc61b105ddd4ce18302b82efdc47178" }, { "fuselier", "39de9bd6a863451a97906d949c103538" }, { "shadow_agunim", "db97e486ef02425280129e1e27c33118" }, { "bullet_king", "ffca09398635467da3b1f4a54bcfda80" }, { "blobulord", "1b5810fafbec445d89921a4efb4e42b7" }, { "old_king", "5729c8b5ffa7415bb3d01205663a33ef" }, { "cannonbalrog", "5e0af7f7d9de4755a68d2fd3bbc15df4" }, { "door_lord", "9189f46c47564ed588b9108965f975c9" }, { "lich", "cd88c3ce60c442e9aa5b3904d31652bc" }, { "megalich", "68a238ed6a82467ea85474c595c49c6e" }, { "infinilich", "7c5d5f09911e49b78ae644d2b50ff3bf" }, { "chicken", "76bc43539fc24648bff4568c75c686d1" }, { "poopulons_corn", "0ff278534abb4fbaaa65d3f638003648" }, { "snake", "1386da0f42fb4bcabc5be8feb16a7c38" }, { "tiny_blobulord", "d1c9781fdac54d9e8498ed89210a0238" }, { "robots_past_critter_1", "95ea1a31fc9e4415a5f271b9aedf9b15" }, { "robots_past_critter_2", "42432592685e47c9941e339879379d3a" }, { "robots_past_critter_3", "4254a93fc3c84c0dbe0a8f0dddf48a5a" }, { "rat", "6ad1cafc268f4214a101dca7af61bc91" }, { "rat_candle", "14ea47ff46b54bb4a98f91ffcffb656d" }, { "dragun_egg_slimeguy", "8b43a5c59b854eb780f9ab669ec26b7a" }, { "ammoconda", "da797878d215453abba824ff902e21b4" } }; } public class AdvancedGunBehaviourMultiActive : MonoBehaviour, IGunInheritable, ILevelLoadedListener { private bool pickedUpLast = false; private GameActor lastOwner = null; public bool everPickedUpByPlayer = false; public bool everPickedUp = false; public Gun gun; private bool hasReloaded = true; public bool preventNormalFireAudio; public bool preventNormalReloadAudio; public string overrideNormalFireAudio; public string overrideReloadSwitchGroup; public string overrideNormalReloadAudio; public bool usesOverrideHeroSwordCooldown; public float overrideHeroSwordCooldown; private static FieldInfo heroSwordCooldown = typeof(Gun).GetField("HeroSwordCooldown", BindingFlags.Instance | BindingFlags.NonPublic); public bool PickedUp => (Object)(object)gun.CurrentOwner != (Object)null; public PlayerController Player { get { if (gun.CurrentOwner is PlayerController) { GameActor currentOwner = gun.CurrentOwner; return (PlayerController)(object)((currentOwner is PlayerController) ? currentOwner : null); } return null; } } public float HeroSwordCooldown { get { if ((Object)(object)gun != (Object)null) { return (float)heroSwordCooldown.GetValue(gun); } return -1f; } set { if ((Object)(object)gun != (Object)null) { heroSwordCooldown.SetValue(gun, value); } } } public GameActor Owner => gun.CurrentOwner; public bool PickedUpByPlayer => (Object)(object)Player != (Object)null; public virtual void Update() { if ((Object)(object)Player != (Object)null && !everPickedUpByPlayer) { everPickedUpByPlayer = true; } if ((Object)(object)Owner != (Object)null && !everPickedUp) { everPickedUp = true; } if ((Object)(object)lastOwner != (Object)(object)Owner) { lastOwner = Owner; } if ((Object)(object)Owner != (Object)null && !pickedUpLast) { OnPickup(Owner); pickedUpLast = true; } if ((Object)(object)Owner == (Object)null && pickedUpLast) { if ((Object)(object)lastOwner != (Object)null) { OnPostDrop(lastOwner); lastOwner = null; } pickedUpLast = false; } if ((Object)(object)gun != (Object)null && !gun.IsReloading && !hasReloaded) { hasReloaded = true; if ((Object)(object)Owner != (Object)null) { GameActor owner = Owner; OnReloadEnded((PlayerController)(object)((owner is PlayerController) ? owner : null), gun); } } gun.PreventNormalFireAudio = preventNormalFireAudio; gun.OverrideNormalFireAudioEvent = overrideNormalFireAudio; } public virtual void InheritData(Gun source) { AdvancedGunBehaviourMultiActive component = ((Component)source).GetComponent<AdvancedGunBehaviourMultiActive>(); if ((Object)(object)component != (Object)null) { preventNormalFireAudio = component.preventNormalFireAudio; preventNormalReloadAudio = component.preventNormalReloadAudio; overrideNormalReloadAudio = component.overrideNormalReloadAudio; overrideNormalFireAudio = component.overrideNormalFireAudio; everPickedUpByPlayer = component.everPickedUpByPlayer; everPickedUp = component.everPickedUp; usesOverrideHeroSwordCooldown = component.usesOverrideHeroSwordCooldown; overrideHeroSwordCooldown = component.overrideHeroSwordCooldown; overrideReloadSwitchGroup = component.overrideReloadSwitchGroup; } } public virtual void MidGameSerialize(List<object> data, int dataIndex) { data.Add(preventNormalFireAudio); data.Add(preventNormalReloadAudio); data.Add(overrideNormalReloadAudio); data.Add(overrideNormalFireAudio); data.Add(everPickedUpByPlayer); data.Add(everPickedUp); data.Add(usesOverrideHeroSwordCooldown); data.Add(overrideHeroSwordCooldown); data.Add(overrideReloadSwitchGroup); } public virtual void MidGameDeserialize(List<object> data, ref int dataIndex) { preventNormalFireAudio = (bool)data[dataIndex]; preventNormalReloadAudio = (bool)data[dataIndex + 1]; overrideNormalReloadAudio = (string)data[dataIndex + 2]; overrideNormalFireAudio = (string)data[dataIndex + 3]; everPickedUpByPlayer = (bool)data[dataIndex + 4]; everPickedUp = (bool)data[dataIndex + 5]; usesOverrideHeroSwordCooldown = (bool)data[dataIndex + 6]; overrideHeroSwordCooldown = (float)data[dataIndex + 7]; overrideReloadSwitchGroup = (string)data[dataIndex + 8]; dataIndex += 9; } public virtual void Start() { gun = ((Component)this).GetComponent<Gun>(); Gun obj = gun; obj.OnInitializedWithOwner = (Action<GameActor>)Delegate.Combine(obj.OnInitializedWithOwner, new Action<GameActor>(OnInitializedWithOwner)); if ((Object)(object)gun.CurrentOwner != (Object)null) { OnInitializedWithOwner(gun.CurrentOwner); } Gun obj2 = gun; obj2.PostProcessProjectile = (Action<Projectile>)Delegate.Combine(obj2.PostProcessProjectile, new Action<Projectile>(PostProcessProjectile)); Gun obj3 = gun; obj3.PostProcessVolley = (Action<ProjectileVolleyData>)Delegate.Combine(obj3.PostProcessVolley, new Action<ProjectileVolleyData>(PostProcessVolley)); Gun obj4 = gun; obj4.OnDropped = (Action)Delegate.Combine(obj4.OnDropped, new Action(OnDropped)); Gun obj5 = gun; obj5.OnAutoReload = (Action<PlayerController, Gun>)Delegate.Combine(obj5.OnAutoReload, new Action<PlayerController, Gun>(OnAutoReload)); Gun obj6 = gun; obj6.OnReloadPressed = (Action<PlayerController, Gun, bool>)Delegate.Combine(obj6.OnReloadPressed, new Action<PlayerController, Gun, bool>(OnReloadPressed)); Gun obj7 = gun; obj7.OnFinishAttack = (Action<PlayerController, Gun>)Delegate.Combine(obj7.OnFinishAttack, new Action<PlayerController, Gun>(OnFinishAttack)); Gun obj8 = gun; obj8.OnPostFired = (Action<PlayerController, Gun>)Delegate.Combine(obj8.OnPostFired, new Action<PlayerController, Gun>(OnPostFired)); Gun obj9 = gun; obj9.OnAmmoChanged = (Action<PlayerController, Gun>)Delegate.Combine(obj9.OnAmmoChanged, new Action<PlayerController, Gun>(OnAmmoChanged)); Gun obj10 = gun; obj10.OnBurstContinued = (Action<PlayerController, Gun>)Delegate.Combine(obj10.OnBurstContinued, new Action<PlayerController, Gun>(OnBurstContinued)); Gun obj11 = gun; obj11.OnPreFireProjectileModifier = (Func<Gun, Projectile, ProjectileModule, Projectile>)Delegate.Combine(obj11.OnPreFireProjectileModifier, new Func<Gun, Projectile, ProjectileModule, Projectile>(OnPreFireProjectileModifier)); ((MonoBehaviour)this).StartCoroutine(UpdateCR()); } public virtual void BraveOnLevelWasLoaded() { } private IEnumerator UpdateCR() { while (true) { NonCurrentGunUpdate(); yield return null; } } public virtual void NonCurrentGunUpdate() { } public virtual void OnInitializedWithOwner(GameActor actor) { } public virtual void PostProcessProjectile(Projectile projectile) { } public virtual void PostProcessVolley(ProjectileVolleyData volley) { } public virtual void OnDropped() { } public virtual void OnAutoReload(PlayerController player, Gun gun) { if ((Object)(object)player != (Object)null) { OnAutoReloadSafe(player, gun); } } public virtual void OnAutoReloadSafe(PlayerController player, Gun gun) { } public virtual void OnReloadPressed(PlayerController player, Gun gun, bool manualReload) { if (hasReloaded && gun.IsReloading) { OnReload(player, gun); hasReloaded = false; } if ((Object)(object)player != (Object)null) { OnReloadPressedSafe(player, gun, manualReload); } } public virtual void OnGunsChanged(Gun previous, Gun current, bool newGun) { if ((Object)(object)previous != (Object)(object)gun && (Object)(object)current == (Object)(object)gun) { OnSwitchedToThisGun(); } if ((Object)(object)previous == (Object)(object)gun && (Object)(object)current != (Object)(object)gun) { OnSwitchedAwayFromThisGun(); } } public virtual void OnSwitchedToThisGun() { } public virtual void OnSwitchedAwayFromThisGun() { } public virtual void OnReloadPressedSafe(PlayerController player, Gun gun, bool manualReload) { if (hasReloaded && gun.IsReloading) { OnReloadSafe(player, gun); hasReloaded = false; } } public virtual void OnReload(PlayerController player, Gun gun) { if (preventNormalReloadAudio) { AkSoundEngine.PostEvent("Stop_WPN_All", ((Component)this).gameObject); if (!string.IsNullOrEmpty(overrideNormalReloadAudio)) { AkSoundEngine.PostEvent(overrideNormalReloadAudio, ((Component)this).gameObject); } } } public virtual void OnReloadEnded(PlayerController player, Gun gun) { if ((Object)(object)player != (Object)null) { OnReloadEndedSafe(player, gun); } } public virtual void OnReloadEndedSafe(PlayerController player, Gun gun) { } public virtual void OnReloadSafe(PlayerController player, Gun gun) { } public virtual void OnFinishAttack(PlayerController player, Gun gun) { } public virtual void OnPostFired(PlayerController player, Gun gun) { if (gun.IsHeroSword && HeroSwordCooldown == 0.5f) { OnHeroSwordCooldownStarted(player, gun); } } public virtual void OnHeroSwordCooldownStarted(PlayerController player, Gun gun) { if (usesOverrideHeroSwordCooldown) { HeroSwordCooldown = overrideHeroSwordCooldown; } } public virtual void OnAmmoChanged(PlayerController player, Gun gun) { if ((Object)(object)player != (Object)null) { OnAmmoChangedSafe(player, gun); } } public virtual void OnAmmoChangedSafe(PlayerController player, Gun gun) { } public virtual void OnBurstContinued(PlayerController player, Gun gun) { if ((Object)(object)player != (Object)null) { OnBurstContinuedSafe(player, gun); } } public virtual void OnBurstContinuedSafe(PlayerController player, Gun gun) { } public virtual Projectile OnPreFireProjectileModifier(Gun gun, Projectile projectile, ProjectileModule mod) { return projectile; } public virtual void OnPickup(GameActor owner) { if (owner is PlayerController) { OnPickedUpByPlayer((PlayerController)(object)((owner is PlayerController) ? owner : null)); } if (owner is AIActor) { OnPickedUpByEnemy((AIActor)(object)((owner is AIActor) ? owner : null)); } } public virtual void OnPostDrop(GameActor owner) { if (owner is PlayerController) { OnPostDroppedByPlayer((PlayerController)(object)((owner is PlayerController) ? owner : null)); } if (owner is AIActor) { OnPostDroppedByEnemy((AIActor)(object)((owner is AIActor) ? owner : null)); } } public virtual void OnPickedUpByPlayer(PlayerController player) { player.GunChanged += OnGunsChanged; } public virtual void OnPostDroppedByPlayer(PlayerController player) { } public virtual void OnPickedUpByEnemy(AIActor enemy) { } public virtual void OnPostDroppedByEnemy(AIActor enemy) { } } public class AdvancedGunBehavior : MonoBehaviour { private bool pickedUpLast = false; private PlayerController lastPlayer = null; public bool everPickedUpByPlayer = false; public Gun gun; private bool hasReloaded = true; public bool preventNormalFireAudio; public bool preventNormalReloadAudio; public string overrrideNormalFireAudio; public string overrideNormalReloadAudio; private static FieldInfo heroSwordCooldown = typeof(Gun).GetField("HeroSwordCooldown", BindingFlags.Instance | BindingFlags.NonPublic); public bool PickedUp => (Object)(object)gun.CurrentOwner != (Object)null; public PlayerController Player { get { if (gun.CurrentOwner is PlayerController) { GameActor currentOwner = gun.CurrentOwner; return (PlayerController)(object)((currentOwner is PlayerController) ? currentOwner : null); } return null; } } public float HeroSwordCooldown { get { if ((Object)(object)gun != (Object)null) { return (float)heroSwordCooldown.GetValue(gun); } return -1f; } set { if ((Object)(object)gun != (Object)null) { heroSwordCooldown.SetValue(gun, value); } } } public GameActor Owner => gun.CurrentOwner; public bool OwnerIsPlayer => (Object)(object)Player != (Object)null; public virtual void Update() { if ((Object)(object)Player != (Object)null) { lastPlayer = Player; if (!everPickedUpByPlayer) { everPickedUpByPlayer = true; } } if ((Object)(object)Player != (Object)null && !pickedUpLast) { OnPickup(Player); pickedUpLast = true; } if ((Object)(object)Player == (Object)null && pickedUpLast) { if ((Object)(object)lastPlayer != (Object)null) { OnPostDrop(lastPlayer); lastPlayer = null; } pickedUpLast = false; } if ((Object)(object)gun != (Object)null && !gun.IsReloading && !hasReloaded) { hasReloaded = true; } gun.PreventNormalFireAudio = preventNormalFireAudio; gun.OverrideNormalFireAudioEvent = overrrideNormalFireAudio; } public virtual void Start() { gun = ((Component)this).GetComponent<Gun>(); Gun val = gun; val.OnInitializedWithOwner = (Action<GameActor>)Delegate.Combine(val.OnInitializedWithOwner, new Action<GameActor>(OnInitializedWithOwner)); Gun val2 = gun; val2.PostProcessProjectile = (Action<Projectile>)Delegate.Combine(val2.PostProcessProjectile, new Action<Projectile>(PostProcessProjectile)); Gun val3 = gun; val3.PostProcessVolley = (Action<ProjectileVolleyData>)Delegate.Combine(val3.PostProcessVolley, new Action<ProjectileVolleyData>(PostProcessVolley)); Gun val4 = gun; val4.OnDropped = (Action)Delegate.Combine(val4.OnDropped, new Action(OnDropped)); Gun val5 = gun; val5.OnAutoReload = (Action<PlayerController, Gun>)Delegate.Combine(val5.OnAutoReload, new Action<PlayerController, Gun>(OnAutoReload)); Gun val6 = gun; val6.OnReloadPressed = (Action<PlayerController, Gun, bool>)Delegate.Combine(val6.OnReloadPressed, new Action<PlayerController, Gun, bool>(OnReloadPressed)); Gun val7 = gun; val7.OnFinishAttack = (Action<PlayerController, Gun>)Delegate.Combine(val7.OnFinishAttack, new Action<PlayerController, Gun>(OnFinishAttack)); Gun val8 = gun; val8.OnPostFired = (Action<PlayerController, Gun>)Delegate.Combine(val8.OnPostFired, new Action<PlayerController, Gun>(OnPostFired)); Gun val9 = gun; val9.OnAmmoChanged = (Action<PlayerController, Gun>)Delegate.Combine(val9.OnAmmoChanged, new Action<PlayerController, Gun>(OnAmmoChanged)); Gun val10 = gun; val10.OnBurstContinued = (Action<PlayerController, Gun>)Delegate.Combine(val10.OnBurstContinued, new Action<PlayerController, Gun>(OnBurstContinued)); Gun val11 = gun; val11.OnPreFireProjectileModifier = (Func<Gun, Projectile, ProjectileModule, Projectile>)Delegate.Combine(val11.OnPreFireProjectileModifier, new Func<Gun, Projectile, ProjectileModule, Projectile>(OnPreFireProjectileModifier)); Gun val12 = gun; } public virtual void OnInitializedWithOwner(GameActor actor) { } public virtual void PostProcessProjectile(Projectile projectile) { } public virtual void PostProcessVolley(ProjectileVolleyData volley) { } public virtual void OnDropped() { } public virtual void OnAutoReload(PlayerController player, Gun gun) { } public virtual void OnReloadPressed(PlayerController player, Gun gun, bool bSOMETHING) { if (hasReloaded) { OnReload(player, gun); hasReloaded = false; } } public virtual void OnReload(PlayerController player, Gun gun) { if (preventNormalReloadAudio) { AkSoundEngine.PostEvent("Stop_WPN_All", ((Component)this).gameObject); if (!string.IsNullOrEmpty(overrideNormalReloadAudio)) { AkSoundEngine.PostEvent(overrideNormalReloadAudio, ((Component)this).gameObject); } } } public virtual void OnFinishAttack(PlayerController player, Gun gun) { } public virtual void OnPostFired(PlayerController player, Gun gun) { if (gun.IsHeroSword && (float)heroSwordCooldown.GetValue(gun) == 0.5f) { OnHeroSwordCooldownStarted(player, gun); } } public virtual void OnHeroSwordCooldownStarted(PlayerController player, Gun gun) { } public virtual void OnAmmoChanged(PlayerController player, Gun gun) { } public virtual void OnBurstContinued(PlayerController player, Gun gun) { } public virtual Projectile OnPreFireProjectileModifier(Gun gun, Projectile projectile, ProjectileModule mod) { return projectile; } public virtual void OnPickup(PlayerController player) { } public virtual void OnPostDrop(PlayerController player) { } } internal class IronHeart : PlayerItem { public static void Init() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown //IL_0058: Unknown result type (might be due to invalid IL or missing references) string text = "Iron Heart"; string text2 = "Items/Resources/ItemSprites/Actives/iron_heart.png"; GameObject val = new GameObject(); IronHeart ironHeart = val.AddComponent<IronHeart>(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "Proof You Have a Heart"; string text4 = "Removes all but one heart container and gives double the amount in armor, plus 2 extra.\n\nThis heart-shaped pin converts all iron, carbon, and other 'necessary' trace metals that scientists claim are 'vital for human survival' and 'required for bodily functions' into an ultimate shield!"; ItemBuilder.SetupItem((PickupObject)(object)ironHeart, text3, text4, "ck"); ItemBuilder.SetCooldownType((PlayerItem)(object)ironHeart, (CooldownType)0, 1.5f); ((PlayerItem)ironHeart).consumable = true; ((PickupObject)ironHeart).quality = (ItemQuality)3; ((BraveBehaviour)ironHeart).sprite.IsPerpendicular = true; } public override void DoEffect(PlayerController user) { //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007d: 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_0085: Expected O, but got Unknown float maxHealth = ((BraveBehaviour)user).healthHaver.GetMaxHealth(); float num = maxHealth - 1f; AkSoundEngine.PostEvent("Play_OBJ_dead_again_01", ((Component)this).gameObject); HealthHaver healthHaver = ((BraveBehaviour)user).healthHaver; healthHaver.Armor += maxHealth * 2f; if (user.HasPickupID(314)) { HealthHaver healthHaver2 = ((BraveBehaviour)user).healthHaver; healthHaver2.Armor += 3f; } StatModifier item = new StatModifier { statToBoost = (StatType)3, amount = 0f - num, modifyType = (ModifyMethod)0 }; user.ownerlessStatModifiers.Add(item); user.stats.RecalculateStats(user, false, false); } public override void Pickup(PlayerController player) { if (!base.m_pickedUp) { ((PlayerItem)this).Pickup(player); } } public DebrisObject Drop(PlayerController player) { DebrisObject val = ((PlayerItem)this).Drop(player, 4f); ((PlayerItem)((Component)val).GetComponent<IronHeart>()).m_pickedUpThisRun = true; return val; } } namespace BasicGun { public class BasicGun : GunBehaviour { public static void Add() { //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) Gun val = Databases.Items.NewGun("Basic Gun", "jpxfrd"); Game.Items.Rename("outdated_gun_mods:basic_gun", "kp:basic_gun"); ((Component)val).gameObject.AddComponent<BasicGun>(); GunExt.SetShortDescription((PickupObject)(object)val, "Impressionable"); GunExt.SetLongDescription((PickupObject)(object)val, "A gun left unfinished and abandoned by its creator. It still has great potential."); GunExt.SetupSprite(val, (tk2dSpriteCollectionData)null, "jpxfrd_idle_001", 8); GunExt.SetAnimationFPS(val, val.shootAnimation, 24); GunExt.AddProjectileModuleFrom(val, "ak-47", false, true); val.DefaultModule.ammoCost = 1; val.DefaultModule.shootStyle = (ShootStyle)0; val.DefaultModule.sequenceStyle = (ProjectileSequenceStyle)0; val.reloadTime = 1.1f; val.DefaultModule.cooldownTime = 0.1f; val.DefaultModule.numberOfShotsInClip = 6; val.SetBaseMaxAmmo(250); ((PickupObject)val).quality = (ItemQuality)1; ((BraveBehaviour)val).encounterTrackable.EncounterGuid = "change this for different guns, so the game doesn't think they're the same gun"; Databases.Items.Add(((Component)val).GetComponent<PickupObject>(), false, "ANY"); } public override void PostProcessProjectile(Projectile projectile) { GameActor currentOwner = base.gun.CurrentOwner; PlayerController val = (PlayerController)(object)((currentOwner is PlayerController) ? currentOwner : null); if ((Object)(object)val == (Object)null) { base.gun.ammo = base.gun.GetBaseMaxAmmo(); } ProjectileData baseData = projectile.baseData; baseData.damage *= 1.1f; ProjectileData baseData2 = projectile.baseData; baseData2.speed *= 1f; base.gun.DefaultModule.ammoCost = 1; ((GunBehaviour)this).PostProcessProjectile(projectile); } public override void OnPostFired(PlayerController player, Gun gun) { gun.PreventNormalFireAudio = true; AkSoundEngine.PostEvent("Play_WPN_smileyrevolver_shot_01", ((Component)this).gameObject); } } } namespace CustomItems { public class BabyGoodBlob : CompanionItem { public class RandomGoopTrailBehaviour : CompanionController { private int goopIndex; private float lastSwitch = 0f; private const float switchTime = 10f; private GoopDefinition currentGoop; private Color tint = Color.white; private void Start() { //IL_00d4: Unknown result type (might be due to invalid IL or missing references) AssetBundle val = ResourceManager.LoadAssetBundle("shared_auto_001"); BabyGoodBlob.goopDefs = new List<GoopDefinition>(); string[] goops = BabyGoodBlob.goops; foreach (string text in goops) { GoopDefinition val3; try { Object obj = val.LoadAsset(text); GameObject val2 = (GameObject)(object)((obj is GameObject) ? obj : null); val3 = val2.GetComponent<GoopDefinition>(); } catch { Object obj2 = val.LoadAsset(text); val3 = (GoopDefinition)(object)((obj2 is GoopDefinition) ? obj2 : null); } ((Object)val3).name = text.Replace("assets/data/goops/", "").Replace(".asset", ""); BabyGoodBlob.goopDefs.Add(val3); } List<GoopDefinition> goopDefs = BabyGoodBlob.goopDefs; PickupObject byId = PickupObjectDatabase.GetById(310); goopDefs.Add((byId == null) ? null : ((Component)byId).GetComponent<WingsItem>()?.RollGoop); SetGoopIndex(0); ((BraveBehaviour)this).sprite.color = tints[0]; ((BraveBehaviour)this).spriteAnimator.Play("idle"); } private void FixedUpdate() { //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) if (Time.time - lastSwitch > 10f) { SetGoopIndex(Random.Range(1, goopDefs.Count)); lastSwitch = Time.time; AIActor aiActor = ((BraveBehaviour)this).aiActor; PlayerController owner = base.m_owner; object overrideTarget; if (owner == null) { overrideTarget = null; } else { RoomHandler currentRoom = owner.CurrentRoom; if (currentRoom == null) { overrideTarget = null; } else { AIActor randomActiveEnemy = currentRoom.GetRandomActiveEnemy(false); overrideTarget = ((randomActiveEnemy != null) ? ((BraveBehaviour)randomActiveEnemy).specRigidbody : null); } } aiActor.OverrideTarget = (SpeculativeRigidbody)overrideTarget; } if (!base.m_owner.IsInCombat) { SetGoopIndex(0); } ((BraveBehaviour)this).sprite.color = Color.Lerp(((BraveBehaviour)this).sprite.color, tint, 0.1f); float num = 0.5f; if (PassiveItem.IsFlagSetForCharacter(base.m_owner, typeof(BattleStandardItem))) { num *= 2f; } DeadlyDeadlyGoopManager goopManagerForGoopType = DeadlyDeadlyGoopManager.GetGoopManagerForGoopType(currentGoop); goopManagerForGoopType.AddGoopCircle(((BraveBehaviour)this).sprite.WorldCenter, num, -1, false, -1); } private void SetGoopIndex(int index) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) goopIndex = index; currentGoop = goopDefs[index]; tint = tints[index]; } } public static GameObject blobPrefab; private static readonly string guid = "baby_good_blob"; private static string[] spritePaths = new string[6] { "CustomItems/Resources/P2/blob/blob_001", "CustomItems/Resources/P2/blob/blob_002", "CustomItems/Resources/P2/blob/blob_003", "CustomItems/Resources/P2/blob/blob_004", "CustomItems/Resources/P2/blob/blob_005", "CustomItems/Resources/P2/blob/blob_006" }; private static tk2dSpriteCollectionData blobCollection; private static string[] goops = new string[3] { "assets/data/goops/blobulongoop.asset", "assets/data/goops/napalmgoopthatworks.asset", "assets/data/goops/poison goop.asset" }; private static Color[] tints = (Color[])(object)new Color[4] { new Color(0.9f, 0.34f, 0.45f), new Color(1f, 0.5f, 0.35f), new Color(0.7f, 0.9f, 0.7f), new Color(0.9f, 0.4f, 0.8f) }; private static List<GoopDefinition> goopDefs; public static void Init() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) string text = "Baby Good Blob"; string text2 = "CustomItems/Resources/P2/baby_blob"; GameObject val = new GameObject(); BabyGoodBlob babyGoodBlob = val.AddComponent<BabyGoodBlob>(); ItemBuilder.AddSpriteToObject(text, text2, val, (Assembly)null); string text3 = "Scourge of the Empire"; string text4 = "This young blobulin was injected with a serum that gave him ultimate power.\n\nAfraid that he would grow too powerful to control, the chief blobulonians made an attempt on his life.\n\nWrong move."; ItemBuilder.SetupItem((PickupObject)(object)babyGoodBlob, text3, text4, "kts"); ((PickupObject)babyGoodBlob).quality = (ItemQuality)4; ((CompanionItem)babyGoodBlob).CompanionGuid = guid; ((CompanionItem)babyGoodBlob).Synergies = (CompanionTransformSynergy[])(object)new CompanionTransformSynergy[0]; BuildPrefab(); } public static void BuildPrefab() { //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Expected O, but got Unknown //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01bf: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Expected O, but got Unknown if ((Object)(object)blobPrefab != (Object)null || CompanionBuilder.companionDictionary.ContainsKey(guid)) { ETGModConsole.Log((object)"Tried to make the same Blob prefab twice!", false); return; } blobPrefab = CompanionBuilder.BuildPrefab("Baby Good Blob", guid, spritePaths[0], new IntVector2(1, 0), new IntVector2(9, 9)); RandomGoopTrailBehaviour randomGoopTrailBehaviour = blobPrefab.AddComponent<RandomGoopTrailBehaviour>(); AIAnimator component = blobPrefab.GetComponent<AIAnimator>(); DirectionalAnimation val = new DirectionalAnimation(); val.AnimNames = new string[1] { "idle" }; val.Type = (DirectionType)0; component.MoveAnimation = val; component.IdleAnimation = component.MoveAnimation; if ((Object)(object)blobCollection == (Object)null) { blobCollection = SpriteBuilder.ConstructCollection(blobPrefab, "Baby_Good_Blob_Collection", false); Object.DontDestroyOnLoad((Object)(object)blobCollection); for (int i = 0; i < spritePaths.Length; i++) { SpriteBuilder.AddSpriteToCollection(spritePaths[i], blobCollection, (Assembly)null); } SpriteBuilder.AddAnimation(((BraveBehaviour)randomGoopTrailBehaviour).spriteAnimator, blobCollection, new List<int> { 0, 1, 2, 3, 4, 5 }, "idle", (WrapMode)0, 15f).fps = 5f; } BehaviorSpeculator component2 = blobPrefab.GetComponent<BehaviorSpeculator>(); List<MovementBehaviorBase> movementBehaviors = component2.MovementBehaviors; CompanionFollowPlayerBehavior val2 = new CompanionFollowPlayerBehavior(); val2.IdleAnimations = new string[1] { "idle" }; movementBehaviors.Add((MovementBehaviorBase)(object)val2); component2.MovementBehaviors.Add((MovementBehaviorBase)new SeekTargetBehavior { LineOfSight = false, StopWhenInRange = true, CustomRange = 1f }); ((BraveBehaviour)randomGoopTrailBehaviour).aiActor.MovementSpeed = 7f; Object.DontDestroyOnLoad((Object)(object)blobPrefab); FakePrefab.MarkAsFakePrefab(blobPrefab); blobPrefab.SetActive(false); } } } namespace SaveAPI { [fsObject] public class AdvancedGameStats { [fsProperty] private Dictionary<CustomTrackedStats, float> stats; [fsProperty] private Dictionary<CustomTrackedMaximums, float> maxima; [fsProperty] public HashSet<CustomCharacterSpecificGungeonFlags> m_flags; public AdvancedGameStats() { m_flags = new HashSet<CustomCharacterSpecificGungeonFlags>(); stats = new Dictionary<CustomTrackedStats, float>(new CustomTrackedStatsComparer()); maxima = new Dictionary<CustomTrackedMaximums, float>(new CustomTrackedMaximumsComparer()); } public float GetStatValue(CustomTrackedStats statToCheck) { if (!stats.ContainsKey(statToCheck)) { return 0f; } return stats[statToCheck]; } public float GetMaximumValue(CustomTrackedMaximums maxToCheck) { if (!maxima.ContainsKey(maxToCheck)) { return 0f; } return maxima[maxToCheck]; } public bool GetFlag(CustomCharacterSpecificGungeonFlags flag) { if (flag == CustomCharacterSpecificGungeonFlags.NONE) { Debug.LogError((object)"Something is attempting to get a NONE character-specific save flag!"); return false; } return m_flags.Contains(flag); } public void SetStat(CustomTrackedStats stat, float val) { if (stats.ContainsKey(stat)) { stats[stat] = val; } else { stats.Add(stat, val); } } public void SetMax(CustomTrackedMaximums max, float val) { if (maxima.ContainsKey(max)) { maxima[max] = Mathf.Max(maxima[max], val); } else { maxima.Add(max, val); } } public void SetFlag(CustomCharacterSpecificGungeonFlags flag, bool value) { if (flag == CustomCharacterSpecificGungeonFlags.NONE) { Debug.LogError((object)"Something is attempting to set a NONE character-specific save flag!"); } else if (value) { m_flags.Add(flag); } else { m_flags.Remove(flag); } } public void IncrementStat(CustomTrackedStats stat, float val) { if (stats.ContainsKey(stat)) { stats[stat] += val; } else { stats.Add(stat, val); } } public void AddStats(AdvancedGameStats otherStats) { foreach (KeyValuePair<CustomTrackedStats, float> stat in otherStats.stats) { IncrementStat(stat.Key, stat.Value); } foreach (KeyValuePair<CustomTrackedMaximums, float> item in otherStats.maxima) { SetMax(item.Key, item.Value); } foreach (CustomCharacterSpecificGungeonFlags flag in otherStats.m_flags) { m_flags.Add(flag); } } public void ClearAllState() { List<CustomTrackedStats> list = new List<CustomTrackedStats>(); foreach (KeyValuePair<CustomTrackedStats, float> stat in stats) { list.Add(stat.Key); } foreach (CustomTrackedStats item in list) { stats[item] = 0f; } List<CustomTrackedMaximums> list2 = new List<CustomTrackedMaximums>(); foreach (KeyValuePair<CustomTrackedMaximums, float> item2 in maxima) { list2.Add(item2.Key); } foreach (CustomTrackedMaximums item3 in list2) { maxima[item3] = 0f; } } } [fsObject] internal class AdvancedGameStatsManager { private static AdvancedGameStatsManager m_instance; [fsProperty] public HashSet<CustomDungeonFlags> m_flags; [fsProperty] public string midGameSaveGuid; [fsProperty] public Dictionary<PlayableCharacters, AdvancedGameStats> m_characterStats; private AdvancedGameStats m_sessionStats; private AdvancedGameStats m_savedSessionStats; private PlayableCharacters m_sessionCharacter; private int m_numCharacters; [fsIgnore] public int cachedHuntIndex; [fsIgnore] public SaveSlot cachedSaveSlot; [fsIgnore] public bool IsInSession => m_sessionStats != null; public static bool HasInstance => m_instance != null; public static AdvancedGameStatsManager Instance => m_instance; public AdvancedGameStatsManager() { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Expected O, but got Unknown m_flags = new HashSet<CustomDungeonFlags>(new CustomDungeonFlagsComparer()); m_characterStats = new Dictionary<PlayableCharacters, AdvancedGameStats>((IEqualityComparer<PlayableCharacters>?)new PlayableCharactersComparer()); m_numCharacters = -1; cachedHuntIndex = -1; } public static void Unload() { m_instance = null; } public void SetCharacterSpecificFlag(PlayableCharacters character, CustomCharacterSpecificGungeonFlags flag, bool value) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) if (flag == CustomCharacterSpecificGungeonFlags.NONE) { Debug.LogError((object)"Something is attempting to set a NONE character-specific save flag!"); return; } if (!m_characterStats.ContainsKey(character)) { m_characterStats.Add(character, new AdvancedGameStats()); } if (m_sessionStats != null && m_sessionCharacter == character) { m_sessionStats.SetFlag(flag, value); } else { m_characterStats[character].SetFlag(flag, value); } } public void SetStat(CustomTrackedStats stat, float value) { if (!float.IsNaN(value) && !float.IsInfinity(value) && m_sessionStats != null) { m_sessionStats.SetStat(stat, value); } } public void UpdateMaximum(CustomTrackedMaximums maximum, float val) { if (!float.IsNaN(val) && !float.IsInfinity(val) && m_sessionStats != null) { m_sessionStats.SetMax(maximum, val); } } public bool GetCharacterSpecificFlag(CustomCharacterSpecificGungeonFlags flag) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) return GetCharacterSpecificFlag(m_sessionCharacter, flag); } public bool GetCharacterSpecificFlag(PlayableCharacters character, CustomCharacterSpecificGungeonFlags flag) { //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_0067: Unknown result type (might be due to invalid IL or missing references) if (flag == CustomCharacterSpecificGungeonFlags.NONE) { Debug.LogError((object)"Something is attempting to get a NONE character-specific save flag!"); return false; } if (m_sessionStats != null && m_sessionCharacter == character) { if (m_sessionStats.GetFlag(flag)) { return true; } if (m_savedSessionStats.GetFlag(flag)) { return true; } } AdvancedGameStats value; return m_characterStats.TryGetValue(character, out value) && value.GetFlag(flag); } public static void DoMidgameSave() { string text = Guid.NewGuid().ToString(); AdvancedMidGameSaveData advancedMidGameSaveData = new AdvancedMidGameSaveData(text); SaveManager.Save<AdvancedMidGameSaveData>(advancedMidGameSaveData, SaveAPIManager.AdvancedMidGameSave, GameStatsManager.Instance.PlaytimeMin, 0u, (SaveSlot?)null); Instance.midGameSaveGuid = text; Save(); } public void RegisterStatChange(CustomTrackedStats stat, float value) { if (m_sessionStats == null) { Debug.LogError((object)"No session stats active and we're registering a stat change!"); } else if (!float.IsNaN(value) && !float.IsInfinity(value) && !(Mathf.Abs(value) > 10000f)) { m_sessionStats.IncrementStat(stat, value); } } public static void InvalidateMidgameSave(bool saveStats) { AdvancedMidGameSaveData midgameSave = null; if (VerifyAndLoadMidgameSave(out midgameSave, checkValidity: false)) { midgameSave.Invalidate(); SaveManager.Save<AdvancedMidGameSaveData>(midgameSave, SaveAPIManager.AdvancedMidGameSave, GameStatsManager.Instance.PlaytimeMin, 0u, (SaveSlot?)null); GameStatsManager.Instance.midGameSaveGuid = midgameSave.midGameSaveGuid; if (saveStats) { GameStatsManager.Save(); } } } public static void RevalidateMidgameSave(bool saveStats) { AdvancedMidGameSaveData midgameSave = null; if (VerifyAndLoadMidgameSave(out midgameSave, checkValidity: false)) { midgameSave.Revalidate(); SaveManager.Save<AdvancedMidGameSaveData>(midgameSave, SaveAPIManager.AdvancedMidGameSave, GameStatsManager.Instance.PlaytimeMin, 0u, (SaveSlot?)null); GameStatsManager.Instance.midGameSaveGuid = midgameSave.midGameSaveGuid; if (saveStats) { GameStatsManager.Save(); } } } public static bool VerifyAndLoadMidgameSave(out AdvancedMidGameSaveData midgameSave, bool checkValidity = true) { if (!SaveManager.Load<AdvancedMidGameSaveData>(SaveAPIManager.AdvancedGameSave, ref midgameSave, true, 0u, (Func<string, uint, string>)null, (SaveSlot?)null)) { Debug.LogError((object)"No mid game save found"); return false; } if (midgameSave == null) { Debug.LogError((object)"Failed to load mid game save (0)"); return false; } if (checkValidity && !midgameSave.IsValid()) { return false; } if (GameStatsManager.Instance.midGameSaveGuid == null || GameStatsManager.Instance.midGameSaveGuid != midgameSave.midGameSaveGuid) { Debug.LogError((object)"Failed to load mid game save (1)"); return false; } return true; } public void ClearAllStatsGlobal() { m_sessionStats.ClearAllState(); m_savedSessionStats.ClearAllState(); if (m_numCharacters <= 0) { m_numCharacters = Enum.GetValues(typeof(PlayableCharacters)).Length; } for (int i = 0; i < m_numCharacters; i++) { if (m_characterStats.TryGetValue((PlayableCharacters)i, out var value)) { value.ClearAllState(); } } } public void ClearStatValueGlobal(CustomTrackedStats stat) { m_sessionStats.SetStat(stat, 0f); m_savedSessionStats.SetStat(stat, 0f); if (m_numCharacters <= 0) { m_numCharacters = Enum.GetValues(typeof(PlayableCharacters)).Length; } for (int i = 0; i < m_numCharacters; i++) { if (m_characterStats.TryGetValue((PlayableCharacters)i, out var value)) { value.SetStat(stat, 0f); } } } private PlayableCharacters GetCurrentCharacter() { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: 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) return GameManager.Instance.PrimaryPlayer.characterIdentity; } public float GetPlayerMaximum(CustomTrackedMaximums maximum) { if (m_numCharacters <= 0) { m_numCharacters = Enum.GetValues(typeof(PlayableCharacters)).Length; } float num = 0f; if (m_sessionStats != null) { num = Mathf.Max(new float[3] { num, m_sessionStats.GetMaximumValue(maximum), m_savedSessionStats.GetMaximumValue(maximum) }); } for (int i = 0; i < m_numCharacters; i++) { if (m_characterStats.TryGetValue((PlayableCharacters)i, out var value)) { num = Mathf.Max(num, value.GetMaximumValue(maximum)); } } return num; } public float GetPlayerStatValue(CustomTrackedStats stat) { if (m_numCharacters <= 0) { m_numCharacters = Enum.GetValues(typeof(PlayableCharacters)).Length; } float num = 0f; if (m_sessionStats != null) { num += m_sessionStats.GetStatValue(stat); } for (int i = 0; i < m_numCharacters; i++) { if (m_characterStats.TryGetValue((PlayableCharacters)i, out var value)) { num += value.GetStatValue(stat); } } return num; } public void SetCharacterSpecificFlag(CustomCharacterSpecificGungeonFlags flag, bool value) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) SetCharacterSpecificFlag(m_sessionCharacter, flag, value); } public float GetSessionStatValue(CustomTrackedStats stat) { return m_sessionStats.GetStatValue(stat) + m_savedSessionStats.GetStatValue(stat); } public float GetCharacterStatValue(CustomTrackedStats stat) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) return GetCharacterStatValue(GetCurrentCharacter(), stat); } public AdvancedGameStats MoveSessionStatsToSavedSessionStats() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) if (!IsInSession) { return null; } if (m_sessionStats != null) { if (m_characterStats.ContainsKey(m_sessionCharacter)) { m_characterStats[m_sessionCharacter].AddStats(m_sessionStats); } m_savedSessionStats.AddStats(m_sessionStats); m_sessionStats.ClearAllState(); } return m_savedSessionStats; } public float GetCharacterStatValue(PlayableCharacters character, CustomTrackedStats stat) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) float num = 0f; if (m_sessionCharacter == character) { num += m_sessionStats.GetStatValue(stat); } if (m_characterStats.ContainsKey(character)) { num += m_characterStats[character].GetStatValue(stat); } return num; } public void BeginNewSession(PlayerController player) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Expected O, but got Unknown //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) if (m_characterStats == null) { m_characterStats = new Dictionary<PlayableCharacters, AdvancedGameStats>((IEqualityComparer<PlayableCharacters>?)new PlayableCharactersComparer()); } if (IsInSession) { m_sessionCharacter = player.characterIdentity; if (!m_characterStats.ContainsKey(player.characterIdentity)) { m_characterStats.Add(player.characterIdentity, new AdvancedGameStats()); } return; } m_sessionCharacter = player.characterIdentity; m_sessionStats = new AdvancedGameStats(); m_savedSessionStats = new AdvancedGameStats(); if (!m_characterStats.ContainsKey(player.characterIdentity)) { m_characterStats.Add(player.characterIdentity, new AdvancedGameStats()); } } public void EndSession(bool recordSessionStats) { //IL_002c: 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) if (IsInSession && m_sessionStats != null) { if (recordSessionStats && m_characterStats.ContainsKey(m_sessionCharacter)) { m_characterStats[m_sessionCharacter].AddStats(m_sessionStats); } m_sessionStats = null; m_savedSessionStats = null; } } public static void Load() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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) SaveManager.Init(); bool flag = false; SaveSlot? val = null; int num = -1; if (m_instance != null) { flag = true; val = m_instance.cachedSaveSlot; num = m_instance.cachedHuntIndex; } if (!SaveManager.Load<AdvancedGameStatsManager>(SaveAPIManager.AdvancedGameSave, ref m_instance, true, 0u, (Func<string, uint, string>)null, (SaveSlot?)null)) { m_instance = new AdvancedGameStatsManager(); } m_instance.cachedSaveSlot = SaveManager.CurrentSaveSlot; if (flag && val.HasValue && m_instance.cachedSaveSlot == val.Value) { m_instance.cachedHuntIndex = num; } else { m_instance.cachedHuntIndex = -1; } } public static void DANGEROUS_ResetAllStats() { m_instance = new AdvancedGameStatsManager(); SaveManager.DeleteAllBackups(SaveAPIManager.AdvancedGameSave, (SaveSlot?)null); } public bool GetFlag(CustomDungeonFlags flag) { if (flag == CustomDungeonFlags.NONE) { Debug.LogError((object)"Something is attempting to get a NONE save flag!"); return false; } return m_flags.Contains(flag); } public void SetFlag(CustomDungeonFlags flag, bool value) { if (flag == CustomDungeonFlags.NONE) { Debug.LogError((object)"Something is attempting to set a NONE save flag!"); } else if (value) { m_flags.Add(flag); } else { m_flags.Remove(flag); } } public static bool Save() { bool result = false; try { result = SaveManager.Save<AdvancedGameStatsManager>(m_instance, SaveAPIManager.AdvancedGameSave, GameStatsManager.Instance.PlaytimeMin, 0u, (SaveSlot?)null); } catch (Exception ex) { Debug.LogErrorFormat("SAVE FAILED: {0}", new object[1] { ex }); } return result; } public void AssignMidGameSavedSessionStats(AdvancedGameStats source) { if (IsInSession && m_savedSessionStats != null) { m_savedSessionStats.AddStats(source); } } } public class AdvancedMidGameSaveData { [fsProperty] public AdvancedGameStats PriorSessionStats; [fsProperty] public string midGameSaveGuid; [fsProperty] public bool invalidated; public AdvancedMidGameSaveData(string midGameSaveGuid) { this.midGameSaveGuid = midGameSaveGuid; PriorSessionStats = AdvancedGameStatsManager.Instance.MoveSessionStatsToSavedSessionStats(); } public bool IsValid() { return !invalidated; } public void Invalidate() { invalidated = true; } public void Revalidate() { invalidated = false; } public void LoadDataFromMidGameSave() { AdvancedGameStatsManager.Instance.AssignMidGameSavedSessionStats(PriorSessionStats); } } public static class BreachShopTool { public class DoubleMetaShopTier { private MetaShopTier m_topTier; private MetaShopTier m_bottomTier; public DoubleMetaShopTier(MetaShopTier topTier, MetaShopTier bottomTier) { m_topTier = topTier; m_bottomTier = bottomTier; } public DoubleMetaShopTier(DoubleMetaShopTier other) { m_topTier = other.m_topTier; m_bottomTier = other.m_bottomTier; } public MetaShopTier GetTopTier() { return m_topTier; } public MetaShopTier GetBottomTier() { return m_topTier; } public List<MetaShopTier> GetTierList() { return new List<MetaShopTier> { m_topTier, m_bottomTier }; } } public static MetaShopController BaseMetaShopController; public static GenericLootTable TrorcMetaShopItems; public static GenericLootTable GooptonMetaShopItems; public static GenericLootTable DougMetaShopItems; private static FieldInfo ItemControllersInfo = typeof(ShopController).GetField("m_itemControllers", BindingFlags.Instance | BindingFlags.NonPublic); private static FieldInfo BaseItemControllersInfo = typeof(BaseShopController).GetField("m_itemControllers", BindingFlags.Instance | BindingFlags.NonPublic); private static Hook pickupObjectEncounterableHook; private static Hook baseShopSetupHook; private static Hook metaShopSetupHook; private static Hook metaShopCurrentTierHook; private static Hook metaShopProximateTierHook; public static Dictionary<WeightedGameObjectCollection, List<WeightedGameObject>> baseShopAddedItems; public static List<MetaShopTier> metaShopAddedTiers; private static bool m_loaded; public static void DoSetup() { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: 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_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Expected O, but got Unknown //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Expected O, but got Unknown //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Expected O, but got Unknown if (!m_loaded) { BaseMetaShopController = SaveTools.LoadAssetFromAnywhere<GameObject>("Foyer_MetaShop").GetComponent<MetaShopController>(); TrorcMetaShopItems = SaveTools.LoadAssetFromAnywhere<GenericLootTable>("Shop_Truck_Meta"); GooptonMetaShopItems = SaveTools.LoadAssetFromAnywhere<GenericLootTable>("Shop_Goop_Meta"); DougMetaShopItems = SaveTools.LoadAssetFromAnywhere<GenericLootTable>("Shop_Beetle_Meta"); pickupObjectEncounterableHook = new Hook((MethodBase)typeof(PickupObject).GetMethod("HandleEncounterable", BindingFlags.Instance | BindingFlags.NonPublic), typeof(BreachShopTool).GetMethod("HandleEncounterableHook")); baseShopSetupHook = new Hook((MethodBase)typeof(BaseShopController).GetMethod("DoSetup", BindingFlags.Instance | BindingFlags.NonPublic), typeof(BreachShopTool).GetMethod("BaseShopSetupHook")); metaShopSetupHook = new Hook((MethodBase)typeof(MetaShopController).GetMethod("DoSetup", BindingFlags.Instance | BindingFlags.NonPublic), typeof(BreachShopTool).GetMethod("MetaSetupHook")); metaShopCurrentTierHook = new Hook((MethodBase)typeof(MetaShopController).GetMethod("GetCurrentTier", BindingFlags.Instance | BindingFlags.NonPublic), typeof(BreachShopTool).GetMethod("MetaShopCurrentTierHook")); metaShopProximateTierHook = new Hook((MethodBase)typeof(MetaShopController).GetMethod("GetProximateTier", BindingFlags.Instance | BindingFlags.NonPublic), typeof(BreachShopTool).GetMethod("MetaShopProximateTierHook")); m_loaded = true; } } public static void Unload() { if (!m_loaded) { return; } if (baseShopAddedItems != null) { for (int i = 0; i < baseShopAddedItems.Keys.Count; i++) { WeightedGameObjectCollection val = baseShopAddedItems.Keys.ToList()[i]; if (val == null || baseShopAddedItems[val] == null) { continue; } for (int j = 0; j < baseShopAddedItems[val].Count; j++) { WeightedGameObject val2 = baseShopAddedItems[val][j]; if (val2 != null && val.elements.Contains(val2)) { val.elements.Remove(val2); } } } baseShopAddedItems.Clear(); baseShopAddedItems = null; } if (metaShopAddedTiers != null) { for (int k = 0; k < metaShopAddedTiers.Count; k++) { MetaShopTier val3 = metaShopAddedTiers[k]; if (val3 != null && BaseMetaShopController.metaShopTiers.Contains(val3)) { BaseMetaShopController.metaShopTiers.Remove(val3); } } metaShopAddedTiers.Clear(); metaShopAddedTiers = null; } BaseMetaShopController = null; TrorcMetaShopItems = null; GooptonMetaShopItems = null; DougMetaShopItems = null; Hook obj = pickupObjectEncounterableHook; if (obj != null) { obj.Dispose(); } Hook obj2 = baseShopSetupHook; if (obj2 != null) { obj2.Dispose(); } Hook obj3 = metaShopSetupHook; if (obj3 != null) { obj3.Dispose(); } Hook obj4 = metaShopCurrentTierHook; if (obj4 != null) { obj4.Dispose(); } Hook obj5 = metaShopProximateTierHook; if (obj5 != null) { obj5.Dispose(); } m_loaded = false; } public static void HandleEncounterableHook(Action<PickupObject, PlayerController> orig, PickupObject po, PlayerController player) { orig(po, player); if ((Object)(object)po != (Object)null && (Object)(object)((Component)po).GetComponent<SpecialPickupObject>() != (Object)null && ((Component)po).GetComponent<SpecialPickupObject>().CustomSaveFlagToSetOnAcquisition != 0) { AdvancedGameStatsManager.Instance.SetFlag(((Component)po).GetComponent<SpecialPickupObject>().CustomSaveFlagToSetOnAcquisition, value: true); } } public static void BaseShopSetupHook(Action<BaseShopController> orig, BaseShopController self) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Invalid comparison between Unknown and I4 orig(self); if ((int)self.baseShopType != 6 || !((Object)(object)self.ExampleBlueprintPrefab != (Object)null)) { return; } List<ShopItemController> list = (List<ShopItemController>)BaseItemControllersInfo.GetValue(self); if (list == null) { return; } foreach (ShopItemController item in list) { if (!((Object)(object)item != (Object)null) || !((Object)(object)item.item != (Object)null) || !((Object)(object)((BraveBehaviour)item.item).encounterTrackable != (Object)null) || ((BraveBehaviour)item.item).encounterTrackable.journalData == null) { continue; } PickupObject blueprintUnlockedItem = GetBlueprintUnlockedItem(((BraveBehaviour)item.item).encounterTrackable); if (!((Object)(object)blueprintUnlockedItem != (Object)null) || !((Object)(object)((BraveBehaviour)blueprintUnlockedItem).encounterTrackable != (Object)null) || ((BraveBehaviour)blueprintUnlockedItem).encounterTrackable.prerequisites == null) { continue; } CustomDungeonFlags customDungeonFlags = CustomDungeonFlags.NONE; for (int i = 0; i < ((BraveBehaviour)blueprintUnlockedItem).encounterTrackable.prerequisites.Length; i++) { if (((BraveBehaviour)blueprintUnlockedItem).encounterTrackable.prerequisites[i] is CustomDungeonPrerequisite && (((BraveBehaviour)blueprintUnlockedItem).encounterTrackable.prerequisites[i] as CustomDungeonPrerequisite).advancedPrerequisiteType == CustomDungeonPrerequisite.AdvancedPrerequisiteType.CUSTOM_FLAG) { customDungeonFlags = (((BraveBehaviour)blueprintUnlockedItem).encounterTrackable.prerequisites[i] as CustomDungeonPrerequisite).customFlagToCheck; } } if (customDungeonFlags != 0) { ((Component)item.item).gameObject.AddComponent<SpecialPickupObject>().CustomSaveFlagToSetOnAcquisition = customDungeonFlags; } } } public static void MetaSetupHook(Action<MetaShopController> orig, MetaShopController meta) { orig(meta); List<ShopItemController> list = (List<ShopItemController>)ItemControllersInfo.GetValue(meta); if (list == null) { return; } foreach (ShopItemController item in list) { if (!((Object)(object)item != (Object)null) || !((Object)(object)item.item != (Object)null) || !((Object)(object)((BraveBehaviour)item.item).encounterTrackable != (Object)null) || ((BraveBehaviour)item.item).encounterTrackable.journalData == null) { continue; } PickupObject blueprintUnlockedItem = GetBlueprintUnlockedItem(((BraveBehaviour)item.item).encounterTrackable); if (!((Object)(object)blueprintUnlockedItem != (Object)null) || !((Object)(object)((BraveBehaviour)blueprintUnlockedItem).encounterTrackable != (Object)null) || ((BraveBehaviour)blueprintUnlockedItem).encounterTrackable.prerequisites == null) { continue; } CustomDungeonFlags customFlagFromTargetItem = GetCustomFlagFromTargetItem(blueprintUnlockedItem.PickupObjectId); if (customFlagFromTargetItem != 0) { ((Component)item.item).gameObject.AddComponent<SpecialPickupObject>().CustomSaveFlagToSetOnAcquisition = customFlagFromTargetItem; if (AdvancedGameStatsManager.Instance.GetFlag(customFlagFromTargetItem)) { item.ForceOutOfStock(); } } } } private static bool GetMetaItemUnlockedAdvanced(int pickupObjectId) { CustomDungeonFlags customFlagFromTargetItem = GetCustomFlagFromTargetItem(pickupObjectId); if (customFlagFromTargetItem == CustomDungeonFlags.NONE) { return true; } return AdvancedGameStatsManager.Instance.GetFlag(customFlagFromTargetItem); } public static MetaShopTier MetaShopCurrentTierHook(Func<MetaShopController, MetaShopTier> orig, MetaShopController self) { MetaShopTier val = null; for (int i = 0; i < self.metaShopTiers.Count; i++) { if (!GetMetaItemUnlockedAdvanced(self.metaShopTiers[i].itemId1) || !GetMetaItemUnlockedAdvanced(self.metaShopTiers[i].itemId2) || !GetMetaItemUnlockedAdvanced(self.metaShopTiers[i].itemId3)) { val = self.metaShopTiers[i]; break; } } List<MetaShopTier> metaShopTiers = self.metaShopTiers; List<MetaShopTier> list = new List<MetaShopTier>(); for (int j = 0; j < metaShopTiers.Count; j++) { if (metaShopTiers[j] != null && (!ItemConditionsFulfilled(metaShopTiers[j].itemId1) || !ItemConditionsFulfilled(metaShopTiers[j].itemId2) || !ItemConditionsFulfilled(metaShopTiers[j].itemId3) || j == metaShopTiers.Count - 1)) { list.Add(metaShopTiers[j]); } } self.metaShopTiers = list; MetaShopTier val2 = orig(self); self.metaShopTiers = metaShopTiers; if (val == null) { return val2; } if (val2 == null) { return val; } return (self.metaShopTiers.IndexOf(val) < self.metaShopTiers.IndexOf(val2)) ? val : val2; } public static MetaShopTier MetaShopProximateTierHook(Func<MetaShopController, MetaShopTier> orig, MetaShopController self) { MetaShopTier val = null; for (int i = 0; i < self.metaShopTiers.Count - 1; i++) { if (!GetMetaItemUnlockedAdvanced(self.metaShopTiers[i].itemId1) || !GetMetaItemUnlockedAdvanced(self.metaShopTiers[i].itemId2) || !GetMetaItemUnlockedAdvanced(self.metaShopTiers[i].itemId3)) { val = self.metaShopTiers[i + 1]; break; } } List<MetaShopTier> metaShopTiers = self.metaShopTiers; List<MetaShopTier> list = new List<MetaShopTier>(); for (int j = 0; j < metaShopTiers.Count; j++) { if (metaShopTiers[j] != null && (!ItemConditionsFulfilled(metaShopTiers[j].itemId1) || !ItemConditionsFulfilled(metaShopTiers[j].itemId2) || !ItemConditionsFulfilled(metaShopTiers[j].itemId3))) { list.Add(metaShopTiers[j]); } } self.metaShopTiers = list; MetaShopTier val2 = orig(self); self.metaShopTiers = metaShopTiers; if (val == null) { return val2; } if (val2 == null) { return val; } return (self.metaShopTiers.IndexOf(val) < self.metaShopTiers.IndexOf(val2)) ? val : val2; } public static CustomDungeonFlags GetCustomFlagFromTargetItem(int shopItemId) { CustomDungeonFlags result = CustomDungeonFlags.NONE; PickupObject byId = PickupObjectDatabase.GetById(shopItemId); for (int i = 0; i < ((BraveBehaviour)byId).encounterTrackable.prerequisites.Length; i++) { if (((BraveBehaviour)byId).encounterTrackable.prerequisites[i] is CustomDungeonPrerequisite && (((BraveBehaviour)byId).encounterTrackable.prerequisites[i] as CustomDungeonPrerequisite).advancedPrerequisiteType == CustomDungeonPrerequisite.AdvancedPrerequisiteType.CUSTOM_FLAG) { result = (((BraveBehaviour)byId).encounterTrackable.prerequisites[i] as CustomDungeonPrerequisite).customFlagToCheck; } } return result; } public static GungeonFlags GetFlagFromTargetItem(int shopItemId) { //IL_0002: 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: Invalid comparison between Unknown and I4 //IL_0058: 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_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) GungeonFlags result = (GungeonFlags)0; PickupObject byId = PickupObjectDatabase.GetById(shopItemId); for (int i = 0; i < ((BraveBehaviour)byId).encounterTrackable.prerequisites.Length; i++) { if ((int)((BraveBehaviour)byId).encounterTrackable.prerequisites[i].prerequisiteType == 4) { result = ((BraveBehaviour)byId).encounterTrackable.prerequisites[i].saveFlagToCheck; } } return result; } public static bool ItemConditionsFulfilled(int shopItemId) { return (Object)(object)PickupObjectDatabase.GetById(shopItemId) != (Object)null && PickupObjectDatabase.GetById(shopItemId).PrerequisitesMet(); } public static PickupObject GetBlueprintUnlockedItem(EncounterTrackable blueprintTrackable) { for (int i = 0; i < ((ObjectDatabase<PickupObject>)(object)PickupObjectDatabase.Instance).Objects.Count; i++) { PickupObject val = ((ObjectDatabase<PickupObject>)(object)PickupObjectDatabase.Instance).Objects[i]; if (!Object.op_Implicit((Object)(object)val)) { continue; } EncounterTrackable encounterTrackable = ((BraveBehaviour)val).encounterTrackable; if (!Object.op_Implicit((Object)(object)encounterTrackable)) { continue; } string primaryDisplayName = encounterTrackable.journalData.PrimaryDisplayName; if (!primaryDisplayName.Equals(blueprintTrackable.journalData.PrimaryDisplayName, StringComparison.OrdinalIgnoreCase)) { continue; } string notificationPanelDescription = encounterTrackable.journalData.NotificationPanelDescription; if (!notificationPanelDescription.Equals(blueprintTrackable.journalData.NotificationPanelDescription, StringComparison.OrdinalIgnoreCase)) { continue; } string ammonomiconFullEntry = encounterTrackable.journalData.AmmonomiconFullEntry; if (ammonomiconFullEntry.Equals(blueprintTrackable.journalData.AmmonomiconFullEntry, StringComparison.OrdinalIgnoreCase)) { string ammonomiconSprite = encounterTrackable.journalData.AmmonomiconSprite; if (ammonomiconSprite.Equals(blueprintTrackable.journalData.AmmonomiconSprite, StringComparison.OrdinalIgnoreCase)) { return val; } } } return null; } public static WeightedGameObject AddItemToTrorcMetaShop(this PickupObject po, int cost, int? index = null) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown if ((Object)(object)TrorcMetaShopItems == (Object)null) { DoSetup(); } WeightedGameObject val = new WeightedGameObject(); val.rawGameObject = null; val.pickupId = po.PickupObjectId; val.weight = cost; val.forceDuplicatesPossible = false; val.additionalPrerequisites = (DungeonPrerequisite[])(object)new DungeonPrerequisite[0]; WeightedGameObject val2 = val; if (!index.HasValue) { TrorcMetaShopItems.defaultItemDrops.elements.Add(val2); } else if (index.Value < 0) { TrorcMetaShopItems.defaultItemDrops.elements.Add(val2); } else { TrorcMetaShopItems.defaultItemDrops.elements.InsertOrAdd(index.Value, val2); } RegisterBaseShopControllerAddedItem(val2, TrorcMetaShopItems.defaultItemDrops); return val2; } public static WeightedGameObject AddItemToGooptonMetaShop(this PickupObject po, int cost, int? index = null) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown if ((Object)(object)GooptonMetaShopItems == (Object)null) { DoSetup(); } WeightedGameObject val = new WeightedGameObject(); val.rawGameObject = null; val.pickupId = po.PickupObjectId; val.weight = cost; val.forceDuplicatesPossible = false; val.additionalPrerequisites = (DungeonPrerequisite[])(object)new DungeonPrerequisite[0]; WeightedGameObject val2 = val; if (!index.HasValue) { GooptonMetaShopItems.defaultItemDrops.elements.Add(val2); } else if (index.Value < 0) { TrorcMetaShopItems.defaultItemDrops.elements.Add(val2); } else { GooptonMetaShopItems.defaultItemDrops.elements.InsertOrAdd(index.Value, val2); } RegisterBaseShopControllerAddedItem(val2, GooptonMetaShopItems.defaultItemDrops); return val2; } public static WeightedGameObject AddItemToDougMetaShop(this PickupObject po, int cost, int? index = null) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Expected O, but got Unknown if ((Object)(object)DougMetaShopItems == (Object)null) { DoSetup(); } WeightedGameObject val = new WeightedGameObject(); val.rawGameObject = null; val.pickupId = po.PickupObjectId; val.weight = cost; val.forceDuplicatesPossible = false; val.additionalPrerequisites = (DungeonPrerequisite[])(object)new DungeonPrerequisite[0]; WeightedGameObject val2 = val; if (!index.HasValue) { DougMetaShopItems.defaultItemDrops.elements.Add(val2); } else if (index.Value < 0) { DougMetaShopItems.defaultItemDrops.elements.Add(val2); } else { DougMetaShopItems.defaultItemDrops.elements.InsertOrAdd(index.Value, val2); } RegisterBaseShopControllerAddedItem(val2, DougMetaShopItems.defaultItemDrops); return val2; } private static void RegisterBaseShopControllerAddedItem(WeightedGameObject obj, WeightedGameObjectCollection collection) { if (baseShopAddedItems == null) { baseShopAddedItems = new Dictionary<WeightedGameObjectCollection, List<WeightedGameObject>>(); } if (!baseShopAddedItems.ContainsKey(collection)) { baseShopAddedItems.Add(collection, new List<WeightedGameObject>()); } if (baseShopAddedItems[collection] == null) { baseShopAddedItems[collection] = new List<WeightedGameObject>(); } baseShopAddedItems[collection].Add(obj); } public static List<MetaShopTier> AddBaseMetaShopDoubleTier(int topLeftItemId, int topLeftItemPrice, int topMiddleItemId, int topMiddleItemPrice, int topRightItemId, int topRightItemPrice, int bottomLeftItemId, int bottomLeftItemPrice, int bottomMiddleItemId, int bottomMiddleItemPrice, int bottomRightItemId, int bottomRightItemPrice, int? index = null) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown //IL_007a: Expected O, but got Unknown return AddBaseMetaShopDoubleTier(new DoubleMetaShopTier(new MetaShopTier { itemId1 = topLeftItemId, overrideItem1Cost = topLeftItemPrice, itemId2 = topMiddleItemId, overrideItem2Cost = topMiddleItemPrice, itemId3 = topRightItemId, overrideItem3Cost = topRightItemPrice, overrideTierCost = topLeftItemId }, new MetaShopTier { itemId1 = bottomLeftItemId, overrideItem1Cost = bottomLeftItemPrice, itemId2 = bottomMiddleItemId, overrideItem2Cost = bottomMiddleItemPrice, itemId3 = bottomRightItemId, overrideItem3Cost = bottomRightItemPrice, overrideTierCost = topLeftItemId }), index); } public static List<MetaShopTier> AddBaseMetaShopDoubleTier(int topLeftItemId, int topLeftItemPrice, int topMiddleItemId, int topMiddleItemPrice, int topRightItemId, int topRightItemPrice, int bottomLeftItemId, int bottomLeftItemPrice, int bottomMiddleItemId, int bottomMiddleItemPrice, int? index = null) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0056: 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_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Expected O, but got Unknown //IL_0078: Expected O, but got Unknown return AddBaseMetaShopDoubleTier(new DoubleMetaShopTier(new MetaShopTier { itemId1 = topLeftItemId, overrideItem1Cost = topLeftItemPrice, itemId2 = topMiddleItemId, overrideItem2Cost = topMiddleItemPrice, itemId3 = topRightItemId, overrideItem3Cost = topRightItemPrice, overrideTierCost = topLeftItemId }, new MetaShopTier { itemId1 = bottomLeftItemId, overrideItem1Cost = bottomLeftItemPrice, itemId2 = bottomMiddleItemId, overrideItem2Cost = bottomMiddleItemPrice, itemId3 = -1, overrideItem3Cost = -1, overrideTierCost = topLeftItemId }), index); } public static List<MetaShopTier> AddBaseMetaShopDoubleTier(int topLeftItemId, int topLeftItemPrice, int topMiddleItemId, int topMiddleItemPrice, int topRightItemId, int topRightItemPrice, int bottomLeftItemId, int bottomLeftItemPrice, int? index = null) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Expected O, but got Unknown //IL_0076: Expected O, but got Unknown return AddBaseMetaShopDoubleTier(new DoubleMetaShopTier(new MetaShopTier { itemId1 = topLeftItemId, overrideItem1Cost = topLeftItemPrice, itemId2 = topMiddleItemId, overrideItem2Cost = topMiddleItemPrice, itemId3 = topRightItemId, overrideItem3Cost = topRightItemPrice, overrideTierCost = topLeftItemId }, new MetaShopTier { itemId1 = bottomLeftItemId, overrideItem1Cost = bottomLeftItemPrice, itemId2 = -1, overrideItem2Cost = -1, itemId3 = -1, overrideItem3Cost = -1, overrideTierCost = topLeftItemId }), index); } public static MetaShopTier AddBaseMetaShopTier(int leftItemId, int leftItemPrice, int middleItemId, int middleItemPrice, int rightItemId, int rightItemPrice, int? index = null) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Expected O, but got Unknown return AddBaseMetaShopTier(new MetaShopTier { itemId1 = leftItemId, overrideItem1Cost = leftItemPrice, itemId2 = middleItemId, overrideItem2Cost = middleItemPrice, itemId3 = rightItemId, overrideItem3Cost = rightItemPrice, overrideTierCost = leftItemPrice }, index); } public static MetaShopTier AddBaseMetaShopTier(int leftItemId, int leftItemPrice, int middleItemId, int middleItemPrice, int? index = null) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Expected O, but got Unknown return AddBaseMetaShopTier(new MetaShopTier { itemId1 = leftItemId, overrideItem1Cost = leftItemPrice, itemId2 = middleItemId, overrideItem2Cost = middleItemPrice, itemId3 = -1, overrideItem3Cost = -1, overrideTierCost = leftItemPrice }, index); } public static MetaShopTier AddBaseMetaShopTier(int leftItemId, int leftItemPrice, int? index = null) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0014: 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_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown return AddBaseMetaShopTier(new MetaShopTier { itemId1 = leftItemId, overrideItem1Cost = leftItemPrice, itemId2 = -1, overrideItem2Cost = -1, itemId3 = -1, overrideItem3Cost = -1, ov