using System;
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.Bootstrap;
using BepInEx.Configuration;
using Mirror;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("AIToDummy")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("AIToDummy")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("bcdfe256-4804-48b8-92eb-dd0896eae1c5")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace AIToDummyMod;
[BepInPlugin("com.morsecodeguy.aitodummy", "AIToDummy", "2.0.1")]
public class AIToDummy : BaseUnityPlugin
{
private bool isDummyMode = false;
private bool showMenu = false;
private List<GameObject> aiCharacters = new List<GameObject>();
private GameObject playerHealthObject;
private ConfigEntry<KeyCode> toggleMenuKey;
private void Awake()
{
((Object)Chainloader.ManagerObject).hideFlags = (HideFlags)61;
}
private void Start()
{
toggleMenuKey = ((BaseUnityPlugin)this).Config.Bind<KeyCode>("Keybinds", "Toggle Menu Key", (KeyCode)282, "Key to toggle the AIToDummy menu");
((MonoBehaviour)this).StartCoroutine(MonitorAICharacters());
}
private void Update()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
if (!NetworkClient.isConnected && Input.GetKeyDown(toggleMenuKey.Value))
{
showMenu = !showMenu;
}
}
private void OnGUI()
{
//IL_005c: 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)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
if (!NetworkClient.isConnected && showMenu && aiCharacters.Count > 0 && (Object)(object)playerHealthObject != (Object)null)
{
int width = Screen.width;
int num = 160;
int num2 = 30;
Rect val = default(Rect);
((Rect)(ref val))..ctor((float)(width / 2 - num / 2), 20f, (float)num, (float)num2);
if (GUI.Button(val, isDummyMode ? "Disable Dummy Mode" : "Enable Dummy Mode"))
{
ToggleDummyMode();
}
Rect val2 = default(Rect);
((Rect)(ref val2))..ctor((float)(width / 2 - num / 2), 60f, (float)num, (float)num2);
if (GUI.Button(val2, "Remove Weapon"))
{
RemoveWeapon();
}
Rect val3 = default(Rect);
((Rect)(ref val3))..ctor((float)(width / 2 - num / 2), 100f, (float)num, (float)num2);
if (GUI.Button(val3, "Remove Arms"))
{
RemoveArms();
}
Rect val4 = default(Rect);
((Rect)(ref val4))..ctor((float)(width / 2 - num / 2), 140f, (float)num, (float)num2);
if (GUI.Button(val4, "Remove Legs"))
{
RemoveLegs();
}
}
}
private void ToggleDummyMode()
{
isDummyMode = !isDummyMode;
if (isDummyMode)
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"Dummy Mode Enabled: Disabling AI components.");
}
else
{
((BaseUnityPlugin)this).Logger.LogInfo((object)"Dummy Mode Disabled: Re-enabling AI components.");
}
UpdateAIComponents();
}
private void UpdateAIComponents()
{
foreach (GameObject aiCharacter in aiCharacters)
{
if (!((Object)(object)aiCharacter != (Object)null))
{
continue;
}
Component component = aiCharacter.GetComponent("PlayerInputAIManager");
Transform val = aiCharacter.transform.Find("PlayerModelAnimation");
if (!((Object)(object)component != (Object)null) || !((Object)(object)val != (Object)null))
{
continue;
}
Component component2 = ((Component)val).GetComponent("PlayerAnimator");
if (isDummyMode)
{
if ((Object)(object)component != (Object)null)
{
((Behaviour)((component is Behaviour) ? component : null)).enabled = false;
}
if ((Object)(object)component2 != (Object)null)
{
((Behaviour)((component2 is Behaviour) ? component2 : null)).enabled = false;
}
}
else
{
if ((Object)(object)component != (Object)null)
{
((Behaviour)((component is Behaviour) ? component : null)).enabled = true;
}
if ((Object)(object)component2 != (Object)null)
{
((Behaviour)((component2 is Behaviour) ? component2 : null)).enabled = true;
}
}
}
}
private void RemoveWeapon()
{
string[] names = new string[17]
{
"ShortSword(Clone)", "BeardedAxe(Clone)", "Bardiche(Clone)", "Longsword(Clone)", "SteelSlab(Clone)", "Spear(Clone)", "Rapier(Clone)", "Dagger(Clone)", "Katana(Clone)", "Halberd(Clone)",
"Katar(Clone)", "Zweihander(Clone)", "DaneAxe(Clone)", "Gladius(Clone)", "Claymore(Clone)", "Scutum(Clone)", "Shield(Clone)"
};
foreach (GameObject aiCharacter in aiCharacters)
{
if ((Object)(object)aiCharacter != (Object)null)
{
DisableChildrenByNames(aiCharacter.transform, names);
}
}
}
private void RemoveArms()
{
string[] names = new string[2] { "SCAPULA_RIGHT", "SCAPULA_LEFT" };
foreach (GameObject aiCharacter in aiCharacters)
{
if ((Object)(object)aiCharacter != (Object)null)
{
DisableChildrenByNames(aiCharacter.transform, names);
}
}
}
private void RemoveLegs()
{
string[] names = new string[2] { "HIP_JOINT_LEFT", "HIP_JOINT_RIGHT" };
foreach (GameObject aiCharacter in aiCharacters)
{
if ((Object)(object)aiCharacter != (Object)null)
{
DisableChildrenByNames(aiCharacter.transform, names);
}
}
}
private void DisableChildrenByNames(Transform parent, string[] names)
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
foreach (Transform item in parent)
{
Transform child = item;
if (Array.Exists(names, (string element) => element == ((Object)child).name))
{
((Component)child).gameObject.SetActive(false);
((BaseUnityPlugin)this).Logger.LogInfo((object)("Disabled object: " + ((Object)child).name));
}
DisableChildrenByNames(child, names);
}
}
private IEnumerator MonitorAICharacters()
{
while (true)
{
if (NetworkClient.isConnected)
{
aiCharacters.Clear();
playerHealthObject = null;
}
else
{
aiCharacters.Clear();
playerHealthObject = null;
GameObject[] allObjects = Object.FindObjectsOfType<GameObject>();
GameObject[] array = allObjects;
foreach (GameObject obj in array)
{
if (((Object)obj).name == "PlayerCharacter(Clone) ai" && !aiCharacters.Contains(obj))
{
aiCharacters.Add(obj);
((BaseUnityPlugin)this).Logger.LogInfo((object)("Found AI Character: " + ((Object)obj).name));
}
if ((Object)(object)obj.GetComponent("PlayerHealth") != (Object)null)
{
playerHealthObject = obj;
((BaseUnityPlugin)this).Logger.LogInfo((object)"Found PlayerHealth object.");
}
}
if (isDummyMode)
{
UpdateAIComponents();
}
}
yield return (object)new WaitForSeconds(1f);
}
}
}