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 BoplFixedMath;
using HarmonyLib;
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(".NETFramework,Version=v4.6", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("stickyNade")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("My first plugin")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("stickyNade")]
[assembly: AssemblyTitle("stickyNade")]
[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 stickyNade
{
[BepInPlugin("com.erwer.stickyNade", "stickyNade", "1.0.0")]
[BepInIncompatibility("savaGe-NoOwnerExplosionDeaths-1.0.0")]
public class Plugin : BaseUnityPlugin
{
public const string PLUGIN_GUID = "com.erwer.stickyNade";
public const string PLUGIN_NAME = "stickyNade";
public const string PLUGIN_VERSION = "1.0.0";
private void Awake()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Expected O, but got Unknown
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin com.erwer.stickyNade is loaded!");
Harmony val = new Harmony("com.erwer.stickyNade");
val.PatchAll(typeof(Patches));
}
}
public class GrenadeAdapter : IPlatformAttachable
{
private readonly Grenade _grenade;
public StickyRoundedRectangle stuckToGround;
public bool hasLanded;
public Fix SurfaceOffset { get; set; }
public Fix LocalPlatformPosition { get; set; }
public Vec2 HitNormal { get; set; } = Vec2.up;
public GrenadeAdapter(Grenade grenade)
{
//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)
_grenade = grenade;
}
public void RepositionOnParent()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)stuckToGround))
{
Vec2 position = stuckToGround.PositionFromLocalPlayerPos(LocalPlatformPosition, Fix.Zero);
((Component)_grenade).GetComponent<FixTransform>().position = position;
}
}
public void doLand()
{
//IL_0017: 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_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: 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_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: 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_0165: 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_01a6: 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_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0248: Unknown result type (might be due to invalid IL or missing references)
//IL_024d: Unknown result type (might be due to invalid IL or missing references)
//IL_01f6: Unknown result type (might be due to invalid IL or missing references)
//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
//IL_021e: 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)
FixTransform fixTrans = _grenade.body.fixTrans;
Fix val = (Fix)1f;
PhysicsParent[] array = (PhysicsParent[])(object)new PhysicsParent[50];
HashSet<int> hashSet = new HashSet<int>();
int num = DetPhysics.Get().circleCastRoundedRect(fixTrans.position, val, ref array);
Debug.Log((object)$"Hit count: {num}");
Vec2 val2 = default(Vec2);
for (int i = 0; i < num; i++)
{
StickyRoundedRectangle component = ((Component)array[i].fixTrans).GetComponent<StickyRoundedRectangle>();
if ((Object)(object)component != (Object)null)
{
Debug.Log((object)("Found sticky component on " + ((Object)((Component)array[i].fixTrans).gameObject).name));
stuckToGround = component;
Vec2 position = ((Component)_grenade).GetComponent<FixTransform>().position;
Vec2 position2 = array[i].fixTrans.position;
double num2 = mathhs.differ_angel(((Component)_grenade).transform.position.x, ((Component)_grenade).transform.position.y, (float)array[i].fixTrans.position.x, (float)array[i].fixTrans.position.y);
((Vec2)(ref val2))..ctor((Fix)Math.Cos(num2 * Math.PI / 180.0), (Fix)Math.Sin(num2 * Math.PI / 180.0));
List<RaycastInformation> list = new List<RaycastInformation>();
DetPhysics.Get().RaycastAll((Vec2)((Component)_grenade).transform.position, val2, (Fix)250f, LayerMask.op_Implicit(LayerMask.GetMask(new string[1] { "wall" })), list, 0);
if (list.Count > 0)
{
Debug.Log((object)$"Raycast hit at {list[0].nearPos}");
((Component)_grenade).transform.position = (Vector3)list[0].nearPos;
}
LocalPlatformPosition = stuckToGround.LocalPlayerPosFromPos(list[0].nearPos, Fix.Zero);
hasLanded = true;
AudioManager.Get().Play("arrowHit");
((Component)_grenade).transform.SetParent(((Component)array[i].fixTrans).gameObject.transform);
Updater.DestroyFix((MonoBehaviour)(object)((Component)_grenade).GetComponent<FixTransform>());
for (int j = 0; j < ((Component)_grenade).transform.childCount; j++)
{
Object.Destroy((Object)(object)((Component)((Component)_grenade).transform.GetChild(j)).gameObject);
}
break;
}
Debug.Log((object)("No sticky component found on " + ((Object)((Component)array[i].fixTrans).gameObject).name));
}
}
}
public class Patches
{
public static Dictionary<Grenade, GrenadeAdapter> GrenadeAdapters = new Dictionary<Grenade, GrenadeAdapter>();
[HarmonyPatch(typeof(Grenade), "Awake")]
[HarmonyPostfix]
public static void PatchGrenade(Grenade __instance)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
__instance.body.bounciness = (Fix)0f;
GrenadeAdapter value = new GrenadeAdapter(__instance);
GrenadeAdapters[__instance] = value;
}
[HarmonyPatch(typeof(Grenade), "UpdateSim")]
[HarmonyPrefix]
public static bool GrenadePatch2(Grenade __instance, ref Fix simDeltaTime)
{
//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_00a4: 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_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: 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_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_0130: 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_013f: Unknown result type (might be due to invalid IL or missing references)
//IL_0144: Unknown result type (might be due to invalid IL or missing references)
//IL_014a: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
GrenadeAdapter grenadeAdapter = GrenadeAdapters[__instance];
if (grenadeAdapter != null && __instance.hasBeenThrown && __instance.DetonatesOnOwner)
{
if (!grenadeAdapter.hasLanded)
{
grenadeAdapter.doLand();
flag = true;
}
else
{
grenadeAdapter.RepositionOnParent();
flag = false;
}
}
if (!flag)
{
if (!__instance.hasBeenThrown && ((Object)(object)__instance.thrower == (Object)null || !((Component)__instance.thrower).gameObject.activeSelf))
{
__instance.hasBeenThrown = true;
__instance.hurtOwnerDelay = -Fix.One;
((Component)__instance).GetComponent<DPhysicsCircle>().ManualInit();
}
if (__instance.hasBeenThrown && __instance.hurtOwnerDelay > 0L)
{
__instance.hurtOwnerDelay -= simDeltaTime * GameTime.PlayerTimeScale;
if (__instance.hurtOwnerDelay <= 0L)
{
__instance.DetonatesOnOwner = true;
}
}
if (__instance.selfDestructDelay > 0L)
{
__instance.selfDestructDelay -= simDeltaTime * GameTime.PlayerTimeScale;
if (__instance.selfDestructDelay <= 0L)
{
__instance.Detonate();
}
}
}
return flag;
}
}
public class mathhs
{
public static double differ_angel(float x1, float y1, float x2, float y2)
{
float num = x2 - x1;
float num2 = y2 - y1;
return Math.Atan2(num2, num) * 180.0 / Math.PI;
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "stickyNade";
public const string PLUGIN_NAME = "stickyNade";
public const string PLUGIN_VERSION = "1.0.0";
}
}