using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Configuration;
using ExitGames.Client.Photon;
using Photon.Pun;
using Photon.Realtime;
using UnityEngine;
using UnityEngine.Rendering;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: AssemblyTitle("Signal_SignsObject")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("Signal_SignsObject")]
[assembly: AssemblyCopyright("Copyright © 2026")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("E3F34790-BFC6-436B-987D-0FA3617187BA")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyVersion("1.0.0.0")]
[BepInPlugin("com.mitschpielen.peaksigns", "Peak Signs", "1.0.0")]
public class PeakSigns : BaseUnityPlugin
{
private ConfigEntry<int> _mouseButton;
private ConfigEntry<float> _maxDistance;
private ConfigEntry<float> _deleteHoldSeconds;
private ConfigEntry<float> _placeHoldSeconds;
private readonly Color _deleteColor = new Color(1f, 0.35f, 0.1f, 1f);
private readonly Color _placeColor = new Color(0.1f, 1f, 0.2f, 1f);
private bool _isHolding;
private float _holdStart;
private bool _placedThisHold;
private GameObject _deleteTarget;
private readonly Dictionary<int, GameObject> _signsById = new Dictionary<int, GameObject>();
private GameObject _progressRoot;
private Image _progressFill;
private bool _progressReady;
private const byte EVT_SPAWN_SIGN = 101;
private const byte EVT_DELETE_SIGN = 202;
private float _nextRecolorAt;
private const float RECOLOR_INTERVAL = 10f;
private int _localCounter = 0;
private static object _cachedCustomization;
private static Type _ccType;
private static MethodInfo _ccGetDataMethod;
private static bool _ccSearched;
private void Awake()
{
_mouseButton = ((BaseUnityPlugin)this).Config.Bind<int>("Input", "MouseButton", 2, "2 = Middle Mouse (Mausrad-Klick)");
_maxDistance = ((BaseUnityPlugin)this).Config.Bind<float>("Placement", "MaxDistance", 60f, "Maximale Distanz.");
_deleteHoldSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("Delete", "HoldSeconds", 0.5f, "Hold-Zeit zum Löschen (halbiert).");
_placeHoldSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("Placement", "HoldSeconds", 0.125f, "Hold-Zeit zum Platzieren (halbiert).");
_nextRecolorAt = Time.unscaledTime + 10f;
((BaseUnityPlugin)this).Logger.LogInfo((object)"Peak Signs 1.0.0 geladen. MP Sync + Owner-Farbe + Wand parallel zur Oberfläche + Recolor alle 10s.");
}
private void OnEnable()
{
if (PhotonNetwork.NetworkingClient != null)
{
PhotonNetwork.NetworkingClient.EventReceived += OnPhotonEvent;
}
}
private void OnDisable()
{
if (PhotonNetwork.NetworkingClient != null)
{
PhotonNetwork.NetworkingClient.EventReceived -= OnPhotonEvent;
}
}
private void Start()
{
TrySetupUseItemProgress();
}
private void Update()
{
//IL_018f: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0236: Unknown result type (might be due to invalid IL or missing references)
//IL_0244: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_0200: Unknown result type (might be due to invalid IL or missing references)
//IL_01e7: Unknown result type (might be due to invalid IL or missing references)
//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
//IL_01eb: Unknown result type (might be due to invalid IL or missing references)
if (!_progressReady)
{
TrySetupUseItemProgress();
}
if (Time.unscaledTime >= _nextRecolorAt)
{
_nextRecolorAt = Time.unscaledTime + 10f;
RefreshAllSignsColors();
}
int value = _mouseButton.Value;
if (Input.GetMouseButtonDown(value))
{
_isHolding = true;
_holdStart = Time.unscaledTime;
_placedThisHold = false;
_deleteTarget = GetSignUnderCrosshair();
}
if (_isHolding && Input.GetMouseButton(value))
{
float num = Time.unscaledTime - _holdStart;
if (!_placedThisHold)
{
_deleteTarget = GetSignUnderCrosshair();
}
if ((Object)(object)_deleteTarget != (Object)null)
{
float progress = Mathf.Clamp01(num / Mathf.Max(0.01f, _deleteHoldSeconds.Value));
ShowProgress(visible: true, _deleteColor);
SetProgress(progress);
if (num >= _deleteHoldSeconds.Value)
{
int num2 = FindIdForSignObject(_deleteTarget);
if (num2 != 0)
{
RequestDelete(num2);
}
_deleteTarget = null;
_isHolding = false;
ShowProgress(visible: false, _deleteColor);
}
return;
}
float progress2 = Mathf.Clamp01(num / Mathf.Max(0.01f, _placeHoldSeconds.Value));
ShowProgress(visible: true, _placeColor);
SetProgress(progress2);
if (!_placedThisHold && num >= _placeHoldSeconds.Value)
{
if (TryGetPlacement(out var placePos, out var rot, out var surfaceNormal, out var isWall))
{
int id = GenerateSignIdStable();
RequestSpawn(id, placePos, rot, surfaceNormal, isWall);
_placedThisHold = true;
}
ShowProgress(visible: false, _placeColor);
}
}
if (_isHolding && Input.GetMouseButtonUp(value))
{
_isHolding = false;
_deleteTarget = null;
ShowProgress(visible: false, _deleteColor);
ShowProgress(visible: false, _placeColor);
}
}
private void RequestSpawn(int id, Vector3 pos, Quaternion rot, Vector3 normal, bool isWall)
{
//IL_0019: 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_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: 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_006f: 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_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: 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_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: 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_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Expected O, but got Unknown
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
int ownerActor = (PhotonNetwork.IsConnected ? PhotonNetwork.LocalPlayer.ActorNumber : 0);
SpawnLocal(id, ownerActor, pos, rot, normal, isWall);
if (IsInMultiplayerRoom())
{
object[] array = new object[12]
{
id,
pos.x,
pos.y,
pos.z,
rot.x,
rot.y,
rot.z,
rot.w,
normal.x,
normal.y,
normal.z,
isWall ? 1 : 0
};
RaiseEventOptions val = new RaiseEventOptions
{
Receivers = (ReceiverGroup)0,
CachingOption = (EventCaching)4
};
PhotonNetwork.RaiseEvent((byte)101, (object)array, val, SendOptions.SendReliable);
}
}
private void RequestDelete(int id)
{
//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_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_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Expected O, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
DeleteLocal(id);
if (IsInMultiplayerRoom())
{
object[] array = new object[1] { id };
RaiseEventOptions val = new RaiseEventOptions
{
Receivers = (ReceiverGroup)0,
CachingOption = (EventCaching)4
};
PhotonNetwork.RaiseEvent((byte)202, (object)array, val, SendOptions.SendReliable);
}
}
private void OnPhotonEvent(EventData photonEvent)
{
//IL_00ce: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
if (photonEvent == null)
{
return;
}
if (photonEvent.Code == 101)
{
if (photonEvent.CustomData is object[] array && array.Length >= 12)
{
int id = (int)array[0];
Vector3 pos = default(Vector3);
((Vector3)(ref pos))..ctor(Convert.ToSingle(array[1]), Convert.ToSingle(array[2]), Convert.ToSingle(array[3]));
Quaternion rot = default(Quaternion);
((Quaternion)(ref rot))..ctor(Convert.ToSingle(array[4]), Convert.ToSingle(array[5]), Convert.ToSingle(array[6]), Convert.ToSingle(array[7]));
Vector3 normal = default(Vector3);
((Vector3)(ref normal))..ctor(Convert.ToSingle(array[8]), Convert.ToSingle(array[9]), Convert.ToSingle(array[10]));
bool isWall = Convert.ToInt32(array[11]) == 1;
int sender = photonEvent.Sender;
SpawnLocal(id, sender, pos, rot, normal, isWall);
}
}
else if (photonEvent.Code == 202 && photonEvent.CustomData is object[] array2 && array2.Length >= 1)
{
int id2 = (int)array2[0];
DeleteLocal(id2);
}
}
private bool IsInMultiplayerRoom()
{
return PhotonNetwork.IsConnected && PhotonNetwork.InRoom;
}
private void SpawnLocal(int id, int ownerActor, Vector3 pos, Quaternion rot, Vector3 normal, bool isWall)
{
//IL_0014: 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)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: 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_0068: Unknown result type (might be due to invalid IL or missing references)
if (!_signsById.ContainsKey(id))
{
Color ownerPlayerColor = GetOwnerPlayerColor(ownerActor);
GameObject value = CreateSign(pos, rot, normal, isWall, id, ownerActor, ownerPlayerColor);
_signsById[id] = value;
((BaseUnityPlugin)this).Logger.LogInfo((object)$"Schild gespawnt id={id} ownerActor={ownerActor} isWall={isWall} pos={pos}");
}
}
private void DeleteLocal(int id)
{
if (_signsById.TryGetValue(id, out var value) && !((Object)(object)value == (Object)null))
{
_signsById.Remove(id);
Object.Destroy((Object)(object)value);
((BaseUnityPlugin)this).Logger.LogInfo((object)$"Schild gelöscht id={id}");
}
}
private int FindIdForSignObject(GameObject signObj)
{
PeakSignMarker peakSignMarker = signObj.GetComponent<PeakSignMarker>();
if ((Object)(object)peakSignMarker == (Object)null)
{
peakSignMarker = signObj.GetComponentInParent<PeakSignMarker>();
}
GameObject val = (((Object)(object)peakSignMarker != (Object)null) ? ((Component)peakSignMarker).gameObject : signObj);
foreach (KeyValuePair<int, GameObject> item in _signsById)
{
if ((Object)(object)item.Value == (Object)(object)val)
{
return item.Key;
}
}
return 0;
}
private int GenerateSignIdStable()
{
int num = (PhotonNetwork.IsConnected ? PhotonNetwork.LocalPlayer.ActorNumber : 0);
_localCounter++;
int num2 = (num << 20) ^ (_localCounter & 0xFFFFF);
if (num2 == 0)
{
num2 = 1;
}
return num2;
}
private bool TryGetPlacement(out Vector3 placePos, out Quaternion rot, out Vector3 surfaceNormal, out bool isWall)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: 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_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: 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_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005a: 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_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: 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_00c3: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_0128: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_0133: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: 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_00e0: 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_015e: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: 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_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Unknown result type (might be due to invalid IL or missing references)
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: 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)
placePos = Vector3.zero;
rot = Quaternion.identity;
surfaceNormal = Vector3.up;
isWall = false;
Camera main = Camera.main;
if ((Object)(object)main == (Object)null)
{
return false;
}
Ray val = main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
RaycastHit val2 = default(RaycastHit);
if (!Physics.Raycast(val, ref val2, _maxDistance.Value, -1, (QueryTriggerInteraction)1))
{
return false;
}
Vector3 val3 = ((RaycastHit)(ref val2)).normal;
surfaceNormal = ((Vector3)(ref val3)).normalized;
isWall = surfaceNormal.y < 0.6f;
placePos = ((RaycastHit)(ref val2)).point + surfaceNormal * 0.06f;
if (!isWall)
{
Vector3 val4 = Vector3.ProjectOnPlane(((Component)main).transform.forward, Vector3.up);
if (((Vector3)(ref val4)).sqrMagnitude < 0.0001f)
{
val4 = Vector3.forward;
}
rot = Quaternion.LookRotation(((Vector3)(ref val4)).normalized, Vector3.up);
}
else
{
Vector3 val5 = surfaceNormal;
Vector3 up = Vector3.up;
val3 = Vector3.Cross(up, val5);
if (((Vector3)(ref val3)).sqrMagnitude < 0.0001f)
{
up = ((Component)main).transform.up;
}
rot = Quaternion.LookRotation(val5, up);
}
return true;
}
private GameObject GetSignUnderCrosshair()
{
//IL_0027: 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)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
Camera main = Camera.main;
if ((Object)(object)main == (Object)null)
{
return null;
}
Ray val = main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
RaycastHit val2 = default(RaycastHit);
if (Physics.Raycast(val, ref val2, _maxDistance.Value, -1, (QueryTriggerInteraction)2))
{
PeakSignMarker peakSignMarker = (((Object)(object)((RaycastHit)(ref val2)).collider != (Object)null) ? ((Component)((RaycastHit)(ref val2)).collider).GetComponentInParent<PeakSignMarker>() : null);
if ((Object)(object)peakSignMarker != (Object)null)
{
return ((Component)peakSignMarker).gameObject;
}
}
return null;
}
private static object GetCustomizationInstanceReflect()
{
if (_cachedCustomization != null)
{
return _cachedCustomization;
}
try
{
Type type = null;
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
type = assembly.GetType("Zorro.Core.Singleton`1", throwOnError: false);
if (type != null)
{
break;
}
}
if (type == null)
{
return null;
}
Type type2 = type.MakeGenericType(typeof(Customization));
PropertyInfo property = type2.GetProperty("Instance", BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
if (property == null)
{
return null;
}
_cachedCustomization = property.GetValue(null, null);
return _cachedCustomization;
}
catch
{
return null;
}
}
private static void EnsureCharacterCustomizationMethod()
{
if (_ccSearched)
{
return;
}
_ccSearched = true;
try
{
Assembly[] assemblies = AppDomain.CurrentDomain.GetAssemblies();
foreach (Assembly assembly in assemblies)
{
Type type = assembly.GetType("CharacterCustomization", throwOnError: false);
if (type != null)
{
_ccType = type;
break;
}
}
if (_ccType == null)
{
return;
}
MethodInfo ccGetDataMethod = null;
MethodInfo[] methods = _ccType.GetMethods(BindingFlags.Instance | BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
MethodInfo[] array = methods;
foreach (MethodInfo methodInfo in array)
{
ParameterInfo[] parameters = methodInfo.GetParameters();
if (parameters == null || parameters.Length != 1)
{
continue;
}
Type parameterType = parameters[0].ParameterType;
if (!parameterType.IsAssignableFrom(typeof(Player)) && !typeof(Player).IsAssignableFrom(parameterType))
{
continue;
}
Type returnType = methodInfo.ReturnType;
if (returnType == typeof(void))
{
continue;
}
bool flag = returnType.GetField("currentSkin", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) != null || returnType.GetProperty("currentSkin", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic) != null;
if (flag || returnType.Name.IndexOf("Customization", StringComparison.OrdinalIgnoreCase) >= 0)
{
ccGetDataMethod = methodInfo;
if (flag)
{
break;
}
}
}
_ccGetDataMethod = ccGetDataMethod;
}
catch
{
_ccType = null;
_ccGetDataMethod = null;
}
}
private static int GetCurrentSkinIndexForPlayer(Player ownerPlayer)
{
try
{
EnsureCharacterCustomizationMethod();
if (_ccType == null || _ccGetDataMethod == null)
{
return -1;
}
object obj = null;
if (!_ccGetDataMethod.IsStatic)
{
if (!typeof(Object).IsAssignableFrom(_ccType))
{
return -1;
}
obj = Object.FindAnyObjectByType(_ccType);
if (obj == null)
{
return -1;
}
}
object obj2 = _ccGetDataMethod.Invoke(obj, new object[1] { ownerPlayer });
if (obj2 == null)
{
return -1;
}
object memberValue = GetMemberValue(obj2, "currentSkin");
if (memberValue == null)
{
return -1;
}
return Convert.ToInt32(memberValue);
}
catch
{
return -1;
}
}
private static Color GetOwnerPlayerColor(int ownerActor)
{
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
//IL_012f: 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_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: 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_009a: 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_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00b6: 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_00e2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
Color result = default(Color);
((Color)(ref result))..ctor(1f, 0.95f, 0.2f, 1f);
try
{
if (!PhotonNetwork.IsConnected || PhotonNetwork.CurrentRoom == null)
{
return result;
}
Player player = PhotonNetwork.CurrentRoom.GetPlayer(ownerActor, false);
if (player == null)
{
return result;
}
object customizationInstanceReflect = GetCustomizationInstanceReflect();
if (customizationInstanceReflect == null)
{
return result;
}
if (!(GetMemberValue(customizationInstanceReflect, "skins") is Array array) || array.Length == 0)
{
return result;
}
int currentSkinIndexForPlayer = GetCurrentSkinIndexForPlayer(player);
if (currentSkinIndexForPlayer < 0)
{
return result;
}
currentSkinIndexForPlayer = Mathf.Clamp(currentSkinIndexForPlayer, 0, array.Length - 1);
object value = array.GetValue(currentSkinIndexForPlayer);
if (value == null)
{
return result;
}
if (GetMemberValue(value, "color") is Color result2)
{
result2.a = 1f;
return result2;
}
return result;
}
catch
{
return result;
}
}
private static object GetMemberValue(object obj, string name)
{
if (obj == null)
{
return null;
}
Type type = obj.GetType();
FieldInfo field = type.GetField(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (field != null)
{
return field.GetValue(obj);
}
PropertyInfo property = type.GetProperty(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
if (property != null)
{
return property.GetValue(obj, null);
}
return null;
}
private void RefreshAllSignsColors()
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: 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)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
if (GetCustomizationInstanceReflect() == null)
{
return;
}
foreach (KeyValuePair<int, GameObject> item in _signsById)
{
GameObject value = item.Value;
if ((Object)(object)value == (Object)null)
{
continue;
}
PeakSignMarker component = value.GetComponent<PeakSignMarker>();
if (!((Object)(object)component == (Object)null))
{
Color ownerPlayerColor = GetOwnerPlayerColor(component.OwnerActor);
Transform val = value.transform.Find("Panel");
if ((Object)(object)val != (Object)null)
{
SetRendererColor(((Component)val).GetComponent<MeshRenderer>(), ownerPlayerColor);
}
Transform val2 = value.transform.Find("Pole");
if ((Object)(object)val2 != (Object)null)
{
SetRendererColor(((Component)val2).GetComponent<MeshRenderer>(), Color.Lerp(ownerPlayerColor, Color.black, 0.45f));
}
}
}
}
private static void SetRendererColor(MeshRenderer mr, Color c)
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Expected O, but got Unknown
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)mr == (Object)null)
{
return;
}
Material material = ((Renderer)mr).material;
if ((Object)(object)material == (Object)null)
{
Shader val = Shader.Find("Unlit/Color");
if ((Object)(object)val == (Object)null)
{
val = Shader.Find("Standard");
}
material = new Material(val);
((Renderer)mr).material = material;
}
Shader val2 = Shader.Find("Unlit/Color");
if ((Object)(object)val2 != (Object)null && (Object)(object)((Renderer)mr).material.shader != (Object)(object)val2)
{
((Renderer)mr).material.shader = val2;
}
if (((Renderer)mr).material.HasProperty("_Color"))
{
((Renderer)mr).material.color = c;
}
((Renderer)mr).enabled = true;
}
private void TrySetupUseItemProgress()
{
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Invalid comparison between Unknown and I4
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0117: Invalid comparison between Unknown and I4
//IL_011b: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Invalid comparison between Unknown and I4
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Invalid comparison between Unknown and I4
//IL_0247: Unknown result type (might be due to invalid IL or missing references)
//IL_0265: Unknown result type (might be due to invalid IL or missing references)
if (_progressReady)
{
return;
}
GameObject[] array = Resources.FindObjectsOfTypeAll<GameObject>();
GameObject val = null;
foreach (GameObject val2 in array)
{
if (!((Object)(object)val2 == (Object)null) && string.Equals(((Object)val2).name, "UseItem", StringComparison.OrdinalIgnoreCase))
{
if ((Object)(object)val2.transform.root != (Object)null && ((Object)val2.transform.root).name.IndexOf("GAME", StringComparison.OrdinalIgnoreCase) >= 0)
{
val = val2;
break;
}
if ((Object)(object)val == (Object)null)
{
val = val2;
}
}
}
if ((Object)(object)val == (Object)null)
{
return;
}
Image[] componentsInChildren = val.GetComponentsInChildren<Image>(true);
Image val3 = null;
foreach (Image val4 in componentsInChildren)
{
if (!((Object)(object)val4 == (Object)null) && (int)val4.type == 3 && ((int)val4.fillMethod == 4 || (int)val4.fillMethod == 3 || (int)val4.fillMethod == 2))
{
val3 = val4;
break;
}
}
if ((Object)(object)val3 == (Object)null)
{
return;
}
Transform val5 = ((Component)val3).transform;
for (int k = 0; k < 3; k++)
{
if (!((Object)(object)val5.parent != (Object)null))
{
break;
}
if ((Object)(object)((Component)val5.parent).gameObject == (Object)(object)val)
{
break;
}
val5 = val5.parent;
}
if ((Object)(object)_progressRoot != (Object)null)
{
Object.Destroy((Object)(object)_progressRoot);
_progressRoot = null;
_progressFill = null;
}
_progressRoot = Object.Instantiate<GameObject>(((Component)val5).gameObject, val5.parent);
((Object)_progressRoot).name = "PeakSigns_Progress(Clone)";
_progressRoot.SetActive(true);
StripAnimators(_progressRoot);
EnsureCanvasGroups(_progressRoot);
_progressFill = FindFillInClone(_progressRoot, ((Object)val3).name, val3.fillMethod);
SetProgress(0f);
ShowProgress(visible: false, _deleteColor);
_progressReady = (Object)(object)_progressFill != (Object)null;
}
private static void StripAnimators(GameObject root)
{
Animator[] componentsInChildren = root.GetComponentsInChildren<Animator>(true);
for (int i = 0; i < componentsInChildren.Length; i++)
{
if ((Object)(object)componentsInChildren[i] != (Object)null)
{
Object.Destroy((Object)(object)componentsInChildren[i]);
}
}
Animation[] componentsInChildren2 = root.GetComponentsInChildren<Animation>(true);
for (int j = 0; j < componentsInChildren2.Length; j++)
{
if ((Object)(object)componentsInChildren2[j] != (Object)null)
{
Object.Destroy((Object)(object)componentsInChildren2[j]);
}
}
}
private static void EnsureCanvasGroups(GameObject root)
{
CanvasGroup[] componentsInChildren = root.GetComponentsInChildren<CanvasGroup>(true);
if (componentsInChildren == null || componentsInChildren.Length == 0)
{
root.AddComponent<CanvasGroup>();
}
}
private static Image FindFillInClone(GameObject cloneRoot, string wantName, FillMethod wantMethod)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0026: Invalid comparison between Unknown and I4
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Invalid comparison between Unknown and I4
Image[] componentsInChildren = cloneRoot.GetComponentsInChildren<Image>(true);
foreach (Image val in componentsInChildren)
{
if (!((Object)(object)val == (Object)null) && (int)val.type == 3 && ((Object)val).name == wantName && val.fillMethod == wantMethod)
{
return val;
}
}
foreach (Image val2 in componentsInChildren)
{
if ((Object)(object)val2 != (Object)null && (int)val2.type == 3)
{
return val2;
}
}
return null;
}
private void ShowProgress(bool visible, Color color)
{
//IL_003d: 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_0109: 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_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)_progressRoot == (Object)null)
{
return;
}
_progressRoot.transform.SetAsLastSibling();
if ((Object)(object)_progressFill != (Object)null)
{
((Graphic)_progressFill).color = color;
}
CanvasGroup[] componentsInChildren = _progressRoot.GetComponentsInChildren<CanvasGroup>(true);
if (componentsInChildren != null && componentsInChildren.Length != 0)
{
foreach (CanvasGroup val in componentsInChildren)
{
if (!((Object)(object)val == (Object)null))
{
val.alpha = (visible ? 1f : 0f);
val.interactable = false;
val.blocksRaycasts = false;
}
}
}
else
{
_progressRoot.SetActive(visible);
}
RectTransform component = _progressRoot.GetComponent<RectTransform>();
if ((Object)(object)component != (Object)null)
{
component.anchorMin = new Vector2(0.5f, 0.5f);
component.anchorMax = new Vector2(0.5f, 0.5f);
component.pivot = new Vector2(0.5f, 0.5f);
component.anchoredPosition = new Vector2(180f, 0f);
((Transform)component).localScale = new Vector3(0.7f, 0.7f, 0.7f);
}
}
private void SetProgress(float t)
{
if (!((Object)(object)_progressFill == (Object)null))
{
_progressFill.type = (Type)3;
_progressFill.fillAmount = Mathf.Clamp01(t);
}
}
private static Mesh CreateArrowMesh(float width, float height, float thickness, float tipLength)
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: 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_0054: 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)
//IL_0083: 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_009e: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_0263: Unknown result type (might be due to invalid IL or missing references)
//IL_026a: Expected O, but got Unknown
float num = Mathf.Clamp(tipLength, 0.05f, width * 0.49f);
Vector2[] array = (Vector2[])(object)new Vector2[5]
{
new Vector2((0f - width) * 0.5f, (0f - height) * 0.5f),
new Vector2(width * 0.5f - num, (0f - height) * 0.5f),
new Vector2(width * 0.5f, 0f),
new Vector2(width * 0.5f - num, height * 0.5f),
new Vector2((0f - width) * 0.5f, height * 0.5f)
};
int num2 = array.Length;
Vector3[] array2 = (Vector3[])(object)new Vector3[num2 * 2];
float num3 = thickness * 0.5f;
float num4 = (0f - thickness) * 0.5f;
for (int i = 0; i < num2; i++)
{
array2[i] = new Vector3(array[i].x, array[i].y, num3);
array2[i + num2] = new Vector3(array[i].x, array[i].y, num4);
}
List<int> list = new List<int>(64);
list.AddRange(new int[9] { 0, 1, 2, 0, 2, 3, 0, 3, 4 });
list.AddRange(new int[9]
{
num2,
num2 + 2,
num2 + 1,
num2,
num2 + 3,
num2 + 2,
num2,
num2 + 4,
num2 + 3
});
for (int j = 0; j < num2; j++)
{
int num5 = (j + 1) % num2;
int item = j;
int item2 = num5;
int item3 = j + num2;
int item4 = num5 + num2;
list.Add(item);
list.Add(item2);
list.Add(item4);
list.Add(item);
list.Add(item4);
list.Add(item3);
list.Add(item4);
list.Add(item2);
list.Add(item);
list.Add(item3);
list.Add(item4);
list.Add(item);
}
Mesh val = new Mesh();
((Object)val).name = "ArrowSignMesh";
val.SetVertices(array2);
val.SetTriangles(list, 0);
val.RecalculateNormals();
val.RecalculateBounds();
return val;
}
private GameObject CreateSign(Vector3 placePos, Quaternion rot, Vector3 surfaceNormal, bool isWall, int signId, int ownerActor, Color ownerColor)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Expected O, but got Unknown
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Expected O, but got Unknown
//IL_0196: 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_019d: Unknown result type (might be due to invalid IL or missing references)
//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_01b9: Unknown result type (might be due to invalid IL or missing references)
//IL_01be: Unknown result type (might be due to invalid IL or missing references)
//IL_01c3: Unknown result type (might be due to invalid IL or missing references)
//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
//IL_01db: Unknown result type (might be due to invalid IL or missing references)
//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
//IL_01fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0203: Unknown result type (might be due to invalid IL or missing references)
//IL_0208: Unknown result type (might be due to invalid IL or missing references)
//IL_020d: Unknown result type (might be due to invalid IL or missing references)
//IL_0215: Unknown result type (might be due to invalid IL or missing references)
//IL_0217: Unknown result type (might be due to invalid IL or missing references)
//IL_0224: Unknown result type (might be due to invalid IL or missing references)
//IL_0229: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Unknown result type (might be due to invalid IL or missing references)
//IL_0236: Unknown result type (might be due to invalid IL or missing references)
//IL_023b: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: 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)
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: 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_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_015c: Unknown result type (might be due to invalid IL or missing references)
//IL_016e: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_025c: Unknown result type (might be due to invalid IL or missing references)
//IL_0261: Unknown result type (might be due to invalid IL or missing references)
//IL_0263: Unknown result type (might be due to invalid IL or missing references)
//IL_024e: Unknown result type (might be due to invalid IL or missing references)
//IL_031b: Unknown result type (might be due to invalid IL or missing references)
//IL_0325: Unknown result type (might be due to invalid IL or missing references)
//IL_0327: Unknown result type (might be due to invalid IL or missing references)
//IL_0331: Unknown result type (might be due to invalid IL or missing references)
//IL_0268: Unknown result type (might be due to invalid IL or missing references)
//IL_027e: Unknown result type (might be due to invalid IL or missing references)
//IL_0283: Unknown result type (might be due to invalid IL or missing references)
//IL_0285: Unknown result type (might be due to invalid IL or missing references)
//IL_028a: Unknown result type (might be due to invalid IL or missing references)
//IL_02b6: Unknown result type (might be due to invalid IL or missing references)
//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
//IL_02c3: Unknown result type (might be due to invalid IL or missing references)
//IL_02c8: 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_02a5: Unknown result type (might be due to invalid IL or missing references)
//IL_02a7: Unknown result type (might be due to invalid IL or missing references)
//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
//IL_02fb: Unknown result type (might be due to invalid IL or missing references)
//IL_02fd: Unknown result type (might be due to invalid IL or missing references)
//IL_02ff: 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_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
//IL_02ee: Unknown result type (might be due to invalid IL or missing references)
//IL_02f3: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject("PeakSign");
PeakSignMarker peakSignMarker = val.AddComponent<PeakSignMarker>();
peakSignMarker.SignId = signId;
peakSignMarker.OwnerActor = ownerActor;
GameObject val2 = new GameObject("Panel");
val2.transform.SetParent(val.transform, false);
MeshFilter val3 = val2.AddComponent<MeshFilter>();
val2.AddComponent<MeshRenderer>();
float width = 1.2f;
float height = 0.35f;
float num = 0.08f;
float tipLength = 0.35f;
val3.mesh = CreateArrowMesh(width, height, num, tipLength);
MeshCollider val4 = val2.AddComponent<MeshCollider>();
val4.sharedMesh = val3.mesh;
val4.convex = true;
((Collider)val4).isTrigger = true;
GameObject val5 = GameObject.CreatePrimitive((PrimitiveType)2);
((Object)val5).name = "Pole";
val5.transform.SetParent(val.transform, false);
float num2 = 0.08f;
float num3 = 0.45f;
float num4 = num3 * 2f;
float num5 = 0.03f;
if (!isWall)
{
val2.transform.position = placePos + Vector3.up * 0.85f;
val2.transform.rotation = rot * Quaternion.Euler(0f, -90f, 0f);
val5.transform.position = placePos + Vector3.up * 0.45f;
val5.transform.rotation = rot;
val5.transform.localScale = new Vector3(num2, num3, num2);
}
else
{
Vector3 normalized = ((Vector3)(ref surfaceNormal)).normalized;
Quaternion rotation = Quaternion.FromToRotation(Vector3.up, normalized);
Vector3 position = placePos + normalized * (num4 * 0.5f + num5);
val5.transform.position = position;
val5.transform.rotation = rotation;
val5.transform.localScale = new Vector3(num2, num3, num2);
Vector3 val6 = placePos + normalized * (num4 + num5);
val2.transform.position = val6 + normalized * (num * 0.5f + num5);
Vector3 val7 = -normalized;
Camera main = Camera.main;
Vector3 val8 = (((Object)(object)main != (Object)null) ? Vector3.ProjectOnPlane(((Component)main).transform.forward, normalized) : Vector3.zero);
if (((Vector3)(ref val8)).sqrMagnitude < 0.0001f)
{
val8 = Vector3.Cross(Vector3.up, normalized);
}
if (((Vector3)(ref val8)).sqrMagnitude < 0.0001f)
{
val8 = Vector3.Cross(Vector3.forward, normalized);
}
((Vector3)(ref val8)).Normalize();
Vector3 val9 = Vector3.Cross(val7, val8);
Vector3 normalized2 = ((Vector3)(ref val9)).normalized;
if (((Vector3)(ref normalized2)).sqrMagnitude < 0.0001f)
{
val9 = Vector3.ProjectOnPlane(Vector3.up, val7);
normalized2 = ((Vector3)(ref val9)).normalized;
}
val2.transform.rotation = Quaternion.LookRotation(val7, normalized2);
}
MakeNoHitbox(val2);
MakeNoHitbox(val5);
ApplyUnlit(val2, ownerColor);
ApplyUnlit(val5, Color.Lerp(ownerColor, Color.black, 0.45f));
return val;
}
private static void MakeNoHitbox(GameObject go)
{
Collider component = go.GetComponent<Collider>();
if ((Object)(object)component != (Object)null)
{
component.isTrigger = true;
}
go.layer = 2;
}
private static void ApplyUnlit(GameObject go, Color c)
{
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Expected O, but got Unknown
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
MeshRenderer component = go.GetComponent<MeshRenderer>();
if (!((Object)(object)component == (Object)null))
{
Shader val = Shader.Find("Unlit/Color");
if ((Object)(object)val == (Object)null)
{
val = Shader.Find("Standard");
}
Material val2 = new Material(val);
if (val2.HasProperty("_Color"))
{
val2.color = c;
}
val2.renderQueue = 3000;
((Renderer)component).material = val2;
((Renderer)component).enabled = true;
((Renderer)component).shadowCastingMode = (ShadowCastingMode)1;
((Renderer)component).receiveShadows = true;
}
}
}
public class PeakSignMarker : MonoBehaviour
{
public int SignId;
public int OwnerActor;
}