using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text.RegularExpressions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using ExitGames.Client.Photon;
using HarmonyLib;
using LobbyImprovements.Patches;
using MenuLib;
using MenuLib.MonoBehaviors;
using Microsoft.CodeAnalysis;
using Newtonsoft.Json;
using Photon.Pun;
using Photon.Realtime;
using Steamworks;
using Steamworks.Data;
using TMPro;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("")]
[assembly: AssemblyCompany("uk.1a3.lobbyimprovements")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.1.7.0")]
[assembly: AssemblyInformationalVersion("1.1.7+e47ac7f169769768c28ddf74c0b5ba4280a45330")]
[assembly: AssemblyProduct("LobbyImprovements")]
[assembly: AssemblyTitle("uk.1a3.lobbyimprovements")]
[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.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace LobbyImprovements
{
public class ObjectScreenshotTaker : MonoBehaviour
{
private enum ScreenshotTypes
{
None,
Modules,
Enemies,
Items,
Valuables
}
[CompilerGenerated]
private sealed class <TakeScreenshotsCoroutine>d__20 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public ObjectScreenshotTaker <>4__this;
public string ssType;
public GameObject[] modules;
private GameObject[] <>7__wrap1;
private int <>7__wrap2;
private GameObject <module>5__4;
private string <fileName>5__5;
private bool <useCollisionsForBounds>5__6;
private GameObject <boundsObject>5__7;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <TakeScreenshotsCoroutine>d__20(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>7__wrap1 = null;
<module>5__4 = null;
<fileName>5__5 = null;
<boundsObject>5__7 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_063c: Unknown result type (might be due to invalid IL or missing references)
//IL_0641: Unknown result type (might be due to invalid IL or missing references)
//IL_064c: Unknown result type (might be due to invalid IL or missing references)
//IL_065b: Unknown result type (might be due to invalid IL or missing references)
//IL_066a: Unknown result type (might be due to invalid IL or missing references)
//IL_06c1: Unknown result type (might be due to invalid IL or missing references)
//IL_06c6: Unknown result type (might be due to invalid IL or missing references)
//IL_06ca: Unknown result type (might be due to invalid IL or missing references)
//IL_06cf: Unknown result type (might be due to invalid IL or missing references)
//IL_06e3: Unknown result type (might be due to invalid IL or missing references)
//IL_06e8: Unknown result type (might be due to invalid IL or missing references)
//IL_0466: Unknown result type (might be due to invalid IL or missing references)
//IL_0736: Unknown result type (might be due to invalid IL or missing references)
//IL_073b: Unknown result type (might be due to invalid IL or missing references)
//IL_073f: Unknown result type (might be due to invalid IL or missing references)
//IL_0744: Unknown result type (might be due to invalid IL or missing references)
//IL_077a: Unknown result type (might be due to invalid IL or missing references)
//IL_077f: Unknown result type (might be due to invalid IL or missing references)
//IL_0783: Unknown result type (might be due to invalid IL or missing references)
//IL_0788: Unknown result type (might be due to invalid IL or missing references)
//IL_079f: Unknown result type (might be due to invalid IL or missing references)
//IL_05d7: Unknown result type (might be due to invalid IL or missing references)
//IL_07c3: Unknown result type (might be due to invalid IL or missing references)
//IL_07c8: Unknown result type (might be due to invalid IL or missing references)
//IL_07cc: Unknown result type (might be due to invalid IL or missing references)
//IL_07d1: Unknown result type (might be due to invalid IL or missing references)
//IL_07e8: Unknown result type (might be due to invalid IL or missing references)
//IL_03a5: Unknown result type (might be due to invalid IL or missing references)
//IL_03af: Expected O, but got Unknown
//IL_09c1: Unknown result type (might be due to invalid IL or missing references)
//IL_09cb: Expected O, but got Unknown
//IL_053e: Unknown result type (might be due to invalid IL or missing references)
//IL_0548: Expected O, but got Unknown
//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
//IL_01cb: Unknown result type (might be due to invalid IL or missing references)
//IL_09a1: Unknown result type (might be due to invalid IL or missing references)
//IL_0980: Unknown result type (might be due to invalid IL or missing references)
//IL_09b6: Unknown result type (might be due to invalid IL or missing references)
//IL_0412: Unknown result type (might be due to invalid IL or missing references)
//IL_041c: Expected O, but got Unknown
int num = <>1__state;
ObjectScreenshotTaker objectScreenshotTaker = <>4__this;
Bounds val2;
float num2;
Vector3 val3;
Vector3 val4;
float num3;
float num4;
switch (num)
{
default:
return false;
case 0:
<>1__state = -1;
if (!Directory.Exists(objectScreenshotTaker.SavePath + "/" + ssType))
{
Directory.CreateDirectory(objectScreenshotTaker.SavePath + "/" + ssType);
}
<>7__wrap1 = modules;
<>7__wrap2 = 0;
goto IL_0a45;
case 1:
<>1__state = -1;
<useCollisionsForBounds>5__6 = false;
<boundsObject>5__7 = objectScreenshotTaker.moduleObject;
if (ssType == "Enemies")
{
Enemy componentInChildren = objectScreenshotTaker.moduleObject.GetComponentInChildren<Enemy>();
if (componentInChildren != null)
{
componentInChildren.Freeze(7f);
}
if (((Object)<module>5__4).name == "Enemy - Bomb Thrower")
{
<boundsObject>5__7 = ((Component)componentInChildren.Rigidbody).gameObject;
}
else if (((Object)<module>5__4).name == "Enemy - Elsa")
{
<boundsObject>5__7 = ((Component)((Component)componentInChildren).gameObject.GetComponent<EnemyElsa>().visualsTransform).gameObject;
}
else if (((Object)<module>5__4).name == "Enemy - Oogly")
{
<boundsObject>5__7 = ((Component)((Component)componentInChildren).gameObject.GetComponent<EnemyOogly>().visualTransform).gameObject;
}
if (((Object)<module>5__4).name != "Enemy - Beamer" && ((Object)<module>5__4).name != "Enemy - Shadow" && ((Object)<module>5__4).name != "Enemy - Slow Walker" && ((Object)<module>5__4).name != "Enemy - Upscream")
{
<useCollisionsForBounds>5__6 = true;
}
if (((Object)<module>5__4).name == "Enemy - Bomb Thrower" || ((Object)<module>5__4).name == "Enemy - Floater" || ((Object)<module>5__4).name == "Enemy - Runner" || ((Object)<module>5__4).name == "Enemy - Slow Walker" || ((Object)<module>5__4).name == "Enemy - Tumbler")
{
<>2__current = (object)new WaitForSeconds(1f);
<>1__state = 2;
return true;
}
if (((Object)<module>5__4).name == "Enemy - Hidden" || ((Object)<module>5__4).name == "Enemy - Hunter" || ((Object)<module>5__4).name == "Enemy - Oogly")
{
<>2__current = (object)new WaitForSeconds(5f);
<>1__state = 3;
return true;
}
}
else if (ssType == "Items")
{
Rigidbody component = objectScreenshotTaker.moduleObject.GetComponent<Rigidbody>();
if (Object.op_Implicit((Object)(object)component))
{
component.useGravity = false;
component.velocity = Vector3.zero;
component.constraints = (RigidbodyConstraints)126;
}
PhysGrabObjectImpactDetector component2 = objectScreenshotTaker.moduleObject.GetComponent<PhysGrabObjectImpactDetector>();
if (Object.op_Implicit((Object)(object)component2) && !component2.particleDisable)
{
component2.particleDisable = true;
}
if (((Object)<module>5__4).name == "Item Cart Cannon" || ((Object)<module>5__4).name == "Item Cart Laser")
{
ItemCartCannonMain component3 = objectScreenshotTaker.moduleObject.GetComponent<ItemCartCannonMain>();
if (component3 != null)
{
ItemBattery battery = component3.battery;
if (battery != null)
{
BatteryVisualLogic batteryVisualLogic = battery.batteryVisualLogic;
if (batteryVisualLogic != null)
{
((Component)batteryVisualLogic).gameObject.SetActive(false);
}
}
}
}
<useCollisionsForBounds>5__6 = true;
if (((Object)<module>5__4).name == "Item Melee Baseball Bat" || ((Object)<module>5__4).name == "Item Melee Frying Pan")
{
<>2__current = (object)new WaitForSeconds(1f);
<>1__state = 4;
return true;
}
}
else if (ssType == "Modules")
{
PhysGrabObject[] array = Object.FindObjectsOfType<PhysGrabObject>();
foreach (PhysGrabObject val in array)
{
if (!val.hasHinge)
{
val.DestroyPhysGrabObject();
}
}
}
else if (ssType == "Valuables")
{
Rigidbody component4 = objectScreenshotTaker.moduleObject.GetComponent<Rigidbody>();
if (Object.op_Implicit((Object)(object)component4))
{
component4.useGravity = false;
component4.velocity = Vector3.zero;
component4.constraints = (RigidbodyConstraints)126;
}
PhysGrabObjectImpactDetector component5 = objectScreenshotTaker.moduleObject.GetComponent<PhysGrabObjectImpactDetector>();
if (Object.op_Implicit((Object)(object)component5) && !component5.particleDisable)
{
component5.particleDisable = true;
}
if (((Object)<module>5__4).name == "Valuable Gumball")
{
<useCollisionsForBounds>5__6 = true;
}
}
goto IL_062f;
case 2:
<>1__state = -1;
goto IL_062f;
case 3:
<>1__state = -1;
goto IL_062f;
case 4:
<>1__state = -1;
goto IL_062f;
case 5:
{
<>1__state = -1;
objectScreenshotTaker.TakeScreenshot(<fileName>5__5);
PluginLoader.StaticLogger.LogDebug((object)("Screenshot saved: " + <fileName>5__5));
Object.Destroy((Object)(object)objectScreenshotTaker.moduleObject);
if (Time.timeScale == 0f)
{
Time.timeScale = 1f;
}
<fileName>5__5 = null;
<boundsObject>5__7 = null;
<module>5__4 = null;
goto IL_0a37;
}
IL_0a37:
<>7__wrap2++;
goto IL_0a45;
IL_0a45:
if (<>7__wrap2 < <>7__wrap1.Length)
{
<module>5__4 = <>7__wrap1[<>7__wrap2];
if (Object.op_Implicit((Object)(object)<module>5__4) && (!(ssType == "Modules") || !((Object)<module>5__4).name.StartsWith("Start Room - Shop")))
{
string text = ((Object)<module>5__4).name;
if (ssType == "Enemies")
{
text = ((Object)<module>5__4).name.Replace("Enemy - ", "");
}
else if (ssType == "Modules")
{
text = Regex.Replace(((Object)<module>5__4).name, " - [0-9]+ - ", " - ");
}
<fileName>5__5 = objectScreenshotTaker.SavePath + "/" + ssType + "/" + text + ".png";
if (!File.Exists(<fileName>5__5))
{
if (ssType == "Valuables" && ((Object)<module>5__4).name.StartsWith("Surplus Valuable - "))
{
Time.timeScale = 0f;
}
objectScreenshotTaker.moduleObject = Object.Instantiate<GameObject>(<module>5__4, Vector3.zero, Quaternion.identity);
<>2__current = null;
<>1__state = 1;
return true;
}
}
goto IL_0a37;
}
<>7__wrap1 = null;
return false;
IL_062f:
val2 = objectScreenshotTaker.CalculateBounds(<boundsObject>5__7, <useCollisionsForBounds>5__6);
num2 = Mathf.Max(new float[3]
{
((Bounds)(ref val2)).size.x,
((Bounds)(ref val2)).size.y,
((Bounds)(ref val2)).size.z
});
objectScreenshotTaker.ScreenshotCamera.orthographic = !((Object)<module>5__4).name.StartsWith("Enemy Valuable - ");
objectScreenshotTaker.ScreenshotCamera.orthographicSize = num2 * 0.8f;
val3 = new Vector3(1f, 1f, -1f);
val4 = ((Vector3)(ref val3)).normalized;
if (ssType == "Enemies")
{
val4 = Vector3.forward;
}
else if ((ssType == "Items" && ((Object)<module>5__4).name.StartsWith("Item Upgrade ")) || ssType == "Valuables")
{
val3 = new Vector3(1f, 1f, 1f);
val4 = ((Vector3)(ref val3)).normalized;
}
num3 = 1f;
if (ssType == "Items")
{
num3 = 0.75f;
}
num4 = num2 * num3;
((Component)objectScreenshotTaker.ScreenshotCamera).transform.position = ((Bounds)(ref val2)).center + val4 * num4;
((Component)objectScreenshotTaker.ScreenshotCamera).transform.LookAt(((Bounds)(ref val2)).center);
if (Object.op_Implicit((Object)(object)objectScreenshotTaker.ScreenshotLight))
{
((Component)objectScreenshotTaker.ScreenshotLight).transform.position = ((Bounds)(ref val2)).center + val4 * num4;
((Component)objectScreenshotTaker.ScreenshotLight).transform.LookAt(((Bounds)(ref val2)).center);
}
if (ssType != "Modules")
{
if (Object.op_Implicit((Object)(object)objectScreenshotTaker.ScreenshotLight))
{
if (ssType == "Valuables" && (((Object)<module>5__4).name == "Valuable Goblet" || ((Object)<module>5__4).name == "Valuable GoldFish" || ((Object)<module>5__4).name == "Valuable GoldTooth" || ((Object)<module>5__4).name == "Valuable Piano" || ((Object)<module>5__4).name == "Valuable SilverFish" || ((Object)<module>5__4).name == "Valuable Trophy" || ((Object)<module>5__4).name == "Valuable Wizard Griffin Statue" || ((Object)<module>5__4).name == "Valuable Wizard Master Potion" || ((Object)<module>5__4).name == "Valuable Wizard Sword"))
{
((Behaviour)objectScreenshotTaker.ScreenshotLight).enabled = true;
}
else
{
((Behaviour)objectScreenshotTaker.ScreenshotLight).enabled = false;
}
}
if ((ssType == "Enemies" && ((Object)<module>5__4).name == "Enemy - Gnome") || (ssType == "Items" && ((Object)<module>5__4).name == "Item Duck Bucket"))
{
objectScreenshotTaker.ambientLight = new Color(0.5f, 0.5f, 0.5f);
}
else
{
objectScreenshotTaker.ambientLight = new Color(1f, 1f, 1f);
}
RenderSettings.ambientLight = objectScreenshotTaker.ambientLight.Value;
}
<>2__current = (object)new WaitForEndOfFrame();
<>1__state = 5;
return true;
}
}
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 <TakeScreenshotsOfEnemies>d__15 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public ObjectScreenshotTaker <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <TakeScreenshotsOfEnemies>d__15(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
int num = <>1__state;
ObjectScreenshotTaker objectScreenshotTaker = <>4__this;
switch (num)
{
default:
return false;
case 0:
<>1__state = -1;
objectScreenshotTaker.screenshotType = ScreenshotTypes.Enemies;
objectScreenshotTaker.ScreenshotStart();
<>2__current = (object)new WaitForSeconds(2f);
<>1__state = 1;
return true;
case 1:
{
<>1__state = -1;
List<GameObject> source = (from x in (from x in EnemyDirector.instance.enemiesDifficulty1.Concat(EnemyDirector.instance.enemiesDifficulty2).Concat(EnemyDirector.instance.enemiesDifficulty3)
where Object.op_Implicit((Object)(object)x) && !((Object)x).name.Contains("Enemy Group - ")
select x).Select(delegate(EnemySetup x)
{
PrefabRef? obj = ((IEnumerable<PrefabRef>)x.spawnObjects).FirstOrDefault((Func<PrefabRef, bool>)((PrefabRef o) => !o.PrefabName.Contains("Director")));
return (obj == null) ? null : obj.Prefab;
})
where Object.op_Implicit((Object)(object)x)
select x).ToList();
<>2__current = ((MonoBehaviour)objectScreenshotTaker).StartCoroutine(objectScreenshotTaker.TakeScreenshotsCoroutine((from x in source.Distinct()
orderby ((Object)x).name
select x).ToArray(), "Enemies", "Enemies"));
<>1__state = 2;
return true;
}
case 2:
<>1__state = -1;
objectScreenshotTaker.ScreenshotEnd();
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 <TakeScreenshotsOfItems>d__16 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public ObjectScreenshotTaker <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <TakeScreenshotsOfItems>d__16(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
int num = <>1__state;
ObjectScreenshotTaker objectScreenshotTaker = <>4__this;
switch (num)
{
default:
return false;
case 0:
<>1__state = -1;
objectScreenshotTaker.screenshotType = ScreenshotTypes.Items;
objectScreenshotTaker.ScreenshotStart();
<>2__current = (object)new WaitForSeconds(2f);
<>1__state = 1;
return true;
case 1:
{
<>1__state = -1;
List<Item> source = (from x in Resources.FindObjectsOfTypeAll<Item>()
where Object.op_Implicit((Object)(object)x) && Object.op_Implicit((Object)(object)x.prefab.Prefab)
select x).ToList();
<>2__current = ((MonoBehaviour)objectScreenshotTaker).StartCoroutine(objectScreenshotTaker.TakeScreenshotsCoroutine((from x in source
orderby ((Object)x).name
select x.prefab.Prefab).Distinct().ToArray(), "Items", "Items"));
<>1__state = 2;
return true;
}
case 2:
<>1__state = -1;
objectScreenshotTaker.ScreenshotEnd();
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 <TakeScreenshotsOfModules>d__17 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public ObjectScreenshotTaker <>4__this;
private List<Level> <levels>5__2;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <TakeScreenshotsOfModules>d__17(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<levels>5__2 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Expected O, but got Unknown
int num = <>1__state;
ObjectScreenshotTaker objectScreenshotTaker = <>4__this;
switch (num)
{
default:
return false;
case 0:
<>1__state = -1;
objectScreenshotTaker.screenshotType = ScreenshotTypes.Modules;
objectScreenshotTaker.ScreenshotStart();
<>2__current = (object)new WaitForSeconds(2f);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
<levels>5__2 = (from x in Resources.FindObjectsOfTypeAll<Level>()
where Object.op_Implicit((Object)(object)x) && ((Object)x).name != "Level - Lobby" && ((Object)x).name != "Level - Lobby Menu" && ((Object)x).name != "Level - Main Menu" && ((Object)x).name != "Level - Splash Screen"
select x).ToList();
<>2__current = ((MonoBehaviour)objectScreenshotTaker).StartCoroutine(objectScreenshotTaker.TakeScreenshotsCoroutine((from x in (from x in <levels>5__2.SelectMany((Level x) => x.StartRooms)
select x.Prefab).Distinct()
orderby ((Object)x).name
select x).ToArray(), "StartRoom", "Modules"));
<>1__state = 2;
return true;
case 2:
<>1__state = -1;
<>2__current = ((MonoBehaviour)objectScreenshotTaker).StartCoroutine(objectScreenshotTaker.TakeScreenshotsCoroutine((from x in (from x in <levels>5__2.SelectMany((Level x) => x.ModulesNormal1.Concat(x.ModulesNormal2).Concat(x.ModulesNormal3))
select x.Prefab).Distinct()
orderby ((Object)x).name
select x).ToArray(), "Normal", "Modules"));
<>1__state = 3;
return true;
case 3:
<>1__state = -1;
<>2__current = ((MonoBehaviour)objectScreenshotTaker).StartCoroutine(objectScreenshotTaker.TakeScreenshotsCoroutine((from x in (from x in <levels>5__2.SelectMany((Level x) => x.ModulesPassage1.Concat(x.ModulesPassage2).Concat(x.ModulesPassage3))
select x.Prefab).Distinct()
orderby ((Object)x).name
select x).ToArray(), "Passage", "Modules"));
<>1__state = 4;
return true;
case 4:
<>1__state = -1;
<>2__current = ((MonoBehaviour)objectScreenshotTaker).StartCoroutine(objectScreenshotTaker.TakeScreenshotsCoroutine((from x in (from x in <levels>5__2.SelectMany((Level x) => x.ModulesDeadEnd1.Concat(x.ModulesDeadEnd2).Concat(x.ModulesDeadEnd3))
select x.Prefab).Distinct()
orderby ((Object)x).name
select x).ToArray(), "DeadEnd", "Modules"));
<>1__state = 5;
return true;
case 5:
<>1__state = -1;
<>2__current = ((MonoBehaviour)objectScreenshotTaker).StartCoroutine(objectScreenshotTaker.TakeScreenshotsCoroutine((from x in (from x in <levels>5__2.SelectMany((Level x) => x.ModulesExtraction1.Concat(x.ModulesExtraction2).Concat(x.ModulesExtraction3))
select x.Prefab).Distinct()
orderby ((Object)x).name
select x).ToArray(), "Extraction", "Modules"));
<>1__state = 6;
return true;
case 6:
<>1__state = -1;
objectScreenshotTaker.ScreenshotEnd();
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 <TakeScreenshotsOfValuables>d__18 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public ObjectScreenshotTaker <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <TakeScreenshotsOfValuables>d__18(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Expected O, but got Unknown
int num = <>1__state;
ObjectScreenshotTaker objectScreenshotTaker = <>4__this;
switch (num)
{
default:
return false;
case 0:
<>1__state = -1;
objectScreenshotTaker.screenshotType = ScreenshotTypes.Valuables;
objectScreenshotTaker.ScreenshotStart();
<>2__current = (object)new WaitForSeconds(2f);
<>1__state = 1;
return true;
case 1:
{
<>1__state = -1;
List<ValuableObject> source = (from x in (from x in RunManager.instance.levels.SelectMany((Level x) => x.ValuablePresets.SelectMany((LevelValuables p) => p.tiny.Concat(p.small).Concat(p.medium).Concat(p.big)
.Concat(p.wide)
.Concat(p.tall)
.Concat(p.veryTall)))
select x.Prefab.GetComponent<ValuableObject>()).Concat(from item in Resources.FindObjectsOfTypeAll<ValuableObject>()
where ((Object)item).name.StartsWith("Enemy Valuable - ") || ((Object)item).name.StartsWith("Surplus Valuable - ")
select item)
where Object.op_Implicit((Object)(object)x) && Object.op_Implicit((Object)(object)((Component)x).gameObject)
select x).ToList();
<>2__current = ((MonoBehaviour)objectScreenshotTaker).StartCoroutine(objectScreenshotTaker.TakeScreenshotsCoroutine((from x in source
orderby ((Object)x).name
select ((Component)x).gameObject).Distinct().ToArray(), "Valuables", "Valuables"));
<>1__state = 2;
return true;
}
case 2:
<>1__state = -1;
objectScreenshotTaker.ScreenshotEnd();
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 readonly string SavePath = "Screenshots";
internal static ObjectScreenshotTaker instance;
internal bool isTakingScreenshots;
private Camera ScreenshotCamera;
private Light ScreenshotLight;
private GameObject moduleObject;
private RenderTexture renderTexture;
private Texture2D screenshot;
private Color? ambientLight;
private ScreenshotTypes screenshotType;
private void Awake()
{
//IL_00b2: 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_00e8: Expected O, but got Unknown
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)instance))
{
Object.Destroy((Object)(object)((Component)this).gameObject);
return;
}
instance = this;
if ((Object)(object)ScreenshotCamera == (Object)null)
{
ScreenshotCamera = ((Component)this).gameObject.AddComponent<Camera>();
ScreenshotCamera.CopyFrom(Camera.main);
((Object)ScreenshotCamera).name = "ScreenshotCamera";
ScreenshotCamera.cullingMask = -4129;
ScreenshotCamera.farClipPlane = 2000f;
((Behaviour)ScreenshotCamera).enabled = false;
ScreenshotCamera.clearFlags = (CameraClearFlags)2;
ScreenshotCamera.backgroundColor = new Color(0f, 0f, 0f, 0f);
}
if ((Object)(object)ScreenshotLight == (Object)null)
{
Light spotlight = PlayerAvatar.instance.flashlightController.spotlight;
GameObject val = new GameObject("ScreenshotLight");
ScreenshotLight = val.AddComponent<Light>();
ScreenshotLight.type = spotlight.type;
ScreenshotLight.color = spotlight.color;
ScreenshotLight.intensity = spotlight.intensity;
ScreenshotLight.range = 100f;
ScreenshotLight.spotAngle = 100f;
ScreenshotLight.shadows = spotlight.shadows;
ScreenshotLight.cookie = spotlight.cookie;
ScreenshotLight.cookieSize = spotlight.cookieSize;
ScreenshotLight.renderMode = spotlight.renderMode;
((Behaviour)ScreenshotLight).enabled = false;
}
if (!Directory.Exists(SavePath))
{
Directory.CreateDirectory(SavePath);
}
GameObject gameObject = ((Component)LevelGenerator.Instance.LevelParent.GetComponentInChildren<StartRoom>()).gameObject;
PhysGrabObject[] array = Object.FindObjectsOfType<PhysGrabObject>();
for (int i = 0; i < array.Length; i++)
{
array[i].DestroyPhysGrabObject();
}
Light[] componentsInChildren = ((Component)gameObject.transform).GetComponentsInChildren<Light>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
((Behaviour)componentsInChildren[i]).enabled = false;
}
Renderer[] componentsInChildren2 = ((Component)gameObject.transform).GetComponentsInChildren<Renderer>();
for (int i = 0; i < componentsInChildren2.Length; i++)
{
componentsInChildren2[i].enabled = false;
}
Canvas[] componentsInChildren3 = ((Component)gameObject.transform.Find("Truck/Truck Run")).GetComponentsInChildren<Canvas>();
for (int i = 0; i < componentsInChildren3.Length; i++)
{
((Behaviour)componentsInChildren3[i]).enabled = false;
}
componentsInChildren = ((Component)PlayerAvatar.instance).GetComponentsInChildren<Light>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
((Behaviour)componentsInChildren[i]).enabled = false;
}
componentsInChildren2 = ((Component)PlayerAvatar.instance).GetComponentsInChildren<Renderer>();
for (int i = 0; i < componentsInChildren2.Length; i++)
{
componentsInChildren2[i].enabled = false;
}
}
private void OnDestroy()
{
PluginLoader.StaticLogger.LogInfo((object)"[ModuleScreenshotTaker] Destroying...");
if (Object.op_Implicit((Object)(object)ScreenshotLight))
{
Object.Destroy((Object)(object)((Component)ScreenshotLight).gameObject);
}
}
private void ScreenshotStart()
{
isTakingScreenshots = true;
PlayerAvatar.instance.flashlightController.hideFlashlight = true;
PluginLoader.StaticLogger.LogInfo((object)"[ModuleScreenshotTaker] Starting");
}
private void ScreenshotEnd()
{
if (Object.op_Implicit((Object)(object)ScreenshotLight))
{
((Behaviour)ScreenshotLight).enabled = false;
}
PlayerAvatar.instance.flashlightController.hideFlashlight = false;
ambientLight = null;
EnvironmentDirector.Instance.DarkAdaptationLerp = ((!FlashlightController.Instance.LightActive) ? 0.01f : 0.99f);
isTakingScreenshots = false;
PluginLoader.StaticLogger.LogInfo((object)"[ModuleScreenshotTaker] Finished");
if (Object.op_Implicit((Object)(object)ScreenshotLight))
{
Object.Destroy((Object)(object)((Component)ScreenshotLight).gameObject);
}
Object.Destroy((Object)(object)((Component)this).gameObject);
}
[IteratorStateMachine(typeof(<TakeScreenshotsOfEnemies>d__15))]
internal IEnumerator TakeScreenshotsOfEnemies()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <TakeScreenshotsOfEnemies>d__15(0)
{
<>4__this = this
};
}
[IteratorStateMachine(typeof(<TakeScreenshotsOfItems>d__16))]
internal IEnumerator TakeScreenshotsOfItems()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <TakeScreenshotsOfItems>d__16(0)
{
<>4__this = this
};
}
[IteratorStateMachine(typeof(<TakeScreenshotsOfModules>d__17))]
internal IEnumerator TakeScreenshotsOfModules()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <TakeScreenshotsOfModules>d__17(0)
{
<>4__this = this
};
}
[IteratorStateMachine(typeof(<TakeScreenshotsOfValuables>d__18))]
internal IEnumerator TakeScreenshotsOfValuables()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <TakeScreenshotsOfValuables>d__18(0)
{
<>4__this = this
};
}
private Bounds CalculateBounds(GameObject go, bool useColliders = false)
{
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ee: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
if (useColliders)
{
Collider[] array = (from r in go.GetComponentsInChildren<Collider>(true)
where r.enabled && ((Component)r).gameObject.activeInHierarchy && !r.isTrigger
select r).ToArray();
if (array.Length != 0)
{
Bounds bounds = array[0].bounds;
for (int i = 1; i < array.Length; i++)
{
((Bounds)(ref bounds)).Encapsulate(array[i].bounds);
}
return bounds;
}
}
Renderer[] array2 = (from r in go.GetComponentsInChildren<Renderer>(true)
where r.enabled && ((Component)r).gameObject.activeInHierarchy
select r).ToArray();
if (array2.Length != 0)
{
Bounds bounds2 = array2[0].bounds;
for (int j = 1; j < array2.Length; j++)
{
((Bounds)(ref bounds2)).Encapsulate(array2[j].bounds);
}
return bounds2;
}
PluginLoader.StaticLogger.LogWarning((object)("No renderers found for " + ((Object)go).name));
return new Bounds(go.transform.position, Vector3.one);
}
[IteratorStateMachine(typeof(<TakeScreenshotsCoroutine>d__20))]
private IEnumerator TakeScreenshotsCoroutine(GameObject[] modules, string category, string ssType)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <TakeScreenshotsCoroutine>d__20(0)
{
<>4__this = this,
modules = modules,
ssType = ssType
};
}
private void TakeScreenshot(string filePath)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Expected O, but got Unknown
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
renderTexture = new RenderTexture(1920, 1920, 32, (RenderTextureFormat)0);
ScreenshotCamera.targetTexture = renderTexture;
ScreenshotCamera.Render();
RenderTexture.active = renderTexture;
screenshot = new Texture2D(((Texture)renderTexture).width, ((Texture)renderTexture).height, (TextureFormat)4, false);
screenshot.ReadPixels(new Rect(0f, 0f, (float)((Texture)renderTexture).width, (float)((Texture)renderTexture).height), 0, 0);
screenshot.Apply();
byte[] bytes = ImageConversion.EncodeToPNG(screenshot);
File.WriteAllBytes(filePath, bytes);
ScreenshotCamera.targetTexture = null;
RenderTexture.active = null;
Object.Destroy((Object)(object)renderTexture);
Object.Destroy((Object)(object)screenshot);
}
private void LateUpdate()
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
if (isTakingScreenshots && ambientLight.HasValue)
{
RenderSettings.ambientLight = ambientLight.Value;
}
}
}
[BepInPlugin("uk.1a3.lobbyimprovements", "LobbyImprovements", "1.1.7")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
internal class PluginLoader : BaseUnityPlugin
{
internal static List<string> modDevSteamIDs = new List<string>(2) { "76561198286895332", "76561199523762804" };
internal static Dictionary<string, string> namePrefixMap = new Dictionary<string, string>
{
{ "developer", "<color=#ff0062>[DEV]</color> " },
{ "tester", "<color=#ff8b00>[TESTER]</color> " }
};
internal static Dictionary<string, string> nameSuffixMap = new Dictionary<string, string>();
private readonly Harmony harmony = new Harmony("uk.1a3.lobbyimprovements");
private static bool initialized;
internal static ConfigEntry<string> playerNamePrefixSelected;
internal static ConfigEntry<bool> singleplayerLobbyMenu;
internal static ConfigEntry<bool> saveDeleteEnabled;
internal static ConfigEntry<bool> savePublicEnabled;
internal static ConfigEntry<bool> moonPhaseUIEnabled;
internal static ConfigEntry<bool> splashScreenUIEnabled;
internal static ConfigEntry<bool> testerOverlayEnabled;
internal static ConfigEntry<bool> debugConsole;
internal static ConfigEntry<bool> testerCommands;
internal static ConfigEntry<bool> mainMenuOverhaulEnabled;
internal static bool mainMenuOverhaul;
internal static ManualLogSource StaticLogger { get; private set; }
internal static ConfigFile StaticConfig { get; private set; }
private void Awake()
{
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Expected O, but got Unknown
if (initialized)
{
return;
}
initialized = true;
StaticLogger = ((BaseUnityPlugin)this).Logger;
StaticConfig = ((BaseUnityPlugin)this).Config;
try
{
harmony.PatchAll(typeof(ChatCommands));
}
catch (Exception ex)
{
StaticLogger.LogError((object)("ChatCommands Patch Failed: " + ex));
}
try
{
harmony.PatchAll(typeof(PlayerNamePrefix_SteamManager));
}
catch (Exception ex2)
{
StaticLogger.LogError((object)("PlayerNamePrefix Patch Failed: " + ex2));
if (playerNamePrefixSelected == null)
{
playerNamePrefixSelected = StaticConfig.Bind<string>("Name Prefix", "Selected", "none", new ConfigDescription("Which prefix would you like to use?", (AcceptableValueBase)null, Array.Empty<object>()));
playerNamePrefixSelected.SettingChanged += delegate
{
PlayerNamePrefix_SteamManager.WorldSpaceUIParent_UpdatePlayerName(PlayerAvatar.instance);
if (GameManager.Multiplayer())
{
PlayerNamePrefix_SemiFunc.PhotonSetCustomProperty(PhotonNetwork.LocalPlayer, "playerNamePrefix", playerNamePrefixSelected.Value);
}
};
}
}
saveDeleteEnabled = StaticConfig.Bind<bool>("Saves", "Deletion", true, "Should saves be automatically deleted when everyone dies?");
savePublicEnabled = StaticConfig.Bind<bool>("Saves", "Public Lobbies", true, "Should public lobbies have save files?");
try
{
harmony.PatchAll(typeof(PublicLobbySaves));
}
catch (Exception ex3)
{
StaticLogger.LogError((object)("PublicLobbySaves Patch Failed: " + ex3));
}
try
{
harmony.PatchAll(typeof(ServerListSearch));
}
catch (Exception ex4)
{
StaticLogger.LogError((object)("ServerListSearch Patch Failed: " + ex4));
}
singleplayerLobbyMenu = StaticConfig.Bind<bool>("Singleplayer", "Lobby Menu", false, "Should the lobby menu be enabled in singleplayer?");
try
{
harmony.PatchAll(typeof(MenuPageLobbySP));
}
catch (Exception ex5)
{
StaticLogger.LogError((object)("MenuPageLobbySP Patch Failed: " + ex5));
}
moonPhaseUIEnabled = StaticConfig.Bind<bool>("Fast Startup", "Moon Phase", true, "Should the moon phase animation be shown?");
splashScreenUIEnabled = StaticConfig.Bind<bool>("Fast Startup", "Splash Screen", true, "Should the splash screen be shown?");
try
{
harmony.PatchAll(typeof(FastStartup));
}
catch (Exception ex6)
{
StaticLogger.LogError((object)("FastStartup Patch Failed: " + ex6));
}
debugConsole = StaticConfig.Bind<bool>("Debug Console", "Enabled", false, "Enables the vanilla debug console. This requires a game restart!");
testerCommands = StaticConfig.Bind<bool>("Debug Console", "Tester Commands", false, "Enables vanilla debug commands for the debug console. This requires a game restart!");
testerOverlayEnabled = StaticConfig.Bind<bool>("Tester Overlay", "Enabled", false, "Should the tester overlay be shown?");
testerOverlayEnabled.SettingChanged += delegate
{
if (!Debug.isDebugBuild && Object.op_Implicit((Object)(object)DebugCommandHandler.instance))
{
DebugCommandHandler.instance.debugOverlay = testerOverlayEnabled.Value;
}
};
try
{
harmony.PatchAll(typeof(TesterOverlayPatches));
}
catch (Exception ex7)
{
StaticLogger.LogError((object)("TesterOverlay Patch Failed: " + ex7));
}
mainMenuOverhaulEnabled = StaticConfig.Bind<bool>("Main Menu", "Improved Layout", false, "Reduces the number of clicks to access some parts of the main menu.");
if (Chainloader.PluginInfos.ContainsKey("nickklmao.menulib"))
{
try
{
harmony.PatchAll(typeof(MenuPageV2));
}
catch (Exception ex8)
{
StaticLogger.LogError((object)("MenuPageV2 Patch Failed: " + ex8));
}
}
else if (mainMenuOverhaulEnabled.Value)
{
StaticLogger.LogWarning((object)"The 'Improved Layout' of the main menu requires the MenuLib mod. Please install it if you wish to use that feature.");
}
StaticLogger.LogInfo((object)"Patches Loaded");
}
}
internal static class MyPluginInfo
{
public const string PLUGIN_GUID = "uk.1a3.lobbyimprovements";
public const string PLUGIN_NAME = "LobbyImprovements";
public const string PLUGIN_VERSION = "1.1.7";
}
}
namespace LobbyImprovements.Patches
{
[HarmonyPatch]
public class ChatCommands
{
[HarmonyPatch(typeof(DebugCommandHandler), "Start")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void DebugCommandHandler_Start()
{
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Expected O, but got Unknown
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
//IL_00eb: Expected O, but got Unknown
if (!Debug.isDebugBuild)
{
DebugCommandHandler.instance.debugOverlay = PluginLoader.testerOverlayEnabled.Value;
}
DebugCommandHandler.instance.Register(new ChatCommand("screenshot", "Screenshot all enemies, items, modules, or valuables in the current room.", (Action<bool, string[]>)delegate(bool isDebugConsole, string[] args)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)ObjectScreenshotTaker.instance))
{
new GameObject("ObjectScreenshotTaker")
{
hideFlags = (HideFlags)61
}.AddComponent<ObjectScreenshotTaker>();
}
switch (string.Join(' ', args).ToLower())
{
case "enemies":
if (!ObjectScreenshotTaker.instance.isTakingScreenshots)
{
((MonoBehaviour)ObjectScreenshotTaker.instance).StartCoroutine(ObjectScreenshotTaker.instance.TakeScreenshotsOfEnemies());
DebugCommandHandler.instance.CommandSuccessEffect();
return;
}
break;
case "items":
if (!ObjectScreenshotTaker.instance.isTakingScreenshots)
{
((MonoBehaviour)ObjectScreenshotTaker.instance).StartCoroutine(ObjectScreenshotTaker.instance.TakeScreenshotsOfItems());
DebugCommandHandler.instance.CommandSuccessEffect();
return;
}
break;
case "modules":
if (!ObjectScreenshotTaker.instance.isTakingScreenshots)
{
((MonoBehaviour)ObjectScreenshotTaker.instance).StartCoroutine(ObjectScreenshotTaker.instance.TakeScreenshotsOfModules());
DebugCommandHandler.instance.CommandSuccessEffect();
return;
}
break;
case "valuables":
if (!ObjectScreenshotTaker.instance.isTakingScreenshots)
{
((MonoBehaviour)ObjectScreenshotTaker.instance).StartCoroutine(ObjectScreenshotTaker.instance.TakeScreenshotsOfValuables());
DebugCommandHandler.instance.CommandSuccessEffect();
return;
}
break;
}
DebugCommandHandler.instance.CommandFailedEffect();
}, (Func<bool, string, string[], List<string>>)delegate(bool isDebugConsole, string partial, string[] args)
{
List<string> source = new List<string> { "enemies", "items", "modules", "valuables" };
return (args.Length > 1) ? new List<string>() : source.Where((string g) => args.Length == 0 || g.ToLower().StartsWith(args[0].ToLower())).ToList();
}, (Func<bool>)(() => SemiFunc.IsMasterClientOrSingleplayer() && SemiFunc.RunIsRecording()), true));
DebugCommandHandler.instance.Register(new ChatCommand("lobbymenu", "Return to the lobby menu. This may cause issues!", (Action<bool, string[]>)delegate
{
RunManager.instance.ChangeLevel(false, false, (ChangeLevelType)3);
Debug.Log((object)"Command Used: /level lobby menu");
DebugCommandHandler.instance.CommandSuccessEffect();
}, (Func<bool, string, string[], List<string>>)null, (Func<bool>)(() => SemiFunc.IsMasterClientOrSingleplayer() && DebugCommandHandler.instance.IsInGame()), false));
}
[HarmonyPatch(typeof(RunManager), "RestartScene")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static void RunManager_RestartScene(RunManager __instance)
{
if (__instance.restarting && !__instance.restartingDone && Object.op_Implicit((Object)(object)GameDirector.instance) && GameDirector.instance.PlayerList.All((PlayerAvatar p) => p.outroDone) && !__instance.lobbyJoin && !__instance.waitToChangeScene && SemiFunc.RunIsLobbyMenu())
{
NetworkManager.instance.DestroyAll();
}
}
[HarmonyPatch(typeof(SemiFunc), "DebugTester")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void SemiFunc_DebugTester(ref bool __result)
{
if (PluginLoader.debugConsole.Value && PluginLoader.testerCommands.Value)
{
__result = true;
}
}
[HarmonyPatch(typeof(DebugConsoleUI), "Start")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool DebugConsoleUI_Start(DebugConsoleUI __instance)
{
if (PluginLoader.debugConsole.Value && !SemiFunc.DebugTester() && !SemiFunc.DebugDev())
{
DebugConsoleUI.instance = __instance;
return false;
}
return true;
}
}
[HarmonyPatch]
public class FastStartup
{
[HarmonyPatch(typeof(MoonUI), "Check")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void MoonUI_Check(MoonUI __instance)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Invalid comparison between Unknown and I4
if (!PluginLoader.moonPhaseUIEnabled.Value && (int)__instance.state > 0)
{
__instance.skip = true;
__instance.SetState((State)8);
}
}
[HarmonyPatch(typeof(SplashScreen), "Start")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool SplashScreen_Start(SplashScreen __instance)
{
if (PluginLoader.splashScreenUIEnabled.Value)
{
return true;
}
__instance.StateSet((State)3);
return false;
}
}
[HarmonyPatch]
public class MenuPageLobbySP
{
[HarmonyPatch(typeof(DataDirector), "SaveDeleteCheck")]
[HarmonyPrefix]
[HarmonyPriority(800)]
private static bool DataDirector_SaveDeleteCheck()
{
return PluginLoader.saveDeleteEnabled.Value;
}
[HarmonyPatch(typeof(RunManager), "ChangeLevel")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static void RunManager_ChangeLevel_Prefix(RunManager __instance, bool _completedLevel, bool _levelFailed, ChangeLevelType _changeLevelType = 0)
{
if (PluginLoader.singleplayerLobbyMenu.Value && !SemiFunc.IsMultiplayer() && (SemiFunc.MenuLevel() || SemiFunc.IsMasterClientOrSingleplayer()) && !__instance.restarting && _levelFailed && (Object)(object)__instance.levelCurrent == (Object)(object)__instance.levelArena)
{
__instance.debugLevel = __instance.levelLobbyMenu;
PluginLoader.StaticLogger.LogInfo((object)"Setting debug level");
}
}
[HarmonyPatch(typeof(RunManager), "ChangeLevel")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void RunManager_ChangeLevel_Postfix(RunManager __instance, bool _completedLevel, bool _levelFailed, ChangeLevelType _changeLevelType = 0)
{
if (!SemiFunc.IsMultiplayer() && __instance.gameOver && (Object)(object)__instance.debugLevel == (Object)(object)__instance.levelLobbyMenu)
{
__instance.debugLevel = null;
PluginLoader.StaticLogger.LogInfo((object)"Resetting debug level");
}
}
[HarmonyPatch(typeof(SemiFunc), "MenuActionSingleplayerGame")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool SemiFunc_MenuActionSingleplayerGame(string saveFileName, List<string> saveFileBackups)
{
if (!PluginLoader.singleplayerLobbyMenu.Value)
{
return true;
}
RunManager.instance.ResetProgress();
GameManager.instance.SetConnectRandom(false);
if (saveFileName != null)
{
PluginLoader.StaticLogger.LogInfo((object)"Loading save");
SemiFunc.SaveFileLoad(saveFileName, saveFileBackups);
}
else
{
SemiFunc.SaveFileCreate();
}
RunManager.instance.ChangeLevel(true, false, (ChangeLevelType)3);
return false;
}
[HarmonyPatch(typeof(MenuPageLobby), "Awake")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageLobby_Awake(MenuPageLobby __instance)
{
if (SemiFunc.IsMultiplayer())
{
return true;
}
MenuPageLobby.instance = __instance;
__instance.menuPage = ((Component)__instance).GetComponent<MenuPage>();
TextMeshProUGUI roomNameText = __instance.roomNameText;
string cloudRegion = PhotonNetwork.CloudRegion;
Room currentRoom = PhotonNetwork.CurrentRoom;
((TMP_Text)roomNameText).text = cloudRegion + " " + ((currentRoom != null) ? currentRoom.Name : null);
((TMP_Text)__instance.chatPromptText).text = InputManager.instance.InputDisplayReplaceTags("Press [chat] to use commands", "<u><b>", "</b></u>");
return false;
}
[HarmonyPatch(typeof(MenuPageLobby), "Start")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageLobby_Start(MenuPageLobby __instance)
{
if (SemiFunc.IsMultiplayer())
{
return true;
}
((Component)__instance.inviteButton).gameObject.SetActive(false);
return false;
}
[HarmonyPatch(typeof(MenuPageLobby), "ButtonStart")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageLobby_ButtonStart(MenuPageLobby __instance)
{
if (SemiFunc.IsMultiplayer() || __instance.joiningPlayer)
{
return true;
}
SteamManager.instance.LockLobby();
DataDirector.instance.RunsPlayedAdd();
if (RunManager.instance.loadLevel == 0)
{
RunManager.instance.ChangeLevel(true, false, (ChangeLevelType)1);
}
else
{
RunManager.instance.ChangeLevel(true, false, (ChangeLevelType)5);
}
return false;
}
}
[HarmonyPatch]
public class MenuPageV2
{
[CompilerGenerated]
private static class <>O
{
public static UnityAction <0>__RefreshLobbies;
}
internal static void NewGame_Internal(MenuButton __instance)
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Expected O, but got Unknown
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Expected O, but got Unknown
REPOPopupPage repoPage = MenuAPI.CreateREPOPopupPage(__instance.menuButtonPopUp?.headerText, false, true, 1.5f, (Vector2?)Vector2.zero);
repoPage.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOButton("Private", (Action)delegate
{
PublicLobbySaves.publicSavesMenuOpen = false;
MenuPage parentPage3 = __instance.parentPage;
object obj2 = ((parentPage3 != null) ? ((Component)parentPage3).GetComponent<MenuPageSaves>() : null);
if (obj2 == null)
{
MenuPage parentPage4 = __instance.parentPage;
if (parentPage4 == null)
{
obj2 = null;
}
else
{
MenuPage pageUnderThisPage2 = parentPage4.pageUnderThisPage;
obj2 = ((pageUnderThisPage2 != null) ? ((Component)pageUnderThisPage2).GetComponent<MenuPageSaves>() : null);
}
}
if (obj2 != null)
{
((MenuPageSaves)obj2).OnNewGame();
}
}, scrollView, Vector2.zero)).rectTransform), 0f, 0f);
repoPage.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOButton("Public (Server List)", (Action)delegate
{
PublicLobbySaves.publicSavesMenuOpen = true;
MenuPage parentPage = __instance.parentPage;
object obj = ((parentPage != null) ? ((Component)parentPage).GetComponent<MenuPageSaves>() : null);
if (obj == null)
{
MenuPage parentPage2 = __instance.parentPage;
if (parentPage2 == null)
{
obj = null;
}
else
{
MenuPage pageUnderThisPage = parentPage2.pageUnderThisPage;
obj = ((pageUnderThisPage != null) ? ((Component)pageUnderThisPage).GetComponent<MenuPageSaves>() : null);
}
}
if (obj != null)
{
((MenuPageSaves)obj).OnNewGame();
}
}, scrollView, Vector2.zero)).rectTransform), 0f, 0f);
repoPage.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOButton("Back", (Action)delegate
{
repoPage.ClosePage(false);
}, scrollView, Vector2.zero)).rectTransform), 0f, 0f);
repoPage.OpenPage(false);
}
internal static void LoadGame_Internal(MenuButton __instance)
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Expected O, but got Unknown
//IL_006e: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Expected O, but got Unknown
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Expected O, but got Unknown
REPOPopupPage repoPage = MenuAPI.CreateREPOPopupPage(__instance.menuButtonPopUp?.headerText, false, true, 1.5f, (Vector2?)Vector2.zero);
repoPage.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOButton("Private", (Action)delegate
{
PublicLobbySaves.publicSavesMenuOpen = false;
MenuPage parentPage3 = __instance.parentPage;
object obj2 = ((parentPage3 != null) ? ((Component)parentPage3).GetComponent<MenuPageSaves>() : null);
if (obj2 == null)
{
MenuPage parentPage4 = __instance.parentPage;
if (parentPage4 == null)
{
obj2 = null;
}
else
{
MenuPage pageUnderThisPage2 = parentPage4.pageUnderThisPage;
obj2 = ((pageUnderThisPage2 != null) ? ((Component)pageUnderThisPage2).GetComponent<MenuPageSaves>() : null);
}
}
if (obj2 != null)
{
((MenuPageSaves)obj2).OnLoadGame();
}
}, scrollView, Vector2.zero)).rectTransform), 0f, 0f);
repoPage.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOButton("Public (Server List)", (Action)delegate
{
PublicLobbySaves.publicSavesMenuOpen = true;
MenuPage parentPage = __instance.parentPage;
object obj = ((parentPage != null) ? ((Component)parentPage).GetComponent<MenuPageSaves>() : null);
if (obj == null)
{
MenuPage parentPage2 = __instance.parentPage;
if (parentPage2 == null)
{
obj = null;
}
else
{
MenuPage pageUnderThisPage = parentPage2.pageUnderThisPage;
obj = ((pageUnderThisPage != null) ? ((Component)pageUnderThisPage).GetComponent<MenuPageSaves>() : null);
}
}
if (obj != null)
{
((MenuPageSaves)obj).OnLoadGame();
}
}, scrollView, Vector2.zero)).rectTransform), 0f, 0f);
repoPage.AddElementToScrollView((ScrollViewBuilderDelegate)((Transform scrollView) => ((REPOElement)MenuAPI.CreateREPOButton("Back", (Action)delegate
{
repoPage.ClosePage(false);
}, scrollView, Vector2.zero)).rectTransform), 0f, 0f);
repoPage.OpenPage(false);
}
[HarmonyPatch(typeof(MenuPageMain), "Start")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void MenuPageMain_Start(MenuPageMain __instance)
{
PluginLoader.mainMenuOverhaul = PluginLoader.mainMenuOverhaulEnabled.Value;
if (PluginLoader.mainMenuOverhaul)
{
Transform obj = ((Component)__instance.rectTransform).transform.Find("Menu Button - Private Game/ButtonText");
TextMeshProUGUI val = ((obj != null) ? ((Component)obj).GetComponent<TextMeshProUGUI>() : null);
if (Object.op_Implicit((Object)(object)val))
{
((TMP_Text)val).text = "Host Game";
}
Transform obj2 = ((Component)__instance.rectTransform).transform.Find("Menu Button - Public Game/ButtonText");
TextMeshProUGUI val2 = ((obj2 != null) ? ((Component)obj2).GetComponent<TextMeshProUGUI>() : null);
if (Object.op_Implicit((Object)(object)val2))
{
((TMP_Text)val2).text = "Join Game";
}
}
}
[HarmonyPatch(typeof(MenuPageMain), "ButtonEventHostGame")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageMain_ButtonEventHostGame()
{
if (!PluginLoader.mainMenuOverhaul)
{
return true;
}
SemiFunc.MainMenuSetMultiplayer();
MenuManager.instance.PageCloseAll();
MenuManager.instance.PageOpen((MenuPageIndex)11, false);
return false;
}
[HarmonyPatch(typeof(MenuPageMain), "ButtonEventPlayRandom")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageMain_ButtonEventPlayRandom()
{
if (!PluginLoader.mainMenuOverhaul)
{
return true;
}
MenuManager.instance.PageCloseAll();
MenuManager.instance.PageOpen((MenuPageIndex)14, false);
return false;
}
[HarmonyPatch(typeof(MenuManager), "PageOpen")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void MenuManager_PageOpen(MenuManager __instance, MenuPage __result, MenuPageIndex menuPageIndex, bool addedPageOnTop = false)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Invalid comparison between Unknown and I4
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Invalid comparison between Unknown and I4
//IL_007d: 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_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Invalid comparison between Unknown and I4
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
if (!PluginLoader.mainMenuOverhaul)
{
return;
}
if ((int)menuPageIndex != 11)
{
if ((int)menuPageIndex != 14)
{
if ((int)menuPageIndex == 16)
{
Transform obj = ((Component)__result).transform.Find("Header/Text (TMP)");
TextMeshProUGUI val = ((obj != null) ? ((Component)obj).GetComponent<TextMeshProUGUI>() : null);
if (Object.op_Implicit((Object)(object)val))
{
((TMP_Text)val).text = "Join Game";
}
AddRegionMenuButton(((Component)__result).transform, new Vector2(8f, 8f), (Type)1);
}
}
else
{
AddRegionMenuButton(((Component)__result).transform, new Vector2(8f, 8f), (Type)1);
}
}
else if (SemiFunc.MainMenuIsMultiplayer())
{
AddRegionMenuButton(((Component)__result).transform, new Vector2(520f, 325f), (Type)0);
}
}
private static void AddRegionMenuButton(Transform parent, Vector2 localPosition, Type pageType)
{
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: 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)
DataDirector.instance.networkRegion = PlayerPrefs.GetString("PUNSelectedRegion", "");
ServerSettings.ResetBestRegionCodeInPreferences();
MenuAPI.CreateREPOButton(GetRegionDisplayName(DataDirector.instance.networkRegion), (Action)delegate
{
//IL_001d: 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)
MenuManager.instance.PageCloseAll();
((Component)MenuManager.instance.PageOpen((MenuPageIndex)13, false)).GetComponent<MenuPageRegions>().type = pageType;
}, parent, localPosition);
}
private static string GetRegionDisplayName(string regionCode)
{
return (regionCode?.ToUpper() ?? "") switch
{
"" => "Best Region",
"ASIA" => "Asia",
"AU" => "Australia",
"CAE" => "Canada East",
"CN" => "Chinese Mainland",
"EU" => "Europe",
"HK" => "Hong Kong",
"IN" => "India",
"JP" => "Japan",
"ZA" => "South Africa",
"SA" => "South America",
"KR" => "South Korea",
"TR" => "Turkey",
"UAE" => "United Arab Emirates",
"US" => "USA East",
"USW" => "USA West",
"USSC" => "USA South Central",
_ => regionCode?.ToUpper(),
};
}
private static void RefreshLobbies()
{
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
MenuPageServerList component = ((Component)MenuManager.instance.currentMenuPage).GetComponent<MenuPageServerList>();
if (!Object.op_Implicit((Object)(object)component) || !component.receivedList || component.searchInProgress)
{
return;
}
foreach (Transform item in component.serverElementParent)
{
Object.Destroy((Object)(object)((Component)item).gameObject);
}
component.loadingGraphics.Reset();
component.roomListSearched.Clear();
component.receivedList = false;
component.pageMax = 0;
component.buttonNext.HideSetInstant();
component.buttonPrevious.HideSetInstant();
((MonoBehaviour)component).StartCoroutine(component.GetServerList());
}
[HarmonyPatch(typeof(MenuPageServerList), "Start")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void MenuPageServerList_Start(MenuPageServerList __instance)
{
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Expected O, but got Unknown
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Expected O, but got Unknown
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Expected O, but got Unknown
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Expected O, but got Unknown
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Expected O, but got Unknown
if (!PluginLoader.mainMenuOverhaul)
{
return;
}
Transform val = ((Component)__instance).transform.Find("Panel/Create New");
object obj;
if (val == null)
{
obj = null;
}
else
{
Transform obj2 = val.Find("Menu Button - CREATE NEW");
obj = ((obj2 != null) ? ((Component)obj2).GetComponent<MenuButton>() : null);
}
MenuButton val2 = (MenuButton)obj;
if (Object.op_Implicit((Object)(object)val2))
{
((TMP_Text)val2.buttonText).text = "Refresh";
val2.button.onClick = new ButtonClickedEvent();
ButtonClickedEvent onClick = val2.button.onClick;
object obj3 = <>O.<0>__RefreshLobbies;
if (obj3 == null)
{
UnityAction val3 = RefreshLobbies;
<>O.<0>__RefreshLobbies = val3;
obj3 = (object)val3;
}
((UnityEvent)onClick).AddListener((UnityAction)obj3);
GameObject obj4 = Object.Instantiate<GameObject>(((Component)val).gameObject, val.parent);
((Object)obj4).name = "Random Server";
obj4.transform.localPosition = Vector2.op_Implicit(new Vector2(0f, val.localPosition.y));
MenuButton componentInChildren = obj4.GetComponentInChildren<MenuButton>();
((TMP_Text)componentInChildren.buttonText).text = "Random";
componentInChildren.button.onClick = new ButtonClickedEvent();
componentInChildren.menuButtonPopUp = ((Component)componentInChildren).gameObject.AddComponent<MenuButtonPopUp>();
componentInChildren.menuButtonPopUp.headerText = "Join Server";
componentInChildren.menuButtonPopUp.bodyText = "Are you sure you want to join a random server?";
componentInChildren.menuButtonPopUp.option1Event = new UnityEvent();
componentInChildren.menuButtonPopUp.option1Event.AddListener(new UnityAction(__instance.ButtonCreateNew));
}
}
[HarmonyPatch(typeof(MenuPageServerList), "OnDestroy")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageServerList_OnDestroy()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Invalid comparison between Unknown and I4
if (Object.op_Implicit((Object)(object)MenuManager.instance))
{
return (int)MenuManager.instance.currentMenuPageIndex != 13;
}
return true;
}
[HarmonyPatch(typeof(MenuPageServerList), "ButtonCreateNew")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageServerList_ButtonCreateNew()
{
if (!PluginLoader.mainMenuOverhaul)
{
return true;
}
RunManager.instance.ResetProgress();
StatsManager.instance.saveFileCurrent = "";
GameManager.instance.SetConnectRandom(true);
GameManager.instance.localTest = false;
RunManager.instance.ChangeLevel(true, false, (ChangeLevelType)3);
RunManager.instance.lobbyJoin = true;
return false;
}
[HarmonyPatch(typeof(MenuPageServerList), "ExitPage")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageServerList_ExitPage()
{
if (!PluginLoader.mainMenuOverhaul)
{
return true;
}
MenuManager.instance.PageCloseAll();
MenuManager.instance.PageOpen((MenuPageIndex)0, false);
return false;
}
[HarmonyPatch(typeof(MenuPagePublicGameChoice), "ExitPage")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPagePublicGameChoice_ExitPage()
{
if (!PluginLoader.mainMenuOverhaul)
{
return true;
}
MenuManager.instance.PageCloseAll();
MenuManager.instance.PageOpen((MenuPageIndex)0, false);
return false;
}
[HarmonyPatch(typeof(MenuPageRegions), "PickRegion")]
[HarmonyPrefix]
[HarmonyWrapSafe]
[HarmonyPriority(800)]
private static bool MenuPageRegions_PickRegion(MenuPageRegions __instance, string _region)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
PlayerPrefs.SetString("PUNSelectedRegion", _region);
PlayerPrefs.Save();
if ((int)__instance.type != 0)
{
DataDirector.instance.networkRegion = _region;
MenuManager.instance.PageCloseAll();
MenuManager.instance.PageOpen((MenuPageIndex)14, false);
return false;
}
return true;
}
[HarmonyPatch(typeof(MenuPageRegions), "ExitPage")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageRegions_ExitPage(MenuPageRegions __instance)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Invalid comparison between Unknown and I4
if (!PluginLoader.mainMenuOverhaul)
{
return true;
}
MenuManager.instance.PageCloseAll();
MenuManager.instance.PageOpen((MenuPageIndex)(((int)__instance.type == 1) ? 14 : 11), false);
return false;
}
[HarmonyPatch(typeof(MenuPageRegions), "OnDestroy")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageRegions_OnDestroy()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Invalid comparison between Unknown and I4
if (Object.op_Implicit((Object)(object)MenuManager.instance))
{
return (int)MenuManager.instance.currentMenuPageIndex != 14;
}
return true;
}
}
[HarmonyPatch]
public class PlayerNamePrefix_SteamManager
{
[CompilerGenerated]
private sealed class <DelayedUpdatePauseMenuSliders>d__13 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public MenuPageEsc __instance;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <DelayedUpdatePauseMenuSliders>d__13(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = null;
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
foreach (KeyValuePair<PlayerAvatar, MenuSliderPlayerMicGain> playerMicGainSlider in __instance.playerMicGainSliders)
{
PlayerAvatar key = playerMicGainSlider.Key;
TextMeshProUGUI elementNameText = playerMicGainSlider.Value.menuSlider.elementNameText;
string prefixStringForPlayer = PlayerNamePrefix_SemiFunc.GetPrefixStringForPlayer(key);
if (!string.IsNullOrWhiteSpace(prefixStringForPlayer))
{
((TMP_Text)elementNameText).richText = true;
((TMP_Text)elementNameText).text = prefixStringForPlayer;
}
else
{
((TMP_Text)elementNameText).richText = false;
((TMP_Text)elementNameText).text = key.playerName;
}
}
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 <GetPlayerNamePrefixes>d__4 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public string[] steamIds;
public string logType;
private string <localSteamId>5__2;
private bool <includesLocalPlayer>5__3;
private UnityWebRequest <www>5__4;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <GetPlayerNamePrefixes>d__4(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<localSteamId>5__2 = null;
<www>5__4 = null;
<>1__state = -2;
}
private bool MoveNext()
{
//IL_02fd: Expected O, but got Unknown
//IL_0127: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: Invalid comparison between Unknown and I4
//IL_037c: Unknown result type (might be due to invalid IL or missing references)
//IL_0386: Expected O, but got Unknown
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: Unknown result type (might be due to invalid IL or missing references)
switch (<>1__state)
{
default:
return false;
case 0:
{
<>1__state = -1;
steamIds = (from x in steamIds
where Regex.IsMatch(x, "^76[0-9]{15}$")
orderby x
select x).ToArray();
if (steamIds.Length == 0)
{
return false;
}
SteamId steamId = SteamClient.SteamId;
<localSteamId>5__2 = ((object)(SteamId)(ref steamId)).ToString();
<includesLocalPlayer>5__3 = steamIds.Contains(<localSteamId>5__2);
string text2 = playerPrefixUrl + "?" + string.Join("&", steamIds.Select((string id) => "id=" + id));
<www>5__4 = UnityWebRequest.Get(text2);
<>2__current = <www>5__4.SendWebRequest();
<>1__state = 1;
return true;
}
case 1:
{
<>1__state = -1;
AcceptableValueList<string> val = null;
if ((int)<www>5__4.result == 1)
{
try
{
Dictionary<string, List<string>> dictionary = JsonConvert.DeserializeObject<Dictionary<string, List<string>>>(<www>5__4.downloadHandler.text);
string[] array = steamIds;
foreach (string text in array)
{
List<string> value2;
if (text == <localSteamId>5__2)
{
if (dictionary.TryGetValue(text, out var value))
{
localPrefixData = value;
PluginLoader.StaticLogger.LogDebug((object)string.Format("[GetPlayerNamePrefixes | {0}] {1} has {2} prefixes: {3}", logType, text, value.Count, string.Join(", ", value)));
}
else
{
localPrefixData.Clear();
PluginLoader.StaticLogger.LogDebug((object)("[GetPlayerNamePrefixes | " + logType + "] " + text + " has 0 prefixes"));
}
}
else if (dictionary.TryGetValue(text, out value2))
{
playerPrefixData[text] = value2;
PluginLoader.StaticLogger.LogDebug((object)string.Format("[GetPlayerNamePrefixes | {0}] {1} has {2} prefixes: {3}", logType, text, value2.Count, string.Join(", ", value2)));
}
else
{
playerPrefixData.Remove(text);
PluginLoader.StaticLogger.LogDebug((object)("[GetPlayerNamePrefixes | " + logType + "] " + text + " has 0 prefixes"));
}
}
if (<includesLocalPlayer>5__3)
{
val = new AcceptableValueList<string>(localPrefixData.Prepend("none").ToArray());
}
}
catch (JsonException val2)
{
JsonException val3 = val2;
PluginLoader.StaticLogger.LogWarning((object)("[GetPlayerNamePrefixes | " + logType + "] Failed to parse prefixes: " + ((Exception)(object)val3).Message));
}
}
else
{
PluginLoader.StaticLogger.LogWarning((object)("[GetPlayerNamePrefixes | " + logType + "] Failed to fetch prefixes: " + <www>5__4.error));
}
if (<includesLocalPlayer>5__3)
{
fetchedLocalPlayer = true;
PluginLoader.playerNamePrefixSelected = PluginLoader.StaticConfig.Bind<string>("Name Prefix", "Selected", "none", new ConfigDescription("Which prefix would you like to use?", (AcceptableValueBase)(object)val, Array.Empty<object>()));
PluginLoader.playerNamePrefixSelected.SettingChanged += delegate
{
WorldSpaceUIParent_UpdatePlayerName(PlayerAvatar.instance);
if (GameManager.Multiplayer())
{
PlayerNamePrefix_SemiFunc.PhotonSetCustomProperty(PhotonNetwork.LocalPlayer, "playerNamePrefix", PluginLoader.playerNamePrefixSelected?.Value);
}
};
}
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 string playerPrefixUrl = "https://api.1a3.uk/srv1/repo/prefixes.json";
private static bool fetchedLocalPlayer;
public static List<string> localPrefixData = new List<string>();
public static Dictionary<string, List<string>> playerPrefixData = new Dictionary<string, List<string>>();
[IteratorStateMachine(typeof(<GetPlayerNamePrefixes>d__4))]
private static IEnumerator GetPlayerNamePrefixes(string[] steamIds, string logType)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <GetPlayerNamePrefixes>d__4(0)
{
steamIds = steamIds,
logType = logType
};
}
public static void WorldSpaceUIParent_UpdatePlayerName(PlayerAvatar _player)
{
if (Object.op_Implicit((Object)(object)_player?.worldSpaceUIPlayerName))
{
string prefixStringForPlayer = PlayerNamePrefix_SemiFunc.GetPrefixStringForPlayer(_player);
if (!string.IsNullOrWhiteSpace(prefixStringForPlayer))
{
((TMP_Text)_player.worldSpaceUIPlayerName.text).richText = true;
((TMP_Text)_player.worldSpaceUIPlayerName.text).text = prefixStringForPlayer;
}
else
{
((TMP_Text)_player.worldSpaceUIPlayerName.text).richText = false;
((TMP_Text)_player.worldSpaceUIPlayerName.text).text = _player.playerName;
}
}
}
[HarmonyPatch(typeof(SteamManager), "Awake")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void SteamManager_Awake(SteamManager __instance)
{
//IL_0017: 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)
if (SteamClient.IsValid && !fetchedLocalPlayer)
{
string[] array = new string[1];
SteamId steamId = SteamClient.SteamId;
array[0] = ((object)(SteamId)(ref steamId)).ToString();
((MonoBehaviour)__instance).StartCoroutine(GetPlayerNamePrefixes(array, "SteamManager_Awake"));
}
}
[HarmonyPatch(typeof(SteamManager), "OnLobbyEntered")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void SteamManager_OnLobbyEntered(SteamManager __instance, Lobby _lobby)
{
string[] array = ((Lobby)(ref _lobby)).Members.Select((Friend x) => ((object)(SteamId)(ref x.Id)).ToString()).Where(delegate(string x)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
SteamId steamId = SteamClient.SteamId;
return x != ((object)(SteamId)(ref steamId)).ToString();
}).ToArray();
if (array.Length != 0)
{
((MonoBehaviour)__instance).StartCoroutine(GetPlayerNamePrefixes(array, "SteamManager_OnLobbyEntered"));
}
}
[HarmonyPatch(typeof(SteamManager), "OnLobbyMemberJoined")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void SteamManager_OnLobbyMemberJoined(SteamManager __instance, Lobby _lobby, Friend _friend)
{
((MonoBehaviour)__instance).StartCoroutine(GetPlayerNamePrefixes(new string[1] { ((object)(SteamId)(ref _friend.Id)).ToString() }, "SteamManager_OnLobbyMemberJoined"));
}
[HarmonyPatch(typeof(SteamManager), "OnLobbyMemberLeft")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void SteamManager_OnLobbyMemberLeft(Lobby _lobby, Friend _friend)
{
//IL_0028: 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)
if (playerPrefixData.ContainsKey(((object)(SteamId)(ref _friend.Id)).ToString()))
{
PluginLoader.StaticLogger.LogDebug((object)$"[playerPrefixData | SteamManager_OnLobbyMemberLeft] Removing 1 player ({_friend.Id})");
playerPrefixData.Remove(((object)(SteamId)(ref _friend.Id)).ToString());
}
}
[HarmonyPatch(typeof(SteamManager), "LeaveLobby")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void SteamManager_LeaveLobby()
{
if (playerPrefixData.Count > 0)
{
PluginLoader.StaticLogger.LogDebug((object)$"[playerPrefixData | SteamManager_LeaveLobby] Removing {playerPrefixData.Count} players");
playerPrefixData.Clear();
}
}
[HarmonyPatch(typeof(PlayerAvatar), "Awake")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void PlayerAvatar_Awake(PlayerAvatar __instance)
{
if (SemiFunc.IsMultiplayer() && __instance.isLocal)
{
PlayerNamePrefix_SemiFunc.PhotonSetCustomProperty(PhotonNetwork.LocalPlayer, "playerNamePrefix", PluginLoader.playerNamePrefixSelected?.Value);
}
}
[HarmonyPatch(typeof(MenuPageLobby), "Update")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void MenuPageLobby_Update(MenuPageLobby __instance)
{
foreach (GameObject listObject in __instance.listObjects)
{
MenuPlayerListed component = listObject.GetComponent<MenuPlayerListed>();
PlayerAvatar playerAvatar = component.playerAvatar;
if (Object.op_Implicit((Object)(object)playerAvatar))
{
TextMeshProUGUI playerName = component.playerName;
string prefixStringForPlayer = PlayerNamePrefix_SemiFunc.GetPrefixStringForPlayer(playerAvatar);
if (!string.IsNullOrWhiteSpace(prefixStringForPlayer))
{
((TMP_Text)playerName).richText = true;
((TMP_Text)playerName).text = prefixStringForPlayer;
}
else
{
((TMP_Text)playerName).richText = false;
((TMP_Text)playerName).text = playerAvatar.playerName;
}
}
}
}
[IteratorStateMachine(typeof(<DelayedUpdatePauseMenuSliders>d__13))]
private static IEnumerator DelayedUpdatePauseMenuSliders(MenuPageEsc __instance)
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <DelayedUpdatePauseMenuSliders>d__13(0)
{
__instance = __instance
};
}
[HarmonyPatch(typeof(MenuPageEsc), "PlayerGainSlidersUpdate")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void MenuPageEsc_PlayerGainSlidersUpdate(MenuPageEsc __instance)
{
((MonoBehaviour)__instance).StartCoroutine(DelayedUpdatePauseMenuSliders(__instance));
}
[HarmonyPatch(typeof(WorldSpaceUIParent), "PlayerName")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void WorldSpaceUIParent_PlayerName(PlayerAvatar _player)
{
WorldSpaceUIParent_UpdatePlayerName(_player);
}
[HarmonyPatch(typeof(MonoBehaviourPunCallbacks), "OnPlayerPropertiesUpdate")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void OnPlayerPropertiesUpdate(Player targetPlayer, Hashtable changedProps)
{
if (!((Dictionary<object, object>)(object)changedProps).ContainsKey((object)"playerNamePrefix"))
{
return;
}
foreach (PlayerAvatar player in GameDirector.instance.PlayerList)
{
if (player.photonView.Owner == targetPlayer)
{
WorldSpaceUIParent_UpdatePlayerName(player);
break;
}
}
}
}
public class PlayerNamePrefix_SemiFunc
{
public static List<string> GetPrefixDataForSteamId(string steamId)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
SteamId steamId2 = SteamClient.SteamId;
if (steamId == ((object)(SteamId)(ref steamId2)).ToString())
{
return PlayerNamePrefix_SteamManager.localPrefixData;
}
if (PlayerNamePrefix_SteamManager.playerPrefixData.TryGetValue(steamId, out var value))
{
return value;
}
return new List<string>();
}
public static string GetPrefixStringForPlayer(PlayerAvatar playerAvatar)
{
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)playerAvatar))
{
return null;
}
string value = "";
string value2 = "";
string text = null;
if (playerAvatar.isLocal)
{
text = PluginLoader.playerNamePrefixSelected?.Value;
}
else if (((Dictionary<object, object>)(object)playerAvatar.photonView.Owner.CustomProperties).ContainsKey((object)"playerNamePrefix"))
{
text = (string)playerAvatar.photonView.Owner.CustomProperties[(object)"playerNamePrefix"];
}
List<string> prefixDataForSteamId = GetPrefixDataForSteamId(playerAvatar.steamID);
SteamId steamId;
if (string.IsNullOrWhiteSpace(text) || !PluginLoader.namePrefixMap.TryGetValue(text, out value))
{
List<string> modDevSteamIDs = PluginLoader.modDevSteamIDs;
steamId = SteamClient.SteamId;
if (modDevSteamIDs.Contains(((object)(SteamId)(ref steamId)).ToString()) && prefixDataForSteamId.Count > 0 && PluginLoader.namePrefixMap.TryGetValue(prefixDataForSteamId.First(), out value))
{
value += "<color=#7289da>[!]</color> ";
}
}
if (string.IsNullOrWhiteSpace(text) || !PluginLoader.nameSuffixMap.TryGetValue(text, out value2))
{
List<string> modDevSteamIDs2 = PluginLoader.modDevSteamIDs;
steamId = SteamClient.SteamId;
if (modDevSteamIDs2.Contains(((object)(SteamId)(ref steamId)).ToString()) && prefixDataForSteamId.Count > 0 && PluginLoader.nameSuffixMap.TryGetValue(prefixDataForSteamId.First(), out value2))
{
value2 += " <color=#7289da>[!]</color>";
}
}
if (!string.IsNullOrWhiteSpace(value) || !string.IsNullOrWhiteSpace(value2))
{
return value + Regex.Replace(playerAvatar.playerName ?? "", "<.*?>", string.Empty) + value2;
}
return null;
}
public static void PhotonSetCustomProperty(Player photonPlayer, object key, object value)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
Hashtable customProperties = PhotonNetwork.LocalPlayer.CustomProperties;
Hashtable val = new Hashtable();
DictionaryEntryEnumerator enumerator = customProperties.GetEnumerator();
try
{
while (((DictionaryEntryEnumerator)(ref enumerator)).MoveNext())
{
DictionaryEntry current = ((DictionaryEntryEnumerator)(ref enumerator)).Current;
val[current.Key] = current.Value;
}
}
finally
{
((IDisposable)(DictionaryEntryEnumerator)(ref enumerator)).Dispose();
}
val[key] = value;
photonPlayer.SetCustomProperties(val, (Hashtable)null, (WebFlags)null);
}
}
[HarmonyPatch]
public class PublicLobbySaves
{
internal static bool publicSavesMenuOpen;
private static string currentSaveFileName;
private static List<string> currentSaveFileBackups;
private static bool connectRandomCached;
[HarmonyPatch(typeof(MenuPageServerList), "ButtonCreateNew")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageServerList_ButtonCreateNew(MenuPageServerList __instance)
{
if (!PluginLoader.savePublicEnabled.Value || PluginLoader.mainMenuOverhaul)
{
return true;
}
SemiFunc.MainMenuSetMultiplayer();
publicSavesMenuOpen = true;
MenuManager.instance.PageCloseAll();
MenuManager.instance.PageOpen((MenuPageIndex)11, false);
return false;
}
[HarmonyPatch(typeof(MenuPageSaves), "Start")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void MenuPageSaves_Start(MenuPageSaves __instance)
{
if (SemiFunc.MainMenuIsMultiplayer() && !PluginLoader.mainMenuOverhaul)
{
((TMP_Text)__instance.gameModeHeader).text = (publicSavesMenuOpen ? "Public Multiplayer" : "Private Multiplayer");
}
}
[MethodImpl(MethodImplOptions.NoInlining)]
[HarmonyPatch(typeof(MenuButton), "OnSelect")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuButton_OnSelect(MenuButton __instance)
{
if (__instance.menuButtonPopUp?.headerText == "Start a new game?" && __instance.menuButtonPopUp?.bodyText == "Do you want to start a game?")
{
if (PluginLoader.mainMenuOverhaul && SemiFunc.MainMenuIsMultiplayer())
{
MenuPageV2.NewGame_Internal(__instance);
return false;
}
if (publicSavesMenuOpen)
{
MenuPage parentPage = __instance.parentPage;
MenuPageSaves obj = ((parentPage != null) ? ((Component)parentPage).GetComponent<MenuPageSaves>() : null);
if (obj != null)
{
obj.OnNewGame();
}
return false;
}
}
if (__instance.menuButtonPopUp?.headerText == "Load save?" && __instance.menuButtonPopUp?.bodyText == "Load this save file?")
{
if (PluginLoader.mainMenuOverhaul && SemiFunc.MainMenuIsMultiplayer())
{
MenuPageV2.LoadGame_Internal(__instance);
return false;
}
if (publicSavesMenuOpen)
{
MenuPage parentPage2 = __instance.parentPage;
MenuPageSaves obj2 = ((parentPage2 != null) ? ((Component)parentPage2).GetComponent<MenuPageSaves>() : null);
if (obj2 != null)
{
obj2.OnLoadGame();
}
return false;
}
}
return true;
}
[HarmonyPatch(typeof(MenuPageSaves), "OnNewGame")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageSaves_OnNewGame(MenuPageSaves __instance)
{
currentSaveFileName = null;
currentSaveFileBackups = null;
if (!publicSavesMenuOpen || __instance.saveFiles.Count >= 10)
{
return true;
}
MenuPage currentMenuPage = MenuManager.instance.currentMenuPage;
MenuPageServerListCreateNew component = ((Component)MenuManager.instance.PageOpenOnTop((MenuPageIndex)15)).GetComponent<MenuPageServerListCreateNew>();
component.menuPageParent = currentMenuPage;
component.menuTextInput.textCurrent = SteamClient.Name + "'s Lobby";
return false;
}
[HarmonyPatch(typeof(MenuPageSaves), "OnLoadGame")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageSaves_OnLoadGame(MenuPageSaves __instance)
{
if (!publicSavesMenuOpen)
{
currentSaveFileName = null;
currentSaveFileBackups = null;
return true;
}
currentSaveFileName = __instance.currentSaveFileName;
currentSaveFileBackups = __instance.currentSaveFileBackups;
MenuPage currentMenuPage = MenuManager.instance.currentMenuPage;
MenuPageServerListCreateNew component = ((Component)MenuManager.instance.PageOpenOnTop((MenuPageIndex)15)).GetComponent<MenuPageServerListCreateNew>();
component.menuPageParent = currentMenuPage;
component.menuTextInput.textCurrent = SteamClient.Name + "'s Lobby";
return false;
}
[HarmonyPatch(typeof(MenuPageServerListCreateNew), "ExitPage")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageServerListCreateNew_ExitPage(MenuPageServerListCreateNew __instance)
{
if (!publicSavesMenuOpen && !PluginLoader.mainMenuOverhaul)
{
return true;
}
MenuManager.instance.PageCloseAll();
MenuManager.instance.PageOpen((MenuPageIndex)11, false);
return false;
}
[HarmonyPatch(typeof(MenuPageSaves), "OnGoBack")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageSaves_OnGoBack(MenuPageSaves __instance)
{
if (!publicSavesMenuOpen)
{
return true;
}
publicSavesMenuOpen = false;
MenuManager.instance.PageCloseAll();
MenuManager.instance.PageOpen((MenuPageIndex)14, false);
return false;
}
[HarmonyPatch(typeof(GameManager), "SetConnectRandom")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void GameManager_SetConnectRandom(bool _connectRandom)
{
connectRandomCached = GameManager.instance.connectRandom;
}
[HarmonyPatch(typeof(SemiFunc), "SaveFileCreate")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool SemiFunc_SaveFileCreate(NetworkConnect __instance)
{
if (!connectRandomCached)
{
return true;
}
if (string.IsNullOrWhiteSpace(currentSaveFileName))
{
if (!string.IsNullOrWhiteSpace(DataDirector.instance.networkServerName))
{
StatsManager.instance.teamName = DataDirector.instance.networkServerName;
}
return true;
}
PluginLoader.StaticLogger.LogInfo((object)("[Public Lobby] Loading Save File: " + currentSaveFileName));
SemiFunc.SaveFileLoad(currentSaveFileName, currentSaveFileBackups);
return false;
}
[HarmonyPatch(typeof(SemiFunc), "SaveFileSave")]
[HarmonyPostfix]
[HarmonyWrapSafe]
private static void SemiFunc_SaveFileSave()
{
if (PluginLoader.savePublicEnabled.Value && GameManager.instance.connectRandom)
{
StatsManager.instance.SaveFileSave();
}
}
[HarmonyPatch(typeof(DataDirector), "SaveDeleteCheck")]
[HarmonyPrefix]
[HarmonyPriority(800)]
[HarmonyWrapSafe]
private static void DataDirector_SaveDeleteCheck_Prefix()
{
if (PluginLoader.savePublicEnabled.Value && connectRandomCached)
{
GameManager.instance.connectRandom = false;
}
}
[HarmonyPatch(typeof(DataDirector), "SaveDeleteCheck")]
[HarmonyPostfix]
[HarmonyPriority(0)]
[HarmonyWrapSafe]
private static void DataDirector_SaveDeleteCheck_Postfix()
{
if (connectRandomCached)
{
GameManager.instance.connectRandom = true;
}
}
}
[HarmonyPatch]
public class ServerListSearch
{
[HarmonyPatch(typeof(MenuPageServerListSearch), "Update")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static void MenuPageServerListSearch_Update(MenuPageServerListSearch __instance)
{
if (Input.GetKey((KeyCode)306) && Input.GetKeyDown((KeyCode)118))
{
string systemCopyBuffer = GUIUtility.systemCopyBuffer;
Match match = Regex.Match(systemCopyBuffer, "steam://joinlobby/\\d+/(\\d+)/\\d+");
if (match.Success)
{
MenuTextInput menuTextInput = __instance.menuTextInput;
menuTextInput.textCurrent += match.Groups[1].Value;
}
else
{
MenuTextInput menuTextInput2 = __instance.menuTextInput;
menuTextInput2.textCurrent += systemCopyBuffer;
}
}
}
[HarmonyPatch(typeof(MenuPageServerList), "SetSearch")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool MenuPageServerList_SetSearch(string _searchString)
{
//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_005e: Unknown result type (might be due to invalid IL or missing references)
if (!string.IsNullOrEmpty(_searchString) && Regex.IsMatch(_searchString, "^[0-9]{17,19}$") && ulong.TryParse(_searchString, out var result))
{
if (SteamApps.BuildId <= 18995935)
{
MenuManager instance = MenuManager.instance;
if (instance != null)
{
instance.PageCloseAll();
}
MenuManager instance2 = MenuManager.instance;
if (instance2 != null)
{
instance2.PageOpen((MenuPageIndex)0, false);
}
}
SteamManager.instance.OnGameLobbyJoinRequested(new Lobby(SteamId.op_Implicit(result)), SteamClient.SteamId);
return false;
}
return true;
}
}
[HarmonyPatch]
public class TesterOverlayPatches
{
[HarmonyPatch(typeof(DebugTesterUI), "Start")]
[HarmonyPrefix]
[HarmonyWrapSafe]
private static bool DebugTesterUI_Start(DebugTesterUI __instance)
{
if (!Debug.isDebugBuild)
{
return SemiFunc.DebugDev();
}
return true;
}
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}