using System;
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.Configuration;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using KillableEnemies.hooks;
using KillableEnemies.managers;
using KillableEnemies.models;
using KillableEnemies.network;
using LethalConfig;
using LethalConfig.ConfigItems;
using LethalConfig.ConfigItems.Options;
using RuntimeNetcodeRPCValidator;
using Unity.Netcode;
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("KillableEnemies")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("KillableEnemies")]
[assembly: AssemblyCopyright("Copyright © 2024")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("cf12050d-f455-47a2-a2c4-ca884f582b30")]
[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")]
namespace KillableEnemies
{
[BepInPlugin("Ovchinikov.KillableEnemies.Main", "KillableEnemies", "0.1.2")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class KillableEnemies : BaseUnityPlugin
{
private const string modGUID = "Ovchinikov.KillableEnemies.Main";
private const string modName = "KillableEnemies";
private const string modVersion = "0.1.2";
private readonly Harmony harmony = new Harmony("Ovchinikov.KillableEnemies.Main");
private static KillableEnemies instance;
private NetcodeValidator netcodeValidator;
internal ManualLogSource mls;
private void Awake()
{
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Expected O, but got Unknown
if ((Object)(object)instance == (Object)null)
{
instance = this;
}
mls = Logger.CreateLogSource("Ovchinikov.KillableEnemies.Main");
mls.LogInfo((object)"Enabling KillableEnemies");
InitializeConfigValues();
harmony.PatchAll(typeof(VanillaHook));
netcodeValidator = new NetcodeValidator("Ovchinikov.KillableEnemies.Main");
netcodeValidator.PatchAll();
netcodeValidator.BindToPreExistingObjectByBehaviour<KillableEnemyEmitter, PlayerControllerB>();
mls.LogInfo((object)"Finished Enabling KillableEnemies");
}
private void InitializeConfigValues()
{
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_016c: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
//IL_017b: Expected O, but got Unknown
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: Expected O, but got Unknown
//IL_0189: Expected O, but got Unknown
//IL_018f: Unknown result type (might be due to invalid IL or missing references)
//IL_0195: Expected O, but got Unknown
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Expected O, but got Unknown
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Expected O, but got Unknown
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
//IL_01bb: Expected O, but got Unknown
//IL_01c1: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: Expected O, but got Unknown
//IL_01cf: Unknown result type (might be due to invalid IL or missing references)
//IL_01d6: Expected O, but got Unknown
//IL_01dd: Unknown result type (might be due to invalid IL or missing references)
//IL_01e4: Expected O, but got Unknown
//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
//IL_01f2: Expected O, but got Unknown
//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0200: Expected O, but got Unknown
//IL_0207: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: Expected O, but got Unknown
mls.LogInfo((object)"Parsing KillableEnemies config");
ConfigEntry<bool> killableJesterEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("Killable Enemies", "Killable Jester", false, "Should Jesters be killable?");
ConfigEntry<bool> killableGhostGirlEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("Killable Enemies", "Killable Ghost Girl", false, "Should Ghost Girls be killable?");
ConfigEntry<bool> killableGiantEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("Killable Enemies", "Killable Giant", false, "Should Giants be killable?");
ConfigEntry<bool> killableCoilHeadEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("Killable Enemies", "Killable Coil Head", false, "Should Coil Heads be killable?");
ConfigEntry<bool> killableSporeLizardEntry = ((BaseUnityPlugin)this).Config.Bind<bool>("Killable Enemies", "Killable Spore Lizard", false, "Should Spore Lizards be killable?");
ConfigEntry<int> jesterHPEntry = ((BaseUnityPlugin)this).Config.Bind<int>("Enemy Health", "Jester Health", 100, "Health points for Jesters.");
ConfigEntry<int> ghostGirlHPEntry = ((BaseUnityPlugin)this).Config.Bind<int>("Enemy Health", "Ghost Girl Health", 100, "Health points for Ghost Girls.");
ConfigEntry<int> giantHPEntry = ((BaseUnityPlugin)this).Config.Bind<int>("Enemy Health", "Giant Health", 100, "Health points for Giants.");
ConfigEntry<int> coilHeadHPEntry = ((BaseUnityPlugin)this).Config.Bind<int>("Enemy Health", "Coil Head Health", 100, "Health points for Coil Heads.");
ConfigEntry<int> sporeLizardHPEntry = ((BaseUnityPlugin)this).Config.Bind<int>("Enemy Health", "Spore Lizard Health", 100, "Health points for Spore Lizards.");
IntSliderOptions val = new IntSliderOptions
{
RequiresRestart = false
};
((BaseRangeOptions<int>)val).Min = 1;
((BaseRangeOptions<int>)val).Max = 1000;
IntSliderOptions val2 = val;
BoolCheckBoxConfigItem val3 = new BoolCheckBoxConfigItem(killableJesterEntry);
BoolCheckBoxConfigItem val4 = new BoolCheckBoxConfigItem(killableGhostGirlEntry);
BoolCheckBoxConfigItem val5 = new BoolCheckBoxConfigItem(killableGiantEntry);
BoolCheckBoxConfigItem val6 = new BoolCheckBoxConfigItem(killableCoilHeadEntry);
BoolCheckBoxConfigItem val7 = new BoolCheckBoxConfigItem(killableSporeLizardEntry);
IntSliderConfigItem val8 = new IntSliderConfigItem(jesterHPEntry, val2);
IntSliderConfigItem val9 = new IntSliderConfigItem(ghostGirlHPEntry, val2);
IntSliderConfigItem val10 = new IntSliderConfigItem(giantHPEntry, val2);
IntSliderConfigItem val11 = new IntSliderConfigItem(coilHeadHPEntry, val2);
IntSliderConfigItem val12 = new IntSliderConfigItem(sporeLizardHPEntry, val2);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val8);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val9);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val10);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val11);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val12);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val3);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val4);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val5);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val6);
LethalConfigManager.AddConfigItem((BaseConfigItem)(object)val7);
KillableEnemyManager.Instance.DoJesterKill = killableJesterEntry.Value;
KillableEnemyManager.Instance.DoGhostGirlKill = killableGhostGirlEntry.Value;
KillableEnemyManager.Instance.DoGiantKill = killableGiantEntry.Value;
KillableEnemyManager.Instance.DoCoilHeadKill = killableCoilHeadEntry.Value;
KillableEnemyManager.Instance.DoSporeLizardKill = killableSporeLizardEntry.Value;
KillableEnemyManager.Instance.JesterHP = jesterHPEntry.Value;
KillableEnemyManager.Instance.GhostGirlHP = ghostGirlHPEntry.Value;
KillableEnemyManager.Instance.GiantHP = giantHPEntry.Value;
KillableEnemyManager.Instance.CoilHeadHP = coilHeadHPEntry.Value;
KillableEnemyManager.Instance.SporeLizardHP = sporeLizardHPEntry.Value;
killableJesterEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.DoJesterKill = killableJesterEntry.Value;
}
};
killableGhostGirlEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.DoGhostGirlKill = killableGhostGirlEntry.Value;
}
};
killableGiantEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.DoGiantKill = killableGiantEntry.Value;
}
};
killableCoilHeadEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.DoCoilHeadKill = killableCoilHeadEntry.Value;
}
};
killableSporeLizardEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.DoSporeLizardKill = killableSporeLizardEntry.Value;
}
};
jesterHPEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.JesterHP = jesterHPEntry.Value;
}
};
ghostGirlHPEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.GhostGirlHP = ghostGirlHPEntry.Value;
}
};
giantHPEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.GiantHP = giantHPEntry.Value;
}
};
coilHeadHPEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.CoilHeadHP = coilHeadHPEntry.Value;
}
};
sporeLizardHPEntry.SettingChanged += delegate
{
if (((NetworkBehaviour)HUDManager.Instance).IsHost || ((NetworkBehaviour)HUDManager.Instance).IsServer)
{
KillableEnemyManager.Instance.SporeLizardHP = sporeLizardHPEntry.Value;
}
};
mls.LogInfo((object)"Config finished parsing");
}
}
}
namespace KillableEnemies.network
{
public class KillableEnemyEmitter : NetworkBehaviour
{
[ServerRpc(RequireOwnership = false)]
public void DoDamageServerRpc(ulong objectId, int damage)
{
DoDamageClientRpc(objectId, damage);
}
[ServerRpc(RequireOwnership = false)]
public void DoKillServerRpc(ulong objectId)
{
DoKillClientRpc(objectId);
}
[ClientRpc]
public void DoDamageClientRpc(ulong objectId, int damage)
{
EnemyAI valueSafe = GeneralExtensions.GetValueSafe<ulong, EnemyAI>(KillableEnemyManager.Instance.NetworkObjectIDToEnemyAI, objectId);
KillableEnemy component = ((Component)valueSafe).gameObject.GetComponent<KillableEnemy>();
if ((Object)(object)component != (Object)null)
{
((Component)valueSafe).gameObject.GetComponent<KillableEnemy>().DoDamage(damage);
}
}
[ClientRpc]
public void DoKillClientRpc(ulong objectId)
{
EnemyAI valueSafe = GeneralExtensions.GetValueSafe<ulong, EnemyAI>(KillableEnemyManager.Instance.NetworkObjectIDToEnemyAI, objectId);
KillableEnemy component = ((Component)valueSafe).gameObject.GetComponent<KillableEnemy>();
if ((Object)(object)component != (Object)null)
{
((Component)valueSafe).gameObject.GetComponent<KillableEnemy>().DoDeath();
}
}
}
}
namespace KillableEnemies.models
{
public class KillableEnemy : MonoBehaviour
{
public delegate void DeathEventHandler(KillableEnemy sender, DeathEventArgs e);
public delegate void HitEventHandler(KillableEnemy sender, HitEventArgs e);
private int startingHealth = 0;
private int currentHealth = 0;
private ulong networkObjectId;
private EnemyType enemyType;
private EnemyAI enemyAI;
public EnemyType EnemyType
{
get
{
return enemyType;
}
set
{
enemyType = value;
}
}
public EnemyAI EnemyAI
{
get
{
return enemyAI;
}
set
{
enemyAI = value;
}
}
public ulong NetworkObjectId
{
get
{
return networkObjectId;
}
set
{
networkObjectId = value;
}
}
public int CurrentHealth
{
get
{
return currentHealth;
}
set
{
currentHealth = value;
}
}
public int StartingHealth
{
get
{
return startingHealth;
}
set
{
startingHealth = value;
}
}
public event DeathEventHandler DeathEvent;
public event HitEventHandler HitEvent;
public void DoDamage(int amount, PlayerControllerB whoHit = null)
{
HitEventArgs hitEventArgs = new HitEventArgs(this, amount);
OnHitEvent(hitEventArgs);
if (!hitEventArgs.Cancel)
{
currentHealth -= amount;
if (currentHealth < 0)
{
currentHealth = 0;
}
if (currentHealth == 0 && (((NetworkBehaviour)enemyAI).IsHost || ((NetworkBehaviour)enemyAI).IsServer))
{
((Component)StartOfRound.Instance.allPlayerScripts[0]).gameObject.GetComponent<KillableEnemyEmitter>().DoKillServerRpc(((NetworkBehaviour)enemyAI).NetworkObjectId);
}
}
}
public void DoDeath()
{
if (!((NetworkBehaviour)enemyAI).IsHost && !((NetworkBehaviour)enemyAI).IsServer)
{
return;
}
DeathEventArgs deathEventArgs = new DeathEventArgs(this, currentHealth);
OnDeathEvent(deathEventArgs);
if (!deathEventArgs.Cancel)
{
EnemyAI.isEnemyDead = true;
if (((NetworkBehaviour)enemyAI).IsServer || ((NetworkBehaviour)enemyAI).IsHost)
{
((NetworkBehaviour)EnemyAI).NetworkObject.Despawn(true);
}
}
}
protected virtual void OnDeathEvent(DeathEventArgs e)
{
this.DeathEvent?.Invoke(this, e);
}
protected virtual void OnHitEvent(HitEventArgs e)
{
this.HitEvent?.Invoke(this, e);
}
}
public class DeathEventArgs : EventArgs
{
public KillableEnemy Enemy { get; private set; }
public bool Cancel { get; set; } = false;
public DeathEventArgs(KillableEnemy enemy, int remainingHealth)
{
Enemy = enemy;
}
}
public class HitEventArgs : EventArgs
{
public KillableEnemy Enemy { get; private set; }
public int DamageDealt { get; private set; }
public bool Cancel { get; set; } = false;
public HitEventArgs(KillableEnemy enemy, int damageDealt)
{
Enemy = enemy;
DamageDealt = damageDealt;
}
}
public enum EnemyType
{
COIL_HEAD,
GHOST_GIRL,
GIANT,
SPORE_LIZARD,
JESTER
}
}
namespace KillableEnemies.managers
{
internal class KillableEnemyManager
{
private static KillableEnemyManager _instance;
public static KillableEnemyManager Instance => _instance ?? (_instance = new KillableEnemyManager());
public Dictionary<ulong, EnemyAI> NetworkObjectIDToEnemyAI { get; } = new Dictionary<ulong, EnemyAI>();
public Dictionary<EnemyAI, ulong> EnemyAIToNetworkObjectID { get; } = new Dictionary<EnemyAI, ulong>();
public bool DoJesterKill { get; set; }
public bool DoGhostGirlKill { get; set; }
public bool DoGiantKill { get; set; }
public bool DoCoilHeadKill { get; set; }
public bool DoSporeLizardKill { get; set; }
public int JesterHP { get; set; }
public int GhostGirlHP { get; set; }
public int GiantHP { get; set; }
public int CoilHeadHP { get; set; }
public int SporeLizardHP { get; set; }
}
}
namespace KillableEnemies.hooks
{
internal class LethalThingsHook
{
}
internal class UnityHook
{
private const string modGUID = "Ovchinikov.KillableEnemies.Unity";
private static ManualLogSource mls;
static UnityHook()
{
mls = Logger.CreateLogSource("Ovchinikov.KillableEnemies.Unity");
}
[HarmonyPrefix]
[HarmonyPatch(typeof(NetworkManager), "DespawnObject")]
private static void PrefixDespawn(NetworkSpawnManager __instance, NetworkObject networkObject, bool destroyObject)
{
EnemyAI component = ((Component)networkObject).GetComponent<EnemyAI>();
if ((Object)(object)component != (Object)null)
{
KillableEnemyManager.Instance.EnemyAIToNetworkObjectID.Remove(component);
KillableEnemyManager.Instance.NetworkObjectIDToEnemyAI.Remove(((NetworkBehaviour)component).NetworkObjectId);
mls.LogInfo((object)"Monster removed from map");
}
}
}
internal class VanillaHook
{
private const string modGUID = "Ovchinikov.KillableEnemies.Vanilla";
private static ManualLogSource mls;
static VanillaHook()
{
mls = Logger.CreateLogSource("Ovchinikov.KillableEnemies.Vanilla");
}
[HarmonyPostfix]
[HarmonyPatch(typeof(EnemyAI), "Start")]
private static void PostfixStartEnemy(EnemyAI __instance)
{
ForestGiantAI val = (ForestGiantAI)(object)((__instance is ForestGiantAI) ? __instance : null);
if (val == null)
{
DressGirlAI val2 = (DressGirlAI)(object)((__instance is DressGirlAI) ? __instance : null);
if (val2 == null)
{
PufferAI val3 = (PufferAI)(object)((__instance is PufferAI) ? __instance : null);
if (val3 == null)
{
SpringManAI val4 = (SpringManAI)(object)((__instance is SpringManAI) ? __instance : null);
if (val4 == null)
{
JesterAI val5 = (JesterAI)(object)((__instance is JesterAI) ? __instance : null);
if (val5 != null && KillableEnemyManager.Instance.DoJesterKill)
{
InitializeKillableData(__instance);
KillableEnemy component = ((Component)val5).gameObject.GetComponent<KillableEnemy>();
component.StartingHealth = KillableEnemyManager.Instance.CoilHeadHP;
component.CurrentHealth = KillableEnemyManager.Instance.CoilHeadHP;
component.EnemyAI = (EnemyAI)(object)val5;
component.EnemyType = EnemyType.JESTER;
component.NetworkObjectId = ((NetworkBehaviour)val5).NetworkObjectId;
mls.LogInfo((object)"Found a Jester. Registering killable data.");
}
}
else if (KillableEnemyManager.Instance.DoCoilHeadKill)
{
InitializeKillableData(__instance);
KillableEnemy component2 = ((Component)val4).gameObject.GetComponent<KillableEnemy>();
component2.StartingHealth = KillableEnemyManager.Instance.CoilHeadHP;
component2.CurrentHealth = KillableEnemyManager.Instance.CoilHeadHP;
component2.EnemyAI = (EnemyAI)(object)val4;
component2.EnemyType = EnemyType.COIL_HEAD;
component2.NetworkObjectId = ((NetworkBehaviour)val4).NetworkObjectId;
mls.LogInfo((object)"Found a Coilhead. Registering killable data.");
}
}
else if (KillableEnemyManager.Instance.DoSporeLizardKill)
{
InitializeKillableData(__instance);
KillableEnemy component3 = ((Component)val3).gameObject.GetComponent<KillableEnemy>();
component3.StartingHealth = KillableEnemyManager.Instance.SporeLizardHP;
component3.CurrentHealth = KillableEnemyManager.Instance.SporeLizardHP;
component3.EnemyAI = (EnemyAI)(object)val3;
component3.EnemyType = EnemyType.SPORE_LIZARD;
component3.NetworkObjectId = ((NetworkBehaviour)val3).NetworkObjectId;
mls.LogInfo((object)"Found a Spore Lizard. Registering killable data.");
}
}
else if (KillableEnemyManager.Instance.DoGhostGirlKill)
{
InitializeKillableData(__instance);
KillableEnemy component4 = ((Component)val2).gameObject.GetComponent<KillableEnemy>();
component4.StartingHealth = KillableEnemyManager.Instance.GhostGirlHP;
component4.CurrentHealth = KillableEnemyManager.Instance.GhostGirlHP;
component4.EnemyAI = (EnemyAI)(object)val2;
component4.EnemyType = EnemyType.GHOST_GIRL;
component4.NetworkObjectId = ((NetworkBehaviour)val2).NetworkObjectId;
mls.LogInfo((object)"Found a Ghost Girl. Registering killable data.");
}
}
else if (KillableEnemyManager.Instance.DoGiantKill)
{
InitializeKillableData(__instance);
KillableEnemy component5 = ((Component)val).gameObject.GetComponent<KillableEnemy>();
component5.StartingHealth = KillableEnemyManager.Instance.GiantHP;
component5.CurrentHealth = KillableEnemyManager.Instance.GiantHP;
component5.EnemyAI = (EnemyAI)(object)val;
component5.EnemyType = EnemyType.GIANT;
component5.NetworkObjectId = ((NetworkBehaviour)val).NetworkObjectId;
mls.LogInfo((object)"Found a Forest Giant. Registering killable data.");
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(EnemyAI), "HitEnemy")]
private static void HitPostfix(EnemyAI __instance, int force = 1, PlayerControllerB playerWhoHit = null, bool playHitSFX = false)
{
if (((NetworkBehaviour)__instance).IsHost || ((NetworkBehaviour)__instance).IsServer)
{
KillableEnemy component = ((Component)__instance).gameObject.GetComponent<KillableEnemy>();
if (Object.op_Implicit((Object)(object)component))
{
((Component)StartOfRound.Instance.allPlayerScripts[0]).GetComponent<KillableEnemyEmitter>().DoDamageServerRpc(((NetworkBehaviour)__instance).NetworkObjectId, force);
}
}
}
private static void InitializeKillableData(EnemyAI enemyAI)
{
((Component)enemyAI).gameObject.AddComponent<KillableEnemy>();
KillableEnemyManager.Instance.EnemyAIToNetworkObjectID[enemyAI] = ((NetworkBehaviour)enemyAI).NetworkObjectId;
KillableEnemyManager.Instance.NetworkObjectIDToEnemyAI[((NetworkBehaviour)enemyAI).NetworkObjectId] = enemyAI;
}
}
}