using System;
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 BepInEx;
using BepInEx.Configuration;
using HarmonyLib;
using TMPro;
using UnityEngine;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("0.8.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyVersion("0.8.0.0")]
namespace CustomLoadingScreens;
[BepInPlugin("cjayride.CustomLoadingScreens", "Custom Loading Screens", "0.8.0")]
public class BepInExPlugin : BaseUnityPlugin
{
[HarmonyPatch(typeof(FejdStartup), "LoadMainScene")]
public static class LoadMainScene_Patch
{
public static void Prefix(FejdStartup __instance)
{
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
loadingSprite = GetRandomLoadingScreen();
if (differentSpawnScreen.Value)
{
loadingSprite2 = GetRandomLoadingScreen();
}
if (loadingTips.Any())
{
loadingTip = loadingTips[Random.Range(0, loadingTips.Length)];
if (differentSpawnTip.Value)
{
loadingTip2 = loadingTips[Random.Range(0, loadingTips.Length)];
}
}
Image val = Object.Instantiate<Image>(((Component)__instance.m_loading.transform.Find("Bkg")).GetComponent<Image>(), __instance.m_loading.transform);
if (!((Object)(object)val == (Object)null))
{
val.sprite = loadingSprite;
((Graphic)val).color = loadingColorMask.Value;
val.type = (Type)0;
val.preserveAspect = true;
}
}
}
[HarmonyPriority(800)]
[HarmonyPatch(typeof(ZNet), "RPC_ClientHandshake")]
public static class ZNet_RPC_ClientHandshake_Patch
{
public static bool Prefix(ZNet __instance, ZRpc rpc, bool needPassword)
{
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
if (!__instance.IsServer())
{
Image val = Object.Instantiate<Image>(((Component)((Component)Hud.instance).transform.Find("LoadingBlack").Find("Bkg")).GetComponent<Image>(), ((Component)((Component)Hud.instance).transform.Find("LoadingBlack")).transform);
if ((Object)(object)val == (Object)null)
{
return true;
}
val.sprite = loadingSprite;
((Graphic)val).color = loadingColorMask.Value;
val.type = (Type)0;
val.preserveAspect = true;
if (loadingTips.Any())
{
Object.Instantiate<Transform>(Hud.instance.m_loadingTip.transform.parent.Find("panel_separator"), ((Component)((Component)Hud.instance).transform.Find("LoadingBlack")).transform);
TMP_Text component = Object.Instantiate<GameObject>(((Component)Hud.instance.m_loadingTip).gameObject, ((Component)((Component)Hud.instance).transform.Find("LoadingBlack")).transform).GetComponent<TMP_Text>();
if ((Object)(object)component != (Object)null)
{
component.text = loadingTip;
((Graphic)component).color = tipTextColor.Value;
}
}
}
return true;
}
}
[HarmonyPatch(typeof(Hud), "UpdateBlackScreen")]
public static class UpdateBlackScreen_Patch
{
public static void Prefix(Hud __instance, bool ___m_haveSetupLoadScreen, ref bool __state)
{
__state = !___m_haveSetupLoadScreen;
}
public static void Postfix(Hud __instance, bool ___m_haveSetupLoadScreen, ref bool __state)
{
//IL_003c: 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)
if (__state && ___m_haveSetupLoadScreen)
{
__instance.m_loadingImage.sprite = (differentSpawnScreen.Value ? loadingSprite2 : loadingSprite);
((Graphic)__instance.m_loadingImage).color = spawnColorMask.Value;
if (loadingTips.Any())
{
__instance.m_loadingTip.text = (differentSpawnTip.Value ? loadingTip2 : loadingTip);
}
((Graphic)__instance.m_loadingTip).color = tipTextColor.Value;
if (removeVignette.Value)
{
((Component)__instance.m_loadingProgress.transform.Find("TopFade")).gameObject.SetActive(false);
((Component)__instance.m_loadingProgress.transform.Find("BottomFade")).gameObject.SetActive(false);
((Component)__instance.m_loadingProgress.transform.Find("text_darken")).gameObject.SetActive(false);
}
}
}
}
private static readonly bool isDebug = true;
private static BepInExPlugin context;
public static ConfigEntry<bool> modEnabled;
public static ConfigEntry<string> loadingText;
public static ConfigEntry<bool> differentSpawnScreen;
public static ConfigEntry<bool> differentSpawnTip;
public static ConfigEntry<bool> showTipsOnLoadingScreen;
public static ConfigEntry<bool> removeVignette;
public static ConfigEntry<Color> spawnColorMask;
public static ConfigEntry<Color> loadingColorMask;
public static ConfigEntry<Color> loadingTextColor;
public static ConfigEntry<Color> tipTextColor;
public static List<string> loadingScreens = new List<string>();
public static Dictionary<string, string> loadingScreens2 = new Dictionary<string, string>();
public static Dictionary<string, DateTime> fileWriteTimes = new Dictionary<string, DateTime>();
public static List<string> screensToLoad = new List<string>();
public static string[] loadingTips = new string[0];
public static Dictionary<string, Texture2D> cachedScreens = new Dictionary<string, Texture2D>();
private static Sprite loadingSprite;
private static Sprite loadingSprite2;
private static string loadingTip;
private static string loadingTip2;
public static ConfigEntry<string> imagePath;
public static ConfigEntry<string> tipsPath;
private void Awake()
{
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
context = this;
modEnabled = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enabled", true, "Enable this mod");
differentSpawnScreen = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DifferentSpawnScreen", true, "Use a different screen for the spawn part");
differentSpawnTip = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "DifferentSpawnTip", true, "Use a different tip for the spawn part");
spawnColorMask = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "SpawnColorMask", new Color(0.532f, 0.588f, 0.853f, 1f), "Change the color mask of the spawn screen (set last number to 0 to disable)");
loadingColorMask = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "LoadingColorMask", Color.white, "Change the color mask of the initial loading screen (set to white to disable)");
removeVignette = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "RemoveMask", true, "Remove dark edges for the spawn part");
loadingText = ((BaseUnityPlugin)this).Config.Bind<string>("General", "LoadingText", "Loading...", "Custom Loading... text");
loadingTextColor = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "LoadingTextColor", new Color(1f, 0.641f, 0f, 1f), "Custom Loading... text color");
tipTextColor = ((BaseUnityPlugin)this).Config.Bind<Color>("General", "TipTextColor", Color.white, "Custom tip text color");
imagePath = ((BaseUnityPlugin)this).Config.Bind<string>("General", "PathToImagesFolder", "plugins\\cjayride-CustomLoadingScreens\\CustomLoadingScreens", "Path to image files. Example: config\\CustomLoadingScreens or plugins\\cjayride-CustomLoadingScreens\\CustomLoadingScreens");
tipsPath = ((BaseUnityPlugin)this).Config.Bind<string>("General", "PathToTipsFolder", "plugins\\cjayride-CustomLoadingScreens\\CustomLoadingScreens", "Path to tips file. Example: config\\CustomLoadingScreens or plugins\\cjayride-CustomLoadingScreens\\CustomLoadingScreens");
if (modEnabled.Value)
{
LoadCustomLoadingScreens();
LoadTips();
Harmony.CreateAndPatchAll(Assembly.GetExecutingAssembly(), (string)null);
}
}
private void LoadTips()
{
string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string directoryName2 = Path.GetDirectoryName(directoryName);
string directoryName3 = Path.GetDirectoryName(directoryName2);
string path = Path.Combine(directoryName3, tipsPath.Value, "tips.txt");
if (!File.Exists(path))
{
File.Create(path);
}
else
{
loadingTips = File.ReadAllLines(path);
}
}
private static void LoadCustomLoadingScreens()
{
loadingScreens.Clear();
string directoryName = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
string directoryName2 = Path.GetDirectoryName(directoryName);
string directoryName3 = Path.GetDirectoryName(directoryName2);
string path = Path.Combine(directoryName3, imagePath.Value);
if (!Directory.Exists(path))
{
Directory.CreateDirectory(path);
return;
}
string[] files = Directory.GetFiles(path, "*.png", SearchOption.AllDirectories);
foreach (string item in files)
{
loadingScreens.Add(item);
}
}
private static Sprite GetRandomLoadingScreen()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Expected O, but got Unknown
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Unknown result type (might be due to invalid IL or missing references)
if (!loadingScreens.Any())
{
return null;
}
Texture2D val = new Texture2D(2, 2);
byte[] array = File.ReadAllBytes(loadingScreens[Random.Range(0, loadingScreens.Count)]);
ImageConversion.LoadImage(val, array);
return Sprite.Create(val, new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), Vector2.zero, 1f);
}
}