using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using MyceliumNetworking;
using Photon.Pun;
using Steamworks;
using TMPro;
using UnityEngine;
using UnityEngine.SceneManagement;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("cheese.spookdivers")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.4.0")]
[assembly: AssemblyInformationalVersion("1.0.4")]
[assembly: AssemblyProduct("Spookdivers")]
[assembly: AssemblyTitle("cheese.spookdivers")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.4.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Spookdivers
{
[BepInPlugin("cheese.spookdivers", "Spookdivers", "1.0.4")]
public class Plugin : BaseUnityPlugin
{
internal static readonly ushort ModID;
private static int _day;
private const int ButtonCountFactory = 4;
private static readonly Vector3[] ButtonPositionsFactory;
private static readonly Quaternion[] ButtonRotationsFactory;
private const int ButtonCountHarbor = 4;
private static readonly Vector3[] ButtonPositionsHarbor;
private static readonly Quaternion[] ButtonRotationsHarbor;
private const int ButtonCountMines = 4;
private static readonly Vector3[] ButtonPositionsMines;
private static readonly Quaternion[] ButtonRotationsMines;
internal ConfigEntry<float> ReadyTime = null;
internal ConfigEntry<bool> ForceScene = null;
internal ConfigEntry<string> SceneName = null;
internal ConfigEntry<bool> FakeBellsConfig = null;
internal ConfigEntry<float> LoweringSpeedConfig = null;
private int _playerCount = 1;
internal DivingBell[] DivingBells = Array.Empty<DivingBell>();
private bool _isInPhaseState = false;
private bool _isInReadyState = false;
internal bool CalledBellButtonClicked = false;
internal bool CalledFakeBellButtonClicked = false;
private bool _evening = false;
public static Plugin Instance { get; private set; } = null;
private static ManualLogSource Logger { get; set; } = null;
private static Harmony? Harmony { get; set; }
private static int PlayerCountReady
{
get
{
return MyceliumNetwork.GetLobbyData<int>("ReadyPlayers");
}
set
{
MyceliumNetwork.SetLobbyData("ReadyPlayers", (object)value);
}
}
private bool IsHost => PhotonNetwork.IsMasterClient;
private static bool StartedWithoutDivingBell
{
get
{
return MyceliumNetwork.GetLobbyData<bool>("StartedWithoutDivingBell");
}
set
{
MyceliumNetwork.SetLobbyData("StartedWithoutDivingBell", (object)value);
}
}
internal static bool FakeBells
{
get
{
return MyceliumNetwork.GetLobbyData<bool>("FakeBells");
}
set
{
MyceliumNetwork.SetLobbyData("FakeBells", (object)value);
}
}
internal static int RandomID
{
get
{
return MyceliumNetwork.GetLobbyData<int>("RandomID");
}
set
{
MyceliumNetwork.SetLobbyData("RandomID", (object)value);
}
}
internal static int FakeBellRandomID
{
get
{
return MyceliumNetwork.GetLobbyData<int>("FakeBellRandomID");
}
set
{
MyceliumNetwork.SetLobbyData("FakeBellRandomID", (object)value);
}
}
internal static float LoweringSpeed
{
get
{
return MyceliumNetwork.GetLobbyData<float>("LoweringSpeed");
}
set
{
MyceliumNetwork.SetLobbyData("LoweringSpeed", (object)value);
}
}
private void Start()
{
SceneManager.sceneLoaded += OnSceneLoaded;
MyceliumNetwork.RegisterNetworkObject((object)this, (uint)ModID, 0);
MyceliumNetwork.RegisterLobbyDataKey("ReadyPlayers");
MyceliumNetwork.RegisterLobbyDataKey("StartedWithoutDivingBell");
MyceliumNetwork.RegisterLobbyDataKey("RandomID");
MyceliumNetwork.RegisterLobbyDataKey("FakeBells");
MyceliumNetwork.RegisterLobbyDataKey("FakeBellRandomID");
MyceliumNetwork.RegisterLobbyDataKey("LoweringSpeed");
MyceliumNetwork.PlayerEntered += delegate
{
_playerCount++;
};
MyceliumNetwork.PlayerLeft += delegate
{
_playerCount--;
};
}
private void Awake()
{
Logger = ((BaseUnityPlugin)this).Logger;
Instance = this;
Instance.ReadyTime = ((BaseUnityPlugin)this).Config.Bind<float>("SETTINGS", "ReadyTime", 30f, "Time to wait for all players to be ready.");
Instance.ForceScene = ((BaseUnityPlugin)this).Config.Bind<bool>("SETTINGS", "ForceScene", false, "Forces the scene to change. (HOST ONLY)");
Instance.SceneName = ((BaseUnityPlugin)this).Config.Bind<string>("SETTINGS", "SceneName", "FactoryScene", "Scene to force change to [FactoryScene, HarbourScene, MinesScene] (HOST ONLY)");
Instance.FakeBellsConfig = ((BaseUnityPlugin)this).Config.Bind<bool>("SETTINGS", "FakeBells", false, "Enables fake diving bells, they are somewhat distinguishable from the real ones. (HOST ONLY)");
Instance.LoweringSpeedConfig = ((BaseUnityPlugin)this).Config.Bind<float>("SETTINGS", "LoweringSpeed", 2f, "Speed at which the diving bell will lower. (HOST ONLY)");
Patch();
Logger.LogInfo((object)"cheese.spookdivers v1.0.4 has loaded!");
}
private static void Patch()
{
//IL_000d: 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_0018: Expected O, but got Unknown
if (Harmony == null)
{
Harmony = new Harmony("cheese.spookdivers");
}
Logger.LogDebug((object)"Patching...");
Harmony.PatchAll();
Logger.LogDebug((object)"Finished patching!");
}
private void Update()
{
//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_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
Scene activeScene = SceneManager.GetActiveScene();
if (((Scene)(ref activeScene)).name != "SurfaceScene")
{
return;
}
if (SurfaceNetworkHandler.RoomStats.CurrentQuotaDay != _day)
{
_day = SurfaceNetworkHandler.RoomStats.CurrentQuotaDay;
CheckForEvening();
}
if (!_evening)
{
if (Player.localPlayer.refs.headPos.position.y < -50f && !_isInPhaseState)
{
_isInPhaseState = true;
BlackScreen.instance.SetBlackScreen(60f);
Logger.LogInfo((object)"Waiting for other players to join!");
}
if (Player.localPlayer.refs.headPos.position.y < -90f && !_isInReadyState)
{
FreezePlayer();
Ready();
Logger.LogInfo((object)"Player is ready");
((MonoBehaviour)this).StartCoroutine(ReadyState("FactoryScene", ReadyTime.Value));
}
}
}
private IEnumerator ReadyState(string sceneName, float time)
{
for (float secondsWaited = 0f; secondsWaited < time; secondsWaited += 1f)
{
if (IsHost && _playerCount == PlayerCountReady)
{
Logger.LogInfo((object)"All players are ready! Starting the game!");
yield return (object)new WaitForSeconds(3f);
string levelName = new List<string> { "FactoryScene", "MinesScene", "HarbourScene" }[SurfaceNetworkHandler.RoomStats.LevelToPlay];
if (ForceScene.Value)
{
levelName = SceneName.Value;
}
PhotonNetwork.LoadLevel(levelName);
StartedWithoutDivingBell = true;
yield break;
}
yield return (object)new WaitForSeconds(1f);
}
UnfreezePlayer();
yield return (object)new WaitForSeconds(1f);
NotReady();
}
[CustomRPC]
public void DivingBellButtonClicked(int randomID, RPCInfo info)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: 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_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
CSteamID senderSteamID = info.SenderSteamID;
string friendPersonaName = SteamFriends.GetFriendPersonaName(senderSteamID);
Debug.Log((object)(friendPersonaName + " called the diving bell!"));
CalledBellButtonClicked = true;
HelmetText.Instance.SetHelmetText("The Diving Bell has been called!", 2f);
DivingBell divingBell = DivingBells[randomID];
Vector3 oldPosition = ((Component)divingBell).transform.position;
((Component)divingBell).transform.position = new Vector3(oldPosition.x, 150f, oldPosition.z);
((MonoBehaviour)this).StartCoroutine(MoveBellDown(LoweringSpeed));
Logger.LogInfo((object)("Activated Diving Bell: " + randomID));
IEnumerator MoveBellDown(float speed)
{
yield return (object)new WaitForSeconds(5f);
((Component)divingBell).gameObject.SetActive(true);
while (((Component)divingBell).transform.position.y > oldPosition.y)
{
Transform transform = ((Component)divingBell).transform;
transform.position -= new Vector3(0f, speed * Time.deltaTime, 0f);
yield return null;
}
divingBell.RPC_Open();
}
}
[CustomRPC]
public void FakeDivingBellButtonClicked(int randomID, int randomMod, RPCInfo info)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: 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_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_009a: Unknown result type (might be due to invalid IL or missing references)
CSteamID senderSteamID = info.SenderSteamID;
string friendPersonaName = SteamFriends.GetFriendPersonaName(senderSteamID);
Debug.Log((object)(friendPersonaName + " called the diving bell!"));
CalledFakeBellButtonClicked = true;
HelmetText.Instance.SetHelmetText("The Diving Bell has been called!", 2f);
DivingBell divingBell = DivingBells[randomID];
Vector3 oldPosition = ((Component)divingBell).transform.position;
((Component)divingBell).transform.position = new Vector3(oldPosition.x, 150f, oldPosition.z);
((MonoBehaviour)this).StartCoroutine(MoveBellDown(LoweringSpeed));
Logger.LogInfo((object)("Activated Diving Bell: " + randomID));
IEnumerator MoveBellDown(float speed)
{
yield return (object)new WaitForSeconds(5f);
((Component)divingBell).gameObject.SetActive(true);
while (((Component)divingBell).transform.position.y > oldPosition.y)
{
Transform transform2 = ((Component)divingBell).transform;
transform2.position -= new Vector3(0f, speed * Time.deltaTime, 0f);
yield return null;
}
GameObject light;
switch (randomMod)
{
case 0:
{
TMP_Text osText = ((Component)((Component)((Component)((Component)((Component)((Component)((Component)divingBell).transform.GetChild(2)).transform.GetChild(2)).transform.GetChild(0)).transform.GetChild(1)).transform.GetChild(0)).transform).GetComponent<TMP_Text>();
osText.text = "DiveOS V0.00rc";
break;
}
case 1:
{
TMP_Text suitsText = ((Component)((Component)((Component)((Component)((Component)((Component)((Component)divingBell).transform.GetChild(2)).transform.GetChild(2)).transform.GetChild(0)).transform.GetChild(1)).transform.GetChild(2)).transform).GetComponent<TMP_Text>();
suitsText.text = "You are being watched";
break;
}
case 2:
{
GameObject travelButton = ((Component)((Component)((Component)divingBell).transform.GetChild(2)).transform.GetChild(1)).gameObject;
travelButton.SetActive(false);
break;
}
case 3:
{
GameObject doorButton = ((Component)((Component)((Component)divingBell).transform.GetChild(2)).transform.GetChild(1)).gameObject;
doorButton.SetActive(false);
break;
}
case 4:
light = ((Component)((Component)((Component)divingBell).transform.GetChild(1)).transform.GetChild(8)).gameObject;
((MonoBehaviour)this).StartCoroutine(FlickerLight());
break;
}
divingBell.RPC_Open();
((MonoBehaviour)this).StartCoroutine(WaitForPlayer());
IEnumerator FlickerLight()
{
while (((Component)divingBell).gameObject.activeSelf)
{
light.SetActive(true);
yield return (object)new WaitForSeconds(Random.Range(5f, 15f));
light.SetActive(false);
yield return (object)new WaitForSeconds(Random.Range(0.1f, 0.5f));
}
}
}
IEnumerator WaitForPlayer()
{
while (divingBell.playerDetector.CheckForPlayers().Count == 0)
{
yield return (object)new WaitForSeconds(1f);
}
ICollection<Player> players = divingBell.playerDetector.CheckForPlayers();
((MonoBehaviour)this).StartCoroutine(divingBell.door.Close());
divingBell.LockDoors();
((MonoBehaviour)this).StartCoroutine(CheckAndKill());
yield return (object)new WaitForSeconds(3f);
while (((Component)divingBell).transform.position.y < 150f)
{
Transform transform = ((Component)divingBell).transform;
transform.position += new Vector3(0f, 1f * Time.deltaTime, 0f);
yield return null;
}
((Component)divingBell).gameObject.SetActive(false);
IEnumerator CheckAndKill()
{
while (true)
{
bool allAlive = false;
foreach (Player player in players)
{
if (!divingBell.playerDetector.CheckForPlayers().Contains(player))
{
player.Die();
}
if (!player.data.dead)
{
allAlive = true;
}
}
if (!allAlive)
{
break;
}
yield return (object)new WaitForSeconds(1f);
}
}
}
}
[CustomRPC]
public void RPC_MakeStaticSeed(int seed, RPCInfo info)
{
Random.InitState(seed);
}
public void Ready()
{
_isInReadyState = true;
_isInPhaseState = true;
MyceliumNetwork.RPC((uint)ModID, "ReadyStatusReceived", (ReliableType)1, new object[1] { "ready" });
}
public void NotReady()
{
_isInReadyState = false;
_isInPhaseState = false;
BlackScreen.instance.blackScreenForSeconds = 0f;
MyceliumNetwork.RPC((uint)ModID, "ReadyStatusReceived", (ReliableType)1, new object[1] { "not ready" });
}
[CustomRPC]
public void ReadyStatusReceived(string message, RPCInfo info)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//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_0008: Unknown result type (might be due to invalid IL or missing references)
CSteamID senderSteamID = info.SenderSteamID;
string friendPersonaName = SteamFriends.GetFriendPersonaName(senderSteamID);
if (message == "ready")
{
Debug.Log((object)(friendPersonaName + " is Ready!"));
PlayerCountReady++;
}
else
{
Debug.Log((object)(friendPersonaName + " is not Ready!"));
PlayerCountReady--;
}
}
private void OnSceneLoaded(Scene scene, LoadSceneMode mode)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_034d: Unknown result type (might be due to invalid IL or missing references)
//IL_0314: Unknown result type (might be due to invalid IL or missing references)
Random.InitState((int)DateTime.Now.Ticks);
RandomID = -1;
FakeBellRandomID = -1;
PlayerCountReady = 0;
_isInReadyState = false;
_isInPhaseState = false;
DivingBells = Array.Empty<DivingBell>();
CalledBellButtonClicked = false;
CalledFakeBellButtonClicked = false;
_playerCount = PhotonNetwork.CurrentRoom.PlayerCount;
if (((Scene)(ref scene)).name == "SurfaceScene")
{
StartedWithoutDivingBell = false;
if (IsHost)
{
FakeBells = FakeBellsConfig.Value;
LoweringSpeed = LoweringSpeedConfig.Value;
}
((MonoBehaviour)this).StartCoroutine(Check());
}
bool flag;
switch (((Scene)(ref scene)).name)
{
case "FactoryScene":
case "HarbourScene":
case "MinesScene":
flag = true;
break;
default:
flag = false;
break;
}
if (!flag || !StartedWithoutDivingBell)
{
return;
}
int num = 0;
switch (((Scene)(ref scene)).name)
{
case "FactoryScene":
num = 4;
break;
case "HarbourScene":
num = 4;
break;
case "MinesScene":
num = 4;
break;
}
if (RandomID == -1)
{
RandomID = Random.RandomRangeInt(0, num);
}
if (FakeBells && FakeBellRandomID == -1)
{
do
{
FakeBellRandomID = Random.RandomRangeInt(0, num);
}
while (FakeBellRandomID == RandomID);
}
GameObject val = null;
if (((Scene)(ref scene)).name == "FactoryScene")
{
val = GameObject.Find("Spawns");
}
else if (((Scene)(ref scene)).name == "HarbourScene")
{
val = GameObject.Find("DiveBells");
}
else if (((Scene)(ref scene)).name == "MinesScene")
{
val = ((Component)GameObject.Find("Misc").transform.GetChild(3)).gameObject;
}
DivingBells = val.GetComponentsInChildren<DivingBell>();
DivingBell[] divingBells = DivingBells;
foreach (DivingBell val2 in divingBells)
{
if (((Component)val2).gameObject.activeSelf)
{
if (((Scene)(ref scene)).name == "MinesScene")
{
((Component)((Component)val2).transform.Find("Spawns")).gameObject.transform.position = new Vector3(140f, 80f, 80f);
}
else
{
((Component)((Component)val2).transform.Find("Spawns")).gameObject.transform.position = new Vector3(0f, 70f, 0f);
}
}
}
GameObject button = ((Component)((Component)((Component)val.transform.GetChild(0)).transform.GetChild(2)).transform.GetChild(1)).gameObject;
((MonoBehaviour)this).StartCoroutine(Async());
IEnumerator Async()
{
while ((Object)(object)Player.localPlayer == (Object)null)
{
yield return null;
}
DivingBell[] divingBells2 = DivingBells;
foreach (DivingBell divingBell in divingBells2)
{
((Component)divingBell).gameObject.SetActive(false);
}
GameObject spawnFixBell = ((Component)DivingBells[^1]).gameObject;
((Object)spawnFixBell).name = "SpawnFixBell";
spawnFixBell.transform.position = new Vector3(0f, 1000f, 0f);
spawnFixBell.SetActive(true);
Array.Resize(ref DivingBells, DivingBells.Length + 1);
FreezePlayer();
if (((Scene)(ref scene)).name == "FactoryScene")
{
FactoryTeleportRandom();
}
else if (((Scene)(ref scene)).name == "HarbourScene")
{
HarborTeleportRandom();
}
else if (((Scene)(ref scene)).name == "MinesScene")
{
MinesTeleportRandom();
}
UnfreezePlayer();
yield return (object)new WaitForSeconds(8f);
switch (_day)
{
case 1:
HelmetText.Instance.SetHelmetText("What have you done?", 2f);
yield return (object)new WaitForSeconds(4f);
HelmetText.Instance.SetHelmetText("You need to find a way back...", 2f);
break;
case 2:
HelmetText.Instance.SetHelmetText("Now this is more than just a \"slip\"...", 2f);
break;
default:
HelmetText.Instance.SetHelmetText("Well you know the drill...", 2f);
break;
}
Vector3[] positions = (Vector3[])(object)new Vector3[0];
Quaternion[] rotations = (Quaternion[])(object)new Quaternion[0];
if (((Scene)(ref scene)).name == "FactoryScene")
{
positions = ButtonPositionsFactory;
rotations = ButtonRotationsFactory;
}
else if (((Scene)(ref scene)).name == "HarbourScene")
{
positions = ButtonPositionsHarbor;
rotations = ButtonRotationsHarbor;
}
else if (((Scene)(ref scene)).name == "MinesScene")
{
positions = ButtonPositionsMines;
rotations = ButtonRotationsMines;
}
GameObject newButton = Object.Instantiate<GameObject>(button, positions[RandomID], rotations[RandomID]);
newButton.transform.localScale = new Vector3(10f, 10f, 5f);
((Object)newButton).name = "CallDivingBellButton";
Object.Destroy((Object)(object)newButton.GetComponent<UseDivingBellButton>());
newButton.AddComponent<CustomButton>();
newButton.SetActive(true);
if (FakeBells)
{
GameObject newFakeButton = Object.Instantiate<GameObject>(button, positions[FakeBellRandomID], rotations[FakeBellRandomID]);
newFakeButton.transform.localScale = new Vector3(10f, 10f, 5f);
((Object)newFakeButton).name = "CallFakeDivingBellButton";
Object.Destroy((Object)(object)newFakeButton.GetComponent<UseDivingBellButton>());
newFakeButton.AddComponent<FakeCustomButton>();
newFakeButton.SetActive(true);
if (IsHost)
{
MyceliumNetwork.RPC((uint)ModID, "RPC_MakeStaticSeed", (ReliableType)1, new object[1] { Random.state.s0 });
}
}
}
IEnumerator Check()
{
yield return (object)new WaitForSeconds(3f);
CheckForEvening();
}
}
private void TeleportPlayer(Vector3 newPosition, Vector3 newForward)
{
//IL_0054: 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 ((Object)(object)Player.localPlayer == (Object)null)
{
Logger.LogInfo((object)"Player object is null");
return;
}
MethodInfo method = typeof(Player).GetMethod("Teleport", BindingFlags.Instance | BindingFlags.NonPublic);
if (method != null)
{
method.Invoke(Player.localPlayer, new object[2] { newPosition, newForward });
}
else
{
Logger.LogInfo((object)"Teleport method not found");
}
}
private void FactoryTeleportRandom()
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: 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_003b: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor((float)Random.Range(-120, 60), 80f, (float)Random.Range(-120, 60));
Vector3 newForward = default(Vector3);
((Vector3)(ref newForward))..ctor(val.x, 0f, val.z);
TeleportPlayer(val, newForward);
}
private void HarborTeleportRandom()
{
//IL_0022: 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_0039: 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)
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor((float)Random.Range(-48, 45), 80f, (float)Random.Range(0, 12));
Vector3 newForward = default(Vector3);
((Vector3)(ref newForward))..ctor(val.x, 0f, val.z);
TeleportPlayer(val, newForward);
}
private void MinesTeleportRandom()
{
//IL_0025: 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_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_0071: 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_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: 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_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
Vector3[] array = (Vector3[])(object)new Vector3[4]
{
new Vector3((float)Random.Range(126, 140), 80f, (float)Random.Range(80, 100)),
new Vector3((float)Random.Range(4, 20), 60f, (float)Random.Range(62, 65)),
new Vector3((float)Random.Range(60, 80), 50f, (float)Random.Range(111, 130)),
new Vector3((float)Random.Range(0, 10), 56f, (float)Random.Range(-3, 8))
};
Vector3 val = array[Random.Range(0, 4)];
Vector3 newForward = default(Vector3);
((Vector3)(ref newForward))..ctor(val.x, 0f, val.z);
TeleportPlayer(val, newForward);
}
protected void CheckForEvening()
{
GameObject val = GameObject.Find("Misc");
GameObject gameObject = ((Component)val.transform.GetChild(4)).gameObject;
_evening = gameObject.activeSelf;
}
private void FreezePlayer()
{
MyceliumNetwork.RPC((uint)ModID, "RPC_FreezePlayer", (ReliableType)1, new object[1] { Player.localPlayer.refs.view.ViewID });
}
private void UnfreezePlayer()
{
MyceliumNetwork.RPC((uint)ModID, "RPC_UnFreezePlayer", (ReliableType)1, new object[1] { Player.localPlayer.refs.view.ViewID });
}
[CustomRPC]
private void RPC_FreezePlayer(int viewID, RPCInfo info)
{
//IL_0040: 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)
Type typeFromHandle = typeof(PlayerHandler);
MethodInfo method = typeFromHandle.GetMethod("TryGetPlayerFromViewID", BindingFlags.Instance | BindingFlags.NonPublic);
object? obj = method.Invoke(PlayerHandler.instance, new object[1] { viewID });
Player val = (Player)((obj is Player) ? obj : null);
val.data.gravityDirection = Vector3.zero;
}
[CustomRPC]
private void RPC_UnFreezePlayer(int viewID, RPCInfo info)
{
//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)
Type typeFromHandle = typeof(PlayerHandler);
MethodInfo method = typeFromHandle.GetMethod("TryGetPlayerFromViewID", BindingFlags.Instance | BindingFlags.NonPublic);
object? obj = method.Invoke(PlayerHandler.instance, new object[1] { viewID });
Player val = (Player)((obj is Player) ? obj : null);
val.data.gravityDirection = new Vector3(0f, -1f, 0f);
}
static Plugin()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: 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_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_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_00f4: 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_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: 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_013a: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Unknown result type (might be due to invalid IL or missing references)
//IL_0155: Unknown result type (might be due to invalid IL or missing references)
//IL_016b: 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_0186: 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_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
//IL_01cc: 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)
//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
//IL_01fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0202: Unknown result type (might be due to invalid IL or missing references)
//IL_0223: Unknown result type (might be due to invalid IL or missing references)
//IL_0228: Unknown result type (might be due to invalid IL or missing references)
//IL_023e: Unknown result type (might be due to invalid IL or missing references)
//IL_0243: Unknown result type (might be due to invalid IL or missing references)
//IL_0259: Unknown result type (might be due to invalid IL or missing references)
//IL_025e: Unknown result type (might be due to invalid IL or missing references)
//IL_0274: Unknown result type (might be due to invalid IL or missing references)
//IL_0279: Unknown result type (might be due to invalid IL or missing references)
//IL_029a: Unknown result type (might be due to invalid IL or missing references)
//IL_029f: 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_02d0: Unknown result type (might be due to invalid IL or missing references)
//IL_02d5: Unknown result type (might be due to invalid IL or missing references)
//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
//IL_02f0: Unknown result type (might be due to invalid IL or missing references)
Hash128 val = Hash128.Compute("cheese.spookdivers");
ModID = (ushort)((object)(Hash128)(ref val)).GetHashCode();
_day = 0;
ButtonPositionsFactory = (Vector3[])(object)new Vector3[4]
{
new Vector3(-123.3f, 0.4f, -45.7f),
new Vector3(34.8f, 2.6f, -5.16f),
new Vector3(34.5f, 5.5f, 19f),
new Vector3(3.5f, -19.9f, -9.22f)
};
ButtonRotationsFactory = (Quaternion[])(object)new Quaternion[4]
{
Quaternion.Euler(270f, 0f, 0f),
Quaternion.Euler(0f, 0f, 0f),
Quaternion.Euler(0f, 90f, 0f),
Quaternion.Euler(270f, 0f, 0f)
};
ButtonPositionsHarbor = (Vector3[])(object)new Vector3[4]
{
new Vector3(-22.7f, -1.6f, 29.1f),
new Vector3(-51.6f, -2f, 17.55f),
new Vector3(27.2f, -3.6f, 13.8f),
new Vector3(-1f, -7f, 10.6f)
};
ButtonRotationsHarbor = (Quaternion[])(object)new Quaternion[4]
{
Quaternion.Euler(357f, 22f, 0f),
Quaternion.Euler(272f, 180f, 180f),
Quaternion.Euler(348f, 200f, 0f),
Quaternion.Euler(0f, 295f, 0f)
};
ButtonPositionsMines = (Vector3[])(object)new Vector3[4]
{
new Vector3(12f, -6f, 67.9f),
new Vector3(134.2f, 25.2f, 2.9f),
new Vector3(165.8f, 11f, 55.75f),
new Vector3(152.4f, 7f, 44f)
};
ButtonRotationsMines = (Quaternion[])(object)new Quaternion[4]
{
Quaternion.Euler(0f, 22f, 0f),
Quaternion.Euler(0f, 0f, 0f),
Quaternion.Euler(0f, 0f, 0f),
Quaternion.Euler(0f, 90f, 0f)
};
}
}
public class CustomButton : Interactable
{
private static bool Clicked
{
get
{
return Plugin.Instance.CalledBellButtonClicked;
}
set
{
Plugin.Instance.CalledBellButtonClicked = value;
}
}
private static DivingBell[] DivingBells => Plugin.Instance.DivingBells;
private void Update()
{
base.hoverText = "Call the Diving Bell";
}
public override void Interact(Player player)
{
if (!Clicked)
{
Clicked = true;
int num = 0;
do
{
num = Random.Range(0, DivingBells.Length);
}
while (((Component)DivingBells[num]).gameObject.activeSelf);
MyceliumNetwork.RPC((uint)Plugin.ModID, "DivingBellButtonClicked", (ReliableType)1, new object[1] { num });
}
}
public override bool IsValid(Player player)
{
if (Clicked)
{
return false;
}
base.hoverText = "Call the Diving Bell";
return true;
}
}
public class FakeCustomButton : Interactable
{
private static bool Clicked
{
get
{
return Plugin.Instance.CalledFakeBellButtonClicked;
}
set
{
Plugin.Instance.CalledFakeBellButtonClicked = value;
}
}
private static DivingBell[] DivingBells => Plugin.Instance.DivingBells;
private void Update()
{
base.hoverText = "Call the Diving Bell";
}
public override void Interact(Player player)
{
if (!Clicked)
{
Clicked = true;
int num = 0;
do
{
num = Random.Range(0, DivingBells.Length);
}
while (((Component)DivingBells[num]).gameObject.activeSelf);
int num2 = Random.Range(0, 5);
MyceliumNetwork.RPC((uint)Plugin.ModID, "FakeDivingBellButtonClicked", (ReliableType)1, new object[2] { num, num2 });
}
}
public override bool IsValid(Player player)
{
if (Clicked)
{
return false;
}
base.hoverText = "Call the Diving Bell";
return true;
}
}
public static class MyPluginInfo
{
public const string PLUGIN_GUID = "cheese.spookdivers";
public const string PLUGIN_NAME = "Spookdivers";
public const string PLUGIN_VERSION = "1.0.4";
}
}