using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using UnityEngine;
using UnityEngine.Events;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Omniscye")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+ee6d99a477f142df0010e7f5c8c3bd67b4b5b005")]
[assembly: AssemblyProduct("MergedUpgrades")]
[assembly: AssemblyTitle("MergedUpgrades")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace Empress.Synthesis
{
[BepInPlugin("Empress.Synthesis", "Empress Synthesis", "1.0.0")]
public class SynthesisPlugin : BaseUnityPlugin
{
internal static SynthesisPlugin Instance { get; private set; }
internal static ManualLogSource Logger => Instance._logger;
private ManualLogSource _logger => ((BaseUnityPlugin)this).Logger;
internal Harmony? Harmony { get; set; }
private void Awake()
{
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Expected O, but got Unknown
//IL_004d: Expected O, but got Unknown
Instance = this;
((Component)this).gameObject.transform.parent = null;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
if (Harmony == null)
{
Harmony val = new Harmony(((BaseUnityPlugin)this).Info.Metadata.GUID);
Harmony val2 = val;
Harmony = val;
}
Harmony.PatchAll();
((MonoBehaviour)this).StartCoroutine(SynthesisAudio.LoadNearDll(((BaseUnityPlugin)this).Info.Location));
Logger.LogInfo((object)$"{((BaseUnityPlugin)this).Info.Metadata.GUID} v{((BaseUnityPlugin)this).Info.Metadata.Version} loaded");
}
private void OnDestroy()
{
Harmony? harmony = Harmony;
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
}
[HarmonyPatch(typeof(ItemUpgrade), "Start")]
internal static class Patch_ItemUpgrade_Start
{
private static void Postfix(ItemUpgrade __instance)
{
if (!Object.op_Implicit((Object)(object)((Component)__instance).gameObject.GetComponent<SynthesisNode>()))
{
((Component)__instance).gameObject.AddComponent<SynthesisNode>();
}
}
}
[HarmonyPatch(typeof(ItemAttributes), "ShowInfo")]
internal static class Patch_ItemAttributes_ShowInfo_NameMirror
{
private static void Prefix(ref string ___itemName, string ___instanceName)
{
if (!string.IsNullOrEmpty(___instanceName))
{
int num = ___instanceName.IndexOf('/');
___itemName = ((num >= 0) ? ___instanceName.Substring(0, num) : ___instanceName);
}
}
}
[HarmonyPatch(typeof(ItemAttributes), "ShowingInfo")]
internal static class Patch_ItemAttributes_ShowingInfo_NameMirror
{
private static void Prefix(ref string ___itemName, string ___instanceName)
{
if (!string.IsNullOrEmpty(___instanceName))
{
int num = ___instanceName.IndexOf('/');
___itemName = ((num >= 0) ? ___instanceName.Substring(0, num) : ___instanceName);
}
}
}
public enum KnownUpgrade
{
None,
Energy,
SprintSpeed,
Health,
GrabStrength,
ExtraJump,
TumbleWings,
GrabRange,
GrabThrow,
CrouchRest,
TumbleClimb
}
public class SynthesisNode : MonoBehaviour
{
public bool merged;
private float lastImpact;
private PhysGrabObjectImpactDetector impact;
private Rigidbody rb;
private PhotonView pv;
private ItemAttributes attrs;
private ItemUpgrade baseUpgrade;
public KnownUpgrade Type;
private void Awake()
{
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Expected O, but got Unknown
impact = ((Component)this).GetComponent<PhysGrabObjectImpactDetector>();
rb = ((Component)this).GetComponent<Rigidbody>();
pv = ((Component)this).GetComponent<PhotonView>();
attrs = ((Component)this).GetComponent<ItemAttributes>();
baseUpgrade = ((Component)this).GetComponent<ItemUpgrade>();
Type = SynthesisUtil.ResolveType(((Component)this).gameObject);
if ((Object)(object)impact != (Object)null)
{
UnityEvent onAllImpacts = impact.onAllImpacts;
if (onAllImpacts != null)
{
onAllImpacts.AddListener(new UnityAction(OnImpact));
}
}
if (Object.op_Implicit((Object)(object)pv) && !Object.op_Implicit((Object)(object)((Component)pv).gameObject.GetComponent<SynthesisNetwork>()))
{
((Component)pv).gameObject.AddComponent<SynthesisNetwork>();
}
}
private void OnDestroy()
{
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Expected O, but got Unknown
if ((Object)(object)impact != (Object)null && impact.onAllImpacts != null)
{
impact.onAllImpacts.RemoveListener(new UnityAction(OnImpact));
}
}
private void OnImpact()
{
lastImpact = Time.time;
}
private void Update()
{
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
if (merged || Time.time - lastImpact > 0.25f)
{
return;
}
Collider[] array = Physics.OverlapSphere(((Component)this).transform.position, 0.6f, -1, (QueryTriggerInteraction)1);
for (int i = 0; i < array.Length; i++)
{
GameObject val = (Object.op_Implicit((Object)(object)array[i].attachedRigidbody) ? ((Component)array[i].attachedRigidbody).gameObject : ((Component)array[i]).gameObject);
if ((Object)(object)val == (Object)(object)((Component)this).gameObject)
{
continue;
}
SynthesisNode component = val.GetComponent<SynthesisNode>();
if (Object.op_Implicit((Object)(object)component) && !component.merged && component.Type != 0 && Type != 0 && SynthesisUtil.CanInitiate())
{
merged = true;
component.merged = true;
if (Object.op_Implicit((Object)(object)pv) && pv.ViewID != 0)
{
SynthesisUtil.BeginMergeNetwork(pv, component.pv);
}
else
{
((MonoBehaviour)this).StartCoroutine(SynthesisUtil.AnimateAndMergeLocal(this, component));
}
break;
}
}
}
}
public class SynthesisNetwork : MonoBehaviourPun
{
[PunRPC]
public void RPC_Synthesize(int otherViewId)
{
((MonoBehaviour)this).StartCoroutine(SynthesisUtil.AnimateAndMergeRPC(((MonoBehaviourPun)this).photonView, otherViewId));
}
}
public static class SynthesisUtil
{
[CompilerGenerated]
private sealed class <AnimateAndMergeLocal>d__4 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public SynthesisNode a;
public SynthesisNode b;
private GameObject <host>5__1;
private GameObject <other>5__2;
private string <name>5__3;
private float <hue>5__4;
private KnownUpgrade[] <parts>5__5;
private ItemAttributes <ia>5__6;
private PhotonView <pv>5__7;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <AnimateAndMergeLocal>d__4(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<host>5__1 = null;
<other>5__2 = null;
<name>5__3 = null;
<parts>5__5 = null;
<ia>5__6 = null;
<pv>5__7 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<host>5__1 = ((Component)a).gameObject;
<other>5__2 = ((Component)b).gameObject;
<name>5__3 = ComposeName(<host>5__1, <other>5__2);
<hue>5__4 = ComputeHue(((Object)(object)a != (Object)null) ? a.Type : KnownUpgrade.None, ((Object)(object)b != (Object)null) ? b.Type : KnownUpgrade.None);
<parts>5__5 = BuildParts(a, b);
<>2__current = AnimatePair(<host>5__1, <other>5__2);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
if (Object.op_Implicit((Object)(object)<other>5__2))
{
<other>5__2.SetActive(false);
}
SynthesisAudio.Play(<host>5__1.transform.position);
ApplySynthesis(<host>5__1, <name>5__3, <hue>5__4, <parts>5__5);
if (Object.op_Implicit((Object)(object)PunManager.instance) && <host>5__1.TryGetComponent<ItemAttributes>(ref <ia>5__6) && <host>5__1.TryGetComponent<PhotonView>(ref <pv>5__7))
{
PunManager.instance.SetItemName(<name>5__3, <ia>5__6, <pv>5__7.ViewID);
}
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <AnimateAndMergeRPC>d__3 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public PhotonView hostPv;
public int otherViewId;
private GameObject <host>5__1;
private PhotonView <otherPv>5__2;
private GameObject <other>5__3;
private SynthesisNode <hostNode>5__4;
private SynthesisNode <otherNode>5__5;
private string <name>5__6;
private float <hue>5__7;
private KnownUpgrade[] <parts>5__8;
private ItemAttributes <ia>5__9;
private PhotonView <pv>5__10;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <AnimateAndMergeRPC>d__3(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<host>5__1 = null;
<otherPv>5__2 = null;
<other>5__3 = null;
<hostNode>5__4 = null;
<otherNode>5__5 = null;
<name>5__6 = null;
<parts>5__8 = null;
<ia>5__9 = null;
<pv>5__10 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0186: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<host>5__1 = (Object.op_Implicit((Object)(object)hostPv) ? ((Component)hostPv).gameObject : null);
<otherPv>5__2 = ((otherViewId != 0) ? PhotonView.Find(otherViewId) : null);
<other>5__3 = (Object.op_Implicit((Object)(object)<otherPv>5__2) ? ((Component)<otherPv>5__2).gameObject : null);
if (!Object.op_Implicit((Object)(object)<host>5__1))
{
return false;
}
<hostNode>5__4 = <host>5__1.GetComponent<SynthesisNode>();
<otherNode>5__5 = (Object.op_Implicit((Object)(object)<other>5__3) ? <other>5__3.GetComponent<SynthesisNode>() : null);
<name>5__6 = ComposeName(<host>5__1, <other>5__3);
<hue>5__7 = ComputeHue(((Object)(object)<hostNode>5__4 != (Object)null) ? <hostNode>5__4.Type : KnownUpgrade.None, ((Object)(object)<otherNode>5__5 != (Object)null) ? <otherNode>5__5.Type : KnownUpgrade.None);
<parts>5__8 = BuildParts(<hostNode>5__4, <otherNode>5__5);
<>2__current = AnimatePair(<host>5__1, <other>5__3);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
if (Object.op_Implicit((Object)(object)<other>5__3))
{
<other>5__3.SetActive(false);
}
SynthesisAudio.Play(<host>5__1.transform.position);
ApplySynthesis(<host>5__1, <name>5__6, <hue>5__7, <parts>5__8);
if (Object.op_Implicit((Object)(object)PunManager.instance) && <host>5__1.TryGetComponent<ItemAttributes>(ref <ia>5__9) && <host>5__1.TryGetComponent<PhotonView>(ref <pv>5__10))
{
PunManager.instance.SetItemName(<name>5__6, <ia>5__9, <pv>5__10.ViewID);
}
if (Object.op_Implicit((Object)(object)<hostNode>5__4))
{
<hostNode>5__4.Type = KnownUpgrade.None;
}
if (Object.op_Implicit((Object)(object)<otherNode>5__5))
{
<otherNode>5__5.Type = KnownUpgrade.None;
}
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <AnimatePair>d__9 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public GameObject a;
public GameObject b;
private float <start>5__1;
private float <dur>5__2;
private Rigidbody <rbA>5__3;
private Rigidbody <rbB>5__4;
private bool <gA>5__5;
private bool <gB>5__6;
private Vector3 <pA>5__7;
private Vector3 <pB>5__8;
private Vector3 <center>5__9;
private float <t>5__10;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <AnimatePair>d__9(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<rbA>5__3 = null;
<rbB>5__4 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_01c2: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
//IL_01dc: 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_020f: 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_021a: 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_025b: Unknown result type (might be due to invalid IL or missing references)
//IL_028e: Unknown result type (might be due to invalid IL or missing references)
//IL_0115: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_011a: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: 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_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: 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_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_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<start>5__1 = Time.time;
<dur>5__2 = 1.2f;
<rbA>5__3 = (Object.op_Implicit((Object)(object)a) ? a.GetComponent<Rigidbody>() : null);
<rbB>5__4 = (Object.op_Implicit((Object)(object)b) ? b.GetComponent<Rigidbody>() : null);
<gA>5__5 = Object.op_Implicit((Object)(object)<rbA>5__3) && <rbA>5__3.useGravity;
<gB>5__6 = Object.op_Implicit((Object)(object)<rbB>5__4) && <rbB>5__4.useGravity;
if (Object.op_Implicit((Object)(object)<rbA>5__3))
{
<rbA>5__3.useGravity = false;
}
if (Object.op_Implicit((Object)(object)<rbB>5__4))
{
<rbB>5__4.useGravity = false;
}
<pA>5__7 = (Object.op_Implicit((Object)(object)a) ? a.transform.position : Vector3.zero);
<pB>5__8 = (Object.op_Implicit((Object)(object)b) ? b.transform.position : (<pA>5__7 + Vector3.right * 0.4f));
<center>5__9 = (<pA>5__7 + <pB>5__8) * 0.5f;
break;
case 1:
<>1__state = -1;
break;
}
if (Time.time - <start>5__1 < <dur>5__2)
{
<t>5__10 = Mathf.InverseLerp(0f, <dur>5__2, Time.time - <start>5__1);
if (Object.op_Implicit((Object)(object)a))
{
a.transform.position = Vector3.Lerp(<pA>5__7, <center>5__9 + Vector3.up * 0.5f, <t>5__10);
}
if (Object.op_Implicit((Object)(object)b))
{
b.transform.position = Vector3.Lerp(<pB>5__8, <center>5__9 + Vector3.up * 0.5f, <t>5__10);
}
if (Object.op_Implicit((Object)(object)a))
{
a.transform.Rotate(Vector3.up, 360f * Time.deltaTime, (Space)0);
}
if (Object.op_Implicit((Object)(object)b))
{
b.transform.Rotate(Vector3.up, 360f * Time.deltaTime, (Space)0);
}
<>2__current = null;
<>1__state = 1;
return true;
}
if (Object.op_Implicit((Object)(object)<rbA>5__3))
{
<rbA>5__3.useGravity = <gA>5__5;
}
if (Object.op_Implicit((Object)(object)<rbB>5__4))
{
<rbB>5__4.useGravity = <gB>5__6;
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public static bool CanInitiate()
{
if (SemiFunc.IsMultiplayer())
{
return PhotonNetwork.IsMasterClient;
}
return true;
}
public static KnownUpgrade ResolveType(GameObject go)
{
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerEnergy>()))
{
return KnownUpgrade.Energy;
}
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerSprintSpeed>()))
{
return KnownUpgrade.SprintSpeed;
}
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerHealth>()))
{
return KnownUpgrade.Health;
}
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerGrabStrength>()))
{
return KnownUpgrade.GrabStrength;
}
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerExtraJump>()))
{
return KnownUpgrade.ExtraJump;
}
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerTumbleWings>()))
{
return KnownUpgrade.TumbleWings;
}
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerGrabRange>()))
{
return KnownUpgrade.GrabRange;
}
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerGrabThrow>()))
{
return KnownUpgrade.GrabThrow;
}
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerCrouchRest>()))
{
return KnownUpgrade.CrouchRest;
}
if (Object.op_Implicit((Object)(object)go.GetComponent<ItemUpgradePlayerTumbleClimb>()))
{
return KnownUpgrade.TumbleClimb;
}
return KnownUpgrade.None;
}
public static void BeginMergeNetwork(PhotonView host, PhotonView other)
{
if (Object.op_Implicit((Object)(object)host))
{
if (!Object.op_Implicit((Object)(object)((Component)host).gameObject.GetComponent<SynthesisNetwork>()))
{
((Component)host).gameObject.AddComponent<SynthesisNetwork>();
}
host.RPC("RPC_Synthesize", (RpcTarget)0, new object[1] { Object.op_Implicit((Object)(object)other) ? other.ViewID : 0 });
}
}
[IteratorStateMachine(typeof(<AnimateAndMergeRPC>d__3))]
public static IEnumerator AnimateAndMergeRPC(PhotonView hostPv, int otherViewId)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <AnimateAndMergeRPC>d__3(0)
{
hostPv = hostPv,
otherViewId = otherViewId
};
}
[IteratorStateMachine(typeof(<AnimateAndMergeLocal>d__4))]
public static IEnumerator AnimateAndMergeLocal(SynthesisNode a, SynthesisNode b)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <AnimateAndMergeLocal>d__4(0)
{
a = a,
b = b
};
}
private static string ComposeName(GameObject a, GameObject b)
{
string text = ResolveItemName(a);
string text2 = ResolveItemName(b);
if (string.CompareOrdinal(text, text2) > 0)
{
string text3 = text;
text = text2;
text2 = text3;
}
return text + " + " + text2;
}
private static string ResolveItemName(GameObject go)
{
if (!Object.op_Implicit((Object)(object)go))
{
return "Item";
}
ItemAttributes val = default(ItemAttributes);
if (go.TryGetComponent<ItemAttributes>(ref val) && Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.item))
{
return val.item.itemName;
}
return ((Object)go).name;
}
private static float ComputeHue(KnownUpgrade a, KnownUpgrade b)
{
float num = (float)a * 0.1619f + (float)b * 0.3271f + 0.137f;
return Mathf.Repeat(num, 1f);
}
private static KnownUpgrade[] BuildParts(SynthesisNode a, SynthesisNode b)
{
List<KnownUpgrade> list = new List<KnownUpgrade>(2);
if ((Object)(object)a != (Object)null)
{
list.Add(a.Type);
}
if ((Object)(object)b != (Object)null)
{
list.Add(b.Type);
}
return list.ToArray();
}
[IteratorStateMachine(typeof(<AnimatePair>d__9))]
private static IEnumerator AnimatePair(GameObject a, GameObject b)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <AnimatePair>d__9(0)
{
a = a,
b = b
};
}
private static void ApplySynthesis(GameObject host, string newName, float hueShift, KnownUpgrade[] parts)
{
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Expected O, but got Unknown
//IL_008c: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Expected O, but got Unknown
if (Object.op_Implicit((Object)(object)host))
{
ItemUpgrade val = host.GetComponent<ItemUpgrade>();
if (!Object.op_Implicit((Object)(object)val))
{
val = host.AddComponent<ItemUpgrade>();
}
if (val.upgradeEvent == null)
{
val.upgradeEvent = new UnityEvent();
}
((UnityEventBase)val.upgradeEvent).RemoveAllListeners();
SynthesisCombinedUpgrade synthesisCombinedUpgrade = host.GetComponent<SynthesisCombinedUpgrade>();
if (!Object.op_Implicit((Object)(object)synthesisCombinedUpgrade))
{
synthesisCombinedUpgrade = host.AddComponent<SynthesisCombinedUpgrade>();
}
synthesisCombinedUpgrade.parts = parts;
synthesisCombinedUpgrade.applied = false;
val.upgradeEvent.AddListener(new UnityAction(synthesisCombinedUpgrade.PerformUpgrade));
ApplyHue(host, hueShift);
}
}
private static void ApplyHue(GameObject host, float hueShift)
{
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//IL_0056: 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_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: 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_0086: 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)
Renderer[] componentsInChildren = host.GetComponentsInChildren<Renderer>(true);
float num = default(float);
float num2 = default(float);
float num3 = default(float);
foreach (Renderer val in componentsInChildren)
{
MaterialPropertyBlock val2 = new MaterialPropertyBlock();
val.GetPropertyBlock(val2);
Color val3 = ((Object.op_Implicit((Object)(object)val.sharedMaterial) && val.sharedMaterial.HasProperty("_Color")) ? val.sharedMaterial.color : Color.white);
Color.RGBToHSV(val3, ref num, ref num2, ref num3);
num = Mathf.Repeat(num + hueShift, 1f);
Color val4 = Color.HSVToRGB(num, num2, num3);
val2.SetColor("_Color", val4);
val.SetPropertyBlock(val2);
}
}
}
public class SynthesisCombinedUpgrade : MonoBehaviour
{
public KnownUpgrade[] parts = Array.Empty<KnownUpgrade>();
public bool applied;
private ItemToggle toggle;
private void Awake()
{
toggle = ((Component)this).GetComponent<ItemToggle>();
}
public void PerformUpgrade()
{
//IL_019b: Unknown result type (might be due to invalid IL or missing references)
//IL_01a5: Expected O, but got Unknown
if (applied || !Object.op_Implicit((Object)(object)toggle) || (Object)(object)PunManager.instance == (Object)null)
{
return;
}
PlayerAvatar val = SemiFunc.PlayerAvatarGetFromPhotonID(toggle.playerTogglePhotonID);
if (!Object.op_Implicit((Object)(object)val))
{
return;
}
string text = SemiFunc.PlayerGetSteamID(val);
for (int i = 0; i < parts.Length; i++)
{
switch (parts[i])
{
case KnownUpgrade.Energy:
PunManager.instance.UpgradePlayerEnergy(text, 1);
break;
case KnownUpgrade.SprintSpeed:
PunManager.instance.UpgradePlayerSprintSpeed(text, 1);
break;
case KnownUpgrade.Health:
PunManager.instance.UpgradePlayerHealth(text, 1);
break;
case KnownUpgrade.GrabStrength:
PunManager.instance.UpgradePlayerGrabStrength(text, 1);
break;
case KnownUpgrade.ExtraJump:
PunManager.instance.UpgradePlayerExtraJump(text, 1);
break;
case KnownUpgrade.TumbleWings:
PunManager.instance.UpgradePlayerTumbleWings(text, 1);
break;
case KnownUpgrade.GrabRange:
PunManager.instance.UpgradePlayerGrabRange(text, 1);
break;
case KnownUpgrade.GrabThrow:
PunManager.instance.UpgradePlayerThrowStrength(text, 1);
break;
case KnownUpgrade.CrouchRest:
PunManager.instance.UpgradePlayerCrouchRest(text, 1);
break;
case KnownUpgrade.TumbleClimb:
PunManager.instance.UpgradePlayerTumbleClimb(text, 1);
break;
}
}
applied = true;
ItemUpgrade component = ((Component)this).GetComponent<ItemUpgrade>();
if ((Object)(object)component != (Object)null && component.upgradeEvent != null)
{
component.upgradeEvent.RemoveListener(new UnityAction(PerformUpgrade));
}
}
}
public static class SynthesisAudio
{
[CompilerGenerated]
private sealed class <LoadNearDll>d__1 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public string dllLocation;
private string <dir>5__1;
private string[] <oggs>5__2;
private string[] <wavs>5__3;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <LoadNearDll>d__1(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<dir>5__1 = null;
<oggs>5__2 = null;
<wavs>5__3 = null;
<>1__state = -2;
}
private bool MoveNext()
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<dir>5__1 = "";
try
{
<dir>5__1 = Path.GetDirectoryName(dllLocation);
}
catch
{
}
if (string.IsNullOrEmpty(<dir>5__1) || !Directory.Exists(<dir>5__1))
{
return false;
}
<oggs>5__2 = Directory.GetFiles(<dir>5__1, "*.ogg", SearchOption.TopDirectoryOnly);
if (<oggs>5__2 != null && <oggs>5__2.Length != 0)
{
<>2__current = LoadOgg(<oggs>5__2[0]);
<>1__state = 1;
return true;
}
break;
case 1:
<>1__state = -1;
if (Object.op_Implicit((Object)(object)clip))
{
return false;
}
break;
}
<wavs>5__3 = Directory.GetFiles(<dir>5__1, "*.wav", SearchOption.TopDirectoryOnly);
if (<wavs>5__3 != null && <wavs>5__3.Length != 0)
{
clip = WavLoader.Load(<wavs>5__3[0]);
}
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
[CompilerGenerated]
private sealed class <LoadOgg>d__2 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public string path;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <LoadOgg>d__2(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
if (<>1__state != 0)
{
return false;
}
<>1__state = -1;
return false;
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
private static AudioClip clip;
[IteratorStateMachine(typeof(<LoadNearDll>d__1))]
public static IEnumerator LoadNearDll(string dllLocation)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <LoadNearDll>d__1(0)
{
dllLocation = dllLocation
};
}
[IteratorStateMachine(typeof(<LoadOgg>d__2))]
private static IEnumerator LoadOgg(string path)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <LoadOgg>d__2(0)
{
path = path
};
}
public static void Play(Vector3 pos)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)clip))
{
AudioSource.PlayClipAtPoint(clip, pos);
}
}
}
internal static class WavLoader
{
public static AudioClip Load(string path)
{
try
{
using FileStream input = File.OpenRead(path);
using BinaryReader binaryReader = new BinaryReader(input);
if (ReadTag(binaryReader) != "RIFF")
{
return null;
}
binaryReader.ReadInt32();
if (ReadTag(binaryReader) != "WAVE")
{
return null;
}
int num = 1;
int num2 = 44100;
int num3 = 16;
int num4 = 1;
byte[] array = null;
while (binaryReader.BaseStream.Position + 8 <= binaryReader.BaseStream.Length)
{
string text = ReadTag(binaryReader);
int num5 = binaryReader.ReadInt32();
if (text == "fmt ")
{
num4 = binaryReader.ReadInt16();
num = binaryReader.ReadInt16();
num2 = binaryReader.ReadInt32();
binaryReader.ReadInt32();
binaryReader.ReadInt16();
num3 = binaryReader.ReadInt16();
int num6 = num5 - 16;
if (num6 > 0)
{
binaryReader.ReadBytes(num6);
}
}
else if (text == "data")
{
array = binaryReader.ReadBytes(num5);
}
else
{
binaryReader.ReadBytes(num5);
}
}
if (array == null)
{
return null;
}
float[] array2;
if (num4 == 1 && num3 == 16)
{
int num7 = array.Length / 2;
array2 = new float[num7];
int num8 = 0;
int num9 = 0;
while (num9 < num7)
{
short num10 = (short)(array[num8] | (array[num8 + 1] << 8));
array2[num9] = (float)num10 / 32768f;
num9++;
num8 += 2;
}
}
else
{
if (num4 != 3 || num3 != 32)
{
return null;
}
int num11 = array.Length / 4;
array2 = new float[num11];
Buffer.BlockCopy(array, 0, array2, 0, array.Length);
}
int num12 = array2.Length / num;
AudioClip val = AudioClip.Create(Path.GetFileNameWithoutExtension(path), num12, num, num2, false);
val.SetData(array2, 0);
return val;
}
catch
{
return null;
}
}
private static string ReadTag(BinaryReader br)
{
byte[] array = br.ReadBytes(4);
if (array.Length < 4)
{
return "";
}
return new string(new char[4]
{
(char)array[0],
(char)array[1],
(char)array[2],
(char)array[3]
});
}
}
}