using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using BepInEx;
using BepInEx.Logging;
using CradleExpansion.Handlers;
using EntityStates;
using EntityStates.Commando;
using R2API;
using R2API.ContentManagement;
using R2API.ScriptableObjects;
using RoR2;
using RoR2.Navigation;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace CradleExpansion
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.OopsAllLemurians.CradleExpansion", "CradleExpansion", "1.0.2")]
public class CradleExpansionMain : BaseUnityPlugin
{
public const string GUID = "com.OopsAllLemurians.CradleExpansion";
public const string MODNAME = "CradleExpansion";
public const string VERSION = "1.0.2";
public static AssetBundle assetBundle;
public static ManualLogSource Logger;
public static CradleExpansionMain Instance { get; private set; }
private void Awake()
{
Instance = this;
Logger = ((BaseUnityPlugin)this).Logger;
LoadAssetBundle();
Logger.LogMessage((object)"I knew you were gonna do this from the moment I got out of bed today typical Steve I'm not surprised.");
R2APIContentManager.AddPreExistingSerializableContentPack(assetBundle.LoadAsset<R2APISerializableContentPack>("CradleContentPack"), true);
Tokens.AddTokens();
Logger.LogMessage((object)"Adding Monsters to pool...");
SpawnCardBuilder.AddMonstersToPool();
Logger.LogMessage((object)"All tasks complete! No more to load! For the Gremlin Empire!");
}
private void LoadAssetBundle()
{
try
{
if ((Object)(object)assetBundle == (Object)null)
{
assetBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "cradleexpansion"));
if ((Object)(object)assetBundle == (Object)null)
{
Logger.LogError((object)"Failed to load the asset bundle. Check file name/path.");
return;
}
}
Logger.LogMessage((object)"Assembly Loaded");
}
catch (Exception ex)
{
Logger.LogError((object)("An error occurred while loading the asset bundle: " + ex.Message));
}
}
}
}
namespace CradleExpansion.Snarbolax
{
internal class SnarbolaxDeath : GenericCharacterDeath
{
public static float deathDelay = 5f;
public static GameObject deathEffectPrefab = CradleExpansionMain.assetBundle.LoadAsset<GameObject>("DeathBurst");
private bool hasDied;
public override void FixedUpdate()
{
//IL_0033: 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)
((GenericCharacterDeath)this).FixedUpdate();
if (((EntityState)this).fixedAge > deathDelay && !hasDied)
{
hasDied = true;
((GenericCharacterDeath)this).DestroyModel();
EffectManager.SimpleImpactEffect(deathEffectPrefab, ((EntityState)this).characterBody.corePosition, Vector3.up, false);
if (NetworkServer.active)
{
((GenericCharacterDeath)this).DestroyBodyAsapServer();
}
}
}
public override void OnExit()
{
((GenericCharacterDeath)this).DestroyModel();
((GenericCharacterDeath)this).OnExit();
}
}
internal class SnarbolaxSpawn : BaseState
{
private float duration;
private string muzzleString;
public override void OnEnter()
{
duration = 1.2f;
muzzleString = "SpawnFX";
((BaseState)this).OnEnter();
((EntityState)this).PlayAnimation("Fullbody", "Snarby_Activate");
AkSoundEngine.PostEvent("Play_wolver_spawn", ((EntityState)this).gameObject);
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
}
namespace CradleExpansion.Handlers
{
public class SpawnCardBuilder
{
public static void AddMonstersToPool()
{
CardToDirectorConverterWolver("cscWolverNormal", 12, 0, (MonsterSpawnDistance)0, (MonsterCategory)2);
}
private static void CardToDirectorConverterWolver(string cardId, int weight, int stageComp, MonsterSpawnDistance spacing, MonsterCategory monsterCat)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: 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_002d: 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_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: 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_004a: Expected O, but got Unknown
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Expected O, but got Unknown
//IL_0059: 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_006c: Expected O, but got Unknown
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Expected O, but got Unknown
//IL_007b: 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_008b: Expected O, but got Unknown
//IL_008b: 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_009e: Expected O, but got Unknown
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Expected O, but got Unknown
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Expected O, but got Unknown
CharacterSpawnCard val = CradleExpansionMain.assetBundle.LoadAsset<CharacterSpawnCard>(cardId);
((SpawnCard)val).forbiddenFlags = (NodeFlags)4;
DirectorCard val2 = new DirectorCard
{
spawnCard = (SpawnCard)(object)val,
selectionWeight = weight,
preventOverhead = false,
minimumStageCompletions = stageComp,
spawnDistance = spacing
};
Helpers.AddNewMonsterToStage(val2, monsterCat, (Stage)2, "");
Helpers.AddNewMonsterToStage(val2, monsterCat, (Stage)4, "");
Helpers.AddNewMonsterToStage(val2, monsterCat, (Stage)1073741824, "");
Helpers.AddNewMonsterToStage(val2, monsterCat, (Stage)8, "");
Helpers.AddNewMonsterToStage(val2, monsterCat, (Stage)64, "");
Helpers.AddNewMonsterToStage(val2, monsterCat, (Stage)131072, "");
Helpers.AddNewMonsterToStage(val2, monsterCat, (Stage)16384, "");
Helpers.AddNewMonsterToStage(val2, monsterCat, (Stage)4096, "");
}
}
[RequireComponent(typeof(CharacterBody))]
public class SpiralTierManager : MonoBehaviour
{
public Material[] wolverTiersNrm = (Material[])(object)new Material[3];
public Material[] wolverTiersSho = (Material[])(object)new Material[3];
public Material[] wolverTiersFir = (Material[])(object)new Material[3];
public Material[] wolverTiersIce = (Material[])(object)new Material[3];
public Material[] wolverTiersMend = (Material[])(object)new Material[3];
public Material[] wolverTiersMal = (Material[])(object)new Material[3];
public Material[] wolverTiersCel = (Material[])(object)new Material[3];
public Material[] wolverTiersPer = (Material[])(object)new Material[3];
public Material[] wolverTiersVoi = (Material[])(object)new Material[3];
public Material[] wolverTiersGold = (Material[])(object)new Material[3];
public Material[] wolverTiersTwi = (Material[])(object)new Material[3];
public CharacterModel characterModelScript;
public CharacterBody characterBody;
private float updateInterval;
public void MaterialSetup()
{
if (characterBody.HasBuff(Buffs.AffixBlue))
{
UpdateSkin(wolverTiersSho);
}
else if (characterBody.HasBuff(Buffs.AffixRed))
{
UpdateSkin(wolverTiersFir);
}
else if (characterBody.HasBuff(Buffs.AffixWhite))
{
UpdateSkin(wolverTiersIce);
}
else if (characterBody.HasBuff(Buffs.EliteEarth))
{
UpdateSkin(wolverTiersMend);
}
else if (characterBody.HasBuff(Buffs.AffixPoison))
{
UpdateSkin(wolverTiersMal);
}
else if (characterBody.HasBuff(Buffs.AffixHaunted))
{
UpdateSkin(wolverTiersCel);
}
else if (characterBody.HasBuff(Buffs.AffixLunar))
{
UpdateSkin(wolverTiersPer);
}
else if (characterBody.HasBuff(Buffs.EliteVoid))
{
UpdateSkin(wolverTiersVoi);
}
else if (characterBody.HasBuff(Buffs.EliteAurelionite))
{
UpdateSkin(wolverTiersGold);
}
else if (characterBody.HasBuff(Buffs.EliteBead))
{
UpdateSkin(wolverTiersTwi);
}
else
{
UpdateSkin(wolverTiersNrm);
}
updateInterval = 1f;
MethodInfo method = ((object)characterModelScript).GetType().GetMethod("UpdateMaterials", BindingFlags.Instance | BindingFlags.NonPublic);
if (method != null)
{
method.Invoke(characterModelScript, new object[0]);
}
else
{
CradleExpansionMain.Logger.LogError((object)"unable to grab slime");
}
}
private void UpdateSkin(Material[] skinList)
{
float level = characterBody.level;
if (level < 20f)
{
characterModelScript.baseRendererInfos[0].defaultMaterial = skinList[0];
characterModelScript.baseRendererInfos[1].defaultMaterial = skinList[0];
}
else if (level < 45f)
{
characterModelScript.baseRendererInfos[0].defaultMaterial = skinList[1];
characterModelScript.baseRendererInfos[1].defaultMaterial = skinList[1];
}
else
{
characterModelScript.baseRendererInfos[0].defaultMaterial = skinList[2];
characterModelScript.baseRendererInfos[1].defaultMaterial = skinList[2];
}
}
public void FixedUpdate()
{
if (updateInterval > 0f)
{
updateInterval -= Time.fixedDeltaTime;
}
if (updateInterval <= 0f)
{
MaterialSetup();
}
}
}
internal static class Tokens
{
internal static void AddTokens()
{
LanguageAPI.Add("OOPSLEMURIANS_" + "WOLVNORMAL_BODY_NAME", "Wolver");
LanguageAPI.Add("OOPSLEMURIANS_" + "WOLVNORMAL_BODY_SUBTITLE", "Strength in Unity");
LanguageAPI.Add("OOPSLEMURIANS_" + "SNARBOLAX_BODY_NAME", "Weakened Snarbolax");
LanguageAPI.Add("OOPSLEMURIANS_" + "SNARBOLAX_BODY_SUBTITLE", "The Frumious Fang");
LanguageAPI.Add("OOPSLEMURIANS_" + "WOLVER_LOGBOOK_UNLOCK", "Gloaming Wildwoods: Wolver");
LanguageAPI.Add("OOPSLEMURIANS_" + "WOLVNORMAL_BODY_LORE", "Small wolf-like monsters that are rarely found alone. They would try to sneak upon their prey to take a bite out of them.");
}
}
}
namespace CradleExpansion.GunPuppy
{
internal class GunPuppyDeath : GenericCharacterDeath
{
public static float deathDelay = 1.3f;
public static GameObject deathEffectPrefab = CradleExpansionMain.assetBundle.LoadAsset<GameObject>("DeathBurst");
private bool hasDied;
public override void FixedUpdate()
{
//IL_0033: 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)
((GenericCharacterDeath)this).FixedUpdate();
if (((EntityState)this).fixedAge > deathDelay && !hasDied)
{
hasDied = true;
((GenericCharacterDeath)this).DestroyModel();
EffectManager.SimpleImpactEffect(deathEffectPrefab, ((EntityState)this).characterBody.corePosition, Vector3.up, false);
if (NetworkServer.active)
{
((GenericCharacterDeath)this).DestroyBodyAsapServer();
}
}
}
public override void OnExit()
{
((GenericCharacterDeath)this).DestroyModel();
((GenericCharacterDeath)this).OnExit();
}
}
internal class GunPuppySpawn : BaseState
{
private float duration;
private string muzzleString;
public override void OnEnter()
{
duration = 1.2f;
muzzleString = "SpawnFX";
((BaseState)this).OnEnter();
((EntityState)this).PlayAnimation("Fullbody", "gun_spawn");
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
public class NormalOrbATK : BaseSkillState
{
public static float damageCoefficient = 0.5f;
public static float procCoefficient = 1f;
public static float baseDuration = 1f;
public static float throwForce = 80f;
public float damageInterval;
private float duration = 2f;
private float fireTime;
private bool hasFired;
private Animator animator;
public override void OnEnter()
{
((BaseState)this).OnEnter();
duration = baseDuration / ((BaseState)this).attackSpeedStat;
fireTime = 0.35f * duration;
((EntityState)this).characterBody.SetAimTimer(2f);
animator = ((EntityState)this).GetModelAnimator();
((EntityState)this).PlayAnimation("Fullbody", "open_mouth", "gun_fire_orb.playbackRate", duration, 0f);
}
public override void OnExit()
{
((EntityState)this).OnExit();
((EntityState)this).PlayAnimation("Fullbody", "close_mouth", "gun_fire_orb.playbackRate", duration, 0f);
}
private void Fire()
{
if (!hasFired)
{
hasFired = true;
((EntityState)this).PlayAnimation("Fullbody", "gun_fire_orb", "gun_fire_orb.playbackRate", duration, 0f);
if (((EntityState)this).isAuthority)
{
CradleExpansionMain.Logger.LogMessage((object)"Firing Bullet from Gunpup!");
}
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
else if (((EntityState)this).fixedAge >= fireTime)
{
Fire();
}
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return (InterruptPriority)2;
}
}
}
namespace CradleExpansion.Generic
{
public class EmptySkill : BaseSkillState
{
public override void OnEnter()
{
((BaseState)this).OnEnter();
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
}
public class OALDeathState : GenericCharacterDeath
{
public override void OnEnter()
{
((GenericCharacterDeath)this).OnEnter();
if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator))
{
if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator.modelBaseTransform))
{
EntityState.Destroy((Object)(object)((Component)((EntityState)this).modelLocator.modelBaseTransform).gameObject);
}
if (Object.op_Implicit((Object)(object)((EntityState)this).modelLocator.modelTransform))
{
EntityState.Destroy((Object)(object)((Component)((EntityState)this).modelLocator.modelTransform).gameObject);
}
}
if (NetworkServer.active)
{
EntityState.Destroy((Object)(object)((EntityState)this).gameObject);
}
}
}
public class OALSpawnState : BaseState
{
public GameObject effectPrefab = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Lemurian/SpawnLemurian.prefab").WaitForCompletion(), "spawnEffectGunPuppy");
public float duration = 1f;
public override void OnEnter()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
EffectManager.SimpleEffect(effectPrefab, ((EntityState)this).transform.position, ((EntityState)this).transform.rotation, true);
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
}
namespace CradleExpansion.Wolver
{
public class TripleBite : BaseState
{
private string muzzleString = "BiteFX";
public float skillDuration = 5f;
public float chargeDuration = 0.9f;
public float soundBiteBreak = 0.8f;
private Animator modelAnimator;
private GameObject hitEffectPrefab;
private float damageCoefficient = 1.5f;
private OverlapAttack attack;
private GameObject biteEffect;
private bool hasVFXFired;
private bool hasSFXBorked;
public override void OnEnter()
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
//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)
((BaseState)this).OnEnter();
((BaseState)this).StartAimMode(0.5f, false);
modelAnimator = ((EntityState)this).GetModelAnimator();
attack = new OverlapAttack();
attack.attacker = ((EntityState)this).gameObject;
attack.inflictor = ((EntityState)this).gameObject;
attack.teamIndex = TeamComponent.GetObjectTeam(attack.attacker);
attack.damage = damageCoefficient * base.damageStat;
attack.hitEffectPrefab = hitEffectPrefab;
attack.pushAwayForce = 0f;
Transform modelTransform = ((EntityState)this).GetModelTransform();
if (Object.op_Implicit((Object)(object)modelTransform))
{
attack.hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "Bitezone");
}
biteEffect = CradleExpansionMain.assetBundle.LoadAsset<GameObject>("WolverBite");
((EntityState)this).PlayAnimation("Fullbody", "triple_attack_1_charge");
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
private void FireSFXBork()
{
AkSoundEngine.PostEvent("Play_wolver_bite", ((EntityState)this).gameObject);
hasSFXBorked = true;
}
private void FireVFXBite()
{
EffectManager.SimpleMuzzleFlash(biteEffect, ((EntityState)this).gameObject, muzzleString, true);
hasVFXFired = true;
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= soundBiteBreak && !hasSFXBorked)
{
FireSFXBork();
}
if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= chargeDuration && Object.op_Implicit((Object)(object)modelAnimator) && modelAnimator.GetFloat("bite.hitBoxActive") >= 0.5f)
{
attack.Fire((List<HurtBox>)null);
if (!hasVFXFired)
{
FireVFXBite();
}
}
if (((EntityState)this).fixedAge >= skillDuration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
public class WolverDodge : BaseState
{
public static float duration = 0.5f;
public static float initialSpeedCoefficient = 6f;
public static float finalSpeedCoefficient = 2.5f;
public static string dodgeSoundString = "SpiralHopDodge";
public static float dodgeFOV = DodgeState.dodgeFOV;
private float rollSpeed;
private Vector3 forwardDirection;
private Animator animator;
private Vector3 previousPosition;
public override void OnEnter()
{
//IL_0098: 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_009d: 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)
//IL_00a3: 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_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: 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_00b8: 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_003b: 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)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: 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_0122: 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_010b: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: 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_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
animator = ((EntityState)this).GetModelAnimator();
if (((EntityState)this).isAuthority && Object.op_Implicit((Object)(object)((EntityState)this).inputBank) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
{
Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector);
forwardDirection = ((Vector3)(ref val)).normalized;
}
((BaseState)this).StartAimMode(5f, false);
Vector3 val2 = (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) ? ((EntityState)this).characterDirection.forward : forwardDirection);
Vector3 val3 = Vector3.Cross(Vector3.up, val2);
Vector3.Dot(forwardDirection, val2);
Vector3.Dot(forwardDirection, val3);
RecalculateRollSpeed();
if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
{
((EntityState)this).characterMotor.velocity.y = 0f;
((EntityState)this).characterMotor.velocity = forwardDirection * rollSpeed;
}
Vector3 val4 = (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) ? ((EntityState)this).characterMotor.velocity : Vector3.zero);
previousPosition = ((EntityState)this).transform.position - val4;
}
private void RecalculateRollSpeed()
{
rollSpeed = base.moveSpeedStat * Mathf.Lerp(initialSpeedCoefficient, finalSpeedCoefficient, ((EntityState)this).fixedAge / duration);
}
public override void FixedUpdate()
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0063: 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_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: 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_00af: 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_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: 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_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: 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)
((EntityState)this).FixedUpdate();
RecalculateRollSpeed();
if (Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
{
((EntityState)this).characterDirection.forward = forwardDirection;
}
if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams))
{
((EntityState)this).cameraTargetParams.fovOverride = Mathf.Lerp(dodgeFOV, 60f, ((EntityState)this).fixedAge / duration);
}
Vector3 val = ((EntityState)this).transform.position - previousPosition;
Vector3 normalized = ((Vector3)(ref val)).normalized;
if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection) && normalized != Vector3.zero)
{
Vector3 val2 = normalized * rollSpeed;
float num = Mathf.Max(Vector3.Dot(val2, forwardDirection), 0f);
val2 = forwardDirection * num;
val2.y = 0f;
((EntityState)this).characterMotor.velocity = val2;
}
previousPosition = ((EntityState)this).transform.position;
if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= duration)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
if (Object.op_Implicit((Object)(object)((EntityState)this).cameraTargetParams))
{
((EntityState)this).cameraTargetParams.fovOverride = -1f;
}
((EntityState)this).OnExit();
((EntityState)this).characterMotor.disableAirControlUntilCollision = false;
}
public override void OnSerialize(NetworkWriter writer)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
((EntityState)this).OnSerialize(writer);
writer.Write(forwardDirection);
}
public override void OnDeserialize(NetworkReader reader)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
((EntityState)this).OnDeserialize(reader);
forwardDirection = reader.ReadVector3();
}
}
public class BiteAttack : BaseSkillState
{
private string muzzleString = "BiteFX";
public float skillDuration = 1f;
public float chargeDuration = 0.9f;
public float soundBiteBreak = 0.8f;
private Animator modelAnimator;
private GameObject hitEffectPrefab;
private float damageCoefficient = 1.5f;
private OverlapAttack attack;
private GameObject biteEffect;
private bool hasVFXFired;
private bool hasSFXBorked;
public override void OnEnter()
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Expected O, but got Unknown
//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)
((BaseState)this).OnEnter();
((BaseState)this).StartAimMode(0.5f, false);
modelAnimator = ((EntityState)this).GetModelAnimator();
attack = new OverlapAttack();
attack.attacker = ((EntityState)this).gameObject;
attack.inflictor = ((EntityState)this).gameObject;
attack.teamIndex = TeamComponent.GetObjectTeam(attack.attacker);
attack.damage = damageCoefficient * ((BaseState)this).damageStat;
attack.hitEffectPrefab = hitEffectPrefab;
attack.pushAwayForce = 0f;
Transform modelTransform = ((EntityState)this).GetModelTransform();
if (Object.op_Implicit((Object)(object)modelTransform))
{
attack.hitBoxGroup = Array.Find(((Component)modelTransform).GetComponents<HitBoxGroup>(), (HitBoxGroup element) => element.groupName == "Bitezone");
}
biteEffect = CradleExpansionMain.assetBundle.LoadAsset<GameObject>("WolverBite");
((EntityState)this).PlayAnimation("Fullbody", "wolver_bite");
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
private void FireSFXBork()
{
AkSoundEngine.PostEvent("Play_wolver_bite", ((EntityState)this).gameObject);
hasSFXBorked = true;
}
private void FireVFXBite()
{
EffectManager.SimpleMuzzleFlash(biteEffect, ((EntityState)this).gameObject, muzzleString, true);
hasVFXFired = true;
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= soundBiteBreak && !hasSFXBorked)
{
FireSFXBork();
}
if (((EntityState)this).isAuthority && ((EntityState)this).fixedAge >= chargeDuration && Object.op_Implicit((Object)(object)modelAnimator) && modelAnimator.GetFloat("bite.hitBoxActive") >= 0.5f)
{
attack.Fire((List<HurtBox>)null);
if (!hasVFXFired)
{
FireVFXBite();
}
}
if (((EntityState)this).fixedAge >= skillDuration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
public class Bork : BaseSkillState
{
private float duration;
private string muzzleString;
private GameObject effectPrefab;
private float barkTime;
private bool hasBorked;
public override void OnEnter()
{
duration = 2f;
hasBorked = false;
barkTime = 0.5f;
muzzleString = "BarkFX";
((BaseState)this).OnEnter();
((EntityState)this).PlayAnimation("Fullbody", "wolver_bark");
effectPrefab = CradleExpansionMain.assetBundle.LoadAsset<GameObject>("BarkBork");
}
private void TimedBark()
{
EffectManager.SimpleMuzzleFlash(effectPrefab, ((EntityState)this).gameObject, muzzleString, true);
AkSoundEngine.PostEvent("Play_bark_full", ((EntityState)this).gameObject);
}
public override void OnExit()
{
((EntityState)this).OnExit();
AkSoundEngine.StopAll(((EntityState)this).gameObject);
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= barkTime && !hasBorked)
{
TimedBark();
hasBorked = true;
}
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
internal class WolverBaseSpawn : BaseState
{
private float duration;
private GameObject wolverDustSpawnFX;
private GameObject wolverBurstSpawnFX;
private string muzzleString;
public SpiralTierManager spiralManager;
public override void OnEnter()
{
spiralManager = ((EntityState)this).gameObject.GetComponent<SpiralTierManager>();
spiralManager.MaterialSetup();
duration = 1.2f;
muzzleString = "SpawnFX";
((BaseState)this).OnEnter();
wolverDustSpawnFX = CradleExpansionMain.assetBundle.LoadAsset<GameObject>("WolverSpawnFX");
wolverBurstSpawnFX = CradleExpansionMain.assetBundle.LoadAsset<GameObject>("WolverLeafSpawnFX");
EffectManager.SimpleMuzzleFlash(wolverDustSpawnFX, ((EntityState)this).gameObject, muzzleString, true);
EffectManager.SimpleMuzzleFlash(wolverBurstSpawnFX, ((EntityState)this).gameObject, muzzleString, true);
((EntityState)this).PlayAnimation("Fullbody", "wolver_spawn");
AkSoundEngine.PostEvent("Play_wolver_spawn", ((EntityState)this).gameObject);
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
internal class WolverDeath : GenericCharacterDeath
{
public static float deathDelay = 1.3f;
public static GameObject deathEffectPrefab = CradleExpansionMain.assetBundle.LoadAsset<GameObject>("DeathBurst");
private bool hasDied;
public override void FixedUpdate()
{
//IL_002d: 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)
((GenericCharacterDeath)this).FixedUpdate();
if (((EntityState)this).fixedAge > deathDelay && !hasDied)
{
hasDied = true;
EffectManager.SimpleImpactEffect(deathEffectPrefab, ((EntityState)this).characterBody.corePosition, Vector3.up, true);
((GenericCharacterDeath)this).DestroyModel();
if (NetworkServer.active)
{
((GenericCharacterDeath)this).DestroyBodyAsapServer();
}
}
}
public override void OnExit()
{
((GenericCharacterDeath)this).DestroyModel();
((GenericCharacterDeath)this).OnExit();
}
}
public class WolverHurtState : BaseState
{
private float stopwatch;
private float duration = 0.35f;
public override void OnEnter()
{
((BaseState)this).OnEnter();
if (Object.op_Implicit((Object)(object)((EntityState)this).sfxLocator) && ((EntityState)this).sfxLocator.barkSound != "")
{
Util.PlaySound(((EntityState)this).sfxLocator.barkSound, ((EntityState)this).gameObject);
}
if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
{
((EntityState)this).characterBody.isSprinting = false;
}
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
stopwatch += Time.fixedDeltaTime;
if (stopwatch >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
}