using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security.Cryptography;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using CustomSounds;
using CustomSoundsComponents;
using HarmonyLib;
using LCSoundTool;
using Unity.Netcode;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("CustomSounds")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("CustomSounds")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("9e086160-a7fd-4721-ba09-3e8534cb7011")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
internal class <Module>
{
static <Module>()
{
}
}
namespace CustomSounds
{
[BepInPlugin("CustomSounds", "Custom Sounds", "1.3.0")]
public class Plugin : BaseUnityPlugin
{
private const string PLUGIN_GUID = "CustomSounds";
private const string PLUGIN_NAME = "Custom Sounds";
private const string PLUGIN_VERSION = "1.3.0";
public static Plugin Instance;
internal ManualLogSource logger;
private Harmony harmony;
public HashSet<string> currentSounds = new HashSet<string>();
public HashSet<string> oldSounds = new HashSet<string>();
public HashSet<string> modifiedSounds = new HashSet<string>();
public Dictionary<string, string> soundHashes = new Dictionary<string, string>();
public Dictionary<string, string> soundPacks = new Dictionary<string, string>();
public static ConfigEntry<KeyboardShortcut> AcceptSyncKey;
public static bool Initialized { get; private set; }
private void Awake()
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Expected O, but got Unknown
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)Instance == (Object)null))
{
return;
}
Instance = this;
logger = Logger.CreateLogSource("CustomSounds");
logger.LogInfo((object)"Plugin CustomSounds is loaded!");
harmony = new Harmony("CustomSounds");
harmony.PatchAll();
AcceptSyncKey = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("General", "AcceptSyncKey", new KeyboardShortcut((KeyCode)289, Array.Empty<KeyCode>()), "Key to accept audio sync.");
modifiedSounds = new HashSet<string>();
string customSoundsFolderPath = GetCustomSoundsFolderPath();
if (!Directory.Exists(customSoundsFolderPath))
{
logger.LogInfo((object)"\"CustomSounds\" folder not found. Creating it now.");
Directory.CreateDirectory(customSoundsFolderPath);
}
string path = Path.Combine(Paths.BepInExConfigPath);
try
{
List<string> list = File.ReadAllLines(path).ToList();
int num = list.FindIndex((string line) => line.StartsWith("HideManagerGameObject"));
if (num != -1)
{
logger.LogInfo((object)"\"hideManagerGameObject\" value not correctly set. Fixing it now.");
list[num] = "HideManagerGameObject = true";
}
File.WriteAllLines(path, list);
}
catch (Exception ex)
{
logger.LogError((object)("Error modifying config file: " + ex.Message));
}
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
Type[] array = types;
foreach (Type type in array)
{
MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic);
MethodInfo[] array2 = methods;
foreach (MethodInfo methodInfo in array2)
{
object[] customAttributes = methodInfo.GetCustomAttributes(typeof(RuntimeInitializeOnLoadMethodAttribute), inherit: false);
if (customAttributes.Length != 0)
{
methodInfo.Invoke(null, null);
}
}
}
}
internal void Start()
{
Initialize();
}
internal void OnDestroy()
{
Initialize();
}
internal void Initialize()
{
if (!Initialized)
{
Initialized = true;
DeleteTempFolder();
ReloadSounds(serverSync: false, isTemporarySync: false);
}
}
private void OnApplicationQuit()
{
DeleteTempFolder();
}
public void DeleteTempFolder()
{
string customSoundsTempFolderPath = GetCustomSoundsTempFolderPath();
if (Directory.Exists(customSoundsTempFolderPath))
{
try
{
Directory.Delete(customSoundsTempFolderPath, recursive: true);
logger.LogInfo((object)"Temporary-Sync folder deleted successfully.");
}
catch (Exception ex)
{
logger.LogError((object)("Error deleting Temporary-Sync folder: " + ex.Message));
}
}
}
public string GetCustomSoundsFolderPath()
{
return Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)Instance).Info.Location), "CustomSounds");
}
public string GetCustomSoundsTempFolderPath()
{
return Path.Combine(GetCustomSoundsFolderPath(), "Temp");
}
public static byte[] SerializeWavToBytes(string filePath)
{
try
{
return File.ReadAllBytes(filePath);
}
catch (Exception ex)
{
Console.WriteLine("An error occurred: " + ex.Message);
return null;
}
}
public static string SerializeWavToBase64(string filePath)
{
try
{
byte[] inArray = File.ReadAllBytes(filePath);
return Convert.ToBase64String(inArray);
}
catch (Exception ex)
{
Console.WriteLine("An error occurred: " + ex.Message);
return null;
}
}
public static void DeserializeBytesToWav(byte[] byteArray, string audioFileName)
{
try
{
string customSoundsTempFolderPath = Instance.GetCustomSoundsTempFolderPath();
string path = Path.Combine(customSoundsTempFolderPath, "CustomSounds");
string text = Path.Combine(path, "Temporary-Sync");
if (!Directory.Exists(text))
{
Instance.logger.LogInfo((object)"\"Temporary-Sync\" folder not found. Creating it now.");
Directory.CreateDirectory(text);
}
File.WriteAllBytes(Path.Combine(text, audioFileName), byteArray);
Console.WriteLine("WAV file \"" + audioFileName + "\" created!");
}
catch (Exception ex)
{
Console.WriteLine("An error occurred: " + ex.Message);
}
}
public static List<byte[]> SplitAudioData(byte[] audioData, int maxSegmentSize = 62000)
{
List<byte[]> list = new List<byte[]>();
for (int i = 0; i < audioData.Length; i += maxSegmentSize)
{
int num = Mathf.Min(maxSegmentSize, audioData.Length - i);
byte[] array = new byte[num];
Array.Copy(audioData, i, array, 0, num);
list.Add(array);
}
return list;
}
public static byte[] CombineAudioSegments(List<byte[]> segments)
{
List<byte> list = new List<byte>();
foreach (byte[] segment in segments)
{
list.AddRange(segment);
}
return list.ToArray();
}
public void ShowCustomTip(string header, string body, bool isWarning)
{
HUDManager.Instance.DisplayTip(header, body, isWarning, false, "LC_Tip1");
}
public void ForceUnsync()
{
DeleteTempFolder();
ReloadSounds(serverSync: false, isTemporarySync: false);
}
public void RevertSounds()
{
foreach (string currentSound in currentSounds)
{
logger.LogInfo((object)(currentSound + " restored."));
SoundTool.RestoreAudioClip(currentSound);
}
logger.LogInfo((object)"Original game sounds restored.");
}
public static string CalculateMD5(string filename)
{
using MD5 mD = MD5.Create();
using FileStream inputStream = File.OpenRead(filename);
byte[] array = mD.ComputeHash(inputStream);
return BitConverter.ToString(array).Replace("-", "").ToLowerInvariant();
}
public void ReloadSounds(bool serverSync, bool isTemporarySync)
{
foreach (string currentSound in currentSounds)
{
SoundTool.RestoreAudioClip(currentSound);
}
oldSounds = new HashSet<string>(currentSounds);
modifiedSounds.Clear();
string directoryName = Path.GetDirectoryName(Paths.PluginPath);
currentSounds.Clear();
string customSoundsTempFolderPath = GetCustomSoundsTempFolderPath();
logger.LogInfo((object)("Temporary folder: " + customSoundsTempFolderPath));
if (Directory.Exists(customSoundsTempFolderPath) && isTemporarySync)
{
ProcessDirectory(customSoundsTempFolderPath, serverSync, isTemporarySync: true);
}
ProcessDirectory(directoryName, serverSync, isTemporarySync: false);
}
private void ProcessDirectory(string directoryPath, bool serverSync, bool isTemporarySync)
{
string[] directories = Directory.GetDirectories(directoryPath, "CustomSounds", SearchOption.AllDirectories);
foreach (string text in directories)
{
string fileName = Path.GetFileName(Path.GetDirectoryName(text));
ProcessSoundFiles(text, fileName, serverSync, isTemporarySync);
string[] directories2 = Directory.GetDirectories(text);
foreach (string text2 in directories2)
{
string fileName2 = Path.GetFileName(text2);
ProcessSoundFiles(text2, fileName2, serverSync, isTemporarySync);
}
}
}
private void ProcessSoundFiles(string directoryPath, string packName, bool serverSync, bool isTemporarySync)
{
string[] files = Directory.GetFiles(directoryPath, "*.wav");
foreach (string text in files)
{
string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(text);
string text2 = CalculateMD5(text);
if (!isTemporarySync && modifiedSounds.Contains(fileNameWithoutExtension))
{
break;
}
if (soundHashes.TryGetValue(fileNameWithoutExtension, out var value) && value != text2)
{
modifiedSounds.Add(fileNameWithoutExtension);
}
AudioClip audioClip = SoundTool.GetAudioClip(directoryPath, "", text);
SoundTool.ReplaceAudioClip(fileNameWithoutExtension, audioClip);
soundHashes[fileNameWithoutExtension] = text2;
currentSounds.Add(fileNameWithoutExtension);
soundPacks[fileNameWithoutExtension] = packName;
logger.LogInfo((object)("[" + packName + "] " + fileNameWithoutExtension + " sound replaced!"));
if (serverSync)
{
logger.LogInfo((object)("[" + Path.Combine(directoryPath, fileNameWithoutExtension + ".wav") + "] " + fileNameWithoutExtension + ".wav!"));
AudioNetworkHandler.Instance.QueueAudioData(SerializeWavToBytes(Path.Combine(directoryPath, fileNameWithoutExtension + ".wav")), fileNameWithoutExtension + ".wav");
}
}
}
public string GetSoundChanges()
{
StringBuilder stringBuilder = new StringBuilder("Customsounds reloaded.\n\n");
HashSet<string> arg = new HashSet<string>(currentSounds.Except(oldSounds));
HashSet<string> arg2 = new HashSet<string>(oldSounds.Except(currentSounds));
HashSet<string> arg3 = new HashSet<string>(oldSounds.Intersect(currentSounds).Except(modifiedSounds));
HashSet<string> arg4 = new HashSet<string>(modifiedSounds);
Dictionary<string, List<string>> soundsByPack = new Dictionary<string, List<string>>();
Action<HashSet<string>, string> action = delegate(HashSet<string> soundsSet, string status)
{
foreach (string item in soundsSet)
{
string key = soundPacks[item];
if (!soundsByPack.ContainsKey(key))
{
soundsByPack[key] = new List<string>();
}
soundsByPack[key].Add(item + " (" + status + ")");
}
};
action(arg, "New");
action(arg2, "Deleted");
action(arg4, "Modified");
action(arg3, "Already Existed");
foreach (string key2 in soundsByPack.Keys)
{
stringBuilder.AppendLine(key2 + " :");
foreach (string item2 in soundsByPack[key2])
{
stringBuilder.AppendLine("- " + item2);
}
stringBuilder.AppendLine();
}
return stringBuilder.ToString();
}
public string ListAllSounds()
{
StringBuilder stringBuilder = new StringBuilder("Listing all currently loaded custom sounds:\n\n");
Dictionary<string, List<string>> dictionary = new Dictionary<string, List<string>>();
foreach (string currentSound in currentSounds)
{
string key = soundPacks[currentSound];
if (!dictionary.ContainsKey(key))
{
dictionary[key] = new List<string>();
}
dictionary[key].Add(currentSound);
}
foreach (string key2 in dictionary.Keys)
{
stringBuilder.AppendLine(key2 + " :");
foreach (string item in dictionary[key2])
{
stringBuilder.AppendLine("- " + item);
}
stringBuilder.AppendLine();
}
return stringBuilder.ToString();
}
}
[HarmonyPatch(typeof(Terminal), "ParsePlayerSentence")]
public static class TerminalParsePlayerSentencePatch
{
public static bool Prefix(Terminal __instance, ref TerminalNode __result)
{
string[] array = __instance.screenText.text.Split(new char[1] { '\n' });
if (array.Length == 0)
{
return true;
}
string[] array2 = array.Last().Trim().ToLower()
.Split(new char[1] { ' ' });
if (array2.Length == 0 || array2[0] != "customsounds")
{
return true;
}
Plugin.Instance.logger.LogInfo((object)("Received terminal command: " + string.Join(" ", array2)));
if (array2.Length > 1 && array2[0] == "customsounds")
{
switch (array2[1])
{
case "reload":
Plugin.Instance.ReloadSounds(serverSync: false, isTemporarySync: false);
__result = CreateTerminalNode(Plugin.Instance.GetSoundChanges());
return false;
case "revert":
Plugin.Instance.RevertSounds();
__result = CreateTerminalNode("Game sounds reverted to original.");
return false;
case "list":
__result = CreateTerminalNode(Plugin.Instance.ListAllSounds());
return false;
case "help":
if (NetworkManager.Singleton.IsHost)
{
__result = CreateTerminalNode("CustomSounds commands.\n\n>CUSTOMSOUNDS LIST\nTo displays all currently loaded sounds\n\n>CUSTOMSOUNDS RELOAD\nTo reloads and applies sounds from the 'CustomSounds' folder and its subfolders.\n\n>CUSTOMSOUNDS REVERT\nTo unloads all custom sounds and restores original game sounds\n\n>CUSTOMSOUNDS SYNC\nStarts the sync of custom sounds with clients\n\n>CUSTOMSOUNDS FORCE-UNSYNC\nForces the unsync process for all clients");
}
else
{
__result = CreateTerminalNode("CustomSounds commands.\n\n>CUSTOMSOUNDS LIST\nTo displays all currently loaded sounds\n\n>CUSTOMSOUNDS RELOAD\nTo reloads and applies sounds from the 'CustomSounds' folder and its subfolders.\n\n>CUSTOMSOUNDS REVERT\nTo unloads all custom sounds and restores original game sounds\n\n>CUSTOMSOUNDS UNSYNC\nUnsyncs sounds sent by the host.");
}
return false;
case "sync":
if (NetworkManager.Singleton.IsHost)
{
__result = CreateTerminalNode("Custom sound sync initiated. \nSyncing sounds with clients...");
Plugin.Instance.ReloadSounds(serverSync: true, isTemporarySync: false);
}
else
{
__result = CreateTerminalNode("/!\\ ERROR /!\\ \nThis command can only be used by the host!");
}
return false;
case "unsync":
if (!NetworkManager.Singleton.IsHost)
{
__result = CreateTerminalNode("Unsyncing custom sounds. \nTemporary files deleted and original sounds reloaded.");
Plugin.Instance.DeleteTempFolder();
Plugin.Instance.ReloadSounds(serverSync: false, isTemporarySync: false);
}
else
{
__result = CreateTerminalNode("/!\\ ERROR /!\\ \nThis command cannot be used by the host!");
}
return false;
case "force-unsync":
if (NetworkManager.Singleton.IsHost)
{
__result = CreateTerminalNode("Forcing unsync for all clients. \nAll client-side temporary synced files have been deleted, and original sounds reloaded.");
AudioNetworkHandler.Instance.ForceUnsync();
}
else
{
__result = CreateTerminalNode("/!\\ ERROR /!\\ \nThis command can only be used by the host!");
}
return false;
default:
__result = CreateTerminalNode("Unknown customsounds command.");
return false;
}
}
return true;
}
private static TerminalNode CreateTerminalNode(string message)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Expected O, but got Unknown
return new TerminalNode
{
displayText = message,
clearPreviousText = true
};
}
}
[HarmonyPatch]
public class NetworkObjectManager
{
private static GameObject networkPrefab;
private static GameObject networkHandlerHost;
[HarmonyPatch(typeof(GameNetworkManager), "Start")]
[HarmonyPrefix]
public static void Init()
{
if (!((Object)(object)networkPrefab != (Object)null))
{
AssetBundle val = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "audionetworkhandler"));
networkPrefab = val.LoadAsset<GameObject>("assets/audionetworkhandler.prefab");
networkPrefab.AddComponent<AudioNetworkHandler>();
NetworkManager.Singleton.AddNetworkPrefab(networkPrefab);
Plugin.Instance.logger.LogInfo((object)"Created AudioNetworkHandler prefab");
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(StartOfRound), "Awake")]
private static void SpawnNetworkHandler()
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
try
{
if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)
{
Plugin.Instance.logger.LogInfo((object)"Spawning network handler");
networkHandlerHost = Object.Instantiate<GameObject>(networkPrefab, Vector3.zero, Quaternion.identity);
if (networkHandlerHost.GetComponent<NetworkObject>().IsSpawned)
{
Debug.Log((object)"NetworkObject is spawned and active.");
}
else
{
Debug.Log((object)"Failed to spawn NetworkObject.");
}
networkHandlerHost.GetComponent<NetworkObject>().Spawn(true);
if ((Object)(object)AudioNetworkHandler.Instance != (Object)null)
{
Debug.Log((object)"Successfully accessed AudioNetworkHandler instance.");
}
else
{
Debug.Log((object)"AudioNetworkHandler instance is null.");
}
}
}
catch
{
Plugin.Instance.logger.LogError((object)"Failed to spawned network handler");
}
}
[HarmonyPostfix]
[HarmonyPatch(typeof(GameNetworkManager), "StartDisconnect")]
private static void DestroyNetworkHandler()
{
try
{
if (NetworkManager.Singleton.IsHost || NetworkManager.Singleton.IsServer)
{
Plugin.Instance.logger.LogInfo((object)"Destroying network handler");
Object.Destroy((Object)(object)networkHandlerHost);
networkHandlerHost = null;
}
}
catch
{
Plugin.Instance.logger.LogError((object)"Failed to destroy network handler");
}
}
}
}
namespace CustomSoundsComponents
{
public class AudioNetworkHandler : NetworkBehaviour
{
private struct AudioData
{
public List<byte[]> Segments;
public string FileName;
public AudioData(List<byte[]> segments, string fileName)
{
Segments = segments;
FileName = fileName;
}
}
private List<byte[]> receivedAudioSegments = new List<byte[]>();
private string audioFileName;
private int totalAudioFiles;
private int processedAudioFiles;
private int totalSegments;
private int processedSegments;
private bool isRequestingSync;
private float[] progressThresholds = new float[4] { 0.25f, 0.5f, 0.75f, 1f };
private int lastThresholdIndex = -1;
private bool hasAcceptedSync = false;
private Queue<AudioData> audioQueue = new Queue<AudioData>();
private bool isSendingAudio = false;
public static AudioNetworkHandler Instance { get; private set; }
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
Debug.Log((object)"AudioNetworkHandler instance created.");
}
else
{
Object.Destroy((Object)(object)((Component)this).gameObject);
Debug.Log((object)"Extra AudioNetworkHandler instance destroyed.");
}
}
private void Update()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
if (isRequestingSync)
{
KeyboardShortcut value = Plugin.AcceptSyncKey.Value;
if (((KeyboardShortcut)(ref value)).IsPressed())
{
Plugin.Instance.ShowCustomTip("CustomSounds Sync", "Sync request accepted successfully!", isWarning: false);
hasAcceptedSync = true;
isRequestingSync = false;
}
}
}
public void QueueAudioData(byte[] audioData, string audioName)
{
List<byte[]> list = Plugin.SplitAudioData(audioData);
totalSegments += list.Count;
audioQueue.Enqueue(new AudioData(list, audioName));
if (!isSendingAudio)
{
totalAudioFiles = audioQueue.Count;
processedAudioFiles = 0;
((MonoBehaviour)this).StartCoroutine(SendAudioDataQueue());
}
}
private IEnumerator SendAudioDataQueue()
{
isSendingAudio = true;
totalSegments = 0;
processedSegments = 0;
lastThresholdIndex = -1;
RequestSyncWithClients();
yield return (object)new WaitForSeconds(6f);
isRequestingSync = false;
DisplayStartingSyncMessageClientRpc();
yield return (object)new WaitForSeconds(2f);
while (audioQueue.Count > 0)
{
AudioData audioData = audioQueue.Dequeue();
yield return ((MonoBehaviour)this).StartCoroutine(SendAudioDataCoroutine(audioData.Segments, audioData.FileName));
processedAudioFiles++;
UpdateProgress();
}
NotifyClientsQueueCompletedServerRpc();
isSendingAudio = false;
}
private void RequestSyncWithClients()
{
foreach (NetworkClient connectedClients in NetworkManager.Singleton.ConnectedClientsList)
{
RequestSyncClientRpc(connectedClients.ClientId);
}
}
[ClientRpc]
private void RequestSyncClientRpc(ulong clientId)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2972646148u, val, (RpcDelivery)0);
BytePacker.WriteValueBitPacked(val2, clientId);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2972646148u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((NetworkBehaviour)this).IsServer)
{
Plugin.Instance.ShowCustomTip("CustomSounds Sync", $"Press {Plugin.AcceptSyncKey.Value} to accept the audio sync request.", isWarning: false);
isRequestingSync = true;
}
}
}
[ServerRpc(RequireOwnership = false)]
private void NotifyClientsQueueCompletedServerRpc(ServerRpcParams rpcParams = default(ServerRpcParams))
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
{
FastBufferWriter val = ((NetworkBehaviour)this).__beginSendServerRpc(7622943u, rpcParams, (RpcDelivery)0);
((NetworkBehaviour)this).__endSendServerRpc(ref val, 7622943u, rpcParams, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
{
ProcessLastAudioFileClientRpc();
}
}
}
public void ForceUnsync()
{
ForceUnsyncClientsClientRpc();
}
[ClientRpc]
private void ForceUnsyncClientsClientRpc()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2003401161u, val, (RpcDelivery)0);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2003401161u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
{
if (((NetworkBehaviour)this).IsServer)
{
Debug.Log((object)"Forcing all clients to delete Temporary-Sync folder.");
return;
}
Plugin.Instance.ShowCustomTip("CustomSounds Sync", "The CustomSounds sync has been reset by the host.\nTemporary files deleted and original sounds reloaded", isWarning: false);
Plugin.Instance.DeleteTempFolder();
Plugin.Instance.ReloadSounds(serverSync: false, isTemporarySync: false);
}
}
[ClientRpc]
private void ProcessLastAudioFileClientRpc()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(4040701590u, val, (RpcDelivery)0);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 4040701590u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && hasAcceptedSync)
{
hasAcceptedSync = false;
ProcessLastAudioFile();
Debug.Log((object)"Reloading all sounds.");
Plugin.Instance.ReloadSounds(serverSync: false, isTemporarySync: true);
Debug.Log((object)"All sounds reloaded!");
}
}
}
private void ProcessLastAudioFile()
{
if (receivedAudioSegments.Count > 0 && !string.IsNullOrEmpty(audioFileName))
{
byte[] byteArray = Plugin.CombineAudioSegments(receivedAudioSegments);
Plugin.DeserializeBytesToWav(byteArray, audioFileName);
receivedAudioSegments.Clear();
audioFileName = null;
}
}
public void SendAudioData(byte[] audioData, string audioName)
{
List<byte[]> list = Plugin.SplitAudioData(audioData);
audioFileName = audioName;
SendAudioMetaDataToClientsServerRpc(list.Count, audioName);
((MonoBehaviour)this).StartCoroutine(SendAudioDataCoroutine(list, audioName));
}
[ServerRpc]
public void SendAudioMetaDataToClientsServerRpc(int totalSegments, string fileName)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_0127: Invalid comparison between Unknown and I4
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b7: 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_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Invalid comparison between Unknown and I4
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
{
if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
{
if ((int)networkManager.LogLevel <= 1)
{
Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
}
return;
}
ServerRpcParams val = default(ServerRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1097096011u, val, (RpcDelivery)0);
BytePacker.WriteValueBitPacked(val2, totalSegments);
bool flag = fileName != null;
((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
if (flag)
{
((FastBufferWriter)(ref val2)).WriteValueSafe(fileName, false);
}
((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1097096011u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
{
Debug.Log((object)$"Sending metadata to clients: {totalSegments} segments, file name: {fileName}");
ReceiveAudioMetaDataClientRpc(totalSegments, fileName);
}
}
private IEnumerator SendAudioDataCoroutine(List<byte[]> audioSegments, string audioName)
{
foreach (byte[] segment in audioSegments)
{
SendBytesToServerRpc(segment, audioName);
processedSegments++;
UpdateProgress();
yield return (object)new WaitForSeconds(0.2f);
}
}
[ServerRpc]
public void SendBytesToServerRpc(byte[] audioSegment, string audioName)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_0165: Invalid comparison between Unknown and I4
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Invalid comparison between Unknown and I4
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
{
if (((NetworkBehaviour)this).OwnerClientId != networkManager.LocalClientId)
{
if ((int)networkManager.LogLevel <= 1)
{
Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
}
return;
}
ServerRpcParams val = default(ServerRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1071539030u, val, (RpcDelivery)0);
bool flag = audioSegment != null;
((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
if (flag)
{
((FastBufferWriter)(ref val2)).WriteValueSafe<byte>(audioSegment, default(ForPrimitives));
}
bool flag2 = audioName != null;
((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
if (flag2)
{
((FastBufferWriter)(ref val2)).WriteValueSafe(audioName, false);
}
((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1071539030u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
{
Debug.Log((object)("Sending segment to server: " + audioName));
ReceiveBytesClientRpc(audioSegment, audioName);
}
}
[ClientRpc]
public void ReceiveAudioMetaDataClientRpc(int totalSegments, string fileName)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1763043401u, val, (RpcDelivery)0);
BytePacker.WriteValueBitPacked(val2, totalSegments);
bool flag = fileName != null;
((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
if (flag)
{
((FastBufferWriter)(ref val2)).WriteValueSafe(fileName, false);
}
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1763043401u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
{
Debug.Log((object)$"Received metadata on client: {totalSegments} segments expected, file name: {fileName}");
audioFileName = fileName;
receivedAudioSegments.Clear();
}
}
[ClientRpc]
public void ReceiveBytesClientRpc(byte[] audioSegment, string audioName)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3050949415u, val, (RpcDelivery)0);
bool flag = audioSegment != null;
((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
if (flag)
{
((FastBufferWriter)(ref val2)).WriteValueSafe<byte>(audioSegment, default(ForPrimitives));
}
bool flag2 = audioName != null;
((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
if (flag2)
{
((FastBufferWriter)(ref val2)).WriteValueSafe(audioName, false);
}
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3050949415u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost) && !((NetworkBehaviour)this).IsServer && hasAcceptedSync)
{
if (!string.IsNullOrEmpty(audioName) && audioFileName != audioName)
{
ProcessLastAudioFile();
audioFileName = audioName;
}
receivedAudioSegments.Add(audioSegment);
}
}
[ClientRpc]
private void DisplayStartingSyncMessageClientRpc()
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1865118122u, val, (RpcDelivery)0);
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1865118122u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage == 2 && (networkManager.IsClient || networkManager.IsHost))
{
if (hasAcceptedSync)
{
Plugin.Instance.ShowCustomTip("CustomSounds Sync", "Starting audio synchronization. Please wait...", isWarning: false);
}
else if (((NetworkBehaviour)this).IsServer)
{
Plugin.Instance.ShowCustomTip("CustomSounds Sync", "Initiating audio synchronization. Sending files to clients...", isWarning: false);
}
}
}
private void UpdateProgress()
{
float progress = (float)processedSegments / (float)totalSegments;
int currentThresholdIndex = GetCurrentThresholdIndex(progress);
if (currentThresholdIndex > lastThresholdIndex)
{
lastThresholdIndex = currentThresholdIndex;
UpdateProgressClientRpc(progress);
}
}
private int GetCurrentThresholdIndex(float progress)
{
for (int num = progressThresholds.Length - 1; num >= 0; num--)
{
if (progress >= progressThresholds[num])
{
return num;
}
}
return -1;
}
[ClientRpc]
private void UpdateProgressClientRpc(float progress)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Invalid comparison between Unknown and I4
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Invalid comparison between Unknown and I4
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if ((int)base.__rpc_exec_stage != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(2844500200u, val, (RpcDelivery)0);
((FastBufferWriter)(ref val2)).WriteValueSafe<float>(ref progress, default(ForPrimitives));
((NetworkBehaviour)this).__endSendClientRpc(ref val2, 2844500200u, val, (RpcDelivery)0);
}
if ((int)base.__rpc_exec_stage != 2 || (!networkManager.IsClient && !networkManager.IsHost) || (!((NetworkBehaviour)this).IsServer && !hasAcceptedSync))
{
return;
}
string text = GenerateProgressBar(progress);
if (progress < 1f)
{
if (!((NetworkBehaviour)this).IsServer)
{
Plugin.Instance.ShowCustomTip("CustomSounds Sync", "Sounds transfer progression:\n" + text, isWarning: false);
}
}
else if (((NetworkBehaviour)this).IsServer)
{
Plugin.Instance.ShowCustomTip("CustomSounds Sync", "All sounds have been successfully sent!", isWarning: false);
}
else
{
Plugin.Instance.ShowCustomTip("CustomSounds Sync", "All sounds have been successfully received!", isWarning: false);
}
}
private string GenerateProgressBar(float progress)
{
int num = 26;
progress = Mathf.Clamp(progress, 0f, 1f);
int num2 = (int)(progress * (float)num);
return "[" + new string('#', num2) + new string('-', num - num2) + "] " + (int)(progress * 100f) + "%";
}
protected override void __initializeVariables()
{
((NetworkBehaviour)this).__initializeVariables();
}
[RuntimeInitializeOnLoadMethod]
internal static void InitializeRPCS_AudioNetworkHandler()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected O, but got Unknown
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Expected O, but got Unknown
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Expected O, but got Unknown
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Expected O, but got Unknown
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: Expected O, but got Unknown
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Expected O, but got Unknown
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Expected O, but got Unknown
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Expected O, but got Unknown
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Expected O, but got Unknown
NetworkManager.__rpc_func_table.Add(2972646148u, new RpcReceiveHandler(__rpc_handler_2972646148));
NetworkManager.__rpc_func_table.Add(7622943u, new RpcReceiveHandler(__rpc_handler_7622943));
NetworkManager.__rpc_func_table.Add(2003401161u, new RpcReceiveHandler(__rpc_handler_2003401161));
NetworkManager.__rpc_func_table.Add(4040701590u, new RpcReceiveHandler(__rpc_handler_4040701590));
NetworkManager.__rpc_func_table.Add(1097096011u, new RpcReceiveHandler(__rpc_handler_1097096011));
NetworkManager.__rpc_func_table.Add(1071539030u, new RpcReceiveHandler(__rpc_handler_1071539030));
NetworkManager.__rpc_func_table.Add(1763043401u, new RpcReceiveHandler(__rpc_handler_1763043401));
NetworkManager.__rpc_func_table.Add(3050949415u, new RpcReceiveHandler(__rpc_handler_3050949415));
NetworkManager.__rpc_func_table.Add(1865118122u, new RpcReceiveHandler(__rpc_handler_1865118122));
NetworkManager.__rpc_func_table.Add(2844500200u, new RpcReceiveHandler(__rpc_handler_2844500200));
}
private static void __rpc_handler_2972646148(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
ulong clientId = default(ulong);
ByteUnpacker.ReadValueBitPacked(reader, ref clientId);
target.__rpc_exec_stage = (__RpcExecStage)2;
((AudioNetworkHandler)(object)target).RequestSyncClientRpc(clientId);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_7622943(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
ServerRpcParams server = rpcParams.Server;
target.__rpc_exec_stage = (__RpcExecStage)1;
((AudioNetworkHandler)(object)target).NotifyClientsQueueCompletedServerRpc(server);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_2003401161(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
target.__rpc_exec_stage = (__RpcExecStage)2;
((AudioNetworkHandler)(object)target).ForceUnsyncClientsClientRpc();
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_4040701590(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
target.__rpc_exec_stage = (__RpcExecStage)2;
((AudioNetworkHandler)(object)target).ProcessLastAudioFileClientRpc();
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_1097096011(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Invalid comparison between Unknown and I4
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
{
if ((int)networkManager.LogLevel <= 1)
{
Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
}
return;
}
int num = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref num);
bool flag = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
string fileName = null;
if (flag)
{
((FastBufferReader)(ref reader)).ReadValueSafe(ref fileName, false);
}
target.__rpc_exec_stage = (__RpcExecStage)1;
((AudioNetworkHandler)(object)target).SendAudioMetaDataToClientsServerRpc(num, fileName);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
private static void __rpc_handler_1071539030(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Invalid comparison between Unknown and I4
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager == null || !networkManager.IsListening)
{
return;
}
if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
{
if ((int)networkManager.LogLevel <= 1)
{
Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
}
return;
}
bool flag = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
byte[] audioSegment = null;
if (flag)
{
((FastBufferReader)(ref reader)).ReadValueSafe<byte>(ref audioSegment, default(ForPrimitives));
}
bool flag2 = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
string audioName = null;
if (flag2)
{
((FastBufferReader)(ref reader)).ReadValueSafe(ref audioName, false);
}
target.__rpc_exec_stage = (__RpcExecStage)1;
((AudioNetworkHandler)(object)target).SendBytesToServerRpc(audioSegment, audioName);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
private static void __rpc_handler_1763043401(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0023: 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_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
int num = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref num);
bool flag = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
string fileName = null;
if (flag)
{
((FastBufferReader)(ref reader)).ReadValueSafe(ref fileName, false);
}
target.__rpc_exec_stage = (__RpcExecStage)2;
((AudioNetworkHandler)(object)target).ReceiveAudioMetaDataClientRpc(num, fileName);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_3050949415(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: 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_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
bool flag = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
byte[] audioSegment = null;
if (flag)
{
((FastBufferReader)(ref reader)).ReadValueSafe<byte>(ref audioSegment, default(ForPrimitives));
}
bool flag2 = default(bool);
((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
string audioName = null;
if (flag2)
{
((FastBufferReader)(ref reader)).ReadValueSafe(ref audioName, false);
}
target.__rpc_exec_stage = (__RpcExecStage)2;
((AudioNetworkHandler)(object)target).ReceiveBytesClientRpc(audioSegment, audioName);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_1865118122(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
target.__rpc_exec_stage = (__RpcExecStage)2;
((AudioNetworkHandler)(object)target).DisplayStartingSyncMessageClientRpc();
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
private static void __rpc_handler_2844500200(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = target.NetworkManager;
if (networkManager != null && networkManager.IsListening)
{
float progress = default(float);
((FastBufferReader)(ref reader)).ReadValueSafe<float>(ref progress, default(ForPrimitives));
target.__rpc_exec_stage = (__RpcExecStage)2;
((AudioNetworkHandler)(object)target).UpdateProgressClientRpc(progress);
target.__rpc_exec_stage = (__RpcExecStage)0;
}
}
protected internal override string __getTypeName()
{
return "AudioNetworkHandler";
}
}
}