using System;
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 GameNetcodeStuff;
using HarmonyLib;
using Lethal_Doors.Patches;
using Microsoft.CodeAnalysis;
using UnityEngine;
[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("Lethal_Doors")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Lethal_Doors")]
[assembly: AssemblyTitle("Lethal_Doors")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace LethalDoors
{
[BepInPlugin("Entity378.LethalDoorsFixed", "Lethal Doors Fixed", "1.1.0")]
public class LethalDoors : BaseUnityPlugin
{
private const string GUID = "Entity378.LethalDoorsFixed";
private const string NAME = "Lethal Doors Fixed";
private const string VERSION = "1.1.0";
private readonly Harmony harmony = new Harmony("Entity378.LethalDoorsFixed");
public static LethalDoors Instance { get; private set; }
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
harmony.PatchAll(typeof(DoorInteractionPatch));
((BaseUnityPlugin)this).Logger.LogInfo((object)"Lethal Doors Fixed Loaded");
}
}
}
namespace Lethal_Doors
{
public static class PluginInfo
{
public const string PLUGIN_GUID = "Lethal_Doors";
public const string PLUGIN_NAME = "Lethal_Doors";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace Lethal_Doors.Patches
{
[HarmonyPatch(typeof(HangarShipDoor))]
internal class DoorInteractionPatch
{
private static readonly Vector3 doorPosition = new Vector3(-5.72f, 1.305f, -14.1f);
private static float doorClosingTimer = -1f;
private static readonly float doorClosingDuration = 0.3f;
[HarmonyPostfix]
[HarmonyPatch("Update")]
private static void PostfixUpdate(HangarShipDoor __instance)
{
if (StartOfRound.Instance.shipIsLeaving || !StartOfRound.Instance.shipHasLanded)
{
return;
}
if (IsDoorClosing(__instance))
{
if (doorClosingTimer < 0f)
{
doorClosingTimer = 0f;
}
if (doorClosingTimer < doorClosingDuration && IsDoorClosed(__instance.shipDoorsAnimator))
{
CheckForPlayersAndApplyDamage();
CheckForEnemiesAndApplyDamage();
}
doorClosingTimer += Time.deltaTime;
}
else
{
doorClosingTimer = -1f;
}
}
private static bool IsDoorClosing(HangarShipDoor door)
{
return door.doorPower < 1f;
}
private static void CheckForPlayersAndApplyDamage()
{
if (!((Object)(object)StartOfRound.Instance != (Object)null) || StartOfRound.Instance.allPlayerScripts == null)
{
return;
}
PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts;
foreach (PlayerControllerB val in allPlayerScripts)
{
if ((Object)(object)val != (Object)null && IsPlayerInDangerZone(val))
{
Debug.Log((object)("[Lethal Doors Fixed] Player " + val.playerUsername + " is in danger zone"));
ApplyLethalDamageOrInjurePlayer(val);
Debug.Log((object)"[Lethal Doors Fixed] Added to affected list added");
}
}
}
private static bool IsPlayerInDangerZone(PlayerControllerB player)
{
//IL_0019: 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_003c: 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_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
float num = 1f;
float num2 = 1.25f;
float num3 = 1.25f;
float x = ((Component)player).transform.position.x;
float y = ((Component)player).transform.position.y;
float z = ((Component)player).transform.position.z;
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(x, 1.305f, -14.1f);
Vector3 val2 = default(Vector3);
((Vector3)(ref val2))..ctor(-5.72f, y, -14.1f);
Vector3 val3 = default(Vector3);
((Vector3)(ref val3))..ctor(-5.72f, 1.305f, z);
float num4 = Vector3.Distance(val, doorPosition);
float num5 = Vector3.Distance(val2, doorPosition);
float num6 = Vector3.Distance(val3, doorPosition);
if (num4 < num && num5 < num2 && num6 < num3)
{
return true;
}
return false;
}
private static bool IsEnemyInDangerZone(EnemyAI enemy)
{
//IL_0019: 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_003c: 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_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Unknown result type (might be due to invalid IL or missing references)
float num = 3f;
float num2 = 2.25f;
float num3 = 2.25f;
float x = ((Component)enemy).transform.position.x;
float y = ((Component)enemy).transform.position.y;
float z = ((Component)enemy).transform.position.z;
Vector3 val = default(Vector3);
((Vector3)(ref val))..ctor(x, 1.305f, -14.1f);
Vector3 val2 = default(Vector3);
((Vector3)(ref val2))..ctor(-5.72f, y, -14.1f);
Vector3 val3 = default(Vector3);
((Vector3)(ref val3))..ctor(-5.72f, 1.305f, z);
float num4 = Vector3.Distance(val, doorPosition);
float num5 = Vector3.Distance(val2, doorPosition);
float num6 = Vector3.Distance(val3, doorPosition);
if (num4 < num && num5 < num2 && num6 < num3)
{
return true;
}
return false;
}
private static void ApplyLethalDamageOrInjurePlayer(PlayerControllerB player)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
Debug.Log((object)$"[Lethal Doors Fixed] {player.playerUsername} in danger zone, Position:{((Component)player).transform.position} ");
Debug.Log((object)("[Lethal Doors Fixed] Applying lethal damange to player " + player.playerUsername));
if (player.criticallyInjured)
{
player.DamagePlayer(110, true, true, (CauseOfDeath)8, 0, false, default(Vector3));
Debug.Log((object)$"[Lethal Doors Fixed] Heads: kill player ClientID:{(int)player.playerClientId} ");
return;
}
Debug.Log((object)$"[Lethal Doors Fixed] Tails: injure player ClientID:{(int)player.playerClientId} ");
player.DamagePlayer(90, true, true, (CauseOfDeath)8, 0, false, default(Vector3));
player.AddBloodToBody();
player.MakeCriticallyInjured(true);
}
private static bool IsDoorClosed(Animator animator)
{
//IL_0003: 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)
AnimatorStateInfo currentAnimatorStateInfo = animator.GetCurrentAnimatorStateInfo(0);
return ((AnimatorStateInfo)(ref currentAnimatorStateInfo)).IsName("ShipDoorClose");
}
private static void CheckForEnemiesAndApplyDamage()
{
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
List<EnemyAI> list = new List<EnemyAI>();
Debug.Log((object)"[Lethal Doors Fixed] Checking for enemies to apply damage");
RoundManager val = Object.FindObjectOfType<RoundManager>();
if (!((Object)(object)val != (Object)null) || val.SpawnedEnemies == null)
{
return;
}
foreach (EnemyAI spawnedEnemy in val.SpawnedEnemies)
{
if ((Object)(object)spawnedEnemy != (Object)null && IsEnemyInDangerZone(spawnedEnemy) && !spawnedEnemy.isEnemyDead && !list.Contains(spawnedEnemy))
{
Debug.Log((object)$"[Lethal Doors Fixed] {((Object)spawnedEnemy).name} is in danger zone at position {((Component)spawnedEnemy).transform.position}");
((Component)spawnedEnemy).GetComponent<EnemyAI>().HitEnemyOnLocalClient(9999, new Vector3(0f, 0f, 0f), (PlayerControllerB)null, false, -1);
list.Add(spawnedEnemy);
if (spawnedEnemy.isEnemyDead)
{
Debug.Log((object)("[Lethal Doors Fixed] " + ((Object)spawnedEnemy).name + " killed"));
}
}
}
list.Clear();
}
}
}