Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Gnoelma v1.1.6
Gnoelma.dll
Decompiled a year agousing System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Logging; using HarmonyLib; using Microsoft.CodeAnalysis; using Photon.Pun; using REPOLib.Modules; 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: IgnoresAccessChecksTo("")] [assembly: AssemblyCompany("Thalas")] [assembly: AssemblyConfiguration("Debug")] [assembly: AssemblyFileVersion("1.1.2.0")] [assembly: AssemblyInformationalVersion("1.1.2")] [assembly: AssemblyProduct("Gnoelma")] [assembly: AssemblyTitle("Gnoelma")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.1.2.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; } } } public class EnemyGnoelma : EnemyGnome { private void Awake() { base.photonView = ((Component)this).GetComponent<PhotonView>(); Debug.Log((object)"GNOELMASSSS"); } private void Start() { base.enemy.NavMeshAgent.DefaultSpeed = Random.Range(base.speedMin, base.speedMax); base.enemy.NavMeshAgent.Agent.speed = base.enemy.NavMeshAgent.DefaultSpeed; } private void Update() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Invalid comparison between Unknown and I4 //IL_0085: 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_008c: 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_00c9: Expected I4, but got Unknown if (Object.op_Implicit((Object)(object)EnemyGnoelmaDirector.instance) && EnemyGnoelmaDirector.instance.setup && SemiFunc.IsMasterClientOrSingleplayer()) { AvoidLogic(); RotationLogic(); BackAwayOffsetLogic(); MoveOffsetLogic(); TimerLogic(); if ((int)base.enemy.CurrentState == 11) { UpdateState((State)12); } if (base.enemy.IsStunned()) { UpdateState((State)11); } State currentState = base.currentState; State val = currentState; switch ((int)val) { case 0: StateSpawn(); break; case 1: StateIdle(); break; case 4: StateMove(); break; case 3: StateNotice(); break; case 2: StateNoticeDelay(); break; case 5: StateMoveUnder(); break; case 6: StateMoveOver(); break; case 7: StateMoveBack(); break; case 8: StateAttackMove(); break; case 9: StateAttack(); break; case 10: StateAttackDone(); break; case 11: StateStun(); break; case 12: StateDespawn(); break; } } } private void FixedUpdate() { //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) //IL_0031: 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) if (SemiFunc.IsMasterClientOrSingleplayer() && base.avoidForce != Vector3.zero) { base.enemy.Rigidbody.rb.AddForce(base.avoidForce * 2f, (ForceMode)0); } } private void StateSpawn() { if (base.stateImpulse) { base.stateImpulse = false; base.stateTimer = 1f; } base.stateTimer -= Time.deltaTime; if (base.stateTimer <= 0f) { UpdateState((State)1); } } private void StateIdle() { //IL_0038: 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_00bf: Unknown result type (might be due to invalid IL or missing references) if (base.stateImpulse) { base.enemy.NavMeshAgent.ResetPath(); base.enemy.NavMeshAgent.Warp(((Component)base.enemy.Rigidbody).transform.position); base.stateImpulse = false; } base.enemy.Rigidbody.DisableFollowPosition(0.1f, 0.5f); IdleBreakerLogic(); if (EnemyGnoelmaDirector.instance.currentState == EnemyGnoelmaDirector.State.AttackPlayer || EnemyGnoelmaDirector.instance.currentState == EnemyGnoelmaDirector.State.AttackValuable) { UpdateState((State)2); } else if (Vector3.Distance(((Component)base.enemy.Rigidbody).transform.position, EnemyGnoelmaDirector.instance.destinations[base.directorIndex]) > 2f) { UpdateState((State)4); } } private void StateMove() { //IL_003a: 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_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) if (base.stateImpulse) { base.stateImpulse = false; base.stateTimer = 2f; } base.enemy.NavMeshAgent.SetDestination(EnemyGnoelmaDirector.instance.destinations[base.directorIndex]); MoveBackPosition(); MoveOffsetSet(); SemiFunc.EnemyCartJump(base.enemy); if (EnemyGnoelmaDirector.instance.currentState == EnemyGnoelmaDirector.State.AttackPlayer || EnemyGnoelmaDirector.instance.currentState == EnemyGnoelmaDirector.State.AttackValuable) { UpdateState((State)2); } else if (Vector3.Distance(((Component)base.enemy.Rigidbody).transform.position, EnemyGnoelmaDirector.instance.destinations[base.directorIndex]) <= 0.2f) { UpdateState((State)1); } else if (Vector3.Distance(((Component)base.enemy.Rigidbody).transform.position, EnemyGnoelmaDirector.instance.destinations[base.directorIndex]) <= 2f) { base.stateTimer -= Time.deltaTime; if (base.stateTimer <= 0f) { UpdateState((State)1); } } } private void StateNoticeDelay() { if (base.stateImpulse) { base.stateImpulse = false; base.stateTimer = Random.Range(0f, 1f); } base.stateTimer -= Time.deltaTime; if (base.stateTimer <= 0f) { UpdateState((State)3); } } private void StateNotice() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) if (base.stateImpulse) { base.enemy.NavMeshAgent.ResetPath(); base.enemy.NavMeshAgent.Warp(((Component)base.enemy.Rigidbody).transform.position); base.stateImpulse = false; base.stateTimer = 0.5f; } base.stateTimer -= Time.deltaTime; if (base.stateTimer <= 0f) { UpdateState((State)8); } } private void StateAttackMove() { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0038: 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_00e9: 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_011d: 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_015c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_018b: 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_01c5: Unknown result type (might be due to invalid IL or missing references) //IL_01ef: Unknown result type (might be due to invalid IL or missing references) //IL_0209: Unknown result type (might be due to invalid IL or missing references) if (base.stateImpulse) { base.stateImpulse = false; } base.stateTimer -= Time.deltaTime; Vector3 destination = AttackPositionLogic(); base.enemy.NavMeshAgent.SetDestination(destination); bool flag = EnemyGnoelmaDirector.instance.CanAttack(this); MoveBackPosition(); MoveOffsetSet(); SemiFunc.EnemyCartJump(base.enemy); if (EnemyGnoelmaDirector.instance.currentState != EnemyGnoelmaDirector.State.AttackPlayer && EnemyGnoelmaDirector.instance.currentState != EnemyGnoelmaDirector.State.AttackValuable) { UpdateState((State)4); } else if (flag) { SemiFunc.EnemyCartJumpReset(base.enemy); UpdateState((State)9); } else { if (base.enemy.NavMeshAgent.CanReach(AttackVisionDynamic(), 1f) || !(Vector3.Distance(((Component)base.enemy.Rigidbody).transform.position, base.enemy.NavMeshAgent.GetPoint()) < 2f)) { return; } if (AttackPositionLogic().y > ((Component)base.enemy.Rigidbody).transform.position.y + 0.2f) { base.enemy.Jump.StuckTrigger(AttackVisionPosition() - base.enemy.Vision.VisionTransform.position); } NavMeshHit val = default(NavMeshHit); if (!VisionBlocked() && !NavMesh.SamplePosition(AttackVisionDynamic(), ref val, 0.5f, -1)) { if (Mathf.Abs(AttackVisionDynamic().y - ((Component)base.enemy.Rigidbody).transform.position.y) < 0.2f) { UpdateState((State)5); } else if (AttackPositionLogic().y > ((Component)base.enemy.Rigidbody).transform.position.y) { UpdateState((State)6); } } } } private void StateMoveUnder() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0054: 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_0070: 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) if (base.stateImpulse) { base.stateTimer = 2f; base.stateImpulse = false; } bool flag = EnemyGnoelmaDirector.instance.CanAttack(this); Vector3 val = AttackPositionLogic(); base.enemy.NavMeshAgent.Disable(0.1f); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, val, base.enemy.NavMeshAgent.DefaultSpeed * Time.deltaTime); MoveOffsetSet(); SemiFunc.EnemyCartJump(base.enemy); NavMeshHit val2 = default(NavMeshHit); if (EnemyGnoelmaDirector.instance.currentState != EnemyGnoelmaDirector.State.AttackPlayer && EnemyGnoelmaDirector.instance.currentState != EnemyGnoelmaDirector.State.AttackValuable) { UpdateState((State)7); } else if (flag) { SemiFunc.EnemyCartJumpReset(base.enemy); UpdateState((State)9); } else if (NavMesh.SamplePosition(val, ref val2, 0.5f, -1)) { UpdateState((State)7); } else if (VisionBlocked()) { base.stateTimer -= Time.deltaTime; if (base.stateTimer <= 0f) { UpdateState((State)7); } } else { EnemyGnoelmaDirector.instance.SeeTarget(); base.stateTimer = 2f; } } private void StateMoveOver() { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0054: 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_0070: 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_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0116: 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) if (base.stateImpulse) { base.stateTimer = 2f; base.stateImpulse = false; } bool flag = EnemyGnoelmaDirector.instance.CanAttack(this); Vector3 val = AttackPositionLogic(); base.enemy.NavMeshAgent.Disable(0.1f); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, val, base.enemy.NavMeshAgent.DefaultSpeed * Time.deltaTime); MoveOffsetSet(); SemiFunc.EnemyCartJump(base.enemy); if (AttackVisionDynamic().y > ((Component)base.enemy.Rigidbody).transform.position.y + 0.2f && !flag) { base.enemy.Jump.StuckTrigger(AttackVisionDynamic() - ((Component)base.enemy.Rigidbody).transform.position); ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, AttackVisionDynamic(), 2f); } NavMeshHit val2 = default(NavMeshHit); if (EnemyGnoelmaDirector.instance.currentState != EnemyGnoelmaDirector.State.AttackPlayer && EnemyGnoelmaDirector.instance.currentState != EnemyGnoelmaDirector.State.AttackValuable) { UpdateState((State)7); } else if (flag) { SemiFunc.EnemyCartJumpReset(base.enemy); UpdateState((State)9); } else if (NavMesh.SamplePosition(val, ref val2, 0.5f, -1)) { UpdateState((State)7); } else if (VisionBlocked()) { base.stateTimer -= Time.deltaTime; if (base.stateTimer <= 0f) { UpdateState((State)7); } } else { EnemyGnoelmaDirector.instance.SeeTarget(); base.stateTimer = 2f; } } private void StateMoveBack() { //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_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013d: 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_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_0197: 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_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01ea: Unknown result type (might be due to invalid IL or missing references) //IL_0220: Unknown result type (might be due to invalid IL or missing references) if (base.stateImpulse) { base.stateImpulse = false; base.stateTimer = 2f; } base.enemy.NavMeshAgent.Disable(0.1f); if (!base.enemy.Jump.jumping) { ((Component)this).transform.position = Vector3.MoveTowards(((Component)this).transform.position, base.moveBackPosition, base.enemy.NavMeshAgent.DefaultSpeed * Time.deltaTime); } MoveOffsetSet(); SemiFunc.EnemyCartJump(base.enemy); base.stateTimer -= Time.deltaTime; bool flag = EnemyGnoelmaDirector.instance.CanAttack(this); if (base.stateTimer <= 0f && (Vector3.Distance(((Component)this).transform.position, ((Component)base.enemy.Rigidbody).transform.position) > 2f || base.enemy.Rigidbody.notMovingTimer > 2f) && !base.enemy.Jump.jumping) { Vector3 val = ((Component)this).transform.position - base.moveBackPosition; Vector3 normalized = ((Vector3)(ref val)).normalized; base.enemy.Jump.StuckTrigger(((Component)this).transform.position - base.moveBackPosition); ((Component)this).transform.position = ((Component)base.enemy.Rigidbody).transform.position; Transform transform = ((Component)this).transform; transform.position += normalized * 2f; } NavMeshHit val2 = default(NavMeshHit); if (flag) { SemiFunc.EnemyCartJumpReset(base.enemy); UpdateState((State)9); } else if (Vector3.Distance(((Component)base.enemy.Rigidbody).transform.position, base.moveBackPosition) <= 0.2f) { UpdateState((State)8); } else if (NavMesh.SamplePosition(((Component)base.enemy.Rigidbody).transform.position, ref val2, 0.5f, -1)) { UpdateState((State)8); } } private void StateAttack() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) if (base.stateImpulse) { base.enemy.NavMeshAgent.ResetPath(); base.enemy.NavMeshAgent.Warp(((Component)base.enemy.Rigidbody).transform.position); base.stateTimer = 3f; base.stateImpulse = false; } if (base.stateTimer > 0.5f) { AnimatorStateInfo currentAnimatorStateInfo = base.enemyGnomeAnim.animator.GetCurrentAnimatorStateInfo(0); if (!((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("Attack")) { UpdateState((State)8); return; } } base.enemy.StuckCount = 0; base.enemy.Rigidbody.DisableFollowPosition(0.1f, 1f); base.stateTimer -= Time.deltaTime; if (base.stateTimer <= 0f) { UpdateState((State)10); } } private void StateAttackDone() { //IL_0093: 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) if (base.stateImpulse) { base.stateTimer = 1f; base.stateImpulse = false; } base.enemy.StuckCount = 0; base.enemy.Rigidbody.DisableFollowPosition(0.1f, 5f); base.stateTimer -= Time.deltaTime; if (base.stateTimer <= 0f) { base.moveBackTimer = 2f; base.attackCooldown = 2f; NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(((Component)base.enemy.Rigidbody).transform.position, ref val, 0.5f, -1)) { UpdateState((State)8); } else { UpdateState(base.attackMoveState); } } } private void StateStun() { if (base.stateImpulse) { base.stateImpulse = false; } if (!base.enemy.IsStunned()) { UpdateState((State)1); } } private void StateDespawn() { if (base.stateImpulse) { base.stateImpulse = false; } } public void OnSpawn() { if (SemiFunc.IsMasterClientOrSingleplayer() && SemiFunc.EnemySpawn(base.enemy)) { EnemyGnoelmaDirector.instance.OnSpawn(); UpdateState((State)0); } } public void OnHurt() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) base.soundHurt.Play(base.enemy.CenterTransform.position, 1f, 1f, 1f, 1f); } public void OnDeath() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) base.soundDeath.Play(base.enemy.CenterTransform.position, 1f, 1f, 1f, 1f); GameDirector.instance.CameraShake.ShakeDistance(3f, 3f, 10f, base.enemy.CenterTransform.position, 0.5f); GameDirector.instance.CameraImpact.ShakeDistance(3f, 3f, 10f, base.enemy.CenterTransform.position, 0.05f); ParticleSystem[] deathEffects = base.deathEffects; for (int i = 0; i < deathEffects.Length; i++) { deathEffects[i].Play(); } if (SemiFunc.IsMasterClientOrSingleplayer()) { base.enemy.EnemyParent.Despawn(); } } public void OnInvestigate() { //IL_001b: Unknown result type (might be due to invalid IL or missing references) if (SemiFunc.IsMasterClientOrSingleplayer()) { EnemyGnoelmaDirector.instance.Investigate(base.enemy.StateInvestigate.onInvestigateTriggeredPosition); } } public void OnVision() { if (SemiFunc.IsMasterClientOrSingleplayer()) { EnemyGnoelmaDirector.instance.SetTarget(base.enemy.Vision.onVisionTriggeredPlayer); } } public void OnImpactLight() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) if (base.enemy.IsStunned()) { base.soundImpactLight.Play(base.enemy.CenterTransform.position, 1f, 1f, 1f, 1f); } } public void OnImpactMedium() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) if (base.enemy.IsStunned()) { base.soundImpactMedium.Play(base.enemy.CenterTransform.position, 1f, 1f, 1f, 1f); } } public void OnImpactHeavy() { //IL_0022: Unknown result type (might be due to invalid IL or missing references) if (base.enemy.IsStunned()) { base.soundImpactHeavy.Play(base.enemy.CenterTransform.position, 1f, 1f, 1f, 1f); } } public void UpdateState(State _state) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Invalid comparison between Unknown and I4 //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0078: 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 (base.currentState != _state) { if ((int)_state == 9) { base.attackMoveState = base.currentState; } base.currentState = _state; base.stateImpulse = true; base.stateTimer = 0f; if (GameManager.Multiplayer()) { base.photonView.RPC("UpdateStateRPC", (RpcTarget)0, new object[1] { base.currentState }); } else { UpdateStateRPC(base.currentState); } } } private void RotationLogic() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Invalid comparison between Unknown and I4 //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0244: Invalid comparison between Unknown and I4 //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Invalid comparison between Unknown and I4 //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Invalid comparison between Unknown and I4 //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Invalid comparison between Unknown and I4 //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 //IL_008a: 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_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Invalid comparison between Unknown and I4 //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Invalid comparison between Unknown and I4 //IL_0326: Unknown result type (might be due to invalid IL or missing references) //IL_0330: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_02a0: Unknown result type (might be due to invalid IL or missing references) //IL_02b5: Unknown result type (might be due to invalid IL or missing references) //IL_02ba: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_02ea: Unknown result type (might be due to invalid IL or missing references) //IL_02fb: Unknown result type (might be due to invalid IL or missing references) //IL_0300: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_0313: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0156: 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_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_0101: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: 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_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Invalid comparison between Unknown and I4 //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Invalid comparison between Unknown and I4 //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01ca: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01eb: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_020b: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0231: 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_0078: Invalid comparison between Unknown and I4 if ((int)base.currentState == 4 || (int)base.currentState == 3 || (int)base.currentState == 8 || (int)base.currentState == 5 || (int)base.currentState == 6 || (int)base.currentState == 7 || (int)base.currentState == 9) { if ((int)base.currentState == 3 || (((int)base.currentState == 8 || (int)base.currentState == 5 || (int)base.currentState == 6 || (int)base.currentState == 9) && Vector3.Distance(((Component)base.enemy.Rigidbody).transform.position, EnemyGnoelmaDirector.instance.attackPosition) < 5f)) { Quaternion rotation = base.rotationTransform.rotation; base.rotationTransform.rotation = Quaternion.LookRotation(AttackVisionPosition() - ((Component)base.enemy.Rigidbody).transform.position); base.rotationTransform.eulerAngles = new Vector3(0f, base.rotationTransform.eulerAngles.y, 0f); Quaternion rotation2 = base.rotationTransform.rotation; base.rotationTransform.rotation = rotation; base.rotationTarget = rotation2; } else { Vector3 velocity = base.enemy.Rigidbody.rb.velocity; if (((Vector3)(ref velocity)).magnitude > 0.1f) { Vector3 position = base.rotationTransform.position; Quaternion rotation3 = base.rotationTransform.rotation; base.rotationTransform.position = ((Component)base.enemy.Rigidbody).transform.position; Transform rotationTransform = base.rotationTransform; velocity = base.enemy.Rigidbody.rb.velocity; rotationTransform.rotation = Quaternion.LookRotation(((Vector3)(ref velocity)).normalized); base.rotationTransform.eulerAngles = new Vector3(0f, base.rotationTransform.eulerAngles.y, 0f); Quaternion rotation4 = base.rotationTransform.rotation; base.rotationTransform.position = position; base.rotationTransform.rotation = rotation3; base.rotationTarget = rotation4; } } } else if ((int)base.currentState == 1 && Vector3.Distance(((Component)EnemyGnoelmaDirector.instance).transform.position, ((Component)base.enemy.Rigidbody).transform.position) > 0.1f) { Quaternion rotation5 = base.rotationTransform.rotation; base.rotationTransform.rotation = Quaternion.LookRotation(((Component)EnemyGnoelmaDirector.instance).transform.position - ((Component)base.enemy.Rigidbody).transform.position); base.rotationTransform.eulerAngles = new Vector3(0f, base.rotationTransform.eulerAngles.y, 0f); Quaternion rotation6 = base.rotationTransform.rotation; base.rotationTransform.rotation = rotation5; base.rotationTarget = rotation6; } base.rotationTransform.rotation = SemiFunc.SpringQuaternionGet(base.rotationSpring, base.rotationTarget, -1f); } private void AvoidLogic() { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Invalid comparison between Unknown and I4 //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Invalid comparison between Unknown and I4 //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: 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_0023: Invalid comparison between Unknown and I4 //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: 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_0098: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: 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_010e: Unknown result type (might be due to invalid IL or missing references) //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_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_0128: 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_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) if ((int)base.currentState == 4 || (int)base.currentState == 8 || (int)base.currentState == 5 || (int)base.currentState == 6) { if (base.avoidTimer <= 0f) { base.avoidForce = Vector3.zero; base.avoidTimer = 0.25f; if (base.enemy.Jump.jumping) { return; } Collider[] array = Physics.OverlapBox(((Component)base.avoidCollider).transform.position, base.avoidCollider.size / 2f, ((Component)base.avoidCollider).transform.rotation, LayerMask.GetMask(new string[1] { "PhysGrabObject" })); for (int i = 0; i < array.Length; i++) { EnemyRigidbody componentInParent = ((Component)array[i]).GetComponentInParent<EnemyRigidbody>(); if (Object.op_Implicit((Object)(object)componentInParent)) { EnemyGnoelma component = ((Component)componentInParent.enemy).GetComponent<EnemyGnoelma>(); if (Object.op_Implicit((Object)(object)component)) { Vector3 avoidForce = base.avoidForce; Vector3 val = ((Component)this).transform.position - ((Component)component).transform.position; val = ((Vector3)(ref val)).normalized; base.avoidForce = avoidForce + ((Vector3)(ref val)).normalized; } } } } else { base.avoidTimer -= Time.deltaTime; } } else { base.avoidForce = Vector3.zero; } } private Vector3 AttackPositionLogic() { //IL_0006: 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_0030: 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_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) Vector3 result = EnemyGnoelmaDirector.instance.attackPosition + new Vector3(Mathf.Cos(base.attackAngle), 0f, Mathf.Sin(base.attackAngle)) * 0.7f; base.attackAngle += Time.deltaTime * 1f; return result; } private Vector3 AttackVisionPosition() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: 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) return EnemyGnoelmaDirector.instance.attackVisionPosition; } private Vector3 AttackVisionDynamic() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) if (EnemyGnoelmaDirector.instance.currentState == EnemyGnoelmaDirector.State.AttackPlayer) { return AttackPositionLogic(); } return AttackVisionPosition(); } private void MoveBackPosition() { //IL_0007: 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_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) if (Vector3.Distance(((Component)this).transform.position, ((Component)base.enemy.Rigidbody).transform.position) < 1f) { base.moveBackPosition = ((Component)this).transform.position; } } private void BackAwayOffsetLogic() { //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) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) if (base.moveBackTimer > 0f) { base.moveBackTimer -= Time.deltaTime; base.backAwayOffset.localPosition = Vector3.Lerp(base.backAwayOffset.localPosition, new Vector3(0f, 0f, -1f), Time.deltaTime * 10f); } else { base.backAwayOffset.localPosition = Vector3.Lerp(base.backAwayOffset.localPosition, Vector3.zero, Time.deltaTime * 10f); } } private void MoveOffsetLogic() { //IL_00dd: 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_005f: 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_0094: 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_00b2: 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) if (base.moveOffsetTimer > 0f) { base.moveOffsetTimer -= Time.deltaTime; if (base.enemy.Jump.jumping) { base.moveOffsetTimer = 0f; } if (base.moveOffsetTimer <= 0f) { base.moveOffsetPosition = Vector3.zero; } else { base.moveOffsetSetTimer -= Time.deltaTime; if (base.moveOffsetSetTimer <= 0f) { Vector3 moveOffsetPosition = Random.insideUnitSphere * 0.5f; moveOffsetPosition.y = 0f; base.moveOffsetPosition = moveOffsetPosition; base.moveOffsetSetTimer = Random.Range(0.2f, 1f); } } } base.moveOffsetTransform.localPosition = Vector3.Lerp(base.moveOffsetTransform.localPosition, base.moveOffsetPosition, Time.deltaTime * 20f); } private void MoveOffsetSet() { base.moveOffsetTimer = 0.2f; } private bool VisionBlocked() { //IL_0022: 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_003c: 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_0053: 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) if (base.visionTimer <= 0f) { base.visionTimer = 0.1f; Vector3 val = AttackVisionPosition() - base.enemy.Vision.VisionTransform.position; base.visionPrevious = Physics.Raycast(base.enemy.Vision.VisionTransform.position, val, ((Vector3)(ref val)).magnitude, LayerMask.GetMask(new string[1] { "Default" })); } return base.visionPrevious; } private void TimerLogic() { base.visionTimer -= Time.deltaTime; base.attackCooldown -= Time.deltaTime; base.overlapCheckTimer -= Time.deltaTime; if (base.overlapCheckCooldown > 0f) { base.overlapCheckCooldown -= Time.deltaTime; if (base.overlapCheckCooldown <= 0f) { base.overlapCheckPrevious = false; } } } public void IdleBreakerLogic() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) bool flag = false; foreach (EnemyGnoelma gnoelma in EnemyGnoelmaDirector.instance.gnoelmas) { if ((Object)(object)gnoelma != (Object)(object)this && Vector3.Distance(((Component)this).transform.position, ((Component)gnoelma).transform.position) < 2f) { flag = true; break; } } if (!flag) { return; } if (base.idleBreakerTimer <= 0f) { base.idleBreakerTimer = Random.Range(2f, 15f); if (SemiFunc.IsMultiplayer()) { base.photonView.RPC("IdleBreakerRPC", (RpcTarget)0, Array.Empty<object>()); } else { IdleBreakerRPC(); } } else { base.idleBreakerTimer -= Time.deltaTime; } } [PunRPC] private void UpdateStateRPC(State _state) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Invalid comparison between Unknown and I4 base.currentState = _state; if ((int)base.currentState == 0) { base.enemyGnomeAnim.OnSpawn(); } } [PunRPC] private void IdleBreakerRPC() { base.enemyGnomeAnim.idleBreakerImpulse = true; } } public class EnemyGnoelmaDirector : MonoBehaviour { public enum State { Idle, Leave, ChangeDestination, Investigate, AttackSet, AttackPlayer, AttackValuable } [CompilerGenerated] private sealed class <Setup>d__18 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public EnemyGnoelmaDirector <>4__this; private List<EnemyParent>.Enumerator <>s__1; private EnemyParent <item>5__2; private EnemyGnoelma <component>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <Setup>d__18(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>s__1 = default(List<EnemyParent>.Enumerator); <item>5__2 = null; <component>5__3 = null; <>1__state = -2; } private bool MoveNext() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0112: Unknown result type (might be due to invalid IL or missing references) switch (<>1__state) { default: return false; case 0: <>1__state = -1; break; case 1: <>1__state = -1; break; } if (!LevelGenerator.Instance.Generated) { <>2__current = (object)new WaitForSeconds(0.1f); <>1__state = 1; return true; } <>s__1 = EnemyDirector.instance.enemiesSpawned.GetEnumerator(); try { while (<>s__1.MoveNext()) { <item>5__2 = <>s__1.Current; <component>5__3 = ((Component)<item>5__2.Enemy).GetComponent<EnemyGnoelma>(); if (Object.op_Implicit((Object)(object)<component>5__3)) { if (<>4__this.debugOneOnly && <>4__this.gnoelmas.Count > 0) { Object.Destroy((Object)(object)((Component)((EnemyGnome)<component>5__3).enemy.EnemyParent).gameObject); continue; } <>4__this.gnoelmas.Add(<component>5__3); <>4__this.destinations.Add(Vector3.zero); ((EnemyGnome)<component>5__3).directorIndex = <>4__this.gnoelmas.IndexOf(<component>5__3); } <component>5__3 = null; <item>5__2 = null; } } finally { ((IDisposable)<>s__1).Dispose(); } <>s__1 = default(List<EnemyParent>.Enumerator); <>4__this.setup = true; return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } public static EnemyGnoelmaDirector instance; public bool debugDraw; public bool debugOneOnly; public bool debugShortIdle; public bool debugLongIdle; [Space] public List<EnemyGnoelma> gnoelmas = new List<EnemyGnoelma>(); internal List<Vector3> destinations = new List<Vector3>(); [Space] public State currentState = State.ChangeDestination; private bool stateImpulse = true; private float stateTimer; internal bool setup; private PlayerAvatar playerTarget; private PhysGrabObject valuableTarget; internal Vector3 attackPosition; internal Vector3 attackVisionPosition; private float valuableAttackPositionTimer; private void Awake() { if (!Object.op_Implicit((Object)(object)instance)) { instance = this; if (!Application.isEditor || (SemiFunc.IsMultiplayer() && !GameManager.instance.localTest)) { debugDraw = false; debugOneOnly = false; debugShortIdle = false; debugLongIdle = false; } ((Component)this).transform.parent = LevelGenerator.Instance.EnemyParent.transform; ((MonoBehaviour)this).StartCoroutine(Setup()); } else { Object.Destroy((Object)(object)this); } } [IteratorStateMachine(typeof(<Setup>d__18))] private IEnumerator Setup() { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <Setup>d__18(0) { <>4__this = this }; } private void Update() { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: 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_00e1: 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_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) if (!setup) { return; } if (debugDraw) { if (currentState == State.Idle) { Debug.DrawRay(((Component)this).transform.position, Vector3.up * 2f, Color.green); foreach (EnemyGnoelma gnoelma in gnoelmas) { Debug.DrawRay(destinations[gnoelmas.IndexOf(gnoelma)], Vector3.up * 2f, Color.yellow); } } else if (currentState == State.AttackPlayer) { Debug.DrawRay(attackPosition, Vector3.up * 2f, Color.red); } } if (SemiFunc.IsMasterClientOrSingleplayer()) { switch (currentState) { case State.Idle: StateIdle(); break; case State.Leave: StateLeave(); break; case State.ChangeDestination: StateChangeDestination(); break; case State.Investigate: StateInvestigate(); break; case State.AttackSet: StateAttackSet(); break; case State.AttackPlayer: StateAttackPlayer(); break; case State.AttackValuable: StateAttackValuable(); break; } } } private void StateIdle() { if (stateImpulse) { stateImpulse = false; stateTimer = Random.Range(20f, 30f); if (debugShortIdle) { stateTimer *= 0.5f; } if (debugLongIdle) { stateTimer *= 2f; } } if (!SemiFunc.EnemySpawnIdlePause()) { stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { UpdateState(State.ChangeDestination); } LeaveCheck(); } } private void StateLeave() { //IL_0014: 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) if (stateImpulse) { bool flag = false; LevelPoint val = SemiFunc.LevelPointGetFurthestFromPlayer(((Component)this).transform.position, 5f); if (Object.op_Implicit((Object)(object)val)) { flag = SetPosition(((Component)val).transform.position); } if (flag) { stateImpulse = false; UpdateState(State.Idle); } } } private void StateChangeDestination() { //IL_0017: 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_006a: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { 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); } if (Object.op_Implicit((Object)(object)val)) { flag = SetPosition(((Component)val).transform.position); } if (flag) { stateImpulse = false; UpdateState(State.Idle); } } } private void StateInvestigate() { if (stateImpulse) { stateImpulse = false; UpdateState(State.Idle); } } private void StateAttackSet() { //IL_0033: Unknown result type (might be due to invalid IL or missing references) if (!stateImpulse) { return; } stateImpulse = false; valuableTarget = null; float num = 0f; Collider[] array = Physics.OverlapSphere(((Component)playerTarget).transform.position, 3f, LayerMask.GetMask(new string[1] { "PhysGrabObject" })); for (int i = 0; i < array.Length; i++) { ValuableObject componentInParent = ((Component)array[i]).GetComponentInParent<ValuableObject>(); if (Object.op_Implicit((Object)(object)componentInParent) && componentInParent.dollarValueCurrent > num) { num = componentInParent.dollarValueCurrent; valuableTarget = componentInParent.physGrabObject; } } if (Object.op_Implicit((Object)(object)valuableTarget)) { UpdateState(State.AttackValuable); } else { UpdateState(State.AttackPlayer); } } private void StateAttackPlayer() { //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_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_00c6: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateImpulse = false; stateTimer = 3f; } PauseGnoelmaSpawnedTimers(); if (Object.op_Implicit((Object)(object)playerTarget) && !playerTarget.isDisabled) { if (stateTimer > 0.5f) { attackPosition = ((Component)playerTarget).transform.position; attackVisionPosition = playerTarget.PlayerVisionTarget.VisionTransform.position; } } else { stateTimer = 0f; } stateTimer -= Time.deltaTime; if (stateTimer <= 0f) { SetPosition(attackPosition); UpdateState(State.Idle); } } private void StateAttackValuable() { //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_007d: 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_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) if (stateImpulse) { stateImpulse = false; stateTimer = 10f; valuableAttackPositionTimer = 0f; } PauseGnoelmaSpawnedTimers(); if (Object.op_Implicit((Object)(object)valuableTarget)) { if (valuableAttackPositionTimer <= 0f) { valuableAttackPositionTimer = 0.2f; attackPosition = valuableTarget.centerPoint; RaycastHit val = default(RaycastHit); if (Physics.Raycast(valuableTarget.centerPoint, Vector3.down, ref val, 2f, LayerMask.GetMask(new string[1] { "Default" }))) { attackPosition = ((RaycastHit)(ref val)).point; } } else { valuableAttackPositionTimer -= Time.deltaTime; } attackVisionPosition = valuableTarget.centerPoint; } else { stateTimer = 0f; } bool flag = false; foreach (EnemyGnoelma gnoelma in gnoelmas) { if (Vector3.Distance(((Component)((EnemyGnome)gnoelma).enemy.Rigidbody).transform.position, attackPosition) <= 1f) { flag = true; break; } } if (!flag) { stateTimer -= Time.deltaTime; } bool flag2 = true; foreach (EnemyGnoelma gnoelma2 in gnoelmas) { if (((Behaviour)gnoelma2).isActiveAndEnabled) { flag2 = false; break; } } if (stateTimer <= 0f || flag2) { SetPosition(attackPosition); UpdateState(State.Idle); } } private void UpdateState(State _state) { currentState = _state; stateImpulse = true; stateTimer = 0f; } private bool SetPosition(Vector3 _initialPosition) { //IL_0001: 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_003e: 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_0074: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: 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) //IL_00c8: 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_00d5: 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_00db: 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_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_0249: 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_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0140: 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_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: 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_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0171: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017a: 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) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) NavMeshHit val = default(NavMeshHit); if (NavMesh.SamplePosition(_initialPosition, ref val, 5f, -1) && Physics.Raycast(((NavMeshHit)(ref val)).position, Vector3.down, 5f, LayerMask.GetMask(new string[1] { "Default" })) && !SemiFunc.EnemyPhysObjectSphereCheck(((NavMeshHit)(ref val)).position, 1f)) { ((Component)this).transform.position = ((NavMeshHit)(ref val)).position; ((Component)this).transform.rotation = Quaternion.identity; float num = 360f / (float)gnoelmas.Count; NavMeshHit val3 = default(NavMeshHit); foreach (EnemyGnoelma gnoelma in gnoelmas) { float num2 = 0f; Vector3 value = ((Component)this).transform.position; Vector3 val2 = ((Component)this).transform.position; for (; num2 < 2f; num2 += 0.1f) { value = val2; val2 = ((NavMeshHit)(ref val)).position + ((Component)this).transform.forward * num2; if (!NavMesh.SamplePosition(val2, ref val3, 5f, -1) || !Physics.Raycast(val2, Vector3.down, 5f, LayerMask.GetMask(new string[1] { "Default" }))) { break; } Vector3 val4 = val2 + Vector3.up * 0.5f - (((NavMeshHit)(ref val)).position + Vector3.up * 0.5f); Vector3 normalized = ((Vector3)(ref val4)).normalized; if (Physics.Raycast(val2 + Vector3.up * 0.5f, normalized, ((Vector3)(ref normalized)).magnitude, LayerMask.GetMask(new string[2] { "Default", "PhysGrabObjectHinge" })) || (num2 > 0.5f && Random.Range(0, 100) < 15)) { break; } } destinations[gnoelmas.IndexOf(gnoelma)] = value; Transform transform = ((Component)this).transform; Quaternion rotation = ((Component)this).transform.rotation; transform.rotation = Quaternion.Euler(0f, ((Quaternion)(ref rotation)).eulerAngles.y + num, 0f); } return true; } return false; } public void Investigate(Vector3 _position) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) if (currentState != State.Investigate && currentState != State.AttackSet && currentState != State.AttackPlayer && currentState != State.AttackValuable) { SetPosition(_position); UpdateState(State.Investigate); } } public void SetTarget(PlayerAvatar _player) { if (currentState != State.AttackSet && currentState != State.AttackPlayer && currentState != State.AttackValuable) { playerTarget = _player; UpdateState(State.AttackSet); } else if (currentState == State.AttackPlayer && (Object)(object)playerTarget == (Object)(object)_player) { stateTimer = 2f; } } public void SeeTarget() { if (currentState == State.AttackPlayer) { stateTimer = 1f; } } public bool CanAttack(EnemyGnoelma _gnoelma) { //IL_004b: 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_00d3: Unknown result type (might be due to invalid IL or missing references) if (((EnemyGnome)_gnoelma).attackCooldown > 0f || ((EnemyGnome)_gnoelma).enemy.Jump.jumping) { return false; } if (currentState == State.AttackPlayer) { if (Vector3.Distance(((Component)((EnemyGnome)_gnoelma).enemy.Rigidbody).transform.position, attackPosition) <= 0.7f) { return true; } } else if (Object.op_Implicit((Object)(object)valuableTarget)) { ((EnemyGnome)_gnoelma).overlapCheckCooldown = 1f; if (((EnemyGnome)_gnoelma).overlapCheckTimer <= 0f) { ((EnemyGnome)_gnoelma).overlapCheckTimer = 0.5f; ((EnemyGnome)_gnoelma).overlapCheckPrevious = false; Collider[] array = Physics.OverlapSphere(((Component)((EnemyGnome)_gnoelma).enemy.Rigidbody).transform.position, 0.7f, LayerMask.GetMask(new string[1] { "PhysGrabObject" })); for (int i = 0; i < array.Length; i++) { ValuableObject componentInParent = ((Component)array[i]).GetComponentInParent<ValuableObject>(); if (Object.op_Implicit((Object)(object)componentInParent) && (Object)(object)componentInParent.physGrabObject == (Object)(object)valuableTarget) { ((EnemyGnome)_gnoelma).overlapCheckPrevious = true; } } } return ((EnemyGnome)_gnoelma).overlapCheckPrevious; } return false; } private void PauseGnoelmaSpawnedTimers() { foreach (EnemyGnoelma gnoelma in gnoelmas) { ((EnemyGnome)gnoelma).enemy.EnemyParent.SpawnedTimerPause(0.1f); } } private void LeaveCheck() { bool flag = false; foreach (EnemyGnoelma gnoelma in gnoelmas) { if (SemiFunc.EnemyForceLeave(((EnemyGnome)gnoelma).enemy)) { flag = true; } } if (flag) { UpdateState(State.Leave); } } public void OnSpawn() { foreach (EnemyGnoelma gnoelma in gnoelmas) { ((EnemyGnome)gnoelma).enemy.EnemyParent.DespawnedTimerSet(((EnemyGnome)gnoelma).enemy.EnemyParent.DespawnedTimer - 30f, false); } } } namespace Gnoelma { [HarmonyPatch(typeof(PlayerController))] internal static class ExamplePlayerControllerPatch { [HarmonyPrefix] [HarmonyPatch("Start")] private static void Start_Prefix(PlayerController __instance) { Gnoelma.Logger.LogDebug((object)$"{__instance} Start Prefix"); } [HarmonyPostfix] [HarmonyPatch("Start")] private static void Start_Postfix(PlayerController __instance) { Gnoelma.Logger.LogDebug((object)$"{__instance} Start Postfix"); } } [BepInPlugin("Thalas.Gnoelma", "Gnoelma", "1.1.6")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class Gnoelma : BaseUnityPlugin { internal static Gnoelma Instance { get; private set; } internal static ManualLogSource Logger => Instance._logger; private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger; internal Harmony? Harmony { get; set; } private void Awake() { LoadAssets(); } private static void LoadAssets() { Debug.Log((object)"Loading Gnoelma bundle..."); AssetBundle val = LoadAssetBundle("gnoelma"); if (Object.op_Implicit((Object)(object)val)) { Debug.Log((object)"Gnoelma bundle loaded successfully. Loading Enemy Setup..."); } EnemySetup val2 = val.LoadAsset<EnemySetup>("assets/thalas.gnoelma/enemy - gnoelma.asset"); List<GameObject> list = val2.spawnObjects.Where((GameObject x) => Object.op_Implicit((Object)(object)x.GetComponent<EnemyParent>())).ToList(); Enemies.RegisterEnemy(val2); Debug.Log((object)"Loaded Gnoelma enemy!"); } public static AssetBundle LoadAssetBundle(string name) { string text = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), name); return AssetBundle.LoadFromFile(text); } 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() { } } }