using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using Jotunn.Configs; using Jotunn.Entities; using Jotunn.Managers; using UnityEngine; using UnityEngine.Events; using UnityEngine.UI; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: AssemblyTitle("AichoGuardian")] [assembly: AssemblyDescription("")] [assembly: AssemblyConfiguration("")] [assembly: AssemblyCompany("")] [assembly: AssemblyProduct("AichoGuardian")] [assembly: AssemblyCopyright("Copyright © 2025")] [assembly: AssemblyTrademark("")] [assembly: ComVisible(false)] [assembly: Guid("D28110A9-E229-4700-AD4D-DCD37486A82B")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: TargetFramework(".NETFramework,Version=v4.8.1", FrameworkDisplayName = ".NET Framework 4.8.1")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("1.0.0.0")] [module: UnverifiableCode] namespace BoatLoanMod; [BepInPlugin("com.nazhi.boatloanmod", "Boat Loan Mod", "2.0.0")] [BepInDependency(/*Could not decode attribute arguments.*/)] public class BoatLoanPlugin : BaseUnityPlugin { public const string ModGuid = "com.nazhi.boatloanmod"; public const string ModName = "Boat Loan Mod"; public const string ModVersion = "2.0.0"; public static BoatLoanPlugin Instance; private Harmony _harmony; private LoanNpcPanel _panel; private GameObject _boatPrefab; private GameObject _jaroldPrefab; private ConfigEntry _boatLifetime; private ConfigEntry _waterSearchRadius; private bool _prefabsReady; public ManualLogSource Logger => ((BaseUnityPlugin)this).Logger; private void Awake() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Expected O, but got Unknown Instance = this; _harmony = new Harmony("com.nazhi.boatloanmod"); _harmony.PatchAll(); _boatLifetime = ((BaseUnityPlugin)this).Config.Bind("Barco", "BoatLifetime", 30f, "Segundos que dura el barco prestado antes de desaparecer."); _waterSearchRadius = ((BaseUnityPlugin)this).Config.Bind("Barco", "WaterSearchRadius", 60f, "Radio máximo (en metros) en el que se busca agua para spawnear el barco."); PrefabManager.OnVanillaPrefabsAvailable += RegisterJarold; GUIManager.OnCustomGUIAvailable += OnCustomGUIAvailable; Logger.LogInfo((object)"Boat Loan Mod v2.0.0 loaded"); } private void OnDestroy() { PrefabManager.OnVanillaPrefabsAvailable -= RegisterJarold; GUIManager.OnCustomGUIAvailable -= OnCustomGUIAvailable; Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } } private void RegisterJarold() { //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Expected O, but got Unknown //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Expected O, but got Unknown try { GameObject prefab = PrefabManager.Instance.GetPrefab("MLNPC_Male0"); if ((Object)(object)prefab == (Object)null) { Logger.LogError((object)"No se encontró MLNPC_Male0."); return; } _boatPrefab = PrefabManager.Instance.GetPrefab("Karve"); if ((Object)(object)_boatPrefab == (Object)null) { Logger.LogError((object)"No se encontró el prefab Karve."); } GameObject val = PrefabManager.Instance.CreateClonedPrefab("Jarold_BLM", prefab); Character component = val.GetComponent(); if ((Object)(object)component != (Object)null) { component.m_speed = 0f; component.m_walkSpeed = 0f; component.m_crouchSpeed = 0f; component.m_runSpeed = 0f; component.m_swimSpeed = 0f; component.m_turnSpeed = 0f; component.m_runTurnSpeed = 0f; component.m_flySlowSpeed = 0f; component.m_flyFastSpeed = 0f; component.m_flyTurnSpeed = 0f; component.m_acceleration = 0f; component.m_jumpForce = 0f; component.m_swimTurnSpeed = 0f; } BaseAI component2 = val.GetComponent(); if ((Object)(object)component2 != (Object)null) { ((Behaviour)component2).enabled = false; } MonsterAI component3 = val.GetComponent(); if ((Object)(object)component3 != (Object)null) { ((Behaviour)component3).enabled = false; } CustomCreature val2 = new CustomCreature(val, true, new CreatureConfig { Faction = (Faction)10 }); CreatureManager.Instance.AddCreature(val2); _jaroldPrefab = val; _prefabsReady = true; Logger.LogInfo((object)"Jarold_BLM registrado como CustomCreature estático."); } catch (Exception arg) { Logger.LogError((object)$"RegisterJarold: {arg}"); } finally { PrefabManager.OnVanillaPrefabsAvailable -= RegisterJarold; } } private void Update() { if (!((Object)(object)Player.m_localPlayer == (Object)null) && _panel != null && _panel.IsVisible && Input.GetKeyDown((KeyCode)27)) { _panel.HideAndResetCurrentNpc(); } } private void TrySpawnJarold() { //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: 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) if ((Object)(object)_jaroldPrefab == (Object)null) { ((Character)Player.m_localPlayer).Message((MessageType)2, "Prefab de Jarold no disponible aún.", 0, (Sprite)null); return; } if (JaroldExistsInWorld()) { ((Character)Player.m_localPlayer).Message((MessageType)2, "Jarold ya está en el mundo.", 0, (Sprite)null); return; } Vector3 position = ((Component)Player.m_localPlayer).transform.position; Vector3 forward = ((Component)Player.m_localPlayer).transform.forward; Vector3 val = position + forward * 3f; if ((Object)(object)ZoneSystem.instance != (Object)null) { val.y = ZoneSystem.instance.GetGroundHeight(val) + 0.1f; } Quaternion val2 = Quaternion.LookRotation(-forward); ZNetScene.instance.SpawnObject(val, val2, _jaroldPrefab); ((Character)Player.m_localPlayer).Message((MessageType)2, "Jarold El Mercante ha aparecido.", 0, (Sprite)null); Logger.LogInfo((object)$"Jarold spawneado en {val}"); } private void TryDespawnJarold() { _panel?.HideAndResetCurrentNpc(); int num = 0; foreach (Character item in Character.GetAllCharacters().ToList()) { if ((Object)(object)item == (Object)null) { continue; } ZNetView component = ((Component)item).GetComponent(); if (!((Object)(object)component == (Object)null) && component.IsValid() && component.GetZDO().GetPrefab() == StringExtensionMethods.GetStableHashCode("Jarold_BLM")) { try { ((Component)item).gameObject.SetActive(false); ZNetScene.instance.Destroy(((Component)item).gameObject); num++; } catch (Exception ex) { Logger.LogWarning((object)("TryDespawnJarold (scene): " + ex.Message)); } } } List list = new List(); int num2 = 0; while (!ZDOMan.instance.GetAllZDOsWithPrefabIterative("Jarold_BLM", list, ref num2)) { } foreach (ZDO item2 in list) { try { item2.SetOwner(ZDOMan.GetSessionID()); ZDOMan.instance.DestroyZDO(item2); num++; } catch (Exception ex2) { Logger.LogWarning((object)("TryDespawnJarold (ZDO): " + ex2.Message)); } } string text = ((num > 0) ? $"Jarold eliminado ({num})." : "No se encontró a Jarold en el mundo."); ((Character)Player.m_localPlayer).Message((MessageType)2, text, 0, (Sprite)null); Logger.LogInfo((object)text); } private bool JaroldExistsInWorld() { foreach (Character allCharacter in Character.GetAllCharacters()) { if (!((Object)(object)allCharacter == (Object)null)) { ZNetView component = ((Component)allCharacter).GetComponent(); if ((Object)(object)component != (Object)null && component.IsValid() && component.GetZDO().GetPrefab() == StringExtensionMethods.GetStableHashCode("Jarold_BLM")) { return true; } } } List list = new List(); int num = 0; while (!ZDOMan.instance.GetAllZDOsWithPrefabIterative("Jarold_BLM", list, ref num)) { } return list.Count > 0; } private void OnCustomGUIAvailable() { RebuildPanel(); } private void RebuildPanel() { if (GUIManager.Instance == null || (Object)(object)GUIManager.CustomGUIFront == (Object)null) { return; } try { _panel?.Destroy(); _panel = null; _panel = new LoanNpcPanel(this, Logger); _panel.Build(); } catch (Exception arg) { Logger.LogError((object)$"Error construyendo LoanNpcPanel: {arg}"); } } private void EnsurePanelReady() { if (_panel == null || !_panel.IsValid) { RebuildPanel(); } } public void OpenLoanUI(LoanNpcBehaviour npc) { EnsurePanelReady(); if (_panel != null && _panel.IsValid) { _panel.Show(npc); } } public void CloseLoanUI() { _panel?.Hide(); } public void RequestBoat(LoanNpcBehaviour npc) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_007d: 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) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { CloseLoanUI(); npc.ResetInteraction(); return; } if ((Object)(object)_boatPrefab == (Object)null) { ((Character)localPlayer).Message((MessageType)2, "No pude encontrar el prefab del barco.", 0, (Sprite)null); CloseLoanUI(); npc.ResetInteraction(); return; } if (WaterSpawnHelper.TryFindNearbyWaterPosition(((Component)localPlayer).transform.position, 12f, _waterSearchRadius.Value, out var result, ((Component)npc).transform.forward)) { GameObject val = Object.Instantiate(_boatPrefab, result, Quaternion.LookRotation(((Component)localPlayer).transform.forward)); Rigidbody component = val.GetComponent(); if ((Object)(object)component != (Object)null) { component.linearVelocity = Vector3.zero; component.angularVelocity = Vector3.zero; } TemporaryBoat temporaryBoat = val.AddComponent(); temporaryBoat.Setup(_boatLifetime.Value, Logger); ((Character)localPlayer).Message((MessageType)2, $"¡Tienes {_boatLifetime.Value:F0} segundos con el barco!", 0, (Sprite)null); } else { ((Character)localPlayer).Message((MessageType)2, "No encontré agua cercana para dejarte un barco.", 0, (Sprite)null); } CloseLoanUI(); npc.ResetInteraction(); } } public class LoanNpcBehaviour : MonoBehaviour, Interactable, Hoverable { private BoatLoanPlugin _plugin; private bool _busy; public void Setup(BoatLoanPlugin plugin) { _plugin = plugin; } public string GetHoverName() { return "Jarold El Mercante"; } public string GetHoverText() { return "Jarold El Mercante\n[E] Hablar"; } public bool Interact(Humanoid user, bool hold, bool alt) { if (hold) { return false; } if ((Object)(object)_plugin == (Object)null || (Object)(object)user != (Object)(object)Player.m_localPlayer || _busy) { return false; } _busy = true; _plugin.OpenLoanUI(this); return true; } public bool UseItem(Humanoid user, ItemData item) { return false; } public void ResetInteraction() { _busy = false; } } public static class NpcArmorApplier { private static readonly string[] ChestKeywords = new string[4] { "chest", "body", "torso", "armor" }; private static readonly string[] LegKeywords = new string[5] { "leg", "legs", "pants", "legitem", "legsitem" }; public static bool ApplyArmor(GameObject npc, ManualLogSource logger) { if ((Object)(object)npc == (Object)null) { return false; } Humanoid val = npc.GetComponent() ?? npc.GetComponentInChildren(); Component componentInChildren = npc.GetComponentInChildren(typeof(VisEquipment)); PrefabManager instance = PrefabManager.Instance; GameObject val2 = ((instance != null) ? instance.GetPrefab("ArmorHarvester1") : null); ItemDrop itemDrop = (Object.op_Implicit((Object)(object)val2) ? val2.GetComponent() : null); List candidates = BuildCandidates("ArmorHarvester1", val2, itemDrop); bool flag = false; bool flag2 = false; if ((Object)(object)val != (Object)null) { flag = TryApplyOnTarget(val, ChestKeywords, candidates, itemDrop, logger, "Humanoid"); TryInvokeRefresh(val, logger); } if ((Object)(object)componentInChildren != (Object)null) { flag2 = TryApplyOnTarget(componentInChildren, ChestKeywords, candidates, itemDrop, logger, "VisEquipment"); TryClearOnTarget(componentInChildren, LegKeywords, logger); TryInvokeRefresh(componentInChildren, logger); } return flag || flag2; } private static bool TryApplyOnTarget(object target, string[] keywords, List candidates, ItemDrop itemDrop, ManualLogSource logger, string tag) { Type type = target.GetType(); foreach (string value in keywords) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (!methodInfo.Name.ToLowerInvariant().Contains(value)) { continue; } ParameterInfo[] parameters = methodInfo.GetParameters(); if (parameters.Length != 1) { continue; } try { Type parameterType = parameters[0].ParameterType; if (parameterType == typeof(string)) { using List.Enumerator enumerator = candidates.GetEnumerator(); if (enumerator.MoveNext()) { string current = enumerator.Current; methodInfo.Invoke(target, new object[1] { current }); return true; } } if (parameterType == typeof(int)) { using List.Enumerator enumerator2 = candidates.GetEnumerator(); if (enumerator2.MoveNext()) { string current2 = enumerator2.Current; methodInfo.Invoke(target, new object[1] { StringExtensionMethods.GetStableHashCode(current2) }); return true; } } if (typeof(ItemData).IsAssignableFrom(parameterType) && (Object)(object)itemDrop != (Object)null) { methodInfo.Invoke(target, new object[1] { itemDrop.m_itemData }); return true; } if (typeof(GameObject).IsAssignableFrom(parameterType) && (Object)(object)itemDrop != (Object)null) { methodInfo.Invoke(target, new object[1] { ((Component)itemDrop).gameObject }); return true; } } catch (Exception ex) { logger.LogWarning((object)("[" + tag + "] " + methodInfo.Name + ": " + ex.Message)); } } FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (FieldInfo fieldInfo in fields) { if (!fieldInfo.Name.ToLowerInvariant().Contains(value)) { continue; } try { if (fieldInfo.FieldType == typeof(string)) { fieldInfo.SetValue(target, candidates[0]); return true; } if (fieldInfo.FieldType == typeof(int)) { fieldInfo.SetValue(target, StringExtensionMethods.GetStableHashCode(candidates[0])); return true; } if (typeof(ItemData).IsAssignableFrom(fieldInfo.FieldType) && (Object)(object)itemDrop != (Object)null) { fieldInfo.SetValue(target, itemDrop.m_itemData); return true; } if (typeof(GameObject).IsAssignableFrom(fieldInfo.FieldType) && (Object)(object)itemDrop != (Object)null) { fieldInfo.SetValue(target, ((Component)itemDrop).gameObject); return true; } } catch (Exception ex2) { logger.LogWarning((object)("[" + tag + "] field " + fieldInfo.Name + ": " + ex2.Message)); } } } return false; } private static void TryClearOnTarget(object target, string[] keywords, ManualLogSource logger) { Type type = target.GetType(); foreach (string value in keywords) { MethodInfo[] methods = type.GetMethods(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (MethodInfo methodInfo in methods) { if (!methodInfo.Name.ToLowerInvariant().Contains(value)) { continue; } ParameterInfo[] parameters = methodInfo.GetParameters(); if (parameters.Length != 1) { continue; } try { Type parameterType = parameters[0].ParameterType; if (parameterType == typeof(string)) { methodInfo.Invoke(target, new object[1] { "" }); return; } if (parameterType == typeof(int)) { methodInfo.Invoke(target, new object[1] { 0 }); return; } if (!parameterType.IsValueType) { methodInfo.Invoke(target, new object[1]); return; } } catch { } } FieldInfo[] fields = type.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); foreach (FieldInfo fieldInfo in fields) { if (!fieldInfo.Name.ToLowerInvariant().Contains(value)) { continue; } try { if (fieldInfo.FieldType == typeof(string)) { fieldInfo.SetValue(target, ""); return; } if (fieldInfo.FieldType == typeof(int)) { fieldInfo.SetValue(target, 0); return; } if (!fieldInfo.FieldType.IsValueType) { fieldInfo.SetValue(target, null); return; } } catch { } } } } private static void TryInvokeRefresh(object target, ManualLogSource logger) { string[] array = new string[6] { "SetupVisEquipment", "SetupEquipment", "UpdateEquipment", "UpdateEquipmentVisuals", "UpdateVisuals", "ResetCloth" }; Type type = target.GetType(); string[] array2 = array; foreach (string text in array2) { MethodInfo methodInfo = AccessTools.Method(type, text, (Type[])null, (Type[])null); if (!(methodInfo == null) && methodInfo.GetParameters().Length == 0) { try { methodInfo.Invoke(target, null); } catch { } } } } private static List BuildCandidates(string raw, GameObject prefab, ItemDrop itemDrop) { List list = new List(); if (!string.IsNullOrEmpty(raw)) { list.Add(raw); } if ((Object)(object)prefab != (Object)null) { list.Add(((Object)prefab).name); } if (itemDrop?.m_itemData?.m_shared != null && !string.IsNullOrEmpty(itemDrop.m_itemData.m_shared.m_name)) { list.Add(itemDrop.m_itemData.m_shared.m_name); } return list.Where((string x) => !string.IsNullOrEmpty(x)).Distinct().ToList(); } } public class LoanNpcPanel { private readonly BoatLoanPlugin _plugin; private readonly ManualLogSource _logger; private GameObject _panelRoot; private LoanNpcBehaviour _currentNpc; public bool IsVisible { get { if ((Object)(object)_panelRoot != (Object)null) { return _panelRoot.activeSelf; } return false; } } public bool IsValid => (Object)(object)_panelRoot != (Object)null; public LoanNpcPanel(BoatLoanPlugin plugin, ManualLogSource logger) { _plugin = plugin; _logger = logger; } public void Build() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Expected O, but got Unknown //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0179: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b8: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_0201: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_0256: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_02bd: Unknown result type (might be due to invalid IL or missing references) //IL_02c3: Unknown result type (might be due to invalid IL or missing references) //IL_030d: Unknown result type (might be due to invalid IL or missing references) //IL_031c: Unknown result type (might be due to invalid IL or missing references) //IL_032b: Unknown result type (might be due to invalid IL or missing references) //IL_036c: Unknown result type (might be due to invalid IL or missing references) //IL_0385: 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_03bd: Unknown result type (might be due to invalid IL or missing references) //IL_03c7: Expected O, but got Unknown //IL_03e1: Unknown result type (might be due to invalid IL or missing references) //IL_03f0: Unknown result type (might be due to invalid IL or missing references) //IL_03ff: Unknown result type (might be due to invalid IL or missing references) //IL_0440: Unknown result type (might be due to invalid IL or missing references) //IL_0459: Unknown result type (might be due to invalid IL or missing references) //IL_0465: Unknown result type (might be due to invalid IL or missing references) //IL_047d: Unknown result type (might be due to invalid IL or missing references) //IL_0487: Expected O, but got Unknown if (GUIManager.Instance == null || (Object)(object)GUIManager.CustomGUIFront == (Object)null) { throw new Exception("GUIManager no disponible."); } _panelRoot = new GameObject("BoatLoanPanelRoot", new Type[1] { typeof(RectTransform) }); _panelRoot.transform.SetParent(GUIManager.CustomGUIFront.transform, false); RectTransform component = _panelRoot.GetComponent(); component.anchorMin = new Vector2(0.5f, 0.5f); component.anchorMax = new Vector2(0.5f, 0.5f); component.pivot = new Vector2(0.5f, 0.5f); component.sizeDelta = new Vector2(760f, 580f); ((Transform)component).localPosition = new Vector3(570f, 0f, 0f); GameObject val = GUIManager.Instance.CreateWoodpanel(_panelRoot.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 250f), 690f, 95f, false); ((Object)val).name = "TopWoodPanel"; SetWoodVisible(val); CreateOverlay(val.transform, "TopOverlay", new Color(0f, 0f, 0f, 0.85f)); GUIManager.Instance.CreateText("Jarold El Mercante", val.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), Vector2.zero, GUIManager.Instance.NorseBold, 30, new Color(1f, 0.79f, 0.22f, 1f), true, Color.black, 560f, 42f, false).GetComponent().alignment = (TextAnchor)4; GameObject val2 = GUIManager.Instance.CreateWoodpanel(_panelRoot.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, -40f), 690f, 400f, false); ((Object)val2).name = "BottomWoodPanel"; SetWoodVisible(val2); CreateOverlay(val2.transform, "BottomOverlay", new Color(0f, 0f, 0f, 0.85f)); Text component2 = GUIManager.Instance.CreateText("Hola ! Soy Jarold , ¿Cómo te puedo ayudar?", val2.transform, new Vector2(0.5f, 1f), new Vector2(0.5f, 1f), new Vector2(0f, -60f), GUIManager.Instance.AveriaSerifBold, 22, new Color(0.96f, 0.93f, 0.86f, 1f), true, Color.black, 580f, 60f, false).GetComponent(); component2.alignment = (TextAnchor)1; component2.horizontalOverflow = (HorizontalWrapMode)0; component2.verticalOverflow = (VerticalWrapMode)1; GameObject val3 = GUIManager.Instance.CreateButton("Necesito un Barco", val2.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 30f), 470f, 60f); ((Object)val3).name = "RentButton"; Button component3 = val3.GetComponent