Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of DittoMod v2.3.0
DittoMod.dll
Decompiled 2 years ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using DittoMod.Equipment; using DittoMod.Items; using DittoMod.Modules; using DittoMod.Modules.Networking; using DittoMod.Modules.Survivors; using DittoMod.SkillStates; using DittoMod.SkillStates.BaseStates; using EntityStates; using HG; using On.RoR2; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.Achievements; using RoR2.ContentManagement; using RoR2.ExpansionManagement; using RoR2.Projectile; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; 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: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("DittoMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("DittoMod")] [assembly: AssemblyTitle("DittoMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] internal class BodyInfo { internal string bodyName = ""; internal string bodyNameToken = ""; internal string subtitleNameToken = ""; internal string bodyNameToClone = "Commando"; internal Texture characterPortrait = null; internal GameObject crosshair = null; internal GameObject podPrefab = null; internal float maxHealth = 100f; internal float healthGrowth = 2f; internal float healthRegen = 0f; internal float shield = 0f; internal float shieldGrowth = 0f; internal float moveSpeed = 7f; internal float moveSpeedGrowth = 0f; internal float acceleration = 80f; internal float jumpPower = 15f; internal float jumpPowerGrowth = 0f; internal float damage = 12f; internal float attackSpeed = 1f; internal float attackSpeedGrowth = 0f; internal float armor = 0f; internal float armorGrowth = 0f; internal float crit = 1f; internal float critGrowth = 0f; internal int jumpCount = 1; internal Color bodyColor = Color.grey; internal Vector3 aimOriginPosition = new Vector3(0f, 1.8f, 0f); internal Vector3 modelBasePosition = new Vector3(0f, -0.92f, 0f); internal Vector3 cameraPivotPosition = new Vector3(0f, 1.6f, 0f); } internal class CustomRendererInfo { internal string childName; internal Material material; internal bool ignoreOverlays; } internal class SkillDefInfo { public string skillName; public string skillNameToken; public string skillDescriptionToken; public Sprite skillIcon; public SerializableEntityStateType activationState; public string activationStateMachineName; public int baseMaxStock; public float baseRechargeInterval; public bool beginSkillCooldownOnSkillEnd; public bool canceledFromSprinting; public bool forceSprintDuringState; public bool fullRestockOnAssign; public InterruptPriority interruptPriority; public bool resetCooldownTimerOnUse; public bool isCombatSkill; public bool mustKeyPress; public bool cancelSprintingOnActivation; public int rechargeStock; public int requiredStock; public int stockToConsume; public string[] keywordTokens; } namespace DittoMod { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.TeaL.DittoMod", "DittoMod", "2.2.0")] public class DittoPlugin : BaseUnityPlugin { public static bool scepterInstalled = false; public DittoController dittocon; public DittoMasterController dittomastercon; public const string MODUID = "com.TeaL.DittoMod"; public const string MODNAME = "DittoMod"; public const string MODVERSION = "2.2.0"; public const string developerPrefix = "TEAL"; internal List<SurvivorBase> Survivors = new List<SurvivorBase>(); private GameObject rockyeffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/effects/LightningStakeNova"); private GameObject fireeffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ExplodeOnDeath/WilloWispExplosion.prefab").WaitForCompletion(); public static DittoPlugin instance; public static CharacterBody DittoCharacterBody; private GameObject voidcrabphase1 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/MiniVoidRaidCrabBodyPhase1.prefab").WaitForCompletion(); private GameObject voidcrabphase2 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/MiniVoidRaidCrabBodyPhase2.prefab").WaitForCompletion(); private GameObject voidcrabphase3 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidRaidCrab/MiniVoidRaidCrabBodyPhase3.prefab").WaitForCompletion(); private GameObject xiconstruct = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/MajorAndMinorConstruct/MegaConstructBody.prefab").WaitForCompletion(); private GameObject alphaconstruct = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/MajorAndMinorConstruct/MinorConstructBody.prefab").WaitForCompletion(); private GameObject voidinfestor = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/EliteVoid/VoidInfestorBody.prefab").WaitForCompletion(); private GameObject voidbarnacle = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidBarnacle/VoidBarnacleBody.prefab").WaitForCompletion(); private GameObject voidjailer = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidJailer/VoidJailerBody.prefab").WaitForCompletion(); private GameObject voidmegacrab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidMegaCrab/VoidMegaCrabBody.prefab").WaitForCompletion(); private GameObject droneman = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/DroneCommander/DroneCommanderBody.prefab").WaitForCompletion(); private GameObject gip = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Gup/GipBody.prefab").WaitForCompletion(); private GameObject geep = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Gup/GeepBody.prefab").WaitForCompletion(); private GameObject gup = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Gup/GupBody.prefab").WaitForCompletion(); private GameObject impboss = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ImpBoss/ImpBossBody.prefab").WaitForCompletion(); public List<ItemBase> Items = new List<ItemBase>(); public List<EquipmentBase> Equipments = new List<EquipmentBase>(); public static Dictionary<ItemBase, bool> ItemStatusDictionary = new Dictionary<ItemBase, bool>(); public static Dictionary<EquipmentBase, bool> EquipmentStatusDictionary = new Dictionary<EquipmentBase, bool>(); private BlastAttack blastAttack; private void Awake() { instance = this; DittoCharacterBody = null; instance = this; StaticValues.LoadList(); Assets.Initialize(); Config.ReadConfig(); if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions")) { Config.SetupRiskOfOptions(); } States.RegisterStates(); Buffs.RegisterBuffs(); Projectiles.RegisterProjectiles(); Tokens.AddTokens(); ItemDisplays.PopulateDisplays(); new Ditto().Initialize(); IEnumerable<Type> enumerable = from type in Assembly.GetExecutingAssembly().GetTypes() where !type.IsAbstract && type.IsSubclassOf(typeof(EquipmentBase)) select type; foreach (Type item in enumerable) { EquipmentBase equipmentBase = (EquipmentBase)Activator.CreateInstance(item); equipmentBase.Init(); } NetworkingAPI.RegisterMessageType<TransformNetworked>(); NetworkingAPI.RegisterMessageType<EquipmentDropNetworked>(); NetworkingAPI.RegisterMessageType<LeftoversNetworked>(); new ContentPacks().Initialize(); ContentManager.onContentPacksAssigned += LateSetup; Hook(); GameObject monsterSurvivor = LegacyResourcesAPI.Load<GameObject>("prefabs/characterbodies/ShopkeeperBody"); GameObject monsterSurvivor2 = LegacyResourcesAPI.Load<GameObject>("prefabs/characterbodies/BeetleQueen2Body"); GameObject monsterSurvivor3 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/GolemBody"); GameObject monsterSurvivor4 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/TitanBody"); GameObject monsterSurvivor5 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/TitanGoldBody"); GameObject monsterSurvivor6 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/GravekeeperBody"); GameObject monsterSurvivor7 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/VagrantBody"); GameObject monsterSurvivor8 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/MagmaWormBody"); GameObject monsterSurvivor9 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ElectricWormBody"); GameObject monsterSurvivor10 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ClayBossBody"); GameObject monsterSurvivor11 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/RoboBallBossBody"); GameObject monsterSurvivor12 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/SuperRoboBallBossBody"); GameObject monsterSurvivor13 = PrefabAPI.InstantiateClone(xiconstruct, "1xiconstruct"); GameObject monsterSurvivor14 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/GrandParentBody"); GameObject monsterSurvivor15 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ScavBody"); GameObject monsterSurvivor16 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BrotherBody"); GameObject monsterSurvivor17 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BrotherHurtBody"); GameObject monsterSurvivor18 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/Drone1Body"); GameObject monsterSurvivor19 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/Drone2Body"); GameObject monsterSurvivor20 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/Turret1Body"); GameObject monsterSurvivor21 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/MissileDroneBody"); GameObject monsterSurvivor22 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/FlameDroneBody"); GameObject monsterSurvivor23 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BackupDroneBody"); GameObject monsterSurvivor24 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/EmergencyDroneBody"); GameObject monsterSurvivor25 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/EquipmentDroneBody"); GameObject monsterSurvivor26 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/MegaDroneBody"); GameObject monsterSurvivor27 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/EngiTurretBody"); GameObject monsterSurvivor28 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/EngiWalkerTurretBody"); GameObject monsterSurvivor29 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/SquidTurretBody"); GameObject monsterSurvivor30 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/UrchinTurretBody"); GameObject monsterSurvivor31 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BeetleBody"); GameObject monsterSurvivor32 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BeetleGuardBody"); GameObject monsterSurvivor33 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/AcidLarvaBody"); GameObject monsterSurvivor34 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/LemurianBody"); GameObject monsterSurvivor35 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/LemurianBruiserBody"); GameObject monsterSurvivor36 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/FlyingVerminBody"); GameObject monsterSurvivor37 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/VerminBody"); GameObject monsterSurvivor38 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/WispBody"); GameObject monsterSurvivor39 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/GreaterWispBody"); GameObject monsterSurvivor40 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ImpBody"); GameObject monsterSurvivor41 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/JellyfishBody"); GameObject monsterSurvivor42 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BisonBody"); GameObject monsterSurvivor43 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ClayBruiserBody"); GameObject monsterSurvivor44 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ClayGrenadierBody"); GameObject monsterSurvivor45 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/VultureBody"); GameObject monsterSurvivor46 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/RoboBallMiniBody"); GameObject monsterSurvivor47 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/RoboBallGreenBuddyBody"); GameObject monsterSurvivor48 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/RoboBallRedBuddyBody"); GameObject monsterSurvivor49 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/BellBody"); GameObject monsterSurvivor50 = PrefabAPI.InstantiateClone(alphaconstruct, "1alphaconstruct"); GameObject monsterSurvivor51 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/MiniMushroomBody"); GameObject monsterSurvivor52 = PrefabAPI.InstantiateClone(gip, "1gip"); GameObject monsterSurvivor53 = PrefabAPI.InstantiateClone(geep, "1geep"); GameObject monsterSurvivor54 = PrefabAPI.InstantiateClone(gup, "1gup"); GameObject monsterSurvivor55 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/HermitCrabBody"); GameObject monsterSurvivor56 = PrefabAPI.InstantiateClone(voidinfestor, "1voidinfestor"); GameObject monsterSurvivor57 = PrefabAPI.InstantiateClone(voidbarnacle, "1voidbarnacle"); GameObject monsterSurvivor58 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/NullifierBody"); GameObject monsterSurvivor59 = PrefabAPI.InstantiateClone(voidjailer, "PCVoidJailerBody"); GameObject monsterSurvivor60 = PrefabAPI.InstantiateClone(voidmegacrab, "1voidmegacrab"); GameObject monsterSurvivor61 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/LunarExploderBody"); GameObject monsterSurvivor62 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/LunarGolemBody"); GameObject monsterSurvivor63 = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/LunarWispBody"); GameObject monsterSurvivor64 = PrefabAPI.InstantiateClone(droneman, "1droneman"); GameObject monsterSurvivor65 = PrefabAPI.InstantiateClone(voidcrabphase1, "1voidcrabphase1"); GameObject monsterSurvivor66 = PrefabAPI.InstantiateClone(voidcrabphase2, "1voidcrabphase2"); GameObject monsterSurvivor67 = PrefabAPI.InstantiateClone(voidcrabphase3, "1voidcrabphase3"); GameObject monsterSurvivor68 = PrefabAPI.InstantiateClone(impboss, "1impboss"); PolishMonsterToSurvivor(monsterSurvivor31, 20f); PolishMonsterToSurvivor(monsterSurvivor32, 20f); PolishMonsterToSurvivor(monsterSurvivor33, 20f); PolishMonsterToSurvivor(monsterSurvivor34, 20f); PolishMonsterToSurvivor(monsterSurvivor35, 20f); PolishMonsterToSurvivor(monsterSurvivor36, 20f); PolishMonsterToSurvivor(monsterSurvivor37, 20f); PolishMonsterToSurvivor(monsterSurvivor38, 20f); PolishMonsterToSurvivor(monsterSurvivor39, 20f); PolishMonsterToSurvivor(monsterSurvivor40, 20f); PolishMonsterToSurvivor(monsterSurvivor41, 20f); PolishMonsterToSurvivor(monsterSurvivor42, 20f); PolishMonsterToSurvivor(monsterSurvivor43, 20f); PolishMonsterToSurvivor(monsterSurvivor44, 20f); PolishMonsterToSurvivor(monsterSurvivor45, 20f); PolishMonsterToSurvivor(monsterSurvivor46, 20f); PolishMonsterToSurvivor(monsterSurvivor47, 20f); PolishMonsterToSurvivor(monsterSurvivor48, 20f); PolishMonsterToSurvivor(monsterSurvivor49, 20f); PolishMonsterToSurvivor(monsterSurvivor50, 20f); PolishMonsterToSurvivor(monsterSurvivor51, 20f); PolishMonsterToSurvivor(monsterSurvivor52, 20f); PolishMonsterToSurvivor(monsterSurvivor53, 20f); PolishMonsterToSurvivor(monsterSurvivor54, 20f); PolishMonsterToSurvivor(monsterSurvivor55, 20f); PolishMonsterToSurvivor(monsterSurvivor56, 20f); PolishMonsterToSurvivor(monsterSurvivor57, 20f); PolishMonsterToSurvivor(monsterSurvivor58, 10f); PolishMonsterToSurvivor(monsterSurvivor59, 10f); PolishMonsterToSurvivor(monsterSurvivor60, 10f); PolishMonsterToSurvivor(monsterSurvivor61, 10f); PolishMonsterToSurvivor(monsterSurvivor62, 10f); PolishMonsterToSurvivor(monsterSurvivor63, 10f); PolishMonsterToSurvivor(monsterSurvivor2, 10f); PolishMonsterToSurvivor(monsterSurvivor3, 10f); PolishMonsterToSurvivor(monsterSurvivor4, 20f); PolishMonsterToSurvivor(monsterSurvivor5, 20f); PolishMonsterToSurvivor(monsterSurvivor6, 20f); PolishMonsterToSurvivor(monsterSurvivor7, 20f); PolishMonsterToSurvivor(monsterSurvivor8, 20f); PolishMonsterToSurvivor(monsterSurvivor9, 20f); PolishMonsterToSurvivor(monsterSurvivor10, 20f); PolishMonsterToSurvivor(monsterSurvivor11, 20f); PolishMonsterToSurvivor(monsterSurvivor12, 20f); PolishMonsterToSurvivor(monsterSurvivor13, 20f); PolishMonsterToSurvivor(monsterSurvivor14, 10f); PolishMonsterToSurvivor(monsterSurvivor15, 20f); PolishMonsterToSurvivor(monsterSurvivor16, 20f); PolishMonsterToSurvivor(monsterSurvivor18, 20f); PolishMonsterToSurvivor(monsterSurvivor19, 20f); PolishMonsterToSurvivor(monsterSurvivor20, 20f); PolishMonsterToSurvivor(monsterSurvivor21, 20f); PolishMonsterToSurvivor(monsterSurvivor22, 20f); PolishMonsterToSurvivor(monsterSurvivor23, 20f); PolishMonsterToSurvivor(monsterSurvivor24, 20f); PolishMonsterToSurvivor(monsterSurvivor25, 20f); PolishMonsterToSurvivor(monsterSurvivor26, 20f); PolishMonsterToSurvivor(monsterSurvivor27, 20f); PolishMonsterToSurvivor(monsterSurvivor28, 20f); PolishMonsterToSurvivor(monsterSurvivor29, 20f); PolishMonsterToSurvivor(monsterSurvivor30, 20f); PolishMonsterToSurvivor(monsterSurvivor64, 20f); PolishMonsterToSurvivor(monsterSurvivor65, 20f); PolishMonsterToSurvivor(monsterSurvivor66, 20f); PolishMonsterToSurvivor(monsterSurvivor67, 20f); PolishMonsterToSurvivor(monsterSurvivor, 20f); PolishMonsterToSurvivor(monsterSurvivor68, 20f); PolishMonsterToSurvivor(monsterSurvivor17, 20f); } public bool ValidateItem(ItemBase item, List<ItemBase> itemList) { bool value = ((BaseUnityPlugin)this).Config.Bind<bool>("Item: " + item.ItemName, "Enable Item?", true, "Should this item appear in runs?").Value; bool value2 = ((BaseUnityPlugin)this).Config.Bind<bool>("Item: " + item.ItemName, "Blacklist Item from AI Use?", false, "Should the AI not be able to obtain this item?").Value; bool value3 = ((BaseUnityPlugin)this).Config.Bind<bool>("Item: " + item.ItemName, "Blacklist Item from Printers?", false, "Should the printers be able to print this item?").Value; bool value4 = ((BaseUnityPlugin)this).Config.Bind<bool>("Item: " + item.ItemName, "Require Unlock", true, "Should we require this item to be unlocked before it appears in runs? (Will only affect items with associated unlockables.)").Value; ItemStatusDictionary.Add(item, value); if (value) { itemList.Add(item); if (value2) { item.AIBlacklisted = true; } if (value3) { item.PrinterBlacklisted = true; } item.RequireUnlock = value4; } return value; } private void PolishMonsterToSurvivor(GameObject monsterSurvivor, float maxInteractionDistance) { NetworkIdentity val = monsterSurvivor.GetComponent<NetworkIdentity>(); if (!Object.op_Implicit((Object)(object)val)) { ((BaseUnityPlugin)this).Logger.LogMessage((object)"Missing NetworkIdentity! Adding..."); val = monsterSurvivor.AddComponent<NetworkIdentity>(); } if (!val.localPlayerAuthority) { ((BaseUnityPlugin)this).Logger.LogMessage((object)"Ensuring Networking"); val.localPlayerAuthority = true; } Interactor val2 = monsterSurvivor.GetComponent<Interactor>(); if (!Object.op_Implicit((Object)(object)val2)) { val2 = monsterSurvivor.AddComponent<Interactor>(); } val2.maxInteractionDistance = maxInteractionDistance; EquipmentSlot component = monsterSurvivor.GetComponent<EquipmentSlot>(); if (!Object.op_Implicit((Object)(object)component)) { component = monsterSurvivor.AddComponent<EquipmentSlot>(); } } private void LateSetup(ReadOnlyArray<ReadOnlyContentPack> obj) { SurvivorBase.instance.SetItemDisplays(); } private void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Expected O, but got Unknown RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients); CharacterBody.OnDeathStart += new hook_OnDeathStart(CharacterBody_OnDeathStart); CharacterModel.Awake += new hook_Awake(CharacterModel_Awake); CharacterMaster.Start += new hook_Start(CharacterMaster_Start); GlobalEventManager.OnCharacterDeath += new hook_OnCharacterDeath(GlobalEventManager_OnCharacterDeath); CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); GlobalEventManager.onServerDamageDealt += GlobalEventManager_OnDamageDealt; } private void CharacterModel_Awake(orig_Awake orig, CharacterModel self) { orig.Invoke(self); if (((Object)((Component)self).gameObject).name.Contains("DittoDisplay")) { AkSoundEngine.PostEvent(3468082827u, ((Component)self).gameObject); } } private void GlobalEventManager_OnCharacterDeath(orig_OnCharacterDeath orig, GlobalEventManager self, DamageReport damageReport) { //IL_0042: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self, damageReport); CharacterBody victimBody = damageReport.victimBody; CharacterBody attackerBody = damageReport.attackerBody; CharacterMaster victimMaster = damageReport.victimMaster; if (Object.op_Implicit((Object)(object)attackerBody) && attackerBody.HasBuff(Buffs.moxieBuff)) { NetworkingHelpers.ApplyBuff(attackerBody, Buffs.moxieBoostBuff.buffIndex, 1, 20f); } } private void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args) { if (Object.op_Implicit((Object)(object)sender)) { if (sender.HasBuff(Buffs.assaultvestBuff)) { args.armorAdd += 100f; } if (sender.HasBuff(Buffs.choicebandBuff)) { args.baseAttackSpeedAdd += 0.5f; } if (sender.HasBuff(Buffs.choicescarfBuff)) { args.moveSpeedMultAdd += 0.5f; } if (sender.HasBuff(Buffs.choicespecsBuff)) { args.cooldownReductionAdd += 0.25f; } if (sender.HasBuff(Buffs.lifeorbBuff)) { args.damageMultAdd += 0.3f; } if (sender.HasBuff(Buffs.scopelensBuff)) { args.critAdd += 30f; } if (sender.HasBuff(Buffs.hugepowerBuff)) { args.damageMultAdd += 1f; } if (sender.HasBuff(Buffs.moodyArmorBuff)) { args.armorAdd += (float)sender.GetBuffCount(Buffs.moodyArmorBuff) * 5f; } if (sender.HasBuff(Buffs.moodyArmorDebuff)) { args.armorAdd -= (float)sender.GetBuffCount(Buffs.moodyArmorDebuff) * 5f; } if (sender.HasBuff(Buffs.moodyDamageBuff)) { args.damageMultAdd += (float)sender.GetBuffCount(Buffs.moodyDamageBuff) * 0.1f; } if (sender.HasBuff(Buffs.moodyDamageDebuff)) { args.damageMultAdd -= (float)sender.GetBuffCount(Buffs.moodyDamageDebuff) * 0.1f; } if (sender.HasBuff(Buffs.moodyMovespeedBuff)) { args.moveSpeedMultAdd += (float)sender.GetBuffCount(Buffs.moodyMovespeedBuff) * 0.1f; } if (sender.HasBuff(Buffs.moodyMovespeedDebuff)) { args.moveSpeedMultAdd -= (float)sender.GetBuffCount(Buffs.moodyMovespeedDebuff) * 0.1f; } if (sender.HasBuff(Buffs.moodyAttackspeedBuff)) { args.attackSpeedMultAdd += (float)sender.GetBuffCount(Buffs.moodyAttackspeedBuff) * 0.1f; } if (sender.HasBuff(Buffs.moodyAttackspeedDebuff)) { args.attackSpeedMultAdd -= (float)sender.GetBuffCount(Buffs.moodyAttackspeedDebuff) * 0.1f; } if (sender.HasBuff(Buffs.moxieBuff)) { args.damageMultAdd += (float)sender.GetBuffCount(Buffs.moxieBoostBuff) * 0.3f; } } } private void GlobalEventManager_OnDamageDealt(DamageReport report) { //IL_0056: 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) bool flag = !Object.op_Implicit((Object)(object)report.attacker) || !Object.op_Implicit((Object)(object)report.attackerBody); if (!flag && report.attackerBody.HasBuff(Buffs.shellbellBuff)) { CharacterBody attackerBody = report.attackerBody; attackerBody.healthComponent.Heal(report.damageDealt * 0.05f, default(ProcChainMask), true); } if (!flag && report.attackerBody.HasBuff(Buffs.sniperBuff) && report.damageInfo.crit) { report.damageDealt *= 1.5f; } } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: 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) //IL_0043: Invalid comparison between Unknown and I4 //IL_0054: 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_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Invalid comparison between Unknown and I4 //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Invalid comparison between Unknown and I4 //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_02c8: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Expected O, but got Unknown //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0165: Expected O, but got Unknown //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_024e: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_02dc: Unknown result type (might be due to invalid IL or missing references) //IL_02e3: Expected O, but got Unknown //IL_02e4: Unknown result type (might be due to invalid IL or missing references) //IL_02ee: Expected O, but got Unknown //IL_031a: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_037e: Unknown result type (might be due to invalid IL or missing references) //IL_03a4: Unknown result type (might be due to invalid IL or missing references) //IL_03a9: Unknown result type (might be due to invalid IL or missing references) //IL_03b9: Unknown result type (might be due to invalid IL or missing references) //IL_03be: Unknown result type (might be due to invalid IL or missing references) //IL_03ca: Unknown result type (might be due to invalid IL or missing references) //IL_03da: Unknown result type (might be due to invalid IL or missing references) //IL_03e5: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_0294: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02bb: Expected O, but got Unknown //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0409: Unknown result type (might be due to invalid IL or missing references) //IL_040e: Unknown result type (might be due to invalid IL or missing references) //IL_0415: Unknown result type (might be due to invalid IL or missing references) //IL_0420: Unknown result type (might be due to invalid IL or missing references) //IL_042b: Unknown result type (might be due to invalid IL or missing references) //IL_0432: Unknown result type (might be due to invalid IL or missing references) //IL_0437: Unknown result type (might be due to invalid IL or missing references) //IL_043c: Unknown result type (might be due to invalid IL or missing references) //IL_0447: Expected O, but got Unknown //IL_03fc: Unknown result type (might be due to invalid IL or missing references) if (damageInfo != null && Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>())) { bool flag = (int)DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)2)) > 0; if (damageInfo.damage > 0f && (int)DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)67108864)) == 67108864 && self.body.HasBuff(Buffs.magicguardBuff.buffIndex)) { damageInfo.rejected = true; } if (!flag && damageInfo.damage > 0f && (int)DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)67108864)) != 67108864) { if (self.body.HasBuff(Buffs.multiscaleBuff.buffIndex) && (double)self.health >= 0.99 * (double)self.fullHealth) { damageInfo.damage *= 0.5f; } if (self.body.HasBuff(Buffs.rockyhelmetBuff.buffIndex)) { DamageInfo val = new DamageInfo(); blastAttack = new BlastAttack(); blastAttack.radius = 8f; blastAttack.procCoefficient = 1f; blastAttack.position = ((Component)self).transform.position; blastAttack.attacker = ((Component)self).gameObject; blastAttack.crit = Util.CheckRoll(self.body.crit, self.body.master); blastAttack.baseDamage = self.body.damage * 1f; blastAttack.falloffModel = (FalloffModel)0; blastAttack.baseForce = 100f; blastAttack.teamIndex = TeamComponent.GetObjectTeam(blastAttack.attacker); blastAttack.damageType = DamageTypeCombo.op_Implicit((DamageType)34); blastAttack.attackerFiltering = (AttackerFiltering)2; if (damageInfo.attacker.GetComponent<CharacterBody>().masterObjectId != self.body.masterObjectId) { blastAttack.Fire(); } EffectManager.SpawnEffect(rockyeffectPrefab, new EffectData { origin = ((Component)self).transform.position, scale = 8f, rotation = Quaternion.LookRotation(((Component)self).transform.position) }, true); } if (self.body.HasBuff(Buffs.flamebodyBuff.buffIndex)) { DamageInfo val2 = new DamageInfo(); blastAttack = new BlastAttack(); blastAttack.radius = 8f; blastAttack.procCoefficient = 1f; blastAttack.position = ((Component)self).transform.position; blastAttack.attacker = ((Component)self).gameObject; blastAttack.crit = Util.CheckRoll(self.body.crit, self.body.master); blastAttack.baseDamage = self.body.damage * 1f; blastAttack.falloffModel = (FalloffModel)0; blastAttack.baseForce = 100f; blastAttack.teamIndex = TeamComponent.GetObjectTeam(blastAttack.attacker); blastAttack.damageType = DamageTypeCombo.op_Implicit((DamageType)128); blastAttack.attackerFiltering = (AttackerFiltering)2; if (damageInfo.attacker.GetComponent<CharacterBody>().masterObjectId != self.body.masterObjectId) { blastAttack.Fire(); } EffectManager.SpawnEffect(fireeffectPrefab, new EffectData { origin = ((Component)self).transform.position, scale = 8f, rotation = Quaternion.LookRotation(((Component)self).transform.position) }, true); } } } orig.Invoke(self, damageInfo); } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { if (Object.op_Implicit((Object)(object)self.healthComponent)) { orig.Invoke(self); } } private void CharacterBody_OnDeathStart(orig_OnDeathStart orig, CharacterBody self) { orig.Invoke(self); if (self.baseNameToken == "TEAL_DITTO_BODY_NAME") { AkSoundEngine.PostEvent(3468082827u, ((Component)this).gameObject); } } private void CharacterMaster_Start(orig_Start orig, CharacterMaster self) { orig.Invoke(self); if (Object.op_Implicit((Object)(object)self.bodyPrefab)) { Debug.Log((object)self.bodyPrefab); if (((Object)self.bodyPrefab).name.Contains("Ditto")) { self.inventory.GiveEquipmentString("EQUIPMENT_TM_TRANSFORM"); } } } } } namespace DittoMod.SkillStates { public class FlameBody : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class HugePower : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class Levitate : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class MagicGuard : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class Moody : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class Moxie : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class Multiscale : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class Sniper : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class AssaultVest : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class ChoiceBand : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class ChoiceScarf : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class ChoiceSpecs : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class Leftovers : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class LifeOrb : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class LuckyEgg : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class RockyHelmet : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class ScopeLens : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class ShellBell : BaseSkillState { public float duration = 0.1f; public DittoController dittocon; public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } public class Struggle : BaseSkillState { private float baseduration = 1f; private float duration; private float fireTime; private float struggleAge; private bool hasFired; public float force = 100f; public float initialspeedCoefficient = 6f; public static float procCoefficient = 1f; private Vector3 theSpot; private BlastAttack blastAttack; public float blastRadius = 3f; public float rollSpeed; public override void OnEnter() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Expected O, but got Unknown //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0148: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); hasFired = false; duration = baseduration / ((BaseState)this).attackSpeedStat; fireTime = duration / 2f; RecalculateRollSpeed(); Ray aimRay = ((BaseState)this).GetAimRay(); if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterMotor.velocity.y = rollSpeed; } theSpot = ((EntityState)this).characterBody.corePosition; blastAttack = new BlastAttack(); blastAttack.radius = blastRadius; blastAttack.procCoefficient = procCoefficient; blastAttack.position = theSpot; blastAttack.attacker = ((EntityState)this).gameObject; blastAttack.crit = Util.CheckRoll(((EntityState)this).characterBody.crit, ((EntityState)this).characterBody.master); blastAttack.baseDamage = ((EntityState)this).characterBody.damage * 0.3f; blastAttack.falloffModel = (FalloffModel)0; blastAttack.baseForce = force; blastAttack.teamIndex = TeamComponent.GetObjectTeam(blastAttack.attacker); blastAttack.damageType = DamageTypeCombo.op_Implicit((DamageType)0); blastAttack.attackerFiltering = (AttackerFiltering)0; if (((EntityState)this).isAuthority) { AkSoundEngine.PostEvent(500315785u, ((EntityState)this).gameObject); } ((EntityState)this).PlayAnimation("Body", "BonusJump", "Attack.playbackRate", fireTime, 0f); ((EntityState)this).gameObject.layer = LayerIndex.fakeActor.intVal; } public override void OnExit() { ((EntityState)this).gameObject.layer = LayerIndex.defaultLayer.intVal; ((EntityState)this).characterMotor.velocity.y *= 0f; ((EntityState)this).OnExit(); } private void RecalculateRollSpeed() { float num = ((BaseState)this).moveSpeedStat; if (((EntityState)this).characterBody.isSprinting) { num /= ((EntityState)this).characterBody.sprintingSpeedMultiplier; } rollSpeed = num * Mathf.Lerp(initialspeedCoefficient, (0f - initialspeedCoefficient) / 2f, ((EntityState)this).fixedAge / fireTime); } public override void FixedUpdate() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001d: 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_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_0062: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); RecalculateRollSpeed(); Ray aimRay = ((BaseState)this).GetAimRay(); theSpot = ((EntityState)this).characterBody.corePosition; if (struggleAge > duration / 10f) { blastAttack.position = theSpot; if (((EntityState)this).isAuthority) { blastAttack.Fire(); } struggleAge = 0f; } else { struggleAge += Time.fixedDeltaTime; } if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection)) { ((EntityState)this).characterMotor.velocity.y = rollSpeed; } if (((EntityState)this).fixedAge >= fireTime && !hasFired) { hasFired = true; AkSoundEngine.PostEvent(500315785u, ((EntityState)this).gameObject); } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } public class Transform : BaseSkillState { private float duration = 1f; private float fireTime = 0.2f; private bool hasFired; public DittoController dittocon; public DittoMasterController dittomastercon; public HurtBox Target; public override void OnEnter() { ((BaseState)this).OnEnter(); dittocon = ((EntityState)this).GetComponent<DittoController>(); dittomastercon = ((Component)((EntityState)this).characterBody.master).gameObject.GetComponent<DittoMasterController>(); if (Object.op_Implicit((Object)(object)dittocon) && ((EntityState)this).isAuthority) { Target = dittocon.GetTrackingTarget(); } if (Object.op_Implicit((Object)(object)Target)) { hasFired = false; } } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { //IL_005c: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= fireTime && !hasFired) { hasFired = true; if (Object.op_Implicit((Object)(object)Target)) { Debug.Log((object)"Target"); Debug.Log((object)BodyCatalog.FindBodyPrefab(BodyCatalog.GetBodyName(Target.healthComponent.body.bodyIndex))); if (((EntityState)this).isAuthority) { AkSoundEngine.PostEvent(1719197672u, ((EntityState)this).gameObject); } ChangeOrSetCharacter(((EntityState)this).characterBody.master.playerCharacterMasterController.networkUser, Target); return; } } if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public void dropEquipment(EquipmentDef def) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: 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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) if (((EntityState)this).isAuthority) { NetMessageExtensions.Send((INetMessage)(object)new EquipmentDropNetworked(PickupCatalog.FindPickupIndex(def.equipmentIndex), ((EntityState)this).transform.position + Vector3.up * 1.5f, Vector3.up * 20f + ((EntityState)this).transform.forward * 2f), (NetworkDestination)1); } } private void ChangeOrSetCharacter(NetworkUser player, HurtBox hurtBox) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_049e: Unknown result type (might be due to invalid IL or missing references) //IL_04b5: Unknown result type (might be due to invalid IL or missing references) //IL_051f: Unknown result type (might be due to invalid IL or missing references) //IL_0537: Unknown result type (might be due to invalid IL or missing references) //IL_054f: Unknown result type (might be due to invalid IL or missing references) //IL_0567: Unknown result type (might be due to invalid IL or missing references) //IL_057f: Unknown result type (might be due to invalid IL or missing references) //IL_0597: Unknown result type (might be due to invalid IL or missing references) //IL_05af: Unknown result type (might be due to invalid IL or missing references) //IL_05c7: Unknown result type (might be due to invalid IL or missing references) //IL_05df: Unknown result type (might be due to invalid IL or missing references) //IL_05f7: Unknown result type (might be due to invalid IL or missing references) CharacterMaster master = player.master; CharacterBody body = master.GetBody(); float num = body.healthComponent.health / body.healthComponent.fullHealth; string bodyName = BodyCatalog.GetBodyName(hurtBox.healthComponent.body.bodyIndex); GameObject val = BodyCatalog.FindBodyPrefab(bodyName); CharacterMaster master2 = hurtBox.healthComponent.body.master; SurvivorDef val2 = SurvivorCatalog.FindSurvivorDefFromBody(val); if (Object.op_Implicit((Object)(object)val2) && !val2.CheckUserHasRequiredEntitlement(master.playerCharacterMasterController.networkUser)) { return; } ExpansionRequirementComponent component = val.GetComponent<ExpansionRequirementComponent>(); if (Object.op_Implicit((Object)(object)component) && !component.PlayerCanUseBody(master.playerCharacterMasterController)) { return; } if (!StaticValues.blacklist.Contains(((Object)val).name)) { master.bodyPrefab = val; EntityStateMachine component2 = val.GetComponent<EntityStateMachine>(); component2.initialStateType = new SerializableEntityStateType(typeof(SpawnState)); master.TransformBody(BodyCatalog.GetBodyName(hurtBox.healthComponent.body.bodyIndex)); master.bodyPrefab = BodyCatalog.FindBodyPrefab(((Object)val).name); CharacterBody body2 = master.GetBody(); if (Config.copyLoadout.Value) { body2.SetLoadoutServer(master2.loadout); } if (Config.copyHealth.Value) { body2.healthComponent.health = num * body2.healthComponent.fullHealth; } RigidbodyMotor component3 = ((Component)body2).gameObject.GetComponent<RigidbodyMotor>(); EquipmentSlot component4 = ((Component)body2).gameObject.GetComponent<EquipmentSlot>(); if (!Object.op_Implicit((Object)(object)component4)) { component4 = ((Component)body2).gameObject.AddComponent<EquipmentSlot>(); } if (((Object)body2).name == "CaptainBody") { master.inventory.GiveItem(Items.CaptainDefenseMatrix, 1); } if (((Object)body2).name == "HereticBody") { master.inventory.GiveItem(Items.LunarPrimaryReplacement, 1); master.inventory.GiveItem(Items.LunarSecondaryReplacement, 1); master.inventory.GiveItem(Items.LunarSpecialReplacement, 1); master.inventory.GiveItem(Items.LunarUtilityReplacement, 1); } if (StaticValues.speciallist.Contains(((Object)val).name)) { dittomastercon.transformed = true; } if (Object.op_Implicit((Object)(object)component3)) { component3.characterBody.moveSpeed = body.moveSpeed * Config.movespeedMultiplier.Value; } float damage = body2.damage * Config.damageMultiplier.Value; float baseDamage = body2.baseDamage * Config.damageMultiplier.Value; float levelDamage = body2.levelDamage * Config.damageMultiplier.Value; float attackSpeed = body2.attackSpeed * Config.attackspeedMultiplier.Value; float baseAttackSpeed = body2.baseAttackSpeed * Config.attackspeedMultiplier.Value; float levelAttackSpeed = body2.levelAttackSpeed * Config.attackspeedMultiplier.Value; body2.baseMaxHealth = body.baseMaxHealth + body2.baseMaxHealth / 5f; body2.levelMaxHealth = body.levelMaxHealth + body2.levelMaxHealth / 5f; body2.maxHealth = body.maxHealth + body2.maxHealth / 5f; body2.baseRegen = body.regen; body2.baseJumpCount = body.baseJumpCount; body2.maxJumpCount = body.maxJumpCount; body2.maxJumpHeight = body.maxJumpHeight; body2.jumpPower = body.jumpPower; body2.baseJumpPower = body.baseJumpPower; body2.damage = damage; body2.baseDamage = baseDamage; body2.levelDamage = levelDamage; body2.attackSpeed = attackSpeed; body2.baseAttackSpeed = baseAttackSpeed; body2.levelAttackSpeed = levelAttackSpeed; if (Object.op_Implicit((Object)(object)body2.characterMotor)) { body2.characterMotor.mass = body.characterMotor.mass; body2.characterMotor.jumpCount = body.characterMotor.jumpCount; } body2.baseArmor = body.baseArmor; body2.armor = body.armor; body2.baseMoveSpeed = body.baseMoveSpeed * Config.movespeedMultiplier.Value; body2.moveSpeed = body.moveSpeed * Config.movespeedMultiplier.Value; body2.levelMoveSpeed = body.levelMoveSpeed * Config.movespeedMultiplier.Value; body2.AddTimedBuffAuthority(Buffs.HiddenInvincibility.buffIndex, 1f); body2.AddTimedBuffAuthority(Buffs.transformdeBuff.buffIndex, 30f); if (Object.op_Implicit((Object)(object)master2.playerCharacterMasterController) || !Object.op_Implicit((Object)(object)master2.playerCharacterMasterController)) { if (Config.choiceOnTeammate.Value) { } if (!Config.choiceOnTeammate.Value) { NetworkingHelpers.ApplyBuff(body2, Buffs.assaultvestBuff.buffIndex, 0, -1f); NetworkingHelpers.ApplyBuff(body2, Buffs.choicebandBuff.buffIndex, 0, -1f); NetworkingHelpers.ApplyBuff(body2, Buffs.choicescarfBuff.buffIndex, 0, -1f); NetworkingHelpers.ApplyBuff(body2, Buffs.choicespecsBuff.buffIndex, 0, -1f); NetworkingHelpers.ApplyBuff(body2, Buffs.leftoversBuff.buffIndex, 0, -1f); NetworkingHelpers.ApplyBuff(body2, Buffs.lifeorbBuff.buffIndex, 0, -1f); NetworkingHelpers.ApplyBuff(body2, Buffs.luckyeggBuff.buffIndex, 0, -1f); NetworkingHelpers.ApplyBuff(body2, Buffs.rockyhelmetBuff.buffIndex, 0, -1f); NetworkingHelpers.ApplyBuff(body2, Buffs.scopelensBuff.buffIndex, 0, -1f); NetworkingHelpers.ApplyBuff(body2, Buffs.shellbellBuff.buffIndex, 0, -1f); } } if (Config.grabAspect.Value && hurtBox.healthComponent.body.isElite) { if (hurtBox.healthComponent.body.HasBuff(Buffs.AffixBlue)) { dropEquipment(Elites.Lightning.eliteEquipmentDef); } if (hurtBox.healthComponent.body.HasBuff(Buffs.AffixHaunted)) { dropEquipment(Elites.Haunted.eliteEquipmentDef); } if (hurtBox.healthComponent.body.HasBuff(Buffs.AffixLunar)) { dropEquipment(Elites.Lunar.eliteEquipmentDef); } if (hurtBox.healthComponent.body.HasBuff(Buffs.AffixPoison)) { dropEquipment(Elites.Poison.eliteEquipmentDef); } if (hurtBox.healthComponent.body.HasBuff(Buffs.AffixRed)) { dropEquipment(Elites.Fire.eliteEquipmentDef); } if (hurtBox.healthComponent.body.HasBuff(Buffs.AffixWhite)) { dropEquipment(Elites.Ice.eliteEquipmentDef); } if (hurtBox.healthComponent.body.HasBuff(Buffs.EliteEarth)) { dropEquipment(Elites.Earth.eliteEquipmentDef); } if (hurtBox.healthComponent.body.HasBuff(Buffs.EliteVoid)) { dropEquipment(Elites.Void.eliteEquipmentDef); } } } else { dittomastercon.transformed = false; Chat.AddMessage("Ditto's <style=cIsUtility>Transform failed!</style>"); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } public override void OnSerialize(NetworkWriter writer) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) NetworkExtensions.Write(writer, HurtBoxReference.FromHurtBox(Target)); } public override void OnDeserialize(NetworkReader reader) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) HurtBoxReference val = NetworkExtensions.ReadHurtBoxReference(reader); Target = ((HurtBoxReference)(ref val)).ResolveHurtBox(); } } public class TransformDitto : BaseSkillState { private float duration = 1f; private float fireTime = 0.2f; private bool hasFired; public DittoController dittocon; public DittoMasterController dittomastercon; public HurtBox Target; public override void OnEnter() { ((BaseState)this).OnEnter(); float num = ((EntityState)this).characterBody.healthComponent.health / ((EntityState)this).characterBody.healthComponent.fullHealth; AkSoundEngine.PostEvent(1719197672u, ((EntityState)this).gameObject); CharacterMaster master = ((EntityState)this).characterBody.master; if (((Object)master.bodyPrefab).name == "CaptainBody") { master.inventory.RemoveItem(Items.CaptainDefenseMatrix, 1); } if (((Object)master.bodyPrefab).name == "HereticBody") { master.inventory.RemoveItem(Items.LunarPrimaryReplacement, 1); master.inventory.RemoveItem(Items.LunarSecondaryReplacement, 1); master.inventory.RemoveItem(Items.LunarSpecialReplacement, 1); master.inventory.RemoveItem(Items.LunarUtilityReplacement, 1); } if (((Object)master.bodyPrefab).name != "DittoBody") { master.TransformBody("DittoBody"); CharacterBody body = master.GetBody(); dittomastercon.transformed = false; dittomastercon.assaultvest = false; dittomastercon.choiceband = false; dittomastercon.choicescarf = false; dittomastercon.choicespecs = false; dittomastercon.leftovers = false; dittomastercon.lifeorb = false; dittomastercon.luckyegg = false; dittomastercon.rockyhelmet = false; dittomastercon.scopelens = false; dittomastercon.shellbell = false; if (Config.copyHealth.Value) { body.healthComponent.health = body.healthComponent.fullHealth * num; } } } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } } } namespace DittoMod.SkillStates.BaseStates { public class SpawnState : BaseSkillState { public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge > 0f && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } } } namespace DittoMod.Items { public abstract class ItemBase<T> : ItemBase where T : ItemBase<T> { public static T instance { get; private set; } public ItemBase() { if (instance != null) { throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting ItemBase was instantiated twice"); } instance = this as T; } } public abstract class ItemBase { public ItemDef ItemDef; public abstract string ItemName { get; } public abstract string ItemLangTokenName { get; } public abstract string ItemPickupDesc { get; } public abstract string ItemFullDescription { get; } public abstract string ItemLore { get; } public abstract ItemTier Tier { get; } public virtual ItemTag[] ItemTags { get; } public abstract GameObject ItemModel { get; } public abstract Sprite ItemIcon { get; } public virtual bool CanRemove { get; } = true; public virtual bool AIBlacklisted { get; set; } = false; public virtual bool PrinterBlacklisted { get; set; } = false; public virtual bool RequireUnlock { get; set; } = true; public virtual bool Hidden { get; } = false; public abstract void Init(ConfigFile config); protected void CreateLang() { LanguageAPI.Add("ITEM_" + ItemLangTokenName + "_NAME", ItemName); LanguageAPI.Add("ITEM_" + ItemLangTokenName + "_PICKUP", ItemPickupDesc); LanguageAPI.Add("ITEM_" + ItemLangTokenName + "_DESCRIPTION", ItemFullDescription); LanguageAPI.Add("ITEM_" + ItemLangTokenName + "_LORE", ItemLore); } public abstract ItemDisplayRuleDict CreateItemDisplayRules(); protected void CreateItem() { //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Expected O, but got Unknown ItemDef = ScriptableObject.CreateInstance<ItemDef>(); ((Object)ItemDef).name = "ITEM_" + ItemLangTokenName; ItemDef.nameToken = "ITEM_" + ItemLangTokenName + "_NAME"; ItemDef.pickupToken = "ITEM_" + ItemLangTokenName + "_PICKUP"; ItemDef.descriptionToken = "ITEM_" + ItemLangTokenName + "_DESCRIPTION"; ItemDef.loreToken = "ITEM_" + ItemLangTokenName + "_LORE"; ItemDef.pickupModelPrefab = ItemModel; ItemDef.pickupIconSprite = ItemIcon; ItemDef.hidden = false; ItemDef.canRemove = CanRemove; ItemDef.tier = Tier; ItemDef.tags = ItemTags; ItemDisplayRuleDict val = CreateItemDisplayRules(); ItemAPI.Add(new CustomItem(ItemDef, val)); } public abstract void Hooks(); public int GetCount(CharacterBody body) { if (!Object.op_Implicit((Object)(object)body) || !Object.op_Implicit((Object)(object)body.inventory)) { return 0; } return body.inventory.GetItemCount(ItemDef); } public int GetCount(CharacterMaster master) { if (!Object.op_Implicit((Object)(object)master) || !Object.op_Implicit((Object)(object)master.inventory)) { return 0; } return master.inventory.GetItemCount(ItemDef); } } } namespace DittoMod.Equipment { public abstract class EquipmentBase<T> : EquipmentBase where T : EquipmentBase<T> { public static T instance { get; private set; } public EquipmentBase() { if (instance != null) { throw new InvalidOperationException("Singleton class \"" + typeof(T).Name + "\" inheriting EquipmentBoilerplate/Equipment was instantiated twice"); } instance = this as T; } } public abstract class EquipmentBase { public enum TargetingType { Enemies, Friendlies } public class TargetingControllerComponent : MonoBehaviour { public GameObject TargetObject; public GameObject VisualizerPrefab; public Indicator Indicator; public BullseyeSearch TargetFinder; public Action<BullseyeSearch> AdditionalBullseyeFunctionality = delegate { }; public void Awake() { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Expected O, but got Unknown Indicator = new Indicator(((Component)this).gameObject, (GameObject)null); } public void OnDestroy() { Invalidate(); } public void Invalidate() { TargetObject = null; Indicator.targetTransform = null; } public void ConfigureTargetFinderBase(EquipmentSlot self) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0063: 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_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0090: 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_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown if (TargetFinder == null) { TargetFinder = new BullseyeSearch(); } TargetFinder.teamMaskFilter = TeamMask.allButNeutral; ((TeamMask)(ref TargetFinder.teamMaskFilter)).RemoveTeam(self.characterBody.teamComponent.teamIndex); TargetFinder.sortMode = (SortMode)2; TargetFinder.filterByLoS = true; float num = default(float); Ray val = CameraRigController.ModifyAimRayIfApplicable(self.GetAimRay(), ((Component)self).gameObject, ref num); TargetFinder.searchOrigin = ((Ray)(ref val)).origin; TargetFinder.searchDirection = ((Ray)(ref val)).direction; TargetFinder.maxAngleFilter = 10f; TargetFinder.viewer = self.characterBody; } public void ConfigureTargetFinderForEnemies(EquipmentSlot self) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) ConfigureTargetFinderBase(self); TargetFinder.teamMaskFilter = TeamMask.GetUnprotectedTeams(self.characterBody.teamComponent.teamIndex); TargetFinder.RefreshCandidates(); TargetFinder.FilterOutGameObject(((Component)self).gameObject); AdditionalBullseyeFunctionality(TargetFinder); PlaceTargetingIndicator(TargetFinder.GetResults()); } public void ConfigureTargetFinderForFriendlies(EquipmentSlot self) { //IL_000f: 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_002f: Unknown result type (might be due to invalid IL or missing references) ConfigureTargetFinderBase(self); TargetFinder.teamMaskFilter = TeamMask.none; ((TeamMask)(ref TargetFinder.teamMaskFilter)).AddTeam(self.characterBody.teamComponent.teamIndex); TargetFinder.RefreshCandidates(); TargetFinder.FilterOutGameObject(((Component)self).gameObject); AdditionalBullseyeFunctionality(TargetFinder); PlaceTargetingIndicator(TargetFinder.GetResults()); } public void PlaceTargetingIndicator(IEnumerable<HurtBox> TargetFinderResults) { HurtBox val = (TargetFinderResults.Any() ? TargetFinderResults.First() : null); if (Object.op_Implicit((Object)(object)val)) { TargetObject = ((Component)val.healthComponent).gameObject; Indicator.visualizerPrefab = VisualizerPrefab; Indicator.targetTransform = ((Component)val).transform; } else { Invalidate(); } Indicator.active = Object.op_Implicit((Object)(object)val); } } public EquipmentDef EquipmentDef; public GameObject TargetingIndicatorPrefabBase = null; public abstract string EquipmentName { get; } public abstract string EquipmentLangTokenName { get; } public abstract string EquipmentPickupDesc { get; } public abstract string EquipmentFullDescription { get; } public abstract string EquipmentLore { get; } public abstract GameObject EquipmentModel { get; } public abstract Sprite EquipmentIcon { get; } public virtual bool AppearsInSinglePlayer { get; } = true; public virtual bool AppearsInMultiPlayer { get; } = true; public virtual bool CanDrop { get; } = true; public virtual float Cooldown { get; } = 60f; public virtual bool EnigmaCompatible { get; } = true; public virtual bool IsBoss { get; } = false; public virtual bool IsLunar { get; } = false; public virtual bool UseTargeting { get; } = false; public virtual TargetingType TargetingTypeEnum { get; } = TargetingType.Enemies; public abstract void Init(); public abstract ItemDisplayRuleDict CreateItemDisplayRules(); protected void CreateLang() { LanguageAPI.Add("EQUIPMENT_" + EquipmentLangTokenName + "_NAME", EquipmentName); LanguageAPI.Add("EQUIPMENT_" + EquipmentLangTokenName + "_PICKUP", EquipmentPickupDesc); LanguageAPI.Add("EQUIPMENT_" + EquipmentLangTokenName + "_DESCRIPTION", EquipmentFullDescription); LanguageAPI.Add("EQUIPMENT_" + EquipmentLangTokenName + "_LORE", EquipmentLore); } protected void CreateEquipment() { //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Expected O, but got Unknown //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Expected O, but got Unknown //IL_018c: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Expected O, but got Unknown EquipmentDef = ScriptableObject.CreateInstance<EquipmentDef>(); ((Object)EquipmentDef).name = "EQUIPMENT_" + EquipmentLangTokenName; EquipmentDef.nameToken = "EQUIPMENT_" + EquipmentLangTokenName + "_NAME"; EquipmentDef.pickupToken = "EQUIPMENT_" + EquipmentLangTokenName + "_PICKUP"; EquipmentDef.descriptionToken = "EQUIPMENT_" + EquipmentLangTokenName + "_DESCRIPTION"; EquipmentDef.loreToken = "EQUIPMENT_" + EquipmentLangTokenName + "_LORE"; EquipmentDef.pickupModelPrefab = EquipmentModel; EquipmentDef.pickupIconSprite = EquipmentIcon; EquipmentDef.appearsInSinglePlayer = AppearsInSinglePlayer; EquipmentDef.appearsInMultiPlayer = AppearsInMultiPlayer; EquipmentDef.canDrop = CanDrop; EquipmentDef.cooldown = Cooldown; EquipmentDef.enigmaCompatible = EnigmaCompatible; EquipmentDef.isBoss = IsBoss; EquipmentDef.isLunar = IsLunar; ItemAPI.Add(new CustomEquipment(EquipmentDef, CreateItemDisplayRules())); EquipmentSlot.PerformEquipmentAction += new hook_PerformEquipmentAction(PerformEquipmentAction); if (UseTargeting && Object.op_Implicit((Object)(object)TargetingIndicatorPrefabBase)) { EquipmentSlot.Update += new hook_Update(UpdateTargeting); } } protected bool PerformEquipmentAction(orig_PerformEquipmentAction orig, EquipmentSlot self, EquipmentDef equipmentDef) { if ((Object)(object)equipmentDef == (Object)(object)EquipmentDef) { return ActivateEquipment(self); } return orig.Invoke(self, equipmentDef); } protected abstract bool ActivateEquipment(EquipmentSlot slot); public abstract void Hooks(); protected void UpdateTargeting(orig_Update orig, EquipmentSlot self) { //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) orig.Invoke(self); if (self.equipmentIndex != EquipmentDef.equipmentIndex) { return; } TargetingControllerComponent targetingControllerComponent = ((Component)self).GetComponent<TargetingControllerComponent>(); if (!Object.op_Implicit((Object)(object)targetingControllerComponent)) { targetingControllerComponent = ((Component)self).gameObject.AddComponent<TargetingControllerComponent>(); targetingControllerComponent.VisualizerPrefab = TargetingIndicatorPrefabBase; } if (self.stock > 0) { switch (TargetingTypeEnum) { case TargetingType.Enemies: targetingControllerComponent.ConfigureTargetFinderForEnemies(self); break; case TargetingType.Friendlies: targetingControllerComponent.ConfigureTargetFinderForFriendlies(self); break; } } else { targetingControllerComponent.Invalidate(); targetingControllerComponent.Indicator.active = false; } } } } namespace DittoMod.Modules { internal static class Assets { internal static AssetBundle mainAssetBundle; public static Sprite warcryBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/WarCryOnMultiKill/bdWarCryBuff.asset").WaitForCompletion().iconSprite; public static Sprite shieldBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Common/bdArmorBoost.asset").WaitForCompletion().iconSprite; public static Sprite speedBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Bandit2/bdCloakSpeed.asset").WaitForCompletion().iconSprite; public static Sprite boostBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/RandomDamageZone/bdPowerBuff.asset").WaitForCompletion().iconSprite; public static Sprite levitateBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/DLC1/MoveSpeedOnKill/bdKillMoveSpeed.asset").WaitForCompletion().iconSprite; public static Sprite elephantBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/GainArmor/bdElephantArmorBoost.asset").WaitForCompletion().iconSprite; public static Sprite brainBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/KillEliteFrenzy/bdNoCooldowns.asset").WaitForCompletion().iconSprite; public static Sprite skinBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/DLC1/OutOfCombatArmor/bdOutOfCombatArmorBuff.asset").WaitForCompletion().iconSprite; public static Sprite blazingBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Common/bdOnFire.asset").WaitForCompletion().iconSprite; public static Sprite critBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/CritOnUse/bdFullCrit.asset").WaitForCompletion().iconSprite; public static Sprite predatorBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/AttackSpeedOnCrit/bdAttackSpeedOnCrit.asset").WaitForCompletion().iconSprite; public static Sprite banditSkullBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Bandit2/bdBanditSkull.asset").WaitForCompletion().iconSprite; internal static NetworkSoundEventDef swordHitSoundEvent; internal static List<NetworkSoundEventDef> networkSoundEventDefs = new List<NetworkSoundEventDef>(); internal static List<EffectDef> effectDefs = new List<EffectDef>(); internal static Shader hotpoo = LegacyResourcesAPI.Load<Shader>("Shaders/Deferred/HGStandard"); internal static Material commandoMat; private static string[] assetNames = new string[0]; private const string assetbundleName = "DittoAssetBundle"; internal static GameObject DittoEquipmentPrefab; internal static GameObject DittoItemPrefab; internal static void Initialize() { bool flag = false; LoadAssetBundle(); LoadSoundbank(); PopulateAssets(); } internal static void LoadAssetBundle() { if ((Object)(object)mainAssetBundle == (Object)null) { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DittoMod.DittoAssetBundle"); mainAssetBundle = AssetBundle.LoadFromStream(stream); } assetNames = mainAssetBundle.GetAllAssetNames(); } internal static void LoadSoundbank() { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DittoMod.Ditto.bnk"); byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); SoundBanks.Add(array); } internal static void PopulateAssets() { if (!Object.op_Implicit((Object)(object)mainAssetBundle)) { Debug.LogError((object)"There is no AssetBundle to load assets from."); return; } DittoEquipmentPrefab = mainAssetBundle.LoadAsset<GameObject>("DittoEquipmentModel"); DittoItemPrefab = mainAssetBundle.LoadAsset<GameObject>("DittoItemModel"); } private static GameObject CreateTracer(string originalTracerName, string newTracerName) { if ((Object)(object)LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/" + originalTracerName) == (Object)null) { return null; } GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/" + originalTracerName), newTracerName, true); if (!Object.op_Implicit((Object)(object)val.GetComponent<EffectComponent>())) { val.AddComponent<EffectComponent>(); } if (!Object.op_Implicit((Object)(object)val.GetComponent<VFXAttributes>())) { val.AddComponent<VFXAttributes>(); } if (!Object.op_Implicit((Object)(object)val.GetComponent<NetworkIdentity>())) { val.AddComponent<NetworkIdentity>(); } val.GetComponent<Tracer>().speed = 250f; val.GetComponent<Tracer>().length = 50f; AddNewEffectDef(val); return val; } internal static NetworkSoundEventDef CreateNetworkSoundEventDef(string eventName) { NetworkSoundEventDef val = ScriptableObject.CreateInstance<NetworkSoundEventDef>(); val.akId = AkSoundEngine.GetIDFromString(eventName); val.eventName = eventName; networkSoundEventDefs.Add(val); return val; } internal static void ConvertAllRenderersToHopooShader(GameObject objectToConvert) { if (!Object.op_Implicit((Object)(object)objectToConvert)) { return; } MeshRenderer[] componentsInChildren = objectToConvert.GetComponentsInChildren<MeshRenderer>(); foreach (MeshRenderer val in componentsInChildren) { if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)((Renderer)val).material)) { ((Renderer)val).material.shader = hotpoo; } } SkinnedMeshRenderer[] componentsInChildren2 = objectToConvert.GetComponentsInChildren<SkinnedMeshRenderer>(); foreach (SkinnedMeshRenderer val2 in componentsInChildren2) { if (Object.op_Implicit((Object)(object)val2) && Object.op_Implicit((Object)(object)((Renderer)val2).material)) { ((Renderer)val2).material.shader = hotpoo; } } } internal static RendererInfo[] SetupRendererInfos(GameObject obj) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) MeshRenderer[] componentsInChildren = obj.GetComponentsInChildren<MeshRenderer>(); RendererInfo[] array = (RendererInfo[])(object)new RendererInfo[componentsInChildren.Length]; for (int i = 0; i < componentsInChildren.Length; i++) { array[i] = new RendererInfo { defaultMaterial = ((Renderer)componentsInChildren[i]).material, renderer = (Renderer)(object)componentsInChildren[i], defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false }; } return array; } internal static Texture LoadCharacterIcon(string characterName) { return mainAssetBundle.LoadAsset<Texture>("tex" + characterName + "Icon"); } internal static GameObject LoadCrosshair(string crosshairName) { if ((Object)(object)LegacyResourcesAPI.Load<GameObject>("Prefabs/Crosshair/" + crosshairName + "Crosshair") == (Object)null) { return LegacyResourcesAPI.Load<GameObject>("Prefabs/Crosshair/StandardCrosshair"); } return LegacyResourcesAPI.Load<GameObject>("Prefabs/Crosshair/" + crosshairName + "Crosshair"); } private static GameObject LoadEffect(string resourceName) { return LoadEffect(resourceName, "", parentToTransform: false); } private static GameObject LoadEffect(string resourceName, string soundName) { return LoadEffect(resourceName, soundName, parentToTransform: false); } private static GameObject LoadEffect(string resourceName, bool parentToTransform) { return LoadEffect(resourceName, "", parentToTransform); } private static GameObject LoadEffect(string resourceName, string soundName, bool parentToTransform) { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) bool flag = false; for (int i = 0; i < assetNames.Length; i++) { if (assetNames[i].Contains(resourceName.ToLower())) { flag = true; i = assetNames.Length; } } if (!flag) { Debug.LogError((object)("Failed to load effect: " + resourceName + " because it does not exist in the AssetBundle")); return null; } GameObject val = mainAssetBundle.LoadAsset<GameObject>(resourceName); val.AddComponent<DestroyOnTimer>().duration = 12f; val.AddComponent<NetworkIdentity>(); val.AddComponent<VFXAttributes>().vfxPriority = (VFXPriority)2; EffectComponent val2 = val.AddComponent<EffectComponent>(); val2.applyScale = false; val2.effectIndex = (EffectIndex)(-1); val2.parentToReferencedTransform = parentToTransform; val2.positionAtReferencedTransform = true; val2.soundName = soundName; AddNewEffectDef(val, soundName); return val; } private static void AddNewEffectDef(GameObject effectPrefab) { AddNewEffectDef(effectPrefab, ""); } private static void AddNewEffectDef(GameObject effectPrefab, string soundName) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown EffectDef val = new EffectDef(); val.prefab = effectPrefab; val.prefabEffectComponent = effectPrefab.GetComponent<EffectComponent>(); val.prefabName = ((Object)effectPrefab).name; val.prefabVfxAttributes = effectPrefab.GetComponent<VFXAttributes>(); val.spawnSoundEventName = soundName; effectDefs.Add(val); } public static Material CreateMaterial(string materialName, float emission, Color emissionColor, float normalStrength) { //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)commandoMat)) { commandoMat = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponentInChildren<CharacterModel>().baseRendererInfos[0].defaultMaterial; } Material val = Object.Instantiate<Material>(commandoMat); Material val2 = mainAssetBundle.LoadAsset<Material>(materialName); if (!Object.op_Implicit((Object)(object)val2)) { Debug.LogError((object)("Failed to load material: " + materialName + " - Check to see that the name in your Unity project matches the one in this code")); return commandoMat; } ((Object)val).name = materialName; val.SetColor("_Color", val2.GetColor("_Color")); val.SetTexture("_MainTex", val2.GetTexture("_MainTex")); val.SetColor("_EmColor", emissionColor); val.SetFloat("_EmPower", emission); val.SetTexture("_EmTex", val2.GetTexture("_EmissionMap")); val.SetFloat("_NormalStrength", normalStrength); return val; } public static Material CreateMaterial(string materialName) { return CreateMaterial(materialName, 0f); } public static Material CreateMaterial(string materialName, float emission) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) return CreateMaterial(materialName, emission, Color.white); } public static Material CreateMaterial(string materialName, float emission, Color emissionColor) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) return CreateMaterial(materialName, emission, emissionColor, 0f); } } public static class Buffs { internal static List<BuffDef> buffDefs = new List<BuffDef>(); internal static BuffDef transformBuff; internal static BuffDef transformdeBuff; internal static BuffDef assaultvestBuff; internal static BuffDef choicescarfBuff; internal static BuffDef choicebandBuff; internal static BuffDef choicespecsBuff; internal static BuffDef leftoversBuff; internal static BuffDef lifeorbBuff; internal static BuffDef luckyeggBuff; internal static BuffDef rockyhelmetBuff; internal static BuffDef scopelensBuff; internal static BuffDef shellbellBuff; internal static BuffDef flamebodyBuff; internal static BuffDef hugepowerBuff; internal static BuffDef levitateBuff; internal static BuffDef magicguardBuff; internal static BuffDef moodyBuff; internal static BuffDef moodyDamageBuff; internal static BuffDef moodyArmorBuff; internal static BuffDef moodyMovespeedBuff; internal static BuffDef moodyAttackspeedBuff; internal static BuffDef moodyDamageDebuff; internal static BuffDef moodyArmorDebuff; internal static BuffDef moodyMovespeedDebuff; internal static BuffDef moodyAttackspeedDebuff; internal static BuffDef moxieBuff; internal static BuffDef moxieBoostBuff; internal static BuffDef multiscaleBuff; internal static BuffDef multiscaleCooldownDebuff; internal static BuffDef sniperBuff; internal static void RegisterBuffs() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_025b: Unknown result type (might be due to invalid IL or missing references) //IL_0276: Unknown result type (might be due to invalid IL or missing references) //IL_0291: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02d6: Unknown result type (might be due to invalid IL or missing references) //IL_0300: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_0354: Unknown result type (might be due to invalid IL or missing references) //IL_037e: Unknown result type (might be due to invalid IL or missing references) //IL_0399: Unknown result type (might be due to invalid IL or missing references) //IL_03b4: Unknown result type (might be due to invalid IL or missing references) //IL_03de: Unknown result type (might be due to invalid IL or missing references) //IL_03f9: Unknown result type (might be due to invalid IL or missing references) //IL_0414: Unknown result type (might be due to invalid IL or missing references) Sprite iconSprite = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/DLC1/BleedOnHitVoid/bdFracture.asset").WaitForCompletion().iconSprite; transformdeBuff = AddNewBuff("transformdeBuff", iconSprite, Color.white, canStack: false, isDebuff: true); transformBuff = AddNewBuff("transformBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("Transform"), Color.white, canStack: true, isDebuff: false); assaultvestBuff = AddNewBuff("assaultvestBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("AssaultVest"), Color.white, canStack: false, isDebuff: false); choicescarfBuff = AddNewBuff("choicescarfBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("ChoiceScarf"), Color.white, canStack: false, isDebuff: false); choicebandBuff = AddNewBuff("choicebandBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("ChoiceBand"), Color.white, canStack: false, isDebuff: false); choicespecsBuff = AddNewBuff("choicespecsBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("ChoiceSpecs"), Color.white, canStack: false, isDebuff: false); leftoversBuff = AddNewBuff("leftoversBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("Leftovers"), Color.white, canStack: false, isDebuff: false); lifeorbBuff = AddNewBuff("lifeorbBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("LifeOrb"), Color.white, canStack: false, isDebuff: false); luckyeggBuff = AddNewBuff("luckyeggBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("LuckyEgg"), Color.white, canStack: false, isDebuff: false); rockyhelmetBuff = AddNewBuff("rockyhelmetBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("RockyHelmet"), Color.white, canStack: false, isDebuff: false); scopelensBuff = AddNewBuff("scopelensBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("ScopeLens"), Color.white, canStack: false, isDebuff: false); shellbellBuff = AddNewBuff("shellbellBuff", Assets.mainAssetBundle.LoadAsset<Sprite>("ShellBell"), Color.white, canStack: false, isDebuff: false); flamebodyBuff = AddNewBuff("flamebodyBuff", Assets.blazingBuffIcon, Color.grey, canStack: false, isDebuff: false); hugepowerBuff = AddNewBuff("hugepowerBuff", Assets.elephantBuffIcon, Color.blue, canStack: false, isDebuff: false); levitateBuff = AddNewBuff("levitateBuff", Assets.levitateBuffIcon, Color.magenta, canStack: false, isDebuff: false); magicguardBuff = AddNewBuff("magicguardBuff", Assets.brainBuffIcon, new Color(0.86f, 0.44f, 0.59f), canStack: false, isDebuff: false); moodyBuff = AddNewBuff("moodyBuff", Assets