using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using GameNetcodeStuff;
using HarmonyLib;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyTitle("FrequencyWalkie")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("FrequencyWalkie")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("35C861E5-B445-4C78-8068-886EDD23D8E3")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace FrequencyWalkie;
public static class Assets
{
private static Dictionary<string, Object> _assets = new Dictionary<string, Object>();
public static T GetResource<T>(string objName) where T : Object
{
if (_assets.TryGetValue(objName, out var value))
{
return (T)(object)value;
}
T[] array = Resources.FindObjectsOfTypeAll<T>();
foreach (T val in array)
{
if (((Object)val).name == objName)
{
_assets.Add(objName, (Object)(object)val);
return val;
}
}
return default(T);
}
}
internal enum RpcExecStage
{
None,
Server,
Client
}
[BepInPlugin("larko.frequencywalkie", "FrequencyWalkie", "1.3.1")]
public class FrequencyWalkie : BaseUnityPlugin
{
public static Dictionary<int, int> walkieTalkieFrequencies = new Dictionary<int, int>();
public static List<string> frequencies = new List<string>
{
"BR.d", "18.3", "19.5", "21.7", "23.3", "25.0", "27.9", "29.3", "31.3", "33.6",
"35.4", "36.8", "37.7", "38.6", "39.4", "40.2", "42.3", "43.8", "44.5", "45.1",
"46.9", "47.2", "47.8", "48.1", "48.5"
};
public static string tooltip = "[R] Increase frequency\n[F] Decrease frequency";
private void Awake()
{
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Expected O, but got Unknown
Patches.ApplyPatches(new Harmony("larko.frequencywalkie"));
}
public static T GetResource<T>(string objName) where T : Object
{
T[] array = Resources.FindObjectsOfTypeAll<T>();
foreach (T val in array)
{
if (((Object)val).name == objName)
{
return val;
}
}
return default(T);
}
public static IEnumerator OnFrequencyChanged(WalkieTalkie walkie, bool increased)
{
Canvas canvas = ((Component)walkie).gameObject.GetComponent<Canvas>();
((Component)canvas).GetComponentInChildren<Text>().text = "<b><size=40>" + frequencies[walkieTalkieFrequencies[((Object)walkie).GetInstanceID()]] + "</size><i><size=30>MHz</size></i></b>";
AccessTools.Method(typeof(WalkieTalkie), "SendWalkieTalkieStartTransmissionSFX", (Type[])null, (Type[])null).Invoke(walkie, new object[1] { (int)((GrabbableObject)walkie).playerHeldBy.playerClientId });
if (walkieTalkieFrequencies[((Object)walkie).GetInstanceID()] == 0)
{
((Component)((Component)canvas).transform.GetChild(((Component)canvas).transform.childCount - 4)).gameObject.SetActive(true);
}
else
{
((Component)((Component)canvas).transform.GetChild(((Component)canvas).transform.childCount - 4)).gameObject.SetActive(false);
}
if (increased)
{
((Component)((Component)canvas).transform.GetChild(((Component)canvas).transform.childCount - 2)).gameObject.SetActive(false);
}
else
{
((Component)((Component)canvas).transform.GetChild(((Component)canvas).transform.childCount - 1)).gameObject.SetActive(false);
}
yield return (object)new WaitForSeconds(0.5f);
((Component)((Component)canvas).transform.GetChild(((Component)canvas).transform.childCount - 1)).gameObject.SetActive(true);
((Component)((Component)canvas).transform.GetChild(((Component)canvas).transform.childCount - 2)).gameObject.SetActive(true);
}
public static void SetPlayerSpeakingOnWalkieTalkieServerRpc(WalkieTalkie instance, int playerId, int frequency)
{
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00d8: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: 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_00f9: 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_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Invalid comparison between Unknown and I4
NetworkManager networkManager = ((NetworkBehaviour)instance).NetworkManager;
if ((Object)(object)networkManager == (Object)null || !networkManager.IsListening)
{
return;
}
int num = (int)AccessTools.Field(typeof(WalkieTalkie), "__rpc_exec_stage").GetValue(instance);
MethodInfo methodInfo = AccessTools.Method(typeof(WalkieTalkie), "__beginSendServerRpc", (Type[])null, (Type[])null);
MethodInfo methodInfo2 = AccessTools.Method(typeof(WalkieTalkie), "__endSendServerRpc", (Type[])null, (Type[])null);
if (num != 1 && (networkManager.IsClient || networkManager.IsHost))
{
if (((NetworkBehaviour)instance).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 = (FastBufferWriter)methodInfo.Invoke(instance, new object[3]
{
64994802u,
val,
(object)(RpcDelivery)0
});
BytePacker.WriteValueBitPacked(val2, playerId);
BytePacker.WriteValueBitPacked(val2, frequency);
methodInfo2.Invoke(instance, new object[4]
{
val2,
64994802u,
val,
(object)(RpcDelivery)0
});
}
if (num == 1 && (networkManager.IsServer || networkManager.IsHost))
{
SetPlayerSpeakingOnWalkieTalkieClientRpc(instance, playerId, frequency);
}
}
public static void SetPlayerSpeakingOnWalkieTalkieClientRpc(WalkieTalkie instance, int playerId, int frequency)
{
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
NetworkManager networkManager = ((NetworkBehaviour)instance).NetworkManager;
if ((Object)(object)networkManager == (Object)null || !networkManager.IsListening)
{
return;
}
int num = (int)AccessTools.Field(typeof(WalkieTalkie), "__rpc_exec_stage").GetValue(instance);
MethodInfo methodInfo = AccessTools.Method(typeof(WalkieTalkie), "__beginSendClientRpc", (Type[])null, (Type[])null);
MethodInfo methodInfo2 = AccessTools.Method(typeof(WalkieTalkie), "__endSendClientRpc", (Type[])null, (Type[])null);
MethodInfo methodInfo3 = AccessTools.Method(typeof(WalkieTalkie), "SendWalkieTalkieStartTransmissionSFX", (Type[])null, (Type[])null);
if (num != 2 && (networkManager.IsServer || networkManager.IsHost))
{
ClientRpcParams val = default(ClientRpcParams);
FastBufferWriter val2 = (FastBufferWriter)methodInfo.Invoke(instance, new object[3]
{
2961867446u,
val,
(object)(RpcDelivery)0
});
BytePacker.WriteValueBitPacked(val2, playerId);
BytePacker.WriteValueBitPacked(val2, frequency);
methodInfo2.Invoke(instance, new object[4]
{
val2,
2961867446u,
val,
(object)(RpcDelivery)0
});
}
if (num != 2 || (!networkManager.IsClient && !networkManager.IsHost))
{
return;
}
for (int i = 0; i < WalkieTalkie.allWalkieTalkies.Count; i++)
{
if ((int)((GrabbableObject)WalkieTalkie.allWalkieTalkies[i]).playerHeldBy.playerClientId == playerId)
{
walkieTalkieFrequencies[((Object)WalkieTalkie.allWalkieTalkies[i]).GetInstanceID()] = frequency;
((MonoBehaviour)instance).StartCoroutine(OnFrequencyChanged(WalkieTalkie.allWalkieTalkies[i], increased: false));
break;
}
}
if (walkieTalkieFrequencies[((Object)instance).GetInstanceID()] == frequency || frequency == 0)
{
StartOfRound.Instance.allPlayerScripts[playerId].speakingToWalkieTalkie = true;
instance.clientIsHoldingAndSpeakingIntoThis = true;
methodInfo3.Invoke(instance, new object[1] { playerId });
StartOfRound.Instance.UpdatePlayerVoiceEffects();
}
}
}
public static class Patches
{
public static void ApplyPatches(Harmony harmony)
{
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Expected O, but got Unknown
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Expected O, but got Unknown
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00c3: Expected O, but got Unknown
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0107: Expected O, but got Unknown
//IL_013e: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Expected O, but got Unknown
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_018f: Expected O, but got Unknown
//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
//IL_01d3: Expected O, but got Unknown
//IL_020a: Unknown result type (might be due to invalid IL or missing references)
//IL_0217: Expected O, but got Unknown
MethodInfo methodInfo = AccessTools.Method(typeof(WalkieTalkie), "SetLocalClientSpeaking", (Type[])null, (Type[])null);
MethodInfo methodInfo2 = AccessTools.Method(typeof(Patches), "WalkieTalkie_SetLocalClientSpeaking", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo, new HarmonyMethod(methodInfo2), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo methodInfo3 = AccessTools.Method(typeof(WalkieTalkie), "__rpc_handler_64994802", (Type[])null, (Type[])null);
MethodInfo methodInfo4 = AccessTools.Method(typeof(Patches), "WalkieTalkie_HandlePlayerSpeakingServerRPC", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo3, new HarmonyMethod(methodInfo4), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo methodInfo5 = AccessTools.Method(typeof(WalkieTalkie), "__rpc_handler_2961867446", (Type[])null, (Type[])null);
MethodInfo methodInfo6 = AccessTools.Method(typeof(Patches), "WalkieTalkie_HandlePlayerSpeakingClientRPC", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo5, new HarmonyMethod(methodInfo6), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo methodInfo7 = AccessTools.Method(typeof(WalkieTalkie), "Update", (Type[])null, (Type[])null);
MethodInfo methodInfo8 = AccessTools.Method(typeof(Patches), "WalkieTalkie_Update", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo7, (HarmonyMethod)null, new HarmonyMethod(methodInfo8), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo methodInfo9 = AccessTools.Method(typeof(WalkieTalkie), "Start", (Type[])null, (Type[])null);
MethodInfo methodInfo10 = AccessTools.Method(typeof(Patches), "WalkieTalkie_Start", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo9, (HarmonyMethod)null, new HarmonyMethod(methodInfo10), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo methodInfo11 = AccessTools.Method(typeof(WalkieTalkie), "SwitchWalkieTalkieOn", (Type[])null, (Type[])null);
MethodInfo methodInfo12 = AccessTools.Method(typeof(Patches), "WalkieTalkie_SwitchWalkieTalkieOn", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo11, (HarmonyMethod)null, new HarmonyMethod(methodInfo12), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo methodInfo13 = AccessTools.Method(typeof(WalkieTalkie), "EquipItem", (Type[])null, (Type[])null);
MethodInfo methodInfo14 = AccessTools.Method(typeof(Patches), "WalkieTalkie_EquipItem", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo13, (HarmonyMethod)null, new HarmonyMethod(methodInfo14), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
MethodInfo methodInfo15 = AccessTools.Method(typeof(WalkieTalkie), "PocketItem", (Type[])null, (Type[])null);
MethodInfo methodInfo16 = AccessTools.Method(typeof(Patches), "WalkieTalkie_PocketItem", (Type[])null, (Type[])null);
harmony.Patch((MethodBase)methodInfo15, (HarmonyMethod)null, new HarmonyMethod(methodInfo16), (HarmonyMethod)null, (HarmonyMethod)null, (HarmonyMethod)null);
}
private static void WalkieTalkie_EquipItem(WalkieTalkie __instance)
{
if (((GrabbableObject)__instance).isBeingUsed)
{
((Behaviour)((Component)__instance).gameObject.GetComponent<Canvas>()).enabled = true;
}
}
private static void WalkieTalkie_PocketItem(WalkieTalkie __instance)
{
((Behaviour)((Component)__instance).gameObject.GetComponent<Canvas>()).enabled = false;
}
private static void WalkieTalkie_Start(WalkieTalkie __instance)
{
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Expected O, but got Unknown
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Expected O, but got Unknown
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_0166: Unknown result type (might be due to invalid IL or missing references)
//IL_016b: Unknown result type (might be due to invalid IL or missing references)
//IL_017c: Unknown result type (might be due to invalid IL or missing references)
//IL_0191: Unknown result type (might be due to invalid IL or missing references)
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ea: Unknown result type (might be due to invalid IL or missing references)
//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0209: Unknown result type (might be due to invalid IL or missing references)
//IL_0213: Unknown result type (might be due to invalid IL or missing references)
//IL_0228: Unknown result type (might be due to invalid IL or missing references)
//IL_0247: Unknown result type (might be due to invalid IL or missing references)
//IL_0256: Unknown result type (might be due to invalid IL or missing references)
//IL_025b: Unknown result type (might be due to invalid IL or missing references)
//IL_026c: Unknown result type (might be due to invalid IL or missing references)
//IL_0281: Unknown result type (might be due to invalid IL or missing references)
//IL_028b: Unknown result type (might be due to invalid IL or missing references)
//IL_02a0: Unknown result type (might be due to invalid IL or missing references)
//IL_02aa: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02de: Unknown result type (might be due to invalid IL or missing references)
//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
//IL_02f2: Unknown result type (might be due to invalid IL or missing references)
//IL_0303: Unknown result type (might be due to invalid IL or missing references)
//IL_0318: Unknown result type (might be due to invalid IL or missing references)
//IL_0322: Unknown result type (might be due to invalid IL or missing references)
//IL_0337: Unknown result type (might be due to invalid IL or missing references)
//IL_0341: Unknown result type (might be due to invalid IL or missing references)
//IL_0356: Unknown result type (might be due to invalid IL or missing references)
//IL_037a: Unknown result type (might be due to invalid IL or missing references)
//IL_0389: Unknown result type (might be due to invalid IL or missing references)
//IL_038e: Unknown result type (might be due to invalid IL or missing references)
//IL_039f: Unknown result type (might be due to invalid IL or missing references)
//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
//IL_03be: Unknown result type (might be due to invalid IL or missing references)
//IL_03d3: Unknown result type (might be due to invalid IL or missing references)
//IL_03dd: Unknown result type (might be due to invalid IL or missing references)
//IL_03f2: Unknown result type (might be due to invalid IL or missing references)
//IL_042c: Unknown result type (might be due to invalid IL or missing references)
//IL_0436: Unknown result type (might be due to invalid IL or missing references)
//IL_047c: Unknown result type (might be due to invalid IL or missing references)
//IL_04ac: Unknown result type (might be due to invalid IL or missing references)
FrequencyWalkie.walkieTalkieFrequencies.Add(((Object)__instance).GetInstanceID(), 0);
((GrabbableObject)__instance).itemProperties.toolTips = CollectionExtensions.AddToArray<string>(((GrabbableObject)__instance).itemProperties.toolTips, FrequencyWalkie.tooltip);
RenderTexture val = new RenderTexture(__instance.onMaterial.mainTexture.width, __instance.onMaterial.mainTexture.width, 32);
Graphics.Blit(__instance.onMaterial.mainTexture, val);
RenderTexture.active = val;
Texture2D val2 = new Texture2D(__instance.onMaterial.mainTexture.width, __instance.onMaterial.mainTexture.height);
val2.ReadPixels(new Rect(0f, 0f, (float)((Texture)val2).width, (float)((Texture)val2).height), 0, 0);
Color[] array = (Color[])(object)new Color[((Texture)val2).width * ((Texture)val2).height];
for (int i = 0; i < array.Length; i++)
{
array[i] = new Color(122f, 150f, 121f);
}
val2.SetPixels(420, 64, 135, 76, array);
val2.Apply();
RenderTexture.active = null;
__instance.onMaterial.mainTexture = (Texture)(object)val2;
Canvas val3 = ((Component)__instance).gameObject.AddComponent<Canvas>();
val3.renderMode = (RenderMode)2;
val3.worldCamera = Camera.main;
((Component)val3).GetComponent<RectTransform>().sizeDelta = new Vector2(40f, 40f);
GameObject val4 = new GameObject("Text");
val4.transform.parent = ((Component)val3).transform;
val4.transform.localPosition = new Vector3(2.7f, -0.9f, -0.23f);
val4.transform.localRotation = Quaternion.Euler(-90f, -90f, 0f);
GameObject val5 = new GameObject("Circle");
val5.transform.parent = ((Component)val3).transform;
val5.transform.localPosition = new Vector3(3.25f, -0.9f, -0.45f);
val5.transform.localRotation = Quaternion.Euler(-90f, -90f, 0f);
val5.transform.localScale = new Vector3(0.003f, 0.003f, 0.003f);
Image obj = val5.AddComponent<Image>();
obj.sprite = Assets.GetResource<Sprite>("scanCircle2");
((Graphic)obj).color = Color.black;
GameObject val6 = new GameObject("Speaking");
val6.transform.parent = ((Component)val3).transform;
val6.transform.localPosition = new Vector3(3.25f, -0.9f, 0.2f);
val6.transform.localRotation = Quaternion.Euler(-90f, -90f, 0f);
Image obj2 = val6.AddComponent<Image>();
obj2.sprite = Assets.GetResource<Sprite>("SpeakingSymbol");
((Graphic)obj2).color = Color.black;
val6.transform.localScale = new Vector3(0.003f, 0.003f, 0.003f);
GameObject val7 = new GameObject("ArrowUp");
val7.transform.parent = ((Component)val3).transform;
val7.transform.localPosition = new Vector3(3.25f, -0.9f, -0.2f);
val7.transform.localRotation = Quaternion.Euler(-90f, -90f, 0f);
val7.transform.localScale = new Vector3(0.003f, 0.003f, 0.003f);
Image val8 = val7.AddComponent<Image>();
val8.sprite = Assets.GetResource<Sprite>("arrow2");
((Graphic)val8).color = Color.black;
GameObject val9 = new GameObject("ArrowDown");
val9.transform.parent = ((Component)val3).transform;
val9.transform.localPosition = new Vector3(3.25f, -0.9f, -0.1f);
val9.transform.localRotation = Quaternion.Euler(-90f, -90f, 0f);
val9.transform.localScale = new Vector3(0.003f, 0.003f, 0.003f);
Image obj3 = val9.AddComponent<Image>();
obj3.sprite = Assets.GetResource<Sprite>("arrow2");
((Component)val8).transform.Rotate(0f, 0f, 180f);
((Graphic)obj3).color = Color.black;
Text obj4 = val4.AddComponent<Text>();
obj4.text = "<b><size=40>" + FrequencyWalkie.frequencies[FrequencyWalkie.walkieTalkieFrequencies[((Object)__instance).GetInstanceID()]] + "</size><i><size=30>MHz</size></i></b>";
obj4.font = Assets.GetResource<Font>("3270-Regular");
((Graphic)obj4).color = Color.black;
obj4.fontSize = 40;
obj4.lineSpacing = 0.5f;
val4.transform.localScale = new Vector3(0.015f, 0.01f, 0.01f);
((Behaviour)val3).enabled = false;
Light walkieTalkieLight = __instance.walkieTalkieLight;
walkieTalkieLight.intensity /= 3f;
}
private static void WalkieTalkie_SwitchWalkieTalkieOn(WalkieTalkie __instance)
{
((Behaviour)((Component)__instance).gameObject.GetComponent<Canvas>()).enabled = ((GrabbableObject)__instance).isBeingUsed;
if ((Object)(object)((GrabbableObject)__instance).playerHeldBy == (Object)(object)GameNetworkManager.Instance.localPlayerController && ((GrabbableObject)__instance).isBeingUsed)
{
HUDManager.Instance.DisplayTip("FrequencyWalkie", "Press [R] or [F] to cycle between frequencies. BR.d will broadcast to all walkie talkies.", false, true, "FW_UseTip");
}
}
private static void WalkieTalkie_Update(WalkieTalkie __instance)
{
PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
bool flag = (Object)(object)localPlayerController.ItemSlots[localPlayerController.currentItemSlot] == (Object)(object)__instance;
if (localPlayerController.isGrabbingObjectAnimation || localPlayerController.isTypingChat || localPlayerController.inTerminalMenu || localPlayerController.inSpecialInteractAnimation || !((GrabbableObject)__instance).isBeingUsed || !flag)
{
return;
}
if (UnityInput.Current.GetKeyUp((KeyCode)102))
{
FrequencyWalkie.walkieTalkieFrequencies[((Object)__instance).GetInstanceID()]--;
if (FrequencyWalkie.walkieTalkieFrequencies[((Object)__instance).GetInstanceID()] < 0)
{
FrequencyWalkie.walkieTalkieFrequencies[((Object)__instance).GetInstanceID()] = FrequencyWalkie.frequencies.Count - 1;
}
((MonoBehaviour)__instance).StartCoroutine(FrequencyWalkie.OnFrequencyChanged(__instance, increased: false));
}
else if (UnityInput.Current.GetKeyUp((KeyCode)114))
{
FrequencyWalkie.walkieTalkieFrequencies[((Object)__instance).GetInstanceID()] = (FrequencyWalkie.walkieTalkieFrequencies[((Object)__instance).GetInstanceID()] + 1) % FrequencyWalkie.frequencies.Count;
((MonoBehaviour)__instance).StartCoroutine(FrequencyWalkie.OnFrequencyChanged(__instance, increased: true));
}
}
private static bool WalkieTalkie_SetLocalClientSpeaking(WalkieTalkie __instance, PlayerControllerB ___previousPlayerHeldBy, bool speaking)
{
if (___previousPlayerHeldBy.speakingToWalkieTalkie != speaking)
{
___previousPlayerHeldBy.speakingToWalkieTalkie = speaking;
if (speaking)
{
FrequencyWalkie.SetPlayerSpeakingOnWalkieTalkieServerRpc(__instance, (int)___previousPlayerHeldBy.playerClientId, FrequencyWalkie.walkieTalkieFrequencies[((Object)__instance).GetInstanceID()]);
return false;
}
__instance.UnsetPlayerSpeakingOnWalkieTalkieServerRpc((int)___previousPlayerHeldBy.playerClientId);
}
return false;
}
private static bool WalkieTalkie_HandlePlayerSpeakingServerRPC(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//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_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Expected O, but got Unknown
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Invalid comparison between Unknown and I4
NetworkManager networkManager = target.NetworkManager;
if ((Object)(object)networkManager == (Object)null || !networkManager.IsListening)
{
return false;
}
if (rpcParams.Server.Receive.SenderClientId != target.OwnerClientId)
{
if ((int)networkManager.LogLevel > 1)
{
return false;
}
Debug.LogError((object)"Only the owner can invoke a ServerRpc that requires ownership!");
}
else
{
int playerId = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
int frequency = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref frequency);
AccessTools.Field(typeof(WalkieTalkie), "__rpc_exec_stage").SetValue(target, 1);
FrequencyWalkie.SetPlayerSpeakingOnWalkieTalkieServerRpc((WalkieTalkie)target, playerId, frequency);
AccessTools.Field(typeof(WalkieTalkie), "__rpc_exec_stage").SetValue(target, 0);
}
return false;
}
private static bool WalkieTalkie_HandlePlayerSpeakingClientRPC(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: 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_0057: Expected O, but got Unknown
NetworkManager networkManager = target.NetworkManager;
if ((Object)(object)networkManager == (Object)null || !networkManager.IsListening)
{
return false;
}
int playerId = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref playerId);
int frequency = default(int);
ByteUnpacker.ReadValueBitPacked(reader, ref frequency);
AccessTools.Field(typeof(WalkieTalkie), "__rpc_exec_stage").SetValue(target, 2);
FrequencyWalkie.SetPlayerSpeakingOnWalkieTalkieClientRpc((WalkieTalkie)target, playerId, frequency);
AccessTools.Field(typeof(WalkieTalkie), "__rpc_exec_stage").SetValue(target, 0);
return false;
}
}