using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using EntityStates;
using EntityStates.Chef;
using HG;
using Microsoft.CodeAnalysis;
using R2API;
using RoR2;
using RoR2.Projectile;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
[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("BetterChefPrimary")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+1952fe37ea5bc2c05ac4b453bd9f133bc1c47919")]
[assembly: AssemblyProduct("BetterChefPrimary")]
[assembly: AssemblyTitle("BetterChefPrimary")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace BetterChefPrimary
{
public class AddCleaverToTracker : MonoBehaviour
{
public void Start()
{
EntityStateMachine val = EntityStateMachine.FindByCustomName(((Component)this).GetComponent<ProjectileController>().owner, "IDEATHHD_BETTERCHEFPRIMARY_ESM");
if (Object.op_Implicit((Object)(object)val) && val.state != null && val.state is BetterDiceMainStateMachine betterDiceMainStateMachine && ((EntityState)betterDiceMainStateMachine).isAuthority)
{
betterDiceMainStateMachine.AddCleaver(((Component)this).GetComponent<CleaverProjectile>());
}
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("iDeathHD.BetterChefPrimary", "BetterChefPrimary", "1.0.2")]
public class BetterChefPrimary : BaseUnityPlugin
{
public const string PluginGUID = "iDeathHD.BetterChefPrimary";
public const string PluginAuthor = "iDeathHD";
public const string PluginName = "BetterChefPrimary";
public const string PluginVersion = "1.0.2";
internal static void AddBetterPrimary()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: 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)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: 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_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: 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_014f: Expected O, but got Unknown
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
//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_01a8: Unknown result type (might be due to invalid IL or missing references)
GameObject obj = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Chef/ChefBody.prefab").WaitForCompletion();
LanguageAPI.Add("IDEATHHD_BETTERCHEFPRIMARY_BETTERDICE", "Better Dice");
LanguageAPI.Add("IDEATHHD_BETTERCHEFPRIMARY_BETTERDICE_DESC", "Throw a cleaver through enemies for <style=cIsDamage>250% damage</style>. Dealing <style=cIsDamage>375% damage</style> on the return trip.");
SkillLocator component = obj.GetComponent<SkillLocator>();
SkillDef val = Object.Instantiate<SkillDef>(component.primary.skillFamily.variants[0].skillDef);
val.mustKeyPress = false;
val.hideStockCount = true;
val.stockToConsume = 0;
val.baseMaxStock = 1;
val.dontAllowPastMaxStocks = true;
val.rechargeStock = 0;
val.requiredStock = 0;
val.skillNameToken = "IDEATHHD_BETTERCHEFPRIMARY_BETTERDICE";
((Object)val).name = val.skillNameToken;
val.skillDescriptionToken = "IDEATHHD_BETTERCHEFPRIMARY_BETTERDICE_DESC";
val.activationState = new SerializableEntityStateType(typeof(BetterDice));
ContentAddition.AddSkillDef(val);
bool flag = default(bool);
ContentAddition.AddEntityState(typeof(BetterDice), ref flag);
BetterDice.BoostedCleaverPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Chef/ChefDiceEnhanced.prefab").WaitForCompletion();
BetterDice.BoostedCleaverPrefab.AddComponent<AddCleaverToTracker>();
BetterDice.CleaverPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC2/Chef/ChefCleaver.prefab").WaitForCompletion();
BetterDice.CleaverPrefab.AddComponent<AddCleaverToTracker>();
ref Variant[] variants = ref component.primary.skillFamily.variants;
Variant val2 = new Variant
{
skillDef = val
};
((Variant)(ref val2)).viewableNode = new Node(val.skillNameToken, false, (Node)null);
ArrayUtils.ArrayAppend<Variant>(ref variants, ref val2);
BetterDiceMainStateMachine.ChefSkillDefs.BetterPrimary = val;
EntityStateMachine val3 = obj.AddComponent<EntityStateMachine>();
val3.customName = "IDEATHHD_BETTERCHEFPRIMARY_ESM";
val3.initialStateType = new SerializableEntityStateType(typeof(BetterDiceMainStateMachine));
val3.mainStateType = new SerializableEntityStateType(typeof(BetterDiceMainStateMachine));
ContentAddition.AddEntityState(typeof(BetterDiceMainStateMachine), ref flag);
ArrayUtils.ArrayAppend<EntityStateMachine>(ref obj.GetComponent<NetworkStateMachine>().stateMachines, ref val3);
}
public void Awake()
{
Log.Init(((BaseUnityPlugin)this).Logger);
AddBetterPrimary();
}
}
public class BetterDice : BaseState
{
public static GameObject CleaverPrefab;
public static GameObject BoostedCleaverPrefab;
public GameObject effectPrefab;
public GameObject effectEnhancedPrefab;
public float baseDuration = 2f;
public float damageCoefficient = 1.2f;
public float boostedDamageCoefficient = 1.2f;
public float force = 20f;
public string attackString;
public static string returnString;
public string yesChefAttackString;
public static string yesChefReturnString;
public float recoilAmplitude;
public float bloom;
public float recallAnimationTransitionTime = 0.2f;
public float approximateCleaverDistance = 80f;
internal float duration;
internal ChefController chefController;
internal bool hasBoost;
internal void CacheOriginalFields()
{
//IL_0000: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Expected O, but got Unknown
Dice val = new Dice();
effectPrefab = val.effectPrefab;
effectEnhancedPrefab = val.effectEnhancedPrefab;
baseDuration = val.baseDuration;
damageCoefficient = val.damageCoefficient;
boostedDamageCoefficient = val.boostedDamageCoefficient;
force = val.force;
attackString = val.attackString;
returnString = val.returnString;
yesChefAttackString = val.yesChefAttackString;
yesChefReturnString = val.yesChefReturnString;
recoilAmplitude = val.recoilAmplitude;
bloom = val.bloom;
recallAnimationTransitionTime = val.recallAnimationTransitionTime;
approximateCleaverDistance = val.approximateCleaverDistance;
}
internal void FireCleaverProjectile(Ray aimRay)
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0078: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//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_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: 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_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_0180: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
if (!((EntityState)this).isAuthority)
{
return;
}
GameObject projectilePrefab;
int[] array;
if (hasBoost)
{
projectilePrefab = BoostedCleaverPrefab;
array = new int[3] { 8, 4, 4 };
}
else
{
projectilePrefab = CleaverPrefab;
array = new int[1] { 1 };
}
int num = array.Length;
for (int i = 0; i < num; i++)
{
int num2 = array[i];
float num3 = (float)(i % 2) * (0.5f / (float)num2);
for (int j = 0; j < num2; j++)
{
FireProjectileInfo val = default(FireProjectileInfo);
val.projectilePrefab = projectilePrefab;
val.position = ((Ray)(ref aimRay)).origin;
float num4 = (num3 + (float)j / (float)num2) * MathF.PI * 2f;
float num5 = Mathf.Acos(0.02f + (float)i / (float)num);
float num6 = Mathf.Sin(num5) * Mathf.Sin(num4);
float num7 = Mathf.Cos(num5);
float num8 = Mathf.Sin(num5) * Mathf.Cos(num4);
Quaternion val2 = Quaternion.LookRotation(new Vector3(num6, num7, num8));
val.rotation = Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction) * val2;
val.owner = ((EntityState)this).gameObject;
val.damage = base.damageStat * damageCoefficient;
val.damageTypeOverride = DamageTypeCombo.op_Implicit((DamageType)0);
val.force = force;
val.crit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master);
if (!NetworkServer.active && Object.op_Implicit((Object)(object)chefController))
{
chefController.CacheCleaverProjectileFireInfo(val);
}
ProjectileManager.instance.FireProjectile(val);
}
}
}
public override void OnEnter()
{
//IL_00a1: 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)
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
CacheOriginalFields();
((BaseState)this).OnEnter();
if (!Object.op_Implicit((Object)(object)chefController))
{
chefController = ((EntityState)this).GetComponent<ChefController>();
}
chefController.characterBody = ((EntityState)this).characterBody;
chefController.spreadBloom = bloom;
hasBoost = ((EntityState)this).characterBody.HasBuff(Buffs.Boosted);
if (hasBoost)
{
damageCoefficient = boostedDamageCoefficient;
if (NetworkServer.active)
{
((EntityState)this).characterBody.RemoveBuff(Buffs.Boosted);
}
}
chefController.NetworkcatchDirtied = false;
chefController.recallCleaver = false;
Ray aimRay = ((BaseState)this).GetAimRay();
TrajectoryAimAssist.ApplyTrajectoryAimAssist(ref aimRay, approximateCleaverDistance, ((EntityState)this).gameObject, 1f);
duration = baseDuration / base.attackSpeedStat;
((BaseState)this).StartAimMode(duration + 2f, false);
PlayThrowCleaverAnimation();
((BaseState)this).AddRecoil(-1f * recoilAmplitude, -1.5f * recoilAmplitude, -0.25f * recoilAmplitude, 0.25f * recoilAmplitude);
DoMouthMuzzle();
FireCleaverProjectile(aimRay);
}
internal void PlayThrowCleaverAnimation()
{
if (hasBoost)
{
((EntityState)this).PlayAnimation("Gesture, Override", "FireSliceAndDice", "FireSliceAndDice.playbackRate", duration, 0f);
((EntityState)this).PlayAnimation("Gesture, Additive", "FireSliceAndDice", "FireSliceAndDice.playbackRate", duration, 0f);
Util.PlaySound(yesChefAttackString, ((EntityState)this).gameObject);
}
else
{
((EntityState)this).PlayAnimation("Gesture, Override", "FireDice", "FireDice.playbackRate", duration, 0f);
((EntityState)this).PlayAnimation("Gesture, Additive", "FireDice", "FireDice.playbackRate", duration, 0f);
Util.PlaySound(attackString, ((EntityState)this).gameObject);
}
}
internal void DoMouthMuzzle()
{
GameObject val = (hasBoost ? effectEnhancedPrefab : effectPrefab);
if (Object.op_Implicit((Object)(object)val))
{
EffectManager.SimpleMuzzleFlash(val, ((Component)((EntityState)this).characterBody.aimOriginTransform).gameObject, "MouthMuzzle", false);
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge > duration)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
chefController.SetYesChefHeatState(false);
if (NetworkServer.active)
{
((EntityState)this).characterBody.RemoveBuff(Buffs.boostedFireEffect);
}
if (((EntityState)this).isAuthority)
{
chefController.ClearSkillOverrides();
}
((EntityState)this).OnExit();
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return (InterruptPriority)1;
}
}
public class BetterDiceMainStateMachine : BaseState
{
public static class ChefSkillDefs
{
public static SkillDef BetterPrimary;
}
public const string EntityStateMachineCustomName = "IDEATHHD_BETTERCHEFPRIMARY_ESM";
private List<CleaverProjectile> _activeCleavers = new List<CleaverProjectile>();
public void AddCleaver(CleaverProjectile cleaverProjectile)
{
_activeCleavers.Add(cleaverProjectile);
}
public override void FixedUpdate()
{
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Invalid comparison between Unknown and I4
((EntityState)this).FixedUpdate();
if ((Object)(object)((EntityState)this).skillLocator.primary.skillDef != (Object)(object)ChefSkillDefs.BetterPrimary)
{
return;
}
for (int num = _activeCleavers.Count - 1; num >= 0; num--)
{
CleaverProjectile val = _activeCleavers[num];
if (Object.op_Implicit((Object)(object)val) && (int)val.NetworkboomerangState == 3)
{
val.NetworkboomerangState = (BoomerangState)2;
_activeCleavers.RemoveAt(num);
}
}
}
}
internal static class Log
{
private 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);
}
}
}