Decompiled source of Driver v2.1.6
DriverMod.dll
Decompiled 18 hours 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.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using AncientScepter; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using ClassicItemsReturns.Items; using ClassicItemsReturns.Items.Uncommon; using EntityStates; using EntityStates.AI; using EntityStates.BrotherMonster.Weapon; using EntityStates.Captain.Weapon; using EntityStates.Commando; using EntityStates.Commando.CommandoWeapon; using EntityStates.GlobalSkills.LunarDetonator; using EntityStates.GlobalSkills.LunarNeedle; using EntityStates.GolemMonster; using EntityStates.Huntress; using EntityStates.LemurianBruiserMonster; using EntityStates.Mage.Weapon; using Grumpy; using HG; using HG.BlendableTypes; using HG.Reflection; using HarmonyLib; using HunkHud.Components.UI; using HunkMod.Modules; using HunkMod.Modules.Components; using IL.RoR2.UI; using KinematicCharacterController; using LostInTransit; using MaterialHud; using Microsoft.CodeAnalysis; using Mono.Cecil.Cil; using MonoMod.Cil; using On.EntityStates.AI; using On.EntityStates.GlobalSkills.LunarDetonator; using On.EntityStates.GlobalSkills.LunarNeedle; using On.RoR2; using On.RoR2.Skills; using On.RoR2.UI; 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.Audio; using RoR2.CharacterAI; using RoR2.ContentManagement; using RoR2.HudOverlay; using RoR2.Navigation; using RoR2.Orbs; using RoR2.Projectile; using RoR2.Skills; using RoR2.Stats; using RoR2.UI; using RobDriver.Modules; using RobDriver.Modules.Achievements; using RobDriver.Modules.Components; using RobDriver.Modules.Components.UI; using RobDriver.Modules.Misc; using RobDriver.Modules.Survivors; using RobDriver.Modules.Weapons; using RobDriver.SkillStates; using RobDriver.SkillStates.BaseStates; using RobDriver.SkillStates.Driver; using RobDriver.SkillStates.Driver.ArmBFG; using RobDriver.SkillStates.Driver.ArmCannon; using RobDriver.SkillStates.Driver.ArtiGauntlet; using RobDriver.SkillStates.Driver.BadassShotgun; using RobDriver.SkillStates.Driver.Bazooka; using RobDriver.SkillStates.Driver.BeetleShield; using RobDriver.SkillStates.Driver.CaptainGun; using RobDriver.SkillStates.Driver.FalsePistol; using RobDriver.SkillStates.Driver.GoldenGun; using RobDriver.SkillStates.Driver.GolemGun; using RobDriver.SkillStates.Driver.GrenadeLauncher; using RobDriver.SkillStates.Driver.HeavyMachineGun; using RobDriver.SkillStates.Driver.LunarGrenade; using RobDriver.SkillStates.Driver.LunarHammer; using RobDriver.SkillStates.Driver.LunarPistol; using RobDriver.SkillStates.Driver.LunarRifle; using RobDriver.SkillStates.Driver.MachineGun; using RobDriver.SkillStates.Driver.NemmandoGun; using RobDriver.SkillStates.Driver.NemmandoSword; using RobDriver.SkillStates.Driver.NemmercGun; using RobDriver.SkillStates.Driver.PlasmaCannon; using RobDriver.SkillStates.Driver.PyriteGun; using RobDriver.SkillStates.Driver.RavSword; using RobDriver.SkillStates.Driver.Revolver; using RobDriver.SkillStates.Driver.RiotShotgun; using RobDriver.SkillStates.Driver.RocketLauncher; using RobDriver.SkillStates.Driver.SMG; using RobDriver.SkillStates.Driver.Scepter; using RobDriver.SkillStates.Driver.Scepter.SupplyDrop; using RobDriver.SkillStates.Driver.Shotgun; using RobDriver.SkillStates.Driver.Skateboard; using RobDriver.SkillStates.Driver.SlugShotgun; using RobDriver.SkillStates.Driver.SniperRifle; using RobDriver.SkillStates.Driver.SupplyDrop; using RobDriver.SkillStates.Driver.SupplyDrop.Nerfed; using RobDriver.SkillStates.Driver.VoidPistol; using RobDriver.SkillStates.Driver.VoidRifle; using RobDriver.SkillStates.Emote; using SS2; using TMPro; using Unity.Collections; using Unity.Jobs; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.UI; [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: OptIn] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyInformationalVersion("1.0.0+41902de0134e01ecfe9bd6c294b1213d0e41bbf2")] [assembly: AssemblyProduct("DriverMod")] [assembly: AssemblyTitle("DriverMod")] [assembly: AssemblyCompany("DriverMod")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] [module: UnverifiableCode] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } internal static class Log { internal static ManualLogSource _logSource; internal static void Init(ManualLogSource logSource) { _logSource = logSource; } internal static void Debug(object data) { _logSource.LogDebug(data); } internal static void Error(object data) { _logSource.LogError(data); } internal static void Fatal(object data) { _logSource.LogFatal(data); } internal static void Info(object data) { _logSource.LogInfo(data); } internal static void Message(object data) { _logSource.LogMessage(data); } internal static void Warning(object data) { _logSource.LogWarning(data); } } internal enum DriverCameraParams { DEFAULT, AIM_PISTOL, AIM_SNIPER, EMOTE } public class StupidFuckingBullshit : MonoBehaviour { public ParticleSystem faggot; private void Awake() { faggot = ((Component)this).GetComponentInChildren<ParticleSystem>(); ((Component)faggot).transform.SetParent((Transform)null); } private void FixedUpdate() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) ((Component)faggot).transform.SetPositionAndRotation(((Component)this).transform.position, ((Component)this).transform.rotation); } } [CreateAssetMenu(fileName = "blt", menuName = "ScriptableObjects/BulletDef", order = 2)] public class DriverBulletDef : ScriptableObject { [Header("General")] public string bulletName = ""; public string bulletNameToken = ""; public string description = ""; public string descriptionToken = ""; [Header("Visuals")] public DriverWeaponTier tier = DriverWeaponTier.Common; public Color trailColor = Color.black; public DamageTypeCombo damageType = DamageTypeCombo.GenericPrimary; [HideInInspector] public ushort index; [HideInInspector] public bool enabled; public static DriverBulletDef CreateBulletDefFromInfo(DriverBulletDefInfo bulletDefInfo) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) DriverBulletDef driverBulletDef = ScriptableObject.CreateInstance<DriverBulletDef>(); ((Object)driverBulletDef).name = bulletDefInfo.bulletName; driverBulletDef.bulletName = bulletDefInfo.bulletName; driverBulletDef.bulletNameToken = bulletDefInfo.bulletNameToken; driverBulletDef.description = bulletDefInfo.description; driverBulletDef.descriptionToken = bulletDefInfo.descriptionToken; driverBulletDef.tier = bulletDefInfo.tier; driverBulletDef.trailColor = bulletDefInfo.trailColor; driverBulletDef.damageType.damageType = bulletDefInfo.damageType.GetValueOrDefault(); driverBulletDef.damageType.damageTypeExtended = bulletDefInfo.damageTypeExtended.GetValueOrDefault(); return driverBulletDef; } } [Serializable] public struct DriverBulletDefInfo { public string bulletName; public string bulletNameToken; public string description; public string descriptionToken; public DriverWeaponTier tier; public Color trailColor; public DamageType? damageType; public DamageTypeExtended? damageTypeExtended; public ModdedDamageType? moddedDamageType; } [CreateAssetMenu(fileName = "wpn", menuName = "ScriptableObjects/WeaponDef", order = 1)] public class DriverWeaponDef : ScriptableObject { public enum AnimationSet { Default, TwoHanded, BigMelee } public enum BuffType { Crit, Damage, AttackSpeed } [Serializable] public struct ModelSwapInfo { public Mesh mesh; public Material material; public string childName; } [Header("General")] public string weaponName = ""; public string nameToken = ""; public string description = ""; public string descriptionToken = ""; public Sprite icon; public DriverWeaponTier tier = DriverWeaponTier.Common; public AnimationSet animationSet; public BuffType buffType = BuffType.Damage; public int shotCount = 8; [Header("Skills")] public SkillDef primarySkillDef; public SkillDef secondarySkillDef; public SkillDef arsenalSkillDef; public UnlockableDef unlockableDef; [Header("Visuals")] public ModelSwapInfo[] modelSwapInfo = new ModelSwapInfo[1] { new ModelSwapInfo { childName = "PistolModel" } }; public GameObject crosshairPrefab; public GameObject pickupPrefabOverride; public Color? colorOverride; public bool disableHolster; [Header("Other")] public string equipAnimationString = "BufferEmpty"; public string reloadAnimationString = "ReloadPistol"; public string calloutSoundString = "sfx_driver_callout_generic"; public string dropBodyName = ""; public float dropChance; [HideInInspector] public ushort index; [HideInInspector] public bool enabled; public Mesh mesh { get { return modelSwapInfo[0].mesh; } set { modelSwapInfo[0].mesh = value; } } public Material material { get { return modelSwapInfo[0].material; } set { modelSwapInfo[0].material = value; } } public Color color => (Color)(((??)colorOverride) ?? Helpers.GetColorForTier(tier)); public GameObject pickupPrefab => pickupPrefabOverride ?? Helpers.GetPickupPrefabForTier(tier); public static DriverWeaponDef CreateWeaponDefFromInfo(DriverWeaponDefInfo weaponDefInfo) { DriverWeaponDef driverWeaponDef = ScriptableObject.CreateInstance<DriverWeaponDef>(); ((Object)driverWeaponDef).name = weaponDefInfo.name; driverWeaponDef.weaponName = weaponDefInfo.name; driverWeaponDef.nameToken = weaponDefInfo.nameToken; driverWeaponDef.description = weaponDefInfo.description; driverWeaponDef.descriptionToken = weaponDefInfo.descriptionToken; driverWeaponDef.icon = weaponDefInfo.icon; driverWeaponDef.tier = weaponDefInfo.tier; driverWeaponDef.animationSet = weaponDefInfo.animationSet; driverWeaponDef.buffType = weaponDefInfo.buffType; driverWeaponDef.shotCount = weaponDefInfo.shotCount; driverWeaponDef.primarySkillDef = weaponDefInfo.primarySkillDef; driverWeaponDef.secondarySkillDef = weaponDefInfo.secondarySkillDef; driverWeaponDef.arsenalSkillDef = weaponDefInfo.arsenalSkillDef; driverWeaponDef.unlockableDef = weaponDefInfo.unlockableDef; driverWeaponDef.mesh = weaponDefInfo.mesh; driverWeaponDef.material = weaponDefInfo.material; driverWeaponDef.crosshairPrefab = weaponDefInfo.crosshairPrefab; driverWeaponDef.pickupPrefabOverride = weaponDefInfo.pickupPrefabOverride; driverWeaponDef.colorOverride = weaponDefInfo.colorOveride; driverWeaponDef.disableHolster = weaponDefInfo.disableHolster; driverWeaponDef.equipAnimationString = weaponDefInfo.equipAnimationString; driverWeaponDef.reloadAnimationString = weaponDefInfo.reloadAnimationString; driverWeaponDef.calloutSoundString = weaponDefInfo.calloutSoundString; driverWeaponDef.dropBodyName = weaponDefInfo.dropBodyName; driverWeaponDef.dropChance = weaponDefInfo.dropChance; return driverWeaponDef; } } [Serializable] public struct DriverWeaponDefInfo { public string name; public string nameToken; public string description; public string descriptionToken; public Sprite icon; public DriverWeaponTier tier; public DriverWeaponDef.AnimationSet animationSet; public DriverWeaponDef.BuffType buffType; public int shotCount; public SkillDef primarySkillDef; public SkillDef secondarySkillDef; public SkillDef arsenalSkillDef; public UnlockableDef unlockableDef; public Mesh mesh; public Material material; public GameObject crosshairPrefab; public GameObject pickupPrefabOverride; public Color? colorOveride; public bool disableHolster; public string equipAnimationString; public string reloadAnimationString; public string calloutSoundString; public string dropBodyName; public float dropChance; } public enum DriverWeaponTier { NoTier, Common, Uncommon, Legendary, Unique, Void, Lunar } [CreateAssetMenu(fileName = "rsd", menuName = "ScriptableObjects/DriverWeaponSkinDef", order = 3)] public class DriverWeaponSkinDef : ScriptableObject { [Serializable] public struct DriverWeaponSkinDefInfo { public string nameToken; public string mainSkinName; public ushort weaponDefIndex; public DriverWeaponDef.ModelSwapInfo[] modelSwapInfo; } [Header("General")] public string nameToken = ""; public string mainSkinName = ""; public ushort weaponDefIndex; public DriverWeaponDef.ModelSwapInfo[] modelSwapInfo; public Mesh mesh { get { return modelSwapInfo[0].mesh; } set { modelSwapInfo[0].mesh = value; } } public Material material { get { return modelSwapInfo[0].material; } set { modelSwapInfo[0].material = value; } } public static DriverWeaponSkinDef CreateWeaponSkinDefFromInfo(DriverWeaponSkinDefInfo skinDefInfo) { DriverWeaponSkinDef driverWeaponSkinDef = ScriptableObject.CreateInstance<DriverWeaponSkinDef>(); driverWeaponSkinDef.nameToken = skinDefInfo.nameToken; driverWeaponSkinDef.mainSkinName = skinDefInfo.mainSkinName; driverWeaponSkinDef.weaponDefIndex = skinDefInfo.weaponDefIndex; driverWeaponSkinDef.modelSwapInfo = skinDefInfo.modelSwapInfo; return driverWeaponSkinDef; } } internal class BodyInfo { internal string bodyName = ""; internal string bodyNameToken = ""; internal string subtitleNameToken = ""; internal Color bodyColor = Color.white; internal Texture characterPortrait; internal GameObject crosshair; internal GameObject podPrefab; internal float maxHealth = 100f; internal float healthGrowth = 2f; internal float healthRegen; internal float shield; internal float shieldGrowth; internal float moveSpeed = 7f; internal float moveSpeedGrowth; internal float acceleration = 80f; internal float jumpPower = 15f; internal float jumpPowerGrowth; internal float damage = 12f; internal float attackSpeed = 1f; internal float attackSpeedGrowth; internal float armor; internal float armorGrowth; internal float crit = 1f; internal float critGrowth; internal int jumpCount = 1; } 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 string[] keywordTokens = Array.Empty<string>(); public Sprite skillIcon; public SerializableEntityStateType activationState; public InterruptPriority interruptPriority; public string activationStateMachineName; public float baseRechargeInterval; public int baseMaxStock = 1; public int rechargeStock = 1; public int requiredStock = 1; public int stockToConsume = 1; public bool isCombatSkill = true; public bool canceledFromSprinting; public bool forceSprintDuringState; public bool cancelSprintingOnActivation = true; public bool beginSkillCooldownOnSkillEnd; public bool fullRestockOnAssign = true; public bool resetCooldownTimerOnUse; public bool mustKeyPress; public bool autoHandleLuminousShot = true; public SkillDefInfo() { } public SkillDefInfo(string skillName, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, SerializableEntityStateType activationState, string activationStateMachineName, InterruptPriority interruptPriority, bool isCombatSkill, float baseRechargeInterval) { //IL_0067: 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_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) this.skillName = skillName; this.skillNameToken = skillNameToken; this.skillDescriptionToken = skillDescriptionToken; this.skillIcon = skillIcon; this.activationState = activationState; this.activationStateMachineName = activationStateMachineName; this.interruptPriority = interruptPriority; this.isCombatSkill = isCombatSkill; this.baseRechargeInterval = baseRechargeInterval; } public SkillDefInfo(string skillName, string skillNameToken, string skillDescriptionToken, Sprite skillIcon, SerializableEntityStateType activationState, string activationStateMachineName = "Weapon", bool agile = false) { //IL_0067: 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_0078: Unknown result type (might be due to invalid IL or missing references) this.skillName = skillName; this.skillNameToken = skillNameToken; this.skillDescriptionToken = skillDescriptionToken; this.skillIcon = skillIcon; this.activationState = activationState; this.activationStateMachineName = activationStateMachineName; interruptPriority = (InterruptPriority)0; isCombatSkill = true; baseRechargeInterval = 0f; requiredStock = 0; stockToConsume = 0; cancelSprintingOnActivation = !agile; if (agile) { keywordTokens = new string[1] { "KEYWORD_AGILE" }; } } } namespace RobDriver { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.rob.Driver", "Driver", "2.1.6")] [NetworkCompatibility(/*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.*/)] [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.*/)] public class DriverPlugin : BaseUnityPlugin { public const string MODUID = "com.rob.Driver"; public const string MODNAME = "Driver"; public const string MODVERSION = "2.1.6"; public const string developerPrefix = "ROB"; public static DriverPlugin instance; public static bool StarstormInstalled => Chainloader.PluginInfos.ContainsKey("com.TeamMoonstorm"); public static bool ScepterInstalled => Chainloader.PluginInfos.ContainsKey("com.DestroyedClone.AncientScepter"); public static bool RooInstalled => Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"); public static bool LitInstalled => Chainloader.PluginInfos.ContainsKey("com.ContactLight.LostInTransit"); public static bool ClassicItemsInstalled => Chainloader.PluginInfos.ContainsKey("com.RiskySleeps.ClassicItemsReturns"); public static bool RiskUIInstalled => Chainloader.PluginInfos.ContainsKey("bubbet.riskui"); public static bool ExtendedLoadoutInstalled => Chainloader.PluginInfos.ContainsKey("com.KingEnderBrine.ExtendedLoadout"); public static bool GreenAlienHeadInstalled => Chainloader.PluginInfos.ContainsKey("com.Borbo.GreenAlienHead"); public static bool RavagerInstalled => Chainloader.PluginInfos.ContainsKey("com.rob.Ravager"); public static bool HunkInstalled => Chainloader.PluginInfos.ContainsKey("com.rob.Hunk"); public static bool HunkHudInstalled => Chainloader.PluginInfos.ContainsKey("com.public_ParticleSystem.HunkHud"); private void Awake() { instance = this; Log.Init(((BaseUnityPlugin)this).Logger); Config.ReadConfig(((BaseUnityPlugin)this).Config); Assets.PopulateAssets(); CameraParams.InitializeParams(); States.RegisterStates(); Projectiles.RegisterProjectiles(); Tokens.AddTokens(); ItemDisplays.PopulateDisplays(); NetMessages.RegisterNetworkMessages(); Unlockables.Init(); new Driver().CreateCharacter(); new ContentPacks().Initialize(); } public static float GetICBMDamageMult(CharacterBody body) { float num = 1f; if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory)) { int num2 = body.inventory.GetItemCount(Items.MoreMissile) - 1; if (num2 > 0) { num += (float)num2 * 0.5f; } } return num; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool CheckIfBodyIsTerminal(CharacterBody body) { return body.HasBuff(Buffs.BuffTerminationVFX); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool IsHunkHudGlobal() { return Config.globalCustomHUD.Value; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static void AddHunkFlashbang(GameObject prefab) { prefab.AddComponent<FlashbangNearby>(); } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static GameObject GetHunkExplosion() { return HunkAssets.explosionEffect; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static GameObject GetHunkExplosionSmall() { return HunkAssets.smallExplosionEffect; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool IsItemGoldenGun(ItemIndex itemIndex) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) ItemDef goldenGun = Items.GoldenGun; if (!Object.op_Implicit((Object)(object)goldenGun)) { return false; } return goldenGun.itemIndex == itemIndex; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool IsItemGoldenGun2(ItemIndex itemIndex) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) GoldenGun val = ItemBase<GoldenGun>.Instance; if (!Object.op_Implicit((Object)(object)((ItemBase)(val?)).ItemDef)) { return false; } return ((ItemBase)val).ItemDef.itemIndex == itemIndex; } [MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)] public static bool IsItemScepter(ItemIndex itemIndex) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) AncientScepterItem val = ItemBase<AncientScepterItem>.instance; if (!Object.op_Implicit((Object)(object)((val != null) ? ((ItemBase)val).ItemDef : null))) { return false; } return ((ItemBase)val).ItemDef.itemIndex == itemIndex; } } public static class DriverBulletCatalog { public static DriverBulletDef[] bulletDefs = Array.Empty<DriverBulletDef>(); public static DriverBulletDef Default; internal static DriverBulletDef Stunning; internal static DriverBulletDef Incendiary; internal static DriverBulletDef Serrated; internal static DriverBulletDef Poison; internal static DriverBulletDef Weakening; internal static DriverBulletDef Executing; internal static DriverBulletDef Blighting; internal static DriverBulletDef Resetting; internal static DriverBulletDef Crippling; internal static DriverBulletDef Fruitful; internal static DriverBulletDef Frostbite; internal static DriverBulletDef Nullifying; internal static DriverBulletDef Coin; internal static DriverBulletDef Explosive; internal static DriverBulletDef Missile; internal static DriverBulletDef Flaming; internal static DriverBulletDef Icy; internal static DriverBulletDef Sticky; internal static DriverBulletDef Mystery; internal static DriverBulletDef Hemorrhaging; internal static DriverBulletDef Helfire; internal static DriverBulletDef Infernal; internal static DriverBulletDef Dagger; internal static DriverBulletDef Lightning; internal static DriverBulletDef Fireball; internal static DriverBulletDef Hook; internal static DriverBulletDef Ruinous; internal static DriverBulletDef GiantSlayer; internal static DriverBulletDef Disabling; internal static DriverBulletDef Amputating; internal static DriverBulletDef Gouging; internal static DriverBulletDef VoidMissile; internal static DriverBulletDef VoidLightning; internal static DriverBulletDef Collapse; internal static void InitBulletDefs() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00fa: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: 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_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: 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_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_01f4: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) //IL_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_0237: Unknown result type (might be due to invalid IL or missing references) //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0251: Unknown result type (might be due to invalid IL or missing references) //IL_0274: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_027e: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c2: Unknown result type (might be due to invalid IL or missing references) //IL_02c7: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_02ef: Unknown result type (might be due to invalid IL or missing references) //IL_02f4: Unknown result type (might be due to invalid IL or missing references) //IL_030b: Unknown result type (might be due to invalid IL or missing references) //IL_0325: 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_033f: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_036a: Unknown result type (might be due to invalid IL or missing references) //IL_036f: Unknown result type (might be due to invalid IL or missing references) //IL_0374: Unknown result type (might be due to invalid IL or missing references) //IL_039a: Unknown result type (might be due to invalid IL or missing references) //IL_039f: 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_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_03d3: Unknown result type (might be due to invalid IL or missing references) //IL_03d8: Unknown result type (might be due to invalid IL or missing references) //IL_03fb: Unknown result type (might be due to invalid IL or missing references) //IL_0400: Unknown result type (might be due to invalid IL or missing references) //IL_0405: Unknown result type (might be due to invalid IL or missing references) //IL_041a: Unknown result type (might be due to invalid IL or missing references) //IL_0435: Unknown result type (might be due to invalid IL or missing references) //IL_043a: Unknown result type (might be due to invalid IL or missing references) //IL_0450: 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_0478: Unknown result type (might be due to invalid IL or missing references) //IL_047d: Unknown result type (might be due to invalid IL or missing references) //IL_0482: Unknown result type (might be due to invalid IL or missing references) //IL_0498: Unknown result type (might be due to invalid IL or missing references) //IL_04b3: Unknown result type (might be due to invalid IL or missing references) Default = CreateBulletType("Default", DriverWeaponTier.NoTier, Color.white, (DamageType)0); Stunning = CreateBulletType("Stunning", DriverWeaponTier.Common, Color.gray, (DamageType)32); Incendiary = CreateBulletType("Incendiary", DriverWeaponTier.Common, Color32.op_Implicit(new Color32(byte.MaxValue, (byte)127, (byte)80, byte.MaxValue)), (DamageType)128); Serrated = CreateBulletType("Serrated", DriverWeaponTier.Common, DamageColor.FindColor((DamageColorIndex)2), (DamageType)1024); Poison = CreateBulletType("Poison", DriverWeaponTier.Common, Color.green, (DamageType)4096); Weakening = CreateBulletType("Weakening", DriverWeaponTier.Common, Color32.op_Implicit(new Color32((byte)220, (byte)237, (byte)159, byte.MaxValue)), (DamageType)16384); Executing = CreateBulletType("Executing", DriverWeaponTier.Uncommon, DamageColor.FindColor((DamageColorIndex)11), (DamageType)524288); Blighting = CreateBulletType("Blighting", DriverWeaponTier.Common, Color32.op_Implicit(new Color32((byte)222, (byte)85, (byte)230, byte.MaxValue)), (DamageType)1048576); Coin = CreateBulletType("Coin", DriverWeaponTier.Common, Color32.op_Implicit(new Color32(byte.MaxValue, (byte)212, (byte)94, byte.MaxValue)), DriverDamageTypes.CoinShot); Mystery = CreateBulletType("Mystery", DriverWeaponTier.Common, Color32.op_Implicit(new Color32((byte)30, (byte)51, (byte)45, byte.MaxValue)), DriverDamageTypes.MysteryShot); Fruitful = CreateBulletType("Fruity", DriverWeaponTier.Common, Color32.op_Implicit(new Color32(byte.MaxValue, (byte)191, (byte)225, byte.MaxValue)), (DamageType)536870912); Crippling = CreateBulletType("Crippling", DriverWeaponTier.Common, Color32.op_Implicit(new Color32((byte)48, (byte)205, (byte)217, byte.MaxValue)), (DamageType)4194304); Nullifying = CreateBulletType("Nullifying", DriverWeaponTier.Common, DamageColor.FindColor((DamageColorIndex)9), (DamageType)32768); Collapse = CreateBulletType("Collapse", DriverWeaponTier.Uncommon, DamageColor.FindColor((DamageColorIndex)9), DriverDamageTypes.Collapse); Resetting = CreateBulletType("Resetting", DriverWeaponTier.Uncommon, Color.red, (DamageType)4); VoidMissile = CreateBulletType("Void Missile", DriverWeaponTier.Uncommon, Color32.op_Implicit(new Color32((byte)122, (byte)69, (byte)173, byte.MaxValue)), DriverDamageTypes.VoidMissileShot); Explosive = CreateBulletType("Explosive", DriverWeaponTier.Uncommon, Color.yellow, DriverDamageTypes.ExplosiveRounds); Sticky = CreateBulletType("Sticky", DriverWeaponTier.Uncommon, Color32.op_Implicit(new Color32(byte.MaxValue, (byte)117, (byte)48, byte.MaxValue)), DriverDamageTypes.StickyShot); Disabling = CreateBulletType("Disabling", DriverWeaponTier.Uncommon, DamageColor.FindColor((DamageColorIndex)15), (DamageTypeExtended)1073741824); Flaming = CreateBulletType("Elemental Flame", DriverWeaponTier.Uncommon, Color32.op_Implicit(new Color32(byte.MaxValue, (byte)127, (byte)80, byte.MaxValue)), DriverDamageTypes.FlameTornadoShot); Infernal = CreateBulletType("Infernal", DriverWeaponTier.Uncommon, Color32.op_Implicit(new Color32(byte.MaxValue, (byte)127, (byte)80, byte.MaxValue)), DriverDamageTypes.BetterBurn); Ruinous = CreateBulletType("Ruinous", DriverWeaponTier.Uncommon, DamageColor.FindColor((DamageColorIndex)13), (DamageType)1073741824); Icy = CreateBulletType("Elemental Ice", DriverWeaponTier.Uncommon, Color.cyan, DriverDamageTypes.IceBlastShot); Hook = CreateBulletType("Hook", DriverWeaponTier.Uncommon, Color.grey, DriverDamageTypes.HookShot); VoidLightning = CreateBulletType("Void Lightning", DriverWeaponTier.Legendary, Color32.op_Implicit(new Color32((byte)194, (byte)115, byte.MaxValue, byte.MaxValue)), DriverDamageTypes.VoidLightning); Missile = CreateBulletType("Missile", DriverWeaponTier.Legendary, Color32.op_Implicit(new Color32((byte)219, (byte)132, (byte)11, byte.MaxValue)), DriverDamageTypes.MissileShot); Dagger = CreateBulletType("Dagger", DriverWeaponTier.Legendary, Color.black, DriverDamageTypes.DaggerShot); Lightning = CreateBulletType("Lightning", DriverWeaponTier.Legendary, Color.cyan, DriverDamageTypes.LightningStrikeRounds); Fireball = CreateBulletType("Fireball", DriverWeaponTier.Legendary, Color32.op_Implicit(new Color32(byte.MaxValue, (byte)127, (byte)80, byte.MaxValue)), DriverDamageTypes.FireballRounds); Frostbite = CreateBulletType("Frostbite", DriverWeaponTier.Legendary, Color.cyan, (DamageType)256); Gouging = CreateBulletType("Gouging", DriverWeaponTier.Unique, DamageColor.FindColor((DamageColorIndex)8), DriverDamageTypes.Gouge); Hemorrhaging = CreateBulletType("Hemorrhaging", DriverWeaponTier.Unique, DamageColor.FindColor((DamageColorIndex)8), DriverDamageTypes.Hemorrhage); Helfire = CreateBulletType("Helfire", DriverWeaponTier.Unique, Color32.op_Implicit(new Color32(byte.MaxValue, (byte)127, (byte)127, byte.MaxValue)), DriverDamageTypes.Helfire); GiantSlayer = CreateBulletType("Giant Slayer", DriverWeaponTier.Unique, DamageColor.FindColor((DamageColorIndex)7), (DamageTypeExtended)268435456); Amputating = CreateBulletType("Amputating", DriverWeaponTier.Unique, DamageColor.FindColor((DamageColorIndex)7), (DamageTypeExtended)33554432); } public static DriverBulletDef CreateBulletType(string bulletName, DriverWeaponTier tier, Color color, DamageType damageType) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) return CreateBulletType(bulletName, tier, color, damageType, null, null); } public static DriverBulletDef CreateBulletType(string bulletName, DriverWeaponTier tier, Color color, DamageTypeExtended damageType) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) return CreateBulletType(bulletName, tier, color, null, damageType, null); } public static DriverBulletDef CreateBulletType(string bulletName, DriverWeaponTier tier, Color color, ModdedDamageType damageType) { //IL_0002: 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) return CreateBulletType(bulletName, tier, color, null, null, damageType); } public static DriverBulletDef CreateBulletType(string bulletName, DriverWeaponTier tier, Color color, DamageType? damageType, DamageTypeExtended? damageTypeExtended, ModdedDamageType? moddedDamageType) { //IL_0074: 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) DriverBulletDefInfo bulletDefInfo = default(DriverBulletDefInfo); bulletDefInfo.bulletName = bulletName; bulletDefInfo.bulletNameToken = "ROB_DRIVER_BULLET_" + bulletName.ToUpper() + "_NAME"; bulletDefInfo.description = bulletName; bulletDefInfo.descriptionToken = "ROB_DRIVER_BULLET_" + bulletName.ToUpper() + "_DESC"; bulletDefInfo.damageType = damageType; bulletDefInfo.damageTypeExtended = damageTypeExtended; bulletDefInfo.moddedDamageType = moddedDamageType; bulletDefInfo.tier = tier; bulletDefInfo.trailColor = color; return CreateAndAddBullet(bulletDefInfo); } public static DriverBulletDef CreateAndAddBullet(DriverBulletDefInfo bulletDefInfo) { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) if (!string.IsNullOrEmpty(bulletDefInfo.bulletNameToken) && !string.IsNullOrEmpty(bulletDefInfo.bulletName)) { LanguageAPI.Add(bulletDefInfo.bulletNameToken, bulletDefInfo.bulletName); } if (!string.IsNullOrEmpty(bulletDefInfo.descriptionToken) && !string.IsNullOrEmpty(bulletDefInfo.description)) { LanguageAPI.Add(bulletDefInfo.descriptionToken, bulletDefInfo.description); } DriverBulletDef driverBulletDef = DriverBulletDef.CreateBulletDefFromInfo(bulletDefInfo); DamageAPI.AddModdedDamageType(ref driverBulletDef.damageType, (ModdedDamageType)(((??)bulletDefInfo.moddedDamageType) ?? DriverDamageTypes.Generic)); return CreateAndAddBullet(driverBulletDef); } public static DriverBulletDef CreateAndAddBullet(DriverBulletDef bulletDef) { Array.Resize(ref bulletDefs, bulletDefs.Length + 1); int num = bulletDefs.Length - 1; bulletDef.index = (ushort)num; bulletDefs[num] = bulletDef; Config.InitBulletConfig(bulletDef); Log.Debug("Added " + bulletDef.bulletName + " to catalog with tier: " + bulletDef.tier); return bulletDef; } public static DriverBulletDef GetBulletFromIndex(int index) { return ArrayUtils.GetSafe<DriverBulletDef>(bulletDefs, index, ref Default); } public static DriverBulletDef GetWeightedRandomBullet(DriverWeaponTier tier) { int num = 60; int num2 = ((tier >= DriverWeaponTier.Uncommon) ? 35 : 0); int num3 = ((tier >= DriverWeaponTier.Legendary) ? 2 : 0); int num4 = ((tier >= DriverWeaponTier.Unique) ? 1 : 0); int num5 = Random.Range(0, num + num2 + num3 + num4); if (num5 < num) { tier = DriverWeaponTier.Common; } else if (num5 < num + num2) { tier = DriverWeaponTier.Uncommon; } else if (num5 < num + num2 + num3) { tier = DriverWeaponTier.Legendary; } return GetRandomBulletFromTier(tier); } public static DriverBulletDef GetRandomBulletFromTier(DriverWeaponTier tier) { List<DriverBulletDef> list = new List<DriverBulletDef>(); DriverBulletDef[] array = bulletDefs; foreach (DriverBulletDef driverBulletDef in array) { if (driverBulletDef.enabled && driverBulletDef.tier != 0) { if (driverBulletDef.tier == tier) { list.Add(driverBulletDef); } if (Config.uniqueDropsAreLegendary.Value && tier == DriverWeaponTier.Legendary && driverBulletDef.tier > DriverWeaponTier.Legendary) { list.Add(driverBulletDef); } } } if (list.Count <= 0) { return Default; } return list[Random.Range(0, list.Count)]; } } public static class DriverWeaponCatalog { public struct WeaponDrop { public ushort weaponIndex; public float dropChance; public WeaponDrop(ushort weaponIndex, float dropChance) { this.weaponIndex = weaponIndex; this.dropChance = dropChance; } } public static Dictionary<BodyIndex, WeaponDrop> weaponDrops = new Dictionary<BodyIndex, WeaponDrop>(); public static DriverWeaponDef[] weaponDefs = Array.Empty<DriverWeaponDef>(); internal static DriverWeaponDef Pistol; internal static DriverWeaponDef LunarPistol; internal static DriverWeaponDef VoidPistol; internal static DriverWeaponDef PyriteGun; internal static DriverWeaponDef BeetleShield; internal static DriverWeaponDef Needler; internal static DriverWeaponDef GoldenGun; internal static DriverWeaponDef Shotgun; internal static DriverWeaponDef RiotShotgun; internal static DriverWeaponDef SlugShotgun; internal static DriverWeaponDef MachineGun; internal static DriverWeaponDef HeavyMachineGun; internal static DriverWeaponDef Sniper; internal static DriverWeaponDef Bazooka; internal static DriverWeaponDef GrenadeLauncher; internal static DriverWeaponDef RocketLauncher; internal static DriverWeaponDef Behemoth; internal static DriverWeaponDef PrototypeRocketLauncher; internal static DriverWeaponDef ArmCannon; internal static DriverWeaponDef PlasmaCannon; internal static DriverWeaponDef BadassShotgun; internal static DriverWeaponDef LunarRifle; internal static DriverWeaponDef LunarHammer; internal static DriverWeaponDef NemmandoGun; internal static DriverWeaponDef NemmercGun; internal static DriverWeaponDef GolemRifle; internal static void InitWeaponDefs() { //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0341: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_036d: Unknown result type (might be due to invalid IL or missing references) //IL_04aa: Unknown result type (might be due to invalid IL or missing references) //IL_05bd: Unknown result type (might be due to invalid IL or missing references) //IL_05c2: Unknown result type (might be due to invalid IL or missing references) //IL_05e9: Unknown result type (might be due to invalid IL or missing references) //IL_06b1: Unknown result type (might be due to invalid IL or missing references) //IL_06b6: Unknown result type (might be due to invalid IL or missing references) //IL_06ca: Unknown result type (might be due to invalid IL or missing references) //IL_06cf: Unknown result type (might be due to invalid IL or missing references) //IL_073a: Unknown result type (might be due to invalid IL or missing references) //IL_0870: Unknown result type (might be due to invalid IL or missing references) //IL_13a3: Unknown result type (might be due to invalid IL or missing references) //IL_13a8: Unknown result type (might be due to invalid IL or missing references) //IL_1429: Unknown result type (might be due to invalid IL or missing references) //IL_142e: Unknown result type (might be due to invalid IL or missing references) //IL_1a21: Unknown result type (might be due to invalid IL or missing references) //IL_1a26: Unknown result type (might be due to invalid IL or missing references) //IL_1a4d: Unknown result type (might be due to invalid IL or missing references) //IL_1b5f: Unknown result type (might be due to invalid IL or missing references) //IL_1b64: Unknown result type (might be due to invalid IL or missing references) //IL_1b8b: Unknown result type (might be due to invalid IL or missing references) //IL_1cb6: Unknown result type (might be due to invalid IL or missing references) //IL_1df2: Unknown result type (might be due to invalid IL or missing references) //IL_1f05: Unknown result type (might be due to invalid IL or missing references) //IL_1f0a: Unknown result type (might be due to invalid IL or missing references) DriverWeaponDefInfo weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Pistol"; weaponDefInfo.nameToken = "ROB_DRIVER_PISTOL_NAME"; weaponDefInfo.description = "A reliable handgun that excels at nothing."; weaponDefInfo.descriptionToken = "ROB_DRIVER_PISTOL_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texPistolWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.NoTier; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Crit; weaponDefInfo.shotCount = 26; weaponDefInfo.primarySkillDef = Skills.pistolPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.pistolSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("PISTOL"); weaponDefInfo.unlockableDef = null; weaponDefInfo.mesh = Assets.LoadMesh("meshPistol"); weaponDefInfo.material = Assets.pistolMat; weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.commonPickupModel; weaponDefInfo.colorOveride = Helpers.uniqueItemColor; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = ""; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; weaponDefInfo.dropBodyName = ""; Pistol = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Lunar Pistol"; weaponDefInfo.nameToken = "ROB_DRIVER_LUNAR_PISTOL_NAME"; weaponDefInfo.description = "A perfect weapon with no flaws. Speed is war."; weaponDefInfo.descriptionToken = "ROB_DRIVER_LUNAR_PISTOL_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texLunarPistolWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.NoTier; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 52; weaponDefInfo.primarySkillDef = Skills.lunarPistolPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.lunarPistolSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("LUNAR_PISTOL"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("LUNAR_PISTOL"); weaponDefInfo.mesh = Assets.LoadMesh("meshLunarPistol"); weaponDefInfo.material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/LunarGolem/matLunarGolem.mat").WaitForCompletion(); weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.lunarPickupModel; weaponDefInfo.colorOveride = Helpers.lunarItemColor; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = ""; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; weaponDefInfo.dropBodyName = ""; LunarPistol = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Void Pistol"; weaponDefInfo.nameToken = "ROB_DRIVER_VOID_PISTOL_NAME"; weaponDefInfo.description = "A weapon corrupted and powered up by the void."; weaponDefInfo.descriptionToken = "ROB_DRIVER_VOID_PISTOL_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texVoidPistolWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.NoTier; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 52; weaponDefInfo.primarySkillDef = Skills.lunarPistolPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.lunarPistolSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("VOID_PISTOL"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("VOID_PISTOL"); weaponDefInfo.mesh = Assets.LoadMesh("meshVoidPistol"); weaponDefInfo.material = Addressables.LoadAssetAsync<Material>((object)"RoR2/DLC1/VoidJailer/matVoidJailer.mat").WaitForCompletion(); weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.voidPickupModel; weaponDefInfo.colorOveride = Helpers.voidItemColor; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = ""; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; VoidPistol = CreateAndAddWeapon(weaponDefInfo); new FalsePistol(); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Pyrite Gun"; weaponDefInfo.nameToken = "ROB_DRIVER_PYRITEGUN_NAME"; weaponDefInfo.description = "A mockery of the real thing."; weaponDefInfo.descriptionToken = "ROB_DRIVER_PYRITEGUN_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texPyriteGunWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.NoTier; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Crit; weaponDefInfo.shotCount = 18; weaponDefInfo.primarySkillDef = Skills.pyriteGunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.pyriteGunSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("PYRITEGUN"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("PYRITEGUN"); weaponDefInfo.mesh = Assets.LoadMesh("meshGoldenGun"); weaponDefInfo.material = Assets.LoadMaterial("matPyriteGun"); weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.uniquePickupModel; weaponDefInfo.colorOveride = Helpers.uniqueItemColor; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = ""; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; PyriteGun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Chitin Shield"; weaponDefInfo.nameToken = "ROB_DRIVER_BEETLESHIELD_NAME"; weaponDefInfo.description = "An offhand shield to protect you while you use your pistol."; weaponDefInfo.descriptionToken = "ROB_DRIVER_BEETLESHIELD_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texBeetleShieldWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Unique; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Crit; weaponDefInfo.shotCount = 32; weaponDefInfo.primarySkillDef = Skills.beetleShieldPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.beetleShieldSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("BEETLESHIELD"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("BEETLESHIELD"); weaponDefInfo.mesh = Assets.LoadMesh("meshBeetleShield"); weaponDefInfo.material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Beetle/matBeetle.mat").WaitForCompletion(); weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.uniquePickupModel; weaponDefInfo.colorOveride = Helpers.uniqueItemColor; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = ""; weaponDefInfo.dropChance = 0.1f; weaponDefInfo.disableHolster = false; BeetleShield = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Needler"; weaponDefInfo.nameToken = "ROB_DRIVER_NEEDLER_NAME"; weaponDefInfo.description = "Risk of Rain 2"; weaponDefInfo.descriptionToken = "ROB_DRIVER_NEEDLER_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texNeedlerWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.NoTier; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 28; weaponDefInfo.primarySkillDef = (SkillDef)(object)Addressables.LoadAssetAsync<LunarPrimaryReplacementSkill>((object)"RoR2/Base/LunarSkillReplacements/LunarPrimaryReplacement.asset").WaitForCompletion(); weaponDefInfo.secondarySkillDef = (SkillDef)(object)Addressables.LoadAssetAsync<LunarSecondaryReplacementSkill>((object)"RoR2/Base/LunarSkillReplacements/LunarSecondaryReplacement.asset").WaitForCompletion(); weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("NEEDLER"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("NEEDLER"); weaponDefInfo.mesh = Assets.LoadMesh("meshNeedler"); weaponDefInfo.material = Assets.LoadMaterial("matNeedler"); weaponDefInfo.crosshairPrefab = Assets.needlerCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.lunarPickupModel; weaponDefInfo.colorOveride = Helpers.lunarItemColor; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = ""; weaponDefInfo.dropChance = 100f; weaponDefInfo.disableHolster = false; Needler = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Golden Gun"; weaponDefInfo.nameToken = "ROB_DRIVER_GOLDENGUN_NAME"; weaponDefInfo.description = "Deals extraordinary damage, but only has a few shots."; weaponDefInfo.descriptionToken = "ROB_DRIVER_GOLDENGUN_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texGoldenGunWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.NoTier; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Crit; weaponDefInfo.shotCount = 6; weaponDefInfo.primarySkillDef = Skills.goldenGunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.goldenGunSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("GOLDENGUN"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("GOLDENGUN"); weaponDefInfo.mesh = Assets.LoadMesh("meshGoldenGun"); weaponDefInfo.material = Assets.LoadMaterial("matGoldenGun"); weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.uniquePickupModel; weaponDefInfo.colorOveride = Helpers.uniqueItemColor; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_generic"; weaponDefInfo.dropChance = 100f; weaponDefInfo.disableHolster = false; GoldenGun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Shotgun"; weaponDefInfo.nameToken = "ROB_DRIVER_SHOTGUN_NAME"; weaponDefInfo.description = "Close-range powerhouse with overwhelming damage."; weaponDefInfo.descriptionToken = "ROB_DRIVER_SHOTGUN_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texShotgunWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Common; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 8; weaponDefInfo.primarySkillDef = Skills.shotgunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("SHOTGUN"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("SHOTGUN"); weaponDefInfo.mesh = Assets.LoadMesh("meshSuperShotgun"); weaponDefInfo.material = Assets.LoadMaterial("matShotgun"); weaponDefInfo.crosshairPrefab = Assets.shotgunCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_shotgun"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; Shotgun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Riot Shotgun"; weaponDefInfo.nameToken = "ROB_DRIVER_RIOT_SHOTGUN_NAME"; weaponDefInfo.description = "Piercing blasts great for crowd control."; weaponDefInfo.descriptionToken = "ROB_DRIVER_RIOT_SHOTGUN_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texRiotShotgunWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Common; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.AttackSpeed; weaponDefInfo.shotCount = 8; weaponDefInfo.primarySkillDef = Skills.riotShotgunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("RIOT_SHOTGUN"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("RIOT_SHOTGUN"); weaponDefInfo.mesh = Assets.LoadMesh("meshRiotShotgun"); weaponDefInfo.material = Assets.LoadMaterial("matRiotShotgun"); weaponDefInfo.crosshairPrefab = Assets.shotgunCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_shotgun"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; RiotShotgun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Slug Shotgun"; weaponDefInfo.nameToken = "ROB_DRIVER_SLUG_SHOTGUN_NAME"; weaponDefInfo.description = "Powerful single hits with heavy kickback."; weaponDefInfo.descriptionToken = "ROB_DRIVER_SLUG_SHOTGUN_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texSlugShotgunWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Common; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 8; weaponDefInfo.primarySkillDef = Skills.slugShotgunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("SLUG_SHOTGUN"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("SLUG_SHOTGUN"); weaponDefInfo.mesh = Assets.LoadMesh("meshSlugShotgun"); weaponDefInfo.material = Assets.LoadMaterial("matSlugShotgun"); weaponDefInfo.crosshairPrefab = Assets.shotgunCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_shotgun"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; SlugShotgun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Machine Gun"; weaponDefInfo.nameToken = "ROB_DRIVER_MACHINEGUN_NAME"; weaponDefInfo.description = "Shoots fast but has high spread."; weaponDefInfo.descriptionToken = "ROB_DRIVER_MACHINEGUN_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texMachineGunWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Common; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.AttackSpeed; weaponDefInfo.shotCount = 48; weaponDefInfo.primarySkillDef = Skills.machineGunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.machineGunSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("MACHINEGUN"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("MACHINEGUN"); weaponDefInfo.mesh = Assets.LoadMesh("meshMachineGun"); weaponDefInfo.material = Assets.LoadMaterial("matMachineGun"); weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_machine_gun"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; MachineGun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Heavy Machine Gun"; weaponDefInfo.nameToken = "ROB_DRIVER_HEAVY_MACHINEGUN_NAME"; weaponDefInfo.description = "Accurate, armor piercing rounds."; weaponDefInfo.descriptionToken = "ROB_DRIVER_HEAVY_MACHINEGUN_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texHeavyMachineGunWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Common; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.AttackSpeed; weaponDefInfo.shotCount = 44; weaponDefInfo.primarySkillDef = Skills.heavyMachineGunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.heavyMachineGunSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("HEAVY_MACHINEGUN"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("HEAVY_MACHINEGUN"); weaponDefInfo.mesh = Assets.LoadMesh("meshHeavyMachineGun"); weaponDefInfo.material = Assets.LoadMaterial("matHeavyMachineGun"); weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_hmg"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; HeavyMachineGun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Sniper Rifle"; weaponDefInfo.nameToken = "ROB_DRIVER_SNIPER_NAME"; weaponDefInfo.description = "Precise, fatal shots."; weaponDefInfo.descriptionToken = "ROB_DRIVER_SNIPER_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texSniperRifleWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Uncommon; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 6; weaponDefInfo.primarySkillDef = Skills.sniperPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.sniperSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("SNIPER"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("SNIPER"); weaponDefInfo.mesh = Assets.LoadMesh("meshSniperRifle"); weaponDefInfo.material = Assets.LoadMaterial("matSniperRifle"); weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_sniper"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; Sniper = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Bazooka"; weaponDefInfo.nameToken = "ROB_DRIVER_BAZOOKA_NAME"; weaponDefInfo.description = "Chargeable arcing rockets."; weaponDefInfo.descriptionToken = "ROB_DRIVER_BAZOOKA_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texBazookaWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Uncommon; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 8; weaponDefInfo.primarySkillDef = Skills.bazookaPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("BAZOOKA"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("BAZOOKA"); weaponDefInfo.mesh = Assets.LoadMesh("meshBazooka"); weaponDefInfo.material = Assets.LoadMaterial("matBazooka"); weaponDefInfo.crosshairPrefab = Assets.bazookaCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_rocket_launcher"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; Bazooka = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Grenade Launcher"; weaponDefInfo.nameToken = "ROB_DRIVER_GRENADELAUNCHER_NAME"; weaponDefInfo.description = "Fast-firing grenades with high damage but low blast radius."; weaponDefInfo.descriptionToken = "ROB_DRIVER_GRENADELAUNCHER_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texGrenadeLauncherWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Uncommon; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 16; weaponDefInfo.primarySkillDef = Skills.grenadeLauncherPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("GRENADELAUNCHER"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("GRENADELAUNCHER"); weaponDefInfo.mesh = Assets.LoadMesh("meshGrenadeLauncher"); weaponDefInfo.material = Assets.LoadMaterial("matGrenadeLauncher"); weaponDefInfo.crosshairPrefab = Assets.grenadeLauncherCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_grenade_launcher"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; GrenadeLauncher = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Rocket Launcher"; weaponDefInfo.nameToken = "ROB_DRIVER_ROCKETLAUNCHER_NAME"; weaponDefInfo.description = "KABOOOM"; weaponDefInfo.descriptionToken = "ROB_DRIVER_ROCKETLAUNCHER_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texRocketLauncherWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Legendary; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.AttackSpeed; weaponDefInfo.shotCount = 20; weaponDefInfo.primarySkillDef = Skills.rocketLauncherPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.rocketLauncherSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("ROCKETLAUNCHER"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("ROCKETLAUNCHER"); weaponDefInfo.mesh = Assets.LoadMesh("meshRocketLauncher"); weaponDefInfo.material = Assets.LoadMaterial("matRocketLauncher"); weaponDefInfo.crosshairPrefab = Assets.rocketLauncherCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_rocket_launcher"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; RocketLauncher = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Brilliant Behemoth"; weaponDefInfo.nameToken = "ROB_DRIVER_BEHEMOTH_NAME"; weaponDefInfo.description = "huh?"; weaponDefInfo.descriptionToken = "ROB_DRIVER_BEHEMOTH_DESC"; weaponDefInfo.icon = Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Behemoth/texBehemothIcon.png").WaitForCompletion(); weaponDefInfo.tier = DriverWeaponTier.Unique; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.AttackSpeed; weaponDefInfo.shotCount = 20; weaponDefInfo.primarySkillDef = Skills.behemothPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.behemothSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("BEHEMOTH"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("BEHEMOTH"); weaponDefInfo.mesh = Assets.LoadMesh("meshBehemoth"); weaponDefInfo.material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Behemoth/matBehemoth.mat").WaitForCompletion(); weaponDefInfo.crosshairPrefab = Assets.rocketLauncherCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_rocket_launcher"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; Behemoth = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Prototype Rocket Launcher"; weaponDefInfo.nameToken = "ROB_DRIVER_ROCKETLAUNCHER_ALT_NAME"; weaponDefInfo.description = "A faulty prototype that can only fire a few shots."; weaponDefInfo.descriptionToken = "ROB_DRIVER_ROCKETLAUNCHER_ALT_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texRocketLauncherAltWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Unique; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.AttackSpeed; weaponDefInfo.shotCount = 10; weaponDefInfo.primarySkillDef = Skills.rocketLauncherAltPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.rocketLauncherAltSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("ROCKETLAUNCHER_ALT"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("ROCKETLAUNCHER_ALT"); weaponDefInfo.mesh = Assets.LoadMesh("meshRocketLauncher"); weaponDefInfo.material = Assets.LoadMaterial("matRocketLauncherAlt"); weaponDefInfo.crosshairPrefab = Assets.rocketLauncherCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_rocket_launcher"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; PrototypeRocketLauncher = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Arm Cannon"; weaponDefInfo.nameToken = "ROB_DRIVER_ARMCANNON_NAME"; weaponDefInfo.description = "Arm Cannon scavenged from a Steel Mechorilla."; weaponDefInfo.descriptionToken = "ROB_DRIVER_ARMCANNON_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texArmCannonWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Unique; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.AttackSpeed; weaponDefInfo.shotCount = 20; weaponDefInfo.primarySkillDef = Skills.armCannonPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("ARMCANNON"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("ARMCANNON"); weaponDefInfo.mesh = Assets.LoadMesh("meshArmCannon"); weaponDefInfo.material = Assets.LoadMaterial("matArmCannon"); weaponDefInfo.crosshairPrefab = Assets.rocketLauncherCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "Recharge"; weaponDefInfo.equipAnimationString = "Recharge"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_rocket_launcher"; weaponDefInfo.dropChance = 100f; weaponDefInfo.disableHolster = true; ArmCannon = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Super Plasma Cannon"; weaponDefInfo.nameToken = "ROB_DRIVER_PLASMACANNON_NAME"; weaponDefInfo.description = "POWERRR!!!"; weaponDefInfo.descriptionToken = "ROB_DRIVER_PLASMACANNON_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texPlasmaCannonWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Void; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.AttackSpeed; weaponDefInfo.shotCount = 30; weaponDefInfo.primarySkillDef = Skills.plasmaCannonPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.plasmaCannonSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("PLASMACANNON"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("PLASMACANNON"); weaponDefInfo.mesh = Assets.LoadMesh("meshPlasmaCannon"); weaponDefInfo.material = Assets.LoadMaterial("matPlasmaCannon"); weaponDefInfo.crosshairPrefab = Assets.rocketLauncherCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_laser"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; PlasmaCannon = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Badass Shotgun"; weaponDefInfo.nameToken = "ROB_DRIVER_BADASS_SHOTGUN_NAME"; weaponDefInfo.description = "A six-barreled shotgun...!?"; weaponDefInfo.descriptionToken = "ROB_DRIVER_BADASS_SHOTGUN_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texBadassShotgunWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Legendary; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 12; weaponDefInfo.primarySkillDef = Skills.badassShotgunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("BADASS_SHOTGUN"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("BADASS_SHOTGUN"); weaponDefInfo.mesh = Assets.LoadMesh("meshSixBarrelShotgun"); weaponDefInfo.material = Assets.LoadMaterial("matSawedOff"); weaponDefInfo.crosshairPrefab = Assets.LoadCrosshair("SMG"); weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_shotgun"; weaponDefInfo.dropChance = 0f; weaponDefInfo.disableHolster = false; BadassShotgun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Chimeric Cannon"; weaponDefInfo.nameToken = "ROB_DRIVER_LUNARRIFLE_NAME"; weaponDefInfo.description = "Blasts of condensed lunar energy."; weaponDefInfo.descriptionToken = "ROB_DRIVER_LUNARRIFLE_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texLunarRifleWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Lunar; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.AttackSpeed; weaponDefInfo.shotCount = 48; weaponDefInfo.primarySkillDef = Skills.lunarRiflePrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("LUNARRIFLE"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("LUNARRIFLE"); weaponDefInfo.mesh = Assets.LoadMesh("meshLunarRifle"); weaponDefInfo.material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/LunarGolem/matLunarGolem.mat").WaitForCompletion(); weaponDefInfo.crosshairPrefab = Assets.rocketLauncherCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.lunarPickupModel; weaponDefInfo.colorOveride = Helpers.lunarItemColor; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_generic"; weaponDefInfo.dropChance = 10f; weaponDefInfo.disableHolster = false; LunarRifle = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Lunar Hammer"; weaponDefInfo.nameToken = "ROB_DRIVER_LUNARHAMMER_NAME"; weaponDefInfo.description = "Wield supreme power in the palm of your hand."; weaponDefInfo.descriptionToken = "ROB_DRIVER_LUNARHAMMER_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texLunarHammerWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.NoTier; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.BigMelee; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 0; weaponDefInfo.primarySkillDef = Skills.lunarHammerPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.lunarHammerSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("LUNARHAMMER"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("LUNARHAMMER"); weaponDefInfo.mesh = Assets.LoadMesh("meshLunarHammer"); weaponDefInfo.material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Brother/matBrotherHammer.mat").WaitForCompletion(); weaponDefInfo.crosshairPrefab = Assets.needlerCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.lunarPickupModel; weaponDefInfo.colorOveride = Helpers.lunarItemColor; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_generic"; weaponDefInfo.dropChance = 100f; weaponDefInfo.disableHolster = false; LunarHammer = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Nemesis Commando SMG"; weaponDefInfo.nameToken = "ROB_DRIVER_NEMMANDO_NAME"; weaponDefInfo.description = "Nemesis Commando's gun."; weaponDefInfo.descriptionToken = "ROB_DRIVER_NEMMANDO_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texNemmandoWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Void; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.Default; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Crit; weaponDefInfo.shotCount = 64; weaponDefInfo.primarySkillDef = Skills.nemmandoGunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.nemmandoGunSecondarySkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("NEMMANDO"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("NEMMANDO"); weaponDefInfo.mesh = Assets.LoadMesh("meshNemmandoGun"); weaponDefInfo.material = Assets.LoadMaterial("matNemmandoGun"); weaponDefInfo.crosshairPrefab = Assets.defaultCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = Assets.voidPickupModel; weaponDefInfo.colorOveride = Helpers.voidItemColor; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_generic"; weaponDefInfo.dropChance = 100f; weaponDefInfo.disableHolster = false; NemmandoGun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Nemesis Mercenary Shotgun"; weaponDefInfo.nameToken = "ROB_DRIVER_NEMMERC_NAME"; weaponDefInfo.description = "Nemesis Mercenary's shotgun."; weaponDefInfo.descriptionToken = "ROB_DRIVER_NEMMERC_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texNemmercWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Void; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 48; weaponDefInfo.primarySkillDef = Skills.nemmercGunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("NEMMERC"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("NEMMERC"); weaponDefInfo.mesh = Assets.LoadMesh("meshNemmercGun"); weaponDefInfo.material = Assets.LoadMaterial("matNemmercGun"); weaponDefInfo.crosshairPrefab = Assets.LoadCrosshair("SMG"); weaponDefInfo.pickupPrefabOverride = Assets.voidPickupModel; weaponDefInfo.colorOveride = Helpers.voidItemColor; weaponDefInfo.reloadAnimationString = "ReloadShotgun"; weaponDefInfo.equipAnimationString = "EquipPistol"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_shotgun"; weaponDefInfo.dropChance = 100f; weaponDefInfo.disableHolster = false; NemmercGun = CreateAndAddWeapon(weaponDefInfo); weaponDefInfo = default(DriverWeaponDefInfo); weaponDefInfo.name = "Stone Cannon"; weaponDefInfo.nameToken = "ROB_DRIVER_GOLEMGUN_NAME"; weaponDefInfo.description = "Harness the intense beams of a Stone Golem."; weaponDefInfo.descriptionToken = "ROB_DRIVER_GOLEMGUN_DESC"; weaponDefInfo.icon = Assets.mainAssetBundle.LoadAsset<Sprite>("texGolemGunWeaponIcon"); weaponDefInfo.tier = DriverWeaponTier.Unique; weaponDefInfo.animationSet = DriverWeaponDef.AnimationSet.TwoHanded; weaponDefInfo.buffType = DriverWeaponDef.BuffType.Damage; weaponDefInfo.shotCount = 48; weaponDefInfo.primarySkillDef = Skills.golemGunPrimarySkillDef; weaponDefInfo.secondarySkillDef = Skills.bashSkillDef; weaponDefInfo.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef("GOLEMGUN"); weaponDefInfo.unlockableDef = Unlockables.CreateAndAddWeaponUnlockableDef("GOLEMGUN"); weaponDefInfo.mesh = Assets.LoadMesh("meshGolemGun"); weaponDefInfo.material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Golem/matGolem.mat").WaitForCompletion(); weaponDefInfo.crosshairPrefab = Assets.circleCrosshairPrefab; weaponDefInfo.pickupPrefabOverride = null; weaponDefInfo.colorOveride = null; weaponDefInfo.reloadAnimationString = "ReloadPistol"; weaponDefInfo.equipAnimationString = "BufferEmpty"; weaponDefInfo.calloutSoundString = "sfx_driver_callout_laser"; weaponDefInfo.dropChance = 1f; weaponDefInfo.disableHolster = false; GolemRifle = CreateAndAddWeapon(weaponDefInfo); new ArmBFG().Init(); new CrabGun().Init(); new LunarGrenade().Init(); new ScavGun().Init(); new ArtiGauntlet().Init(); new BanditRevolver().Init(); new CommandoSMG().Init(); new Revolver().Init(); new SMG().Init(); new RavSword().Init(); new NemKatana().Init(); new VulkanShotgun(); AddWeaponDrop("Beetle", BeetleShield, 0.1f); AddWeaponDrop("Golem", GolemRifle, 1f); AddWeaponDrop("Titan", GolemRifle, 10f); AddWeaponDrop("LunarGolem", LunarRifle, 10f); AddWeaponDrop("TitanGold", GoldenGun, 100f); AddWeaponDrop("TimeCrystal", LunarRifle, 50f); AddWeaponDrop("BrotherHurt", LunarHammer, 100f); AddWeaponDrop("BrotherHurtBodyP3", LunarHammer, 100f, autoComplete: false); AddWeaponDrop("Mechorilla", ArmCannon, 100f); AddWeaponDrop("SS2UNemmando", NemmandoGun, 100f); AddWeaponDrop("NemMerc", NemmercGun, 100f); AddWeaponDrop("Heretic", Needler, 100f); } public static DriverWeaponDef CreateAndAddWeapon(DriverWeaponDefInfo weaponDefInfo) { if (!string.IsNullOrEmpty(weaponDefInfo.nameToken) && !string.IsNullOrEmpty(weaponDefInfo.name)) { LanguageAPI.Add(weaponDefInfo.nameToken, weaponDefInfo.name); } if (!string.IsNullOrEmpty(weaponDefInfo.descriptionToken) && !string.IsNullOrEmpty(weaponDefInfo.description)) { LanguageAPI.Add(weaponDefInfo.descriptionToken, weaponDefInfo.description); } return CreateAndAddWeapon(DriverWeaponDef.CreateWeaponDefFromInfo(weaponDefInfo)); } public static DriverWeaponDef CreateAndAddWeapon(DriverWeaponDef weaponDef) { Array.Resize(ref weaponDefs, weaponDefs.Length + 1); int num = weaponDefs.Length - 1; weaponDef.index = (ushort)num; weaponDefs[num] = weaponDef; Config.InitWeaponConfig(weaponDef); DriverWeaponDef driverWeaponDef = weaponDef; if (driverWeaponDef.crosshairPrefab == null) { driverWeaponDef.crosshairPrefab = Assets.defaultCrosshairPrefab; } if ((Object)(object)weaponDef.icon == (Object)null) { Log.Warning("Weapon " + weaponDef.weaponName + " is missing an icon! Assigning default based on tier."); driverWeaponDef = weaponDef; driverWeaponDef.icon = (Sprite)(weaponDef.tier switch { DriverWeaponTier.Common => Assets.commonWeaponIcon, DriverWeaponTier.Uncommon => Assets.uncommonWeaponIcon, DriverWeaponTier.Legendary => Assets.legendaryWeaponIcon, DriverWeaponTier.Unique => Assets.uniqueWeaponIcon, DriverWeaponTier.Void => Assets.voidWeaponIcon, DriverWeaponTier.Lunar => Assets.lunarWeaponIcon, _ => Assets.commonWeaponIcon, }); } if (Config.enableArsenal.Value) { driverWeaponDef = weaponDef; if (driverWeaponDef.arsenalSkillDef == null) { driverWeaponDef.arsenalSkillDef = Skills.CreateAndAddWeaponSkillDef(weaponDef.nameToken, weaponDef.descriptionToken); } Skills.AddWeaponSkillToFamily(weaponDef.arsenalSkillDef, weaponDef.unlockableDef, weaponDef.icon); } Log.Debug("Added " + weaponDef.nameToken + " to catalog with rarity: " + Enum.GetName(typeof(DriverWeaponTier), weaponDef.tier)); return weaponDef; } public static void AddWeaponDrop(string bodyName, DriverWeaponDef weaponDef, float dropChance = 0f, bool autoComplete = true) { if (string.IsNullOrWhiteSpace(bodyName)) { return; } if (autoComplete) { bodyName = bodyName.Replace("(Clone)", ""); if (!bodyName.EndsWith("Body")) { bodyName += "Body"; } } ((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)delegate { //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_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Invalid comparison between Unknown and I4 //IL_0015: Unknown result type (might be due to invalid IL or missing references) BodyIndex val = BodyCatalog.FindBodyIndex(bodyName); if ((int)val != -1) { weaponDrops[val] = new WeaponDrop(weaponDef.index, Mathf.Max(dropChance, weaponDef.dropChance)); Log.Debug("Added " + weaponDef.nameToken + " to drop list for " + bodyName); } else { Log.Warning("Failed to add " + weaponDef.nameToken + " to drop list for " + bodyName + " because the body index was not found."); } }); } public static DriverWeaponDef GetWeaponFromIndex(int index) { return ArrayUtils.GetSafe<DriverWeaponDef>(weaponDefs, index, ref Pistol); } public static bool IsWeaponPistol(DriverWeaponDef weaponDef) { if (!((Object)(object)weaponDef == (Object)(object)Pistol) && !((Object)(object)weaponDef == (Object)(object)VoidPistol) && !((Object)(object)weaponDef == (Object)(object)LunarPistol) && !((Object)(object)weaponDef == (Object)(object)PyriteGun) && !((Object)(object)weaponDef == (Object)(object)BeetleShield)) { return (Object)(object)weaponDef == (Object)(object)BundledWeapon<FalsePistol>.instance.weaponDef; } return true; } public static DriverWeaponDef GetRandomWeapon() { List<DriverWeaponDef> list = new List<DriverWeaponDef>(); for (int i = 0; i < weaponDefs.Length; i++) { DriverWeaponDef driverWeaponDef = weaponDefs[i]; if (driverWeaponDef.enabled && driverWeaponDef.shotCount > 0 && driverWeaponDef.tier != 0) { list.Add(driverWeaponDef); } } if (list.Count == 0) { return Pistol; } return list[Random.Range(0, list.Count)]; } public static DriverWeaponDef GetWeightedRandomWeapon(DriverWeaponTier tier) { int num = 60; int num2 = ((tier >= DriverWeaponTier.Uncommon) ? 35 : 0); int num3 = ((tier >= DriverWeaponTier.Legendary) ? 2 : 0); int num4 = ((tier >= DriverWeaponTier.Unique) ? 1 : 0); int num5 = Random.Range(0, num + num2 + num3 + num4); if (num5 < num) { tier = DriverWeaponTier.Common; } else if (num5 < num + num2) { tier = DriverWeaponTier.Uncommon; } else if (num5 < num + num2 + num3) { tier = DriverWeaponTier.Legendary; } return GetRandomWeaponFromTier(tier); } public static DriverWeaponDef GetRandomWeaponFromTier(DriverWeaponTier tier) { List<DriverWeaponDef> list = new List<DriverWeaponDef>(); for (int i = 0; i < weaponDefs.Length; i++) { DriverWeaponDef driverWeaponDef = weaponDefs[i]; if (driverWeaponDef.enabled && driverWeaponDef.shotCount > 0 && driverWeaponDef.tier != 0) { if (driverWeaponDef.tier == tier) { list.Add(driverWeaponDef); } if (Config.uniqueDropsAreLegendary.Value && tier == DriverWeaponTier.Legendary && driverWeaponDef.tier > DriverWeaponTier.Legendary) { list.Add(driverWeaponDef); } } } if (list.Count == 0) { return Pistol; } return list[Random.Range(0, list.Count)]; } } public static class DriverWeaponSkinCatalog { internal static Dictionary<SkinIndex, DriverWeaponSkinDef[]> driverSkinDefs = new Dictionary<SkinIndex, DriverWeaponSkinDef[]>(); public static void AddSkin(SkinIndex index, IEnumerable<DriverWeaponSkinDef> skinDefs) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Invalid comparison between Unknown and I4 //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (skinDefs.Any() && (int)index != -1) { Dictionary<SkinIndex, DriverWeaponSkinDef[]> dictionary = driverSkinDefs; List<DriverWeaponSkinDef> list = new List<DriverWeaponSkinDef>(); list.AddRange(skinDefs); dictionary.Add(index, list.ToArray()); } } public static DriverWeaponDef.ModelSwapInfo[] GetModelSwapInfoForWeapon(ModelSkinController skinController, DriverWeaponDef weaponDef) { if (skinController != null && skinController.skins?.Length == 0) { return weaponDef.modelSwapInfo; } return GetModelSwapInfoForWeapon(skinController.skins, skinController.currentSkinIndex, weaponDef); } public static DriverWeaponDef.ModelSwapInfo[] GetModelSwapInfoForWeapon(SkinDef[] skins, int skinIndex, DriverWeaponDef weaponDef) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) SkinDef safe = ArrayUtils.GetSafe<SkinDef>(skins, skinIndex); if ((Object)(object)safe == (Object)null || !driverSkinDefs.ContainsKey(safe.skinIndex)) { return weaponDef.modelSwapInfo; } DriverWeaponSkinDef[] array = driverSkinDefs[safe.skinIndex]; for (int i = 0; i < array.Length; i++) { if (array[i].weaponDefIndex == weaponDef.index) { return array[i].modelSwapInfo; } } return weaponDef.modelSwapInfo; } } } namespace RobDriver.SkillStates { public class FuckMyAss : GenericCharacterDeath { public override bool shouldAutoDestroy => false; public override void OnEnter() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) ((GenericCharacterDeath)this).OnEnter(); Vector3 val = Vector3.up * 3f; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { val += ((EntityState)this).characterMotor.velocity; ((Behaviour)((EntityState)this).characterMotor).enabled = false; } if (!Object.op_Implicit((Object)(object)((GenericCharacterDeath)this).cachedModelTransform)) { return; } RagdollController component = ((Component)((GenericCharacterDeath)this).cachedModelTransform).GetComponent<RagdollController>(); if (!Object.op_Implicit((Object)(object)component)) { return; } Transform[] bones = component.bones; foreach (Transform val2 in bones) { if (Object.op_Implicit((Object)(object)val2)) { ((Component)val2).gameObject.layer = LayerIndex.ragdoll.intVal; ((Component)val2).gameObject.SetActive(true); } } component.BeginRagdoll(val); } public override void PlayDeathAnimation(float crossfadeDuration = 0.1f) { } public override void FixedUpdate() { ((GenericCharacterDeath)this).FixedUpdate(); if (NetworkServer.active && ((EntityState)this).fixedAge > 4f) { EntityState.Destroy((Object)(object)((EntityState)this).gameObject); } } public override InterruptPriority GetMinimumInterruptPriority() { return (InterruptPriority)7; } } } namespace RobDriver.SkillStates.Emote { public class BaseEmote : BaseState { private CameraParamsOverrideHandle camOverrideHandle; protected float duration; private uint activePlayID; public LocalUser localUser; public override void OnEnter() { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); FindLocalUser(); ((EntityState)this).characterBody.hideCrosshair = true; camOverrideHandle = CameraParams.OverrideCameraParams(((EntityState)this).cameraTargetParams, DriverCameraParams.EMOTE); } private void FindLocalUser() { if (localUser != null || !Object.op_Implicit((Object)(object)((EntityState)this).characterBody)) { return; } foreach (LocalUser readOnlyLocalUsers in LocalUserManager.readOnlyLocalUsersList) { if ((Object)(object)readOnlyLocalUsers.cachedBody == (Object)(object)((EntityState)this).characterBody) { localUser = readOnlyLocalUsers; break; } } } protected void PlayEmote(string animString, string soundString = "", float animDuration = 0f) { PlayEmote(animString, soundString, ((EntityState)this).GetModelAnimator(), animDuration); } protected void PlayEmote(string animString, string soundString, Animator animator, float animDuration = 0f) { if (animDuration >= 0f && duration != 0f) { animDuration = duration; } if (duration > 0f) { EntityState.PlayAnimationOnAnimator(animator, "FullBody, Override", animString, "Emote.playbackRate", animDuration, 0f); } else { animator.SetFloat("Emote.playbackRate", 1f); EntityState.PlayAnimationOnAnimator(animator, "FullBody, Override", animString); } if (!string.IsNullOrEmpty(soundString)) { activePlayID = Util.PlaySound(soundString, ((EntityState)this).gameObject); } } public override void Update() { ((EntityState)this).Update(); if (((EntityState)this).isAuthority) { CheckEmote<Rest>(Config.restKey); CheckEmote<Taunt>(Config.tauntKey); CheckEmote<Dance>(Config.danceKey); } } private void CheckEmote(KeyCode keybind, EntityState state) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown(keybind) && !localUser.isUIFocused) { ((EntityState)this).outer.SetInterruptState(state, (InterruptPriority)0); } } private void CheckEmote<T>(ConfigEntry<KeyboardShortcut> keybind) where T : EntityState, new() { if (Config.GetKeyPressed(keybind)) { FindLocalUser(); if (localUser != null && !localUser.isUIFocused) { ((EntityState)this).outer.SetInterruptState((EntityState)(object)new T(), (InterruptPriority)0); } } } public override void FixedUpdate() { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); bool flag = false; if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.isGrounded) { flag = true; } if (Object.op_Implicit((Object)(object)((EntityState)this).inputBank)) { if (((EntityState)this).inputBank.skill1.down) { flag = true; } if (((EntityState)this).inputBank.skill2.down) { flag = true; } if (((EntityState)this).inputBank.skill3.down) { flag = true; } if (((EntityState)this).inputBank.skill4.down) { flag = true; } if (((EntityState)this).inputBank.moveVector != Vector3.zero) { flag = true; } } if (duration > 0f && ((EntityState)this).fixedAge >= duration) { flag = true; } if (flag && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).OnExit(); ((EntityState)this).characterBody.hideCrosshair = false; ((EntityState)this).PlayAnimation("FullBody, Override", "BufferEmpty"); if (activePlayID != 0) { AkSoundEngine.StopPlayingID(activePlayID); } ((EntityState)this).cameraTargetParams.RemoveParamsOverride(camOverrideHandle, 0.5f); } public override I