using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Photon.Pun;
using REPODebbysCase.Config;
using REPODebbysCase.NetcodePatcher;
using REPOLib.Modules;
using TMPro;
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: AssemblyTitle("REPODebbysCase")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Scan Computers")]
[assembly: AssemblyProduct("REPODebbysCase")]
[assembly: AssemblyCopyright("Copyright © Scan Computers 2025")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("a4fd09a5-2078-4f37-ae81-44c02af535da")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: NetcodePatchedAssembly]
namespace REPODebbysCase
{
[BepInPlugin("deB.DebbysCase", "Debbys Case", "0.0.2")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class DebbysCase : BaseUnityPlugin
{
internal const string modGUID = "deB.DebbysCase";
internal const string modName = "Debbys Case";
internal const string modVersion = "0.0.2";
private readonly Harmony harmony = new Harmony("deB.DebbysCase");
internal ManualLogSource log = null;
public static DebbysCase instance;
public List<EnemySetup> enemiesList = new List<EnemySetup>();
public List<Item> itemsList = new List<Item>();
internal DebbysCaseConfig ModConfig { get; private set; } = null;
public void Awake()
{
if ((Object)(object)instance == (Object)null)
{
instance = this;
}
log = ((BaseUnityPlugin)this).Logger;
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
for (int i = 0; i < types.Length; i++)
{
MethodInfo[] methods = types[i].GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
for (int j = 0; j < methods.Length; j++)
{
object[] customAttributes;
try
{
customAttributes = methods[j].GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
}
catch
{
continue;
}
if (customAttributes.Length != 0)
{
methods[j].Invoke(null, null);
}
}
}
PropogateLists();
ModConfig = new DebbysCaseConfig(((BaseUnityPlugin)this).Config, enemiesList, itemsList);
HandleContent();
log.LogInfo((object)"Debbys Case Successfully Loaded");
}
public void PropogateLists()
{
AssetBundle val = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "debbyscase"));
string[] allAssetNames = val.GetAllAssetNames();
for (int i = 0; i < allAssetNames.Length; i++)
{
string text = allAssetNames[i].Substring(0, allAssetNames[i].LastIndexOf("/"));
string text2 = text;
string text3 = text2;
if (!(text3 == "assets/debbys case/resources/items"))
{
if (text3 == "assets/debbys case/resources/enemies")
{
enemiesList.Add(val.LoadAsset<EnemySetup>(allAssetNames[i]));
}
else
{
log.LogWarning((object)("\"" + text + "\" is not a known asset path, skipping."));
}
}
else
{
itemsList.Add(val.LoadAsset<Item>(allAssetNames[i]));
}
}
}
public void HandleContent()
{
HandleItems();
HandleEnemies();
}
public void HandleItems()
{
for (int i = 0; i < itemsList.Count; i++)
{
if (ModConfig.isItemEnabled[i].Value)
{
Items.RegisterItem(itemsList[i]);
log.LogDebug((object)(((Object)itemsList[i]).name + " item was loaded!"));
}
else
{
log.LogInfo((object)(((Object)itemsList[i]).name + " item was disabled!"));
}
}
}
public void HandleEnemies()
{
for (int i = 0; i < enemiesList.Count; i++)
{
if (ModConfig.isEnemyEnabled[i].Value)
{
Enemies.RegisterEnemy(enemiesList[i]);
log.LogDebug((object)(((Object)enemiesList[i]).name + " enemy was loaded!"));
}
else
{
log.LogInfo((object)(((Object)enemiesList[i]).name + " enemy was disabled!"));
}
}
}
public void DoPatches()
{
log.LogDebug((object)"Patching Game");
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "REPODebbysCase";
public const string PLUGIN_NAME = "REPOWildCardMod";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace REPODebbysCase.Items
{
public class PlayerTracker : MonoBehaviour
{
private readonly ManualLogSource log = DebbysCase.instance.log;
public static List<PlayerTracker> currentTrackers;
public PhotonView photonView;
public int tracker;
public PhysGrabObject physGrabObject;
public ItemEquippable itemEquippable;
public ItemToggle itemToggle;
public TextMeshPro trackingNumber;
public Transform trackerTransform;
public bool movingNext = false;
public float nextTimer = 0f;
public int currentPlayer = 0;
public PlayerTracker trackingPlayer;
public Vector2 localPos = Vector2.zero;
public Vector3 trackerVelocity = Vector3.zero;
public void Update()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: 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_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: 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_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: 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_009a: 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_00a1: 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_00ad: 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)
if (!LevelGenerator.Instance.Generated)
{
return;
}
if (movingNext)
{
localPos = Vector2.Lerp(Vector2.zero, localPos, nextTimer);
nextTimer -= Time.deltaTime * 2f;
}
else if ((Object)(object)trackingPlayer != (Object)null)
{
Transform obj = trackerTransform;
Vector3 val = trackerTransform.position - ((Component)trackingPlayer).transform.position;
Vector3 val2 = obj.InverseTransformDirection(((Vector3)(ref val)).normalized);
localPos = new Vector2(val2.x, val2.y);
}
trackerTransform.localPosition = Vector3.SmoothDamp(trackerTransform.localPosition, new Vector3(localPos.x, 0f, localPos.y), ref trackerVelocity, 0.5f);
if (SemiFunc.IsMasterClientOrSingleplayer() && itemToggle.toggleState)
{
if (!movingNext)
{
SetGoingNext(goingNext: true);
SelectTracker();
}
else if (nextTimer <= 0f)
{
itemToggle.ToggleItem(false, -1);
SetGoingNext(goingNext: false);
SelectTracker(NextValue(currentPlayer));
}
}
}
public void SetGoingNext(bool goingNext)
{
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("SetGoingNextRPC", (RpcTarget)0, new object[1] { goingNext });
}
else
{
SetGoingNextRPC(goingNext);
}
}
[PunRPC]
public void SetGoingNextRPC(bool goingNext)
{
if (goingNext)
{
nextTimer = 1f;
}
movingNext = goingNext;
}
public void SelectTracker(int number = -1)
{
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("SelectTrackerRPC", (RpcTarget)0, new object[1] { number });
}
else
{
SelectTrackerRPC(number);
}
}
[PunRPC]
public void SelectTrackerRPC(int number)
{
string text = string.Empty;
currentPlayer = number;
trackingPlayer = null;
if (number != -1)
{
text = number.ToString();
trackingPlayer = currentTrackers.Find((PlayerTracker x) => x.tracker == currentPlayer);
}
((TMP_Text)trackingNumber).text = text;
}
public int NextValue(int number)
{
int num = number + 1;
if (num > currentTrackers.Count)
{
num = 1;
}
return num;
}
public void OnDestroy()
{
currentTrackers.Remove(this);
}
}
public class MotherTracker : MonoBehaviour
{
private readonly ManualLogSource log = DebbysCase.instance.log;
public PhotonView photonView;
public PhysGrabObject physGrabObject;
public ItemAttributes itemAttributes;
public ItemEquippable itemEquippable;
public ItemToggle itemToggle;
public GameObject[] toDisable;
public GameObject[] toEnable;
public Sound useSound;
public Sound floatLoop;
public float balanceForce = 4f;
public float floatPower = 5f;
public float floatHeight = 0.5f;
public float glidePower = 0.5f;
public bool released = false;
public void FixedUpdate()
{
//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)
//IL_0044: 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_0055: 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_0061: 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_0072: 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_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_0169: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
//IL_017f: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: 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_012d: 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_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
if (SemiFunc.IsMasterClientOrSingleplayer() && LevelGenerator.Instance.Generated && !released && !physGrabObject.grabbed)
{
Quaternion val = Quaternion.FromToRotation(((Component)this).transform.up, Vector3.up);
physGrabObject.rb.AddTorque(new Vector3(val.x, val.y, val.z) * balanceForce);
RaycastHit val2 = default(RaycastHit);
if (Physics.Raycast(physGrabObject.rb.worldCenterOfMass, -Vector3.up, ref val2, floatHeight, LayerMask.GetMask(new string[6] { "Default", "PhysGrabObject", "PhysGrabObjectCart", "PhysGrabObjectHinge", "Enemy", "Player" }), (QueryTriggerInteraction)1) && !physGrabObject.colliders.Contains(((Component)((RaycastHit)(ref val2)).collider).transform))
{
physGrabObject.rb.AddForce(((Component)this).transform.up * (floatPower / ((RaycastHit)(ref val2)).distance) * (1.1f - Quaternion.Angle(Quaternion.identity, val) / 360f));
}
else
{
physGrabObject.rb.AddForce(((Component)this).transform.up * floatPower * glidePower * (1.1f - Quaternion.Angle(Quaternion.identity, val) / 360f));
}
}
}
public void Update()
{
if (LevelGenerator.Instance.Generated && !released)
{
floatLoop.PlayLoop(!physGrabObject.grabbed, 1f, 1f, 1f);
if (SemiFunc.IsMasterClientOrSingleplayer() && itemToggle.toggleState)
{
physGrabObject.impactDetector.indestructibleBreakEffects = true;
Release();
}
}
}
public void Release()
{
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("ReleaseRPC", (RpcTarget)0, Array.Empty<object>());
}
else
{
ReleaseRPC();
}
}
[PunRPC]
public void ReleaseRPC()
{
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
itemToggle.ToggleDisable(true);
itemAttributes.DisableUI(true);
Object.Destroy((Object)(object)itemEquippable);
for (int i = 0; i < toDisable.Length; i++)
{
toDisable[i].SetActive(false);
}
for (int j = 0; j < toEnable.Length; j++)
{
PlayerTracker component = toEnable[j].GetComponent<PlayerTracker>();
PlayerTracker.currentTrackers.Add(component);
toEnable[j].SetActive(true);
int num = (component.tracker = j + 1) + 1;
if (num > toEnable.Length)
{
num = 1;
}
component.currentPlayer = num;
useSound.Play(toEnable[j].transform.position, 1f, 1f, 1f, 1f);
}
released = true;
}
}
}
namespace REPODebbysCase.Enemies
{
public class EnemyMinesweeper : MonoBehaviour
{
public enum State
{
Spawn,
Idle,
Roam,
Investigate,
Stalk,
Attack,
Leave,
Stun,
Despawn
}
private readonly ManualLogSource log = DebbysCase.instance.log;
public State currentState;
public bool stateImpulse;
public float stateTimer;
public Enemy enemyBase;
public Rigidbody rigidbody;
public PhotonView photonView;
public EnemyNavMeshAgent navAgent;
public PlayerAvatar targetPlayer;
public PhysGrabObject targetObject;
public HurtCollider hurtCollider;
public Vector3 newPosition;
public List<GameObject> objectContainer;
public Dictionary<PlayerAvatar, bool> playersTumbled;
public EnemyMinesweeperAnim animator;
public Transform visuals;
public Vector3 deathLocation;
public float visionTimer;
public float playerVisionTimer;
public float objectVisionTimer;
public bool stalkObject;
public float stalkNewPointTimer;
public bool respawnItems;
public float respawnItemsTimer = 0f;
public int containedAmount;
public Vector3 originalScale;
public void Awake()
{
//IL_0019: 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)
log.LogDebug((object)"An Enemy Minesweeper has spawned!");
originalScale = visuals.localScale;
}
public void UpdateState(State newState)
{
if (currentState != newState)
{
currentState = newState;
stateTimer = 0f;
stateImpulse = true;
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("UpdateStateRPC", (RpcTarget)0, new object[1] { newState });
}
else
{
UpdateStateRPC(newState);
}
}
}
[PunRPC]
public void UpdateStateRPC(State newState)
{
currentState = newState;
}
public void Update()
{
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Invalid comparison between Unknown and I4
if (LevelGenerator.Instance.Generated && !SemiFunc.IsNotMasterClient())
{
RespawnSuckedItems();
SelectPlayerGrabbed();
if (enemyBase.IsStunned())
{
UpdateState(State.Stun);
}
else if ((int)enemyBase.CurrentState == 11)
{
UpdateState(State.Despawn);
}
switch (currentState)
{
case State.Spawn:
StateSpawn();
break;
case State.Idle:
StateIdle();
break;
case State.Roam:
StateRoam();
break;
case State.Investigate:
StateInvestigate();
break;
case State.Stalk:
StateStalk();
break;
case State.Attack:
StateAttack();
break;
case State.Leave:
StateLeave();
break;
case State.Stun:
StateStun();
break;
case State.Despawn:
StateDespawn();
break;
}
}
}
public void FixedUpdate()
{
//IL_0035: 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_0071: 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_02db: Unknown result type (might be due to invalid IL or missing references)
//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
//IL_02f7: 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_030f: Unknown result type (might be due to invalid IL or missing references)
//IL_0324: Unknown result type (might be due to invalid IL or missing references)
//IL_0355: Unknown result type (might be due to invalid IL or missing references)
//IL_035c: Unknown result type (might be due to invalid IL or missing references)
//IL_0366: Unknown result type (might be due to invalid IL or missing references)
//IL_0391: Unknown result type (might be due to invalid IL or missing references)
//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
//IL_03af: Unknown result type (might be due to invalid IL or missing references)
//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
if (!SemiFunc.IsMasterClientOrSingleplayer() || currentState != State.Attack || playersTumbled == null)
{
return;
}
List<PlayerAvatar> list = SemiFunc.PlayerGetAllPlayerAvatarWithinRange(5f, ((Component)hurtCollider).transform.position, true, LayerMask.op_Implicit(LayerMask.GetMask(new string[2] { "Default", "StaticGrabObject" })));
List<PhysGrabObject> list2 = SemiFunc.PhysGrabObjectGetAllWithinRange(5f, ((Component)hurtCollider).transform.position, true, LayerMask.op_Implicit(0), enemyBase.Rigidbody.physGrabObject);
for (int i = 0; i < list.Count; i++)
{
if (list[i].isTumbling)
{
list[i].tumble.OverrideEnemyHurt(0.5f);
if (!list2.Contains(list[i].tumble.physGrabObject))
{
list2.Add(list[i].tumble.physGrabObject);
}
}
else if (!list[i].isDisabled && playersTumbled.ContainsKey(list[i]) && !playersTumbled[list[i]])
{
playersTumbled[list[i]] = true;
list[i].tumble.TumbleRequest(true, false);
list[i].tumble.TumbleOverrideTime(2f);
list[i].tumble.OverrideEnemyHurt(0.5f);
}
}
EnemyRigidbody val = default(EnemyRigidbody);
ItemToggle val2 = default(ItemToggle);
ItemGrenade val3 = default(ItemGrenade);
for (int j = 0; j < list2.Count; j++)
{
if (list2[j].isCart || list2[j].isKinematic || (((Component)list2[j]).TryGetComponent<EnemyRigidbody>(ref val) && (Object)(object)val == (Object)(object)enemyBase.Rigidbody))
{
continue;
}
if (((Component)list2[j]).TryGetComponent<ItemToggle>(ref val2))
{
if (((Component)list2[j]).TryGetComponent<ItemGrenade>(ref val3))
{
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("GrenadeResetRPC", (RpcTarget)0, new object[1] { val3.photonView.ViewID });
}
else
{
val3.GrenadeReset();
}
}
else
{
val2.ToggleItem(false, -1);
}
}
list2[j].OverrideBreakEffects(0.25f);
list2[j].OverrideZeroGravity(0.25f);
list2[j].OverrideIndestructible(0.25f);
Vector3 val4 = ((Component)hurtCollider).transform.position - ((Component)list2[j]).transform.position;
Vector3 normalized = ((Vector3)(ref val4)).normalized;
if (((Component)list2[j]).transform.position.y < ((Component)hurtCollider).transform.position.y)
{
normalized.y += 0.1f;
}
list2[j].rb.AddForce(normalized * 2500f * Time.fixedDeltaTime, (ForceMode)0);
list2[j].rb.AddForce(SemiFunc.PhysFollowDirection(((Component)list2[j].rb).transform, normalized, list2[j].rb, 10f) * 2f / list2[j].rb.mass, (ForceMode)0);
}
}
[PunRPC]
public void GrenadeResetRPC(int id)
{
((Component)PhotonView.Find(id)).GetComponent<ItemGrenade>().GrenadeReset();
}
public void SelectPlayerGrabbed()
{
if ((Object)(object)targetPlayer != (Object)null && (Object)(object)targetObject != (Object)(object)targetPlayer.physGrabber.grabbedPhysGrabObject && (Object)(object)targetPlayer.physGrabber.grabbedPhysGrabObject != (Object)null && targetPlayer.physGrabber.grabbedPhysGrabObject.playerGrabbing.Contains(targetPlayer.physGrabber))
{
UpdateTarget(targetPlayer.photonView.ViewID, targetPlayer.physGrabber.grabbedPhysGrabObject.photonView.ViewID, targetPlayer, targetPlayer.physGrabber.grabbedPhysGrabObject);
}
}
public void AttackOrIdle()
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
if (SemiFunc.EnemyGetNearestPhysObject(enemyBase) != Vector3.zero)
{
UpdateState(State.Attack);
}
else
{
UpdateState(State.Idle);
}
}
public void StateSpawn()
{
//IL_002b: 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 (stateImpulse)
{
stateImpulse = false;
log.LogDebug((object)"Minesweeper State: \"Spawn\"");
visuals.localScale = originalScale;
UpdateTarget(-1, -1);
stateTimer = 2f;
navAgent.Warp(((Component)rigidbody).transform.position);
navAgent.ResetPath();
SetImpulses(340);
}
if (stateTimer > 0f)
{
stateTimer -= Time.deltaTime;
}
else
{
UpdateState(State.Idle);
}
}
public void StateIdle()
{
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
if (stateImpulse)
{
stateImpulse = false;
log.LogDebug((object)"Minesweeper State: \"Idle\"");
UpdateTarget(-1, -1);
stateTimer = Random.Range(5f, 10f);
navAgent.Warp(((Component)rigidbody).transform.position);
navAgent.ResetPath();
SetImpulses(340);
}
if (!SemiFunc.EnemySpawnIdlePause())
{
stateTimer -= Time.deltaTime;
if (SemiFunc.EnemyForceLeave(enemyBase))
{
UpdateState(State.Leave);
}
else if (stateTimer <= 0f)
{
UpdateState(State.Roam);
}
}
}
public void StateRoam()
{
//IL_0052: 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_009a: 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_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_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: 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)
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
if (stateImpulse)
{
stateImpulse = false;
log.LogDebug((object)"Minesweeper State: \"Roam\"");
UpdateTarget(-1, -1);
stateTimer = Random.Range(7.5f, 15f);
LevelPoint val = SemiFunc.LevelPointGet(((Component)enemyBase).transform.position, 7.5f, 30f);
if ((Object)(object)val == (Object)null)
{
val = SemiFunc.LevelPointGet(((Component)enemyBase).transform.position, 0f, float.MaxValue);
}
NavMeshHit val2 = default(NavMeshHit);
if (!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" })))
{
stateImpulse = true;
return;
}
newPosition = ((NavMeshHit)(ref val2)).position;
enemyBase.Rigidbody.notMovingTimer = 0f;
SetImpulses(372);
}
if (SemiFunc.EnemyForceLeave(enemyBase))
{
UpdateState(State.Leave);
return;
}
navAgent.SetDestination(newPosition);
if (enemyBase.Rigidbody.notMovingTimer > 2f)
{
stateTimer -= Time.deltaTime;
}
if (stateTimer <= 0f || Vector3.Distance(((Component)enemyBase).transform.position, newPosition) < 1f)
{
AttackOrIdle();
}
}
public void StateInvestigate()
{
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: 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_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_0179: Unknown result type (might be due to invalid IL or missing references)
if (stateImpulse)
{
stateImpulse = false;
log.LogDebug((object)"Minesweeper State: \"Investigate\"");
UpdateTarget(-1, -1);
stateTimer = Random.Range(10f, 25f);
enemyBase.Rigidbody.notMovingTimer = 0f;
SetImpulses(373);
}
if (SemiFunc.EnemyForceLeave(enemyBase))
{
UpdateState(State.Leave);
}
navAgent.SetDestination(newPosition);
navAgent.OverrideAgent(navAgent.DefaultSpeed * 2f, navAgent.DefaultAcceleration, 0.2f);
enemyBase.Rigidbody.OverrideFollowPosition(1f, navAgent.DefaultSpeed * 2f, -1f);
enemyBase.Vision.StandOverride(0.25f);
if (enemyBase.Rigidbody.notMovingTimer > 2f)
{
stateTimer -= Time.deltaTime;
}
NavMeshHit val = default(NavMeshHit);
if (Vector3.Distance(((Component)enemyBase).transform.position, newPosition) < 1f)
{
UpdateState(State.Idle);
}
else if (navAgent.CanReach(newPosition, 1f) && !NavMesh.SamplePosition(newPosition, ref val, 0.5f, -1))
{
UpdateState(State.Roam);
}
else if (stateTimer <= 0f)
{
AttackOrIdle();
}
}
public void StateStalk()
{
//IL_00ce: 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_00e8: 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_0169: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Unknown result type (might be due to invalid IL or missing references)
//IL_04f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0504: Unknown result type (might be due to invalid IL or missing references)
//IL_050e: Unknown result type (might be due to invalid IL or missing references)
//IL_0513: Unknown result type (might be due to invalid IL or missing references)
//IL_0583: Unknown result type (might be due to invalid IL or missing references)
//IL_0593: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: 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_05b2: Unknown result type (might be due to invalid IL or missing references)
//IL_01d1: Unknown result type (might be due to invalid IL or missing references)
//IL_0417: Unknown result type (might be due to invalid IL or missing references)
//IL_0427: Unknown result type (might be due to invalid IL or missing references)
//IL_0431: Unknown result type (might be due to invalid IL or missing references)
//IL_0436: Unknown result type (might be due to invalid IL or missing references)
//IL_0378: Unknown result type (might be due to invalid IL or missing references)
//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
//IL_035f: Unknown result type (might be due to invalid IL or missing references)
//IL_0364: Unknown result type (might be due to invalid IL or missing references)
//IL_01ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0212: Unknown result type (might be due to invalid IL or missing references)
//IL_0283: Unknown result type (might be due to invalid IL or missing references)
//IL_02b7: Unknown result type (might be due to invalid IL or missing references)
//IL_02bc: Unknown result type (might be due to invalid IL or missing references)
//IL_026a: Unknown result type (might be due to invalid IL or missing references)
//IL_026f: Unknown result type (might be due to invalid IL or missing references)
//IL_0670: Unknown result type (might be due to invalid IL or missing references)
//IL_0680: Unknown result type (might be due to invalid IL or missing references)
//IL_0636: Unknown result type (might be due to invalid IL or missing references)
//IL_0646: Unknown result type (might be due to invalid IL or missing references)
if (stateImpulse)
{
stateImpulse = false;
log.LogDebug((object)"Minesweeper State: \"Stalk\"");
stateTimer = Random.Range(7.5f, 17.5f);
enemyBase.Rigidbody.notMovingTimer = 0f;
SetImpulses(502);
}
if (SemiFunc.EnemyForceLeave(enemyBase))
{
UpdateState(State.Leave);
return;
}
VisionCheck();
if ((Object)(object)targetPlayer != (Object)null && !stalkObject)
{
if (!enemyBase.OnScreen.GetOnScreen(targetPlayer))
{
newPosition = Vector3.Lerp(((Component)enemyBase).transform.position, ((Component)targetPlayer).transform.position, 0.8f);
navAgent.OverrideAgent(navAgent.DefaultSpeed / 2f, navAgent.DefaultAcceleration, 0.2f);
enemyBase.Rigidbody.OverrideFollowPosition(1f, navAgent.DefaultSpeed / 2f, -1f);
}
else if (stalkNewPointTimer <= 0f || Vector3.Distance(((Component)enemyBase).transform.position, newPosition) < 0.25f)
{
LevelPoint val = null;
if (Vector3.Distance(((Component)enemyBase).transform.position, ((Component)targetPlayer).transform.position) > 10f)
{
List<LevelPoint> list = SemiFunc.LevelPointGetWithinDistance(((Component)targetPlayer).transform.position, 5f, 10f);
float num = float.MaxValue;
for (int i = 0; i < list.Count; i++)
{
float num2 = Vector3.Distance(((Component)enemyBase).transform.position, ((Component)list[i]).transform.position);
if (num2 < num)
{
num = num2;
val = list[i];
}
}
if ((Object)(object)val != (Object)null)
{
newPosition = ((Component)val).transform.position;
}
else
{
List<LevelPoint> list2 = SemiFunc.LevelPointGetWithinDistance(((Component)targetPlayer).transform.position, 10f, 20f);
val = list2[Random.Range(0, list2.Count)];
newPosition = ((Component)val).transform.position;
}
navAgent.OverrideAgent(navAgent.DefaultSpeed, navAgent.DefaultAcceleration, 0.2f);
enemyBase.Rigidbody.OverrideFollowPosition(1f, navAgent.DefaultSpeed, -1f);
}
else if ((Object)(object)targetObject == (Object)null)
{
val = SemiFunc.LevelPointInTargetRoomGet(targetPlayer.RoomVolumeCheck, 5f, 10f, (LevelPoint)null);
if ((Object)(object)val != (Object)null)
{
newPosition = ((Component)val).transform.position;
}
else
{
List<LevelPoint> list3 = SemiFunc.LevelPointGetWithinDistance(((Component)targetPlayer).transform.position, 10f, 20f);
val = list3[Random.Range(0, list3.Count)];
newPosition = ((Component)val).transform.position;
}
navAgent.OverrideAgent(navAgent.DefaultSpeed, navAgent.DefaultAcceleration, 0.2f);
enemyBase.Rigidbody.OverrideFollowPosition(1f, navAgent.DefaultSpeed, -1f);
}
else
{
newPosition = Vector3.Lerp(((Component)enemyBase).transform.position, ((Component)targetObject).transform.position, 0.8f);
navAgent.OverrideAgent(navAgent.DefaultSpeed / 2f, navAgent.DefaultAcceleration, 0.2f);
enemyBase.Rigidbody.OverrideFollowPosition(1f, navAgent.DefaultSpeed / 2f, -1f);
}
stalkNewPointTimer = Random.Range(1f, 4f);
}
else
{
stalkNewPointTimer -= Time.deltaTime;
}
}
else
{
if (!((Object)(object)targetObject != (Object)null) || !stalkObject)
{
UpdateState(State.Investigate);
return;
}
newPosition = Vector3.Lerp(((Component)enemyBase).transform.position, ((Component)targetObject).transform.position, 0.8f);
navAgent.OverrideAgent(navAgent.DefaultSpeed / 2f, navAgent.DefaultAcceleration, 0.2f);
enemyBase.Rigidbody.OverrideFollowPosition(1f, navAgent.DefaultSpeed / 2f, -1f);
}
if (Vector3.Distance(newPosition, ((Component)enemyBase).transform.position) > 0.5f)
{
navAgent.SetDestination(newPosition);
}
enemyBase.Vision.StandOverride(0.25f);
stateTimer -= Time.deltaTime;
if (stateTimer <= 0f || enemyBase.Rigidbody.touchingCartTimer > 0f || (stateTimer <= 5f && (Object)(object)targetPlayer != (Object)null && Vector3.Distance(((Component)enemyBase).transform.position, ((Component)targetPlayer).transform.position) < 2.5f) || ((Object)(object)targetObject != (Object)null && Vector3.Distance(((Component)enemyBase).transform.position, ((Component)targetObject).transform.position) < 2.5f))
{
UpdateState(State.Attack);
}
}
public void StateAttack()
{
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
if (stateImpulse)
{
stateImpulse = false;
log.LogDebug((object)"Minesweeper State: \"Attack\"");
UpdateTarget(-1, -1);
navAgent.ResetPath();
navAgent.Warp(((Component)enemyBase.Rigidbody).transform.position);
playersTumbled = new Dictionary<PlayerAvatar, bool>();
stateTimer = 10f;
List<PlayerAvatar> list = SemiFunc.PlayerGetAll();
for (int i = 0; i < list.Count; i++)
{
playersTumbled.Add(list[i], value: false);
}
SetImpulses(350);
}
stateTimer -= Time.deltaTime;
enemyBase.Rigidbody.physGrabObject.OverrideMass(20f, 0.1f);
enemyBase.Rigidbody.physGrabObject.OverrideDrag(5f, 0.1f);
enemyBase.Rigidbody.physGrabObject.OverrideAngularDrag(10f, 0.1f);
if (stateTimer <= 0f)
{
UpdateState(State.Leave);
}
}
public void StateLeave()
{
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: 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_0063: 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_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: 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_0092: 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)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
if (stateImpulse)
{
stateImpulse = false;
log.LogDebug((object)"Minesweeper State: \"Leave\"");
UpdateTarget(-1, -1);
stateTimer = Random.Range(5f, 15f);
LevelPoint val = SemiFunc.LevelPointGetFurthestFromPlayer(((Component)this).transform.position, 5f);
NavMeshHit val2 = default(NavMeshHit);
if (!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" })))
{
log.LogDebug((object)"Minesweeper: Trying to Leave Again");
stateImpulse = true;
return;
}
newPosition = ((NavMeshHit)(ref val2)).position;
SetImpulses(373);
}
enemyBase.Vision.DisableVision(0.25f);
navAgent.SetDestination(newPosition);
navAgent.OverrideAgent(navAgent.DefaultSpeed * 2f, navAgent.DefaultAcceleration, 0.2f);
enemyBase.Rigidbody.OverrideFollowPosition(1f, navAgent.DefaultSpeed * 2f, -1f);
stateTimer -= Time.deltaTime;
if (Vector3.Distance(((Component)enemyBase).transform.position, newPosition) <= 1f || stateTimer <= 0f)
{
UpdateState(State.Idle);
}
}
public void StateStun()
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
if (stateImpulse)
{
stateImpulse = false;
log.LogDebug((object)"Minesweeper State: \"Stun\"");
navAgent.ResetPath();
navAgent.Warp(((Component)rigidbody).transform.position);
SetImpulses(340);
}
if (!enemyBase.IsStunned())
{
UpdateState(State.Idle);
}
}
public void StateDespawn()
{
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
if (stateImpulse)
{
navAgent.ResetPath();
navAgent.Warp(((Component)enemyBase.Rigidbody).transform.position);
UpdateTarget(-1, -1);
SetImpulses(340);
stateImpulse = false;
}
}
public void OnSpawn()
{
if (SemiFunc.IsMasterClientOrSingleplayer() && SemiFunc.EnemySpawn(enemyBase))
{
SetImpulses(470);
UpdateState(State.Spawn);
}
}
public void OnInvestigate()
{
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
if (SemiFunc.IsMasterClientOrSingleplayer() && (currentState == State.Idle || currentState == State.Roam || currentState == State.Investigate))
{
log.LogDebug((object)"Minesweeper: On Investigate");
newPosition = enemyBase.StateInvestigate.onInvestigateTriggeredPosition;
UpdateState(State.Investigate);
}
}
public void OnVision()
{
if (!SemiFunc.IsMasterClientOrSingleplayer() || (currentState != State.Idle && currentState != State.Roam && currentState != State.Investigate))
{
return;
}
log.LogDebug((object)"Minesweeper: Vision Triggered");
int id = -1;
int idObj = -1;
if (SemiFunc.IsMultiplayer())
{
if ((Object)(object)enemyBase.Vision.onVisionTriggeredPlayer.physGrabber.grabbedPhysGrabObject != (Object)null && enemyBase.Vision.onVisionTriggeredPlayer.physGrabber.grabbedPhysGrabObject.playerGrabbing.Contains(enemyBase.Vision.onVisionTriggeredPlayer.physGrabber))
{
idObj = enemyBase.Vision.onVisionTriggeredPlayer.physGrabber.grabbedPhysGrabObject.photonView.ViewID;
}
id = enemyBase.Vision.onVisionTriggeredPlayer.photonView.ViewID;
}
if ((Object)(object)enemyBase.Vision.onVisionTriggeredPlayer.physGrabber.grabbedPhysGrabObject != (Object)null && enemyBase.Vision.onVisionTriggeredPlayer.physGrabber.grabbedPhysGrabObject.playerGrabbing.Contains(enemyBase.Vision.onVisionTriggeredPlayer.physGrabber))
{
UpdateTarget(id, idObj, enemyBase.Vision.onVisionTriggeredPlayer, enemyBase.Vision.onVisionTriggeredPlayer.physGrabber.grabbedPhysGrabObject);
}
else
{
UpdateTarget(id, idObj, enemyBase.Vision.onVisionTriggeredPlayer);
}
UpdateState(State.Stalk);
}
public void OnGrabbed()
{
if (SemiFunc.IsMasterClientOrSingleplayer() && (currentState == State.Idle || currentState == State.Roam || currentState == State.Investigate || currentState == State.Leave || currentState == State.Stalk))
{
log.LogDebug((object)"Minesweeper: Grabbed");
UpdateState(State.Attack);
}
}
public void OnTouchPlayer()
{
if (!SemiFunc.IsMasterClientOrSingleplayer() || currentState == State.Attack)
{
return;
}
log.LogDebug((object)"Minesweeper: Touch Player");
if (currentState == State.Stalk)
{
UpdateState(State.Attack);
return;
}
int id = -1;
int idObj = -1;
if (SemiFunc.IsMultiplayer())
{
id = enemyBase.Rigidbody.onTouchPlayerAvatar.photonView.ViewID;
if ((Object)(object)enemyBase.Rigidbody.onTouchPlayerAvatar.physGrabber.grabbedPhysGrabObject != (Object)null && enemyBase.Rigidbody.onTouchPlayerAvatar.physGrabber.grabbedPhysGrabObject.playerGrabbing.Contains(enemyBase.Rigidbody.onTouchPlayerAvatar.physGrabber))
{
idObj = enemyBase.Rigidbody.onTouchPlayerAvatar.physGrabber.grabbedPhysGrabObject.photonView.ViewID;
}
}
if ((Object)(object)enemyBase.Rigidbody.onTouchPlayerAvatar.physGrabber.grabbedPhysGrabObject != (Object)null && enemyBase.Rigidbody.onTouchPlayerAvatar.physGrabber.grabbedPhysGrabObject.playerGrabbing.Contains(enemyBase.Rigidbody.onTouchPlayerAvatar.physGrabber))
{
UpdateTarget(id, idObj, enemyBase.Rigidbody.onTouchPlayerAvatar, enemyBase.Rigidbody.onTouchPlayerAvatar.physGrabber.grabbedPhysGrabObject);
}
else
{
UpdateTarget(id, idObj, enemyBase.Rigidbody.onTouchPlayerAvatar);
}
UpdateState(State.Stalk);
}
public void OnTouchPlayerPhys()
{
if (!SemiFunc.IsMasterClientOrSingleplayer() || (currentState != State.Idle && currentState != State.Roam && currentState != State.Investigate && currentState != State.Leave && currentState != State.Stalk))
{
return;
}
log.LogDebug((object)"Minesweeper: Touch Player Phys");
if (currentState == State.Stalk && stateTimer <= 10f)
{
UpdateState(State.Attack);
return;
}
int id = -1;
int idObj = -1;
if (SemiFunc.IsMultiplayer())
{
id = enemyBase.Rigidbody.onTouchPlayerGrabbedObjectPhysObject.playerGrabbing[0].playerAvatar.photonView.ViewID;
idObj = enemyBase.Rigidbody.onTouchPlayerGrabbedObjectPhysObject.photonView.ViewID;
}
UpdateTarget(id, idObj, enemyBase.Rigidbody.onTouchPlayerGrabbedObjectPhysObject.playerGrabbing[0].playerAvatar, enemyBase.Rigidbody.onTouchPlayerGrabbedObjectPhysObject);
UpdateState(State.Stalk);
}
public void OnTouchPhys()
{
if (!SemiFunc.IsMasterClientOrSingleplayer() || (currentState != State.Roam && currentState != State.Leave && currentState != State.Stalk))
{
return;
}
log.LogDebug((object)"Minesweeper: Touch Phys");
if (currentState == State.Stalk && (Object)(object)enemyBase.Rigidbody.onTouchPhysObjectPhysObject == (Object)(object)targetObject && stateTimer <= 10f)
{
UpdateState(State.Attack);
return;
}
int idObj = -1;
if (SemiFunc.IsMultiplayer())
{
idObj = enemyBase.Rigidbody.onTouchPhysObjectPhysObject.photonView.ViewID;
}
UpdateTarget(-1, idObj, null, enemyBase.Rigidbody.onTouchPhysObjectPhysObject);
UpdateState(State.Stalk);
}
public void OnHurt()
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
animator.hurtSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
}
public void OnDeath()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//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_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: 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_00c1: Unknown result type (might be due to invalid IL or missing references)
log.LogDebug((object)"Minesweeper: Death");
visuals.localScale = Vector3.zero;
GameDirector.instance.CameraShake.ShakeDistance(3f, 3f, 10f, ((Component)this).transform.position, 0.5f);
GameDirector.instance.CameraImpact.ShakeDistance(3f, 3f, 10f, ((Component)this).transform.position, 0.05f);
if (SemiFunc.IsMasterClientOrSingleplayer())
{
enemyBase.EnemyParent.SpawnedTimerSet(0f);
deathLocation = ((Component)this).transform.position + Vector3.up / 5f;
containedAmount = objectContainer.Count;
ListExtension.Shuffle<GameObject>((IList<GameObject>)objectContainer);
respawnItems = true;
}
}
public void RespawnSuckedItems()
{
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: 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_0123: 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_0148: 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_00b4: 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)
if (!respawnItems)
{
return;
}
if (objectContainer.Count == 0)
{
enemyBase.EnemyParent.Despawn();
respawnItems = false;
return;
}
respawnItemsTimer -= Time.deltaTime;
if (respawnItemsTimer <= 0f)
{
respawnItemsTimer = 5f / (float)containedAmount;
GameObject val = objectContainer[0];
PhysGrabObject component = val.GetComponent<PhysGrabObject>();
Vector3 val2 = ItemTeleportPosition(val);
if (SemiFunc.IsMultiplayer())
{
val.GetComponent<PhotonTransformView>().Teleport(val2, val.transform.rotation);
photonView.RPC("SetActiveSuckedItemRPC", (RpcTarget)0, new object[3]
{
true,
val.GetComponent<PhotonView>().ViewID,
val2
});
}
else
{
val.transform.position = val2;
val.SetActive(true);
Object.Instantiate<GameObject>(AssetManager.instance.prefabTeleportEffect, val2, Quaternion.identity).transform.localScale = Vector3.one;
animator.respawnItemSound.Play(val2, 1f, 1f, 1f, 1f);
}
component.OverrideBreakEffects(0.5f);
component.OverrideIndestructible(0.5f);
objectContainer.RemoveAt(0);
}
}
public Vector3 ItemTeleportPosition(GameObject item)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: 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)
//IL_0054: 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_005f: 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_0076: 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_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: 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)
//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_013f: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: 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)
Vector3 val = Vector3.zero;
for (int i = 0; i < 10; i++)
{
Vector3 val2 = deathLocation + new Vector3(Random.Range(-1f, 1f), Random.Range(-1f, 1f), Random.Range(-1f, 1f));
RaycastHit[] array = Physics.RaycastAll(val2, deathLocation - val2, Mathf.Max(0f, Vector3.Distance(val2, deathLocation) - 0.2f), LayerMask.op_Implicit(SemiFunc.LayerMaskGetVisionObstruct()));
bool flag = false;
for (int j = 0; j < array.Length; j++)
{
if ((Object)(object)((RaycastHit)(ref array[j])).transform != (Object)(object)item.transform)
{
flag = true;
break;
}
}
if (!flag && Physics.OverlapBox(val2, item.GetComponent<PhysGrabObject>().boundingBox / 2f, item.transform.rotation, LayerMask.op_Implicit(SemiFunc.LayerMaskGetVisionObstruct())).Length == 0)
{
val = val2;
break;
}
}
if (val == Vector3.zero)
{
val = deathLocation;
}
return val;
}
public void OnPhysVortex()
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Invalid comparison between Unknown and I4
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: 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_0137: 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_00ad: 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_00f3: Unknown result type (might be due to invalid IL or missing references)
if (!SemiFunc.IsMasterClientOrSingleplayer())
{
return;
}
for (int i = 0; i < hurtCollider.hits.Count; i++)
{
if ((int)hurtCollider.hits[i].hitType == 1 && hurtCollider.hits[i].hitObject.activeSelf)
{
GameObject hitObject = hurtCollider.hits[i].hitObject;
objectContainer.Add(hitObject);
Vector3 position = hitObject.transform.position;
if (SemiFunc.IsMultiplayer())
{
hitObject.GetComponent<PhotonTransformView>().Teleport(new Vector3(0f, 1000f, 0f), hitObject.transform.rotation);
photonView.RPC("SetActiveSuckedItemRPC", (RpcTarget)0, new object[3]
{
false,
hitObject.GetComponent<PhotonView>().ViewID,
position
});
}
else
{
hitObject.transform.position = new Vector3(0f, 1000f, 0f);
hitObject.SetActive(false);
Object.Instantiate<GameObject>(AssetManager.instance.prefabTeleportEffect, position, Quaternion.identity).transform.localScale = Vector3.one;
}
stateTimer -= 0.5f;
}
}
}
public void VisionCheck()
{
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: 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_0085: 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_016e: Unknown result type (might be due to invalid IL or missing references)
//IL_0173: 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_0185: Unknown result type (might be due to invalid IL or missing references)
//IL_018a: Unknown result type (might be due to invalid IL or missing references)
visionTimer -= Time.deltaTime;
if (!(visionTimer <= 0f))
{
return;
}
visionTimer = 0.1f;
if ((Object)(object)targetPlayer != (Object)null)
{
Vector3 val = targetPlayer.PlayerVisionTarget.VisionTransform.position - animator.eyeTransform.position;
if (Physics.Raycast(animator.eyeTransform.position, val, ((Vector3)(ref val)).magnitude, LayerMask.GetMask(new string[1] { "Default" })))
{
playerVisionTimer -= 0.1f;
if (playerVisionTimer <= 0f)
{
if ((Object)(object)targetObject != (Object)null)
{
UpdateTarget(-1, targetObject.photonView.ViewID, null, targetObject);
}
else
{
UpdateTarget(-1, -1);
}
}
}
else if (playerVisionTimer != 1f)
{
playerVisionTimer = 1f;
}
}
if ((Object)(object)targetObject != (Object)null)
{
Vector3 val2 = ((Component)targetObject).transform.position - animator.eyeTransform.position;
if (Physics.Raycast(animator.eyeTransform.position, val2, ((Vector3)(ref val2)).magnitude, LayerMask.GetMask(new string[1] { "Default" })))
{
objectVisionTimer -= 0.1f;
if (objectVisionTimer <= 0f)
{
if ((Object)(object)targetPlayer != (Object)null)
{
UpdateTarget(targetPlayer.photonView.ViewID, -1, targetPlayer);
}
else
{
UpdateTarget(-1, -1);
}
}
}
else if (objectVisionTimer != 1f)
{
objectVisionTimer = 1f;
}
}
if ((Object)(object)targetObject != (Object)null && !targetObject.grabbed)
{
stalkObject = true;
}
else
{
stalkObject = false;
}
}
[PunRPC]
public void SetActiveSuckedItemRPC(bool active, int id, Vector3 pos)
{
//IL_001d: 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_002d: 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)
((Component)PhotonView.Find(id)).gameObject.SetActive(active);
Object.Instantiate<GameObject>(AssetManager.instance.prefabTeleportEffect, pos, Quaternion.identity).transform.localScale = Vector3.one;
if (active)
{
animator.respawnItemSound.Play(pos, 1f, 1f, 1f, 1f);
}
}
public void UpdateTarget(int id, int idObj, PlayerAvatar player = null, PhysGrabObject physGrabObject = null)
{
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("UpdateTargetRPC", (RpcTarget)0, new object[4] { id, idObj, null, null });
}
else
{
UpdateTargetRPC(-1, -1, player, physGrabObject);
}
}
[PunRPC]
public void UpdateTargetRPC(int id, int idObj, PlayerAvatar player = null, PhysGrabObject physGrabObject = null)
{
//IL_00f5: 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)
PlayerAvatar val;
PhysGrabObject val2;
if (SemiFunc.IsMultiplayer())
{
val = SemiFunc.PlayerAvatarGetFromPhotonID(id);
val2 = ((idObj == -1) ? null : ((Component)PhotonView.Find(idObj)).GetComponent<PhysGrabObject>());
}
else
{
val = player;
val2 = physGrabObject;
}
if ((Object)(object)val == (Object)null)
{
log.LogDebug((object)"Minesweeper: New target player is \"null\"!");
}
else
{
log.LogDebug((object)("Minesweeper: New target player is \"" + val.playerName + "\"!"));
}
if ((Object)(object)val2 == (Object)null)
{
log.LogDebug((object)"Minesweeper: New target object is \"null\"!");
}
else
{
log.LogDebug((object)("Minesweeper: New target object is \"" + ((Object)val2).name + "\"!"));
}
if ((Object)(object)targetPlayer != (Object)(object)val && (Object)(object)val != (Object)null)
{
animator.noticeSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
}
else if ((Object)(object)targetObject != (Object)(object)val2 && (Object)(object)val2 != (Object)null)
{
animator.interestSound.Play(((Component)this).transform.position, 1f, 1f, 1f, 1f);
}
targetPlayer = val;
targetObject = val2;
}
public void SetImpulses(int integer = 0)
{
if (SemiFunc.IsMultiplayer())
{
photonView.RPC("SetImpulsesRPC", (RpcTarget)0, new object[1] { integer });
}
else
{
SetImpulsesRPC(integer);
}
}
[PunRPC]
public void SetImpulsesRPC(int integer = 0)
{
string text = Convert.ToString(integer, 2);
while (text.Length < 9)
{
text = "0" + text;
}
bool[] array = text.Select((char x) => x == '1').ToArray();
if (array[0])
{
if (array[1])
{
animator.stalkEmergeImpulse = true;
}
else
{
animator.stalkDisappearImpulse = true;
}
}
if (array[2])
{
if (array[3])
{
animator.bounceStartImpulse = true;
}
else
{
animator.bounceStopImpulse = true;
}
}
if (array[4])
{
if (array[5])
{
animator.vortexEmergeImpulse = true;
}
else
{
animator.vortexLeaveImpulse = true;
}
}
if (array[6])
{
if (array[7])
{
animator.lidOpenImpulse = true;
}
else
{
animator.lidCloseImpulse = true;
}
}
if (array[8])
{
animator.fireImpulse = true;
}
}
}
public class EnemyMinesweeperAnim : MonoBehaviour
{
private readonly ManualLogSource log = DebbysCase.instance.log;
public EnemyMinesweeper minesweeperMain;
public SpringQuaternion mainSpring;
public Quaternion mainRotation;
public SpringQuaternion stalkSpring;
public Transform eyeTransform;
public Animator animator;
public ParticleSystem[] vortexParticles;
public ParticleSystem[] smokeParticles;
public ParticleSystem[] fireParticles;
public Sound fireBurstSound;
public Sound engineSoundLoop;
public Sound vortexSoundLoop;
public Sound laughSoundLoop;
public Sound stunSoundLoop;
public Sound mumbleSoundLoop;
public Sound noticeSound;
public Sound interestSound;
public Sound hurtSound;
public Sound respawnItemSound;
public Sound squelchSound;
public bool fireImpulse;
public float fireTimer;
public bool boostOn;
public Light[] fireLights;
public float randomPeerTimer = Random.Range(1f, 4f);
public bool stalkEmergeImpulse;
public bool stalkDisappearImpulse;
public bool bounceStartImpulse;
public bool bounceStopImpulse;
public bool vortexEmergeImpulse;
public bool vortexLeaveImpulse;
public bool lidOpenImpulse;
public bool lidCloseImpulse;
public void Awake()
{
for (int i = 0; i < fireLights.Length; i++)
{
((Component)fireLights[i]).gameObject.SetActive(true);
((Behaviour)fireLights[i]).enabled = false;
}
}
public void Update()
{
//IL_00fb: 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_03af: Unknown result type (might be due to invalid IL or missing references)
if (minesweeperMain.currentState == EnemyMinesweeper.State.Stun || minesweeperMain.currentState == EnemyMinesweeper.State.Attack)
{
if (animator.GetFloat("Override Speed") != 3f)
{
log.LogDebug((object)"Minesweeper: Animation Override Speed: \"3f\"");
animator.SetFloat("Override Speed", 3f);
}
}
else if (animator.GetFloat("Override Speed") != 1f)
{
log.LogDebug((object)"Minesweeper: Animation Override Speed: \"1f\"");
animator.SetFloat("Override Speed", 1f);
}
RandomPeeps();
CalculateTrackSpeeds();
CalculateRotators();
if (stalkEmergeImpulse)
{
stalkEmergeImpulse = false;
animator.SetBool("Stalk Emerge", true);
squelchSound.Play(eyeTransform.position, 1f, 1f, 1f, 1f);
}
if (stalkDisappearImpulse)
{
stalkDisappearImpulse = false;
animator.SetBool("Stalk Emerge", false);
squelchSound.Play(eyeTransform.position, 1f, 1f, 1f, 1f);
}
if (bounceStartImpulse)
{
bounceStartImpulse = false;
animator.SetBool("Engine Bounce", true);
for (int i = 0; i < smokeParticles.Length; i++)
{
smokeParticles[i].Play();
}
}
if (bounceStopImpulse)
{
bounceStopImpulse = false;
animator.SetBool("Engine Bounce", false);
for (int j = 0; j < smokeParticles.Length; j++)
{
smokeParticles[j].Stop();
}
}
if (vortexEmergeImpulse)
{
vortexEmergeImpulse = false;
animator.SetBool("Vortex", true);
for (int k = 0; k < vortexParticles.Length; k++)
{
vortexParticles[k].Play();
}
}
if (vortexLeaveImpulse)
{
vortexLeaveImpulse = false;
animator.SetBool("Vortex", false);
for (int l = 0; l < vortexParticles.Length; l++)
{
vortexParticles[l].Stop();
}
}
if (lidOpenImpulse)
{
lidOpenImpulse = false;
animator.SetBool("Lid Open", true);
}
if (lidCloseImpulse)
{
lidCloseImpulse = false;
animator.SetBool("Lid Open", false);
}
if (fireImpulse)
{
log.LogDebug((object)"Minesweeper: Start Fire");
fireImpulse = false;
fireTimer = Random.Range(0.2f, 0.6f);
boostOn = true;
for (int m = 0; m < fireParticles.Length; m++)
{
fireParticles[m].Play();
}
for (int n = 0; n < fireLights.Length; n++)
{
fireLights[n].intensity = 2.5f;
fireBurstSound.Play(((Component)fireLights[n]).transform.position, 1f, 1f, 1f, 1f);
}
}
if (fireTimer >= 0f)
{
fireTimer -= Time.deltaTime;
}
else if (boostOn)
{
boostOn = false;
log.LogDebug((object)"Minesweeper: Stop Fire");
for (int num = 0; num < fireParticles.Length; num++)
{
fireParticles[num].Stop();
}
for (int num2 = 0; num2 < fireLights.Length; num2++)
{
fireLights[num2].intensity = 0f;
}
}
engineSoundLoop.PlayLoop(animator.GetBool("Engine Bounce"), 1f, 1f, 1f);
vortexSoundLoop.PlayLoop(animator.GetBool("Vortex"), 1f, 0.5f, 1f);
laughSoundLoop.PlayLoop(animator.GetBool("Vortex"), 0.5f, 2f, 1f);
stunSoundLoop.PlayLoop(minesweeperMain.currentState == EnemyMinesweeper.State.Stun, 2f, 2f, 1f);
mumbleSoundLoop.PlayLoop(!animator.GetBool("Stalk Emerge") && !animator.GetBool("Vortex"), 1f, 1f, 1f);
}
public void RandomPeeps()
{
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
if (!animator.GetBool("Stalk Emerge"))
{
if (randomPeerTimer > 0f)
{
randomPeerTimer -= Time.deltaTime;
return;
}
int num = Random.Range(0, 4);
animator.SetInteger("Random Peer", num);
animator.SetTrigger("Peer");
log.LogDebug((object)$"Minesweeper: Peering \"{num}\"");
randomPeerTimer = Random.Range(1f, 4f);
squelchSound.Play(eyeTransform.position, 1f, 1f, 1f, 1f);
}
}
public void CalculateTrackSpeeds()
{
//IL_0016: 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)
float num = Mathf.InverseLerp(-5f, 5f, minesweeperMain.rigidbody.angularVelocity.y) * 2f - 1f;
if (Mathf.Abs(num) > 0.1f)
{
animator.SetFloat("Right Track Speed", num * -1f);
animator.SetFloat("Left Track Speed", num);
return;
}
Vector3 velocity = minesweeperMain.rigidbody.velocity;
if (((Vector3)(ref velocity)).magnitude >= 0.1f)
{
animator.SetFloat("Right Track Speed", 0.5f);
animator.SetFloat("Left Track Speed", 0.5f);
}
else
{
animator.SetFloat("Right Track Speed", 0f);
animator.SetFloat("Left Track Speed", 0f);
}
}
public void CalculateRotators()
{
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: 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_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: 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_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: 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_0112: 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_0162: 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_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: 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_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_0175: 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)
if (minesweeperMain.currentState != EnemyMinesweeper.State.Attack)
{
Vector3 normalized = ((Vector3)(ref minesweeperMain.navAgent.AgentVelocity)).normalized;
if (((Vector3)(ref normalized)).magnitude > 0.1f)
{
mainRotation = Quaternion.LookRotation(((Vector3)(ref minesweeperMain.navAgent.AgentVelocity)).normalized);
((Quaternion)(ref mainRotation)).eulerAngles = new Vector3(0f, ((Quaternion)(ref mainRotation)).eulerAngles.y, 0f);
}
}
((Component)minesweeperMain).transform.rotation = SemiFunc.SpringQuaternionGet(mainSpring, mainRotation, -1f);
if (((Component)eyeTransform).gameObject.activeSelf)
{
Quaternion val = (((Object)(object)minesweeperMain.targetPlayer != (Object)null) ? Quaternion.LookRotation(((Component)minesweeperMain.targetPlayer.PlayerVisionTarget.VisionTransform).transform.position - eyeTransform.position) : ((!((Object)(object)minesweeperMain.targetObject != (Object)null)) ? Quaternion.identity : Quaternion.LookRotation(((Component)minesweeperMain.targetObject).transform.position - eyeTransform.position)));
Quaternion rotation = SemiFunc.SpringQuaternionGet(stalkSpring, val, -1f);
eyeTransform.rotation = rotation;
}
else if (eyeTransform.localRotation != Quaternion.identity)
{
eyeTransform.localRotation = Quaternion.identity;
}
}
}
}
namespace REPODebbysCase.Config
{
public class DebbysCaseConfig
{
private readonly ManualLogSource log = DebbysCase.instance.log;
internal readonly List<ConfigEntry<bool>> isItemEnabled = new List<ConfigEntry<bool>>();
internal readonly List<ConfigEntry<bool>> isEnemyEnabled = new List<ConfigEntry<bool>>();
public DebbysCaseConfig(ConfigFile cfg, List<EnemySetup> enemiesList, List<Item> itemsList)
{
cfg.SaveOnConfigSet = false;
for (int i = 0; i < itemsList.Count; i++)
{
isItemEnabled.Add(cfg.Bind<bool>("Items", "Enable " + ((Object)itemsList[i]).name + "?", true, (ConfigDescription)null));
log.LogDebug((object)("Added config for " + ((Object)itemsList[i]).name));
}
for (int j = 0; j < enemiesList.Count; j++)
{
isEnemyEnabled.Add(cfg.Bind<bool>("Enemies", "Enable " + ((Object)enemiesList[j]).name + "?", true, (ConfigDescription)null));
log.LogDebug((object)("Added config for " + ((Object)enemiesList[j]).name));
}
PropertyInfo propertyInfo = AccessTools.Property(typeof(ConfigFile), "OrphanedEntries");
Dictionary<ConfigDefinition, string> dictionary = (Dictionary<ConfigDefinition, string>)propertyInfo.GetValue(cfg);
dictionary.Clear();
cfg.Save();
cfg.SaveOnConfigSet = true;
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}
namespace REPODebbysCase.NetcodePatcher
{
[AttributeUsage(AttributeTargets.Module)]
internal class NetcodePatchedAssemblyAttribute : Attribute
{
}
}