Decompiled source of DarthVaderMod v2.2.0
DarthVaderMod.dll
Decompiled 2 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using DarthVaderMod.Content.Controllers; using DarthVaderMod.Modules; using DarthVaderMod.Modules.Characters; using DarthVaderMod.Modules.Networking; using DarthVaderMod.Modules.Survivors; using DarthVaderMod.SkillStates; using DarthVaderMod.SkillStates.BaseStates; using EmotesAPI; using EntityStates; using HG; using HG.BlendableTypes; using On.RoR2; using R2API; using R2API.Networking; using R2API.Networking.Interfaces; using R2API.Utils; using RiskOfOptions; using RiskOfOptions.OptionConfigs; using RiskOfOptions.Options; using RoR2; using RoR2.Achievements; using RoR2.Audio; using RoR2.ContentManagement; using RoR2.Skills; using RoR2.Stats; using RoR2.UI; using TMPro; using UnityEngine; using UnityEngine.AddressableAssets; using UnityEngine.Networking; using UnityEngine.Rendering; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("DarthVaderMod")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("DarthVaderMod")] [assembly: AssemblyTitle("DarthVaderMod")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] [module: UnverifiableCode] namespace DarthVaderMod { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] [BepInPlugin("com.PopcornFactory.DarthVaderMod", "DarthVaderMod", "2.2.0")] public class DarthVaderPlugin : BaseUnityPlugin { public const string MODUID = "com.PopcornFactory.DarthVaderMod"; public const string MODNAME = "DarthVaderMod"; public const string MODVERSION = "2.2.0"; public const string DEVELOPER_PREFIX = "POPCORN"; public static DarthVaderPlugin instance; public EnergySystem energySystem; public DarthVaderPassive passiveSkillSlot; private uint entranceID; private uint entranceVoiceID; public float currentattackspeed; private void Awake() { instance = this; Log.Init(((BaseUnityPlugin)this).Logger); Assets.Initialize(); Config.ReadConfig(); if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions")) { Config.SetupRiskOfOptions(); } States.RegisterStates(); Buffs.RegisterBuffs(); Projectiles.RegisterProjectiles(); Tokens.AddTokens(); ItemDisplays.PopulateDisplays(); Unlockables.AddUnlockables(); new DarthVader().Initialize(isHidden: false); new ContentPacks().Initialize(); Hook(); SetupNetworkMessages(); } private void SetupNetworkMessages() { NetworkingAPI.RegisterMessageType<PerformForceNetworkRequest>(); NetworkingAPI.RegisterMessageType<EndRageBuffNetworkRequest>(); NetworkingAPI.RegisterMessageType<DeflectClientHandlerNetworkRequest>(); NetworkingAPI.RegisterMessageType<InflictDamageOnDarthNetworkRequest>(); NetworkingAPI.RegisterMessageType<InflictDamageOnEnemyFromDeflectNetworkRequest>(); } private void Hook() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Expected O, but got Unknown //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Expected O, but got Unknown //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Expected O, but got Unknown CharacterBody.RecalculateStats += new hook_RecalculateStats(CharacterBody_RecalculateStats); GlobalEventManager.OnHitEnemy += new hook_OnHitEnemy(GlobalEventManager_OnHitEnemy); CharacterBody.OnDeathStart += new hook_OnDeathStart(CharacterBody_OnDeathStart); CharacterModel.Awake += new hook_Awake(CharacterModel_Awake); if (Chainloader.PluginInfos.ContainsKey("com.weliveinasociety.CustomEmotesAPI")) { SurvivorCatalog.Init += new hook_Init(SurvivorCatalog_Init); } GlobalEventManager.onCharacterDeathGlobal += delegate(DamageReport damageReport) { //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Expected O, but got Unknown if (damageReport != null && damageReport.victimBody.isPlayerControlled && Object.op_Implicit((Object)(object)damageReport.victimBody)) { string bestMasterName = Util.GetBestMasterName(damageReport.victimMaster); if (damageReport.victimBody.baseNameToken == "POPCORN_DARTHVADER_BODY_NAME") { Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = "There was too much Sand." }); } } }; } private void SurvivorCatalog_Init(orig_Init orig) { orig.Invoke(); foreach (SurvivorDef allSurvivorDef in SurvivorCatalog.allSurvivorDefs) { if (((Object)allSurvivorDef.bodyPrefab).name == "DarthVaderBody") { CustomEmotesAPI.ImportArmature(allSurvivorDef.bodyPrefab, Assets.mainAssetBundle.LoadAsset<GameObject>("EmoteDarthVader"), 0, true); } } } private void CharacterModel_Awake(orig_Awake orig, CharacterModel self) { orig.Invoke(self); if (((Object)((Component)self).gameObject).name.Contains("DarthVaderDisplay")) { entranceVoiceID = AkSoundEngine.PostEvent("DarthVoice", ((Component)self).gameObject); if (Config.enableMusic.Value) { entranceID = AkSoundEngine.PostEvent("DarthIntroTheme", ((Component)self).gameObject); } } else { AkSoundEngine.StopPlayingID(entranceVoiceID); AkSoundEngine.StopPlayingID(entranceID); } } private void CharacterBody_OnDeathStart(orig_OnDeathStart orig, CharacterBody self) { orig.Invoke(self); if (self.baseNameToken == "POPCORN_DARTHVADER_BODY_NAME") { AkSoundEngine.PostEvent("DarthDeath", ((Component)self).gameObject); } } private void GlobalEventManager_OnHitEnemy(orig_OnHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim) { orig.Invoke(self, damageInfo, victim); if ((Object)(object)damageInfo.attacker != (Object)null && damageInfo != null && ((Object)damageInfo.attacker).name.Contains("DarthVaderBody")) { DarthVaderController component = damageInfo.attacker.GetComponent<DarthVaderController>(); if (Object.op_Implicit((Object)(object)component)) { component.SetMaxDamage(damageInfo.damage); } } } private void CharacterBody_RecalculateStats(orig_RecalculateStats orig, CharacterBody self) { if (!Object.op_Implicit((Object)(object)self.healthComponent)) { return; } orig.Invoke(self); if (!Object.op_Implicit((Object)(object)self) || !(self.baseNameToken == "POPCORN_DARTHVADER_BODY_NAME")) { return; } EnergySystem component = ((Component)self).GetComponent<EnergySystem>(); if (self.HasBuff(Buffs.DeflectBuff)) { self.moveSpeed *= 0.5f; } if (!self.HasBuff(Buffs.RageBuff)) { float moveSpeed = self.moveSpeed; if (Config.limitMovespeed.Value && moveSpeed > 7f) { self.moveSpeed = 7f; float num = moveSpeed - 7f; self.armor += num; } float attackSpeed = self.attackSpeed; if (Object.op_Implicit((Object)(object)component)) { component.meleeForceEnergyGain = attackSpeed; } if (attackSpeed > 1f) { self.attackSpeed = 1f; float num2 = attackSpeed / 1f; self.damage *= num2; } } else if (self.HasBuff(Buffs.RageBuff)) { self.moveSpeed *= 2f; self.armor = (self.moveSpeed - 7f) * 2f; self.attackSpeed *= 2f; self.damage *= self.attackSpeed; } } } 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); } } } namespace DarthVaderMod.SkillStates { public class Deflect : BaseSkillState { public DarthVaderController DarthVadercon; public DarthVaderPassive passiveSkillSlot; public EnergySystem energySystem; public bool isEnergy; public override void OnEnter() { //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Expected O, but got Unknown ((BaseState)this).OnEnter(); DarthVadercon = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<DarthVaderController>(); energySystem = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<EnergySystem>(); passiveSkillSlot = ((EntityState)this).gameObject.GetComponent<DarthVaderPassive>(); NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.DeflectBuff.buffIndex, 1, -1f); if (passiveSkillSlot.isEnergyPassive()) { isEnergy = true; if (Object.op_Implicit((Object)(object)energySystem)) { energySystem.ifEnergyRegenAllowed = false; } ((EntityState)this).characterBody.skillLocator.utility.AddOneStock(); ((EntityState)this).PlayAnimation("RightArm, Override", "Deflect", "Attack.playbackRate", 10000f, 0f); } else { isEnergy = false; ((EntityState)this).PlayAnimation("RightArm, Override", "Deflect", "Attack.playbackRate", 6f, 0f); } HealthComponent.TakeDamage += new hook_TakeDamage(HealthComponent_TakeDamage); } public override void Update() { ((EntityState)this).Update(); ((EntityState)this).PlayCrossfade("RightArm, Override", "Deflect", "Attack.playbackRate", 1f, 0.01f); if (!((EntityState)this).isAuthority) { return; } if (isEnergy) { if (!((BaseSkillState)this).IsKeyDownAuthority() && !((BaseSkillState)this).IsKeyDownAuthority()) { ((EntityState)this).outer.SetNextStateToMain(); } } else if (((EntityState)this).fixedAge > 6f && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); } public override void OnExit() { //IL_002e: 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_004b: Expected O, but got Unknown ((EntityState)this).OnExit(); if (Object.op_Implicit((Object)(object)energySystem)) { energySystem.ifEnergyRegenAllowed = true; } ((EntityState)this).characterBody.SetBuffCount(Buffs.DeflectBuff.buffIndex, 0); HealthComponent.TakeDamage -= new hook_TakeDamage(HealthComponent_TakeDamage); } 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)3; } private void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo) { //IL_0029: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Invalid comparison between Unknown and I4 //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Expected O, but got Unknown //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_0112: 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_012f: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Invalid comparison between Unknown and I4 //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Invalid comparison between Unknown and I4 //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_02ab: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02bc: 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_02d2: Unknown result type (might be due to invalid IL or missing references) //IL_02d3: Unknown result type (might be due to invalid IL or missing references) //IL_02d5: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Expected O, but got Unknown //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_031d: Unknown result type (might be due to invalid IL or missing references) //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_0324: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Expected O, but got Unknown if (Object.op_Implicit((Object)(object)self) && damageInfo != null && Object.op_Implicit((Object)(object)damageInfo.attacker) && (int)DamageTypeCombo.op_Implicit(damageInfo.damageType & DamageTypeCombo.op_Implicit((DamageType)2)) <= 0 && damageInfo.damage > 0f && self.body.HasBuff(Buffs.DeflectBuff.buffIndex)) { DamageInfo val = new DamageInfo(); val.damage = damageInfo.damage * 2f * (1f + self.body.master.luck); val.position = damageInfo.attacker.transform.position; val.force = Vector3.zero; val.damageColorIndex = (DamageColorIndex)0; val.crit = Util.CheckRoll(self.body.crit, self.body.master); val.attacker = ((Component)self).gameObject; val.inflictor = null; val.damageType = DamageTypeCombo.op_Implicit((DamageType)0); val.procCoefficient = 1f; val.procChainMask = default(ProcChainMask); passiveSkillSlot = ((Component)self).gameObject.GetComponent<DarthVaderPassive>(); energySystem = ((Component)self.body).gameObject.GetComponent<EnergySystem>(); Vector3 position = damageInfo.attacker.transform.position; Vector3 val2 = position - self.body.transform.position; bool flag = (int)damageInfo.damageColorIndex != 11 && (int)DamageTypeCombo.op_Implicit(damageInfo.damageType) != 131088; if (flag) { damageInfo.rejected = true; } if (passiveSkillSlot.isEnergyPassive() && flag) { NetMessageExtensions.Send((INetMessage)(object)new DeflectClientHandlerNetworkRequest(damageInfo.attacker.gameObject.GetComponent<CharacterBody>().masterObjectId, self.body.masterObjectId, damageInfo.damage), (NetworkDestination)1); } else if (!passiveSkillSlot.isEnergyPassive()) { AkSoundEngine.PostEvent("DarthDeflect", ((Component)self.body).gameObject); damageInfo.rejected = true; if (damageInfo.attacker.gameObject.GetComponent<CharacterBody>().baseNameToken != "POPCORN_DARTHVADER_BODY_NAME" && (Object)(object)damageInfo.attacker != (Object)null) { damageInfo.attacker.GetComponent<CharacterBody>().healthComponent.TakeDamage(val); } if (((Vector3)(ref val2)).magnitude >= 3f) { EffectManager.SpawnEffect(Assets.blasterShotEffect, new EffectData { origin = self.body.transform.position, scale = 1f, rotation = Quaternion.LookRotation(val2) }, true); } else if (((Vector3)(ref val2)).magnitude < 3f) { EffectManager.SpawnEffect(Assets.swordHitImpactEffect, new EffectData { origin = position, scale = 1f, rotation = Quaternion.LookRotation(val2) }, true); } } } orig.Invoke(self, damageInfo); } } public class Force : BaseSkillState { public DarthVaderController DarthVadercon; public EnergySystem energySystem; public DarthVaderPassive passiveSkillSlot; public HurtBox Target; public float maxTrackingDistance = 100f; public float maxTrackingAngle = 30f; public float pullRange; public float pushRange; private ChildLocator child; public GameObject blastEffectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/effects/SonicBoomEffect"); public float chargeTime = 0.25f; public float castTime = 0.25f; public float duration; public bool hasFired; public bool isPull; public override void OnEnter() { //IL_01aa: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); isPull = false; if (!((BaseState)this).HasBuff(Buffs.RageBuff)) { pushRange = 150f; pullRange = 0f; } else if (((BaseState)this).HasBuff(Buffs.RageBuff)) { pushRange = 50f; pullRange = 0f; } hasFired = false; duration = chargeTime + castTime; ((BaseState)this).StartAimMode(0.5f + duration, false); DarthVadercon = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<DarthVaderController>(); passiveSkillSlot = ((EntityState)this).gameObject.GetComponent<DarthVaderPassive>(); energySystem = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<EnergySystem>(); if (passiveSkillSlot.isEnergyPassive()) { if (!Object.op_Implicit((Object)(object)energySystem)) { return; } if (energySystem.currentForceEnergy > StaticValues.forcePushPullCost) { ((EntityState)this).characterBody.skillLocator.secondary.AddOneStock(); AkSoundEngine.PostEvent("DarthForcePush", ((EntityState)this).gameObject); ((EntityState)this).PlayCrossfade("LeftArm, Override", "ForceStart", "Attack.playbackRate", chargeTime, 0.05f); energySystem.SpendEnergy(StaticValues.forcePushPullCost); energySystem.TriggerGlow(0.1f, 0.3f, Color.black); } else { ((EntityState)this).characterBody.skillLocator.secondary.AddOneStock(); energySystem.TriggerGlow(0.1f, 0.3f, Color.blue); if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } } else { AkSoundEngine.PostEvent("DarthForcePush", ((EntityState)this).gameObject); ((EntityState)this).PlayCrossfade("LeftArm, Override", "ForceStart", "Attack.playbackRate", chargeTime, 0.05f); } } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_014e: 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_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0101: 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_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0115: 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_011e: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (!(((EntityState)this).fixedAge > chargeTime) || !((EntityState)this).isAuthority) { return; } if (((EntityState)this).inputBank.skill2.down && !hasFired) { isPull = true; hasFired = true; ((EntityState)this).PlayCrossfade("LeftArm, Override", "ForcePull", "Attack.playbackRate", castTime, 0.05f); } else if (!hasFired) { isPull = false; hasFired = true; ((EntityState)this).PlayCrossfade("LeftArm, Override", "ForcePush", "Attack.playbackRate", castTime, 0.05f); } if (((EntityState)this).fixedAge > duration && ((EntityState)this).isAuthority) { Ray aimRay; if (isPull) { NetworkInstanceId masterObjectId = ((EntityState)this).characterBody.masterObjectId; aimRay = ((BaseState)this).GetAimRay(); Vector3 origin = ((Ray)(ref aimRay)).origin; aimRay = ((BaseState)this).GetAimRay(); Vector3 origin2 = origin - ((Ray)(ref aimRay)).direction; aimRay = ((BaseState)this).GetAimRay(); NetMessageExtensions.Send((INetMessage)(object)new PerformForceNetworkRequest(masterObjectId, origin2, ((Ray)(ref aimRay)).direction, pullRange), (NetworkDestination)1); } else { NetworkInstanceId masterObjectId2 = ((EntityState)this).characterBody.masterObjectId; aimRay = ((BaseState)this).GetAimRay(); Vector3 origin3 = ((Ray)(ref aimRay)).origin; aimRay = ((BaseState)this).GetAimRay(); Vector3 origin4 = origin3 - ((Ray)(ref aimRay)).direction; aimRay = ((BaseState)this).GetAimRay(); NetMessageExtensions.Send((INetMessage)(object)new PerformForceNetworkRequest(masterObjectId2, origin4, ((Ray)(ref aimRay)).direction, pushRange), (NetworkDestination)1); } ((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 RageMode : BaseSkillState { public float timer; public EnergySystem energySystem; public DarthVaderController DarthVadercon; public DarthVaderPassive passiveSkillSlot; private GameObject blasteffectPrefab = Resources.Load<GameObject>("prefabs/effects/ImpBossBlink"); public GameObject effectPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/effects/SonicBoomEffect"); public bool isEnergy; public override void OnEnter() { //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_02f8: Unknown result type (might be due to invalid IL or missing references) //IL_02fd: Unknown result type (might be due to invalid IL or missing references) //IL_0304: Unknown result type (might be due to invalid IL or missing references) //IL_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0320: Expected O, but got Unknown //IL_01f3: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Expected O, but got Unknown ((BaseState)this).OnEnter(); DarthVadercon = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<DarthVaderController>(); passiveSkillSlot = ((EntityState)this).gameObject.GetComponent<DarthVaderPassive>(); energySystem = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<EnergySystem>(); if (passiveSkillSlot.isEnergyPassive()) { if (!Object.op_Implicit((Object)(object)energySystem) || !Object.op_Implicit((Object)(object)DarthVadercon)) { return; } isEnergy = true; if (energySystem.currentForceEnergy > energySystem.maxForceEnergy * 0.98f) { ((EntityState)this).characterBody.skillLocator.special.AddOneStock(); energySystem.TriggerGlow(0.1f, 0.3f, Color.black); if (!((EntityState)this).characterBody.HasBuff(Buffs.RageBuff)) { NetworkingHelpers.ApplyBuff(((EntityState)this).characterBody, Buffs.RageBuff.buffIndex, 1, -1f); ((EntityState)this).characterBody.healthComponent.Heal(((EntityState)this).characterBody.healthComponent.fullCombinedHealth, default(ProcChainMask), true); RageEffectController component = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<RageEffectController>(); if (!Object.op_Implicit((Object)(object)component)) { component = ((Component)((EntityState)this).characterBody).gameObject.AddComponent<RageEffectController>(); component.charbody = ((EntityState)this).characterBody; } if (((EntityState)this).isAuthority) { DarthVadercon.PlayRageLoop(); } EffectManager.SpawnEffect(blasteffectPrefab, new EffectData { origin = ((EntityState)this).characterBody.footPosition, scale = 1f }, true); } } else { ((EntityState)this).characterBody.skillLocator.special.AddOneStock(); energySystem.TriggerGlow(0.1f, 0.3f, Color.blue); if (((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } return; } isEnergy = false; if (!((EntityState)this).characterBody.HasBuff(Buffs.RageBuff)) { ((EntityState)this).characterBody.AddTimedBuffAuthority(Buffs.RageBuff.buffIndex, 15f); ((EntityState)this).characterBody.healthComponent.Heal(((EntityState)this).characterBody.healthComponent.fullCombinedHealth, default(ProcChainMask), true); RageEffectController component2 = ((Component)((EntityState)this).characterBody).gameObject.GetComponent<RageEffectController>(); if (!Object.op_Implicit((Object)(object)component2)) { component2 = ((Component)((EntityState)this).characterBody).gameObject.AddComponent<RageEffectController>(); component2.charbody = ((EntityState)this).characterBody; } if (((EntityState)this).isAuthority) { AkSoundEngine.PostEvent("DarthRage", ((EntityState)this).gameObject); } EffectManager.SpawnEffect(blasteffectPrefab, new EffectData { origin = ((EntityState)this).characterBody.footPosition, scale = 1f }, true); } else { ((EntityState)this).characterBody.skillLocator.special.AddOneStock(); } } public override void FixedUpdate() { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Expected O, but got Unknown //IL_007e: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); if (timer > 0.1f) { if (isEnergy && Object.op_Implicit((Object)(object)energySystem)) { energySystem.TriggerGlow(0.05f, 0.05f, new Color(Random.Range(0f, 1f), Random.Range(0f, 1f), Random.Range(0f, 1f), 1f)); } float num = 10f; Quaternion rotation = Util.QuaternionSafeLookRotation(Vector3.up); float num2 = 0.01f; rotation.x += Random.Range(0f - num2, num2) * num; rotation.y += Random.Range(0f - num2, num2) * num; timer = 0f; EffectManager.SpawnEffect(effectPrefab, new EffectData { origin = ((EntityState)this).characterBody.corePosition, scale = 1f, rotation = rotation }, true); } else { timer += Time.fixedDeltaTime; } if (((EntityState)this).fixedAge > 0.5f && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void OnExit() { ((EntityState)this).OnExit(); } 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 RageEffectController : MonoBehaviour { public CharacterBody charbody; private GameObject effectObj; public float timer; public void Start() { //IL_001e: 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_0028: Unknown result type (might be due to invalid IL or missing references) charbody = ((Component)this).gameObject.GetComponent<CharacterBody>(); effectObj = Object.Instantiate<GameObject>(Assets.rageAuraEffect, charbody.footPosition, Quaternion.LookRotation(Vector3.up)); effectObj.transform.parent = ((Component)charbody).gameObject.transform; } public void FixedUpdate() { timer += Time.fixedDeltaTime; if (timer > 2f) { Object.Destroy((Object)(object)effectObj); Object.Destroy((Object)(object)this); } if (!Object.op_Implicit((Object)(object)charbody)) { Object.Destroy((Object)(object)effectObj); } } public void OnDestroy() { Object.Destroy((Object)(object)effectObj); } } public class SlashCombo : BaseMeleeAttack { public DarthVaderController DarthVadercon; public EnergySystem energySystem; public DarthVaderPassive passiveSkillSlot; public HurtBox Target; public override void OnEnter() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) hitboxName = "Sword"; damageType = (DamageType)0; damageCoefficient = Config.primaryCoefficient.Value; procCoefficient = 1f; pushForce = 300f; bonusForce = new Vector3(0f, -300f, 0f); baseDuration = 1f; attackStartTime = 0.2f; attackEndTime = 0.4f; baseEarlyExitTime = 0.4f; hitStopDuration = 0.2f; attackRecoil = 0.5f; hitHopVelocity = 10f; swingSoundString = "DarthLightSaberSwing"; hitSoundString = ""; muzzleString = ChooseAnimationString(); swingEffectPrefab = Assets.swordSwingEffect; hitEffectPrefab = Assets.swordHitImpactEffect; impactSound = Assets.swordHitSoundEvent.index; base.OnEnter(); DarthVadercon = ((EntityState)this).gameObject.GetComponent<DarthVaderController>(); passiveSkillSlot = ((EntityState)this).gameObject.GetComponent<DarthVaderPassive>(); energySystem = ((EntityState)this).gameObject.GetComponent<EnergySystem>(); } private string ChooseAnimationString() { string result = "SwingLeft"; switch (swingIndex) { case 0: result = "SwingLeft"; break; case 1: result = "SwingRight"; break; case 2: result = "SwingCenter"; break; case 3: result = "SwingRight"; break; } return result; } protected override void PlayAttackAnimation() { base.PlayAttackAnimation(); } protected override void PlaySwingEffect() { base.PlaySwingEffect(); } protected override void OnHitEnemyAuthority() { //IL_0067: Unknown result type (might be due to invalid IL or missing references) base.OnHitEnemyAuthority(); if (passiveSkillSlot.isEnergyPassive()) { if (Object.op_Implicit((Object)(object)DarthVadercon)) { if (Object.op_Implicit((Object)(object)energySystem)) { energySystem.MeleeEnergyGain(StaticValues.meleeOnHitForceEnergyGain); } if (Object.op_Implicit((Object)(object)energySystem)) { energySystem.TriggerGlow(0.1f, 0.3f, Color.white); } } } else if (!((BaseState)this).HasBuff(Buffs.RageBuff)) { ((EntityState)this).skillLocator.DeductCooldownFromAllSkillsServer(1f); } } protected override void SetNextState() { int num = swingIndex; num++; if (num > 3) { num = 0; } ((EntityState)this).outer.SetNextState((EntityState)(object)new SlashCombo { swingIndex = num }); } public override void OnExit() { base.OnExit(); } } } namespace DarthVaderMod.SkillStates.BaseStates { public class BaseMeleeAttack : BaseSkillState { public int swingIndex; protected string hitboxName = "Sword"; protected DamageType damageType = (DamageType)0; protected float damageCoefficient = 3.5f; protected float procCoefficient = 1f; protected float pushForce = 300f; protected Vector3 bonusForce = Vector3.zero; protected float baseDuration = 1f; protected float attackStartTime = 0.2f; protected float attackEndTime = 0.4f; protected float baseEarlyExitTime = 0.4f; protected float hitStopDuration = 0.012f; protected float attackRecoil = 0.75f; protected float hitHopVelocity = 4f; protected bool cancelled = false; protected string swingSoundString = ""; protected string hitSoundString = ""; protected string muzzleString = "SwingCenter"; protected GameObject swingEffectPrefab; protected GameObject hitEffectPrefab; protected NetworkSoundEventIndex impactSound; private float earlyExitTime; public float duration; private bool hasFired; private float hitPauseTimer; private OverlapAttack attack; protected bool inHitPause; private bool hasHopped; protected float stopwatch; protected Animator animator; private HitStopCachedState hitStopCachedState; private Vector3 storedVelocity; public override void OnEnter() { //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0157: 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_0196: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) ((BaseState)this).OnEnter(); duration = baseDuration / ((BaseState)this).attackSpeedStat; earlyExitTime = baseEarlyExitTime / ((BaseState)this).attackSpeedStat; hasFired = false; animator = ((EntityState)this).GetModelAnimator(); ((BaseState)this).StartAimMode(0.5f + duration, false); ((EntityState)this).characterBody.outOfCombatStopwatch = 0f; animator.SetBool("attacking", true); animator.SetFloat("Slash.playbackRate", ((BaseState)this).attackSpeedStat); HitBoxGroup hitBoxGroup = null; Transform modelTransform = ((EntityState)this).GetModelTransform(); if (Object.op_Implicit((Object)(object)modelTransform)) { hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == hitboxName); } PlayAttackAnimation(); attack = new OverlapAttack(); attack.damageType = DamageTypeCombo.op_Implicit(damageType); attack.attacker = ((EntityState)this).gameObject; attack.inflictor = ((EntityState)this).gameObject; attack.teamIndex = ((BaseState)this).GetTeam(); attack.damage = damageCoefficient * ((BaseState)this).damageStat; attack.procCoefficient = procCoefficient; attack.hitEffectPrefab = hitEffectPrefab; attack.forceVector = bonusForce; attack.pushAwayForce = pushForce; attack.hitBoxGroup = hitBoxGroup; attack.isCrit = ((BaseState)this).RollCrit(); attack.impactSound = impactSound; } protected virtual void PlayAttackAnimation() { ((EntityState)this).PlayCrossfade("RightArm, Override", "Slash" + (1 + swingIndex), "Slash.playbackRate", duration / 2f, 0.01f); } public override void OnExit() { if (!hasFired && !cancelled) { FireAttack(); } ((EntityState)this).OnExit(); animator.SetBool("attacking", false); } protected virtual void PlaySwingEffect() { EffectManager.SimpleMuzzleFlash(swingEffectPrefab, ((EntityState)this).gameObject, muzzleString, true); } protected virtual void OnHitEnemyAuthority() { //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) Util.PlaySound(hitSoundString, ((EntityState)this).gameObject); if (!hasHopped) { if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && !((EntityState)this).characterMotor.isGrounded && hitHopVelocity > 0f) { ((BaseState)this).SmallHop(((EntityState)this).characterMotor, hitHopVelocity); } hasHopped = true; } if (!inHitPause && hitStopDuration > 0f) { storedVelocity = ((EntityState)this).characterMotor.velocity; hitStopCachedState = ((BaseState)this).CreateHitStopCachedState(((EntityState)this).characterMotor, animator, "Slash.playbackRate"); hitPauseTimer = hitStopDuration / ((BaseState)this).attackSpeedStat; inHitPause = true; } } private void FireAttack() { if (!hasFired) { hasFired = true; Util.PlayAttackSpeedSound(swingSoundString, ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat); if (((EntityState)this).isAuthority) { PlaySwingEffect(); ((BaseState)this).AddRecoil(-1f * attackRecoil, -2f * attackRecoil, -0.5f * attackRecoil, 0.5f * attackRecoil); } } if (((EntityState)this).isAuthority && attack.Fire((List<HurtBox>)null)) { OnHitEnemyAuthority(); } } protected virtual void SetNextState() { int num = ((swingIndex == 0) ? 1 : 0); ((EntityState)this).outer.SetNextState((EntityState)(object)new BaseMeleeAttack { swingIndex = num }); } public override void FixedUpdate() { //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) ((EntityState)this).FixedUpdate(); hitPauseTimer -= Time.fixedDeltaTime; if (hitPauseTimer <= 0f && inHitPause) { ((BaseState)this).ConsumeHitStopCachedState(hitStopCachedState, ((EntityState)this).characterMotor, animator); inHitPause = false; ((EntityState)this).characterMotor.velocity = storedVelocity; } if (!inHitPause) { stopwatch += Time.fixedDeltaTime; } else { if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor)) { ((EntityState)this).characterMotor.velocity = Vector3.zero; } if (Object.op_Implicit((Object)(object)animator)) { animator.SetFloat("Swing.playbackRate", 0f); } if (Object.op_Implicit((Object)(object)animator)) { animator.SetFloat("Slash.playbackRate", 0f); } } if (stopwatch >= duration * attackStartTime && stopwatch <= duration * attackEndTime) { FireAttack(); } if (stopwatch >= duration - earlyExitTime && ((EntityState)this).isAuthority && ((EntityState)this).inputBank.skill1.down) { if (!hasFired) { FireAttack(); } SetNextState(); } else if (stopwatch >= duration && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } public override InterruptPriority GetMinimumInterruptPriority() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) return (InterruptPriority)1; } public override void OnSerialize(NetworkWriter writer) { ((BaseSkillState)this).OnSerialize(writer); writer.Write(swingIndex); } public override void OnDeserialize(NetworkReader reader) { ((BaseSkillState)this).OnDeserialize(reader); swingIndex = reader.ReadInt32(); } } public class BaseTimedSkillState : BaseSkillState { public static float TimedBaseDuration; public static float TimedBaseCastStartTime; public static float TimedBaseCastEndTime; protected float duration; protected float castStartTime; protected float castEndTime; protected bool hasFired; protected bool isFiring; protected bool hasExited; protected virtual void InitDurationValues(float baseDuration, float baseCastStartTime, float baseCastEndTime = 1f) { TimedBaseDuration = baseDuration; TimedBaseCastStartTime = baseCastStartTime; TimedBaseCastEndTime = baseCastEndTime; duration = TimedBaseDuration / ((BaseState)this).attackSpeedStat; castStartTime = baseCastStartTime * duration; castEndTime = baseCastEndTime * duration; } protected virtual void OnCastEnter() { } protected virtual void OnCastFixedUpdate() { } protected virtual void OnCastUpdate() { } protected virtual void OnCastExit() { } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (!hasFired && ((EntityState)this).fixedAge > castStartTime) { hasFired = true; OnCastEnter(); } bool flag = ((EntityState)this).fixedAge >= castStartTime; bool flag2 = ((EntityState)this).fixedAge >= castEndTime; isFiring = false; if ((flag && !flag2) || (flag && flag2 && !hasFired)) { isFiring = true; OnCastFixedUpdate(); } if (flag2 && !hasExited) { hasExited = true; OnCastExit(); } if (((EntityState)this).fixedAge > duration) { ((EntityState)this).outer.SetNextStateToMain(); } } public override void Update() { ((EntityState)this).Update(); if (isFiring) { OnCastUpdate(); } } } public class ExampleTimedSkillState : BaseTimedSkillState { public static float SkillBaseDuration = 1.5f; public static float SkillStartTime = 0.2f; public static float SkillEndTime = 0.9f; public override void OnEnter() { ((BaseState)this).OnEnter(); InitDurationValues(SkillBaseDuration, SkillStartTime, SkillEndTime); } protected override void OnCastEnter() { } protected override void OnCastFixedUpdate() { } protected override void OnCastExit() { } } public class ExampleDelayedSkillState : BaseTimedSkillState { public static float SkillBaseDuration = 1.5f; public static float SkillStartTime = 0.2f; public override void OnEnter() { ((BaseState)this).OnEnter(); InitDurationValues(SkillBaseDuration, SkillStartTime); } protected override void OnCastEnter() { } } public class SpawnState : BaseSkillState { public override void OnEnter() { ((BaseState)this).OnEnter(); } public override void OnExit() { ((EntityState)this).OnExit(); } public override void FixedUpdate() { ((EntityState)this).FixedUpdate(); if (((EntityState)this).fixedAge > 0f && ((EntityState)this).isAuthority) { ((EntityState)this).outer.SetNextStateToMain(); } } } } namespace DarthVaderMod.Content.Controllers { public class DarthVaderPassive : MonoBehaviour { public SkillDef normalCooldownPassive; public SkillDef energyPassive; public GenericSkill passiveSkillSlot; public bool isEnergyPassive() { if (Object.op_Implicit((Object)(object)energyPassive) && Object.op_Implicit((Object)(object)passiveSkillSlot)) { return (Object)(object)passiveSkillSlot.skillDef == (Object)(object)energyPassive; } return false; } } public class EnergySystem : MonoBehaviour { private enum GlowState { STOP, FLASH, DECAY } public CharacterBody characterBody; public GameObject CustomUIObject; public RectTransform forceMeter; public RectTransform forceMeterGlowRect; public Image forceMeterGlowBackground; public HGTextMeshProUGUI forceNumber; public float maxForceEnergy; public float currentForceEnergy; public float regenForceEnergy; public float drainForceEnergy; public float costmultiplierForceEnergy; public float costflatForceEnergy; public float meleeForceEnergyGain; public DarthVaderPassive passiveSkillSlot; public bool ifEnergyRegenAllowed; public float rageTimer; public float increasingRageTimer; public float rageMeleeMultiplier; public float rageEnergyCost; public float energyDecayTimer; public bool ifEnergyUsed; public bool SetActiveTrue; private float decayConst; private float flashConst; private float glowStopwatch; private Color targetColor; private Color originalColor; private Color currentColor; private GlowState state; public void Awake() { characterBody = ((Component)this).gameObject.GetComponent<CharacterBody>(); } public void Start() { //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_01a9: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) ifEnergyRegenAllowed = true; maxForceEnergy = StaticValues.baseForceEnergy + (characterBody.level - 1f) * StaticValues.levelForceEnergy; currentForceEnergy = maxForceEnergy; regenForceEnergy = maxForceEnergy * StaticValues.regenForceEnergyFraction; drainForceEnergy = maxForceEnergy * StaticValues.drainForceEnergyFraction; costmultiplierForceEnergy = 1f; costflatForceEnergy = 0f; meleeForceEnergyGain = StaticValues.basemeleeForceEnergyGain; rageMeleeMultiplier = 1f; rageEnergyCost = 1f; ifEnergyUsed = false; CustomUIObject = Object.Instantiate<GameObject>(Assets.mainAssetBundle.LoadAsset<GameObject>("darthCustomUI")); CustomUIObject.SetActive(false); SetActiveTrue = false; forceMeter = ((Component)CustomUIObject.transform.GetChild(0)).GetComponent<RectTransform>(); forceMeterGlowBackground = ((Component)CustomUIObject.transform.GetChild(1)).GetComponent<Image>(); forceMeterGlowRect = ((Component)CustomUIObject.transform.GetChild(1)).GetComponent<RectTransform>(); forceNumber = CreateLabel(CustomUIObject.transform, "forceNumber", $"{(int)currentForceEnergy} / {maxForceEnergy}", new Vector2(0f, -110f), 24f); state = GlowState.STOP; decayConst = 1f; flashConst = 1f; glowStopwatch = 1f; originalColor = new Color(1f, 1f, 1f, 0f); targetColor = new Color(1f, 1f, 1f, 1f); currentColor = originalColor; } private HGTextMeshProUGUI CreateLabel(Transform parent, string name, string text, Vector2 position, float textScale) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0064: 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_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject(name); val.transform.parent = parent; val.AddComponent<CanvasRenderer>(); RectTransform val2 = val.AddComponent<RectTransform>(); HGTextMeshProUGUI val3 = val.AddComponent<HGTextMeshProUGUI>(); ((Behaviour)val3).enabled = true; ((TMP_Text)val3).text = text; ((TMP_Text)val3).fontSize = textScale; ((Graphic)val3).color = Color.red; ((TMP_Text)val3).alignment = (TextAlignmentOptions)514; ((TMP_Text)val3).enableWordWrapping = false; ((Transform)val2).localPosition = Vector2.op_Implicit(Vector2.zero); val2.anchorMin = Vector2.zero; val2.anchorMax = Vector2.one; ((Transform)val2).localScale = Vector3.one; val2.sizeDelta = Vector2.zero; val2.anchoredPosition = position; return val3; } private void CalculateEnergyStats() { //IL_01fc: Unknown result type (might be due to invalid IL or missing references) //IL_02a6: Unknown result type (might be due to invalid IL or missing references) //IL_02c9: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)characterBody)) { maxForceEnergy = StaticValues.baseForceEnergy + (characterBody.level - 1f) * StaticValues.levelForceEnergy + 10f * (float)characterBody.master.inventory.GetItemCount(Items.SecondarySkillMagazine) + 30f * (float)characterBody.master.inventory.GetItemCount(Items.UtilitySkillMagazine); regenForceEnergy = maxForceEnergy * StaticValues.regenForceEnergyFraction; costmultiplierForceEnergy = (float)Math.Pow(0.75, characterBody.master.inventory.GetItemCount(Items.AlienHead)); costflatForceEnergy = 5 * characterBody.master.inventory.GetItemCount(Items.LunarBadLuck); if (costmultiplierForceEnergy > 1f) { costmultiplierForceEnergy = 1f; } if (meleeForceEnergyGain < 1f) { meleeForceEnergyGain = StaticValues.basemeleeForceEnergyGain; } } if (ifEnergyUsed) { if (energyDecayTimer > 2f) { energyDecayTimer = 0f; ifEnergyRegenAllowed = true; ifEnergyUsed = false; } else { ifEnergyRegenAllowed = false; energyDecayTimer += Time.fixedDeltaTime; } } if (ifEnergyRegenAllowed) { currentForceEnergy += regenForceEnergy * Time.fixedDeltaTime; } if (currentForceEnergy > maxForceEnergy) { currentForceEnergy = maxForceEnergy; } if (currentForceEnergy <= 1f && characterBody.HasBuff(Buffs.RageBuff)) { currentForceEnergy = 0f; ExitRage(); NetMessageExtensions.Send((INetMessage)(object)new EndRageBuffNetworkRequest(characterBody.masterObjectId), (NetworkDestination)1); } if (Object.op_Implicit((Object)(object)forceNumber)) { ((TMP_Text)forceNumber).SetText($"{(int)currentForceEnergy} / {maxForceEnergy}", true); } if (Object.op_Implicit((Object)(object)forceMeter)) { float num = Mathf.Log10(maxForceEnergy / StaticValues.baseForceEnergy * 10f + 1f) * (currentForceEnergy / maxForceEnergy); ((Transform)forceMeter).localScale = new Vector3(2f * num, 0.05f, 1f); ((Transform)forceMeterGlowRect).localScale = new Vector3(2.3f * num, 0.1f, 1f); } } public void FixedUpdate() { if (characterBody.hasEffectiveAuthority) { CalculateEnergyStats(); } if (characterBody.hasEffectiveAuthority && !SetActiveTrue) { CustomUIObject.SetActive(true); SetActiveTrue = true; } } public void Update() { //IL_00ee: 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_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) if (state != 0) { glowStopwatch += Time.deltaTime; switch (state) { case GlowState.FLASH: { float num = glowStopwatch / flashConst; currentColor = Color.Lerp(originalColor, targetColor, num); if (glowStopwatch > flashConst) { state = GlowState.DECAY; glowStopwatch = 0f; } break; } case GlowState.DECAY: { float num = glowStopwatch / decayConst; currentColor = Color.Lerp(targetColor, originalColor, num); if (glowStopwatch > decayConst) { state = GlowState.STOP; glowStopwatch = 0f; } break; } } } ((Graphic)forceMeterGlowBackground).color = currentColor; } public void MeleeEnergyGain(float Energy) { currentForceEnergy += rageMeleeMultiplier * (Energy * meleeForceEnergyGain); } public void SpendEnergy(float Energy) { float num = Energy - costflatForceEnergy; if (num < 0f) { num = 0f; } float num2 = rageEnergyCost * costmultiplierForceEnergy * num; if (num2 < 0f) { num2 = 0f; } currentForceEnergy -= num2; ifEnergyUsed = true; } public void TriggerGlow(float newDecayTimer, float newFlashTimer, Color newStartingColor) { //IL_0010: 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) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) decayConst = newDecayTimer; flashConst = newFlashTimer; originalColor = new Color(newStartingColor.r, newStartingColor.g, newStartingColor.b, 0f); targetColor = newStartingColor; glowStopwatch = 0f; state = GlowState.FLASH; } public void SetRageState(float increasingRageTimer) { rageEnergyCost = 0f; rageMeleeMultiplier = 0.5f; ifEnergyRegenAllowed = false; currentForceEnergy -= (float)Math.Pow(increasingRageTimer, StaticValues.drainForceEnergyFraction) * Time.fixedDeltaTime; } public void ExitRage() { rageMeleeMultiplier = 1f; ifEnergyRegenAllowed = true; rageEnergyCost = 1f; } public void OnDestroy() { Object.Destroy((Object)(object)CustomUIObject); } } } namespace DarthVaderMod.Modules { internal static class Assets { internal static AssetBundle mainAssetBundle; internal static GameObject swordSwingEffect; internal static GameObject swordHitImpactEffect; internal static GameObject blasterShotEffect; internal static GameObject rageAuraEffect; internal static List<GameObject> networkObjDefs = new List<GameObject>(); internal static NetworkSoundEventDef swordHitSoundEvent; internal static Shader hotpoo = LegacyResourcesAPI.Load<Shader>("Shaders/Deferred/HGStandard"); internal static Material commandoMat; private static string[] assetNames = new string[0]; private const string assetbundleName = "DarthVaderAssetBundle"; private const string csProjName = "DarthVaderMod"; public static Material SpatialMovementBuffMaterial; public static Sprite shieldBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/Common/bdArmorBoost.asset").WaitForCompletion().iconSprite; public static Sprite lightningBuffIcon = Addressables.LoadAssetAsync<BuffDef>((object)"RoR2/Base/ShockNearby/bdTeslaField.asset").WaitForCompletion().iconSprite; public static GameObject voidjailermuzzleEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC1/VoidSurvivor/VoidSurvivorBeamTracer.prefab").WaitForCompletion(); internal static void Initialize() { bool flag = false; LoadAssetBundle(); LoadSoundbank(); PopulateAssets(); } internal static void LoadAssetBundle() { try { if ((Object)(object)mainAssetBundle == (Object)null) { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DarthVaderMod.DarthVaderAssetBundle"); mainAssetBundle = AssetBundle.LoadFromStream(stream); } } catch (Exception ex) { Log.Error("Failed to load assetbundle. Make sure your assetbundle name is setup correctly\n" + ex); return; } assetNames = mainAssetBundle.GetAllAssetNames(); } internal static void LoadSoundbank() { using Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream("DarthVaderMod.DarthVaderBank.bnk"); byte[] array = new byte[stream.Length]; stream.Read(array, 0, array.Length); SoundBanks.Add(array); } internal static void PopulateAssets() { if (!Object.op_Implicit((Object)(object)mainAssetBundle)) { Log.Error("There is no AssetBundle to load assets from."); return; } swordHitSoundEvent = CreateNetworkSoundEventDef("DarthLightsaberHit"); swordSwingEffect = LoadEffect("DarthVaderSwordSwingEffect", parentToTransform: true); swordHitImpactEffect = LoadEffect("ImpactDarthVaderSlash"); blasterShotEffect = LoadEffect("BlasterShot"); rageAuraEffect = LoadEffect("rageAura"); } private static GameObject CreateTracer(string originalTracerName, string newTracerName) { if ((Object)(object)LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/" + originalTracerName) == (Object)null) { return null; } GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/Tracers/" + originalTracerName), newTracerName, true); if (!Object.op_Implicit((Object)(object)val.GetComponent<EffectComponent>())) { val.AddComponent<EffectComponent>(); } if (!Object.op_Implicit((Object)(object)val.GetComponent<VFXAttributes>())) { val.AddComponent<VFXAttributes>(); } if (!Object.op_Implicit((Object)(object)val.GetComponent<NetworkIdentity>())) { val.AddComponent<NetworkIdentity>(); } val.GetComponent<Tracer>().speed = 250f; val.GetComponent<Tracer>().length = 50f; AddNewEffectDef(val); return val; } internal static NetworkSoundEventDef CreateNetworkSoundEventDef(string eventName) { NetworkSoundEventDef val = ScriptableObject.CreateInstance<NetworkSoundEventDef>(); val.akId = AkSoundEngine.GetIDFromString(eventName); val.eventName = eventName; Content.AddNetworkSoundEventDef(val); return val; } internal static void ConvertAllRenderersToHopooShader(GameObject objectToConvert) { if (!Object.op_Implicit((Object)(object)objectToConvert)) { return; } Renderer[] componentsInChildren = objectToConvert.GetComponentsInChildren<Renderer>(); foreach (Renderer val in componentsInChildren) { if (val != null) { val.material?.SetHopooMaterial(isCulled: false); } } } internal static RendererInfo[] SetupRendererInfos(GameObject obj) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) MeshRenderer[] componentsInChildren = obj.GetComponentsInChildren<MeshRenderer>(); RendererInfo[] array = (RendererInfo[])(object)new RendererInfo[componentsInChildren.Length]; for (int i = 0; i < componentsInChildren.Length; i++) { array[i] = new RendererInfo { defaultMaterial = ((Renderer)componentsInChildren[i]).material, renderer = (Renderer)(object)componentsInChildren[i], defaultShadowCastingMode = (ShadowCastingMode)1, ignoreOverlays = false }; } return array; } public static GameObject LoadSurvivorModel(string modelName) { GameObject val = mainAssetBundle.LoadAsset<GameObject>(modelName); if ((Object)(object)val == (Object)null) { Log.Error("Trying to load a null model- check to see if the name in your code matches the name of the object in Unity"); return null; } return PrefabAPI.InstantiateClone(val, ((Object)val).name, false); } internal static Texture LoadCharacterIconGeneric(string characterName) { return mainAssetBundle.LoadAsset<Texture>("tex" + characterName + "Icon"); } internal static GameObject LoadCrosshair(string crosshairName) { if ((Object)(object)LegacyResourcesAPI.Load<GameObject>("Prefabs/Crosshair/" + crosshairName + "Crosshair") == (Object)null) { return LegacyResourcesAPI.Load<GameObject>("Prefabs/Crosshair/StandardCrosshair"); } return LegacyResourcesAPI.Load<GameObject>("Prefabs/Crosshair/" + crosshairName + "Crosshair"); } private static GameObject LoadEffect(string resourceName) { return LoadEffect(resourceName, "", parentToTransform: false); } private static GameObject LoadEffect(string resourceName, string soundName) { return LoadEffect(resourceName, soundName, parentToTransform: false); } private static GameObject LoadEffect(string resourceName, bool parentToTransform) { return LoadEffect(resourceName, "", parentToTransform); } private static GameObject LoadEffect(string resourceName, string soundName, bool parentToTransform) { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) bool flag = false; for (int i = 0; i < assetNames.Length; i++) { if (assetNames[i].Contains(resourceName.ToLowerInvariant())) { flag = true; i = assetNames.Length; } } if (!flag) { Log.Error("Failed to load effect: " + resourceName + " because it does not exist in the AssetBundle"); return null; } GameObject val = mainAssetBundle.LoadAsset<GameObject>(resourceName); val.AddComponent<DestroyOnTimer>().duration = 12f; val.AddComponent<NetworkIdentity>(); val.AddComponent<VFXAttributes>().vfxPriority = (VFXPriority)2; EffectComponent val2 = val.AddComponent<EffectComponent>(); val2.applyScale = false; val2.effectIndex = (EffectIndex)(-1); val2.parentToReferencedTransform = parentToTransform; val2.positionAtReferencedTransform = true; val2.soundName = soundName; AddNewEffectDef(val, soundName); return val; } private static void AddNewEffectDef(GameObject effectPrefab) { AddNewEffectDef(effectPrefab, ""); } private static void AddNewEffectDef(GameObject effectPrefab, string soundName) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Expected O, but got Unknown EffectDef val = new EffectDef(); val.prefab = effectPrefab; val.prefabEffectComponent = effectPrefab.GetComponent<EffectComponent>(); val.prefabName = ((Object)effectPrefab).name; val.prefabVfxAttributes = effectPrefab.GetComponent<VFXAttributes>(); val.spawnSoundEventName = soundName; Content.AddEffectDef(val); } } public static class Buffs { internal static BuffDef RageBuff; internal static BuffDef DeflectBuff; internal static void RegisterBuffs() { //IL_000b: 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) RageBuff = AddNewBuff("RageBuff", Assets.lightningBuffIcon, Color.red, canStack: false, isDebuff: false); DeflectBuff = AddNewBuff("DeflectBuff", Assets.shieldBuffIcon, Color.red, canStack: false, isDebuff: false); } internal static BuffDef AddNewBuff(string buffName, Sprite buffIcon, Color buffColor, bool canStack, bool isDebuff) { //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) BuffDef val = ScriptableObject.CreateInstance<BuffDef>(); ((Object)val).name = buffName; val.buffColor = buffColor; val.canStack = canStack; val.isDebuff = isDebuff; val.eliteDef = null; val.iconSprite = buffIcon; Content.AddBuffDef(val); return val; } } public static class Config { public static ConfigEntry<bool> limitMovespeed; public static ConfigEntry<bool> enableMusic; public static ConfigEntry<bool> enableBreathing; public static ConfigEntry<float> primaryCoefficient; public static ConfigEntry<float> secondaryCoefficientPull; public static ConfigEntry<float> secondaryCoefficientPush; public static ConfigEntry<float> secondaryForceOnWeightMultiplier; public static ConfigEntry<float> secondaryForceReductionForBosses; public static ConfigEntry<float> secondaryCooldown; public static ConfigEntry<float> utilityMultiplier; public static ConfigEntry<float> utilityCooldown; public static ConfigEntry<float> specialDuration; public static ConfigEntry<float> specialCooldown; public static ConfigEntry<float> specialMultiplier; public static ConfigEntry<float> passiveEnergyRecovery; public static ConfigEntry<float> energyGainedOnHit; public static ConfigEntry<float> cooldownReducedOnHit; public static ConfigEntry<float> baseDamage; public static ConfigEntry<float> damageGainedPerLevel; public static void ReadConfig() { limitMovespeed = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<bool>("01 - General", "01 - Limit Movespeed", true, "Limits Movespeed but grants armor. Setting to false removes armor bonus while outside of rage."); baseDamage = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<float>("01 - General", "02 - Base Damage", 10f, "Sets the base damage at Level 1. Requires a restart to apply."); damageGainedPerLevel = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<float>("01 - General", "03 - Damage growth per level", 2.4f, "Sets the damage gained per level. Requires a restart to apply."); enableMusic = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<bool>("01 - General", "04 - Music is enabled", true, "Enables music. Setting to false mutes music."); enableBreathing = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<bool>("01 - General", "05 - Darth Breathing enabled", true, "Enables periodic breathing SFX. Set to False to disable."); primaryCoefficient = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<float>("02 - Primary", "01 - Lightsaber Coefficient", 2f, "Sets the coefficient for lightsabre, 1.0 = 100%. Can change in runtime, but requires a restart to show in the UI."); secondaryCoefficientPull = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<float>("03 - Secondary", "01 - Force Push Coefficient", 3.5f, "Sets the coefficient for Force Push, 1.0 = 100%. Can change in runtime, but requires a restart to show in the UI."); secondaryCoefficientPush = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<float>("03 - Secondary", "02 - Force Pull Coefficient", 4f, "Sets the coefficient for Force Pull, 1.0 = 100%. Can change in runtime, but requires a restart to show in the UI."); secondaryForceOnWeightMultiplier = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<float>("03 - Secondary", "03 - Mulitplier on Force", 1f, "Multiplies the force applied on an enemy affected by pull/push by the set value."); secondaryForceReductionForBosses = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<float>("03 - Secondary", "04 - Reduction on boss enemies", 5f, "Reduces the amount of force applied for boss enemies affected by Push/Pull"); secondaryCooldown = ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<float>("03 - Secondary", "05 - Force Push/Pull Cooldown", 5f, "Sets the cooldown for Force Pull/Push. Requires a restart to apply."); } public static ConfigEntry<bool> CharacterEnableConfig(string characterName, string description = "Set to false to disable this character", bool enabledDefault = true) { return ((BaseUnityPlugin)DarthVaderPlugin.instance).Config.Bind<bool>("General", "Enable " + characterName, enabledDefault, description); } public static void SetupRiskOfOptions() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001b: 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) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Expected O, but got Unknown //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Expected O, but got Unknown //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Expected O, but got Unknown //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Expected O, but got Unknown //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Expected O, but got Unknown ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(limitMovespeed)); ModSettingsManager.AddOption((BaseOption)new StepSliderOption(baseDamage, new StepSliderConfig { min = 1f, max = 100f, increment = 0.5f })); ModSettingsManager.AddOption((BaseOption)new StepSliderOption(damageGainedPerLevel, new StepSliderConfig { min = 1f, max = 100f, increment = 0.5f })); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enableMusic)); ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(enableBreathing)); ModSettingsManager.AddOption((BaseOption)new StepSliderOption(primaryCoefficient, new StepSliderConfig { min = 1f, max = 100f, increment = 0.1f })); } } internal class ContentPacks : IContentPackProvider { internal ContentPack contentPack = new ContentPack(); public static List<GameObject> bodyPrefabs = new List<GameObject>(); public static List<GameObject> masterPrefabs = new List<GameObject>(); public static List<GameObject> projectilePrefabs = new List<GameObject>(); public static List<SurvivorDef> survivorDefs = new List<SurvivorDef>(); public static List<UnlockableDef> unlockableDefs = new List<UnlockableDef>(); public static List<SkillFamily> skillFamilies = new List<SkillFamily>(); public static List<SkillDef> skillDefs = new List<SkillDef>(); public static List<Type> entityStates = new List<Type>(); public static List<BuffDef> buffDefs = new List<BuffDef>(); public static List<EffectDef> effectDefs = new List<EffectDef>(); public static List<NetworkSoundEventDef> networkSoundEventDefs = new List<NetworkSoundEventDef>(); public string identifier => "com.PopcornFactory.DarthVaderMod"; public void Initialize() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown ContentManager.collectContentPackProviders += new CollectContentPackProvidersDelegate(ContentManager_collectContentPackProviders); } private void ContentManager_collectContentPackProviders(AddContentPackProviderDelegate addContentPackProvider) { addContentPackProvider.Invoke((IContentPackProvider)(object)this); } public IEnumerator LoadStaticContentAsync(LoadStaticContentAsyncArgs args) { contentPack.identifier = identifier; contentPack.bodyPrefabs.Add(bodyPrefabs.ToArray()); contentPack.masterPrefabs.Add(masterPrefabs.ToArray()); contentPack.projectilePrefabs.Add(projectilePrefabs.ToArray()); contentPack.survivorDefs.Add(survivorDefs.ToArray()); contentPack.unlockableDefs.Add(unlockableDefs.ToArray()); contentPack.skillDefs.Add(skillDefs.ToArray()); contentPack.skillFamilies.Add(skillFamilies.ToArray()); contentPack.entityStateTypes.Add(entityStates.ToArray()); contentPack.buffDefs.Add(buffDefs.ToArray()); contentPack.effectDefs.Add(effectDefs.ToArray()); contentPack.networkSoundEventDefs.Add(networkSoundEventDefs.ToArray()); args.ReportProgress(1f); yield break; } public IEnumerator GenerateContentPackAsync(GetContentPackAsyncArgs args) { ContentPack.Copy(contentPack, args.output); args.ReportProgress(1f); yield break; } public IEnumerator FinalizeAsync(FinalizeAsyncArgs args) { args.ReportProgress(1f); yield break; } } internal class Content { public static void AddCharacterBodyPrefab(GameObject bprefab) { ContentPacks.bodyPrefabs.Add(bprefab); } public static void AddMasterPrefab(GameObject prefab) { ContentPacks.masterPrefabs.Add(prefab); } public static void AddProjectilePrefab(GameObject prefab) { ContentPacks.projectilePrefabs.Add(prefab); } public static void AddSurvivorDef(SurvivorDef survivorDef) { ContentPacks.survivorDefs.Add(survivorDef); } public static void AddUnlockableDef(UnlockableDef unlockableDef) { ContentPacks.unlockableDefs.Add(unlockableDef); } public static void AddSkillDef(SkillDef skillDef) { ContentPacks.skillDefs.Add(skillDef); } public static void AddSkillFamily(SkillFamily skillFamily) { ContentPacks.skillFamilies.Add(skillFamily); } public static void AddEntityState(Type entityState) { ContentPacks.entityStates.Add(entityState); } public static void AddBuffDef(BuffDef buffDef) { ContentPacks.buffDefs.Add(buffDef); } public static void AddEffectDef(EffectDef effectDef) { ContentPacks.effectDefs.Add(effectDef); } public static void AddNetworkSoundEventDef(NetworkSoundEventDef networkSoundEventDef) { ContentPacks.networkSoundEventDefs.Add(networkSoundEventDef); } } internal static class Helpers { internal const string agilePrefix = "<style=cIsUtility>Agile.</style> "; internal static string ScepterDescription(string desc) { return "\n<color=#d299ff>SCEPTER: " + desc + "</color>"; } public static T[] Append<T>(ref T[] array, List<T> list) { int num = array.Length; int count = list.Count; Array.Resize(ref array, num + count); list.CopyTo(array, num); return array; } public static Func<T[], T[]> AppendDel<T>(List<T> list) { return (T[] r) => Append(ref r, list); } } internal static class ItemDisplays { private static Dictionary<string, GameObject> itemDisplayPrefabs = new Dictionary<string, GameObject>(); internal static void PopulateDisplays() { PopulateFromBody("MageBody"); PopulateFromBody("LunarExploderBody"); PopulateCustomLightningArm(); } private static void PopulateFromBody(string bodyName) { ItemDisplayRuleSet itemDisplayRuleSet = ((Component)LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/" + bodyName).GetComponent<ModelLocator>().modelTransform).GetComponent<CharacterModel>().itemDisplayRuleSet; KeyAssetRuleGroup[] keyAssetRuleGroups = itemDisplayRuleSet.keyAssetRuleGroups; for (int i = 0; i < keyAssetRuleGroups.Length; i++) { ItemDisplayRule[] rules = keyAssetRuleGroups[i].displayRuleGroup.rules; for (int j = 0; j < rules.Length; j++) { GameObject followerPrefab = rules[j].followerPrefab; if (Object.op_Implicit((Object)(object)followerPrefab)) { string key = ((Object)followerPrefab).name?.ToLowerInvariant(); if (!itemDisplayPrefabs.ContainsKey(key)) { itemDisplayPrefabs[key] = followerPrefab; } } } } } private static void PopulateCustomLightningArm() { GameObject val = PrefabAPI.InstantiateClone(itemDisplayPrefabs["displaylightningarmright"], "DisplayLightningCustom", false); LimbMatcher component = val.GetComponent<LimbMatcher>(); component.limbPairs[0].targetChildLimb = "LightningArm1"; component.limbPairs[1].targetChildLimb = "LightningArm2"; component.limbPairs[2].targetChildLimb = "LightningArmEnd"; itemDisplayPrefabs["displaylightningarmcustom"] = val; } public static GameObject LoadDisplay(string name) { if (itemDisplayPrefabs.ContainsKey(name.ToLowerInvariant()) && Object.op_Implicit((Object)(object)itemDisplayPrefabs[name.ToLowerInvariant()])) { return itemDisplayPrefabs[name.ToLowerInvariant()]; } Log.Error("item display " + name + " returned null"); return null; } } internal static class Materials { private static List<Material> cachedMaterials = new List<Material>(); public static Material CreateHopooMaterial(string materialName, bool isCulled) { //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Expected O, but got Unknown Material val = cachedMaterials.Find(delegate(Material mat) { materialName.Replace(" (Instance)", ""); return ((Object)mat).name.Contains(materialName); }); if (Object.op_Implicit((Object)(object)val)) { return val; } val = Assets.mainAssetBundle.LoadAsset<Material>(materialName); if (!Object.op_Implicit((Object)(object)val)) { Log.Error("Failed to load material: " + materialName + " - Check to see that the material in your Unity project matches this name"); return new Material(Assets.hotpoo); } return val.SetHopooMaterial(isCulled); } public static Material SetHopooMaterial(this Material tempMat, bool isCulled) { //IL_0089: 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_0107: Unknown result type (might be due to invalid IL or missing references) if (cachedMaterials.Contains(tempMat)) { return tempMat; } float? num = null; Color? val = null; if (tempMat.IsKeywordEnabled("_NORMALMAP")) { num = tempMat.GetFloat("_BumpScale"); } if (tempMat.IsKeywordEnabled("_EMISSION")) { val = tempMat.GetColor("_EmissionColor"); } tempMat.shader = Assets.hotpoo; tempMat.SetColor("_Color", tempMat.GetColor("_Color")); tempMat.SetTexture("_MainTex", tempMat.GetTexture("_MainTex")); tempMat.SetTexture("_EmTex", tempMat.GetTexture("_EmissionMap")); tempMat.EnableKeyword("DITHER"); if (num.HasValue) { tempMat.SetFloat("_NormalStrength", num.Value); } if (val.HasValue) { tempMat.SetColor("_EmColor", val.Value); tempMat.SetFloat("_EmPower", 5f); } if (!isCulled) { tempMat.SetInt("_Cull", 0); } if (tempMat.IsKeywordEnabled("LIMBREMOVAL")) { tempMat.SetInt("_LimbRemovalOn", 1); } cachedMaterials.Add(tempMat); return tempMat; } public static Material MakeUnique(this Material material) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Expected O, but got Unknown if (cachedMaterials.Contains(material)) { return new Material(material); } return material; } public static Material SetColor(this Material material, Color color) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) material.SetColor("_Color", color); return material; } public static Material SetNormal(this Material material, float normalStrength = 1f) { material.SetFloat("_NormalStrength", normalStrength); return material; } public static Material SetEmission(this Material material) { return material.SetEmission(1f); } public static Material SetEmission(this Material material, float emission) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return material.SetEmission(emission, Color.white); } public static Material SetEmission(this Material material, float emission, Color emissionColor) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) material.SetFloat("_EmPower", emission); material.SetColor("_EmColor", emissionColor); return material; } public static Material SetCull(this Material material, bool cull = false) { material.SetInt("_Cull", cull ? 1 : 0); return material; } } internal static class Prefabs { private static PhysicMaterial ragdollMaterial; public static GameObject CreateDisplayPrefab(string displayModelName, GameObject prefab, BodyInfo bodyInfo) { GameObject val = Assets.LoadSurvivorModel(displayModelName); CharacterModel val2 = val.GetComponent<CharacterModel>(); if (!Object.op_Implicit((Object)(object)val2)) { val2 = val.AddComponent<CharacterModel>(); } val2.baseRendererInfos = prefab.GetComponentInChildren<CharacterModel>().baseRendererInfos; Assets.ConvertAllRenderersToHopooShader(val); return val.gameObject; } public static GameObject CreateBodyPrefab(string bodyName, string modelName, BodyInfo bodyInfo) { //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_0224: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/" + bodyInfo.bodyNameToClone + "Body"); if (!Object.op_Implicit((Object)(object)val)) { Log.Error(bodyInfo.bodyNameToClone + "Body is not a valid body, character creation failed"); return null; } GameObject val2 = PrefabAPI.InstantiateClone(val, bodyName); Transform val3 = null; GameObject val4 = null; if (modelName != "mdl") { val4 = Assets.LoadSurvivorModel(modelName); if ((Object)(object)val4 == (Object)null) { val4 = ((Component)val2.GetComponentInChildren<CharacterModel>()).gameObject; } val3 = AddCharacterModelToSurvivorBody(val2, val4.transform, bodyInfo); } CharacterBody component = val2.GetComponent<CharacterBody>(); ((Object)component).name = bodyInfo.bodyName; component.baseNameToken = bodyInfo.bodyNameToken; component.subtitleNameToken = bodyInfo.subtitleNameToken; component.portraitIcon = bodyInfo.characterPortrait; component.bodyColor = bodyInfo.bodyColor; component._defaultCrosshairPrefab = bodyInfo.crosshair; component.hideCrosshair = false; component.preferredPodPrefab = bodyInfo.podPrefab; component.baseMaxHealth = bodyInfo.maxHealth; component.baseRegen = bodyInfo.healthRegen; component.levelArmor = bodyInfo.armorGrowth; component.baseMaxShield = bodyInfo.shield; component.baseDamage = bodyInfo.damage; component.baseAttackSpeed = bodyInfo.attackSpeed; component.baseCrit = bodyInfo.crit; component.baseMoveSpeed = bodyInfo.moveSpeed; component.baseJumpPower = bodyInfo.jumpPower; component.autoCalculateLevelStats = bodyInfo.autoCalculateLevelStats; component.levelDamage = bodyInfo.damageGrowth; component.levelAttackSpeed = bodyInfo.attackSpeedGrowth; component.levelCrit = bodyInfo.critGrowth; component.levelMaxHealth = bodyInfo.healthGrowth; component.levelRegen = bodyInfo.regenGrowth; component.baseArmor = bodyInfo.armor; component.levelMaxShield = bodyInfo.shieldGrowth; component.levelMoveSpeed = bodyInfo.moveSpeedGrowth; component.levelJumpPower = bodyInfo.jumpPowerGrowth; component.baseAcceleration = bodyInfo.acceleration; component.baseJumpCount = bodyInfo.jumpCount; component.sprintingSpeedMultiplier = 1.4f; component.bodyFlags = (BodyFlags)16; component.rootMotionInMainState = false; component.hullClassification = (HullClassification)0; component.isChampion = false; SetupCameraTargetParams(val2, bodyInfo); SetupModelLocator(val2, val3, val4.transform); SetupCapsuleCollider(val2); SetupMainHurtbox(val2, val4); SetupCharacterMotor(val2); SetupAimAnimator(val2, val4); if ((Object)(object)val3 != (Object)null) { SetupCharacterDirection(val2, val3, val4.transform); } SetupFootstepController(val4); SetupRagdoll(val4); Content.AddCharacterBodyPrefab(val2); return val2; } public static void CreateGenericDoppelganger(GameObject bodyPrefab, string masterName, string masterToCopy) { GameObject val = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterMasters/" + masterToCopy + "MonsterMaster"), masterName, true); val.GetComponent<CharacterMaster>().bodyPrefab = bodyPrefab; Content.AddMasterPrefab(val); } private static Transform AddCharacterModelToSurvivorBody(GameObject bodyPrefab, Transform modelTransform, BodyInfo bodyInfo) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Expected O, but got Unknown //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Expected O, but got Unknown //IL_00fa: 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) for (int num = bodyPrefab.transform.childCount - 1; num >= 0; num--) { Object.DestroyImmediate((Object)(object)((Component)bodyPrefab.transform.GetChild(num)).gameObject); } Transform transform = new GameObject("ModelBase").transform; transform.parent = bodyPrefab.transform; transform.localPosition = bodyInfo.modelBasePosition; transform.localRotation = Quaternion.identity; modelTransform.parent = ((Component)transform).transform; modelTransform.localPosition = Vector3.zero; modelTransform.localRotation = Quaternion.identity; GameObject val = new GameObject("CameraPivot"); val.transform.parent = bodyPrefab.transform; val.transform.localPosition = bodyInfo.cameraPivotPosition; val.transform.localRotation = Quaternion.identity; GameObject val2 = new GameObject("AimOrigin"); val2.transform.parent = bodyPrefab.transform; val2.transform.localPosition = bodyInfo.aimOriginPosition; val2.transform.localRotation = Quaternion.identity; bodyPrefab.GetComponent<CharacterBody>().aimOriginTransform = val2.transform; return ((Component)transform).transform; } public static CharacterModel SetupCharacterModel(GameObject prefab) { return SetupCharacterModel(prefab, null); } public static CharacterModel SetupCharacterModel(GameObject prefab, CustomRendererInfo[] customInfos) { CharacterModel val = ((Component)prefab.GetComponent<ModelLocator>().modelTransform).gameObject.GetComponent<CharacterModel>(); bool flag = (Object)(object)val != (Object)null; if (!flag) { val = ((Component)prefab.GetComponent<ModelLocator>().modelTransform).gameObject.AddComponent<CharacterModel>(); } val.body = prefab.GetComponent<CharacterBody>(); val.autoPopulateLightInfos = true; val.invisibilityCount = 0; val.temporaryOverlays = new List<TemporaryOverlayInstance>(); if (!flag) { SetupCustomRendererInfos(val, customInfos); } else { SetupPreAttachedRendererInfos(val); } return val; } public static void SetupPreAttachedRendererInfos(CharacterModel characterModel) { for (int i = 0; i < characterModel.baseRendererInfos.Length; i++) { if ((Object)(object)characterModel.baseRendererInfos[i].defaultMaterial == (Object)null) { characterModel.baseRendererInfos[i].defaultMaterial = characterModel.baseRendererInfos[i].renderer.sharedMaterial; } characterModel.baseRendererInfos[i].defaultMaterial.SetHopooMaterial(isCulled: false); } } public static void SetupCustomRendererInfos(CharacterModel characterModel, CustomRendererInfo[] customInfos) { //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) ChildLocator component = ((Component)characterModel).GetComponent<ChildLocator>(); if (!Object.op_Implicit((Object)(object)component)) { Log.Error("Failed CharacterModel setup: ChildLocator component does not exist on the model"); return; } List<RendererInfo> list = new List<RendererInfo>(); for (int i = 0; i < customInfos.Length; i++) { if (!Object.op_Implicit((Object)(object)component.FindChild(customInfos[i].childName))) { Log.Error("Trying to add a RendererInfo for a renderer that does not exist: " + customInfos[i].childName); continue; } Renderer component2 = ((Component)component.FindChild(customInfos[i].childName)).GetComponent<Renderer>(); if (Object.op_Implicit((Object)(object)component2)) { Material val = customInfos[i].material; if ((Object)(object)val == (Object)null) { val = ((!customInfos[i].dontHotpoo) ? component2.material.SetHopooMaterial(isCulled: false) : component2.material); } list.Add(new RendererInfo { renderer = component2, defaultMaterial = val, ignoreOverlays = customInfos[i].ignoreOverlays, defaultShadowCastingMode = (ShadowCastingMode)1 }); } } characterModel.baseRendererInfos = list.ToArray(); } private static void SetupCharacterDirection(GameObject prefab, Transform modelBaseTransform, Transform modelTransform) { if (Object.op_Implicit((Object)(object)prefab.GetComponent<CharacterDirection>())) { CharacterDirection component = prefab.GetComponent<CharacterDirection>(); component.targetTransform = modelBaseTransform; component.overrideAnimatorForwardTransform = null; component.rootMotionAccumulator = null; component.modelAnimator = ((Component)modelTransform).GetComponent<Animator>(); component.driveFromRootRotation = false; component.turnSpeed = 720f; } } private static void SetupCameraTargetParams(GameObject prefab, BodyInfo bodyInfo) { CameraTargetParams component = prefab.GetComponent<CameraTargetParams>(); component.cameraParams = bodyInfo.cameraParams; component.cameraPivotTransform = prefab.transform.Find("CameraPivot"); } private static void SetupModelLocator(GameObject prefab, Transform modelBaseTransform, Transform modelTransform) { ModelLocator component = prefab.GetComponent<ModelLocator>(); component.modelTransform = modelTransform; component.modelBaseTransform = modelBaseTransform; } private static void SetupCharacterMotor(GameObject prefab) { CharacterMotor component = prefab.GetComponent<CharacterMotor>(); component.mass = 1000f; } private static void SetupCapsuleCollider(GameObject prefab) { //IL_0018: Unknown result type (might be due to invalid IL or missing references) CapsuleCollider component = prefab.GetComponent<CapsuleCollider>(); component.center = new Vector3(0f, 0f, 0f); component.radius = 0.5f; component.height = 1.82f; component.direction = 1; } private static void SetupMainHurtbox(GameObject prefab, GameObject model) { //IL_0075: Unknown result type (might be due to invalid IL or missing references) ChildLocator component = model.GetComponent<ChildLocator>(); if (!Object.op_Implicit((Object)(object)component.FindChild("MainHurtbox"))) { Debug.LogWarning((object)"Could not set up main hurtbox: make sure you have a transform pair in your prefab's ChildLocator component called 'MainHurtbox'"); return; } HurtBoxGroup val = model.AddComponent<HurtBoxGroup>(); HurtBox val2 = ((Component)component.FindChild("MainHurtbox")).gameObject.AddComponent<HurtBox>(); ((Component)val2).gameObject.layer = LayerIndex.entityPrecise.intVal; val2.healthComponent = prefab.GetComponent<HealthComponent>(); val2.isBullseye = true; val2.damageModifier = (DamageModifier)0; val2.hurtBoxGroup = val; val2.indexInGroup = 0; val.hurtBoxes = (HurtBox[])(object)new HurtBox[1] { val2 }; val.mainHurtBox = val2; val.bullseyeCount = 1; } public static void SetupHurtBoxes(GameObject bodyPrefab) { HealthComponent component = bodyPrefab.GetComponent<HealthComponent>(); HurtBoxGroup[] componentsInChildren = bodyPrefab.GetComponentsInChildren<HurtBoxGroup>(); foreach (HurtBoxGroup val in componentsInChildren) { val.mainHurtBox.healthComponent = component; for (int j = 0; j < val.hurtBoxes.Length; j++) { val.hurtBoxes[j].healthComponent = component; } } } private static void SetupFootstepController(GameObject model) { FootstepHandler val = model.AddComponent<FootstepHandler>(); val.baseFootstepString = "Play_player_footstep"; val.sprintFootstepOverrideString = ""; val.enableFootstepDust = true; val.footstepDustPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/GenericFootstepDust"); } private static void SetupRagdoll(GameObject model) { RagdollController component = model.GetComponent<RagdollController>(); if (!Object.op_Implicit((Object)(object)component)) { return; } if ((Object)(object)ragdollMaterial == (Object)null) { ragdollMaterial = ((Component)LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponentInChildren<RagdollController>().bones[1]).GetComponent<Collider>().material; } Transform[] bones = component.bones; foreach (Transform val in bones) { if (Object.op_Implicit((Object)(object)val)) { ((Component)val).gameObject.layer = LayerIndex.ragdoll.intVal; Collider component2 = ((Component)val).GetComponent<Collider>(); if (Object.op_Implicit((Object)(object)component2)) { component2.material = ragdollMaterial; component2.sharedMaterial = ragdollMaterial; } } } } private static void SetupAimAnimator(GameObject prefab, GameObject model) { AimAnimator val = model.AddComponent<AimAnimator>(); val.directionComponent = prefab.GetComponent<CharacterDirection>(); val.pitchRangeMax = 60f; val.pitchRangeMin = -60f; val.yawRangeMin = -80f; val.yawRangeMax = 80f; val.pitchGiveupRange = 30f; val.yawGiveupRange = 10f; val.giveupDuration = 3f; val.inputBank = prefab.GetComponent<InputBankTest>(); } public static void SetupHitbox(GameObject prefab, Transform hitboxTransform, string hitboxName) { HitBoxGroup val = prefab.AddComponent<HitBoxGroup>(); HitBox val2 = ((Component)hitboxTransform).gameObject.AddComponent<HitBox>(); ((Component)hitboxTransform).gameObject.layer = LayerIndex.projectile.intVal; val.hitBoxes = (HitBox[])(object)new HitBox[1] { val2 }; val.groupName = hitboxName; } public static void SetupHitbox(GameObject prefab, string hitboxName, params Transform[] hitboxTransforms) { HitBoxGroup val = prefab.AddComponent<HitBoxGroup>(); List<HitBox> list = new List<HitBo