Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of ZombiesPlush v1.3.0
BepInEx/plugins/com.github.zehsteam.ZombiesPlush.dll
Decompiled 2 days ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Bootstrap; using BepInEx.Configuration; using BepInEx.Logging; using Dawn; using GameNetcodeStuff; using HarmonyLib; using LethalConfig; using LethalConfig.ConfigItems; using LethalConfig.ConfigItems.Options; using Microsoft.CodeAnalysis; using Unity.Netcode; using UnityEngine; using com.github.zehsteam.TakeyPlush.MonoBehaviours; using com.github.zehsteam.ZombiesPlush.Data; using com.github.zehsteam.ZombiesPlush.Dependencies; using com.github.zehsteam.ZombiesPlush.Enums; using com.github.zehsteam.ZombiesPlush.Extensions; using com.github.zehsteam.ZombiesPlush.Helpers; using com.github.zehsteam.ZombiesPlush.Managers; using com.github.zehsteam.ZombiesPlush.MonoBehaviours; using com.github.zehsteam.ZombiesPlush.NetcodePatcher; using com.github.zehsteam.ZombiesPlush.Patches; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: IgnoresAccessChecksTo("Assembly-CSharp-firstpass")] [assembly: IgnoresAccessChecksTo("Assembly-CSharp")] [assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")] [assembly: AssemblyCompany("Zehs")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyCopyright("Copyright © 2026 Zehs")] [assembly: AssemblyDescription("Adds 1 scrap and 1 enemy skin. The Smol Zombies plushie has over 11 variants with each one having a unique appearence and voice lines. Some variants have special interactions and behaviours.")] [assembly: AssemblyFileVersion("1.3.0.0")] [assembly: AssemblyInformationalVersion("1.3.0+5ed1f3050a52d18174cd71a7752210e61735dcc0")] [assembly: AssemblyProduct("ZombiesPlush")] [assembly: AssemblyTitle("com.github.zehsteam.ZombiesPlush")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.3.0.0")] [module: UnverifiableCode] [module: RefSafetyRules(11)] [module: NetcodePatchedAssembly] [CompilerGenerated] internal sealed class <>z__ReadOnlySingleElementList<T> : IEnumerable, ICollection, IList, IEnumerable<T>, IReadOnlyCollection<T>, IReadOnlyList<T>, ICollection<T>, IList<T> { private sealed class Enumerator : IDisposable, IEnumerator, IEnumerator<T> { object IEnumerator.Current => _item; T IEnumerator<T>.Current => _item; public Enumerator(T item) { _item = item; } bool IEnumerator.MoveNext() { if (!_moveNextCalled) { return _moveNextCalled = true; } return false; } void IEnumerator.Reset() { _moveNextCalled = false; } void IDisposable.Dispose() { } } int ICollection.Count => 1; bool ICollection.IsSynchronized => false; object ICollection.SyncRoot => this; object IList.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } bool IList.IsFixedSize => true; bool IList.IsReadOnly => true; int IReadOnlyCollection<T>.Count => 1; T IReadOnlyList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } } int ICollection<T>.Count => 1; bool ICollection<T>.IsReadOnly => true; T IList<T>.this[int index] { get { if (index != 0) { throw new IndexOutOfRangeException(); } return _item; } set { throw new NotSupportedException(); } } public <>z__ReadOnlySingleElementList(T item) { _item = item; } IEnumerator IEnumerable.GetEnumerator() { return new Enumerator(_item); } void ICollection.CopyTo(Array array, int index) { array.SetValue(_item, index); } int IList.Add(object value) { throw new NotSupportedException(); } void IList.Clear() { throw new NotSupportedException(); } bool IList.Contains(object value) { return EqualityComparer<T>.Default.Equals(_item, (T)value); } int IList.IndexOf(object value) { if (!EqualityComparer<T>.Default.Equals(_item, (T)value)) { return -1; } return 0; } void IList.Insert(int index, object value) { throw new NotSupportedException(); } void IList.Remove(object value) { throw new NotSupportedException(); } void IList.RemoveAt(int index) { throw new NotSupportedException(); } IEnumerator<T> IEnumerable<T>.GetEnumerator() { return new Enumerator(_item); } void ICollection<T>.Add(T item) { throw new NotSupportedException(); } void ICollection<T>.Clear() { throw new NotSupportedException(); } bool ICollection<T>.Contains(T item) { return EqualityComparer<T>.Default.Equals(_item, item); } void ICollection<T>.CopyTo(T[] array, int arrayIndex) { array[arrayIndex] = _item; } bool ICollection<T>.Remove(T item) { throw new NotSupportedException(); } int IList<T>.IndexOf(T item) { if (!EqualityComparer<T>.Default.Equals(_item, item)) { return -1; } return 0; } void IList<T>.Insert(int index, T item) { throw new NotSupportedException(); } void IList<T>.RemoveAt(int index) { throw new NotSupportedException(); } } namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)] internal sealed class NullableAttribute : Attribute { public readonly byte[] NullableFlags; public NullableAttribute(byte P_0) { NullableFlags = new byte[1] { P_0 }; } public NullableAttribute(byte[] P_0) { NullableFlags = P_0; } } [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)] internal sealed class NullableContextAttribute : Attribute { public readonly byte Flag; public NullableContextAttribute(byte P_0) { Flag = P_0; } } [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 com.github.zehsteam.ZombiesPlush { public static class Api { public static bool ForceMaskedZombiesSpawns { get { return MaskedPlayerEnemy_Patches.ForceMaskedZombiesSpawns; } set { MaskedPlayerEnemy_Patches.ForceMaskedZombiesSpawns = value; } } [Obsolete("forceMaskedZombiesSpawns is deprecated, please use ForceMaskedZombiesSpawns instead.", true)] public static bool forceMaskedZombiesSpawns { get { return MaskedPlayerEnemy_Patches.ForceMaskedZombiesSpawns; } set { MaskedPlayerEnemy_Patches.ForceMaskedZombiesSpawns = value; } } public static bool SetMaskedZombiesOnServer(MaskedPlayerEnemy maskedPlayerEnemy) { return MaskedPlayerEnemy_Patches.SetMaskedZombies_Server(maskedPlayerEnemy); } } internal static class Assets { public static readonly string AssetBundleFileName = "zombiesplush_assets"; public static AssetBundle AssetBundle { get; private set; } public static bool IsLoaded { get; private set; } public static GameObject NetworkHandlerPrefab { get; private set; } public static GameObject MaskedZombiesControllerPrefab { get; private set; } public static Item SmolZombies { get; private set; } public static Item Poop { get; private set; } public static Item GoldenPoop { get; private set; } public static void Load() { string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string text = Path.Combine(directoryName, AssetBundleFileName); if (!File.Exists(text)) { Logger.LogFatal("Failed to load assets. AssetBundle file could not be found at path \"" + text + "\". Make sure the \"" + AssetBundleFileName + "\" file is in the same folder as the mod's DLL file."); } else { AssetBundle = AssetBundle.LoadFromFile(text); if ((Object)(object)AssetBundle == (Object)null) { Logger.LogFatal("Failed to load assets. AssetBundle is null."); return; } OnAssetBundleLoaded(AssetBundle); IsLoaded = true; } } private static void OnAssetBundleLoaded(AssetBundle assetBundle) { NetworkHandlerPrefab = LoadAsset<GameObject>("NetworkHandler", assetBundle); NetworkHandlerPrefab.AddComponent<PluginNetworkBehaviour>(); MaskedZombiesControllerPrefab = LoadAsset<GameObject>("MaskedZombiesController", assetBundle); SmolZombies = LoadAsset<Item>("SmolZombies", assetBundle); Poop = LoadAsset<Item>("Poop", assetBundle); GoldenPoop = LoadAsset<Item>("GoldenPoop", assetBundle); } private static T LoadAsset<T>(string name, AssetBundle assetBundle) where T : Object { if (string.IsNullOrWhiteSpace(name)) { Logger.LogError("Failed to load asset of type \"" + typeof(T).Name + "\" from AssetBundle. Name is null or whitespace."); return default(T); } if ((Object)(object)assetBundle == (Object)null) { Logger.LogError("Failed to load asset of type \"" + typeof(T).Name + "\" with name \"" + name + "\" from AssetBundle. AssetBundle is null."); return default(T); } T val = assetBundle.LoadAsset<T>(name); if ((Object)(object)val == (Object)null) { Logger.LogError("Failed to load asset of type \"" + typeof(T).Name + "\" with name \"" + name + "\" from AssetBundle. No asset found with that type and name."); return default(T); } return val; } private static bool TryLoadAsset<T>(string name, AssetBundle assetBundle, out T asset) where T : Object { asset = LoadAsset<T>(name, assetBundle); return (Object)(object)asset != (Object)null; } } internal static class Logger { public static ManualLogSource ManualLogSource { get; private set; } public static bool IsExtendedLoggingEnabled => ConfigManager.Misc_ExtendedLogging?.Value ?? false; public static void Initialize(ManualLogSource manualLogSource) { ManualLogSource = manualLogSource; } public static void LogDebug(object data) { Log((LogLevel)32, data); } public static void LogInfo(object data, bool extended = false) { Log((LogLevel)16, data, extended); } public static void LogMessage(object data, bool extended = false) { Log((LogLevel)8, data, extended); } public static void LogWarning(object data, bool extended = false) { Log((LogLevel)4, data, extended); } public static void LogError(object data, bool extended = false) { Log((LogLevel)2, data, extended); } public static void LogFatal(object data, bool extended = false) { Log((LogLevel)1, data, extended); } public static void Log(LogLevel logLevel, object data, bool extended = false) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) if (!extended || IsExtendedLoggingEnabled) { ManualLogSource manualLogSource = ManualLogSource; if (manualLogSource != null) { manualLogSource.Log(logLevel, data); } } } } [BepInPlugin("com.github.zehsteam.ZombiesPlush", "ZombiesPlush", "1.3.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInDependency(/*Could not decode attribute arguments.*/)] internal class Plugin : BaseUnityPlugin { private readonly Harmony _harmony = new Harmony("com.github.zehsteam.ZombiesPlush"); internal static Plugin Instance { get; private set; } private void Awake() { Instance = this; Logger.Initialize(Logger.CreateLogSource("com.github.zehsteam.ZombiesPlush")); Logger.LogInfo("ZombiesPlush has awoken!"); _harmony.PatchAll(typeof(StartOfRound_Patches)); _harmony.PatchAll(typeof(PlayerControllerB_Patches)); _harmony.PatchAll(typeof(MaskedPlayerEnemy_Patches)); _harmony.PatchAll(typeof(NoisemakerProp_Patches)); _harmony.PatchAll(typeof(GiftBoxItem_Patches)); ConfigManager.Initialize(((BaseUnityPlugin)this).Config); Assets.Load(); RegisterNetworkPrefabs(); RegisterItems(); NetworkUtils.NetcodePatcherAwake(); } private void RegisterNetworkPrefabs() { DawnLib.RegisterNetworkPrefab(Assets.NetworkHandlerPrefab); DawnLib.RegisterNetworkPrefab(Assets.MaskedZombiesControllerPrefab); DawnLib.FixMixerGroups(Assets.MaskedZombiesControllerPrefab); } private void RegisterItems() { ItemHelper.RegisterScrap(ZombiesPlushKeys.SmolZombies, Assets.SmolZombies, ConfigManager.SmolZombies_SpawnWeight.Value); ItemHelper.RegisterScrap(ZombiesPlushKeys.Poop, Assets.Poop, 0); ItemHelper.RegisterScrap(ZombiesPlushKeys.GoldenPoop, Assets.GoldenPoop, 0); } } public static class ZombiesPlushKeys { public static readonly NamespacedKey<DawnItemInfo> SmolZombies = NamespacedKey<DawnItemInfo>.From("zombies_plush", "smol_zombies"); public static readonly NamespacedKey<DawnItemInfo> Poop = NamespacedKey<DawnItemInfo>.From("zombies_plush", "poop"); public static readonly NamespacedKey<DawnItemInfo> GoldenPoop = NamespacedKey<DawnItemInfo>.From("zombies_plush", "golden_poop"); } public static class MyPluginInfo { public const string PLUGIN_GUID = "com.github.zehsteam.ZombiesPlush"; public const string PLUGIN_NAME = "ZombiesPlush"; public const string PLUGIN_VERSION = "1.3.0"; } } namespace com.github.zehsteam.ZombiesPlush.Patches { [HarmonyPatch(typeof(GiftBoxItem))] internal static class GiftBoxItem_Patches { [HarmonyPatch("ItemActivate")] [HarmonyPrefix] private static void ItemActivate_Patch(GiftBoxItem __instance) { if (!PlayerUtils.IsLocalPlayer(((GrabbableObject)__instance).playerHeldBy)) { return; } foreach (ZombiesBehaviour item in PlayerUtils.GetSmolZombiesInLocalPlayerInventory()) { item.SetSpecialVariantServerRpc(ZombiesVariantType.Christmas); } } } [HarmonyPatch(typeof(MaskedPlayerEnemy))] internal static class MaskedPlayerEnemy_Patches { public static bool ForceMaskedZombiesSpawns = false; public static Dictionary<MaskedPlayerEnemy, MaskedZombiesBehaviour> MaskedZombiesPairs { get; private set; } = new Dictionary<MaskedPlayerEnemy, MaskedZombiesBehaviour>(); public static void OnShipHasLeft() { if (!NetworkUtils.IsServer) { return; } int num = 0; NetworkObject val = default(NetworkObject); foreach (MaskedZombiesBehaviour value in MaskedZombiesPairs.Values) { if (!((Object)(object)value == (Object)null) && ((NetworkBehaviour)value).IsSpawned && ((Component)value).TryGetComponent<NetworkObject>(ref val)) { val.Despawn(true); num++; Logger.LogInfo("Despawned MaskedZombiesController.", extended: true); } } Logger.LogInfo($"Finished despawning {num}/{MaskedZombiesPairs.Count} MaskedZombiesController(s)", extended: true); MaskedZombiesPairs.Clear(); ForceMaskedZombiesSpawns = false; } [HarmonyPatch("Start")] [HarmonyPostfix] private static void Start_Patch(MaskedPlayerEnemy __instance) { if (NetworkUtils.IsServer && (Utils.RollPercentChance(ConfigManager.MaskedZombies_SpawnChance.Value) || ForceMaskedZombiesSpawns)) { SetMaskedZombies_Server(__instance); } } public static bool SetMaskedZombies_Server(MaskedPlayerEnemy maskedPlayerEnemy) { if (!NetworkUtils.IsServer) { return false; } if (MaskedZombiesPairs.ContainsKey(maskedPlayerEnemy)) { Logger.LogError("Failed to set masked zombies on server. MaskedPlayerEnemy is already a masked zombies."); return false; } try { GameObject val = Object.Instantiate<GameObject>(Assets.MaskedZombiesControllerPrefab, ((Component)maskedPlayerEnemy).transform); val.GetComponent<NetworkObject>().Spawn(false); val.transform.SetParent(((Component)maskedPlayerEnemy).transform); MaskedZombiesPairs.Add(maskedPlayerEnemy, val.GetComponent<MaskedZombiesBehaviour>()); Logger.LogInfo("Spawned masked zombies.", extended: true); return true; } catch (Exception arg) { Logger.LogError($"Failed to set masked zombies on server. {arg}"); } return false; } [HarmonyPatch("KillPlayerAnimationClientRpc")] [HarmonyPostfix] private static void KillPlayerAnimationClientRpc_Patch(MaskedPlayerEnemy __instance) { if (NetworkUtils.IsExecutingRPCMethod((NetworkBehaviour)(object)__instance) && __instance.inKillAnimation && ((EnemyAI)__instance).inSpecialAnimation && !((Object)(object)((EnemyAI)__instance).inSpecialAnimationWithPlayer == (Object)null) && !((EnemyAI)__instance).inSpecialAnimationWithPlayer.isPlayerDead) { SetZombiesHead_Server(__instance, ZombiesVariantType.Heart); } } [HarmonyPatch("FinishKillAnimation")] [HarmonyPrefix] private static void FinishKillAnimation_Patch(MaskedPlayerEnemy __instance, bool killedPlayer) { SetZombiesHead_Server(__instance, ZombiesVariantType.Angry); } private static void SetZombiesHead_Server(MaskedPlayerEnemy maskedPlayerEnemy, ZombiesVariantType state) { if (NetworkUtils.IsServer && MaskedZombiesPairs.TryGetValue(maskedPlayerEnemy, out var value)) { value.SetZombiesHead_ServerRpc(state); } } } [HarmonyPatch(typeof(NoisemakerProp))] internal static class NoisemakerProp_Patches { [HarmonyPatch("ItemActivate")] [HarmonyPostfix] private static void ItemActivate_Patch(NoisemakerProp __instance) { if (PlayerUtils.IsLocalPlayer(((GrabbableObject)__instance).playerHeldBy) && !((Object)(object)((GrabbableObject)__instance).itemProperties == (Object)null)) { string itemName = ((GrabbableObject)__instance).itemProperties.itemName; if (itemName.Equals("Clown horn", StringComparison.OrdinalIgnoreCase)) { ItemActivate_ClownHorn(__instance); } else if (itemName.Equals("Hairdryer", StringComparison.OrdinalIgnoreCase)) { ItemActivate_Hairdryer(__instance); } } } private static void ItemActivate_ClownHorn(NoisemakerProp noisemakerProp) { foreach (ZombiesBehaviour item in PlayerUtils.GetSmolZombiesInLocalPlayerInventory()) { item.SetSpecialVariantServerRpc(ZombiesVariantType.Clown); } } private static void ItemActivate_Hairdryer(NoisemakerProp noisemakerProp) { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) PlayerControllerB localPlayerScript = PlayerUtils.LocalPlayerScript; if ((Object)(object)localPlayerScript == (Object)null) { return; } Transform transform = ((Component)localPlayerScript.gameplayCamera).transform; RaycastHit[] array = Physics.RaycastAll(transform.position, transform.forward, 2.5f, LayerMask.GetMask(new string[1] { "Props" })); RaycastHit[] array2 = array; ZombiesBehaviour zombiesBehaviour = default(ZombiesBehaviour); for (int i = 0; i < array2.Length; i++) { RaycastHit val = array2[i]; if (((Component)((RaycastHit)(ref val)).collider).TryGetComponent<ZombiesBehaviour>(ref zombiesBehaviour)) { zombiesBehaviour.SetSpecialVariantServerRpc(ZombiesVariantType.Sunburnt); } } } } [HarmonyPatch(typeof(PlayerControllerB))] internal static class PlayerControllerB_Patches { [CompilerGenerated] private sealed class <DamagePlayerNextFrameCoroutine>d__3 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public PlayerControllerB playerScript; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <DamagePlayerNextFrameCoroutine>d__3(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = null; <>1__state = 1; return true; case 1: <>1__state = -1; if (playerScript.isPlayerDead) { return false; } foreach (ZombiesBehaviour item in PlayerUtils.GetSmolZombiesInLocalPlayerInventory()) { item.OnLocalPlayerHoldingPlushieTookDamage(); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } private static float _drunkCheckCooldown = 1f; private static float _drunkCheckTimer; [HarmonyPatch("DamagePlayer")] [HarmonyPrefix] private static void DamagePlayer_Patch(PlayerControllerB __instance, int damageNumber) { if (PlayerUtils.IsLocalPlayer(__instance) && !__instance.isPlayerDead && damageNumber > 0) { CoroutineRunner.Start(DamagePlayerNextFrameCoroutine(__instance)); } } [IteratorStateMachine(typeof(<DamagePlayerNextFrameCoroutine>d__3))] private static IEnumerator DamagePlayerNextFrameCoroutine(PlayerControllerB playerScript) { //yield-return decompiler failed: Unexpected instruction in Iterator.Dispose() return new <DamagePlayerNextFrameCoroutine>d__3(0) { playerScript = playerScript }; } [HarmonyPatch("Update")] [HarmonyPrefix] private static void Update_Patch(PlayerControllerB __instance) { if (!PlayerUtils.IsLocalPlayer(__instance) || __instance.isPlayerDead) { return; } if (__instance.drunkness > 0f) { if (_drunkCheckTimer >= _drunkCheckCooldown) { _drunkCheckTimer = 0f; { foreach (ZombiesBehaviour item in PlayerUtils.GetSmolZombiesInLocalPlayerInventory()) { if (NetworkUtils.IsServer) { item.SetDrunkOnServer(); } else { item.SetDrunkServerRpc(); } } return; } } _drunkCheckTimer += Time.deltaTime; } else { _drunkCheckTimer = 0f; } } [HarmonyPatch("PerformEmote")] [HarmonyPostfix] private static void PerformEmote_Patch(PlayerControllerB __instance, int emoteID) { if (!PlayerUtils.IsLocalPlayer(__instance) || __instance.isPlayerDead || !__instance.performingEmote || emoteID != 1 || !UnlockableHelper.HasActiveDiscoBall()) { return; } foreach (ZombiesBehaviour item in PlayerUtils.GetSmolZombiesInLocalPlayerInventory()) { item.SetSpecialVariantServerRpc(ZombiesVariantType.Party); } } [HarmonyPatch("KillPlayer")] [HarmonyPrefix] private static void KillPlayer_Patch(PlayerControllerB __instance) { if (!PlayerUtils.IsLocalPlayer(__instance) || __instance.isPlayerDead || !__instance.AllowPlayerDeath()) { return; } ZombiesVariantType specialVariantServerRpc = (PlayerDiedToShotgunFromPlayer() ? ZombiesVariantType.Panda : ZombiesVariantType.Dead); foreach (ZombiesBehaviour item in PlayerUtils.GetSmolZombiesInLocalPlayerInventory()) { item.SetSpecialVariantServerRpc(specialVariantServerRpc); } } private static bool PlayerDiedToShotgunFromPlayer() { StackTrace stackTrace = new StackTrace(); StackFrame[] frames = stackTrace.GetFrames(); foreach (StackFrame stackFrame in frames) { MethodBase method = stackFrame.GetMethod(); if (!(method.DeclaringType == null) && method.DeclaringType.Name == "ShotgunItem" && method.Name == "ShootGunClientRpc") { return true; } } return false; } } [HarmonyPatch(typeof(StartOfRound))] internal static class StartOfRound_Patches { [HarmonyPatch("Awake")] [HarmonyPostfix] private static void Awake_Patch() { SpawnNetworkHandler(); } private static void SpawnNetworkHandler() { if (NetworkUtils.IsServer) { GameObject val = Object.Instantiate<GameObject>(Assets.NetworkHandlerPrefab); val.GetComponent<NetworkObject>().Spawn(false); } } [HarmonyPatch("Start")] [HarmonyPostfix] private static void Start_Patch() { ItemHelper.OnLobbyLoaded(); } [HarmonyPatch("ShipHasLeft")] [HarmonyPostfix] private static void ShipHasLeft_Patch() { MaskedPlayerEnemy_Patches.OnShipHasLeft(); } } } namespace com.github.zehsteam.ZombiesPlush.MonoBehaviours { public abstract class AdvancedGrabbableObject : GrabbableObject { public int UniqueId { get; private set; } public string SaveKey => string.Format("{0}_{1}", "AdvancedGrabbableObject", UniqueId); public virtual void Awake() { if (NetworkUtils.IsServer) { UniqueId = Random.Range(0, 1000000); } } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); if (NetworkUtils.IsServer) { NetworkManager.Singleton.OnClientConnectedCallback += OnClientConnected; } } public override void OnNetworkDespawn() { ((NetworkBehaviour)this).OnNetworkDespawn(); if (NetworkUtils.IsServer) { NetworkManager.Singleton.OnClientConnectedCallback -= OnClientConnected; } } protected virtual void OnClientConnected(ulong clientId) { } public override int GetItemDataToSave() { return UniqueId; } public override void LoadItemSaveData(int saveData) { ((GrabbableObject)this).LoadItemSaveData(saveData); UniqueId = saveData; } protected override void __initializeVariables() { ((GrabbableObject)this).__initializeVariables(); } protected override void __initializeRpcs() { ((GrabbableObject)this).__initializeRpcs(); } protected internal override string __getTypeName() { return "AdvancedGrabbableObject"; } } public class AdvancedNoisemakerProp : AdvancedGrabbableObject { [Space(20f)] [Header("Advanced Noisemaker Prop")] [Space(5f)] public AudioSourceGroup NoiseAudio; public AudioClipGroupWithWeight[] NoiseSFX = Array.Empty<AudioClipGroupWithWeight>(); [Space(10f)] public float NoiseRange = 65f; public float MaxLoudness = 1f; public float MinLoudness = 0.95f; public float MinPitch = 1f; public float MaxPitch = 1f; [Space(10f)] public bool UseDynamicCooldown; public bool CancelActiveSFXOnItemActivate; public override void ItemActivate(bool used, bool buttonDown = true) { if (NoiseSFX.Length != 0) { int randomIndexFromWeightList = Utils.GetRandomIndexFromWeightList(NoiseSFX.Select((AudioClipGroupWithWeight x) => x.Weight).ToList()); PlaySound(randomIndexFromWeightList); } } public void PlaySound(int index) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) if (NoiseSFX.Length != 0) { PlaySoundServerRpc(index); PlaySoundOnLocalClient(index); } } [ServerRpc(RequireOwnership = false)] protected void PlaySoundServerRpc(int index, ServerRpcParams serverRpcParams = default(ServerRpcParams)) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { FastBufferWriter val = ((NetworkBehaviour)this).__beginSendServerRpc(1446525904u, serverRpcParams, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val, index); ((NetworkBehaviour)this).__endSendServerRpc(ref val, 1446525904u, serverRpcParams, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; ulong senderClientId = serverRpcParams.Receive.SenderClientId; if (((NetworkBehaviour)this).NetworkManager.ConnectedClients.ContainsKey(senderClientId)) { PlaySoundClientRpc(index, senderClientId); } } } [ClientRpc] protected void PlaySoundClientRpc(int index, ulong senderClientId) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)((NetworkBehaviour)this).__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4191135864u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, index); BytePacker.WriteValueBitPacked(val2, senderClientId); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4191135864u, val, (RpcDelivery)0); } if ((int)((NetworkBehaviour)this).__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { ((NetworkBehaviour)this).__rpc_exec_stage = (__RpcExecStage)0; if (!NetworkUtils.IsLocalClientId(senderClientId)) { PlaySoundOnLocalClient(index); } } } public void PlaySoundOnLocalClient(int index) { AudioClipGroup audioClipGroup = ((index >= 0 && index < NoiseSFX.Length) ? NoiseSFX[index] : null); PlaySoundOnLocalClient(audioClipGroup); OnPlaySoundFromIndex(index); } protected virtual void OnPlaySoundFromIndex(int index) { } public float PlaySoundOnLocalClient(AudioClip audioClip, AudioClip audioClipFar, bool stopPreviousSFX = false) { return PlaySoundOnLocalClient(new AudioClipGroup(audioClip, audioClipFar), stopPreviousSFX); } public float PlaySoundOnLocalClient(AudioClipGroup audioClipGroup, bool stopPreviousSFX = false) { //IL_00d2: Unknown result type (might be due to invalid IL or missing references) if (audioClipGroup == null || (Object)(object)audioClipGroup.AudioClip == (Object)null) { return 0f; } float num = (float)Random.Range((int)(MinLoudness * 100f), (int)(MaxLoudness * 100f)) / 100f; float pitch = (float)Random.Range((int)(MinPitch * 100f), (int)(MaxPitch * 100f)) / 100f; if (CancelActiveSFXOnItemActivate || stopPreviousSFX) { NoiseAudio.Stop(); } if (UseDynamicCooldown && !CancelActiveSFXOnItemActivate) { ((GrabbableObject)this).currentUseCooldown = audioClipGroup.Length; } NoiseAudio.Pitch = pitch; NoiseAudio.PlayOneShot(audioClipGroup, num); WalkieTalkie.TransmitOneShotAudio(NoiseAudio.AudioSource, audioClipGroup.AudioClip, num); RoundManager.Instance.PlayAudibleNoise(((Component)this).transform.position, NoiseRange, num, 0, ((GrabbableObject)this).isInElevator && StartOfRound.Instance.hangarDoorsClosed, 0); if (MinLoudness >= 0.6f && (Object)(object)((GrabbableObject)this).playerHeldBy != (Object)null) { ((GrabbableObject)this).playerHeldBy.timeSinceMakingLoudNoise = 0f; } return audioClipGroup.Length; } protected override void __initializeVariables() { base.__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(1446525904u, new RpcReceiveHandler(__rpc_handler_1446525904), "PlaySoundServerRpc"); ((NetworkBehaviour)this).__registerRpc(4191135864u, new RpcReceiveHandler(__rpc_handler_4191135864), "PlaySoundClientRpc"); base.__initializeRpcs(); } private static void __rpc_handler_1446525904(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_0040: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int index = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref index); ServerRpcParams server = rpcParams.Server; target.__rpc_exec_stage = (__RpcExecStage)1; ((AdvancedNoisemakerProp)(object)target).PlaySoundServerRpc(index, server); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_4191135864(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int index = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref index); ulong senderClientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref senderClientId); target.__rpc_exec_stage = (__RpcExecStage)1; ((AdvancedNoisemakerProp)(object)target).PlaySoundClientRpc(index, senderClientId); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "AdvancedNoisemakerProp"; } } internal class CoroutineRunner : MonoBehaviour { public static CoroutineRunner Instance { get; private set; } public static CoroutineRunner Spawn() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Expected O, but got Unknown if ((Object)(object)Instance != (Object)null) { return Instance; } GameObject val = new GameObject("ZombiesPlush CoroutineRunner", new Type[1] { typeof(CoroutineRunner) }) { hideFlags = (HideFlags)61 }; Object.DontDestroyOnLoad((Object)(object)val); return val.GetComponent<CoroutineRunner>(); } private void Awake() { if ((Object)(object)Instance != (Object)null && (Object)(object)Instance != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); } else { Instance = this; } } public static Coroutine Start(IEnumerator routine) { if ((Object)(object)Instance == (Object)null) { CoroutineRunner coroutineRunner = Spawn(); return ((coroutineRunner != null) ? ((MonoBehaviour)coroutineRunner).StartCoroutine(routine) : null) ?? null; } CoroutineRunner instance = Instance; return ((instance != null) ? ((MonoBehaviour)instance).StartCoroutine(routine) : null) ?? null; } public static void Stop(IEnumerator routine) { CoroutineRunner instance = Instance; if (instance != null) { ((MonoBehaviour)instance).StopCoroutine(routine); } } public static void Stop(Coroutine routine) { CoroutineRunner instance = Instance; if (instance != null) { ((MonoBehaviour)instance).StopCoroutine(routine); } } } public class EnemyRandomPeriodicAudioPlayer : NetworkBehaviour { public bool OnlyPlayWhenEnemyIsAlive = true; public AudioClip[] RandomClips = Array.Empty<AudioClip>(); public AudioSource ThisAudio; public float AudioMinInterval = 6f; public float AudioMaxInterval = 16f; public float AudioChancePercent = 40f; private EnemyAI _enemyAI; private float _timer; private float _interval; private void Start() { _enemyAI = ((Component)((Component)this).transform.parent).GetComponent<EnemyAI>(); } private void Update() { if (!NetworkUtils.IsServer || (OnlyPlayWhenEnemyIsAlive && (Object)(object)_enemyAI == (Object)null) || (OnlyPlayWhenEnemyIsAlive && _enemyAI.isEnemyDead)) { return; } if (_timer >= _interval) { if (Utils.RollPercentChance(AudioChancePercent)) { PlayRandomAudioClientRpc(Random.Range(0, RandomClips.Length)); } _timer = 0f; _interval = Random.Range(AudioChancePercent, AudioMaxInterval); } else { _timer += Time.deltaTime; } } [ClientRpc] public void PlayRandomAudioClientRpc(int clipIndex) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3922081718u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, clipIndex); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3922081718u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; PlayAudio(clipIndex); } } } private void PlayAudio(int clipIndex) { //IL_004a: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)ThisAudio == (Object)null)) { AudioClip val = RandomClips[clipIndex]; ThisAudio.PlayOneShot(val, 1f); WalkieTalkie.TransmitOneShotAudio(ThisAudio, val, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)ThisAudio).transform.position, 7f, 0.6f, 0, false, 0); } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(3922081718u, new RpcReceiveHandler(__rpc_handler_3922081718), "PlayRandomAudioClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_3922081718(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: 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_0050: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { int clipIndex = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref clipIndex); target.__rpc_exec_stage = (__RpcExecStage)1; ((EnemyRandomPeriodicAudioPlayer)(object)target).PlayRandomAudioClientRpc(clipIndex); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "EnemyRandomPeriodicAudioPlayer"; } } public class MaskedZombiesBehaviour : NetworkBehaviour { public GameObject AngryHeadPrefab; public GameObject HeartHeadPrefab; public AudioClip ElloSFX; public Material SuitMaterial; private MaskedPlayerEnemy _maskedPlayerEnemy; private GameObject _angryHeadObject; private GameObject _heartHeadObject; private AudioSource _voiceAudio; public ZombiesVariantType State { get; private set; } private void Start() { _maskedPlayerEnemy = ((Component)((Component)this).transform.parent).GetComponent<MaskedPlayerEnemy>(); SetupRandomPeriodicAudioPlayer(); SetSuitMaterial(); DisableMaskObjects(); MoveMaskFloodParticleObject(); SpawnZombiesHeadObjects(); SetZombiesHead_LocalClient(ZombiesVariantType.Angry); } private void SetupRandomPeriodicAudioPlayer() { _voiceAudio = ((Component)((Component)this).transform.parent.Find("VoiceSFX")).GetComponent<AudioSource>(); ((Component)this).GetComponent<EnemyRandomPeriodicAudioPlayer>().ThisAudio = _voiceAudio; } private void SetSuitMaterial() { if (!((Object)(object)SuitMaterial == (Object)null)) { Material[] materials = (Material[])(object)new Material[1] { SuitMaterial }; ((Renderer)_maskedPlayerEnemy.rendererLOD0).materials = materials; ((Renderer)_maskedPlayerEnemy.rendererLOD1).materials = materials; ((Renderer)_maskedPlayerEnemy.rendererLOD2).materials = materials; } } private void DisableMaskObjects() { Transform maskedHeadTransform = GetMaskedHeadTransform(); ((Component)maskedHeadTransform.Find("HeadMaskComedy")).gameObject.SetActive(false); ((Component)maskedHeadTransform.Find("HeadMaskTragedy")).gameObject.SetActive(false); } private void MoveMaskFloodParticleObject() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Transform val = GetMaskedHeadTransform().Find("MaskFloodParticle"); Vector3 localPosition = val.localPosition; localPosition.y = 0f; val.localPosition = localPosition; } private void SpawnZombiesHeadObjects() { //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) Transform maskedHeadTransform = GetMaskedHeadTransform(); Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(0f, 0.184f, 0.019f); _angryHeadObject = Object.Instantiate<GameObject>(AngryHeadPrefab, maskedHeadTransform); _angryHeadObject.transform.SetLocalPositionAndRotation(val, Quaternion.identity); _heartHeadObject = Object.Instantiate<GameObject>(HeartHeadPrefab, maskedHeadTransform); _heartHeadObject.transform.SetLocalPositionAndRotation(val, Quaternion.identity); } [ServerRpc(RequireOwnership = false)] public void SetZombiesHead_ServerRpc(ZombiesVariantType state) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1516096199u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<ZombiesVariantType>(ref state, default(ForEnums)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1516096199u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; SetZombiesHead_ClientRpc(state); SetZombiesHead_LocalClient(state); } } } [ClientRpc] public void SetZombiesHead_ClientRpc(ZombiesVariantType state) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2100117249u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<ZombiesVariantType>(ref state, default(ForEnums)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2100117249u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; if (!NetworkUtils.IsServer) { SetZombiesHead_LocalClient(state); } } } public void SetZombiesHead_LocalClient(ZombiesVariantType state) { Logger.LogInfo(string.Format("[{0}] {1}() state: {2}", "MaskedZombiesBehaviour", "SetZombiesHead_LocalClient", state), extended: true); if (state != State) { State = state; _angryHeadObject.SetActive(state == ZombiesVariantType.Angry); _heartHeadObject.SetActive(state == ZombiesVariantType.Heart); if (state == ZombiesVariantType.Heart) { PlayOneShotVoiceAudio(ElloSFX); } } } private void PlayOneShotVoiceAudio(AudioClip audioClip) { //IL_0037: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)audioClip == (Object)null)) { _voiceAudio.PlayOneShot(audioClip); WalkieTalkie.TransmitOneShotAudio(_voiceAudio, audioClip, 1f); RoundManager.Instance.PlayAudibleNoise(((Component)_voiceAudio).transform.position, 7f, 0.6f, 0, false, 0); } } private Transform GetMaskedHeadTransform() { return ((Component)this).transform.parent.GetChild(0).GetChild(3).GetChild(0) .GetChild(0) .GetChild(0) .GetChild(0) .GetChild(2); } public override void OnNetworkDespawn() { Object.Destroy((Object)(object)_angryHeadObject); Object.Destroy((Object)(object)_heartHeadObject); } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(1516096199u, new RpcReceiveHandler(__rpc_handler_1516096199), "SetZombiesHead_ServerRpc"); ((NetworkBehaviour)this).__registerRpc(2100117249u, new RpcReceiveHandler(__rpc_handler_2100117249), "SetZombiesHead_ClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_1516096199(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ZombiesVariantType zombiesHead_ServerRpc = default(ZombiesVariantType); ((FastBufferReader)(ref reader)).ReadValueSafe<ZombiesVariantType>(ref zombiesHead_ServerRpc, default(ForEnums)); target.__rpc_exec_stage = (__RpcExecStage)1; ((MaskedZombiesBehaviour)(object)target).SetZombiesHead_ServerRpc(zombiesHead_ServerRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2100117249(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_005e: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ZombiesVariantType zombiesHead_ClientRpc = default(ZombiesVariantType); ((FastBufferReader)(ref reader)).ReadValueSafe<ZombiesVariantType>(ref zombiesHead_ClientRpc, default(ForEnums)); target.__rpc_exec_stage = (__RpcExecStage)1; ((MaskedZombiesBehaviour)(object)target).SetZombiesHead_ClientRpc(zombiesHead_ClientRpc); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "MaskedZombiesBehaviour"; } } internal class PluginNetworkBehaviour : NetworkBehaviour { public static PluginNetworkBehaviour Instance { get; private set; } private void Awake() { if ((Object)(object)Instance != (Object)null && (Object)(object)Instance != (Object)(object)this) { Object.Destroy((Object)(object)((Component)this).gameObject); } else { Instance = this; } } public override void OnNetworkSpawn() { ((NetworkBehaviour)this).OnNetworkSpawn(); if ((Object)(object)Instance != (Object)null && (Object)(object)Instance != (Object)(object)this) { if (((NetworkBehaviour)this).IsServer) { ((NetworkBehaviour)this).NetworkObject.Despawn(true); } } else { Instance = this; } } [ClientRpc] public void SetGrabbableObjectScrapValueClientRpc(NetworkObjectReference networkObjectReference, int scrapValue) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_008c: 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_00e9: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4053626412u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe<NetworkObjectReference>(ref networkObjectReference, default(ForNetworkSerializable)); BytePacker.WriteValueBitPacked(val2, scrapValue); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4053626412u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; NetworkObject val3 = default(NetworkObject); GrabbableObject val4 = default(GrabbableObject); if (((NetworkObjectReference)(ref networkObjectReference)).TryGet(ref val3, (NetworkManager)null) && ((Component)val3).TryGetComponent<GrabbableObject>(ref val4)) { val4.SetScrapValue(scrapValue); } } } [ServerRpc(RequireOwnership = false)] public void SpawnExplosionServerRpc(Vector3 position, int damage, float maxDamageRange) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: 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) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2530139943u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref position); BytePacker.WriteValueBitPacked(val2, damage); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref maxDamageRange, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2530139943u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; SpawnExplosionClientRpc(position, damage, maxDamageRange); } } } [ClientRpc] public void SpawnExplosionClientRpc(Vector3 position, int damage, float maxDamageRange) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(627078499u, val, (RpcDelivery)0); ((FastBufferWriter)(ref val2)).WriteValueSafe(ref position); BytePacker.WriteValueBitPacked(val2, damage); ((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref maxDamageRange, default(ForPrimitives)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 627078499u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; Utils.CreateExplosion(position, spawnExplosionEffect: true, damage, 0f, maxDamageRange, 6, (CauseOfDeath)3); } } } [ServerRpc(RequireOwnership = false)] public void DamagePlayerServerRpc(ulong targetClientId, int damage, CauseOfDeath causeOfDeath) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager != null && networkManager.IsListening) { if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost)) { ServerRpcParams val = default(ServerRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2617461259u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, targetClientId); BytePacker.WriteValueBitPacked(val2, damage); ((FastBufferWriter)(ref val2)).WriteValueSafe<CauseOfDeath>(ref causeOfDeath, default(ForEnums)); ((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2617461259u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost)) { base.__rpc_exec_stage = (__RpcExecStage)0; DamagePlayerClientRpc(targetClientId, damage, causeOfDeath); } } } [ClientRpc] public void DamagePlayerClientRpc(ulong targetClientId, int damage, CauseOfDeath causeOfDeath) { //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Invalid comparison between Unknown and I4 //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Invalid comparison between Unknown and I4 //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager; if (networkManager == null || !networkManager.IsListening) { return; } if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost)) { ClientRpcParams val = default(ClientRpcParams); FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2134151679u, val, (RpcDelivery)0); BytePacker.WriteValueBitPacked(val2, targetClientId); BytePacker.WriteValueBitPacked(val2, damage); ((FastBufferWriter)(ref val2)).WriteValueSafe<CauseOfDeath>(ref causeOfDeath, default(ForEnums)); ((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2134151679u, val, (RpcDelivery)0); } if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost)) { return; } base.__rpc_exec_stage = (__RpcExecStage)0; if (NetworkUtils.IsLocalClientId(targetClientId)) { PlayerControllerB localPlayerScript = PlayerUtils.LocalPlayerScript; if (!((Object)(object)localPlayerScript == (Object)null)) { localPlayerScript.DamagePlayer(damage, true, true, causeOfDeath, 0, false, default(Vector3)); } } } protected override void __initializeVariables() { ((NetworkBehaviour)this).__initializeVariables(); } protected override void __initializeRpcs() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Expected O, but got Unknown //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Expected O, but got Unknown ((NetworkBehaviour)this).__registerRpc(4053626412u, new RpcReceiveHandler(__rpc_handler_4053626412), "SetGrabbableObjectScrapValueClientRpc"); ((NetworkBehaviour)this).__registerRpc(2530139943u, new RpcReceiveHandler(__rpc_handler_2530139943), "SpawnExplosionServerRpc"); ((NetworkBehaviour)this).__registerRpc(627078499u, new RpcReceiveHandler(__rpc_handler_627078499), "SpawnExplosionClientRpc"); ((NetworkBehaviour)this).__registerRpc(2617461259u, new RpcReceiveHandler(__rpc_handler_2617461259), "DamagePlayerServerRpc"); ((NetworkBehaviour)this).__registerRpc(2134151679u, new RpcReceiveHandler(__rpc_handler_2134151679), "DamagePlayerClientRpc"); ((NetworkBehaviour)this).__initializeRpcs(); } private static void __rpc_handler_4053626412(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: 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_0051: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { NetworkObjectReference networkObjectReference = default(NetworkObjectReference); ((FastBufferReader)(ref reader)).ReadValueSafe<NetworkObjectReference>(ref networkObjectReference, default(ForNetworkSerializable)); int scrapValue = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref scrapValue); target.__rpc_exec_stage = (__RpcExecStage)1; ((PluginNetworkBehaviour)(object)target).SetGrabbableObjectScrapValueClientRpc(networkObjectReference, scrapValue); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2530139943(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0030: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); int damage = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref damage); float maxDamageRange = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref maxDamageRange, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((PluginNetworkBehaviour)(object)target).SpawnExplosionServerRpc(position, damage, maxDamageRange); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_627078499(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0030: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { Vector3 position = default(Vector3); ((FastBufferReader)(ref reader)).ReadValueSafe(ref position); int damage = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref damage); float maxDamageRange = default(float); ((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref maxDamageRange, default(ForPrimitives)); target.__rpc_exec_stage = (__RpcExecStage)1; ((PluginNetworkBehaviour)(object)target).SpawnExplosionClientRpc(position, damage, maxDamageRange); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2617461259(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong targetClientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref targetClientId); int damage = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref damage); CauseOfDeath causeOfDeath = default(CauseOfDeath); ((FastBufferReader)(ref reader)).ReadValueSafe<CauseOfDeath>(ref causeOfDeath, default(ForEnums)); target.__rpc_exec_stage = (__RpcExecStage)1; ((PluginNetworkBehaviour)(object)target).DamagePlayerServerRpc(targetClientId, damage, causeOfDeath); target.__rpc_exec_stage = (__RpcExecStage)0; } } private static void __rpc_handler_2134151679(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams) { //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: 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_004f: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0071: 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) NetworkManager networkManager = target.NetworkManager; if (networkManager != null && networkManager.IsListening) { ulong targetClientId = default(ulong); ByteUnpacker.ReadValueBitPacked(reader, ref targetClientId); int damage = default(int); ByteUnpacker.ReadValueBitPacked(reader, ref damage); CauseOfDeath causeOfDeath = default(CauseOfDeath); ((FastBufferReader)(ref reader)).ReadValueSafe<CauseOfDeath>(ref causeOfDeath, default(ForEnums)); target.__rpc_exec_stage = (__RpcExecStage)1; ((PluginNetworkBehaviour)(object)target).DamagePlayerClientRpc(targetClientId, damage, causeOfDeath); target.__rpc_exec_stage = (__RpcExecStage)0; } } protected internal override string __getTypeName() { return "PluginNetworkBehaviour"; } } public class PoopBehaviour : StunGrenadeItem { [Space(20f)] [Header("Poop")] [Space(5f)] public StunGrenadeItemDamageTrigger DamageTrigger; public override void ItemActivate(bool used, bool buttonDown = true) { PlayerControllerB playerHeldBy = ((GrabbableObject)this).playerHeldBy; ((StunGrenadeItem)this).ItemActivate(used, buttonDown); DamageTrigger.WasThrown(playerHeldBy); } protected override void __initializeVariables() { ((StunGrenadeItem)this).__initializeVariables(); } protected override void __initializeRpcs() { ((StunGrenadeItem)this).__initializeRpcs(); } protected internal override string __getTypeName() { return "PoopBehaviour"; } } [RequireComponent(typeof(BoxCollider))] public class StunGrenadeItemDamageTrigger : MonoBehaviour { public StunGrenadeItem StunGrenadeItem; public int PlayerDamage = 10; public int EnemyDamage = 1; public float CollisionCheckDuration = 3f; private PlayerControllerB _playerThrownBy; private bool _checkForCollision; private float _collisionCheckTimer; private void Start() { ((Collider)((Component)this).GetComponent<BoxCollider>()).isTrigger = true; } public void WasThrown(PlayerControllerB playerThrownBy) { _checkForCollision = true; _playerThrownBy = playerThrownBy; } private void Update() { if (_checkForCollision) { if (_collisionCheckTimer >= CollisionCheckDuration) { _collisionCheckTimer = 0f; _checkForCollision = false; } else { _collisionCheckTimer += Time.deltaTime; } } } private void OnTriggerEnter(Collider other) { if (!((GrabbableObject)StunGrenadeItem).isHeld && _checkForCollision) { CheckIfHitPlayer(other); CheckIfHitEnemy(other); } } private void CheckIfHitPlayer(Collider other) { GameObject gameObject = ((Component)other).gameObject; bool flag = false; if (((Object)gameObject).name == "PlayerPhysicsBox") { gameObject = ((Component)gameObject.transform.parent).gameObject; flag = true; } PlayerControllerB val = default(PlayerControllerB); if (gameObject.TryGetComponent<PlayerControllerB>(ref val) && !val.isPlayerDead && !((Object)(object)val == (Object)(object)_playerThrownBy) && (!flag || val.isHostPlayerObject) && (!flag || !NetworkUtils.IsServer)) { PluginNetworkBehaviour.Instance.DamagePlayerServerRpc(val.actualClientId, PlayerDamage, (CauseOfDeath)0); LogInfo($"Hit player \"{val.playerUsername}\" for {PlayerDamage} damage.", extended: true); } } private void CheckIfHitEnemy(Collider other) { //IL_0038: Unknown result type (might be due to invalid IL or missing references) IHittable val = default(IHittable); if (!((Component)other).gameObject.CompareTag("Player") && ((Component)other).TryGetComponent<IHittable>(ref val)) { PlayerControllerB localPlayerScript = PlayerUtils.LocalPlayerScript; val.Hit(EnemyDamage, ((Component)localPlayerScript.gameplayCamera).transform.forward, localPlayerScript, true, 1); EnemyAICollisionDetect val2 = default(EnemyAICollisionDetect); if (((Component)other).TryGetComponent<EnemyAICollisionDetect>(ref val2)) { LogInfo($"Hit enemy \"{val2.mainScript.enemyType.enemyName}\" for {EnemyDamage} damage.", extended: true); } else { LogInfo($"Hit \"{((Object)((Component)other).gameObject).name}\" for {EnemyDamage} damage.", extended: true); } } } private void Log(LogLevel logLevel, object data, bool extended = false) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) string arg = "[" + ((Object)StunGrenadeItem).name + "]"; Logger.Log(logLevel, $"{arg} {data}", extended); } private void LogInfo(object data, bool extended = false) { Log((LogLevel)16, data, extended); } private void LogWarning(object data, bool extended = false) { Log((LogLevel)4, data, extended); } private void LogError(object data, bool extended = false) { Log((LogLevel)2, data, extended); } } public class ZombiesBehaviour : AdvancedNoisemakerProp { [CompilerGenerated] private sealed class <CooldownFromAngryAfterTimeOnServer>d__106 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public float duration; public ZombiesBehaviour <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <CooldownFromAngryAfterTimeOnServer>d__106(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Expected O, but got Unknown int num = <>1__state; ZombiesBehaviour zombiesBehaviour = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; if (!NetworkUtils.IsServer) { return false; } <>2__current = (object)new WaitForSeconds(duration); <>1__state = 1; return true; case 1: <>1__state = -1; if (!((GrabbableObject)zombiesBehaviour).isHeld) { zombiesBehaviour.SetIsCoolFromAngryOnServer(value: true); zombiesBehaviour.LogInfo("CooldownFromAngryAfterTimeOnServer Coroutine finished. Set _isCoolFromAngry to true.", extended: true); } return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <SetObjectToHitGroundSFX>d__129 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public GrabbableObject grabbableObject; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <SetObjectToHitGroundSFX>d__129(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Expected O, but got Unknown switch (<>1__state) { default: return false; case 0: <>1__state = -1; <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 1; return true; case 1: <>1__state = -1; grabbableObject.reachedFloorTarget = false; grabbableObject.hasHitGround = false; grabbableObject.fallTime = 0f; return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <StartGivePrizeInteraction>d__121 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public ZombiesBehaviour <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <StartGivePrizeInteraction>d__121(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Expected O, but got Unknown //IL_0065: Unknown result type (might be due to invalid IL or missing references) int num = <>1__state; ZombiesBehaviour zombiesBehaviour = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; if (!NetworkUtils.IsServer) { return false; } zombiesBehaviour.SetIsGivingPrizeOnServer(value: true); zombiesBehaviour.SetIsHeartOnServer(value: true); <>2__current = (object)new WaitForSeconds(zombiesBehaviour.PlayOtherSFXOnServer(ZombiesOtherSFX.PrizeSFX) + 0.1f); <>1__state = 1; return true; case 1: <>1__state = -1; zombiesBehaviour.SpawnRandomGiftOnServer(((Component)zombiesBehaviour).transform.position); zombiesBehaviour.SetIsGivingPrizeOnServer(value: false); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <StartPoopEventOnServer>d__124 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public ZombiesBehaviour <>4__this; private float <fartLength>5__2; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <StartPoopEventOnServer>d__124(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Expected O, but got Unknown //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Expected O, but got Unknown //IL_00dd: 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_0106: Expected O, but got Unknown int num = <>1__state; ZombiesBehaviour zombiesBehaviour = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; if (!NetworkUtils.IsServer) { return false; } zombiesBehaviour.SetIsPoopingOnServer(value: true); <fartLength>5__2 = zombiesBehaviour.PlayOtherSFXOnServer(ZombiesOtherSFX.FartSFX); <>2__current = (object)new WaitForSeconds(0.9f); <>1__state = 1; return true; case 1: { <>1__state = -1; bool flag = Utils.RollPercentChance(zombiesBehaviour.GoldenPoopSpawnPercentChance); Item item = Assets.Poop; int num2; int scrapValueOnServer; if (flag) { item = Assets.GoldenPoop; num2 = zombiesBehaviour.GoldenPoopValue; scrapValueOnServer = Mathf.Max(0, ((GrabbableObject)zombiesBehaviour).scrapValue - zombiesBehaviour.PoopValue); } else if (((GrabbableObject)zombiesBehaviour).scrapValue >= zombiesBehaviour.PoopValue) { num2 = zombiesBehaviour.PoopValue; scrapValueOnServer = ((GrabbableObject)zombiesBehaviour).scrapValue - num2; } else { num2 = ((GrabbableObject)zombiesBehaviour).scrapValue; scrapValueOnServer = 0; } zombiesBehaviour.SpawnItemOnServer(item, num2, zombiesBehaviour.PoopSpawnPosTransform.position); zombiesBehaviour.SetScrapValueOnServer(scrapValueOnServer); <>2__current = (object)new WaitForSeconds(<fartLength>5__2 - 0.9f); <>1__state = 2; return true; } case 2: <>1__state = -1; <>2__current = (object)new WaitForSeconds(zombiesBehaviour.PlayOtherSFXOnServer(ZombiesOtherSFX.AfterPoopSFX)); <>1__state = 3; return true; case 3: <>1__state = -1; zombiesBehaviour.SetIsPoopingOnServer(value: false); return false; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <StartSmolTakeyInterationOnServer>d__119 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public ZombiesBehaviour <>4__this; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <StartSmolTakeyInterationOnServer>d__119(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <>1__state = -2; } private bool MoveNext() { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Expected O, but got Unknown int num = <>1__state; ZombiesBehaviour zombiesBehaviour = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; if (!NetworkUtils.IsServer) { return false; } zombiesBehaviour.SetIsDoingSmolTakeyInterationOnServer(value: true); <>2__current = (object)new WaitForSeconds(zombiesBehaviour.PlayOtherSFXOnServer(ZombiesOtherSFX.ElloTakeySFX)); <>1__state = 1; return true; case 1: <>1__state = -1; <>2__current = (object)new WaitForSeconds(zombiesBehaviour.PlayOtherSFXOnServer(ZombiesOtherSFX.StinkyZombiesSFX) + 0.25f); <>1__state = 2; return true; case 2: <>1__state = -1; if (zombiesBehaviour.CanGivePrize() && !zombiesBehaviour._isGivingPrize) { <>2__current = ((MonoBehaviour)zombiesBehaviour).StartCoroutine(zombiesBehaviour.StartGivePrizeInteraction()); <>1__state = 3; return true; } break; case 3: <>1__state = -1; break; } zombiesBehaviour.SetIsDoingSmolTakeyInterationOnServer(value: false); return false; } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [CompilerGenerated] private sealed class <WaitForScrapToSpawnOnLocalClient>d__131 : IEnumerator<object>, IEnumerator, IDisposable { private int <>1__state; private object <>2__current; public NetworkObjectReference networkObjectReference; public int scrapValue; public Vector3 startFallingPos; public ZombiesBehaviour <>4__this; private NetworkObject <networkObject>5__2; private float <startTime>5__3; object IEnumerator<object>.Current { [DebuggerHidden] get { return <>2__current; } } object IEnumerator.Current { [DebuggerHidden] get { return <>2__current; } } [DebuggerHidden] public <WaitForScrapToSpawnOnLocalClient>d__131(int <>1__state) { this.<>1__state = <>1__state; } [DebuggerHidden] void IDisposable.Dispose() { <networkObject>5__2 = null; <>1__state = -2; } private bool MoveNext() { //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_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Expected O, but got Unknown //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Expected O, but got Unknown int num = <>1__state; ZombiesBehaviour zombiesBehaviour = <>4__this; switch (num) { default: return false; case 0: <>1__state = -1; <networkObject>5__2 = null; <startTime>5__3 = Time.realtimeSinceStartup; goto IL_005d; case 1: <>1__state = -1; goto IL_005d; case 2: { <>1__state = -1; GrabbableObject component = ((Component)<networkObject>5__2).GetComponent<GrabbableObject>(); RoundManager instance = RoundManager.Instance; instance.totalScrapValueInLevel += (float)component.scrapValue; component.SetScrapValue(scrapValue); component.startFallingPosition = startFallingPos; component.fallTime = 0f; component.hasHitGround = false; component.reachedFloorTarget = false; if ((Object)(object)((GrabbableObject)zombiesBehaviour).playerHeldBy != (Object)null && ((GrabbableObject)zombiesBehaviour).playerHeldBy.isInHangarShipRoom) { ((GrabbableObject)zombiesBehaviour).playerHeldBy.SetItemInElevator(true, true, component); } return false; } IL_005d: if (Time.realtimeSinceStartup - <startTime>5__3 < 8f && !((NetworkObjectReference)(ref networkObjectReference)).TryGet(ref <networkObject>5__2, (NetworkManager)null)) { <>2__current = (object)new WaitForSeconds(0.03f); <>1__state = 1; return true; } if ((Object)(object)<networkObject>5__2 == (Object)null) { Logger.LogInfo("No network object found."); return false; } <>2__current = (object)new WaitForEndOfFrame(); <>1__state = 2; return true; } } bool IEnumerator.MoveNext() { //ILSpy generated this explicit interface implementation from .override directive in MoveNext return this.MoveNext(); } [DebuggerHidden] void IEnumerator.Reset() { throw new NotSupportedException(); } } [Space(20f)] [Header("Smol Zombies")] [Space(5f)] public ZombiesVariantData[] Variants = Array.Empty<ZombiesVariantData>(); public AudioSourceGroup MusicAudio; public AudioClipGroupWithData<ZombiesOtherSFX>[] OtherSFX = Array.Empty<AudioClipGroupWithData<ZombiesOtherSFX>>(); public float OtherPlushieInteractionRadius = 3f; public GameObject AngrySymbolObject; [Space(10f)] public float HappinessDrainAmount = 20f; [Space(10f)] public float ForceAngryStateDuration = 1.75f; public float AngryCooldownDuration = 10f; public float AngryDamageInterval = 3f; public int AngryDamageAmount = 5; public int AngryExplosionDamage = 90; public float AngryExplosionMaxDamageRange = 6.5f; [Space(10f)] public float ScaredInterval = 0.5f; public float ScaredRaduis = 15f; public float ScaredDuration = 5f; public Transform PoopSpawnPosTransform; public float PoopSpawnDuration = 30f; public int PoopValue = 3; public int GoldenPoopValue = 69; public int GoldenPoopSpawnPercentChance = 5; [Space(10f)] public float DrunkDuration = 5f; private float _happiness = 100f; private bool _isScared; private bool _keepScaredState; private bool _isDrunk; private bool _isHeart; private bool _isPlayingMusic = true; private bool _isSpecialVariant; private int _specialVariantIndex; private bool _ignoreDamageEvent; private float _angryDamageTimer; private bool _forceAngryState; private float _forceAngryStateTimer; private bool _isCoolFromAngry = true; private float _scaredIntervalTimer; private float _scaredHeldTimer; private bool _spawnedPoop; private float _drunkTimer; private bool _isCoolFromDrunk = true; private bool _wasHeldByEnemy; private bool _isExploding; private bool _isDoingSmolTakeyInteration; private bool _isGivingPrize; private bool _isPooping; private Coroutine _cooldownFromAngryAfterTime; public bool IsHeldByLocalPlayer => PlayerUtils.IsLocalPlayer(((GrabbableObject)this).playerHeldBy); public ZombiesVariantType ZombieState { get; private set; } public AudioClipGroupWithWeight[] PickupSFX => GetVariantData()?.PickupSFX; public AudioClipGroupWithWeight[] SqueezeSFX => GetVariantData()?.SqueezeSFX; public AudioClipGroupWithWeight[] TransformSFX => GetVariantData()?.TransformSFX; public override void Start() { ((GrabbableObject)this).Start(); ApplyConfigSettings(); if (NetworkUtils.IsServer) { SetIsPlayingMusicOnServer(_isPlayingMusic); } } public override void Update() { ((GrabbableObject)this).Update(); if (NetworkUtils.IsServer) { ServerUpdate(); } ClientUpdate(); } public override void LoadItemSaveData(int saveData) { base.LoadItemSaveData(saveData); if (NetworkUtils.IsServer) { LogInfo("Loading item save data.", extended: true); _isSpecialVariant = GameSaveFileHelper.Load(base.SaveKey + "__isSpecialVariant", defaultValue: false); _specialVariantIndex = GameSaveFileHelper.Load(base.SaveKey + "__specialVariantIndex", 7); SetHappinessOnServer(GameSaveFileHelper.Load(base.SaveKey + "__happiness", 100f), updateZombieState: false); SetIsScaredOnServer(GameSaveFileHelper.Load(base.SaveKey + "__isScared", defaultValue: false), updateZombieState: false); SetIsDrunkOnServer(GameSaveFileHelper.Load(base.SaveKey + "__isDrunk", defaultValue: false), updateZombieState: false); SetIsHeartOnServer(GameSaveFileHelper.Load(base.SaveKey + "__isHeart", defaultValue: false), updateZombieState: false); SetIsPlayingMusicOnLocalClient(GameSaveFileHelper.Load(base.SaveKey + "__isPlayingMusic", defaultValue: false)); _keepScaredState = GameSaveFileHelper.Load(base.SaveKey + "__keepScaredState", defaultValue: false); UpdateZombieStateOnServer(); } } public override int GetItemDataToSave() { SaveItemData(); return base.GetItemDataToSave(); } private void SaveItemData() { if (NetworkUtils.IsServer) { GameSaveFileHelper.Save(base.SaveKey + "__happiness", _happiness); GameSaveFileHelper.Save(base.SaveKey + "__isScared", _isScared); GameSaveFileHelper.Save(base.SaveKey + "__isDrunk", _isDrunk); GameSaveFileHelper.Save(base.SaveKey + "__isHeart", _isHeart); GameSaveFileHelper.Save(base.SaveKey + "__isPlayingMusic", _isPlayingMusic); GameSaveFileHelper.Save(base.SaveKey + "__keepScaredState", _keepScaredState); GameSaveFileHelper.Save(base.SaveKey + "__isSpecialVariant", _isSpecialVariant); GameSaveFileHelper.Save(base.SaveKey + "__specialVariantIndex", _specialVariantIndex); LogInfo($"Saved item data. _happiness: {_happiness}, _isScared: {_isScared}, _isDrunk: {_isDrunk}, _isHeart: {_isHeart}, _isPlayingMusic: {_isPlayingMusic}, _keepScaredState: {_keepScaredState}, _isSpecialVariant: {_isSpecialVariant}, _specialVariantIndex: {_specialVariantIndex}", extended: true); } } public override void GrabItem() { ((GrabbableObject)this).GrabItem(); LogInfo($"GrabItem() wasHeldByEnemy: {_wasHeldByEnemy}", extended: true); if (!NetworkUtils.IsServer) { return; } if (_cooldownFromAngryAfterTime != null) { ((MonoBehaviour)this).StopCoroutine(_cooldownFromAngryAfterTime); } bool wasHeldByEnemy = _wasHeldByEnemy; if (wasHeldByEnemy) { SetIsHeartOnServer(value: true, updateZombieState: false); _wasHeldByEnemy = false; } if (_isCoolFromAngry) { SetHappinessOnServer(100f, updateZombieState: false); } if (_isCoolFromDrunk) { SetIsDrunkOnServer(value: false, updateZombieState: false); } if (!IsEnemyNearby()) { SetIsScaredOnServer(value: false, updateZombieState: false); _keepScaredState = false; } if (_isPlayingMusic) { SetIsPlayingMusicOnServer(value: false, updateZombieState: false); } UpdateZombieStateOnServer(); if (!_isDoingSmolTakeyInteration && !_isGivingPrize && !_isPooping) { if (wasHeldByEnemy) { PlayOtherSFXOnServer(ZombiesOtherSFX.RescuedSFX); } else { PlayPickupSFXOnServer(); } } } public override void GrabItemFromEnemy(EnemyAI enemy) { ((GrabbableObject)this).GrabItemFromEnemy(enemy); _wasHeldByEnemy = true; SetIsScaredOnServer(value: true); } public override void EquipItem() { ((GrabbableObject)this).EquipItem(); UpdateModel(); } public override void EnableItemMeshes(bool enable) { ((GrabbableObject)this).EnableItemMeshes(enable); UpdateModel(); } public override void ItemActivate(bool used, bool buttonDown = true) { if (!_isDoingSmolTakeyInteration && !_isGivingPrize && !_isPooping && NoiseSFX.Length != 0 && NoiseSFX.Length == SqueezeSFX.Length) { int randomIndexFromWeightList = Utils.GetRandomIndexFromWeightList(SqueezeSFX.Select((AudioClipGroupWithWeight _) => _.Weight).ToList()); PlaySound(randomIndexFromWeightList); } } public override void PocketItem() { ((GrabbableObject)this).PocketItem(); UpdateModel(); } public override void DiscardItem() { ((GrabbableObject)this).DiscardItem(); UpdateModel(); _angryDamageTimer = 0f; _forceAngryStateTimer = 0f; if (NetworkUtils.IsServer && _happiness < 100f) { if (_cooldownFromAngryAfterTime != null) { ((MonoBehaviour)this).StopCoroutine(_cooldownFromAngryAfterTime); } _cooldownFromAngryAfterTime = ((MonoBehaviour)this).StartCoroutine(CooldownFromAngryAfterTimeOnServer(AngryCooldownDuration)); LogInfo("Started CooldownFromAngryAfterTimeOnServer Coroutine.", extended: true); } } public override void PlayDropSFX() { //IL_0024: Unknown result type (might be due to invalid IL or missing references) ((GrabbableObject)this).PlayDropSFX(); if (NetworkUtils.IsServer && !_isPooping) { if (TakeyPlushProxy.IsInstalled && TakeyPlushProxy.HasSmolTakeyNearby(((Component)this).transform.position, OtherPlushieInteractionRadius) && !_isDoingSmolTakeyInteration) { ((MonoBehaviour)this).StartCoroutine(StartSmolTakeyInterationOnServer()); } else if (CanGivePrize() && !_isGivingPrize) { ((MonoBehaviour)this).StartCoroutine(StartGivePrizeInteraction()); } } } private ZombiesVariantData GetVariantData() { ZombiesVariantData[] variants = Variants; foreach (ZombiesVariantData zombiesVariantData in variants) { if (zombiesVariantData.VariantType == ZombieState) { return zombiesVariantData; } } return null; } private ZombiesVariantData GetVariantData(ZombiesVariantType variantType) { ZombiesVariantData[] variants = Variants; foreach (ZombiesVariantData zombiesVariantData in variants) { if (zombiesVariantData.VariantType == variantType) { return zombiesVariantData; } } return null; } private bool IsVariantType(ZombiesVariantType variantType) { return ZombieState == variantType; } private bool IsVariantType(params ZombiesVariantType[] variantTypes) { foreach (ZombiesVariantType zombiesVariantType in variantTypes) { if (zombiesVariantType == ZombieState) { return true; } } return false; } protected override void OnClientConnected(ulong clientId) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) if (!NetworkUtils.IsLocalClientId(clientId)) { ClientRpcParams val = default(ClientRpcParams); val.