using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using Microsoft.CodeAnalysis;
using On;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("assembly_valheim")]
[assembly: AssemblyCompany("ImageSigns")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyDescription("My first plugin")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("ImageSigns")]
[assembly: AssemblyTitle("ImageSigns")]
[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 ImageSigns
{
[BepInPlugin("ImageSigns", "ImageSigns", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
public static Dictionary<string, Sprite> spriteMap = new Dictionary<string, Sprite>();
private static Dictionary<Sign, string> textMap = new Dictionary<Sign, string>();
private void Awake()
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Expected O, but got Unknown
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Expected O, but got Unknown
((BaseUnityPlugin)this).Logger.LogInfo((object)"Plugin ImageSigns is loaded!");
Sign.UpdateText += new hook_UpdateText(OnUpdateTextField);
Sign.Awake += new hook_Awake(UppedCharacterLimit);
}
private void UppedCharacterLimit(orig_Awake orig, Sign self)
{
textMap[self] = "_";
self.m_characterLimit = 1000;
orig.Invoke(self);
}
private void OnUpdateTextField(orig_UpdateText orig, Sign self)
{
orig.Invoke(self);
if (!textMap.ContainsKey(self))
{
textMap.Add(self, self.m_currentText);
}
string text = textMap[self];
if (text != self.m_currentText)
{
Uri uRLFromChat = GetURLFromChat(self.m_currentText);
if (uRLFromChat != null)
{
((MonoBehaviour)this).StartCoroutine(HandleTextDisplay(uRLFromChat, self));
((Behaviour)self.m_textWidget).enabled = false;
}
else
{
((Behaviour)self.m_textWidget).enabled = true;
Transform val = ((TMP_Text)self.m_textWidget).transform.parent.Find("SpriteWidget");
if (Object.op_Implicit((Object)(object)val))
{
((Component)val).gameObject.SetActive(false);
}
}
}
textMap[self] = self.m_currentText;
}
private IEnumerator HandleTextDisplay(Uri uri, Sign sign)
{
if (spriteMap.ContainsKey(uri.AbsoluteUri))
{
Debug.Log((object)"Sprite map contained our image already, using that instead.");
yield return SetupText(spriteMap[uri.AbsoluteUri], sign);
}
else
{
UnityWebRequest www = UnityWebRequestTexture.GetTexture(uri);
Debug.Log((object)("Making WWW req for: " + uri.AbsolutePath));
yield return www.SendWebRequest();
_ = www.result;
if (true)
{
Debug.Log((object)"WWW result was not null, setting up sprite");
Texture2D tex = DownloadHandlerTexture.GetContent(www);
Sprite sprite = Sprite.Create(tex, new Rect(0f, 0f, (float)((Texture)tex).width, (float)((Texture)tex).height), new Vector2(0.5f, 0.5f), 100f);
spriteMap[uri.AbsolutePath] = sprite;
yield return SetupText(sprite, sign);
}
}
yield return null;
}
private IEnumerator SetupText(Sprite sprite, Sign sign)
{
Transform transform = ((TMP_Text)sign.m_textWidget).transform.parent.Find("SpriteWidget");
if (!Object.op_Implicit((Object)(object)transform))
{
GameObject widget = new GameObject("SpriteWidget");
widget.transform.parent = ((TMP_Text)sign.m_textWidget).transform.parent;
widget.AddComponent<SpriteRenderer>();
widget.transform.localPosition = Vector3.zero;
widget.transform.localRotation = Quaternion.Euler(0f, 0f, 0f);
widget.transform.localScale = new Vector3(0.1f, 0.1f, 0.1f);
transform = widget.transform;
}
((Component)transform).gameObject.SetActive(true);
SpriteRenderer renderer = ((Component)transform).GetComponent<SpriteRenderer>();
renderer.sprite = sprite;
yield return null;
}
private Uri GetURLFromChat(string text)
{
string[] array = text.Split(' ');
foreach (string uriString in array)
{
if (Uri.IsWellFormedUriString(uriString, UriKind.RelativeOrAbsolute) && CheckValidImageFormat(text))
{
Uri uri = new Uri(uriString);
if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)
{
return uri;
}
}
}
return null;
}
private bool CheckValidImageFormat(string text)
{
return text.Contains(".png") || text.Contains(".jpg");
}
}
public static class PluginInfo
{
public const string PLUGIN_GUID = "ImageSigns";
public const string PLUGIN_NAME = "ImageSigns";
public const string PLUGIN_VERSION = "1.0.0";
}
}
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}