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 PlayableScavenger v1.2.0
PlayableScavenger.dll
Decompiled 9 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); } } }