using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using MoreCompany;
using Steamworks;
using Steamworks.Data;
using TMPro;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("MoreItemsMod")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("MoreItemsMod")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("345ecfa1-82f2-45d5-8de3-6325e440df32")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
public class SkeletonKeyItem : GrabbableObject
{
public override void ItemActivate(bool used, bool buttonDown = true)
{
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
RaycastHit val = default(RaycastHit);
if (!((Object)(object)base.playerHeldBy == (Object)null) && ((NetworkBehaviour)this).IsOwner && Physics.Raycast(new Ray(((Component)base.playerHeldBy.gameplayCamera).transform.position, ((Component)base.playerHeldBy.gameplayCamera).transform.forward), ref val, 3f, 2816))
{
DoorLock component = ((Component)((RaycastHit)(ref val)).transform).GetComponent<DoorLock>();
if ((Object)(object)component != (Object)null && component.isLocked && !component.isPickingLock)
{
component.UnlockDoorSyncWithServer();
}
}
}
}
public class MobileTeleporter : GrabbableObject
{
private Coroutine beamUpPlayerCoroutine;
private int[] playersBeingTeleported;
private PlayerControllerB lastPlayerHeld;
private List<PlayerControllerB> playersAlive;
public AudioSource teleporterAudio;
public AudioClip teleporterSpinSFX;
public AudioClip teleporterBeamUpSFX;
public AudioClip beamUpPlayerBodySFX;
public AudioClip teleporterTickSFX;
public AudioClip teleporterConfirmSFX;
public GameObject playerIcon;
public GameObject playerName;
private float cooldownTime;
public float cooldownAmount;
private bool isTeleporting = false;
public GameObject screenObject;
private Material screenMaterial;
public Camera camera;
private PlayerControllerB playerToBeamTo;
private void Awake()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Expected O, but got Unknown
RenderTexture val = new RenderTexture(256, 256, 16, (RenderTextureFormat)0);
val.Create();
camera.targetTexture = val;
screenMaterial = ((Renderer)screenObject.GetComponent<MeshRenderer>()).material;
screenMaterial.SetTexture("_EmissiveColorMap", (Texture)(object)val);
playersBeingTeleported = new int[4] { -1, -1, -1, -1 };
playersBeingTeleported = new int[MainClass.newPlayerCount];
for (int i = 0; i < MainClass.newPlayerCount; i++)
{
playersBeingTeleported[i] = -1;
}
}
private void setPlayersAliveList()
{
playersAlive = new List<PlayerControllerB>();
for (int i = 0; i < StartOfRound.Instance.allPlayerScripts.Length; i++)
{
if (!StartOfRound.Instance.allPlayerScripts[i].isPlayerDead && StartOfRound.Instance.allPlayerScripts[i].isPlayerControlled)
{
playersAlive.Add(StartOfRound.Instance.allPlayerScripts[i]);
}
}
}
private PlayerControllerB getRandomPlayer()
{
if (playersAlive != null)
{
int index = Random.Range(0, playersAlive.Count);
return playersAlive[index];
}
return null;
}
public void PressTeleportButtonOnLocalClient()
{
PressTeleportButtonServerRpc();
}
[ServerRpc(RequireOwnership = false)]
public void PressTeleportButtonServerRpc()
{
PressTeleportButtonClientRpc();
}
[ClientRpc]
public void PressTeleportButtonClientRpc()
{
if (beamUpPlayerCoroutine != null)
{
((MonoBehaviour)this).StopCoroutine(beamUpPlayerCoroutine);
}
cooldownTime = cooldownAmount;
beamUpPlayerCoroutine = ((MonoBehaviour)this).StartCoroutine(beamUpPlayer());
}
public static async void FillImageWithSteamProfile(RawImage image, SteamId steamId, bool large = true)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
if (SteamClient.IsValid)
{
if (large)
{
image.texture = (Texture)(object)GetTextureFromImage(await SteamFriends.GetLargeAvatarAsync(steamId));
}
else
{
image.texture = (Texture)(object)GetTextureFromImage(await SteamFriends.GetSmallAvatarAsync(steamId));
}
}
}
public static Texture2D GetTextureFromImage(Image? image)
{
//IL_0003: 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_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Expected O, but got Unknown
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_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_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: 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_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
Texture2D val = new Texture2D((int)image.Value.Width, (int)image.Value.Height);
Debug.Log((object)"Slot K");
for (int i = 0; i < image.Value.Width; i++)
{
for (int j = 0; j < image.Value.Height; j++)
{
Image value = image.Value;
Color pixel = ((Image)(ref value)).GetPixel(i, j);
val.SetPixel(i, (int)image.Value.Height - j, new Color((float)(int)pixel.r / 255f, (float)(int)pixel.g / 255f, (float)(int)pixel.b / 255f, (float)(int)pixel.a / 255f));
}
}
Debug.Log((object)"Slot L");
val.Apply();
return val;
}
private IEnumerator beamUpPlayer()
{
setPlayersAliveList();
for (int i = 0; i <= Random.Range(20, 30); i++)
{
teleporterAudio.PlayOneShot(teleporterTickSFX);
playerToBeamTo = getRandomPlayer();
if ((Object)(object)playerToBeamTo == (Object)null)
{
Debug.Log((object)"Targeted player is null");
yield break;
}
((TMP_Text)playerIcon.GetComponentInChildren<TextMeshProUGUI>()).text = playerToBeamTo.playerUsername;
if (!GameNetworkManager.Instance.disableSteam)
{
FillImageWithSteamProfile(playerIcon.GetComponent<RawImage>(), SteamId.op_Implicit(playerToBeamTo.playerSteamId));
}
yield return (object)new WaitForSeconds(0.13f);
}
teleporterAudio.PlayOneShot(teleporterConfirmSFX);
yield return (object)new WaitForSeconds(0.6f);
teleporterAudio.PlayOneShot(teleporterSpinSFX);
if ((Object)(object)lastPlayerHeld.redirectToEnemy != (Object)null)
{
Debug.Log((object)$"Attemping to teleport enemy '{((Object)((Component)lastPlayerHeld.redirectToEnemy).gameObject).name}' (tied to player #{lastPlayerHeld.playerClientId}) to ship.");
if (StartOfRound.Instance.shipIsLeaving)
{
Debug.Log((object)$"Ship could not teleport enemy '{((Object)((Component)lastPlayerHeld.redirectToEnemy).gameObject).name}' (tied to player #{lastPlayerHeld.playerClientId}) because the ship is leaving the nav mesh.");
}
lastPlayerHeld.redirectToEnemy.ShipTeleportEnemy();
yield return (object)new WaitForSeconds(3f);
teleporterAudio.PlayOneShot(teleporterBeamUpSFX);
if (GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom)
{
HUDManager.Instance.ShakeCamera((ScreenShakeType)1);
}
}
SetPlayerTeleporterId(playerToBeamTo, 1);
if ((Object)(object)lastPlayerHeld.deadBody != (Object)null)
{
if ((Object)(object)lastPlayerHeld.deadBody.beamUpParticle == (Object)null)
{
yield break;
}
lastPlayerHeld.deadBody.beamUpParticle.Play();
lastPlayerHeld.deadBody.bodyAudio.PlayOneShot(beamUpPlayerBodySFX);
}
else
{
lastPlayerHeld.beamUpParticle.Play();
lastPlayerHeld.movementAudio.PlayOneShot(beamUpPlayerBodySFX);
}
Debug.Log((object)"Teleport A");
yield return (object)new WaitForSeconds(3f);
bool flag = false;
if ((Object)(object)lastPlayerHeld.deadBody != (Object)null)
{
if ((Object)(object)lastPlayerHeld.deadBody.grabBodyObject == (Object)null || !lastPlayerHeld.deadBody.grabBodyObject.isHeldByEnemy)
{
flag = true;
lastPlayerHeld.deadBody.attachedTo = null;
lastPlayerHeld.deadBody.attachedLimb = null;
lastPlayerHeld.deadBody.secondaryAttachedLimb = null;
lastPlayerHeld.deadBody.secondaryAttachedTo = null;
if (!playerToBeamTo.isPlayerDead)
{
lastPlayerHeld.deadBody.SetRagdollPositionSafely(((Component)playerToBeamTo).transform.position, true);
}
else
{
lastPlayerHeld.deadBody.SetRagdollPositionSafely(((Component)playerToBeamTo.deadBody).transform.position, true);
}
((Component)lastPlayerHeld.deadBody).transform.SetParent(StartOfRound.Instance.elevatorTransform, true);
if ((Object)(object)lastPlayerHeld.deadBody.grabBodyObject != (Object)null && lastPlayerHeld.deadBody.grabBodyObject.isHeld && (Object)(object)lastPlayerHeld.deadBody.grabBodyObject.playerHeldBy != (Object)null)
{
lastPlayerHeld.deadBody.grabBodyObject.playerHeldBy.DropAllHeldItems(true, false);
}
}
}
else
{
flag = true;
if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>()))
{
Object.FindObjectOfType<AudioReverbPresets>().audioPresets[3].ChangeAudioReverbForPlayer(lastPlayerHeld);
}
lastPlayerHeld.isInElevator = true;
lastPlayerHeld.isInHangarShipRoom = true;
lastPlayerHeld.isInsideFactory = false;
lastPlayerHeld.averageVelocity = 0f;
lastPlayerHeld.velocityLastFrame = Vector3.zero;
if (!playerToBeamTo.isPlayerDead)
{
lastPlayerHeld.TeleportPlayer(((Component)playerToBeamTo).transform.position, false, 0f, false, true);
}
else
{
lastPlayerHeld.TeleportPlayer(((Component)playerToBeamTo.deadBody).transform.position, false, 0f, false, true);
}
}
Debug.Log((object)"Teleport B");
SetPlayerTeleporterId(playerToBeamTo, -1);
if (flag)
{
teleporterAudio.PlayOneShot(teleporterBeamUpSFX);
if (GameNetworkManager.Instance.localPlayerController.isInHangarShipRoom)
{
HUDManager.Instance.ShakeCamera((ScreenShakeType)1);
}
}
Debug.Log((object)"Teleport C");
isTeleporting = false;
}
public override void ItemActivate(bool used, bool buttonDown = true)
{
((GrabbableObject)this).ItemActivate(used, buttonDown);
lastPlayerHeld = base.playerHeldBy;
if (!isTeleporting)
{
isTeleporting = true;
PressTeleportButtonOnLocalClient();
}
}
private void SetPlayerTeleporterId(PlayerControllerB playerScript, int teleporterId)
{
playerScript.shipTeleporterId = teleporterId;
playersBeingTeleported[playerScript.playerClientId] = (int)playerScript.playerClientId;
}
}
namespace MoreItemsMod;
[BepInPlugin("MadBear422.MoreItemsMod", "More Items Mod", "1.0.0")]
public class MoreItemsModBase : BaseUnityPlugin
{
private const string modGUID = "MadBear422.MoreItemsMod";
private const string modName = "More Items Mod";
private const string modVersion = "1.0.0";
private readonly Harmony harmony = new Harmony("MadBear422.MoreItemsMod");
private static MoreItemsModBase Instance;
internal ManualLogSource mls;
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = null;
}
mls = Logger.CreateLogSource("MadBear422.MoreItemsMod");
mls.LogInfo((object)"More Items Mod is Online <3");
harmony.PatchAll(typeof(MoreItemsModBase));
}
}