using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using EntityStates;
using EntityStates.ClayBruiser.Weapon;
using EntityStates.GolemMonster;
using EntityStates.TitanMonster;
using NS_KingModUtilities;
using On.EntityStates;
using On.EntityStates.ClayBruiser.Weapon;
using On.EntityStates.GolemMonster;
using On.EntityStates.TitanMonster;
using On.RoR2;
using On.RoR2.Orbs;
using On.RoR2.Projectile;
using On.RoR2.UI;
using R2API.Utils;
using RoR2;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.UI;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering.PostProcessing;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("KingItems")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("KingItems")]
[assembly: AssemblyTitle("KingItems")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace NS_KingItems;
public class TimeStopFreezeState : BaseState
{
public float duration;
public override void OnEnter()
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
Animator modelAnimator = ((EntityState)this).GetModelAnimator();
if (Object.op_Implicit((Object)(object)modelAnimator))
{
((Behaviour)modelAnimator).enabled = false;
}
if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbody) && !((EntityState)this).rigidbody.isKinematic)
{
((EntityState)this).rigidbody.velocity = Vector3.zero;
if (Object.op_Implicit((Object)(object)((EntityState)this).rigidbodyMotor))
{
((EntityState)this).rigidbodyMotor.moveVector = Vector3.zero;
}
}
}
public override void OnExit()
{
Animator modelAnimator = ((EntityState)this).GetModelAnimator();
if (Object.op_Implicit((Object)(object)modelAnimator))
{
((Behaviour)modelAnimator).enabled = true;
}
((EntityState)this).OnExit();
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return (InterruptPriority)5;
}
}
public static class ItemsSounds
{
public static readonly uint TimeResumeSFX = 3090400288u;
public static readonly uint TimeStopSFX = 2383709427u;
}
public class DiosHead
{
private static GameObject timeStopFX;
private static CharacterBody characterBodyUsed = null;
private static readonly float TIMESTOP_DURATION = 9f;
private static readonly float TIMESTOP_STARTUP_DURATION = 2f;
private static bool TIMESTOP_ACTIVE = false;
private static bool TIMESTOP_FREEZE_PROJECTILES = false;
private static bool TIMESTOP_FREEZE_SPAWNS = false;
private static float FREEZE_TIMER = 0f;
private static readonly float FREEZE_TIMER_INTERVAL = 1f;
private static float TIMESTOP_STARTED_TIME = 0f;
private static LTSeq currentSequence = null;
public static EquipmentDef CreateCustomEquipmentDef()
{
//IL_0044: 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_00ae: Expected O, but got Unknown
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Expected O, but got Unknown
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Expected O, but got Unknown
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Expected O, but got Unknown
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Expected O, but got Unknown
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Expected O, but got Unknown
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Expected O, but got Unknown
//IL_011b: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Expected O, but got Unknown
//IL_012c: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Expected O, but got Unknown
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Expected O, but got Unknown
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0158: Expected O, but got Unknown
//IL_015f: Unknown result type (might be due to invalid IL or missing references)
//IL_0169: Expected O, but got Unknown
//IL_0170: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Expected O, but got Unknown
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//IL_018b: Expected O, but got Unknown
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Expected O, but got Unknown
//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
//IL_01ad: Expected O, but got Unknown
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
//IL_01be: Expected O, but got Unknown
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01cf: Expected O, but got Unknown
//IL_01d6: Unknown result type (might be due to invalid IL or missing references)
//IL_01e0: Expected O, but got Unknown
//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
//IL_01f1: Expected O, but got Unknown
//IL_01f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0202: Expected O, but got Unknown
//IL_0209: Unknown result type (might be due to invalid IL or missing references)
//IL_0213: Expected O, but got Unknown
//IL_021a: Unknown result type (might be due to invalid IL or missing references)
//IL_0224: Expected O, but got Unknown
//IL_0250: Unknown result type (might be due to invalid IL or missing references)
//IL_025a: Expected O, but got Unknown
//IL_025a: Unknown result type (might be due to invalid IL or missing references)
//IL_0264: Expected O, but got Unknown
ScriptableObject obj = ScriptableObject.CreateInstance(typeof(EquipmentDef));
ScriptableObject obj2 = ((obj is EquipmentDef) ? obj : null);
((Object)obj2).name = CreateName();
((EquipmentDef)obj2).appearsInMultiPlayer = false;
((EquipmentDef)obj2).appearsInSinglePlayer = true;
((EquipmentDef)obj2).isBoss = false;
((EquipmentDef)obj2).isLunar = false;
((EquipmentDef)obj2).canDrop = true;
((EquipmentDef)obj2).colorIndex = (ColorIndex)5;
((EquipmentDef)obj2).enigmaCompatible = true;
((EquipmentDef)obj2).pickupIconSprite = KingItemsAssets.Img_DiosHead;
((EquipmentDef)obj2).pickupModelPrefab = KingItemsAssets.DiosHead;
((EquipmentDef)obj2).loreToken = CreateItemLore();
((EquipmentDef)obj2).descriptionToken = CreateItemComplexDescription();
((EquipmentDef)obj2).pickupToken = CreateItemSimpleDescription();
((EquipmentDef)obj2).nameToken = CreateNameToken();
((EquipmentDef)obj2).cooldown = 300f;
CombatDirector.Simulate += new hook_Simulate(CombatDirector_Simulate_Hook);
ProjectileSimple.FixedUpdate += new hook_FixedUpdate(ProjectileSimple_FixedUpdate_Hook);
Run.ShouldUpdateRunStopwatch += new hook_ShouldUpdateRunStopwatch(Run_ShouldUpdateRunStopwatch_Hook);
OrbEffect.UpdateOrb += new hook_UpdateOrb(OrbEffect_UpdateOrb_Hook);
OrbManager.FixedUpdate += new hook_FixedUpdate(OrbManager_FixedUpdate_Hook);
SetStateOnHurt.SetFrozen += new hook_SetFrozen(SetStateOnHurt_SetFrozen_Hook);
SetStateOnHurt.SetStun += new hook_SetStun(SetStateOnHurt_SetStun_Hook);
SetStateOnHurt.SetPain += new hook_SetPain(SetStateOnHurt_SetPain_Hook);
ProjectileImpactExplosion.FixedUpdate += new hook_FixedUpdate(ProjectileImpactExplosion_FixedUpdate_Hook);
RigidbodyMotor.FixedUpdate += new hook_FixedUpdate(RigidbodyMotor_FixedUpdate_Hook);
DelayBlast.FixedUpdate += new hook_FixedUpdate(DelayBlast_FixedUpdate_Hook);
DestroyOnTimer.FixedUpdate += new hook_FixedUpdate(DestroyOnTimer_FixedUpdate_Hook);
ChargeLaser.Update += new hook_Update(ChargeLaser_Update);
ChargeLaser.FixedUpdate += new hook_FixedUpdate(ChargeLaser_FixedUpdate);
ChargeMegaLaser.Update += new hook_Update(ChargeMegaLaser_Update_Hook);
ChargeMegaLaser.FixedUpdate += new hook_FixedUpdate(ChargeMegaLaser_FixedUpdate_Hook);
FireMegaLaser.FixedUpdate += new hook_FixedUpdate(FireMegaLaser_FixedUpdate_Hook);
ChargeGoldMegaLaser.FixedUpdate += new hook_FixedUpdate(ChargeGoldMegaLaser_FixedUpdate_Hook);
FireGoldMegaLaser.FixedUpdate += new hook_FixedUpdate(FireGoldMegaLaser_FixedUpdate_Hook);
WormBodyPositionsDriver.FixedUpdateServer += new hook_FixedUpdateServer(WormBodyPositionsDriver_FixedUpdateServer_Hook);
WormBodyPositions2.OnDeathStart += new hook_OnDeathStart(WormBodyPositions2_OnDeathStart_Hook);
MinigunFire.FixedUpdate += new hook_FixedUpdate(MinigunFire_FixedUpdate_Hook);
GenericCharacterDeath.OnEnter += new hook_OnEnter(GenericCharacterDeath_OnEnter_Hook);
MainPlugin.s_updateAction = (Action)Delegate.Combine(MainPlugin.s_updateAction, new Action(IntervalFreeze_Update_Hook));
MainPlugin.s_delegate_OnStageStarted = (VoidDelegate)Delegate.Combine((Delegate?)(object)MainPlugin.s_delegate_OnStageStarted, (Delegate?)new VoidDelegate(ResetTimeStopValues));
return (EquipmentDef)(object)obj2;
}
private static Vector3 GenerateTimeStopFrozenVelocity(Rigidbody rb)
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
AntiGravityForce component = ((Component)rb).GetComponent<AntiGravityForce>();
if ((Object)(object)component != (Object)null)
{
flag = component.antiGravityCoefficient == 1f;
}
if (!rb.useGravity || flag)
{
return Vector3.zero;
}
return new Vector3(0f, 0.5f - (MainPlugin.IsInStage("moon2") ? 0.16f : 0f), 0f);
}
private static void RigidbodyMotor_FixedUpdate_Hook(orig_FixedUpdate orig, RigidbodyMotor self)
{
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
else
{
self.rigid.velocity = GenerateTimeStopFrozenVelocity(self.rigid);
}
}
public static string CreateName()
{
return "DiosHead";
}
public static string CreateNameToken()
{
return "Dio's Head";
}
public static string CreateItemComplexDescription()
{
return CreateItemSimpleDescription();
}
public static string CreateItemSimpleDescription()
{
return "Unleash Dio's Stand..." + MainPlugin.ColorText("Stopping Time", "#03f4fc") + " for 9 Seconds.";
}
public static string CreateItemLore()
{
return "Dio's signature power is its ability to stop time, allowing DIO and anyone with the same power, to act within the duration of stopped time.";
}
public static bool OnCustomEquipmentActivated(EquipmentSlot self)
{
if (!RoR2Application.isInSinglePlayer)
{
return false;
}
if ((((Object)(object)self != (Object)null) & ((Object)(object)self.characterBody != (Object)null)) && (Object)(object)self.characterBody.healthComponent != (Object)null && self.characterBody.healthComponent.alive && !TIMESTOP_ACTIVE)
{
TIMESTOP_ACTIVE = true;
characterBodyUsed = self.characterBody;
OnTimeStop_Start();
return true;
}
return false;
}
public static void IntervalFreeze_Update_Hook()
{
if ((Object)(object)Run.instance != (Object)null && TIMESTOP_ACTIVE)
{
FREEZE_TIMER -= Time.deltaTime;
if (FREEZE_TIMER <= 0f)
{
TimeStopFreezeAllEnemies();
FREEZE_TIMER = FREEZE_TIMER_INTERVAL;
}
if ((Object)(object)characterBodyUsed == (Object)null && (Object)(object)timeStopFX == (Object)null)
{
MainPlugin.DebugLog("WTF? Time Stop Got Stuck, lets abort it just incase?!?");
ForceEndTimeStop();
}
}
}
public static void TimeStopFreezeAllEnemies()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)characterBodyUsed != (Object)null)
{
Vector3 position = ((Component)characterBodyUsed).transform.position;
LayerIndex entityPrecise = LayerIndex.entityPrecise;
TimeStopEnemies(Physics.OverlapSphere(position, float.MaxValue, LayerMask.op_Implicit(((LayerIndex)(ref entityPrecise)).mask)).ToArray(), characterBodyUsed, TIMESTOP_STARTED_TIME + (TIMESTOP_STARTUP_DURATION + TIMESTOP_DURATION + TIMESTOP_STARTUP_DURATION - 1f) - Time.time);
}
}
public static void FXStart_OnUpdate(float timeRatio)
{
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<ColorGrading>().hueShift).value = 0f + Mathf.Lerp(0f, 180f, timeRatio);
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<LensDistortion>().intensity).value = 0f + Mathf.Lerp(0f, 80f, timeRatio);
}
public static void FXStart_Middle_OnComplete()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
LeanTween.scale(timeStopFX, new Vector3(0f, 0f, 0f), TIMESTOP_STARTUP_DURATION / 2f).setOnComplete((Action)FXStart_End_OnComplete).setOnUpdate((Action<float>)FXStart_End_OnUpdate)
.setEase((LeanTweenType)6);
}
public static void FXStart_End_OnComplete()
{
currentSequence = LeanTween.sequence(true);
currentSequence.append(TIMESTOP_DURATION);
currentSequence.append((Action)FXEnd);
}
public static void FXStart_End_OnUpdate(float timeRatio)
{
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<ColorGrading>().saturation).value = Mathf.Lerp(0f, -75f, timeRatio);
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<LensDistortion>().intensity).value = 0f + Mathf.Lerp(80f, 0f, timeRatio);
}
public static void FXEnd()
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)timeStopFX != (Object)null)
{
MainPlugin.PlaySoundEvent(timeStopFX, ItemsSounds.TimeResumeSFX, 100);
LeanTween.scale(timeStopFX, new Vector3(15f, 15f, 15f), TIMESTOP_STARTUP_DURATION / 2f).setOnComplete((Action)FXEnd_Middle_OnComplete).setOnUpdate((Action<float>)FXEnd_OnUpdate);
}
}
public static void FXEnd_OnUpdate(float timeRatio)
{
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<LensDistortion>().intensity).value = 0f + Mathf.Lerp(0f, 80f, timeRatio);
}
public static void FXEnd_Middle_OnComplete()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
LeanTween.scale(timeStopFX, new Vector3(0f, 0f, 0f), TIMESTOP_STARTUP_DURATION / 2f).setOnComplete((Action)FXEnd_End_OnComplete).setOnUpdate((Action<float>)FXEnd_End_OnUpdate)
.setEase((LeanTweenType)6);
OnTimeStop_PreEnd();
}
public static void FXEnd_End_OnComplete()
{
OnTimeStop_End();
}
public static void FXEnd_End_OnUpdate(float timeRatio)
{
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<ColorGrading>().saturation).value = Mathf.Lerp(-75f, 0f, timeRatio);
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<ColorGrading>().hueShift).value = 0f + Mathf.Lerp(180f, 0f, timeRatio);
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<LensDistortion>().intensity).value = 0f + Mathf.Lerp(80f, 0f, timeRatio);
}
private static bool TimeStopEnemies(Collider[] array, CharacterBody self, float ts_duration)
{
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
IEnumerable<Collider> enumerable = array.Where((Collider x) => (Object)(object)((Component)x).GetComponent<HurtBox>() != (Object)null);
List<HurtBoxGroup> list = new List<HurtBoxGroup>();
foreach (Collider item in enumerable)
{
HurtBox hurtBox2 = ((Component)item).GetComponentInChildren<HurtBox>();
if ((Object)(object)hurtBox2 == (Object)null || (Object)(object)hurtBox2.healthComponent == (Object)(object)self.healthComponent || list.Where((HurtBoxGroup x) => (Object)(object)x == (Object)(object)hurtBox2.hurtBoxGroup).Count() > 0 || (hurtBox2.teamIndex == self.teamComponent.teamIndex && (int)FriendlyFireManager.friendlyFireMode == 0))
{
continue;
}
_ = hurtBox2;
list.Add(hurtBox2.hurtBoxGroup);
HealthComponent componentInChildren = ((Component)hurtBox2.healthComponent).gameObject.GetComponentInChildren<HealthComponent>();
if (!((Object)(object)componentInChildren != (Object)null))
{
continue;
}
CharacterBody body = componentInChildren.body;
if ((Object)(object)body != (Object)null)
{
EntityStateMachine component = ((Component)body).GetComponent<EntityStateMachine>();
if ((Object)(object)component != (Object)null)
{
TimeStopFreezeState state = new TimeStopFreezeState
{
duration = ts_duration
};
component.SetState((EntityState)(object)state);
}
}
}
if (list == null)
{
return false;
}
return list.Count() > 0;
}
private static void CombatDirector_Simulate_Hook(orig_Simulate orig, CombatDirector self, float deltaTime)
{
if (!TIMESTOP_FREEZE_SPAWNS)
{
orig.Invoke(self, deltaTime);
}
}
private static void ProjectileSimple_FixedUpdate_Hook(orig_FixedUpdate orig, ProjectileSimple self)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
if (TIMESTOP_FREEZE_PROJECTILES)
{
Rigidbody component = ((Component)self).GetComponent<Rigidbody>();
if ((Object)(object)component != (Object)null)
{
component.velocity = GenerateTimeStopFrozenVelocity(component);
component.angularVelocity = Vector3.zero;
}
}
else
{
orig.Invoke(self);
}
}
private static void OrbManager_FixedUpdate_Hook(orig_FixedUpdate orig, OrbManager self)
{
if (!TIMESTOP_FREEZE_PROJECTILES)
{
orig.Invoke(self);
}
}
private static void OrbEffect_UpdateOrb_Hook(orig_UpdateOrb orig, OrbEffect self, float deltaTime)
{
if (!TIMESTOP_FREEZE_PROJECTILES)
{
orig.Invoke(self, deltaTime);
}
}
private static bool Run_ShouldUpdateRunStopwatch_Hook(orig_ShouldUpdateRunStopwatch orig, Run self)
{
if (orig.Invoke(self))
{
return !TIMESTOP_ACTIVE;
}
return false;
}
private static void SetStateOnHurt_SetPain_Hook(orig_SetPain orig, SetStateOnHurt self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void SetStateOnHurt_SetStun_Hook(orig_SetStun orig, SetStateOnHurt self, float duration)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self, duration);
}
}
private static void SetStateOnHurt_SetFrozen_Hook(orig_SetFrozen orig, SetStateOnHurt self, float duration)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self, duration);
}
}
private static void ProjectileImpactExplosion_FixedUpdate_Hook(orig_FixedUpdate orig, ProjectileImpactExplosion self)
{
if (!TIMESTOP_FREEZE_PROJECTILES)
{
orig.Invoke(self);
}
}
private static void ChargeLaser_FixedUpdate(orig_FixedUpdate orig, ChargeLaser self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void ChargeLaser_Update(orig_Update orig, ChargeLaser self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void ChargeMegaLaser_FixedUpdate_Hook(orig_FixedUpdate orig, ChargeMegaLaser self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void ChargeMegaLaser_Update_Hook(orig_Update orig, ChargeMegaLaser self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void FireMegaLaser_FixedUpdate_Hook(orig_FixedUpdate orig, FireMegaLaser self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void ChargeGoldMegaLaser_FixedUpdate_Hook(orig_FixedUpdate orig, ChargeGoldMegaLaser self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void FireGoldMegaLaser_FixedUpdate_Hook(orig_FixedUpdate orig, FireGoldMegaLaser self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void WormBodyPositions2_OnDeathStart_Hook(orig_OnDeathStart orig, WormBodyPositions2 self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void WormBodyPositionsDriver_FixedUpdateServer_Hook(orig_FixedUpdateServer orig, WormBodyPositionsDriver self)
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
else
{
self.chaserVelocity = Vector3.zero;
}
}
private static void DelayBlast_FixedUpdate_Hook(orig_FixedUpdate orig, DelayBlast self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void DestroyOnTimer_FixedUpdate_Hook(orig_FixedUpdate orig, DestroyOnTimer self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void MinigunFire_FixedUpdate_Hook(orig_FixedUpdate orig, MinigunFire self)
{
if (!TIMESTOP_ACTIVE)
{
orig.Invoke(self);
}
}
private static void GenericCharacterDeath_OnEnter_Hook(orig_OnEnter orig, GenericCharacterDeath self)
{
MainPlugin.DebugLog("GenericCharacterDeath_OnEnter_Hook();");
if (TIMESTOP_ACTIVE)
{
CharacterBody characterBody = ((EntityState)self).outer.commonComponents.characterBody;
if ((Object)(object)characterBody != (Object)null && (Object)(object)characterBody == (Object)(object)characterBodyUsed)
{
MainPlugin.DebugLog("GenericCharacterDeath_OnEnter_Hook() : Time User Died, end timestop!!!");
ForceEndTimeStop();
}
}
orig.Invoke(self);
}
private static void OnTimeStop_Start()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
TIMESTOP_STARTED_TIME = Time.time;
MainPlugin.CreateCameraShake(((Component)characterBodyUsed).transform.position, TIMESTOP_STARTUP_DURATION, 100f, 1f, 180f, 0f, true);
timeStopFX = Object.Instantiate<GameObject>(KingItemsAssets.ZaWarudoEffect, ((Component)characterBodyUsed).transform.position, Quaternion.identity);
timeStopFX.transform.SetParent(((Component)characterBodyUsed).transform, true);
timeStopFX.layer = LayerMask.NameToLayer("PostProcess");
LeanTween.scale(timeStopFX, new Vector3(20f, 20f, 20f), TIMESTOP_STARTUP_DURATION / 2f).setOnComplete((Action)FXStart_Middle_OnComplete).setOnUpdate((Action<float>)FXStart_OnUpdate);
MainPlugin.PlaySoundEvent(timeStopFX, ItemsSounds.TimeStopSFX, 100);
MainPlugin.SetOverrideMusic(true, TIMESTOP_STARTUP_DURATION + TIMESTOP_DURATION + TIMESTOP_STARTUP_DURATION);
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<ColorGrading>().hueShift).value = 0f;
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<ColorGrading>().saturation).value = 0f;
((ParameterOverride<float>)(object)timeStopFX.GetComponent<PostProcessVolume>().profile.GetSetting<LensDistortion>().intensity).value = 0f;
TimeStopFreezeAllEnemies();
TIMESTOP_FREEZE_PROJECTILES = true;
TIMESTOP_FREEZE_SPAWNS = true;
FREEZE_TIMER = 0f;
ParticleSystem[] array = Object.FindObjectsOfType<ParticleSystem>();
for (int i = 0; i < array.Length; i++)
{
array[i].Pause(true);
}
}
private static void OnTimeStop_PreEnd()
{
TIMESTOP_FREEZE_PROJECTILES = false;
TIMESTOP_FREEZE_SPAWNS = false;
ProjectileSimple[] array = Object.FindObjectsOfType<ProjectileSimple>();
foreach (ProjectileSimple val in array)
{
Reflection.InvokeMethod((object)val, "SetForwardSpeed", new object[1] { val.desiredForwardSpeed });
}
ParticleSystem[] array2 = Object.FindObjectsOfType<ParticleSystem>();
foreach (ParticleSystem val2 in array2)
{
if (val2.isPaused)
{
val2.Play(true);
}
}
}
private static void OnTimeStop_End()
{
if ((Object)(object)timeStopFX != (Object)null)
{
Object.Destroy((Object)(object)timeStopFX);
}
if (currentSequence != null)
{
LeanTween.cancel(currentSequence.id);
}
ResetTimeStopValues();
}
public static void ResetTimeStopValues()
{
timeStopFX = null;
TIMESTOP_ACTIVE = false;
TIMESTOP_FREEZE_PROJECTILES = false;
TIMESTOP_FREEZE_SPAWNS = false;
FREEZE_TIMER = 0f;
currentSequence = null;
}
public static void ForceEndTimeStop()
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)timeStopFX != (Object)null)
{
LeanTween.cancel(timeStopFX);
}
if ((Object)(object)characterBodyUsed != (Object)null)
{
Vector3 position = ((Component)characterBodyUsed).transform.position;
LayerIndex entityPrecise = LayerIndex.entityPrecise;
TimeStopEnemies(Physics.OverlapSphere(position, float.MaxValue, LayerMask.op_Implicit(((LayerIndex)(ref entityPrecise)).mask)).ToArray(), characterBodyUsed, 0f);
}
OnTimeStop_PreEnd();
OnTimeStop_End();
}
}
public class KaioEssence
{
private const float m_buffDuration = 10f;
public static string s_buffName = CreateName() + "Buff";
public const float s_buffScale = 0.85f;
public static EquipmentDef CreateCustomEquipmentDef()
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
ScriptableObject obj = ScriptableObject.CreateInstance(typeof(EquipmentDef));
ScriptableObject obj2 = ((obj is EquipmentDef) ? obj : null);
((Object)obj2).name = CreateName();
((EquipmentDef)obj2).appearsInMultiPlayer = true;
((EquipmentDef)obj2).appearsInSinglePlayer = true;
((EquipmentDef)obj2).isBoss = false;
((EquipmentDef)obj2).isLunar = false;
((EquipmentDef)obj2).canDrop = true;
((EquipmentDef)obj2).colorIndex = (ColorIndex)5;
((EquipmentDef)obj2).enigmaCompatible = true;
((EquipmentDef)obj2).pickupIconSprite = KingItemsAssets.Img_KaioEssence;
((EquipmentDef)obj2).loreToken = CreateItemLore();
((EquipmentDef)obj2).descriptionToken = CreateItemComplexDescription();
((EquipmentDef)obj2).pickupToken = CreateItemSimpleDescription();
((EquipmentDef)obj2).nameToken = CreateNameToken();
((EquipmentDef)obj2).cooldown = 60f;
((EquipmentDef)obj2).pickupModelPrefab = KingItemsAssets.KaioEssence;
return (EquipmentDef)(object)obj2;
}
public static string CreateName()
{
return "KaioEssence";
}
public static string CreateNameToken()
{
return "Kaio Essence";
}
public static string CreateItemComplexDescription()
{
string text = "";
string text2 = "";
string text3 = "";
KaiokenTransformationState kaiokenReference = GetKaiokenReference();
if (kaiokenReference != null)
{
text = KingUtil.MultToPercent(((TransformationState)kaiokenReference).GetDamagePercentBonus() * 0.85f).ToString("n0");
text2 = KingUtil.MultToPercent(((TransformationState)kaiokenReference).GetAttackSpeedPercentBonus() * 0.85f).ToString("n0");
text3 = KingUtil.MultToPercent(((TransformationState)kaiokenReference).GetMoveSpeedPercentBonus() * 0.85f).ToString("n0");
}
return "Grants a purified variant of the Kaioken, gaining bonus " + MainPlugin.ColorText(text + "% Damage, " + text2 + "% Attack Speed & " + text3 + "% Movement Speed", "#E5C962") + " for " + MainPlugin.ColorText(10f.ToString("n0"), "#FFFFFF") + " Seconds.";
}
public static string CreateItemSimpleDescription()
{
return "Grants a purified variant of the Kaioken, gaining bonus " + MainPlugin.ColorText("Damage, Attack Speed & Movement Speed", "#E5C962") + " for " + MainPlugin.ColorText(10f.ToString("n0"), "#FFFFFF") + " Seconds.";
}
public static string CreateItemLore()
{
return "Forged by the great Kai himself, a fragment of the Kaioken was formed, granting its user the benefits without repercussion...";
}
public static bool OnCustomEquipmentActivated(EquipmentSlot self)
{
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)self.characterBody != (Object)null)
{
BonusStatHandler component = ((Component)self.characterBody).GetComponent<BonusStatHandler>();
if ((Object)(object)component != (Object)null)
{
if (((NetworkBehaviour)self.characterBody).hasAuthority)
{
KaiokenTransformationState kaiokenReference = GetKaiokenReference();
if (kaiokenReference != null)
{
if (!component.HasBonusStatBundle(s_buffName))
{
MainPlugin.PlaySoundEvent(((Component)self).gameObject, BaseSounds.aura_kaioken_start, 100);
}
BonusStatBundle val = default(BonusStatBundle);
((BonusStatBundle)(ref val))..ctor(s_buffName, KingItemsAssets.KaioEssence_Aura, 10f);
BonusStatBundle val2 = ((TransformationState)kaiokenReference).GenerateBonusStateBundle();
List<BonusStat> allBonusStats = ((BonusStatBundle)(ref val2)).GetAllBonusStats();
for (int i = 0; i < allBonusStats.Count; i++)
{
BonusStat val3 = allBonusStats[i];
val3.MultValue *= 0.85f;
((BonusStatBundle)(ref val)).AddBonusStat(ref val3);
}
component.AddBonusStatBundle(val);
}
}
else
{
NetworkHandler component2 = ((Component)self.characterBody).GetComponent<NetworkHandler>();
if ((Object)(object)component2 != (Object)null)
{
component2.CmdCallFunction(MainPlugin.GetAssemblyNameFromNamespace("NS_KingItems"), "KaioEssence", "ClientOnCustomEquipmentActivated", ((Component)self.characterBody).gameObject, true, true, false, true);
}
}
}
}
return true;
}
public static KaiokenTransformationState GetKaiokenReference()
{
TransformationState obj = TransformationBank.FindLoadedTransformation("Kaioken x3");
return (KaiokenTransformationState)(object)((obj is KaiokenTransformationState) ? obj : null);
}
public static void ClientOnCustomEquipmentActivated(GameObject characterBodyGO)
{
CharacterBody component = characterBodyGO.GetComponent<CharacterBody>();
if ((Object)(object)component != (Object)null && ((NetworkBehaviour)component).hasAuthority)
{
OnCustomEquipmentActivated(component.equipmentSlot);
}
}
}
public class SenzuBean
{
public static EquipmentDef CreateCustomEquipmentDef()
{
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
ScriptableObject obj = ScriptableObject.CreateInstance(typeof(EquipmentDef));
ScriptableObject obj2 = ((obj is EquipmentDef) ? obj : null);
((Object)obj2).name = CreateName();
((EquipmentDef)obj2).appearsInMultiPlayer = true;
((EquipmentDef)obj2).appearsInSinglePlayer = true;
((EquipmentDef)obj2).isBoss = false;
((EquipmentDef)obj2).isLunar = false;
((EquipmentDef)obj2).canDrop = true;
((EquipmentDef)obj2).colorIndex = (ColorIndex)5;
((EquipmentDef)obj2).enigmaCompatible = true;
((EquipmentDef)obj2).pickupIconSprite = KingItemsAssets.Img_SenzuBean;
((EquipmentDef)obj2).pickupModelPrefab = KingItemsAssets.SenzuBean;
((EquipmentDef)obj2).loreToken = CreateItemLore();
((EquipmentDef)obj2).descriptionToken = CreateItemComplexDescription();
((EquipmentDef)obj2).pickupToken = CreateItemSimpleDescription();
((EquipmentDef)obj2).nameToken = CreateNameToken();
((EquipmentDef)obj2).cooldown = 150f;
return (EquipmentDef)(object)obj2;
}
public static string CreateName()
{
return "SenzuBean";
}
public static string CreateNameToken()
{
return "Senzu Bean";
}
public static string CreateItemComplexDescription()
{
return "Instantly replenish " + MainPlugin.ColorText("100% of your Maximum Health", "#00FF00") + "\nAdditionally, replenish " + MainPlugin.ColorText("100% of your Maximum Ki", "#03bcff");
}
public static string CreateItemSimpleDescription()
{
return "Instantly replenish " + MainPlugin.ColorText("All Health", "#00FF00") + " and " + MainPlugin.ColorText("All Ki", "#03bcff");
}
public static string CreateItemLore()
{
return "Senzu Beans are grown by Korin in Korin Tower.\nWhen eaten, the consumer's energy and physical health are restored to their fullest;\nthe effects are typically almost instantaneous for the recipient,\nmaking these beans a great asset both in and out of battle.";
}
public static bool OnCustomEquipmentActivated(EquipmentSlot self)
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Expected O, but got Unknown
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
EffectData val = new EffectData();
val.origin = ((Component)self).transform.position;
val.SetNetworkedObjectReference(((Component)self).gameObject);
EffectManager.SpawnEffect(LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/FruitHealEffect"), val, true);
self.characterBody.healthComponent.HealFraction(1f, default(ProcChainMask));
NetworkHandler component = ((Component)self.characterBody).GetComponent<NetworkHandler>();
if ((Object)(object)component != (Object)null)
{
component.CmdRefillKi(100f);
}
return true;
}
}
public class TrainingWeight
{
private static List<float> s_currentTrainingValues = new List<float>();
private static List<bool> s_currentValuesTrained = new List<bool>();
private const string s_bsbName = "TrainingWeightBonus";
private const string s_bsbNameDebuff = "TrainingWeightBonusDebuff";
private const string s_descriptionToken = "TrainingWeight_DescToken";
private const float s_statPercentModifier = 30f;
private const float s_maxTrainingValue = 480f;
private const float s_gainBonusMult = 1.5f;
private static float s_updateTrainingBuffTimer = 0f;
private const float s_updateTrainingBuffTimerMax = 1f;
private const int s_trainingLimit = 3;
private const float s_expGainMultPerItem = 0.15f;
private static DynamicArray<ItemIcon> s_inventoryIcons = new DynamicArray<ItemIcon>();
public static void ResetCurrentTrainingValues()
{
s_currentValuesTrained.Clear();
s_currentTrainingValues.Clear();
}
private static bool IsTrainingComplete(int idx)
{
return s_currentTrainingValues[idx] == 480f;
}
private static float GetTrainingCompleteRatio(int idx)
{
if (idx >= 0 && idx < s_currentTrainingValues.Count)
{
return s_currentTrainingValues[idx] / 480f;
}
return 0f;
}
public static ItemDef CreateCustomItemDef()
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Expected O, but got Unknown
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Expected O, but got Unknown
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: Expected O, but got Unknown
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Expected O, but got Unknown
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Expected O, but got Unknown
ScriptableObject obj = ScriptableObject.CreateInstance(typeof(ItemDef));
ScriptableObject obj2 = ((obj is ItemDef) ? obj : null);
((Object)obj2).name = CreateName();
((ItemDef)obj2).pickupIconSprite = KingItemsAssets.Img_TrainingWeight;
((ItemDef)obj2).pickupModelPrefab = KingItemsAssets.TrainingWeight;
((ItemDef)obj2).loreToken = CreateItemLore();
((ItemDef)obj2).descriptionToken = CreateItemSimpleDescription();
((ItemDef)obj2).pickupToken = CreateItemSimpleDescription();
((ItemDef)obj2).nameToken = CreateNameToken();
ItemTierDef val = Addressables.LoadAssetAsync<ItemTierDef>((object)"RoR2/Base/Common/LunarTierDef.asset").WaitForCompletion();
Reflection.SetFieldValue<ItemTierDef>((object)obj2, "_itemTierDef", val);
MainPlugin.s_delegate_ResetStaticCharacterValues = (VoidDelegate)Delegate.Combine((Delegate?)(object)MainPlugin.s_delegate_ResetStaticCharacterValues, (Delegate?)new VoidDelegate(ResetCurrentTrainingValues));
TransformationHandler.s_onTransformationExpGain_Delegate = (OnTransformationExpGain_DelegateDeclaration)Delegate.Combine((Delegate?)(object)TransformationHandler.s_onTransformationExpGain_Delegate, (Delegate?)new OnTransformationExpGain_DelegateDeclaration(OnTransformationExpGain_Hook));
ItemIcon.SetItemIndex += new hook_SetItemIndex(ItemIcon_SetItemIndex_Hook);
return (ItemDef)(object)obj2;
}
private static void ItemIcon_SetItemIndex_Hook(orig_SetItemIndex orig, ItemIcon self, ItemIndex newItemIndex, int newItemCount)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, newItemIndex, newItemCount);
int num = MainPlugin.s_customItemManager.AccessRegisteredItems().FindFirstElementIndex((Predicate<RegisteredItem>)((RegisteredItem x) => x.itemDef.itemIndex == newItemIndex));
if (num != -1)
{
RegisteredItem val = MainPlugin.s_customItemManager.AccessRegisteredItems().AccessElement(num);
if ((Object)(object)self.tooltipProvider != (Object)null && (Object)(object)val.itemDef != (Object)null && val.itemDef.nameToken == CreateNameToken())
{
s_inventoryIcons.AddElementUnique(self);
}
}
}
public static string CreateName()
{
return "TrainingWeight";
}
public static string CreateNameToken()
{
return "Training Weight";
}
public static string CreateItemComplexDescription()
{
string text = "Lose " + 30f.ToString("n0") + "% of your total " + MainPlugin.ColorText("Damage, Attack Speed & Movement Speed", "#C7B96A") + " but gain an additional " + 45f.ToString("n0") + "% over time whilst in combat. \nIncreases " + MainPlugin.ColorText("Form Mastery Exp", "#FF5400") + " gain by " + KingUtil.MultToPercent(0.15f).ToString("n0") + "%. \n";
string text2 = null;
for (int i = 0; i < s_currentTrainingValues.Count; i++)
{
if (!s_currentValuesTrained[i])
{
text2 = text2 + "[" + i + "] : " + MainPlugin.ColorText(KingUtil.MultToPercent(GetTrainingCompleteRatio(i)).ToString("n0") + "% \n", "#03f4fc");
}
}
if (!string.IsNullOrWhiteSpace(text2))
{
text += "Current: \n";
text += text2;
}
return text + "Trained: " + MainPlugin.ColorText(GetCompletedTrainedItems().ToString(), "#03f4fc") + "\n" + MainPlugin.ColorText("Only " + 3 + " " + CreateNameToken() + "s can be trained at a time.", "#999999");
}
public static void RefreshItemComplexDescription()
{
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
int num = MainPlugin.s_customItemManager.AccessRegisteredItems().FindFirstElementIndex((Predicate<RegisteredItem>)((RegisteredItem x) => x.itemDef.nameToken == CreateNameToken()));
if (num == -1)
{
return;
}
RegisteredItem val = MainPlugin.s_customItemManager.AccessRegisteredItems().AccessElement(num);
if (val == null)
{
return;
}
bool flag = false;
while (!flag)
{
int num2 = -1;
for (int i = 0; i < s_inventoryIcons.GetCount(); i++)
{
if ((Object)(object)s_inventoryIcons.AccessElement(i) == (Object)null)
{
num2 = i;
break;
}
if (Reflection.GetFieldValue<ItemIndex>((object)s_inventoryIcons.AccessElement(i), "itemIndex") != val.itemDef.itemIndex)
{
num2 = i;
break;
}
}
if (num2 != -1)
{
s_inventoryIcons.RemoveElement(num2);
}
else
{
flag = true;
}
}
for (int j = 0; j < s_inventoryIcons.GetCount(); j++)
{
s_inventoryIcons.AccessElement(j).tooltipProvider.overrideBodyText = CreateItemComplexDescription();
}
}
public static string CreateItemSimpleDescription()
{
return "Lose a portion of your total " + MainPlugin.ColorText("Stats", "#C7B96A") + " but gain additional bonus " + MainPlugin.ColorText("Stats", "#C7B96A") + " over time whilst in combat. \nIncreases " + MainPlugin.ColorText("Form Mastery Exp", "#FF5400") + " gain. \n" + MainPlugin.ColorText("Only " + 3 + " " + CreateNameToken() + "s can be trained at a time.", "#999999");
}
public static string CreateItemLore()
{
return "\"Yup! Kami told me to. It was part of my training. It's not much different than Master Roshi's style. You wear a big turtle shell to gain strength. It's pretty much the same principle here.\" - Goku";
}
public static int GetCompletedTrainedItems()
{
int num = 0;
foreach (bool item in s_currentValuesTrained)
{
if (item)
{
num++;
}
}
return num;
}
public static bool CanTrain(CharacterBody characterBody)
{
if (!characterBody.outOfCombat)
{
return !MainPlugin.IsInStage("bazaar");
}
return false;
}
private static void AddTrainableValues()
{
s_currentTrainingValues.Add(0f);
s_currentValuesTrained.Add(item: false);
}
private static void RemoveTrainableValues()
{
s_currentTrainingValues.RemoveAt(s_currentTrainingValues.Count - 1);
s_currentValuesTrained.RemoveAt(s_currentValuesTrained.Count - 1);
}
public static void OnItemUpdate(CharacterBody characterBody, int itemCount)
{
if (!((Object)(object)characterBody != (Object)null) || ((Object)(object)characterBody.inventory != (Object)null && characterBody.inventory.GetItemCount(Items.InvadingDoppelganger) > 0))
{
return;
}
BonusStatHandler component = ((Component)characterBody).GetComponent<BonusStatHandler>();
if (!((Object)(object)component != (Object)null))
{
return;
}
if (itemCount != s_currentTrainingValues.Count)
{
CheckTrainingDebuffs(component, itemCount);
CheckTrainingBuffs(component, itemCount);
int num = itemCount - s_currentTrainingValues.Count;
if (num > 0)
{
for (int i = 0; i < num; i++)
{
AddTrainableValues();
}
}
else if (num < 0 && !MainPlugin.IsInStage("moon2"))
{
for (int j = 0; j < Mathf.Abs(num); j++)
{
RemoveTrainableValues();
}
}
return;
}
if (itemCount > 0 && CanTrain(characterBody))
{
int num2 = 0;
for (int k = 0; k < itemCount; k++)
{
if (num2 < 3 && !s_currentValuesTrained[k])
{
s_currentTrainingValues[k] += Time.deltaTime;
if (MainPlugin.FASTER_TRAINING)
{
s_currentTrainingValues[k] += Time.deltaTime * 100f;
}
s_currentTrainingValues[k] = Mathf.Clamp(s_currentTrainingValues[k], 0f, 480f);
if (IsTrainingComplete(k))
{
s_currentValuesTrained[k] = true;
}
num2++;
}
}
}
CheckTrainingDebuffs(component, itemCount);
if (s_updateTrainingBuffTimer < 0f)
{
CheckTrainingBuffs(component, itemCount);
s_updateTrainingBuffTimer = 1f;
RefreshItemComplexDescription();
}
else
{
s_updateTrainingBuffTimer -= Time.deltaTime;
}
}
private static string GetBsbName(int idx)
{
return "TrainingWeightBonus" + idx;
}
private static string GetBsbNameDebuff(int idx)
{
return "TrainingWeightBonusDebuff" + idx;
}
private static void CheckTrainingDebuffs(BonusStatHandler bsh, int itemCount)
{
for (int i = 0; i < s_currentTrainingValues.Count; i++)
{
string bsbNameDebuff = GetBsbNameDebuff(i);
if (i < itemCount)
{
if (!bsh.HasBonusStatBundle(bsbNameDebuff))
{
ApplyDebuffBonusStats(bsh, bsbNameDebuff);
}
}
else if (bsh.HasBonusStatBundle(bsbNameDebuff))
{
bsh.RemoveBonusStatBundle(ref bsbNameDebuff);
}
}
}
private static void CheckTrainingBuffs(BonusStatHandler bsh, int itemCount)
{
for (int i = 0; i < s_currentTrainingValues.Count; i++)
{
if (i < itemCount)
{
ApplyBonusStats(bsh, i);
}
else if (bsh.HasBonusStatBundle(GetBsbName(i)))
{
string bsbName = GetBsbName(i);
bsh.RemoveBonusStatBundle(ref bsbName);
}
}
}
private static void ApplyBonusStats(BonusStatHandler bsh, int trainingIndex)
{
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
string bsbName = GetBsbName(trainingIndex);
bsh.RemoveBonusStatBundle(ref bsbName);
BonusStatBundle val = default(BonusStatBundle);
((BonusStatBundle)(ref val))..ctor(bsbName, (GameObject)null, 0f);
float num = Mathf.Lerp(0f, KingUtil.PercentToMult(45f), s_currentTrainingValues[trainingIndex] / 480f);
BonusStat val2 = new BonusStat("damage", 0f, num);
((BonusStatBundle)(ref val)).AddBonusStat(ref val2);
val2 = new BonusStat("moveSpeed", 0f, num);
((BonusStatBundle)(ref val)).AddBonusStat(ref val2);
val2 = new BonusStat("attackSpeed", 0f, num);
((BonusStatBundle)(ref val)).AddBonusStat(ref val2);
bsh.AddBonusStatBundle(val);
}
private static void ApplyDebuffBonusStats(BonusStatHandler bsh, string bsbName)
{
//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_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: 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_0069: Unknown result type (might be due to invalid IL or missing references)
BonusStatBundle val = default(BonusStatBundle);
((BonusStatBundle)(ref val))..ctor(bsbName, (GameObject)null, 0f);
float num = 0f - KingUtil.PercentToMult(30f);
BonusStat val2 = new BonusStat("damage", 0f, num);
((BonusStatBundle)(ref val)).AddBonusStat(ref val2);
val2 = new BonusStat("moveSpeed", 0f, num);
((BonusStatBundle)(ref val)).AddBonusStat(ref val2);
val2 = new BonusStat("attackSpeed", 0f, num);
((BonusStatBundle)(ref val)).AddBonusStat(ref val2);
bsh.AddBonusStatBundle(val);
}
private static void OnTransformationExpGain_Hook(Inventory inventory, ref float expGainMult)
{
//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)
int num = MainPlugin.s_customItemManager.AccessRegisteredItems().FindFirstElementIndex((Predicate<RegisteredItem>)((RegisteredItem x) => x.itemDef.nameToken == CreateNameToken()));
RegisteredItem val = MainPlugin.s_customItemManager.AccessRegisteredItems().AccessElement(num);
if (val != null)
{
ItemIndex itemIndex = val.itemDef.itemIndex;
if ((Object)(object)inventory != (Object)null)
{
int itemCount = inventory.GetItemCount(itemIndex);
expGainMult += (float)itemCount * 0.15f;
}
}
}
}
public static class KingItemsAssets
{
public static AssetBundle LocalAssetBundle;
public static Sprite Img_DiosHead;
public static Sprite Img_KaioEssence;
public static Sprite Img_SenzuBean;
public static Sprite Img_TrainingWeight;
public static Sprite Tex_DioHead;
public static Material COL_KaioEssence;
public static Material Mat_DiosHead;
public static GameObject KaioEssence_Aura;
public static GameObject DiosHead;
public static GameObject KaioEssence;
public static GameObject SenzuBean;
public static GameObject TrainingWeight;
public static GameObject ZaWarudoEffect;
public static void PopulateAssets()
{
MainPlugin.DebugLog("KingItemsAssets::PopulateAssets() Started!");
AssetLoader.LoadAssetBundle("KingItems.items_assetbundle", ref LocalAssetBundle);
AssetLoader.LoadSoundBank("KingItems.items_soundbank.bnk");
LoadAllAssetsFromAssetBundle();
MainPlugin.DebugLog("KingItemsAssets::PopulateAssets() Complete!");
}
private static void LoadAllAssetsFromAssetBundle()
{
AssetLoader.LoadAsset(ref Img_DiosHead, "Img_DiosHead", LocalAssetBundle);
AssetLoader.LoadAsset(ref Img_KaioEssence, "Img_KaioEssence", LocalAssetBundle);
AssetLoader.LoadAsset(ref Img_SenzuBean, "Img_SenzuBean", LocalAssetBundle);
AssetLoader.LoadAsset(ref Img_TrainingWeight, "Img_TrainingWeight", LocalAssetBundle);
AssetLoader.LoadAsset(ref Tex_DioHead, "Tex_DioHead", LocalAssetBundle);
AssetLoader.LoadAsset(ref COL_KaioEssence, "COL_KaioEssence", LocalAssetBundle);
AssetLoader.LoadAsset(ref Mat_DiosHead, "Mat_DiosHead", LocalAssetBundle);
AssetLoader.LoadAsset(ref KaioEssence_Aura, "KaioEssence_Aura", LocalAssetBundle);
AssetLoader.LoadAsset(ref DiosHead, "DiosHead", LocalAssetBundle);
AssetLoader.LoadAsset(ref KaioEssence, "KaioEssence", LocalAssetBundle);
AssetLoader.LoadAsset(ref SenzuBean, "SenzuBean", LocalAssetBundle);
AssetLoader.LoadAsset(ref TrainingWeight, "TrainingWeight", LocalAssetBundle);
AssetLoader.LoadAsset(ref ZaWarudoEffect, "ZaWarudoEffect", LocalAssetBundle);
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.Kingpinush.KingItems", "KingItems", "1.4.2")]
public class KingItemsMainPlugin : BaseUnityPlugin
{
public const string MOD_NAME = "KingItems";
public const string MOD_UID = "com.Kingpinush.KingItems";
private void Awake()
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0020: Expected O, but got Unknown
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Expected O, but got Unknown
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Expected O, but got Unknown
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
KingItemsAssets.PopulateAssets();
MainPlugin.s_customItemManager.RegisterCustomEquipment(SenzuBean.CreateCustomEquipmentDef(), new OnCustomEquipmentUse_DelegateDeclaration(SenzuBean.OnCustomEquipmentActivated));
MainPlugin.s_customItemManager.RegisterCustomItem(TrainingWeight.CreateCustomItemDef(), new OnCustomItemUpdate_DelegateDeclaration(TrainingWeight.OnItemUpdate));
MainPlugin.s_customItemManager.RegisterCustomEquipment(KaioEssence.CreateCustomEquipmentDef(), new OnCustomEquipmentUse_DelegateDeclaration(KaioEssence.OnCustomEquipmentActivated));
MainPlugin.s_customItemManager.RegisterCustomEquipment(DiosHead.CreateCustomEquipmentDef(), new OnCustomEquipmentUse_DelegateDeclaration(DiosHead.OnCustomEquipmentActivated));
}
}