using System; using System.Diagnostics; using System.IO; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using REPOLib; using REPOLib.Modules; using REPOLib.Objects.Sdk; using UnityEngine; using UnityEngine.AI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Andraxis")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("REPOBirdMod")] [assembly: AssemblyTitle("REPOBirdMod")] [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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 REPOBirdMod { public class EnemyBird : MonoBehaviour { public enum State { Spawn, Idle, Roam, Investigate, Notice, GoToPlayer, GoToPlayerOver, GoToPlayerUnder, FlyBackToNavmesh, FlyBackToNavmeshStop, MoveBackToNavmesh, AttackStart, Transform, ChaseNavmesh, ChaseTowards, ChaseMoveBack, DeTransform, Leave, Stun, Despawn, PeckStart, Peck } private PhotonView photonView; public State currentState; private bool stateImpulse; public float stateTimer; private float stateTicker; private Vector3 targetPosition; private float pitCheckTimer; private bool pitCheck; private Vector3 agentDestination; private bool visionPrevious; private float visionTimer; private Vector3 moveBackPosition; private float moveBackTimer; private float targetForwardOffset = 1.5f; public Transform followOffsetTransform; [Space] public SpringQuaternion bodySpring; public Transform bodyTransform; public Transform bodyTargetTransform; [Space] public EnemyBirdAnim anim; public Enemy enemy; public ParticleSystem featherParticles; public ParticleSystem fleshParticles; private PlayerAvatar playerTarget; [Space] private Quaternion rotationTarget; public SpringQuaternion rotationSpring; [Space] public SpringQuaternion headLookAtSpring; public Transform headLookAtTarget; public Transform headLookAtSource; private float targetedPlayerTime; private float targetedPlayerTimeMax = 120f; internal bool idleBreakerTrigger; private float chaseTimer; public bool peckCheck; public bool peckChase; private float annoyingJumpPauseTimer; private bool duckBucketActive; private float duckBucketTimer; private void Awake() { enemy = ((Component)this).GetComponent(); photonView = ((Component)this).GetComponent(); } private void Update() { //IL_0013: 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) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Invalid comparison between Unknown and I4 bodyTransform.rotation = SemiFunc.SpringQuaternionGet(bodySpring, bodyTargetTransform.rotation, -1f); HeadLookAtLogic(); PeckCheckLogic(); if ((GameManager.Multiplayer() && !PhotonNetwork.IsMasterClient) || !LevelGenerator.Instance.Generated) { return; } if (enemy.IsStunned()) { UpdateState(State.Stun); } else if ((int)enemy.CurrentState == 11) { UpdateState(State.Despawn); } if (!Object.op_Implicit((Object)(object)playerTarget)) { if (currentState == State.GoToPlayer || currentState == State.GoToPlayerOver || currentState == State.GoToPlayerUnder) { UpdateState(State.Idle); } else if (currentState == State.ChaseNavmesh || currentState == State.ChaseTowards || currentState == State.ChaseMoveBack || currentState == State.Transform) { UpdateState(State.DeTransform); } } RotationLogic(); TimerLogic(); GravityLogic(); TargetPositionLogic(); FollowOffsetLogic(); FlyBackConditionLogic(); DuckBucketLogic(); switch (currentState) { case State.Spawn: StateSpawn(); break; case State.Idle: StateIdle(); break; case State.Roam: StateRoam(); break; case State.Investigate: StateInvestigate(); break; case State.Notice: StateNotice(); break; case State.GoToPlayer: StateGoToPlayer(); break; case State.GoToPlayerUnder: StateGoToPlayerUnder(); break; case State.GoToPlayerOver: StateGoToPlayerOver(); break; case State.MoveBackToNavmesh: StateMoveBackToNavMesh(); break; case State.FlyBackToNavmesh: StateFlyBackToNavmesh(); break; case State.FlyBackToNavmeshStop: StateFlyBackToNavmeshStop(); break; case State.AttackStart: StateAttackStart(); break; case State.Transform: StateTransform(); break; case State.ChaseNavmesh: StateChaseNavmesh(); break; case State.ChaseTowards: StateChaseTowards(); break; case State.ChaseMoveBack: StateChaseMoveBack(); break; case State.DeTransform: StateDeTransform(); break; case State.Stun: StateStun(); break; case State.Leave: StateLeave(); break; case State.Despawn: StateDespawn(); break; case State.PeckStart: StatePeckStart(); break; case State.Peck: StatePeck(); break; } } private void StateSpawn() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position, false); enemy.NavMeshAgent.ResetPath(); stateImpulse = false; stateTimer = 2f; } stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { UpdateState(State.Idle); } } private void StateIdle() { //IL_0043: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateImpulse = false; stateTimer = Random.Range(2f, 5f); enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position, false); enemy.NavMeshAgent.ResetPath(); } if (!SemiFunc.EnemySpawnIdlePause()) { stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { UpdateState(State.Roam); } LeaveCheck(_setLeave: true); } } private void StateRoam() { //IL_0030: 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_007f: 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_008e: 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_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: 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) if (stateImpulse) { stateImpulse = false; stateTimer = 5f; playerTarget = null; bool flag = false; LevelPoint val = SemiFunc.LevelPointGet(((Component)this).transform.position, 10f, 25f); if (!Object.op_Implicit((Object)(object)val)) { val = SemiFunc.LevelPointGet(((Component)this).transform.position, 0f, 999f); } NavMeshHit val2 = default(NavMeshHit); if (Object.op_Implicit((Object)(object)val) && NavMesh.SamplePosition(((Component)val).transform.position + Random.insideUnitSphere * 3f, ref val2, 5f, -1) && Physics.Raycast(((NavMeshHit)(ref val2)).position, Vector3.down, 5f, LayerMask.GetMask(new string[1] { "Default" }))) { enemy.NavMeshAgent.SetDestination(((NavMeshHit)(ref val2)).position); flag = true; } if (!flag) { return; } enemy.Rigidbody.notMovingTimer = 0f; } else { SemiFunc.EnemyCartJump(enemy); MoveBackPosition(); if (enemy.Rigidbody.notMovingTimer > 2f) { stateTimer -= Time.deltaTime; } if (stateTimer <= 0f || !enemy.NavMeshAgent.HasPath()) { SemiFunc.EnemyCartJumpReset(enemy); UpdateState(State.Idle); } } LeaveCheck(_setLeave: true); } private void StateInvestigate() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateTimer = 5f; enemy.Rigidbody.notMovingTimer = 0f; stateImpulse = false; } else { enemy.NavMeshAgent.SetDestination(agentDestination); SemiFunc.EnemyCartJump(enemy); MoveBackPosition(); if (enemy.Rigidbody.notMovingTimer > 2f) { stateTimer -= Time.deltaTime; } if (stateTimer <= 0f || !enemy.NavMeshAgent.HasPath()) { SemiFunc.EnemyCartJumpReset(enemy); UpdateState(State.Idle); } } LeaveCheck(_setLeave: true); } private void StateNotice() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { enemy.NavMeshAgent.ResetPath(); enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position, false); stateImpulse = false; stateTimer = 1f; } stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { UpdateState(State.GoToPlayer); } } private void StateGoToPlayer() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateImpulse = false; stateTimer = 5f; annoyingJumpPauseTimer = 1f; } enemy.NavMeshAgent.SetDestination(targetPosition); stateTimer -= Time.deltaTime; SemiFunc.EnemyCartJump(enemy); MoveBackPosition(); enemy.Vision.StandOverride(0.25f); if (stateTimer <= 0f || !Object.op_Implicit((Object)(object)playerTarget) || playerTarget.isDisabled) { UpdateState(State.Idle); return; } NavMeshHit val = default(NavMeshHit); if (!enemy.NavMeshAgent.CanReach(targetPosition, 1f) && Vector3.Distance(((Component)enemy.Rigidbody).transform.position, enemy.NavMeshAgent.GetPoint()) < 2f && !VisionBlocked() && !NavMesh.SamplePosition(targetPosition, ref val, 0.5f, -1)) { if (playerTarget.isCrawling && Mathf.Abs(targetPosition.y - ((Component)enemy.Rigidbody).transform.position.y) < 0.3f && !enemy.Jump.jumping) { UpdateState(State.GoToPlayerUnder); return; } if (targetPosition.y > ((Component)enemy.Rigidbody).transform.position.y) { UpdateState(State.GoToPlayerOver); return; } } AnnoyingJump(); LeaveCheck(_setLeave: true); } private void StateGoToPlayerUnder() { //IL_004c: 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_0073: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateTimer = 2f; stateImpulse = false; annoyingJumpPauseTimer = 1f; } enemy.NavMeshAgent.Disable(0.1f); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, targetPosition, enemy.NavMeshAgent.DefaultSpeed * 0.5f * Time.deltaTime); SemiFunc.EnemyCartJump(enemy); enemy.Vision.StandOverride(0.25f); NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(targetPosition, ref val, 0.5f, -1)) { UpdateState(State.MoveBackToNavmesh); } else if (VisionBlocked() || !Object.op_Implicit((Object)(object)playerTarget) || playerTarget.isDisabled) { stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { UpdateState(State.MoveBackToNavmesh); } } else { stateTimer = 2f; } if (LeaveCheck(_setLeave: false)) { UpdateState(State.MoveBackToNavmesh); } } private void StateGoToPlayerOver() { //IL_004c: 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_0073: 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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateTimer = 2f; stateImpulse = false; annoyingJumpPauseTimer = 1f; } enemy.NavMeshAgent.Disable(0.1f); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, targetPosition, enemy.NavMeshAgent.DefaultSpeed * 0.5f * Time.deltaTime); SemiFunc.EnemyCartJump(enemy); enemy.Vision.StandOverride(0.25f); if (playerTarget.PlayerVisionTarget.VisionTransform.position.y > ((Component)enemy.Rigidbody).transform.position.y + 1.5f) { if (!enemy.Jump.jumping) { Vector3 val = playerTarget.PlayerVisionTarget.VisionTransform.position - ((Component)enemy.Rigidbody).transform.position; Vector3 normalized = ((Vector3)(ref val)).normalized; enemy.Jump.StuckTrigger(normalized); ((Component)this).transform.position = ((Component)enemy.Rigidbody).transform.position; ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, targetPosition, 2f); } } else { AnnoyingJump(); } NavMeshHit val2 = default(NavMeshHit); if (NavMesh.SamplePosition(targetPosition, ref val2, 0.5f, -1)) { UpdateState(State.MoveBackToNavmesh); } else if (VisionBlocked() || !Object.op_Implicit((Object)(object)playerTarget) || playerTarget.isDisabled) { stateTimer -= Time.deltaTime; if (stateTimer <= 0f || enemy.Rigidbody.notMovingTimer > 1f) { UpdateState(State.MoveBackToNavmesh); } } else { stateTimer = 2f; } if (LeaveCheck(_setLeave: false)) { UpdateState(State.MoveBackToNavmesh); } } private void StateMoveBackToNavMesh() { //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01b1: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: 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_0132: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_016d: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateTimer = 30f; stateImpulse = false; } enemy.NavMeshAgent.Disable(0.1f); if (!enemy.Jump.jumping) { ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, moveBackPosition, enemy.NavMeshAgent.DefaultSpeed * Time.deltaTime); } SemiFunc.EnemyCartJump(enemy); enemy.Vision.StandOverride(0.25f); if ((Vector3.Distance(((Component)this).transform.position, ((Component)enemy.Rigidbody).transform.position) > 2f || enemy.Rigidbody.notMovingTimer > 2f) && !enemy.Jump.jumping) { Vector3 val = moveBackPosition - ((Component)enemy.Rigidbody).transform.position; Vector3 normalized = ((Vector3)(ref val)).normalized; enemy.Jump.StuckTrigger(normalized); ((Component)this).transform.position = ((Component)enemy.Rigidbody).transform.position; Transform transform = ((Component)this).transform; transform.position += normalized * 2f; } stateTimer -= Time.deltaTime; NavMeshHit val2 = default(NavMeshHit); if (Vector3.Distance(((Component)enemy.Rigidbody).transform.position, moveBackPosition) <= 0.5f || NavMesh.SamplePosition(((Component)enemy.Rigidbody).transform.position, ref val2, 0.5f, -1)) { UpdateState(State.GoToPlayer); } else if (stateTimer <= 0f) { enemy.EnemyParent.SpawnedTimerSet(0f); UpdateState(State.Despawn); } } private void StateFlyBackToNavmesh() { //IL_004c: 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_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: 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_00cc: 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_0103: 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) //IL_017d: 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_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateImpulse = false; stateTimer = 30f; stateTicker = 0f; } enemy.NavMeshAgent.Disable(0.1f); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, moveBackPosition + Vector3.up * 0.5f, 0.75f * Time.deltaTime); enemy.Rigidbody.OverrideFollowPosition(0.1f, 1f, -1f); enemy.Rigidbody.OverrideFollowRotation(0.1f, 0.25f); if (Vector3.Distance(((Component)enemy.Rigidbody).transform.position, ((Component)this).transform.position) > 2f) { ((Component)this).transform.position = ((Component)enemy.Rigidbody).transform.position; } if (stateTicker <= 0f) { stateTicker = 0.25f; RaycastHit val = default(RaycastHit); NavMeshHit val2 = default(NavMeshHit); if (Physics.Raycast(((Component)enemy.Rigidbody).transform.position, Vector3.down, ref val, 5f, LayerMask.GetMask(new string[1] { "Default" })) && Physics.Raycast(((Component)enemy.Rigidbody).transform.position + ((Component)enemy.Rigidbody).transform.forward * 0.5f, Vector3.down, ref val, 5f, LayerMask.GetMask(new string[1] { "Default" })) && NavMesh.SamplePosition(((RaycastHit)(ref val)).point, ref val2, 0.5f, -1)) { moveBackPosition = ((NavMeshHit)(ref val2)).position; UpdateState(State.FlyBackToNavmeshStop); return; } } else { stateTicker -= Time.deltaTime; } stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { UpdateState(State.Despawn); } } private void StateFlyBackToNavmeshStop() { //IL_0018: 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) if (stateImpulse) { enemy.NavMeshAgent.Warp(moveBackPosition, false); enemy.NavMeshAgent.ResetPath(); ((Component)this).transform.position = moveBackPosition; stateTimer = 1f; stateImpulse = false; } stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { UpdateState(State.Idle); } } private void StateAttackStart() { if (stateImpulse) { stateImpulse = false; stateTimer = 0.5f; } stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { enemy.Rigidbody.GrabRelease(true, 0.1f); UpdateState(State.Transform); } } private void StatePeckStart() { if (stateImpulse) { stateImpulse = false; stateTimer = 0.5f; } stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { enemy.Rigidbody.GrabRelease(true, 0.1f); UpdateState(State.Peck); } } private void StateTransform() { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateImpulse = false; stateTimer = 1.4f; } enemy.NavMeshAgent.Disable(0.1f); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(((Component)this).transform.position.x, playerTarget.PlayerVisionTarget.VisionTransform.position.y, ((Component)this).transform.position.z); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, val, Time.deltaTime); stateTimer -= Time.deltaTime; ((Component)fleshParticles).transform.position = enemy.CenterTransform.position; fleshParticles.Play(); if (stateTimer <= 0f) { UpdateState(State.ChaseNavmesh); } } private void StatePeck() { //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: 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_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateImpulse = false; stateTimer = 1.4f; } enemy.NavMeshAgent.Disable(0.1f); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(((Component)this).transform.position.x, playerTarget.PlayerVisionTarget.VisionTransform.position.y, ((Component)this).transform.position.z); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, val, Time.deltaTime); stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { UpdateState(State.ChaseNavmesh); } peckChase = true; } private void StateChaseNavmesh() { //IL_00bc: 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) if (stateImpulse) { stateImpulse = false; } if (peckChase) { ((Component)enemy).GetComponent().stoppingDistance = 0.8f; enemy.NavMeshAgent.OverrideAgent(5f, 5f, 0.1f); enemy.NavMeshAgent.SetDestination(targetPosition); } else { ((Component)enemy).GetComponent().stoppingDistance = 0.5f; enemy.NavMeshAgent.OverrideAgent(10f, 10f, 0.1f); enemy.NavMeshAgent.SetDestination(((Component)playerTarget).transform.position); } if (!VisionBlocked()) { UpdateState(State.ChaseTowards); return; } MoveBackPosition(); ChaseStop(); } private void StateChaseTowards() { //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateImpulse = false; } if (VisionBlocked()) { UpdateState(State.ChaseMoveBack); return; } enemy.NavMeshAgent.Disable(0.1f); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, ((Component)playerTarget.localCamera).transform.position + Vector3.down * 0.31f, 5f * Time.deltaTime); ChaseStop(); } private void StateChaseMoveBack() { //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: 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_001c: 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_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { RaycastHit val = default(RaycastHit); NavMeshHit val2 = default(NavMeshHit); if (Physics.Raycast(((Component)enemy.Rigidbody).transform.position, Vector3.down, ref val, 5f, LayerMask.GetMask(new string[1] { "Default" })) && NavMesh.SamplePosition(((RaycastHit)(ref val)).point, ref val2, 0.5f, -1)) { moveBackPosition = ((NavMeshHit)(ref val2)).position; } stateImpulse = false; stateTimer = 10f; } enemy.NavMeshAgent.Disable(0.1f); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, moveBackPosition, 5f * Time.deltaTime); if (Vector3.Distance(((Component)this).transform.position, ((Component)enemy.Rigidbody).transform.position) > 2f || enemy.Rigidbody.notMovingTimer > 2f) { ((Component)this).transform.position = ((Component)enemy.Rigidbody).transform.position; } stateTimer -= Time.deltaTime; NavMeshHit val3 = default(NavMeshHit); if (Vector3.Distance(((Component)enemy.Rigidbody).transform.position, moveBackPosition) <= 1f || NavMesh.SamplePosition(((Component)enemy.Rigidbody).transform.position, ref val3, 0.5f, -1)) { UpdateState(State.ChaseNavmesh); } else { ChaseStop(); } } private void StateDeTransform() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position, false); enemy.NavMeshAgent.ResetPath(); stateImpulse = false; stateTimer = 2f; } stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { UpdateState(State.MoveBackToNavmesh); } } private void StateStun() { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) if (enemy.IsStunned()) { return; } PlayerAvatar val = null; float num = 999f; foreach (PlayerAvatar item in SemiFunc.PlayerGetList()) { if (Object.op_Implicit((Object)(object)item) && !item.isDisabled) { float num2 = Vector3.Distance(((Component)this).transform.position, ((Component)item).transform.position); if (num2 < 10f && num2 < num) { num = num2; val = item; } } } if (Object.op_Implicit((Object)(object)val)) { if (Object.op_Implicit((Object)(object)enemy.Vision.onVisionTriggeredPlayer)) { playerTarget = enemy.Vision.onVisionTriggeredPlayer; } else { playerTarget = val; } if (SemiFunc.IsMultiplayer()) { photonView.RPC("UpdatePlayerTargetRPC", (RpcTarget)0, new object[1] { playerTarget.photonView.ViewID }); } UpdateState(State.AttackStart); } else { UpdateState(State.Idle); } } private void StateLeave() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0170: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: 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_0081: 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_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: 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) if (stateImpulse) { stateTimer = 5f; bool flag = false; LevelPoint val = SemiFunc.LevelPointGetPlayerDistance(((Component)this).transform.position, 30f, 50f, false); if (!Object.op_Implicit((Object)(object)val)) { val = SemiFunc.LevelPointGetFurthestFromPlayer(((Component)this).transform.position, 5f); } NavMeshHit val2 = default(NavMeshHit); if (Object.op_Implicit((Object)(object)val) && NavMesh.SamplePosition(((Component)val).transform.position + Random.insideUnitSphere * 1f, ref val2, 5f, -1) && Physics.Raycast(((NavMeshHit)(ref val2)).position, Vector3.down, 5f, LayerMask.GetMask(new string[1] { "Default" }))) { agentDestination = ((NavMeshHit)(ref val2)).position; flag = true; } if (flag) { enemy.NavMeshAgent.SetDestination(agentDestination); enemy.Rigidbody.notMovingTimer = 0f; stateImpulse = false; } SemiFunc.EnemyLeaveStart(enemy); } else { if (enemy.Rigidbody.notMovingTimer > 2f) { stateTimer -= Time.deltaTime; } SemiFunc.EnemyCartJump(enemy); if (Vector3.Distance(((Component)this).transform.position, agentDestination) < 1f || stateTimer <= 0f) { SemiFunc.EnemyCartJumpReset(enemy); UpdateState(State.Idle); } } } private void StateDespawn() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { enemy.NavMeshAgent.Warp(((Component)enemy.Rigidbody).transform.position, false); enemy.NavMeshAgent.ResetPath(); stateImpulse = false; } } public void OnInvestigate() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.IsMasterClientOrSingleplayer() && (currentState == State.Idle || currentState == State.Roam || currentState == State.Investigate)) { agentDestination = enemy.StateInvestigate.onInvestigateTriggeredPosition; UpdateState(State.Investigate); } } public void OnVision() { if ((currentState == State.Idle || currentState == State.Roam || currentState == State.Investigate || currentState == State.Leave) && !enemy.Jump.jumping) { if (SemiFunc.IsMasterClientOrSingleplayer()) { playerTarget = enemy.Vision.onVisionTriggeredPlayer; if (SemiFunc.IsMultiplayer()) { photonView.RPC("UpdatePlayerTargetRPC", (RpcTarget)0, new object[1] { playerTarget.photonView.ViewID }); } UpdateState(State.Notice); } } else if (currentState == State.GoToPlayer || currentState == State.GoToPlayerOver || currentState == State.GoToPlayerUnder) { stateTimer = 2f; } } public void OnHurt() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) anim.soundHurtPauseTimer = 0.5f; anim.hurtSound.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f); if (!enemy.IsStunned() && Object.op_Implicit((Object)(object)playerTarget) && (currentState == State.GoToPlayer || currentState == State.GoToPlayerOver || currentState == State.GoToPlayerUnder || (currentState == State.ChaseNavmesh && peckChase))) { UpdateState(State.AttackStart); peckChase = false; } } public void OnDeath() { //IL_0025: 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_007f: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) GameDirector.instance.CameraShake.ShakeDistance(3f, 3f, 10f, enemy.CenterTransform.position, 0.5f); GameDirector.instance.CameraImpact.ShakeDistance(3f, 3f, 10f, enemy.CenterTransform.position, 0.05f); ((Component)featherParticles).transform.position = enemy.CenterTransform.position; featherParticles.Play(); anim.deathSound.Play(enemy.CenterTransform.position, 1f, 1f, 1f, 1f); if (SemiFunc.IsMasterClientOrSingleplayer()) { enemy.EnemyParent.Despawn(); } } public void OnGrabbed() { if (SemiFunc.IsMasterClientOrSingleplayer() && currentState != State.Peck && currentState != State.PeckStart && currentState != State.AttackStart && currentState != State.Transform && currentState != State.ChaseNavmesh && currentState != State.ChaseTowards && currentState != State.ChaseMoveBack && currentState != State.DeTransform && currentState != State.Stun && currentState != State.Despawn) { playerTarget = enemy.Rigidbody.onGrabbedPlayerAvatar; if (SemiFunc.IsMultiplayer()) { photonView.RPC("UpdatePlayerTargetRPC", (RpcTarget)0, new object[1] { playerTarget.photonView.ViewID }); } UpdateState(State.PeckStart); } } public void OnObjectHurt() { if (SemiFunc.IsMasterClientOrSingleplayer() && Object.op_Implicit((Object)(object)enemy.Health.onObjectHurtPlayer) && ((currentState != State.AttackStart && currentState != State.Transform && currentState != State.ChaseNavmesh && currentState != State.ChaseTowards && currentState != State.ChaseMoveBack && currentState != State.DeTransform && currentState != State.Stun && currentState != State.Despawn) || (currentState == State.ChaseNavmesh && peckChase))) { playerTarget = enemy.Health.onObjectHurtPlayer; if (SemiFunc.IsMultiplayer()) { photonView.RPC("UpdatePlayerTargetRPC", (RpcTarget)0, new object[1] { playerTarget.photonView.ViewID }); } peckChase = false; UpdateState(State.AttackStart); } } private void UpdateState(State _state) { //IL_0068: 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) if (currentState != _state) { currentState = _state; stateImpulse = true; stateTimer = 0f; if (GameManager.Multiplayer()) { photonView.RPC("UpdateStateRPC", (RpcTarget)0, new object[1] { currentState }); } else { UpdateStateRPC(currentState); } } } public void OnSpawn() { if (SemiFunc.IsMasterClientOrSingleplayer() && SemiFunc.EnemySpawn(enemy)) { UpdateState(State.Spawn); } } public void TargetPositionLogic() { //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0062: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) if ((currentState == State.GoToPlayer || currentState == State.GoToPlayerOver || currentState == State.GoToPlayerUnder || currentState == State.ChaseNavmesh) && Object.op_Implicit((Object)(object)playerTarget)) { Vector3 val = ((Component)playerTarget).transform.position + ((Component)playerTarget).transform.forward * targetForwardOffset; if (pitCheckTimer <= 0f) { pitCheckTimer = 0.1f; pitCheck = !Physics.Raycast(val + Vector3.up, Vector3.down, 4f, LayerMask.GetMask(new string[1] { "Default" })); } else { pitCheckTimer -= Time.deltaTime; } if (pitCheck) { val = ((Component)playerTarget).transform.position; } targetPosition = Vector3.Lerp(targetPosition, val, 20f * Time.deltaTime); } } private void AnnoyingJump() { //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0088: 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_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: 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_00f7: 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_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) if (!enemy.Jump.jumping && !(annoyingJumpPauseTimer > 0f) && playerTarget.PlayerVisionTarget.VisionTransform.position.y > ((Component)enemy.Rigidbody).transform.position.y && enemy.Rigidbody.timeSinceStun > 2f) { Vector3 val = ((Component)playerTarget.localCamera).transform.position + ((Component)playerTarget.localCamera).transform.forward; float num = new Vector3(((Component)enemy.Rigidbody).transform.position.x, val.y, ((Component)enemy.Rigidbody).transform.position.z).y - enemy.CenterTransform.position.y; if (!enemy.OnScreen.GetOnScreen(playerTarget) && num > 1f && !playerTarget.isMoving) { enemy.Jump.StuckTrigger(targetPosition - enemy.Vision.VisionTransform.position); } } } private void RotationLogic() { //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01b6: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01e6: Unknown result type (might be due to invalid IL or missing references) //IL_01f6: Unknown result type (might be due to invalid IL or missing references) //IL_0200: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_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_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_024f: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: 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) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0279: Unknown result type (might be due to invalid IL or missing references) //IL_0288: Unknown result type (might be due to invalid IL or missing references) if (Object.op_Implicit((Object)(object)playerTarget) && (currentState == State.Notice || currentState == State.GoToPlayer || currentState == State.GoToPlayerOver || currentState == State.GoToPlayerUnder)) { if ((!VisionBlocked() && !playerTarget.isMoving && ((Vector3)(ref enemy.Rigidbody.velocity)).magnitude < 0.5f) || enemy.Jump.jumping) { rotationTarget = Quaternion.LookRotation(((Component)playerTarget).transform.position - ((Component)enemy.Rigidbody).transform.position); ((Quaternion)(ref rotationTarget)).eulerAngles = new Vector3(0f, ((Quaternion)(ref rotationTarget)).eulerAngles.y, 0f); } else if (((Vector3)(ref enemy.Rigidbody.velocity)).magnitude > 0.1f) { rotationTarget = Quaternion.LookRotation(((Vector3)(ref enemy.Rigidbody.velocity)).normalized); ((Quaternion)(ref rotationTarget)).eulerAngles = new Vector3(0f, ((Quaternion)(ref rotationTarget)).eulerAngles.y, 0f); } } else if (Object.op_Implicit((Object)(object)playerTarget) && (currentState == State.ChaseNavmesh || currentState == State.ChaseTowards || currentState == State.Transform)) { rotationTarget = Quaternion.LookRotation(((Component)playerTarget).transform.position - ((Component)enemy.Rigidbody).transform.position); ((Quaternion)(ref rotationTarget)).eulerAngles = new Vector3(((Quaternion)(ref rotationTarget)).eulerAngles.x, ((Quaternion)(ref rotationTarget)).eulerAngles.y, ((Quaternion)(ref rotationTarget)).eulerAngles.z); } else if (((Vector3)(ref enemy.Rigidbody.velocity)).magnitude > 0.1f) { rotationTarget = Quaternion.LookRotation(((Vector3)(ref enemy.Rigidbody.velocity)).normalized); if (currentState != State.ChaseMoveBack) { ((Quaternion)(ref rotationTarget)).eulerAngles = new Vector3(0f, ((Quaternion)(ref rotationTarget)).eulerAngles.y, 0f); } } ((Component)this).transform.rotation = SemiFunc.SpringQuaternionGet(rotationSpring, rotationTarget, -1f); } private void GravityLogic() { if (currentState == State.ChaseNavmesh || currentState == State.ChaseTowards || currentState == State.ChaseMoveBack || currentState == State.Transform || currentState == State.FlyBackToNavmesh || currentState == State.Peck) { enemy.Rigidbody.gravity = false; } else { enemy.Rigidbody.gravity = true; } } private void MoveBackPosition() { //IL_0027: 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_0073: 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) if (moveBackTimer <= 0f) { moveBackTimer = 0.1f; NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(((Component)this).transform.position, ref val, 0.5f, -1) && Physics.Raycast(((Component)this).transform.position, Vector3.down, 2f, LayerMask.GetMask(new string[1] { "Default" }))) { moveBackPosition = ((NavMeshHit)(ref val)).position; } } } private bool VisionBlocked() { //IL_0031: 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_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) if (visionTimer <= 0f) { visionTimer = 0.25f; Vector3 val = playerTarget.PlayerVisionTarget.VisionTransform.position - enemy.CenterTransform.position; visionPrevious = Physics.Raycast(enemy.CenterTransform.position, val, ((Vector3)(ref val)).magnitude, LayerMask.GetMask(new string[1] { "Default" }), (QueryTriggerInteraction)1); } return visionPrevious; } private void TimerLogic() { visionTimer -= Time.deltaTime; moveBackTimer -= Time.deltaTime; annoyingJumpPauseTimer -= Time.deltaTime; if (currentState == State.ChaseNavmesh || currentState == State.ChaseTowards || currentState == State.ChaseMoveBack) { chaseTimer += Time.deltaTime; } else { chaseTimer = 0f; } if (currentState == State.Spawn) { targetedPlayerTime = 0f; } if (currentState == State.GoToPlayer || currentState == State.GoToPlayerOver || currentState == State.GoToPlayerUnder) { targetedPlayerTime += Time.deltaTime; return; } targetedPlayerTime -= 5f * Time.deltaTime; targetedPlayerTime = Mathf.Max(0f, targetedPlayerTime); } private void HeadLookAtLogic() { //IL_00c8: 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_0063: 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_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) bool flag = false; if ((currentState == State.Notice || currentState == State.GoToPlayer || currentState == State.GoToPlayerOver || currentState == State.GoToPlayerUnder) && Object.op_Implicit((Object)(object)playerTarget) && !playerTarget.isDisabled) { flag = true; } if (flag) { Vector3 val = playerTarget.PlayerVisionTarget.VisionTransform.position - headLookAtTarget.position; val = SemiFunc.ClampDirection(val, headLookAtTarget.forward, 60f); headLookAtSource.rotation = SemiFunc.SpringQuaternionGet(headLookAtSpring, Quaternion.LookRotation(val), -1f); } else { headLookAtSource.rotation = SemiFunc.SpringQuaternionGet(headLookAtSpring, headLookAtTarget.rotation, -1f); } } private bool LeaveCheck(bool _setLeave) { if (SemiFunc.EnemyForceLeave(enemy) || targetedPlayerTime >= targetedPlayerTimeMax) { if (_setLeave) { UpdateState(State.Leave); } return true; } return false; } public void IdleBreakerSet() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.IsMultiplayer()) { photonView.RPC("IdleBreakerSetRPC", (RpcTarget)0, Array.Empty()); } else { IdleBreakerSetRPC(); } } private void ChaseStop() { if (!peckChase && (chaseTimer >= 10f || !Object.op_Implicit((Object)(object)playerTarget) || playerTarget.isDisabled)) { UpdateState(State.DeTransform); ((Component)enemy).GetComponent().stoppingDistance = 0f; } else if (peckChase && (chaseTimer >= 20f || !Object.op_Implicit((Object)(object)playerTarget) || playerTarget.isDisabled)) { UpdateState(State.DeTransform); ((Component)enemy).GetComponent().stoppingDistance = 0f; peckChase = false; } } private void FollowOffsetLogic() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: 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_0074: Unknown result type (might be due to invalid IL or missing references) if (currentState == State.ChaseNavmesh || currentState == State.ChaseMoveBack || currentState == State.FlyBackToNavmesh) { followOffsetTransform.localPosition = Vector3.Lerp(followOffsetTransform.localPosition, Vector3.up * 0.75f, 5f * Time.deltaTime); } else if (currentState == State.FlyBackToNavmeshStop) { followOffsetTransform.localPosition = Vector3.zero; } else { followOffsetTransform.localPosition = Vector3.Lerp(followOffsetTransform.localPosition, Vector3.zero, 10f * Time.deltaTime); } } private void FlyBackConditionLogic() { //IL_005a: Unknown result type (might be due to invalid IL or missing references) if ((currentState == State.Idle || currentState == State.Roam || currentState == State.Investigate || currentState == State.Notice || currentState == State.GoToPlayer || currentState == State.GoToPlayerOver || currentState == State.GoToPlayerUnder || currentState == State.MoveBackToNavmesh) && ((Component)enemy.Rigidbody).transform.position.y - moveBackPosition.y < -4f) { UpdateState(State.FlyBackToNavmesh); } } private void PeckCheckLogic() { //IL_0045: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_007e: 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_00a2: 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_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) if (peckChase && (currentState == State.Peck || currentState == State.ChaseTowards || currentState == State.ChaseNavmesh)) { float num = Vector2.Distance(new Vector2(((Component)enemy.Rigidbody).transform.position.x, ((Component)enemy.Rigidbody).transform.position.z), new Vector2(playerTarget.PlayerVisionTarget.VisionTransform.position.x, playerTarget.PlayerVisionTarget.VisionTransform.position.z)); float num2 = Mathf.Abs(((Component)enemy.Rigidbody).transform.position.y - playerTarget.PlayerVisionTarget.VisionTransform.position.y); if (num < 1.5f && num2 < 1f) { peckCheck = true; enemy.Rigidbody.velocity = Vector3.zero; } else { peckCheck = false; } } else { peckCheck = false; } } private void DuckBucketLogic() { if (duckBucketActive) { enemy.Vision.DisableVision(0.25f); enemy.EnemyParent.SpawnedTimerPause(0.25f); enemy.NavMeshAgent.OverrideAgent(0.5f, 0.5f, 0.25f); enemy.Jump.GapJumpOverride(0.25f, 1f, 1f); enemy.Jump.StuckJumpOverride(0.25f, 1f, 1f); enemy.Jump.SurfaceJumpOverride(0.25f, 1f, 1f); if (duckBucketTimer <= 0f) { duckBucketActive = false; } duckBucketTimer -= Time.deltaTime; } } public void DuckBucketActive() { if (currentState == State.Idle || currentState == State.Roam || currentState == State.Investigate || currentState == State.Notice || currentState == State.GoToPlayer || currentState == State.GoToPlayerOver || currentState == State.GoToPlayerUnder || currentState == State.MoveBackToNavmesh || currentState == State.Leave) { duckBucketActive = true; duckBucketTimer = 0.25f; } } [PunRPC] private void UpdateStateRPC(State _state, PhotonMessageInfo _info = default(PhotonMessageInfo)) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.MasterOnlyRPC(_info)) { currentState = _state; if (currentState == State.Spawn) { anim.OnSpawn(); } } } [PunRPC] private void UpdatePlayerTargetRPC(int _photonViewID, PhotonMessageInfo _info = default(PhotonMessageInfo)) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (!SemiFunc.MasterOnlyRPC(_info)) { return; } foreach (PlayerAvatar item in SemiFunc.PlayerGetList()) { if (item.photonView.ViewID == _photonViewID) { playerTarget = item; break; } } } [PunRPC] private void IdleBreakerSetRPC(PhotonMessageInfo _info = default(PhotonMessageInfo)) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.MasterOnlyRPC(_info)) { idleBreakerTrigger = true; } } } public class EnemyBirdAnim : MonoBehaviour { public Enemy enemy; internal Animator animator; public EnemyBird controller; internal MaterialTrigger material = new MaterialTrigger(); public Sound quackSound; public Sound stunSound; public Sound stunStopSound; public Sound biteSound; public Sound transformSound; public Sound jumpSound; public Sound footstepSound; public Sound mouthExtendSound; public Sound mouthRetractSound; public Sound attackLoopSound; public Sound hurtSound; public Sound deathSound; public Sound noticeSound; public Sound flyFlapSound; public Sound flyLoopSound; public float soundHurtPauseTimer; private bool jumpImpulse; private bool flyImpulse; private bool landImpulse; private bool stunImpulse; private bool noticeImpulse; private bool transformImpulse; private bool peckImpulse; private float idleBreakerTimer; private float peckPauseTimer; private void Awake() { animator = ((Component)this).GetComponent(); animator.keepAnimatorStateOnDisable = true; } private void Update() { //IL_0031: 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_05ac: Unknown result type (might be due to invalid IL or missing references) //IL_05b1: Unknown result type (might be due to invalid IL or missing references) //IL_0769: Unknown result type (might be due to invalid IL or missing references) AnimatorStateInfo currentAnimatorStateInfo; if (enemy.Rigidbody.frozen) { animator.speed = 0f; } else { currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Walk") && !animator.IsInTransition(0)) { animator.speed = Mathf.Clamp(((Vector3)(ref enemy.Rigidbody.velocity)).magnitude + 0.2f, 0.8f, 1.2f); } else { animator.speed = 1f; } } if (controller.currentState != EnemyBird.State.AttackStart && controller.currentState != EnemyBird.State.Transform && controller.currentState != EnemyBird.State.ChaseNavmesh && controller.currentState != EnemyBird.State.ChaseTowards && controller.currentState != EnemyBird.State.ChaseMoveBack && controller.currentState != EnemyBird.State.DeTransform) { if (((Vector3)(ref enemy.Rigidbody.velocity)).magnitude > 0.1f) { animator.SetBool("move", true); } else { animator.SetBool("move", false); } if (!enemy.IsStunned()) { if (!enemy.Grounded.grounded && (controller.currentState == EnemyBird.State.FlyBackToNavmesh || controller.currentState == EnemyBird.State.FlyBackToNavmeshStop)) { if (flyImpulse) { animator.SetTrigger("fly"); animator.SetBool("falling", false); flyImpulse = false; landImpulse = true; } else if (controller.currentState == EnemyBird.State.FlyBackToNavmeshStop) { animator.SetBool("falling", true); } } else if (enemy.Jump.jumping) { if (jumpImpulse) { animator.SetTrigger("jump"); animator.SetBool("falling", false); jumpImpulse = false; landImpulse = true; } else if (controller.enemy.Rigidbody.physGrabObject.rbVelocity.y < 0f) { animator.SetBool("falling", true); } } else { if (landImpulse) { animator.SetTrigger("land"); landImpulse = false; } animator.SetBool("falling", false); jumpImpulse = true; flyImpulse = true; } } } if (controller.currentState == EnemyBird.State.Peck || controller.currentState == EnemyBird.State.ChaseNavmesh || controller.currentState == EnemyBird.State.ChaseTowards) { if (peckImpulse && controller.peckChase) { animator.SetBool("angry", true); animator.SetBool("move", false); peckImpulse = false; } } else { peckImpulse = true; animator.SetBool("angry", false); animator.SetBool("move", true); } if (peckPauseTimer > 0f) { peckPauseTimer -= Time.deltaTime; } if (controller.peckCheck && controller.peckChase && peckPauseTimer <= 0f) { animator.SetTrigger("peck"); peckPauseTimer = 1.5f; } if (controller.currentState == EnemyBird.State.AttackStart) { if (transformImpulse) { animator.SetTrigger("transform"); transformImpulse = false; } } else { transformImpulse = true; } if ((controller.currentState == EnemyBird.State.AttackStart || controller.currentState == EnemyBird.State.Transform || controller.currentState == EnemyBird.State.ChaseNavmesh || controller.currentState == EnemyBird.State.ChaseTowards || controller.currentState == EnemyBird.State.ChaseMoveBack) && !controller.peckChase) { animator.SetBool("move", false); animator.SetBool("chase", true); if (soundHurtPauseTimer > 0f) { StopAttackSound(); } else { attackLoopSound.PlayLoop(true, 5f, 5f, 1f, 1f); } } else { StopAttackSound(); animator.SetBool("chase", false); } if (controller.currentState == EnemyBird.State.Notice) { if (noticeImpulse) { animator.SetTrigger("notice"); noticeImpulse = false; } } else { noticeImpulse = true; } currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0); if (((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Idle") && !animator.IsInTransition(0)) { idleBreakerTimer += Time.deltaTime; if (idleBreakerTimer > 5f) { idleBreakerTimer = 0f; if (Random.Range(0, 100) < 35) { controller.IdleBreakerSet(); } } } if (controller.idleBreakerTrigger) { animator.SetTrigger("idlebreak"); controller.idleBreakerTrigger = false; } if (controller.currentState == EnemyBird.State.Stun) { peckImpulse = false; landImpulse = false; if (stunImpulse) { animator.SetTrigger("stun"); stunImpulse = false; } animator.SetBool("stunned", true); if (soundHurtPauseTimer > 0f) { stunSound.PlayLoop(false, 5f, 2f, 1f, 1f); } else { stunSound.PlayLoop(true, 5f, 5f, 1f, 1f); } } else { animator.SetBool("stunned", false); stunSound.PlayLoop(false, 5f, 1f, 1f, 1f); if (!stunImpulse) { stunStopSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); stunImpulse = true; } } if (controller.currentState == EnemyBird.State.Despawn) { animator.SetBool("despawning", true); } else { animator.SetBool("despawning", false); } if (controller.currentState == EnemyBird.State.FlyBackToNavmesh) { flyLoopSound.PlayLoop(true, 5f, 2f, 1f, 1f); } else { flyLoopSound.PlayLoop(false, 5f, 2f, 1f, 1f); } if (soundHurtPauseTimer > 0f) { soundHurtPauseTimer -= Time.deltaTime; } } public void OnSpawn() { animator.Play("Spawn", 0, 0f); } private void Quack() { //IL_000d: 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) quackSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); if ((!GameManager.Multiplayer() || PhotonNetwork.IsMasterClient) && controller.currentState != EnemyBird.State.Idle && controller.currentState != EnemyBird.State.Roam && controller.currentState != EnemyBird.State.Investigate && controller.currentState != EnemyBird.State.Leave && controller.currentState != EnemyBird.State.MoveBackToNavmesh) { EnemyDirector.instance.SetInvestigate(((Component)this).transform.position, 10f, false); } } private void BiteSound() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.IsMasterClientOrSingleplayer()) { enemy.Rigidbody.GrabRelease(true, 0.1f); } GameDirector.instance.CameraShake.ShakeDistance(2f, 3f, 8f, ((Component)this).transform.position, 0.5f); GameDirector.instance.CameraImpact.ShakeDistance(2f, 3f, 8f, ((Component)this).transform.position, 0.1f); biteSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } private void TransformSound() { //IL_0012: 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_004f: Unknown result type (might be due to invalid IL or missing references) if (((Behaviour)this).enabled) { if (Vector3.Distance(((Component)this).transform.position, ((Component)Camera.main).transform.position) < 10f) { AudioScare.instance.PlayImpact(); } transformSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } } private void JumpSound() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) jumpSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } private void FootstepSound() { //IL_000d: 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) footstepSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); Materials.Instance.Impulse(enemy.Rigidbody.physGrabObject.centerPoint, Vector3.down, (SoundType)0, true, true, material, (HostType)2); } private void MouthExtendSound() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) mouthExtendSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } private void MouthRetractSound() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) mouthRetractSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } private void StopAttackSound() { attackLoopSound.PlayLoop(false, 5f, 5f, 1f, 1f); } private void NoticeSound() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) noticeSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } private void FlyFlapSound() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) flyFlapSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f); } public void Despawn() { enemy.EnemyParent.Despawn(); } } [HarmonyPatch(typeof(PlayerController))] internal static class ExamplePlayerControllerPatch { [HarmonyPrefix] [HarmonyPatch("Start")] private static void Start_Prefix(PlayerController __instance) { REPOBirdMod.Logger.LogDebug((object)$"{__instance} Start Prefix"); } [HarmonyPostfix] [HarmonyPatch("Start")] private static void Start_Postfix(PlayerController __instance) { REPOBirdMod.Logger.LogDebug((object)$"{__instance} Start Postfix"); } } [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("Andraxis.REPOBirdMod", "REPOBirdMod", "1.0.0")] public class REPOBirdMod : BaseUnityPlugin { internal static REPOBirdMod Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { Instance = this; ((Component)this).gameObject.transform.parent = null; ((Object)((Component)this).gameObject).hideFlags = (HideFlags)61; Patch(); string directoryName = Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location); string text = Path.Combine(directoryName, "repobird"); Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} has loaded!"); BundleLoader.LoadBundle(text, (Action)delegate(AssetBundle assetBundle) { EnemyContent val = assetBundle.LoadAsset("Enemy Bird"); Enemies.RegisterEnemy(val); }, false); } internal void Patch() { //IL_001a: 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_0021: Expected O, but got Unknown //IL_0026: Expected O, but got Unknown if (Harmony == null) { Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID); Harmony val2 = val; Harmony = val; } Harmony.PatchAll(); } internal void Unpatch() { Harmony? harmony = Harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void Update() { } } }