Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of CommandoFMJ v1.1.1
CommandoFMJ.dll
Decompiled 2 years agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using EntityStates; using Microsoft.CodeAnalysis; using On.RoR2; using RoR2; using RoR2.ContentManagement; using RoR2.Skills; using UnityEngine; using UnityEngine.AddressableAssets; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")] [assembly: AssemblyCompany("CommandoFMJ")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("CommandoFMJ")] [assembly: AssemblyTitle("CommandoFMJ")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [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; } } } namespace CommandoFMJ { [BepInPlugin("pseudopulse.CommandoFMJ", "CommandoFMJ", "1.0.0")] public class CommandoFMJ : BaseUnityPlugin { public const string PluginGUID = "pseudopulse.CommandoFMJ"; public const string PluginAuthor = "pseudopulse"; public const string PluginName = "CommandoFMJ"; public const string PluginVersion = "1.0.0"; public static ManualLogSource ModLogger; public static float DAMAGE_COEFFICIENT; public static float COOLDOWN; public static float DURATION; public static float KNOCKBACK; public static GameObject Tracer; public static GameObject HitImpact; private static GameObject TracerHolder; public static GameObject MuzzleFlash; private static string FMJNAME; private static string FMJDESC; private static FMJContentPack pack; public void Awake() { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Expected O, but got Unknown //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_01d8: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0242: Expected O, but got Unknown ModLogger = ((BaseUnityPlugin)this).Logger; TracerHolder = new GameObject("FMJ Tracer Holder"); TracerHolder.SetActive(false); Object.DontDestroyOnLoad((Object)(object)TracerHolder); DAMAGE_COEFFICIENT = ((BaseUnityPlugin)this).Config.Bind<float>("FMJ :: Stats", "Damage Coefficient", 7f, "The base damage dealt by this skill.").Value; COOLDOWN = ((BaseUnityPlugin)this).Config.Bind<float>("FMJ :: Stats", "Cooldown", 4f, "The base cooldown (in seconds) of this skill.").Value; DURATION = ((BaseUnityPlugin)this).Config.Bind<float>("FMJ :: Stats", "Duration", 0.2f, "The base duration of the FMJ state.").Value; KNOCKBACK = ((BaseUnityPlugin)this).Config.Bind<float>("FMJ :: Stats", "Knockback Force", 4200f, "The base knockback dealt by this skill.").Value; GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/Railgunner/TracerRailgunLight.prefab").WaitForCompletion(); Tracer = Object.Instantiate<GameObject>(val, TracerHolder.transform); ((Object)Tracer).name = "CommandoFMJTracer"; Transform transform = Tracer.transform; transform.localScale *= 2f; Tracer.GetComponent<EffectComponent>().applyScale = false; HitImpact = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/Commando/FMJImpact.prefab").WaitForCompletion(); MuzzleFlash = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/MuzzleflashFMJ.prefab").WaitForCompletion(); Material material = Addressables.LoadAssetAsync<Material>((object)"RoR2/Base/Commando/matCommandoFMJBullet.mat").WaitForCompletion(); ParticleSystemRenderer[] components = Tracer.GetComponents<ParticleSystemRenderer>(); foreach (ParticleSystemRenderer val2 in components) { ((Renderer)val2).material = material; } FMJContentPack fMJContentPack = new FMJContentPack("FMJCONTENTPACK"); fMJContentPack.RegisterEntityState<FMJState>(); fMJContentPack.RegisterGameObject(Tracer); SkillDef val3 = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Commando/CommandoBodyFireFMJ.asset").WaitForCompletion(); val3.activationState = new SerializableEntityStateType(typeof(FMJState)); val3.baseRechargeInterval = COOLDOWN; FMJNAME = "COMMANDOSKILLFMJ_NAME"; FMJDESC = "COMMANDOSKILLFMJ_DESC"; val3.skillNameToken = FMJNAME; val3.skillDescriptionToken = FMJDESC; Language.LoadStrings += new hook_LoadStrings(AddNewText); } public float d(float f) { return f * 100f; } public void AddNewText(orig_LoadStrings orig, Language self) { orig.Invoke(self); if (!self.TokenIsRegistered(FMJNAME)) { self.stringsByToken.Add(FMJNAME, "Full Metal Jacket"); } if (!self.TokenIsRegistered(FMJDESC)) { self.stringsByToken.Add(FMJDESC, $"Fire a <style=cIsUtility>piercing round</style> for <style=cIsDamage>{d(DAMAGE_COEFFICIENT)}% damage</style>, knocking targets back."); } } } public class FMJState : BaseSkillState { public float duration; public override void OnEnter() { ((BaseState)this).OnEnter(); duration = CommandoFMJ.DURATION / ((BaseState)this).attackSpeedStat; FireRound(); } public void FireRound() { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Expected O, but got Unknown //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).PlayAnimation("Gesture, Additive", "FireFMJ", "FireFMJ.playbackRate", duration * 2f); ((EntityState)this).PlayAnimation("Gesture, Override", "FireFMJ", "FireFMJ.playbackRate", duration * 2f); AkSoundEngine.PostEvent(1069717260u, ((EntityState)this).gameObject); EffectManager.SimpleMuzzleFlash(CommandoFMJ.MuzzleFlash, ((EntityState)this).gameObject, "MuzzleLeft", false); BulletAttack val = new BulletAttack(); val.damage = ((BaseState)this).damageStat * CommandoFMJ.DAMAGE_COEFFICIENT; val.force = CommandoFMJ.KNOCKBACK; Ray aimRay = ((EntityState)this).inputBank.GetAimRay(); val.aimVector = ((Ray)(ref aimRay)).direction; val.muzzleName = "MuzzleLeft"; val.falloffModel = (FalloffModel)0; val.tracerEffectPrefab = CommandoFMJ.Tracer; val.hitEffectPrefab = CommandoFMJ.HitImpact; val.isCrit = ((BaseState)this).RollCrit(); val.owner = ((EntityState)this).gameObject; val.procCoefficient = 1f; val.radius = 0.4f; val.stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask; val.origin = ((EntityState)this).inputBank.aimOrigin; val.smartCollision = false; val.maxSpread = 0f; val.minSpread = 0f; val.weapon = ((EntityState)this).gameObject; if (((EntityState)this).isAuthority) { val.Fire(); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge >= duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)2; } } public class FMJContentPack : IContentPackProvider { private string _identifier; private ContentPack pack = new ContentPack(); private Assembly assembly; public List<Type> entityStates = new List<Type>(); public List<EffectDef> effectDefs = new List<EffectDef>(); public string identifier { get { return _identifier; } set { _identifier = value; } } public FMJContentPack(string identifier) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown this.identifier = identifier; ContentManager.collectContentPackProviders += (CollectContentPackProvidersDelegate)delegate(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); }; } public void RegisterGameObject(GameObject asset) { //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)asset.GetComponent<EffectComponent>())) { EffectDef val = new EffectDef(); val._prefab = asset; val.prefabName = ((Object)asset).name; val.prefabEffectComponent = asset.GetComponent<EffectComponent>(); effectDefs.Add(val); } } public void RegisterEntityState<T>() where T : EntityState { entityStates.Add(typeof(T)); } public void RegisterEntityState(Type stateType) { if (!stateType.IsAssignableFrom(typeof(EntityState))) { throw new Exception("Attempted to register state that wasn't assignable from type EntityState. This isn't allowed"); } entityStates.Add(stateType); } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { pack.entityStateTypes.Add(entityStates.ToArray()); pack.effectDefs.Add(effectDefs.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { pack.identifier = identifier; ContentPack.Copy(pack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } }