Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of PlayableScavenger v1.2.0
PlayableScavenger.dll
Decompiled 4 months agousing System; 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.Configuration; using EntityStates; using EntityStates.ScavMonster; using KinematicCharacterController; using R2API; using R2API.Utils; using RoR2; using RoR2.Skills; using SimpleJSON; using UnityEngine; using UnityEngine.Networking; [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 = "")] [assembly: AssemblyCompany("PlayableScavenger")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("PlayableScavenger")] [assembly: AssemblyTitle("PlayableScavenger")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace PlayableScavenger; internal class Hook { internal static void Hooks() { Run.onRunStartGlobal += Run_onRunStartGlobal; } private static void Run_onRunStartGlobal(Run obj) { //IL_0016: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: 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_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) for (int i = 0; i < Run.instance.availableTier1DropList.Count; i++) { MainPlugin.tier1.Add(Run.instance.availableTier1DropList[i]); } for (int j = 0; j < Run.instance.availableTier2DropList.Count; j++) { MainPlugin.tier2.Add(Run.instance.availableTier2DropList[j]); } for (int k = 0; k < Run.instance.availableTier3DropList.Count; k++) { MainPlugin.tier3.Add(Run.instance.availableTier3DropList[k]); } for (int l = 0; l < MainPlugin.itemBlacklist.Count; l++) { PickupIndex item = PickupCatalog.FindPickupIndex(ItemCatalog.FindItemIndex(MainPlugin.itemBlacklist[l])); if (MainPlugin.tier1.Contains(item)) { MainPlugin.tier1.Remove(item); } if (MainPlugin.tier2.Contains(item)) { MainPlugin.tier2.Remove(item); } if (MainPlugin.tier3.Contains(item)) { MainPlugin.tier3.Remove(item); } } } } [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.*/)] [BepInPlugin("com.Dragonyck.PlayableScavenger", "PlayableScavenger", "1.2.0")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class MainPlugin : BaseUnityPlugin { public const string MODUID = "com.Dragonyck.PlayableScavenger"; public const string MODNAME = "PlayableScavenger"; public const string VERSION = "1.2.0"; public const string SURVIVORNAME = "DragonScavenger"; public const string SURVIVORNAMEKEY = "DRAGONSCAVENGER"; public static GameObject characterPrefab; public GameObject characterDisplay; public GameObject doppelganger; public static Color characterColor; protected internal static ConfigEntry<int> baseJumpCount; protected internal static ConfigEntry<float> mainRootSpeed; protected internal static ConfigEntry<float> baseMaxHealth; protected internal static ConfigEntry<float> levelMaxHealth; protected internal static ConfigEntry<float> baseRegen; protected internal static ConfigEntry<float> levelRegen; protected internal static ConfigEntry<float> baseMaxShield; protected internal static ConfigEntry<float> levelMaxShield; protected internal static ConfigEntry<float> baseMoveSpeed; protected internal static ConfigEntry<float> levelMoveSpeed; protected internal static ConfigEntry<float> baseAcceleration; protected internal static ConfigEntry<float> baseJumpPower; protected internal static ConfigEntry<float> levelJumpPower; protected internal static ConfigEntry<float> baseDamage; protected internal static ConfigEntry<float> levelDamage; protected internal static ConfigEntry<float> baseAttackSpeed; protected internal static ConfigEntry<float> levelAttackSpeed; protected internal static ConfigEntry<float> baseCrit; protected internal static ConfigEntry<float> levelCrit; protected internal static ConfigEntry<float> baseArmor; protected internal static ConfigEntry<float> levelArmor; protected internal static List<string> itemBlacklist = new List<string>(); protected internal static List<PickupIndex> tier1 = new List<PickupIndex>(); protected internal static List<PickupIndex> tier2 = new List<PickupIndex>(); protected internal static List<PickupIndex> tier3 = new List<PickupIndex>(); private void Awake() { //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Expected O, but got Unknown //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Expected O, but got Unknown //IL_0153: Expected O, but got Unknown //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Expected O, but got Unknown //IL_0187: Expected O, but got Unknown //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Expected O, but got Unknown //IL_01bb: Expected O, but got Unknown //IL_01d0: Unknown result type (might be due to invalid IL or missing references) //IL_01e5: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Expected O, but got Unknown //IL_01ef: Expected O, but got Unknown //IL_0204: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Unknown result type (might be due to invalid IL or missing references) //IL_0223: Expected O, but got Unknown //IL_0223: Expected O, but got Unknown //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Expected O, but got Unknown //IL_0257: Expected O, but got Unknown //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Expected O, but got Unknown //IL_028b: Expected O, but got Unknown //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Expected O, but got Unknown //IL_02bf: Expected O, but got Unknown //IL_02d4: Unknown result type (might be due to invalid IL or missing references) //IL_02e9: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Expected O, but got Unknown //IL_02f3: Expected O, but got Unknown //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Expected O, but got Unknown //IL_0327: Expected O, but got Unknown //IL_033c: Unknown result type (might be due to invalid IL or missing references) //IL_0351: Unknown result type (might be due to invalid IL or missing references) //IL_035b: Expected O, but got Unknown //IL_035b: Expected O, but got Unknown //IL_0370: Unknown result type (might be due to invalid IL or missing references) //IL_0385: Unknown result type (might be due to invalid IL or missing references) //IL_038f: Expected O, but got Unknown //IL_038f: Expected O, but got Unknown //IL_03a4: 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_03c3: Expected O, but got Unknown //IL_03c3: Expected O, but got Unknown //IL_03d8: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_03f7: Expected O, but got Unknown //IL_03f7: Expected O, but got Unknown //IL_040c: Unknown result type (might be due to invalid IL or missing references) //IL_0421: Unknown result type (might be due to invalid IL or missing references) //IL_042b: Expected O, but got Unknown //IL_042b: Expected O, but got Unknown //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_0455: Unknown result type (might be due to invalid IL or missing references) //IL_045f: Expected O, but got Unknown //IL_045f: Expected O, but got Unknown //IL_0474: Unknown result type (might be due to invalid IL or missing references) //IL_0489: Unknown result type (might be due to invalid IL or missing references) //IL_0493: Expected O, but got Unknown //IL_0493: Expected O, but got Unknown //IL_04a8: Unknown result type (might be due to invalid IL or missing references) //IL_04bd: Unknown result type (might be due to invalid IL or missing references) //IL_04c7: Expected O, but got Unknown //IL_04c7: Expected O, but got Unknown //IL_04dc: Unknown result type (might be due to invalid IL or missing references) //IL_04f1: Unknown result type (might be due to invalid IL or missing references) //IL_04fb: Expected O, but got Unknown //IL_04fb: Expected O, but got Unknown //IL_0510: Unknown result type (might be due to invalid IL or missing references) //IL_0525: Unknown result type (might be due to invalid IL or missing references) //IL_052f: Expected O, but got Unknown //IL_052f: Expected O, but got Unknown //IL_0544: Unknown result type (might be due to invalid IL or missing references) //IL_0559: Unknown result type (might be due to invalid IL or missing references) //IL_0563: Expected O, but got Unknown //IL_0563: Expected O, but got Unknown string path = Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Config.ConfigFilePath), "PlayableScavenger-ItemBlacklist.json"); string text = ""; bool flag = true; bool flag2 = true; if (File.Exists(path)) { text = File.ReadAllText(path); try { JSONNode.Parse(text); } catch { Debug.LogWarning((object)"[PlayableScavenger] blacklist config file malformed! using defaults"); flag = false; } } else { Debug.LogWarning((object)"[PlayableScavenger] blacklist config file not found! using defaults"); flag = false; flag2 = false; } if (!flag) { using (Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("PlayableScavenger.PlayableScavenger-ItemBlacklist.json")) { text = new StreamReader(stream).ReadToEnd(); } if (!flag2) { File.WriteAllText(path, text); } } JSONNode val = JSONNode.Parse(text); foreach (object item in val["itemCodeNames"].AsArray) { JSONNode val2 = (JSONNode)item; itemBlacklist.Add(JSONNode.op_Implicit(val2["codeName"])); } baseJumpCount = ((BaseUnityPlugin)this).Config.Bind<int>(new ConfigDefinition("Base Jump Count", "Value"), 1, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); mainRootSpeed = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Main Root Speed", "Value"), 33f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseMaxHealth = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Max Health", "Value"), 3800f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); levelMaxHealth = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Level Max Health", "Value"), 1140f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseRegen = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Regen", "Value"), 2f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); levelRegen = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Level Regen", "Value"), 0.4f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseMaxShield = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Max Shield", "Value"), 0f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); levelMaxShield = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Level Max Shield", "Value"), 0f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseMoveSpeed = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Move Speed", "Value"), 3f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); levelMoveSpeed = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Level Move Speed", "Value"), 0f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseAcceleration = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Acceleration", "Value"), 10f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseJumpPower = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Jump Power", "Value"), 20f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); levelJumpPower = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Level Jump Power", "Value"), 0f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseDamage = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Damage", "Value"), 4f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); levelDamage = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Level Damage", "Value"), 0.8f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseAttackSpeed = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Attack Speed", "Value"), 1f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); levelAttackSpeed = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Level Attack Speed", "Value"), 1f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseCrit = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Crit", "Value"), 0f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); levelCrit = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Level Crit", "Value"), 0f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); baseArmor = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Base Armor", "Value"), 20f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); levelArmor = ((BaseUnityPlugin)this).Config.Bind<float>(new ConfigDefinition("Level Armor", "Value"), 1f, new ConfigDescription("", (AcceptableValueBase)null, Array.Empty<object>())); CreatePrefab(); RegisterStates(); RegisterCharacter(); CreateDoppelganger(); Hook.Hooks(); } internal static void CreatePrefab() { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: 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_03ae: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: 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_04b8: Unknown result type (might be due to invalid IL or missing references) //IL_04c2: Expected O, but got Unknown //IL_04c3: Unknown result type (might be due to invalid IL or missing references) //IL_04c5: Unknown result type (might be due to invalid IL or missing references) characterPrefab = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/ScavBody"), "DragonScavengerBody", true); characterPrefab.GetComponent<NetworkIdentity>().localPlayerAuthority = true; characterPrefab.GetComponent<KinematicCharacterMotor>().playerCharacter = true; CharacterBody component = characterPrefab.GetComponent<CharacterBody>(); ((Object)component).name = "DragonScavengerBody"; component.bodyFlags = (BodyFlags)16; component.mainRootSpeed = mainRootSpeed.Value; component.baseMaxHealth = baseMaxHealth.Value; component.levelMaxHealth = levelMaxHealth.Value; component.baseRegen = baseRegen.Value; component.levelRegen = levelRegen.Value; component.baseMaxShield = baseMaxShield.Value; component.levelMaxShield = levelMaxShield.Value; component.baseMoveSpeed = baseMoveSpeed.Value; component.levelMoveSpeed = levelMoveSpeed.Value; component.baseAcceleration = baseAcceleration.Value; component.baseJumpPower = baseJumpPower.Value; component.levelJumpPower = levelJumpPower.Value; component.baseDamage = baseDamage.Value; component.levelDamage = levelDamage.Value; component.baseAttackSpeed = baseAttackSpeed.Value; component.levelAttackSpeed = levelAttackSpeed.Value; component.baseCrit = baseCrit.Value; component.levelCrit = levelCrit.Value; component.baseArmor = baseArmor.Value; component.levelArmor = levelArmor.Value; component.baseJumpCount = baseJumpCount.Value; component.hideCrosshair = false; component.portraitIcon = (Texture)(object)LegacyResourcesAPI.Load<Texture2D>("textures/bodyicons/scavbody"); component.preferredPodPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/networkedobjects/robocratepod"); characterColor = component.bodyColor; HealthComponent component2 = characterPrefab.GetComponent<HealthComponent>(); component2.health = baseMaxHealth.Value; component2.shield = baseMaxShield.Value; component2.barrier = 0f; component2.magnetiCharge = 0f; component2.body = null; component2.dontShowHealthbar = false; component2.globalDeathEventChanceCoefficient = 1f; characterPrefab.GetComponent<Interactor>().maxInteractionDistance = 14f; characterPrefab.GetComponent<InteractionDriver>().highlightInteractor = true; SfxLocator component3 = characterPrefab.GetComponent<SfxLocator>(); component3.deathSound = "Play_ui_player_death"; component3.barkSound = ""; component3.openSound = ""; component3.landingSound = "Play_gravekeeper_land"; component3.fallDamageSound = "Play_char_land_fall_damage"; component3.aliveLoopStart = ""; component3.aliveLoopStop = ""; LanguageAPI.Add("MONSTER_PICKUP_2P", "<style=cWorldEvent>You picked up {1}{2}</color>"); LanguageAPI.Add("DRAGONSCAVENGERPRIMARY_NAME", "Heavy Shotgun"); LanguageAPI.Add("DRAGONSCAVENGERPRIMARY_DESCRIPTION", "The Scavenger readies its weapon and shoots 3 shotgun blasts with 4 projectiles. Each projectile deals <style=cIsDamage>300% damage</style>."); LanguageAPI.Add("DRAGONSCAVENGERSECONDARY_NAME", "Thqwibs"); LanguageAPI.Add("DRAGONSCAVENGERSECONDARY_DESCRIPTION", "Throw 10 exploding Thqwibs, each deals <style=cIsDamage>400% damage</style>. Upon landing, they <style=cIsDamage>trigger On-Kill</style> effects."); LanguageAPI.Add("DRAGONSCAVENGERUTILITY_NAME", "Scavenge Item"); LanguageAPI.Add("DRAGONSCAVENGERUTILITY_DESCRIPTION", "Sit down and search for new items, temporarily gaining <style=cIsDamage>200 armor</style>. The rarity is equivalent to a <style=cIsDamage>Small Chest</style>. Quantity is based on rarity: 5 <color=#ffffff>common</color>, 2 <style=cIsHealing>uncommon</style>, 1 <style=cDeath>legendary</style>."); SkillLocator component4 = characterPrefab.GetComponent<SkillLocator>(); component4.primary.skillFamily.defaultSkillDef.skillNameToken = "DRAGONSCAVENGERPRIMARY_NAME"; component4.primary.skillFamily.defaultSkillDef.skillDescriptionToken = "DRAGONSCAVENGERPRIMARY_DESCRIPTION"; component4.secondary.skillFamily.defaultSkillDef.skillNameToken = "DRAGONSCAVENGERSECONDARY_NAME"; component4.secondary.skillFamily.defaultSkillDef.skillDescriptionToken = "DRAGONSCAVENGERSECONDARY_DESCRIPTION"; SkillDef val = ScriptableObject.CreateInstance<SkillDef>(); val.activationState = new SerializableEntityStateType(typeof(UtilitySit)); val.interruptPriority = (InterruptPriority)1; val.activationStateMachineName = "Body"; val.baseMaxStock = 1; val.baseRechargeInterval = 19f; val.beginSkillCooldownOnSkillEnd = false; val.canceledFromSprinting = false; val.fullRestockOnAssign = true; val.isCombatSkill = true; val.mustKeyPress = false; val.cancelSprintingOnActivation = true; val.rechargeStock = 1; val.requiredStock = 1; val.stockToConsume = 1; val.icon = LegacyResourcesAPI.Load<Sprite>("textures/miscicons/texinventoryiconoutlined"); val.skillDescriptionToken = "DRAGONSCAVENGERUTILITY_DESCRIPTION"; val.skillName = "DRAGONSCAVENGERUTILITY_NAME"; val.skillNameToken = "DRAGONSCAVENGERUTILITY_NAME"; ContentAddition.AddSkillDef(val); SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>(); val2.variants = (Variant[])(object)new Variant[1]; Reflection.SetFieldValue<SkillFamily>((object)component4.utility, "_skillFamily", val2); SkillFamily skillFamily = component4.utility.skillFamily; Variant[] variants = skillFamily.variants; Variant val3 = new Variant { skillDef = val }; ((Variant)(ref val3)).viewableNode = new Node(val.skillNameToken, false, (Node)null); variants[0] = val3; ContentAddition.AddSkillFamily(skillFamily); ContentAddition.AddBody(characterPrefab); } private void RegisterStates() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) bool flag = false; ContentAddition.AddEntityState<UtilitySit>(ref flag); ContentAddition.AddEntityState<Utility>(ref flag); } private void RegisterCharacter() { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) characterDisplay = PrefabAPI.InstantiateClone(((Component)characterPrefab.GetComponent<ModelLocator>().modelBaseTransform).gameObject, "DragonScavengerDisplay", true); characterDisplay.transform.localScale = Vector3.one * 0.25f; characterDisplay.AddComponent<NetworkIdentity>(); RendererInfo[] baseRendererInfos = characterDisplay.GetComponentInChildren<CharacterModel>().baseRendererInfos; for (int i = 0; i < baseRendererInfos.Length; i++) { Material val = Object.Instantiate<Material>(baseRendererInfos[i].defaultMaterial); val.shaderKeywords = null; baseRendererInfos[i].defaultMaterial = val; } string text = "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > "; string text2 = "..and so he left, seeking more loot."; string text3 = "..and so he vanished, his valuable items forever lost."; LanguageAPI.Add("DRAGONSCAVENGER_NAME", "Scavenger"); LanguageAPI.Add("DRAGONSCAVENGER_DESCRIPTION", text); LanguageAPI.Add("DRAGONSCAVENGER_SUBTITLE", "Item Hoarder"); LanguageAPI.Add("DRAGONSCAVENGER_OUTRO", text2); LanguageAPI.Add("DRAGONSCAVENGER_FAIL", text3); LanguageAPI.Add("DRAGONSCAVENGER_LORE", Language.GetString("SCAV_BODY_LORE")); SurvivorDef val2 = ScriptableObject.CreateInstance<SurvivorDef>(); val2.cachedName = "DRAGONSCAVENGER_NAME"; val2.unlockableDef = null; val2.descriptionToken = "DRAGONSCAVENGER_DESCRIPTION"; val2.primaryColor = characterColor; val2.bodyPrefab = characterPrefab; val2.displayPrefab = characterDisplay; val2.outroFlavorToken = "DRAGONSCAVENGER_OUTRO"; val2.desiredSortPosition = 32f; val2.mainEndingEscapeFailureFlavorToken = "DRAGONSCAVENGER_FAIL"; ContentAddition.AddSurvivorDef(val2); } private void CreateDoppelganger() { doppelganger = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterMasters/ScavMaster"), "DragonScavengerMaster", true); ContentAddition.AddMaster(doppelganger); CharacterMaster component = doppelganger.GetComponent<CharacterMaster>(); component.bodyPrefab = characterPrefab; } } internal class UtilitySit : EnterSit { public override void FixedUpdate() { if (((EntityState)this).fixedAge >= 1.9f * ((BaseState)this).attackSpeedStat) { ((EntityState)this).outer.SetNextState((EntityState)(object)new Utility()); } ((EnterSit)this).FixedUpdate(); } } internal class Utility : FindItem { public override void OnEnter() { //IL_0046: 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_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Expected I4, but got Unknown ((FindItem)this).OnEnter(); if (!((EntityState)this).isAuthority) { return; } int num = Random.Range(0, 100); if ((float)num <= FindItem.tier1Chance) { base.dropPickup = MainPlugin.tier1.ElementAt(Random.Range(0, MainPlugin.tier1.Count)); } else if ((float)num <= FindItem.tier2Chance) { base.dropPickup = MainPlugin.tier2.ElementAt(Random.Range(0, MainPlugin.tier2.Count)); } else if ((float)num <= FindItem.tier3Chance) { base.dropPickup = MainPlugin.tier3.ElementAt(Random.Range(0, MainPlugin.tier3.Count)); } PickupDef pickupDef = PickupCatalog.GetPickupDef(base.dropPickup); if (pickupDef != null) { ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex); if ((Object)(object)itemDef != (Object)null) { base.itemsToGrant = 0; ItemTier tier = itemDef.tier; ItemTier val = tier; switch ((int)val) { case 0: base.itemsToGrant = FindItem.tier1Count; break; case 1: base.itemsToGrant = FindItem.tier2Count; break; case 2: base.itemsToGrant = FindItem.tier3Count; break; default: base.itemsToGrant = 1; break; } } } if (Object.op_Implicit((Object)(object)base.pickupDisplay)) { base.pickupDisplay.SetPickupIndex(base.dropPickup, false); } } }