Decompiled source of CoDZ Multiplayer v1.0.0
CoDZ_Multiplayer.dll
Decompiled 3 months 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.ComponentModel; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using Atlas; using Atlas.MappingComponents.Sandbox; using BepInEx; using BepInEx.Logging; using CustomScripts; using CustomScripts.Gamemode; using CustomScripts.Gamemode.GMDebug; using CustomScripts.Managers; using CustomScripts.Multiplayer; using CustomScripts.Objects; using CustomScripts.Objects.Weapons; using CustomScripts.Player; using CustomScripts.Powerups; using CustomScripts.Powerups.Perks; using CustomScripts.Zombie; using FistVR; using H3MP; using H3MP.Networking; using H3MP.Scripts; using HarmonyLib; using OtherLoader; using Sodalite.Api; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; using Valve.VR; [assembly: AssemblyTitle("CustomScripts")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("CustomScripts")] [assembly: AssemblyCopyright("Copyright © 2021")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("7ac675fa-8ffe-4c1b-8787-a764e1845c24")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace CustomScripts { [RequireComponent(typeof(IPurchasable))] public class CanPurchaseTextChanger : MonoBehaviour { private IPurchasable _purchasable; private IRequiresPower _requiresPower; [SerializeField] private List<Text> _texts; private void Start() { _purchasable = ((Component)this).GetComponent<IPurchasable>(); _requiresPower = ((Component)this).GetComponent<IRequiresPower>(); GMgr.OnPointsChanged = (Action)Delegate.Combine(GMgr.OnPointsChanged, new Action(UpdateTexts)); GMgr.OnPowerEnabled = (Action)Delegate.Combine(GMgr.OnPowerEnabled, new Action(UpdateTexts)); UpdateTexts(); } private void UpdateTexts() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) if (_requiresPower != null && !_requiresPower.IsPowered) { for (int i = 0; i < _texts.Count; i++) { _texts[i].text = "No power"; ((Graphic)_texts[i]).color = MonoBehaviourSingleton<GameRefs>.Instance.CannotBuyColor; } } else if (_purchasable.IsOneTimeOnly && _purchasable.AlreadyBought) { for (int j = 0; j < _texts.Count; j++) { _texts[j].text = "Out of stock"; ((Graphic)_texts[j]).color = MonoBehaviourSingleton<GameRefs>.Instance.CannotBuyColor; } } else if (MonoBehaviourSingleton<GMgr>.Instance.Points >= _purchasable.PurchaseCost) { for (int k = 0; k < _texts.Count; k++) { Text obj = _texts[k]; string text = _purchasable.PurchaseCost.ToString(); _texts[k].text = text; obj.text = text; ((Graphic)_texts[k]).color = MonoBehaviourSingleton<GameRefs>.Instance.CanBuyColor; } } else { for (int l = 0; l < _texts.Count; l++) { Text obj2 = _texts[l]; string text = _purchasable.PurchaseCost.ToString(); _texts[l].text = text; obj2.text = text; ((Graphic)_texts[l]).color = MonoBehaviourSingleton<GameRefs>.Instance.CannotBuyColor; } } } private void OnDestroy() { GMgr.OnPointsChanged = (Action)Delegate.Remove(GMgr.OnPointsChanged, new Action(UpdateTexts)); GMgr.OnPowerEnabled = (Action)Delegate.Remove(GMgr.OnPowerEnabled, new Action(UpdateTexts)); } } } namespace CustomScripts.Gamemode.GMDebug { public class CheatItemSpawner : MonoBehaviour { private void Awake() { RoundManager.OnGameStarted = (Action)Delegate.Combine(RoundManager.OnGameStarted, new Action(TrySpawning)); } private void OnDrawGizmos() { //IL_0015: 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) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: 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) //IL_0062: 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_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) Gizmos.color = new Color(0.4f, 0.4f, 0.9f, 0.5f); Gizmos.matrix = ((Component)this).transform.localToWorldMatrix; Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(0f, 0.7f, 0.25f); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(2.3f, 1.2f, 0.5f); Vector3 forward = Vector3.forward; Gizmos.DrawCube(val, val2); Gizmos.DrawLine(val, val + forward * 0.5f); } public void TrySpawning() { if (GameSettings.ItemSpawnerEnabled) { ((MonoBehaviour)this).StartCoroutine(InitializeAsync()); } } private IEnumerator InitializeAsync() { yield return null; GameObject itemSpawner = IM.Prefab_ItemSpawner; Object.Instantiate<GameObject>(itemSpawner, ((Component)this).transform.position, ((Component)this).transform.rotation).SetActive(true); Object.Destroy((Object)(object)this); } private void OnDestroy() { RoundManager.OnGameStarted = (Action)Delegate.Remove(RoundManager.OnGameStarted, new Action(TrySpawning)); } } } namespace CustomScripts { public static class Delegates { public delegate void VoidDelegate(); } public static class Extensions { public static void Shuffle<T>(this IList<T> list) { Random random = new Random(); int num = list.Count; while (num > 1) { num--; int index = random.Next(num + 1); T value = list[index]; list[index] = list[num]; list[num] = value; } } } public interface IModifier { void ApplyModifier(); } public interface IPowerUp : IModifier { void Spawn(Vector3 pos); } public abstract class PowerUp : MonoBehaviour, IPowerUp, IModifier { public AudioClip ApplyAudio; public abstract void ApplyModifier(); public abstract void OnCollect(); public abstract void Spawn(Vector3 pos); public void SyncData() { if (!Networking.IsSolo()) { int indexOf = MonoBehaviourSingleton<PowerUpManager>.Instance.GetIndexOf(this); if (Networking.IsHostOrSolo()) { MonoBehaviourSingleton<CodZNetworking>.Instance.PowerUpCollected_Send(indexOf); } else { MonoBehaviourSingleton<CodZNetworking>.Instance.Client_PowerUpCollected_Send(indexOf); } } } } public interface IPurchasable { int PurchaseCost { get; } bool IsOneTimeOnly { get; } bool AlreadyBought { get; } } public interface IRequiresPower { bool IsPowered { get; } } public interface ITrap { void OnEnemyEntered(ZombieController controller); } public class MonoBehaviourSingleton<T> : MonoBehaviour where T : Component { public static T Instance { get; private set; } public virtual void Awake() { if ((Object)(object)Instance == (Object)null) { Instance = (T)(object)((this is T) ? this : null); } else { Object.Destroy((Object)(object)((Component)this).gameObject); } } } public class Speech : MonoBehaviour { public AudioClip RaygunRolled; public AudioClip T33Rolled; public AudioClip JuggernogConsumed; public AudioClip GettingHit; public AudioClip BeingRevived; public AudioClip BuyingStaminUp; public AudioClip DoublePointsPickedUp; public AudioClip UsingPackAPunch; public AudioClip Barricading; public AudioClip RoundEnd; public AudioClip StartingGame; public AudioClip SwitchingPower; private void Awake() { MysteryBox.WeaponSpawnedEvent = (Action<WeaponData>)Delegate.Combine(MysteryBox.WeaponSpawnedEvent, new Action<WeaponData>(OnWeaponSpawned)); JuggerNogPerkBottle.ConsumedEvent = (Action)Delegate.Combine(JuggerNogPerkBottle.ConsumedEvent, new Action(OnJuggernogConsumed)); StaminUpPerkBottle.ConsumedEvent = (Action)Delegate.Combine(StaminUpPerkBottle.ConsumedEvent, new Action(OnStaminUpConsumed)); PlayerData.GettingHitEvent = (Action)Delegate.Combine(PlayerData.GettingHitEvent, new Action(OnGettingHit)); PlayerSpawner.BeingRevivedEvent = (Action)Delegate.Combine(PlayerSpawner.BeingRevivedEvent, new Action(OnBeingRevived)); PowerUpDoublePoints.PickedUpEvent = (Action)Delegate.Combine(PowerUpDoublePoints.PickedUpEvent, new Action(OnDoublePointsPickedUp)); PackAPunch.PurchaseEvent = (Action)Delegate.Combine(PackAPunch.PurchaseEvent, new Action(OnPackAPunchPurchase)); RoundManager.OnRoundChanged = (Action)Delegate.Combine(RoundManager.OnRoundChanged, new Action(OnRoundChanged)); RoundManager.OnGameStarted = (Action)Delegate.Combine(RoundManager.OnGameStarted, new Action(OnGameStarted)); GMgr.OnPowerEnabled = (Action)Delegate.Combine(GMgr.OnPowerEnabled, new Action(OnPowerTurnedOn)); } private void Start() { Window.BarricadedEvent = (Action)Delegate.Combine(Window.BarricadedEvent, new Action(OnBarricading)); } private void OnGameStarted() { if (Random.Range(0, 2000) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(StartingGame, 0.5f, 9f); RoundManager.OnGameStarted = (Action)Delegate.Remove(RoundManager.OnGameStarted, new Action(OnGameStarted)); } } private void OnRoundChanged() { if (Random.Range(0, 2500) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(RoundEnd, 0.5f, 9f); RoundManager.OnRoundChanged = (Action)Delegate.Remove(RoundManager.OnRoundChanged, new Action(OnRoundChanged)); } } private void OnBarricading() { if (Random.Range(0, 3000) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(Barricading, 0.5f, 1f); Window.BarricadedEvent = (Action)Delegate.Remove(Window.BarricadedEvent, new Action(OnBarricading)); } } private void OnPackAPunchPurchase() { if (Random.Range(0, 1500) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(UsingPackAPunch, 0.5f, 1f); PackAPunch.PurchaseEvent = (Action)Delegate.Remove(PackAPunch.PurchaseEvent, new Action(OnPackAPunchPurchase)); } } private void OnWeaponSpawned(WeaponData weapon) { if (Random.Range(0, 850) == 0) { if (weapon.Id == "aftr_raygunmk1") { MonoBehaviourSingleton<AudioManager>.Instance.Play(RaygunRolled, 0.5f); MysteryBox.WeaponSpawnedEvent = (Action<WeaponData>)Delegate.Remove(MysteryBox.WeaponSpawnedEvent, new Action<WeaponData>(OnWeaponSpawned)); } if (weapon.Id == "TT33") { MonoBehaviourSingleton<AudioManager>.Instance.Play(T33Rolled, 0.5f); MysteryBox.WeaponSpawnedEvent = (Action<WeaponData>)Delegate.Remove(MysteryBox.WeaponSpawnedEvent, new Action<WeaponData>(OnWeaponSpawned)); } } } private void OnJuggernogConsumed() { if (Random.Range(0, 1000) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(JuggernogConsumed, 0.5f, 3f); JuggerNogPerkBottle.ConsumedEvent = (Action)Delegate.Remove(JuggerNogPerkBottle.ConsumedEvent, new Action(OnJuggernogConsumed)); } } private void OnStaminUpConsumed() { if (Random.Range(0, 1000) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(BuyingStaminUp, 0.5f, 3f); StaminUpPerkBottle.ConsumedEvent = (Action)Delegate.Remove(StaminUpPerkBottle.ConsumedEvent, new Action(OnStaminUpConsumed)); } } private void OnGettingHit() { if (Random.Range(0, 2000) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(GettingHit, 0.5f, 1f); PlayerData.GettingHitEvent = (Action)Delegate.Remove(PlayerData.GettingHitEvent, new Action(OnGettingHit)); } } private void OnBeingRevived() { if (Random.Range(0, 1000) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(BeingRevived, 0.5f, 1f); PlayerSpawner.BeingRevivedEvent = (Action)Delegate.Remove(PlayerSpawner.BeingRevivedEvent, new Action(OnBeingRevived)); } } private void OnDoublePointsPickedUp() { if (Random.Range(0, 1500) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(DoublePointsPickedUp, 0.5f, 1.5f); PowerUpDoublePoints.PickedUpEvent = (Action)Delegate.Remove(PowerUpDoublePoints.PickedUpEvent, new Action(OnDoublePointsPickedUp)); } } private void OnPowerTurnedOn() { if (Random.Range(0, 1000) == 0) { MonoBehaviourSingleton<AudioManager>.Instance.Play(SwitchingPower, 0.5f, 1.5f); GMgr.OnPowerEnabled = (Action)Delegate.Remove(GMgr.OnPowerEnabled, new Action(OnPowerTurnedOn)); } } private void OnDestroy() { MysteryBox.WeaponSpawnedEvent = (Action<WeaponData>)Delegate.Remove(MysteryBox.WeaponSpawnedEvent, new Action<WeaponData>(OnWeaponSpawned)); JuggerNogPerkBottle.ConsumedEvent = (Action)Delegate.Remove(JuggerNogPerkBottle.ConsumedEvent, new Action(OnJuggernogConsumed)); StaminUpPerkBottle.ConsumedEvent = (Action)Delegate.Remove(StaminUpPerkBottle.ConsumedEvent, new Action(OnStaminUpConsumed)); PlayerData.GettingHitEvent = (Action)Delegate.Remove(PlayerData.GettingHitEvent, new Action(OnGettingHit)); PlayerSpawner.BeingRevivedEvent = (Action)Delegate.Remove(PlayerSpawner.BeingRevivedEvent, new Action(OnBeingRevived)); PowerUpDoublePoints.PickedUpEvent = (Action)Delegate.Remove(PowerUpDoublePoints.PickedUpEvent, new Action(OnDoublePointsPickedUp)); PackAPunch.PurchaseEvent = (Action)Delegate.Remove(PackAPunch.PurchaseEvent, new Action(OnPackAPunchPurchase)); Window.BarricadedEvent = (Action)Delegate.Remove(Window.BarricadedEvent, new Action(OnBarricading)); RoundManager.OnRoundChanged = (Action)Delegate.Remove(RoundManager.OnRoundChanged, new Action(OnRoundChanged)); RoundManager.OnGameStarted = (Action)Delegate.Remove(RoundManager.OnGameStarted, new Action(OnGameStarted)); GMgr.OnPowerEnabled = (Action)Delegate.Remove(GMgr.OnPowerEnabled, new Action(OnPowerTurnedOn)); } } public class StartSpawner : MonoBehaviour { public ItemSpawner WeaponSpawner; public ItemSpawner AmmoSpawner; public void Spawn() { WeaponSpawner.SpawnItem(); AmmoSpawner.SpawnItem(); } } } namespace CustomScripts.Gamemode.GMDebug { public class CustomItemSpawner : MonoBehaviour { public string ObjectId; [HideInInspector] public GameObject SpawnedObject; private void OnDrawGizmos() { //IL_0015: 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) //IL_002f: Unknown result type (might be due to invalid IL or missing references) Gizmos.color = new Color(0f, 0f, 0.6f, 0.5f); Gizmos.matrix = ((Component)this).transform.localToWorldMatrix; Gizmos.DrawSphere(Vector3.zero, 0.1f); } public GameObject Spawn() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) FVRObject val = IM.OD[ObjectId]; GameObject gameObject = ((AnvilAsset)val).GetGameObject(); GameObject val2 = Object.Instantiate<GameObject>(gameObject, ((Component)this).transform.position, ((Component)this).transform.rotation); val2.SetActive(true); SpawnedObject = val2; return val2; } } } public class DisableOnAwake : MonoBehaviour { private void Awake() { ((Component)this).gameObject.SetActive(false); } } namespace CustomScripts.Gamemode.GMDebug { public class ErrorShower : MonoBehaviourSingleton<ErrorShower> { public Text ErrorText; public void Show(string message) { ErrorText.text = message; ((Component)ErrorText).gameObject.SetActive(true); } } public class CustomDebug : MonoBehaviour { public Transform Point; public PowerUpCarpenter Carpenter; public PowerUpInstaKill InstaKill; public PowerUpDeathMachine DeathMachine; public PowerUpMaxAmmo MaxAmmo; public PowerUpDoublePoints DoublePoints; public PowerUpNuke Nuke; public Blockade TrapBlockade; public ElectroTrap ElectroTrap; public Teleport TeleportToSecondArea; public Teleport TeleportToMainArea; public DeadShotPerkBottle DeadShotPerkBottle; public Text IFFText; public Text LayerText; private bool _forcingSpecialEnemy; public GameObject Prefab; private void Update() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) if (Input.GetKeyDown((KeyCode)97)) { MonoBehaviourSingleton<RoundManager>.Instance.StartGame(); } if (Input.GetKeyDown((KeyCode)98) && MonoBehaviourSingleton<ZombieManager>.Instance.ExistingZombies.Count > 0) { Damage val = new Damage(); val.Class = (DamageClass)1; val.Dam_Piercing += 1f; val.Dam_TotalKinetic = 60000f; val.hitNormal = Vector3.back; } if (Input.GetKeyDown((KeyCode)100)) { DeadShotPerkBottle.ApplyModifier(); } if (Input.GetKeyDown((KeyCode)101)) { ((MonoBehaviour)this).StartCoroutine(MonoBehaviourSingleton<PlayerData>.Instance.ActivateStun()); } if (Input.GetKeyDown((KeyCode)109)) { MonoBehaviourSingleton<GMgr>.Instance.AddPoints(300); } if (Input.GetKeyDown((KeyCode)107)) { } if (Input.GetKeyDown((KeyCode)108)) { ElectroTrap.OnLeverPull(); } if (Input.GetKeyDown((KeyCode)47)) { MonoBehaviourSingleton<GMgr>.Instance.TurnOnPower(); } if (Input.GetKeyDown((KeyCode)105)) { Debug.Log((object)"I pressed"); int index = Random.Range(0, GameRefs.Windows.Count); if (!GameRefs.Windows[index].IsBroken()) { GameRefs.Windows[index].TearPlank(); } } if (Input.GetKeyDown((KeyCode)111)) { int index2 = Random.Range(0, GameRefs.Windows.Count); if (!GameRefs.Windows[index2].IsFullyRepaired()) { GameRefs.Windows[index2].RepairWindow(); } } if (Input.GetKeyDown((KeyCode)109)) { SpawnTestObject(); } IFFText.text = "IFF: " + GM.CurrentPlayerBody.GetPlayerIFF(); } public void SpawnCarpenter() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) Carpenter.Spawn(Point.position); } public void SpawnInstaKill() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) InstaKill.Spawn(Point.position); } public void SpawnDeathMachine() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) DeathMachine.Spawn(Point.position); } public void SpawnMaxAmmo() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) MaxAmmo.Spawn(Point.position); } public void SpawnDoublePoints() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) DoublePoints.Spawn(Point.position); } public void SpawnNuke() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) Nuke.Spawn(Point.position); } public void KillRandom() { if (MonoBehaviourSingleton<ZombieManager>.Instance.ExistingZombies.Count > 0) { MonoBehaviourSingleton<ZombieManager>.Instance.ExistingZombies[0].OnHit(99999f); } } public void ToggleForceSpecialRound() { if (_forcingSpecialEnemy) { MonoBehaviourSingleton<RoundManager>.Instance.SpecialRoundInterval = 8; _forcingSpecialEnemy = false; } else { MonoBehaviourSingleton<RoundManager>.Instance.SpecialRoundInterval = 1; _forcingSpecialEnemy = true; } } public void SpawnTestObject() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) Object.Instantiate<GameObject>(Prefab, Point.position, Quaternion.identity); } } } namespace CustomScripts { public class EndPanel : MonoBehaviourSingleton<EndPanel> { public Text KillsText; public Text RoundText; public void UpdatePanel() { KillsText.text = "Kills: " + MonoBehaviourSingleton<GMgr>.Instance.Kills; RoundText.text = "Rounds: " + MonoBehaviourSingleton<RoundManager>.Instance.RoundNumber; } } public class GameRefs : MonoBehaviourSingleton<GameRefs> { public Color CanBuyColor; public Color CannotBuyColor; [HideInInspector] public Transform Player; [SerializeField] private Transform DebugPlayer; [HideInInspector] public Transform PlayerHead; [SerializeField] private Transform DebugPlayerHead; private List<Window> _windows; private MysteryBox _mysteryBox; private MysteryBoxMover _mysteryBoxMover; private Radio _radio; private PackAPunch _packAPunch; public static List<Window> Windows => MonoBehaviourSingleton<GameRefs>.Instance._windows; public static MysteryBox MysteryBox => MonoBehaviourSingleton<GameRefs>.Instance._mysteryBox; public static MysteryBoxMover MysteryBoxMover => MonoBehaviourSingleton<GameRefs>.Instance._mysteryBoxMover; public static Radio Radio => MonoBehaviourSingleton<GameRefs>.Instance._radio; public static PackAPunch PackAPunch => MonoBehaviourSingleton<GameRefs>.Instance._packAPunch; public override void Awake() { base.Awake(); Player = DebugPlayer; PlayerHead = DebugPlayerHead; _mysteryBox = Object.FindObjectOfType<MysteryBox>(); _mysteryBoxMover = Object.FindObjectOfType<MysteryBoxMover>(); _radio = Object.FindObjectOfType<Radio>(); _packAPunch = Object.FindObjectOfType<PackAPunch>(); _windows = Object.FindObjectsOfType<Window>().ToList(); } private IEnumerator Start() { while ((Object)(object)GM.CurrentPlayerBody == (Object)null) { yield return null; } Player = ((Component)GM.CurrentPlayerBody).transform; PlayerHead = ((Component)GM.CurrentPlayerBody.Head).transform; } public bool IsPlayerClose(Transform pos, float dist) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) return Vector3.Distance(pos.position, Player.position) <= dist; } } public class GameSettings : MonoBehaviourSingleton<GameSettings> { public static Action OnSettingsChanged; public static bool HardMode; public static bool SpecialRoundDisabled; public static bool ItemSpawnerEnabled; public static bool WeakerEnemiesEnabled; public static bool WonderWeaponEnabled; public Text OptionDescriptionText; private void Start() { OptionDescriptionText.text = "Call of Duty\nZOMBIES"; if (Random.Range(0, 500) == 0) { switch (Random.Range(0, 7)) { case 0: OptionDescriptionText.text = "You are my sunshine,\nMy only sunshine"; break; case 1: OptionDescriptionText.text = "I missed you"; break; case 2: OptionDescriptionText.text = "Play with me"; break; case 3: OptionDescriptionText.text = "It's just a game, mostly"; break; case 4: OptionDescriptionText.text = "I have granted kids to hell"; break; case 5: OptionDescriptionText.text = "It's only partially your fault"; break; } } } public void RestoreDefaultSettings() { HardMode = false; ItemSpawnerEnabled = false; SpecialRoundDisabled = false; WeakerEnemiesEnabled = false; WonderWeaponEnabled = false; OptionDescriptionText.text = "Default settings restored."; if (OnSettingsChanged != null) { OnSettingsChanged(); } } public void DifficultyNormalClicked() { HardMode = false; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "Normal mode: Normal Enemy speed, HP and numbers."; } public void DifficultyHardClicked() { HardMode = true; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "Hard mode: Increased Enemy speed, HP and numbers."; } public void EnableSpecialRoundClicked() { SpecialRoundDisabled = false; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "Special round inspired by Hellhounds, occurs every 8 rounds."; } public void DisableSpecialRoundClicked() { SpecialRoundDisabled = true; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "Special round disabled."; } public void EnableItemSpawnerClicked() { ItemSpawnerEnabled = true; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "Item Spawner will appear at the starting location. Scoring will be disabled for that game."; } public void DisableItemSpawnerClicked() { ItemSpawnerEnabled = false; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "No Item Spawner. Scoring enabled"; } public void EnableWeakerEnemiesClicked() { WeakerEnemiesEnabled = true; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "Enemies have reduced HP"; } public void DisableWeakerEnemiesClicked() { WeakerEnemiesEnabled = false; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "Enemies have normal HP"; } public void EnableWonderWeaponsClicked() { WonderWeaponEnabled = true; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "Wonder weapons might spawn in MysteryBox. If playing Multiplayer, check first in other scenes if modded weapons work correctly for both players."; } public void DisableWonderWeaponsClicked() { WonderWeaponEnabled = false; if (OnSettingsChanged != null) { OnSettingsChanged(); } OptionDescriptionText.text = "Wonder weapons will not spawn in MysteryBox"; } public void ToggleBackgroundMusic() { if (OnSettingsChanged != null) { OnSettingsChanged(); } } } public class GameSettingsPanel : MonoBehaviour { public Text DifficultyNormalText; public Text DifficultyHardText; public Text SpecialRoundEnabledText; public Text SpecialRoundDisabledText; public Text ItemSpawnerEnabledText; public Text ItemSpawnerDisabledText; public Text WeakerZombiesEnabledText; public Text WeakerZombiesDisabledText; public Text WonderWeaponsEnabledText; public Text WonderWeaponsDisabledText; public Color EnabledColor; public Color DisabledColor; private void Awake() { GameSettings.OnSettingsChanged = (Action)Delegate.Combine(GameSettings.OnSettingsChanged, new Action(UpdateText)); } private void Start() { UpdateText(); } private void OnDestroy() { GameSettings.OnSettingsChanged = (Action)Delegate.Remove(GameSettings.OnSettingsChanged, new Action(UpdateText)); } private void UpdateText() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: 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_0038: 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_005e: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: 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) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_0101: 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_0127: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) ((Graphic)DifficultyNormalText).color = ((!GameSettings.HardMode) ? EnabledColor : DisabledColor); ((Graphic)DifficultyHardText).color = ((!GameSettings.HardMode) ? DisabledColor : EnabledColor); ((Graphic)SpecialRoundEnabledText).color = ((!GameSettings.SpecialRoundDisabled) ? EnabledColor : DisabledColor); ((Graphic)SpecialRoundDisabledText).color = ((!GameSettings.SpecialRoundDisabled) ? DisabledColor : EnabledColor); ((Graphic)ItemSpawnerEnabledText).color = ((!GameSettings.ItemSpawnerEnabled) ? DisabledColor : EnabledColor); ((Graphic)ItemSpawnerDisabledText).color = ((!GameSettings.ItemSpawnerEnabled) ? EnabledColor : DisabledColor); ((Graphic)WeakerZombiesEnabledText).color = ((!GameSettings.WeakerEnemiesEnabled) ? DisabledColor : EnabledColor); ((Graphic)WeakerZombiesDisabledText).color = ((!GameSettings.WeakerEnemiesEnabled) ? EnabledColor : DisabledColor); ((Graphic)WonderWeaponsEnabledText).color = ((!GameSettings.WonderWeaponEnabled) ? DisabledColor : EnabledColor); ((Graphic)WonderWeaponsDisabledText).color = ((!GameSettings.WonderWeaponEnabled) ? EnabledColor : DisabledColor); } } public class GameStart : MonoBehaviourSingleton<GameStart> { private void OnDrawGizmos() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) Gizmos.color = Color.red; Gizmos.DrawSphere(((Component)this).transform.position, 0.5f); } } public class LeverWrapper : MonoBehaviour { public UnityEvent LeverToggleEvent; public UnityEvent LeverOnEvent; public UnityEvent LeverOffEvent; public UnityEvent LeverHoldStartEvent; public UnityEvent LeverHoldEndEvent; private TrapLever _lever; private bool _isOn; private bool _isHeld; private void Awake() { _lever = ((Component)this).GetComponent<TrapLever>(); _lever.MessageTargets.Add(((Component)this).gameObject); } private void Update() { if (!_isHeld && ((FVRInteractiveObject)_lever).IsHeld) { OnHoldStart(); } else if (_isHeld && !((FVRInteractiveObject)_lever).IsHeld) { OnHoldEnd(); } } private void OnHoldStart() { _isHeld = true; if (LeverHoldStartEvent != null) { LeverHoldStartEvent.Invoke(); } } private void OnHoldEnd() { _isHeld = false; if (LeverHoldEndEvent != null) { LeverHoldEndEvent.Invoke(); } } public void ON() { if (!_isOn) { _isOn = true; if (LeverToggleEvent != null) { LeverToggleEvent.Invoke(); } if (LeverOnEvent != null) { LeverOnEvent.Invoke(); } } } public void OFF() { if (_isOn) { _isOn = false; if (LeverToggleEvent != null) { LeverToggleEvent.Invoke(); } if (LeverOffEvent != null) { LeverOffEvent.Invoke(); } } } } } namespace CustomScripts.Gamemode { public class PointsView : MonoBehaviour { public Text PointsText; private void Awake() { GMgr.OnPointsChanged = (Action)Delegate.Combine(GMgr.OnPointsChanged, new Action(OnPointsChanged)); } private void Start() { OnPointsChanged(); } private void OnDestroy() { GMgr.OnPointsChanged = (Action)Delegate.Remove(GMgr.OnPointsChanged, new Action(OnPointsChanged)); } private void OnPointsChanged() { PointsText.text = "Points: " + MonoBehaviourSingleton<GMgr>.Instance.Points; } } public class RoundView : MonoBehaviour { public Text RoundText; private void Awake() { RoundManager.OnRoundChanged = (Action)Delegate.Remove(RoundManager.OnRoundChanged, new Action(UpdateRoundText)); RoundManager.OnRoundChanged = (Action)Delegate.Combine(RoundManager.OnRoundChanged, new Action(UpdateRoundText)); } private void Start() { UpdateRoundText(); } private void OnDestroy() { RoundManager.OnRoundChanged = (Action)Delegate.Remove(RoundManager.OnRoundChanged, new Action(UpdateRoundText)); } private void UpdateRoundText() { RoundText.text = "Round: " + MonoBehaviourSingleton<RoundManager>.Instance.RoundNumber; } } } public class Location : MonoBehaviour { public List<Transform> ZombieSpawnPoints; public List<Transform> SpecialZombieSpawnPoints; private void Start() { if (ZombieSpawnPoints.Count == 0) { Debug.LogError((object)"ZombieSpawnPoints is empty, zombies don't have a place to spawn"); } if (SpecialZombieSpawnPoints.Count == 0) { Debug.LogError((object)"SpecialZombieSpawnPoints is empty, special zombies don't have a place to spawn"); } } } namespace CustomScripts.Gamemode { public class MagazineWrapper : MonoBehaviour { private FVRFireArmMagazine _magazine; private FVRFireArmClip _clip; private Speedloader _speedloader; public FireArmRoundClass RoundClass; public void Initialize(FVRFireArmMagazine magazine) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) _magazine = magazine; RoundClass = magazine.DefaultLoadingPattern.Classes[0]; } public void InitialzieWithAmmo(FVRFireArmMagazine magazine, FireArmRoundClass roundClass) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) _magazine = magazine; RoundClass = roundClass; } public void InitialzieWithAmmo(FVRFireArmClip clip, FireArmRoundClass roundClass) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) _clip = clip; RoundClass = roundClass; } public void InitialzieWithAmmo(Speedloader speedloader, FireArmRoundClass roundClass) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) _speedloader = speedloader; RoundClass = roundClass; } } } namespace CustomScripts { public class GMgr : MonoBehaviourSingleton<GMgr> { public static Action OnPointsChanged; public static Action OnPowerEnabled; [HideInInspector] public List<Blockade> Blockades; [HideInInspector] public int Points; [HideInInspector] public int TotalPoints; [HideInInspector] public bool GameStarted = false; [HideInInspector] public bool GameEnded = false; public bool PowerEnabled; public Transform PowerSwitchLever; [HideInInspector] public int Kills; private Harmony _harmony; public override void Awake() { base.Awake(); _harmony = Harmony.CreateAndPatchAll(typeof(PlayerData), (string)null); _harmony.PatchAll(typeof(PlayerSpawner)); _harmony.PatchAll(typeof(ZombieManager)); } public void PowerLeverPulled() { if (Networking.IsSolo()) { TurnOnPower(); } else if (Networking.IsHost()) { MonoBehaviourSingleton<CodZNetworking>.Instance.CustomData_Send(3); } else { MonoBehaviourSingleton<CodZNetworking>.Instance.Client_CustomData_Send(3); } } public void TurnOnPower() { //IL_0069: Unknown result type (might be due to invalid IL or missing references) Debug.Log((object)"Turning on power"); if (!PowerEnabled) { PowerEnabled = true; MonoBehaviourSingleton<AudioManager>.Instance.Play(MonoBehaviourSingleton<AudioManager>.Instance.PowerOnSound, 0.4f); if (OnPowerEnabled != null) { OnPowerEnabled(); } PowerSwitchLever.localEulerAngles = new Vector3(0f, 45f, 0f); } } public void AddPoints(int amount) { float num = (float)amount * MonoBehaviourSingleton<PlayerData>.Instance.MoneyModifier; MonoBehaviourSingleton<PlayerData>.Instance.MoneyModifier.ToString(); amount = (int)num; Points += amount; TotalPoints += amount; if (OnPointsChanged != null) { OnPointsChanged(); } } public bool TryRemovePoints(int amount) { if (Points >= amount) { Points -= amount; if (OnPointsChanged != null) { OnPointsChanged(); } return true; } return false; } public void RemovePoints(int amount) { Points -= amount; if (OnPointsChanged != null) { OnPointsChanged(); } } public void KillPlayer() { if (!GameEnded) { GM.CurrentPlayerBody.KillPlayer(false); } } public void EndGame() { if (GameEnded) { return; } GameEnded = true; MonoBehaviourSingleton<AudioManager>.Instance.PlayMusic(MonoBehaviourSingleton<AudioManager>.Instance.EndMusic, 0.25f, 1f); MonoBehaviourSingleton<EndPanel>.Instance.UpdatePanel(); if (Networking.IsHostOrSolo()) { for (int num = MonoBehaviourSingleton<ZombieManager>.Instance.ExistingZombies.Count - 1; num >= 0; num--) { MonoBehaviourSingleton<ZombieManager>.Instance.ExistingZombies[num].OnHit(9999f); } } } private void OnDestroy() { _harmony.UnpatchSelf(); } } public class PowerUpManager : MonoBehaviourSingleton<PowerUpManager> { public float ChanceForAmmo = 2.5f; public float ChanceForPowerUp = 6f; public float AmmoCooldownTime; public float PowerUpCooldownTime; public PowerUpMaxAmmo MaxAmmo; public List<PowerUp> PowerUps; private readonly List<int> _randomIndexes = new List<int>(); private bool _isPowerUpCooldown; private bool _isMaxAmmoCooldown; public int GetIndexOf(PowerUp powerUp) { return PowerUps.IndexOf(powerUp); } private void Start() { if (Networking.IsHostOrSolo()) { RoundManager.OnZombieKilled = (Action<GameObject>)Delegate.Remove(RoundManager.OnZombieKilled, new Action<GameObject>(RollForPowerUp)); RoundManager.OnZombieKilled = (Action<GameObject>)Delegate.Combine(RoundManager.OnZombieKilled, new Action<GameObject>(RollForPowerUp)); ShuffleIndexes(); } } private void OnDestroy() { RoundManager.OnZombieKilled = (Action<GameObject>)Delegate.Remove(RoundManager.OnZombieKilled, new Action<GameObject>(RollForPowerUp)); } public void RollForPowerUp(GameObject spawnPos) { //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) if ((Networking.ServerRunning() && Networking.IsClient()) || _isPowerUpCooldown) { return; } float num = Random.Range(0f, 100f); if (num < ChanceForPowerUp) { if (_randomIndexes.Count == 0) { ShuffleIndexes(); } SpawnPowerUp(PowerUps[_randomIndexes[0]], spawnPos.transform.position); MonoBehaviourSingleton<CodZNetworking>.Instance.PowerUpSpawned_Send(_randomIndexes[0], spawnPos.transform.position); _randomIndexes.RemoveAt(0); } } private void ShuffleIndexes() { _randomIndexes.Clear(); for (int i = 0; i < PowerUps.Count; i++) { _randomIndexes.Add(i); } _randomIndexes.Shuffle(); } public void SpawnPowerUp(PowerUp powerUp, Vector3 pos) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: 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) if ((Object)(object)powerUp == (Object)null) { Debug.LogWarning((object)"PowerUp spawn failed! PowerUp == null"); return; } ((MonoBehaviour)this).StartCoroutine(PowerUpCooldown()); powerUp.Spawn(pos + Vector3.up); } private IEnumerator PowerUpCooldown() { _isPowerUpCooldown = true; yield return (object)new WaitForSeconds(PowerUpCooldownTime); _isPowerUpCooldown = false; } } public class RoundManager : MonoBehaviourSingleton<RoundManager> { public static Action RoundStarted; public static Action RoundEnded; public static Action OnRoundChanged; public static Action OnZombiesLeftChanged; public static Action<GameObject> OnZombieKilled; public static Action OnGameStarted; public int SpecialRoundInterval; [HideInInspector] public int RoundNumber = 0; private Coroutine _roundDelayCoroutine; public bool IsRoundSpecial { get { if (GameSettings.SpecialRoundDisabled) { return false; } return RoundNumber % SpecialRoundInterval == 0; } } public void SendStartGame() { StartGame(); MonoBehaviourSingleton<CodZNetworking>.Instance.StartGame_Send(); } public void StartGame() { if (!Application.isEditor) { MonoBehaviourSingleton<PlayerSpawner>.Instance.SpawnPlayer(); } MonoBehaviourSingleton<GMgr>.Instance.GameStarted = true; RoundNumber = 0; if (OnGameStarted != null) { OnGameStarted(); } AdvanceRound(); } public void AdvanceRound() { if (!MonoBehaviourSingleton<GMgr>.Instance.GameEnded) { RoundNumber++; MonoBehaviourSingleton<ZombieManager>.Instance.BeginSpawningEnemies(); if (OnZombiesLeftChanged != null) { OnZombiesLeftChanged(); } if (OnRoundChanged != null) { OnRoundChanged(); } } } public void EndRound() { MonoBehaviourSingleton<AudioManager>.Instance.Play(MonoBehaviourSingleton<AudioManager>.Instance.RoundEndSound, 0.2f, 1f); if (RoundEnded != null) { RoundEnded(); } _roundDelayCoroutine = ((MonoBehaviour)this).StartCoroutine(DelayedAdvanceRound(17f)); } private IEnumerator DelayedAdvanceRound(float delay) { yield return (object)new WaitForSeconds(delay); AdvanceRound(); if (RoundStarted != null) { RoundStarted(); } } public void PauseGame() { ((MonoBehaviour)this).StopCoroutine(_roundDelayCoroutine); } public void ResumeGame() { _roundDelayCoroutine = ((MonoBehaviour)this).StartCoroutine(DelayedAdvanceRound(0f)); } } public class AudioManager : MonoBehaviourSingleton<AudioManager> { public AudioSource MainAudioSource; public AudioSource MusicAudioSource; [Space(20f)] public AudioClip BuySound; public AudioClip DrinkSound; public AudioClip HellHoundSpawnSound; public AudioClip HellHoundDeathSound; public AudioClip RoundStartSound; public AudioClip RoundEndSound; public AudioClip HellHoundRoundStartSound; public AudioClip PowerOnSound; public AudioClip EndMusic; public AudioClip TeleportingSound; public AudioClip PlayerHitSound; public AudioClip BarricadeRepairSound; private Coroutine _musicRepetition; public void Play(AudioClip audioClip, float volume = 1f, float delay = 0f) { if (delay != 0f) { ((MonoBehaviour)this).StartCoroutine(PlayDelayed(audioClip, volume, delay)); } else { MainAudioSource.PlayOneShot(audioClip, volume); } } private IEnumerator PlayDelayed(AudioClip audioClip, float volume, float delay) { yield return (object)new WaitForSeconds(delay); MainAudioSource.PlayOneShot(audioClip, volume); } public void PlayMusic(AudioClip audioClip, float volume = 1f, float delay = 0f) { MusicAudioSource.clip = audioClip; MusicAudioSource.volume = volume; MusicAudioSource.PlayDelayed(delay); } } } namespace CustomScripts.Managers.Sound { public class MusicManager : MonoBehaviourSingleton<MusicManager> { } } namespace CustomScripts.Managers { public class ZombieManager : MonoBehaviourSingleton<ZombieManager> { public static Action LocationChangedEvent; public Location CurrentLocation; public AnimationCurve ZombieCountCurve; public AnimationCurve ZosigHPCurve; public AnimationCurve ZosigLinkIntegrityCurve; public AnimationCurve ZosigPerRoundSpeed; public int PointsOnHit = 10; public int PointsOnKill = 100; [HideInInspector] public List<ZombieController> ExistingZombies; public ParticleSystem HellhoundExplosionPS; public int ExtraZombiesPerPlayer = 3; public int BaseZombieLimit = 20; [HideInInspector] public int ZombiesRemaining; private Coroutine _spawningCoroutine; public int ExistingZombieLimit { get { if (Networking.IsSolo()) { return BaseZombieLimit; } return BaseZombieLimit + ExtraZombiesPerPlayer * (MonoBehaviourSingleton<PlayersMgr>.Instance.Players.Count - 1); } } private int ZombiesToSpawnThisRound { get { int num = ((!Networking.IsSolo()) ? (ExtraZombiesPerPlayer * (MonoBehaviourSingleton<PlayersMgr>.Instance.Players.Count - 1)) : 0); if (GameSettings.HardMode) { return Mathf.CeilToInt(ZombieCountCurve.Evaluate((float)MonoBehaviourSingleton<RoundManager>.Instance.RoundNumber) + 1f + (float)num); } return Mathf.CeilToInt(ZombieCountCurve.Evaluate((float)MonoBehaviourSingleton<RoundManager>.Instance.RoundNumber) + (float)num); } } public void BeginSpawningEnemies() { ZombiesRemaining = ZombiesToSpawnThisRound; if (MonoBehaviourSingleton<RoundManager>.Instance.IsRoundSpecial) { StartSpawningZombies(6f); MonoBehaviourSingleton<AudioManager>.Instance.Play(MonoBehaviourSingleton<AudioManager>.Instance.HellHoundRoundStartSound, 0.35f); } else { StartSpawningZombies(2f); MonoBehaviourSingleton<AudioManager>.Instance.Play(MonoBehaviourSingleton<AudioManager>.Instance.RoundStartSound, 0.2f, 1f); } } public void StartSpawningZombies(float initialDelay) { _spawningCoroutine = ((MonoBehaviour)this).StartCoroutine(DelayedZombieSpawn(initialDelay)); } private IEnumerator DelayedZombieSpawn(float delay) { yield return (object)new WaitForSeconds(delay); while (ZombiesRemaining > ExistingZombies.Count) { if (ExistingZombies.Count >= ExistingZombieLimit || ExistingZombies.Count >= ZombiesRemaining) { yield return (object)new WaitForSeconds(4f); continue; } SpawnZosig(); if (!GameSettings.HardMode || MonoBehaviourSingleton<RoundManager>.Instance.IsRoundSpecial) { yield return (object)new WaitForSeconds(3f); } else { yield return (object)new WaitForSeconds(2f); } } } public void SpawnZosig() { if (MonoBehaviourSingleton<RoundManager>.Instance.IsRoundSpecial) { CustomSosigSpawnPoint component = ((Component)CurrentLocation.SpecialZombieSpawnPoints[Random.Range(0, CurrentLocation.SpecialZombieSpawnPoints.Count)]).GetComponent<CustomSosigSpawnPoint>(); component.Spawn(); } else { CustomSosigSpawnPoint component2 = ((Component)CurrentLocation.ZombieSpawnPoints[Random.Range(0, CurrentLocation.ZombieSpawnPoints.Count)]).GetComponent<CustomSosigSpawnPoint>(); component2.Spawn(); } } [HarmonyPatch(typeof(Sosig), "Start")] [HarmonyPostfix] private static void OnSosigSpawned(Sosig __instance) { MonoBehaviourSingleton<ZombieManager>.Instance.OnZosigSpawned(__instance); } public void OnZosigSpawned(Sosig zosig) { ZombieController zombieController = ((Component)zosig).gameObject.AddComponent<ZosigZombieController>(); zombieController.Initialize(); ExistingZombies.Add(zombieController); if (MonoBehaviourSingleton<RoundManager>.Instance.IsRoundSpecial) { zombieController.InitializeSpecialType(); } } public void ChangeLocation(Location newLocation) { if (_spawningCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(_spawningCoroutine); } CurrentLocation = newLocation; for (int num = ExistingZombies.Count - 1; num >= 0; num--) { ExistingZombies[num].OnKill(awardPoints: false); } StartSpawningZombies(5f); if (LocationChangedEvent != null) { LocationChangedEvent(); } } public void ForceKillZosig(Sosig sosig) { sosig.DeSpawnSosig(); } public void OnZombieDied(ZombieController controller) { ExistingZombies.Remove(controller); ZombiesRemaining--; if (!MonoBehaviourSingleton<GMgr>.Instance.GameEnded) { if (ZombiesRemaining <= 0) { MonoBehaviourSingleton<RoundManager>.Instance.EndRound(); } if (RoundManager.OnZombiesLeftChanged != null) { RoundManager.OnZombiesLeftChanged(); } if (RoundManager.OnZombieKilled != null) { RoundManager.OnZombieKilled(((Component)controller).gameObject); } } } [HarmonyPatch(typeof(Sosig), "SosigDies")] [HarmonyPostfix] private static void OnSosigDied(Sosig __instance, DamageClass damClass, SosigDeathType deathType) { ((Component)__instance).GetComponent<ZosigZombieController>().OnKill(); } [HarmonyPatch(typeof(Sosig), "ProcessDamage", new Type[] { typeof(Damage), typeof(SosigLink) })] [HarmonyPrefix] private static void BeforeZombieHit(Damage d, SosigLink link) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Invalid comparison between Unknown and I4 if ((int)d.Class == 3 && d.Source_IFF != GM.CurrentSceneSettings.DefaultPlayerIFF) { d.Dam_Blinding = 0f; d.Dam_TotalKinetic = 0f; d.Dam_TotalEnergetic = 0f; d.Dam_Blunt = 0f; d.Dam_Chilling = 0f; d.Dam_Cutting = 0f; d.Dam_Thermal = 0f; d.Dam_EMP = 0f; d.Dam_Piercing = 0f; d.Dam_Stunning = 0f; } d.Dam_Stunning = 0f; } [HarmonyPatch(typeof(Sosig), "ProcessDamage", new Type[] { typeof(Damage), typeof(SosigLink) })] [HarmonyPostfix] private static void AfterZombieHit(Sosig __instance, Damage d, SosigLink link) { ((Component)__instance).GetComponent<ZosigZombieController>().OnHit(__instance, d); } } } namespace CustomScripts.Multiplayer { public class CodZNetworking : MonoBehaviourSingleton<CodZNetworking> { private int gameStarted_ID = -1; private int mysteryBoxMoved_ID = -1; private int blockadeCleared_ID = -1; private int blockadeCleared_Client_ID = -1; private int powerUpSpawned_ID = -1; private int powerUpCollected_ID = -1; private int powerUpCollected_Client_ID = -1; private int papPurchased_ID = -1; private int papPurchased_Client_ID = -1; private int windowStateChanged_ID = -1; private int windowStateChanged_Client_ID = -1; private int customData_ID = -1; private int customData_Client_ID = -1; private int customData_playerID_ID = -1; private int customData_playerID_Client_ID = -1; private IEnumerator Start() { yield return null; StartNetworking(); } private void StartNetworking() { Mod.customPacketHandlers = (CustomPacketHandler[])(object)new CustomPacketHandler[20]; if (Networking.ServerRunning()) { SetupPacketTypes(); GM.CurrentPlayerBody.SetPlayerIFF(GameManager.ID + 5); } } private void SetupPacketTypes() { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Expected O, but got Unknown //IL_002a: Expected O, but got Unknown //IL_0037: 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_0053: Expected O, but got Unknown //IL_0053: Expected O, but got Unknown //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Expected O, but got Unknown //IL_007c: Expected O, but got Unknown //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Expected O, but got Unknown //IL_00a5: Expected O, but got Unknown //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Expected O, but got Unknown //IL_00ce: Expected O, but got Unknown //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Expected O, but got Unknown //IL_00f7: Expected O, but got Unknown //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Expected O, but got Unknown //IL_0120: Expected O, but got Unknown //IL_012d: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Expected O, but got Unknown //IL_0149: Expected O, but got Unknown //IL_0156: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Expected O, but got Unknown //IL_0172: Expected O, but got Unknown //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Expected O, but got Unknown //IL_019b: Expected O, but got Unknown //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Expected O, but got Unknown //IL_01c4: Expected O, but got Unknown //IL_01d1: Unknown result type (might be due to invalid IL or missing references) //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Expected O, but got Unknown //IL_01ed: Expected O, but got Unknown //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_0206: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Expected O, but got Unknown //IL_0216: Expected O, but got Unknown //IL_0223: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Expected O, but got Unknown //IL_023f: Expected O, but got Unknown //IL_024c: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Expected O, but got Unknown //IL_0268: Expected O, but got Unknown RegisterPacket("CodZ_GameStarted", new CustomPacketHandler(StartGame_Handler), new CustomPacketHandlerReceivedDelegate(StartGame_Received), ref gameStarted_ID); RegisterPacket("CodZ_MysteryBoxMoved", new CustomPacketHandler(MysteryBoxMoved_Handler), new CustomPacketHandlerReceivedDelegate(MysteryBoxMoved_Received), ref mysteryBoxMoved_ID); RegisterPacket("CodZ_BlockadeCleared", new CustomPacketHandler(BlockadeCleared_Handler), new CustomPacketHandlerReceivedDelegate(BlockadeCleared_Received), ref blockadeCleared_ID); RegisterPacket("CodZ_Client_BlockadeCleared", new CustomPacketHandler(Client_BlockadeCleared_Handler), new CustomPacketHandlerReceivedDelegate(Client_BlockadeCleared_Received), ref blockadeCleared_Client_ID); RegisterPacket("CodZ_PowerUpSpawned", new CustomPacketHandler(PowerUpSpawned_Handler), new CustomPacketHandlerReceivedDelegate(PowerUpSpawned_Received), ref powerUpSpawned_ID); RegisterPacket("CodZ_PowerUpCollected", new CustomPacketHandler(PowerUpCollected_Handler), new CustomPacketHandlerReceivedDelegate(PowerUpCollected_Received), ref powerUpCollected_ID); RegisterPacket("CodZ_Client_PowerUpCollected", new CustomPacketHandler(Client_PowerUpCollected_Handler), new CustomPacketHandlerReceivedDelegate(Client_PowerUpCollected_Received), ref powerUpCollected_Client_ID); RegisterPacket("CodZ_PaPPurchased", new CustomPacketHandler(PaPPurchased_Handler), new CustomPacketHandlerReceivedDelegate(PaPPurchased_Received), ref papPurchased_ID); RegisterPacket("CodZ_Client_PaPPurchased", new CustomPacketHandler(Client_PaPPurchased_Handler), new CustomPacketHandlerReceivedDelegate(Client_PaPPurchased_Received), ref papPurchased_Client_ID); RegisterPacket("CodZ_WindowStateChanged", new CustomPacketHandler(WindowStateChanged_Handler), new CustomPacketHandlerReceivedDelegate(WindowStateChanged_Received), ref windowStateChanged_ID); RegisterPacket("CodZ_Client_WindowStateChanged", new CustomPacketHandler(Client_WindowStateChanged_Handler), new CustomPacketHandlerReceivedDelegate(Client_WindowStateChanged_Received), ref windowStateChanged_Client_ID); RegisterPacket("CodZ_CustomData", new CustomPacketHandler(CustomData_Handler), new CustomPacketHandlerReceivedDelegate(CustomData_Received), ref customData_ID); RegisterPacket("CodZ_Client_CustomData", new CustomPacketHandler(Client_CustomData_Handler), new CustomPacketHandlerReceivedDelegate(Client_CustomData_Received), ref customData_Client_ID); RegisterPacket("CodZ_CustomData_PlayerID", new CustomPacketHandler(CustomData_PlayerID_Handler), new CustomPacketHandlerReceivedDelegate(CustomData_PlayerID_Received), ref customData_playerID_ID); RegisterPacket("CodZ_Client_CustomData_PlayerID", new CustomPacketHandler(Client_CustomData_PlayerID_Handler), new CustomPacketHandlerReceivedDelegate(Client_CustomData_PlayerID_Received), ref customData_playerID_Client_ID); } private void RegisterPacket(string packetName, CustomPacketHandler hostHandler, CustomPacketHandlerReceivedDelegate clientHandler, ref int packetID) { if (Networking.IsHost()) { if (Mod.registeredCustomPacketIDs.ContainsKey(packetName)) { packetID = Mod.registeredCustomPacketIDs[packetName]; } else { packetID = Networking.RegisterCustomPacketType(packetName); } Mod.customPacketHandlers[packetID] = hostHandler; } else if (Mod.registeredCustomPacketIDs.ContainsKey(packetName)) { packetID = Mod.registeredCustomPacketIDs[packetName]; Mod.customPacketHandlers[packetID] = hostHandler; } else { ClientSend.RegisterCustomPacketType(packetName); Mod.CustomPacketHandlerReceived += clientHandler; } } public void StartGame_Send() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsClient()) { Packet val = new Packet(gameStarted_ID); val.Write(GameSettings.HardMode); val.Write(GameSettings.WeakerEnemiesEnabled); val.Write(GameSettings.SpecialRoundDisabled); val.Write(GameSettings.ItemSpawnerEnabled); val.Write(GameSettings.WonderWeaponEnabled); ServerSend.SendTCPDataToAll(val, true); } } private void StartGame_Handler(int clientID, Packet packet) { GameSettings.HardMode = packet.ReadBool(true); GameSettings.WeakerEnemiesEnabled = packet.ReadBool(true); GameSettings.SpecialRoundDisabled = packet.ReadBool(true); GameSettings.ItemSpawnerEnabled = packet.ReadBool(true); GameSettings.WonderWeaponEnabled = packet.ReadBool(true); GameSettings.OnSettingsChanged(); MonoBehaviourSingleton<RoundManager>.Instance.StartGame(); } private void StartGame_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_GameStarted") { gameStarted_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(StartGame_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(StartGame_Received); } } public void MysteryBoxMoved_Send(int newWayPointID, bool immediate) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsClient()) { Packet val = new Packet(mysteryBoxMoved_ID); val.Write(newWayPointID); val.Write(immediate); ServerSend.SendTCPDataToAll(val, true); } } private void MysteryBoxMoved_Handler(int clientID, Packet packet) { int nextWaypoint = packet.ReadInt(true); bool flag = packet.ReadBool(true); GameRefs.MysteryBoxMover.SetNextWaypoint(nextWaypoint); if (flag) { GameRefs.MysteryBoxMover.Teleport(); } else { GameRefs.MysteryBoxMover.StartTeleportAnim(); } } private void MysteryBoxMoved_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_MysteryBoxMoved") { mysteryBoxMoved_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(MysteryBoxMoved_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(MysteryBoxMoved_Received); } } public void BlockadeCleared_Send(int blockadeId) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsClient()) { Packet val = new Packet(blockadeCleared_ID); val.Write(blockadeId); ServerSend.SendTCPDataToAll(val, true); } } private void BlockadeCleared_Handler(int clientID, Packet packet) { int index = packet.ReadInt(true); MonoBehaviourSingleton<GMgr>.Instance.Blockades[index].Unlock(); } private void BlockadeCleared_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_BlockadeCleared") { blockadeCleared_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(BlockadeCleared_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(BlockadeCleared_Received); } } public void Client_BlockadeCleared_Send(int blockadeId) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsHost()) { Packet val = new Packet(blockadeCleared_Client_ID); val.Write(blockadeId); ClientSend.SendTCPData(val, true); } } private void Client_BlockadeCleared_Handler(int clientID, Packet packet) { int num = packet.ReadInt(true); MonoBehaviourSingleton<GMgr>.Instance.Blockades[num].Unlock(); BlockadeCleared_Send(num); } private void Client_BlockadeCleared_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_Client_BlockadeCleared") { blockadeCleared_Client_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(Client_BlockadeCleared_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(Client_BlockadeCleared_Received); } } public void PowerUpSpawned_Send(int powerUpId, Vector3 pos) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown //IL_002e: Unknown result type (might be due to invalid IL or missing references) if (Networking.ServerRunning() && !Networking.IsClient()) { Packet val = new Packet(powerUpSpawned_ID); val.Write(powerUpId); val.Write(pos); ServerSend.SendTCPDataToAll(val, true); } } private void PowerUpSpawned_Handler(int clientID, Packet packet) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) int index = packet.ReadInt(true); Vector3 pos = packet.ReadVector3(true); MonoBehaviourSingleton<PowerUpManager>.Instance.SpawnPowerUp(MonoBehaviourSingleton<PowerUpManager>.Instance.PowerUps[index], pos); } private void PowerUpSpawned_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_PowerUpSpawned") { powerUpSpawned_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(PowerUpSpawned_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(PowerUpSpawned_Received); } } public void PowerUpCollected_Send(int powerUpId) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsClient()) { Packet val = new Packet(powerUpCollected_ID); val.Write(powerUpId); ServerSend.SendTCPDataToAll(val, true); } } private void PowerUpCollected_Handler(int clientID, Packet packet) { int index = packet.ReadInt(true); PowerUp powerUp = MonoBehaviourSingleton<PowerUpManager>.Instance.PowerUps[index]; powerUp.OnCollect(); } private void PowerUpCollected_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_PowerUpCollected") { powerUpCollected_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(PowerUpCollected_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(PowerUpCollected_Received); } } public void Client_PowerUpCollected_Send(int powerUpId) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsHost()) { Packet val = new Packet(powerUpCollected_Client_ID); val.Write(powerUpId); ClientSend.SendTCPData(val, true); } } private void Client_PowerUpCollected_Handler(int clientID, Packet packet) { int num = packet.ReadInt(true); PowerUp powerUp = MonoBehaviourSingleton<PowerUpManager>.Instance.PowerUps[num]; powerUp.OnCollect(); PowerUpCollected_Send(num); } private void Client_PowerUpCollected_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_Client_PowerUpCollected") { powerUpCollected_Client_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(Client_PowerUpCollected_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(Client_PowerUpCollected_Received); } } public void PaPPurchased_Send() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsClient()) { Packet val = new Packet(papPurchased_ID); ServerSend.SendTCPDataToAll(val, true); } } private void PaPPurchased_Handler(int clientID, Packet packet) { GameRefs.PackAPunch.OnBuying(); } private void PaPPurchased_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_PaPPurchased") { papPurchased_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(PaPPurchased_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(PaPPurchased_Received); } } public void Client_PaPPurchased_Send() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsHost()) { Packet val = new Packet(papPurchased_Client_ID); ClientSend.SendTCPData(val, true); } } private void Client_PaPPurchased_Handler(int clientID, Packet packet) { GameRefs.PackAPunch.OnBuying(); PaPPurchased_Send(); } private void Client_PaPPurchased_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_Client_PaPPurchased") { papPurchased_Client_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(Client_PaPPurchased_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(Client_PaPPurchased_Received); } } public void WindowStateChanged_Send(int windowId, int plankId, WindowAction windowAction) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsClient()) { Packet val = new Packet(windowStateChanged_ID); val.Write(windowId); val.Write(plankId); val.Write((int)windowAction); ServerSend.SendTCPDataToAll(val, true); } } private void WindowStateChanged_Handler(int clientID, Packet packet) { int index = packet.ReadInt(true); int plankId = packet.ReadInt(true); switch ((WindowAction)packet.ReadInt(true)) { case WindowAction.Repair: GameRefs.Windows[index].OnWindowRepaired(plankId); break; case WindowAction.Tear: GameRefs.Windows[index].OnPlankTeared(plankId); break; } } private void WindowStateChanged_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_WindowStateChanged") { windowStateChanged_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(WindowStateChanged_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(WindowStateChanged_Received); } } public void Client_WindowStateChanged_Send(int windowId, int plankId) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsHost()) { Packet val = new Packet(windowStateChanged_Client_ID); val.Write(windowId); val.Write(plankId); ClientSend.SendTCPData(val, true); } } private void Client_WindowStateChanged_Handler(int clientID, Packet packet) { int num = packet.ReadInt(true); int plankId = packet.ReadInt(true); GameRefs.Windows[num].OnWindowRepaired(plankId); WindowStateChanged_Send(num, plankId, WindowAction.Repair); } private void Client_WindowStateChanged_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_Client_WindowStateChanged") { windowStateChanged_Client_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(Client_WindowStateChanged_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(Client_WindowStateChanged_Received); } } public void CustomData_Send(int customDataID) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsClient()) { HandleCustomData(customDataID); Packet val = new Packet(customData_ID); val.Write(customDataID); ServerSend.SendTCPDataToAll(val, true); } } private void CustomData_Handler(int clientID, Packet packet) { int customDataId = packet.ReadInt(true); HandleCustomData(customDataId); } private void CustomData_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_CustomData") { customData_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(CustomData_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(CustomData_Received); } } public void Client_CustomData_Send(int customDataId) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsHost()) { Packet val = new Packet(customData_Client_ID); val.Write(customDataId); ClientSend.SendTCPData(val, true); } } private void Client_CustomData_Handler(int clientID, Packet packet) { int customDataID = packet.ReadInt(true); CustomData_Send(customDataID); } private void Client_CustomData_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_Client_CustomData") { customData_Client_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(Client_CustomData_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(Client_CustomData_Received); } } public void CustomData_PlayerID_Send(int playerID, int customDataID) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsClient()) { HandlePlayerCustomData(playerID, customDataID); Packet val = new Packet(customData_playerID_ID); val.Write(playerID); val.Write(customDataID); ServerSend.SendTCPDataToAll(val, true); } } private void CustomData_PlayerID_Handler(int clientID, Packet packet) { int playerID = packet.ReadInt(true); int customDataId = packet.ReadInt(true); HandlePlayerCustomData(playerID, customDataId); } private void CustomData_PlayerID_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_CustomData_PlayerID") { customData_playerID_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(CustomData_PlayerID_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(CustomData_PlayerID_Received); } } public void Client_CustomData_PlayerID_Send(int playerID, int customDataID) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Expected O, but got Unknown if (Networking.ServerRunning() && !Networking.IsHost()) { Packet val = new Packet(customData_playerID_Client_ID); val.Write(playerID); val.Write(customDataID); ClientSend.SendTCPData(val, true); } } private void Client_CustomData_PlayerID_Handler(int clientID, Packet packet) { int playerID = packet.ReadInt(true); int customDataID = packet.ReadInt(true); CustomData_PlayerID_Send(playerID, customDataID); } private void Client_CustomData_PlayerID_Received(string handlerID, int index) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Expected O, but got Unknown if (handlerID == "CodZ_Client_CustomData_PlayerID") { customData_playerID_Client_ID = index; Mod.customPacketHandlers[index] = new CustomPacketHandler(Client_CustomData_PlayerID_Handler); Mod.CustomPacketHandlerReceived -= new CustomPacketHandlerReceivedDelegate(Client_CustomData_PlayerID_Received); } } private void HandleCustomData(int customDataId) { switch (customDataId) { case 0: GameRefs.MysteryBox.OnBuying(); break; case 1: GameRefs.MysteryBox.WillTeleport = true; break; case 3: MonoBehaviourSingleton<GMgr>.Instance.TurnOnPower(); break; case 4: MonoBehaviourSingleton<PlayerSpawner>.Instance.MoveToEndGameArea(); break; case 5: GameRefs.Radio.ToggleMusic(); break; } } private void HandlePlayerCustomData(int playerID, int customDataId) { //IL_004a: 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_0051: Unknown result type (might be due to invalid IL or missing references) switch (customDataId) { case 0: if (Networking.IsHost() && MonoBehaviourSingleton<PlayersMgr>.Instance.AllPlayersDowned()) { CustomData_Send(4); } if (playerID != GameManager.ID) { Vector3 position = ((Component)GameManager.players[playerID]).transform.position; PlayersMgr.SpawnReviveButton(playerID, position); PlayersMgr.GetPlayerExcludingMe(playerID).IsDowned = true; } break; case 1: if (playerID != GameManager.ID) { if (Networking.IsHost() && MonoBehaviourSingleton<PlayersMgr>.Instance.AllPlayersDowned()) { CustomData_Send(4); } PlayersMgr.GetPlayerExcludingMe(playerID).IsDowned = false; PlayersMgr.GetPlayerExcludingMe(playerID).IsDead = true; PlayersMgr.DespawnReviveButton(playerID); } break; case 2: if (playerID == GameManager.ID) { MonoBehaviourSingleton<PlayerSpawner>.Instance.Revive(); break; } PlayersMgr.GetPlayerExcludingMe(playerID).IsDowned = false; PlayersMgr.DespawnReviveButton(playerID); break; case 3: if (playerID == GM.CurrentPlayerBody.GetPlayerIFF()) { MonoBehaviourSingleton<GMgr>.Instance.AddPoints(MonoBehaviourSingleton<ZombieManager>.Instance.PointsOnHit); } break; case 4: if (playerID == GM.CurrentPlayerBody.GetPlayerIFF()) { MonoBehaviourSingleton<GMgr>.Instance.AddPoints(MonoBehaviourSingleton<ZombieManager>.Instance.PointsOnKill); MonoBehaviourSingleton<GMgr>.Instance.Kills++; } break; case 5: if (playerID != GameManager.ID) { PlayersMgr.GetPlayerExcludingMe(playerID).IsDowned = false; PlayersMgr.GetPlayerExcludingMe(playerID).IsDead = false; } break; } } } public enum CustomDataType { MYSTERY_BOX_ROLLED = 0, MYSTERY_BOX_TELEPORT = 1, POWER_ENABLED = 3, EVERY_PLAYER_DEAD = 4, RADIO_TOGGLE = 5 } public enum CustomPlayerDataType { PLAYER_DOWNED, PLAYER_DEAD, PLAYER_REVIVED, ZOMBIE_HIT, ZOMBIE_KILLED, PLAYER_SPAWNED } public class HideIfNotHost : MonoBehaviour { private void Start() { if (!Networking.IsHostOrSolo()) { ((Component)this).gameObject.SetActive(false); } } } public class Networking : MonoBehaviourSingleton<Networking> { public static int CustomIndex = 0; public override void Awake() { base.Awake(); CustomIndex = 0; } public static bool IsHostOrSolo() { if (ServerRunning()) { if (IsHost()) { return true; } return false; } return true; } public static bool ServerRunning() { return (Object)(object)GameManager.singleton != (Object)null; } public static bool IsClient() { if (!ThreadManager.host) { return true; } return false; } public static bool IsHost() { if (ThreadManager.host) { return true; } return false; } public static bool IsSolo() { if (ServerRunning()) { if (IsHost() && MonoBehaviourSingleton<PlayersMgr>.Instance.Players.Count == 1) { return true; } return false; } return true; } public static int RegisterCustomPacketType(string handlerID, int clientID = 0) { int value = -1; if (Mod.registeredCustomPacketIDs.TryGetValue(handlerID, out value)) { Mod.LogWarning("Client " + clientID + " requested for " + handlerID + " custom packet handler to be registered but this ID already exists."); } else { value = CustomIndex; CustomIndex++; Mod.registeredCustomPacketIDs.Add(handlerID, value); Mod.CustomPacketHandlerReceivedInvoke(handlerID, value); } ServerSend.RegisterCustomPacketType(handlerID, value); return value; } public static bool IsMineIFF(int iff) { if (GM.CurrentPlayerBody.GetPlayerIFF() == iff) { return true; } return false; } } } public class PlayersMgr : MonoBehaviourSingleton<PlayersMgr> { public List<PlayerH3MPData> Players = new List<PlayerH3MPData>(); public static PlayerH3MPData Me; public ReviveButton ReviveButtonPrefab; public List<ReviveButton> ReviveButtons = new List<ReviveButton>(); private void Start() { AddMe(); RoundManager.OnGameStarted = (Action)Delegate.Combine(RoundManager.OnGameStarted, new Action(AddClients)); RoundManager.RoundStarted = (Action)Delegate.Combine(RoundManager.RoundStarted, new Action(SetAllToAlive)); } private void AddClients() { foreach (KeyValuePair<int, PlayerManager> player in GameManager.players) { AddClient(player.Value); } Debug.Log((object)"Connected Players"); foreach (PlayerH3MPData player2 in Players) { if (player2.IsMe) { Debug.Log((object)("Me " + GameManager.ID)); } else { Debug.Log((object)(player2.PlayerManager.username + " " + player2.PlayerManager.ID)); } } foreach (PlayerH3MPData player3 in Players) { if (!player3.IsMe) { Debug.Log((object)("IFF: " + (player3.PlayerManager.ID + 5))); } } } public PlayerH3MPData GetRandomPlayer() { int index = Random.Range(0, Players.Count); return Players[index]; } public PlayerH3MPData GetRandomAlivePlayer() { List<PlayerH3MPData> list = Players.FindAll((PlayerH3MPData player) => player.IsAlive); int index = Random.Range(0, list.Count); return list[index]; } public PlayerH3MPData GetClosestAlivePlayer(Vector3 origin) { //IL_0036: 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_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) PlayerH3MPData result = null; float num = float.MaxValue; foreach (PlayerH3MPData player in Players) { if (player.IsAlive) { Vector3 val = player.GetHead().position - origin; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; result = player; } } } return result; } public PlayerH3MPData GetClosestPlayer(Vector3 origin) { //IL_002a: 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_0030: 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) PlayerH3MPData result = null; float num = float.MaxValue; foreach (PlayerH3MPData player in Players) { Vector3 val = player.GetHead().position - origin; float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude; if (sqrMagnitude < num) { num = sqrMagnitude; result = player; } } return result; } public bool AllPlayersDowned() { return Players.All((PlayerH3MPData player) => !player.IsAlive); } public void AddMe() { Players.Add(new PlayerH3MPData { IsMe = true, PlayerManager = null }); Me = Players[Players.Count - 1]; } public void AddClient(PlayerManager playerManager) { Players.Add(new PlayerH3MPData { IsMe = false, PlayerManager = playerManager }); } private void OnDestroy() { RoundManager.OnGameStarted = (Action)Delegate.Remove(RoundManager.OnGameStarted, new Action(AddClients)); RoundManager.RoundStarted = (Action)Delegate.Remove(RoundManager.RoundStarted, new Action(SetAllToAlive)); } public static PlayerH3MPData GetPlayerExcludingMe(int playerID) { return MonoBehaviourSingleton<PlayersMgr>.Instance.Players.Find((PlayerH3MPData player) => !player.IsMe && player.PlayerManager.ID == playerID); } public static void SpawnReviveButton(int playerID, Vector3 pos) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) ReviveButton reviveButton = Object.Instantiate<ReviveButton>(MonoBehaviourSingleton<PlayersMgr>.Instance.ReviveButtonPrefab, pos, Quaternion.identity); reviveButton.Spawn(playerID, pos); } public static void DespawnReviveButton(int playerID) { ReviveButton reviveButton = MonoBehaviourSingleton<PlayersMgr>.Instance.ReviveButtons.Find((ReviveButton button) => button.AffectedPlayerID == playerID); reviveButton.Despawn(); } public void SetAllToAlive() { foreach (PlayerH3MPData player in Players) { player.IsDowned = false; player.IsDead = false; } } } public class PlayerH3MPData { public bool IsMe; public PlayerManager PlayerManager; public bool IsDowned; public bool IsDead; public bool Exists => IsMe || (Object)(object)PlayerManager != (Object)null; public bool IsAlive => !IsDowned && !IsDead && Exists; public Transform GetHead() { if (IsMe) { return GM.CurrentPlayerBody.Head; } return PlayerManager.head; } } public class ReviveButton : MonoBehaviourSingleton<ReviveButton> { public Image ReviveIcon; public int AffectedPlayerID; private FVRViveHand _handReviving; private float _timer = 0f; private Color _defaultColor = Color.yellow; private Color _reviveColor = Color.white; private bool _available = false; private float ReviveTime => (!MonoBehaviourSingleton<PlayerData>.Instance.QuickRevivePerkActivated) ? 5f : 2.5f; public void Spawn(int playerID, Vector3 pos) { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) ((Component)this).gameObject.SetActive(true); AffectedPlayerID = playerID; ((Component)this).transform.position = pos + Vector3.up; _timer = 0f; ((Graphic)ReviveIcon).color = _defaultColor; MonoBehaviourSingleton<PlayersMgr>.Instance.ReviveButtons.Add(this); _available = true; } public void Despawn() { ((Component)this).gameObject.SetActive(false); MonoBehaviourSingleton<PlayersMgr>.Instance.ReviveButtons.Remove(this); _available = false; Object.Destroy((Object)(object)((Component)this).gameObject); } private void OnTriggerStay(Collider other) { //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) if (!Object.op_Implicit((Object)(object)((Component)other).GetComponent<FVRViveHand>())) { return; } if ((Object)(object)_handReviving == (Object)null) { _handReviving = ((Component)other).GetComponent<FVRViveHand>(); } if (_handReviving.Input.GripPressed) { ((Graphic)ReviveIcon).color = _reviveColor; _timer += Time.fixedDeltaTime; if (_timer >= ReviveTime) { if (Networking.IsHost()) { MonoBehaviourSingleton<CodZNetworking>.Instance.CustomData_PlayerID_Send(AffectedPlayerID, 2); } else { MonoBehaviourSingleton<CodZNetworking>.Instance.Client_CustomData_PlayerID_Send(AffectedPlayerID, 2); } _timer = 0f; _available = false; } } else { _timer = 0f; ((Graphic)ReviveIcon).color = _defaultColor; } } private void Update() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //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_0044: 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_004e: Unknown result type (might be due to invalid IL or missing references) ((Component)this).transform.LookAt(((Component)this).transform.position + ((Component)GM.CurrentPlayerBody.Head).transform.rotation * Vector3.forward, ((Component)GM.CurrentPlayerBody.Head).transform.rotation * Vector3.up); } private void OnTriggerExit(Collider other) { if (!Object.op_Implicit((Object)(object)((Component)other).GetComponent<FVRViveHand>())) { } } } namespace CustomScripts { public class Blockade : MonoBehaviour, IPurchasable { private int _id; public Action OnPurchase; public List<Transform> UnlockableZombieSpawnPoints; public List<Transform> UnlockableSpecialZombieSpawnPoints; public List<Text> CostTexts; public int Cost; [SerializeField] private bool _isOneTimeOnly = true; private bool _alreadyBought; private bool _alreadyUsed; public int PurchaseCost => Cost; public bool IsOneTimeOnly => _isOneTimeOnly; public bool AlreadyBought => _alreadyBought; private void OnValidate() { foreach (Text costText in CostTexts) { costText.text = Cost.ToString(); } } private void Start() { MonoBehaviourSingleton<GMgr>.Instance.Blockades.Add(this); _id = MonoBehaviourSingleton<GMgr>.Instance.Blockades.Count - 1; } public void TryBuying() { if (_alreadyUsed || !MonoBehaviourSingleton<GMgr>.Instance.TryRemovePoints(Cost)) { return; } if (Networking.IsHostOrSolo()) { Unlock(); if (Networking.IsHost()) { MonoBehaviourSingleton<CodZNetworking>.Instance.BlockadeCleared_Send(_id); } } else { MonoBehaviourSingleton<CodZNetworking>.Instance.Client_BlockadeCleared_Send(_id); } } public void Unlock() { _alreadyUsed = true; foreach (Transform unlockableZombieSpawnPoint in UnlockableZombieSpawnPoints) { if (!MonoBehaviourSingleton<ZombieManager>.Instance.CurrentLocation.ZombieSpawnPoints.Contains(unlockableZombieSpawnPoint)) { MonoBehaviourSingleton<ZombieManager>.Instance.CurrentLocation.ZombieSpawnPoints.Add(unlockableZombieSpawnPoint); } } foreach (Transform unlockableSpecialZombieSpawnPoint in UnlockableSpecialZombieSpawnPoints) { if (!MonoBehaviourSingleton<ZombieManager>.Instance.CurrentLocation.SpecialZombieSpawnPoints.Contains(unlockableSpecialZombieSpawnPoint)) { MonoBehaviourSingleton<ZombieManager>.Instance.CurrentLocation.SpecialZombieSpawnPoints.Add(unlockableSpecialZombieSpawnPoint); } } MonoBehaviourSingleton<AudioManager>.Instance.Play(MonoBehaviourSingleton<AudioManager>.Instance.BuySound, 0.5f); ((Component)this).gameObject.SetActive(false); if (OnPurchase != null) { OnPurchase(); } } } public class MysteryBox : MonoBehaviour, IPurchasable { public static Action<WeaponData> WeaponSpawnedEvent; public int Cost = 950; [SerializeField] private bool _isOneTimeOnly; private bool _alreadyBought; public List<WeaponData> Loot; public List<WeaponData> RareLoot; [Range(0f, 1f)] public float StartRareChance = 0.01f; public float ChanceIncreasePerRound = 0.003f; public float MaxRareChance = 0.1f; public CustomItemSpawner WeaponSpawner; public CustomItemSpawner AmmoSpawner; public AudioClip RollSound; [HideInInspector] public bool InUse = false; private MysteryBoxMover _mysteryBoxMover; [HideInInspector] public bool WillTeleport; [HideInInspector] public bool DidIRoll; public int PurchaseCost => Cost; public bool IsOneTimeOnly => _isOneTimeOnly; public bool AlreadyBought => _alreadyBought; private void Awake() { _mysteryBoxMover = ((Component)this).GetComponent<MysteryBoxMover>(); } public void TryBuy() { if (!InUse && MonoBehaviourSingleton<GMgr>.Instance.TryRemovePoints(Cost)) { DidIRoll = true; if (Networking.IsSolo()) { OnBuying(); } else if (Networking.IsHost()) { MonoBehaviourSingleton<CodZNetworking>.Instance.CustomData_Send(0); } else { MonoBehaviourSingleton<CodZNetworking>.Instance.Client_CustomData_Send(0); } } } public void OnBuying() { InUse = true; WillTeleport = false; MonoBehaviourSingleton<AudioManager>.Instance.Play(RollSound, 0.25f); if (Networking.IsHostOrSolo() && _mysteryBoxMover.CheckForTeleport()) { if (Networking.IsSolo()) { WillTeleport = true; } else { MonoBehaviourSingleton<CodZNetworking>.Instance.CustomData_Send(1); } } ((MonoBehaviour)this).StartCoroutine(DelayedSpawn()); } private IEnumerator DelayedSpawn() { yield return (object)new WaitForSeconds(5.5f); if (WillTeleport) { if (Networking.IsHostOrSolo()) { _mysteryBoxMover.StartTeleporting(); } } else { if (DidIRoll) { DidIRoll = false; float num = Mathf.Min(StartRareChance + ChanceIncreasePerRound * (float)MonoBehaviourSingleton<RoundManager>.Instance.RoundNumber, MaxRareChance); bool flag = Random.Range(0f, 1f) <= num; if (!GameSettings.WonderWeaponEnabled) { flag = false; } WeaponData weaponData; if (flag) { int index = Random.Range(0, RareLoot.Count); weaponData = RareLoot[index]; } else { int index2 = Random.Range(0, Loot.Count); weaponData = Loot[index2]; } WeaponSpawner.ObjectId = weaponData.DefaultSpawners[0]; AmmoSpawner.ObjectId = weaponData.DefaultSpawners[1]; GameObject val = WeaponSpawner.Spawn(); AmmoSpawner.Spawn(); val.GetComponent<WeaponWrapper>().SetOwner(GameManager.ID); if (WeaponSpawnedEvent != null) { WeaponSpawnedEvent(weaponData); } } InUse = false; } if (Networking.IsHostOrSolo()) { _mysteryBoxMover.CurrentRoll++; } } } public class MysteryBoxMover : MonoBehaviour { public bool MoveRandomlyOnStart = true; public List<Transform> SpawnPoints; public int CurrentSpawnPoint; [Range(0f, 100f)] public float TeleportChance = 20f; public int SafeRollsProvided = 3; public AudioClip TeddyBearSound; public AudioClip SecretTeddyBearSound; public Transform TeddyBear; [HideInInspector] public Transform CurrentPos; [HideInInspector] public int CurrentRoll = 0; private Animator _animator; private MysteryBox _mysteryBox; private Transform _parent; private int _nextTeleportWaypoint = -1; private void Awake() { _parent = ((Component)this).transform.parent; _animator = ((Component)_parent).GetComponent<Animator>(); _mysteryBox = ((Component)this).GetComponent<MysteryBox>(); } private void Start() { RoundManager.OnGameStarted = (Action)Delegate.Combine(RoundManager.OnGameStarted, new Action(TeleportOnStart)); } public void TeleportOnStart() { if (Networking.IsHostOrSolo() && MoveRandomlyOnStart) { int newWayPointID = (_nextTeleportWaypoint = GetRandomMovePoint()); Teleport(); if (Networking.IsHost()) { MonoBehaviourSingleton<CodZNetworking>.Instance.MysteryBoxMoved_Send(newWayPointID, immediate: true); } } } public void Teleport() { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) Transform val = SpawnPoints[_nextTeleportWaypoint]; CurrentSpawnPoint = _nextTeleportWaypoint; CurrentPos = val; ((Component)_parent).transform.position = val.position; ((Component)_parent).transform.rotation = val.rotation; CurrentRoll = 0; _mysteryBox.InUse = false; } public bool CheckForTeleport() { if (CurrentRoll <= SafeRollsProvided) { return false; } if ((float)Random.Range(0, 100) <= TeleportChance) { return true; } return false; } public void StartTeleporting() { int randomMovePoint = GetRandomMovePoint(); SetNextWaypoint(randomMovePoint); StartTeleportAnim(); if (Networking.IsHost()) { MonoBehaviourSingleton<CodZNetworking>.Instance.MysteryBoxMoved_Send(randomMovePoint, immediate: false); } } public void StartTeleportAnim() { GameObject gameObject; if (Random.Range(0, 1000) == 0) { gameObject = ((Component)TeddyBear.GetChild(1)).gameObject; MonoBehaviourSingleton<AudioManager>.Instance.Play(SecretTeddyBearSound); } else { gameObject = ((Component)TeddyBear.GetChild(0)).gameObject; MonoBehaviourSingleton<AudioManager>.Instance.Play(TeddyBearSound); } ((Component)TeddyBear).GetComponent<Animator>().Play("Activation"); gameObject.SetActive(true); ((MonoBehaviour)this).StartCoroutine(DelayedAnimation(gameObject)); } private IEnumerator DelayedAnimation(GameObject teddy) { yield return (object)new WaitForSeconds(3f); teddy.SetActive(false); yield return (object)new WaitForSeconds(1.2f); _animator.Play("Teleport"); ((MonoBehaviour)this).StartCoroutine(DelayedTeleport()); } private IEnumerator DelayedTeleport() { yield return (object)new WaitForSeconds(4.2f); Teleport(); } public int GetRandomMovePoint() { List<int> list = new List<int>(); for (int i = 0; i < SpawnPoints.Count; i++) { if (i != CurrentSpawnPoint) { list.Add(i); } } return list[Random.Range(0, list.Count)]; } public void SetNextWaypoint(int waypointID) { _nextTeleportWaypoint = waypointID; } private void OnDestroy() { RoundManager.OnGameStarted = (Action)Delegate.Remove(RoundManager.OnGameStarted, new Action(TeleportOnStart)); } } public class QuestionMarkBlinking : MonoBehaviour { public Renderer QuestionMark1; public Renderer QuestionMark2; private float _emissionValue; private int _emissionWeight; private bool _emit; private float _time; private void Awake() { _emissionWeight = Shader.PropertyToID("_EmissionWeight"); } private void Update() { if (_emit) { if (_time >= 1.5f) { _emit = false; ((MonoBehaviour)this).StartCoroutine(SmoothEmissionChange(0f, 1f, 1f)); _time = 0f; } } else if (_time >= 3f) { _emit = true; ((MonoBehaviour)this)