Please disclose if your mod was created primarily using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of SimpleMarket v0.9.5
SimpleMarket.dll
Decompiled 2 months ago
The result has been truncated due to the large size, download it to view full contents!
using System; using System.Collections; using System.Collections.Generic; using System.Diagnostics; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Serialization; using System.Runtime.Versioning; using System.Security; using System.Security.Permissions; using System.Text; using System.Text.RegularExpressions; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using HarmonyLib; using JetBrains.Annotations; using Jotunn.Entities; using Jotunn.Managers; using Jotunn.Utils; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using ServerSync; using SimpleMarket.Config; using SimpleMarket.Data; using SimpleMarket.Helpers; using SimpleMarket.Network; using SimpleMarket.Patches; using SimpleMarket.UI; using TMPro; using UnityEngine; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.Networking; using UnityEngine.UI; [assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")] [assembly: AssemblyCompany("SimpleMarket")] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyProduct("SimpleMarket")] [assembly: AssemblyTitle("SimpleMarket")] [assembly: AssemblyInformationalVersion("0.9.5")] [assembly: AssemblyDescription("Valheim Mod")] [assembly: AssemblyFileVersion("0.9.5.0")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.9.5.0")] [module: UnverifiableCode] [module: <e7597ebf-7ed0-4370-bbd7-9080be0cb3e5>RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [<5a48d3e9-8adb-4ca8-aefb-f6ba6c29beaf>Embedded] internal sealed class <5a48d3e9-8adb-4ca8-aefb-f6ba6c29beaf>EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [<5a48d3e9-8adb-4ca8-aefb-f6ba6c29beaf>Embedded] [CompilerGenerated] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class <e7597ebf-7ed0-4370-bbd7-9080be0cb3e5>RefSafetyRulesAttribute : Attribute { public readonly int Version; public <e7597ebf-7ed0-4370-bbd7-9080be0cb3e5>RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace SimpleMarket { [BepInDependency(/*Could not decode attribute arguments.*/)] [BepInPlugin("dumba.simplemarket", "SimpleMarket", "0.9.5")] [NetworkCompatibility(/*Could not decode attribute arguments.*/)] public class SimpleMarketPlugin : BaseUnityPlugin { public const string PluginGUID = "dumba.simplemarket"; public const string PluginName = "SimpleMarket"; public const string PluginVersion = "0.9.5"; private Harmony _harmony; private MarketUI _marketUI; private Coroutine _expiryCleanupCoroutine; private const float ExpiryCheckIntervalHours = 1f; public static SimpleMarketPlugin Instance { get; private set; } public static ManualLogSource Log { get { SimpleMarketPlugin instance = Instance; if (instance == null) { return null; } return ((BaseUnityPlugin)instance).Logger; } } public MarketDatabase MarketDB { get; private set; } public BankDatabase BankDB { get; private set; } public TransactionDatabase TransactionDB { get; private set; } private void Awake() { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Expected O, but got Unknown Instance = this; SimpleMarketConfig.Initialize(((BaseUnityPlugin)this).Config); LogInfo("SimpleMarket is loading..."); _harmony = new Harmony("dumba.simplemarket"); _harmony.PatchAll(Assembly.GetExecutingAssembly()); MarketRPCs.RegisterRPCs(); SubscribeToRPCEvents(); PrefabManager.OnVanillaPrefabsAvailable += OnVanillaPrefabsAvailable; InitializeUI(); LogInfo("SimpleMarket loaded successfully!"); } private void Start() { ((MonoBehaviour)this).StartCoroutine(WaitForServerAndInitialize()); } private IEnumerator WaitForServerAndInitialize() { while ((Object)(object)ZNet.instance == (Object)null) { yield return (object)new WaitForSeconds(1f); } yield return (object)new WaitForSeconds(2f); if (ZNet.instance.IsServer()) { LogInfo("Server detected - initializing databases..."); InitializeDatabases(); } else { LogInfo("Client mode - skipping database initialization"); } } private void OnDestroy() { Harmony harmony = _harmony; if (harmony != null) { harmony.UnpatchSelf(); } PrefabManager.OnVanillaPrefabsAvailable -= OnVanillaPrefabsAvailable; if (_expiryCleanupCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(_expiryCleanupCoroutine); _expiryCleanupCoroutine = null; } UnsubscribeFromRPCEvents(); if ((Object)(object)_marketUI != (Object)null) { Object.Destroy((Object)(object)_marketUI); _marketUI = null; } InventoryGuiPatch.Cleanup(); } private void OnVanillaPrefabsAvailable() { if ((Object)(object)ZNet.instance != (Object)null && ZNet.instance.IsServer()) { InitializeDatabases(); } } private void InitializeUI() { if (GUIManager.IsHeadless()) { LogInfo("Headless server detected - skipping UI initialization"); return; } _marketUI = ((Component)this).gameObject.AddComponent<MarketUI>(); _marketUI.Initialize(); LogInfo("Market UI system initialized"); } public MarketUI GetMarketUI() { return _marketUI; } public void InitializeDatabases() { if (MarketDB == null) { MarketDB = new MarketDatabase(); LogInfo("Market database initialized"); } if (BankDB == null) { BankDB = new BankDatabase(); LogInfo("Bank database initialized"); } if (TransactionDB == null) { TransactionDB = new TransactionDatabase(); LogInfo("Transaction database initialized"); } StartExpiryCleanupTask(); } public bool EnsureDatabasesInitialized() { if (!IsServer()) { return false; } if (MarketDB == null || BankDB == null || TransactionDB == null) { LogInfo("Lazy-initializing databases on server (triggered by RPC)"); InitializeDatabases(); } if (MarketDB != null && BankDB != null) { return TransactionDB != null; } return false; } private void StartExpiryCleanupTask() { if (_expiryCleanupCoroutine != null) { ((MonoBehaviour)this).StopCoroutine(_expiryCleanupCoroutine); } _expiryCleanupCoroutine = ((MonoBehaviour)this).StartCoroutine(ExpiryCleanupCoroutine()); LogInfo($"Started listing expiry cleanup task (interval: {1f} hour(s))"); } private IEnumerator ExpiryCleanupCoroutine() { yield return (object)new WaitForSeconds(60f); while (true) { if (IsServer() && MarketDB != null) { int num = SimpleMarketConfig.ListingExpiryDays?.Value ?? 180; if (num > 0) { int num2 = MarketDB.CleanupExpiredListings(); if (num2 > 0) { LogInfo($"Cleaned up {num2} expired listings (older than {num} days)"); } else { LogDebug("Expiry cleanup: No expired listings found"); } } } yield return (object)new WaitForSeconds(3600f); } } public static bool IsServer() { if ((Object)(object)ZNet.instance != (Object)null) { return ZNet.instance.IsServer(); } return false; } public static bool IsInGame() { if ((Object)(object)Player.m_localPlayer != (Object)null) { return (Object)(object)ZNet.instance != (Object)null; } return false; } public static void LogInfo(string message) { if (Log != null) { Log.LogInfo((object)message); } } public static void LogWarning(string message) { if (Log != null) { Log.LogWarning((object)message); } } public static void LogError(string message) { if (Log != null) { Log.LogError((object)message); } } public static void LogDebug(string message) { if (SimpleMarketConfig.DebugLogging != null && SimpleMarketConfig.DebugLogging.Value && Log != null) { Log.LogDebug((object)message); } } private void SubscribeToRPCEvents() { MarketRPCs.OnListingsReceived += HandleListingsReceived; MarketRPCs.OnMyListingsReceived += HandleMyListingsReceived; MarketRPCs.OnBankBalanceReceived += HandleBankBalanceReceived; MarketRPCs.OnListItemResult += HandleListItemResult; MarketRPCs.OnBuyItemResult += HandleBuyItemResult; MarketRPCs.OnCancelListingResult += HandleCancelListingResult; MarketRPCs.OnDepositResult += HandleDepositResult; MarketRPCs.OnWithdrawResult += HandleWithdrawResult; MarketRPCs.OnTransactionHistoryReceived += HandleTransactionHistoryReceived; } private void UnsubscribeFromRPCEvents() { MarketRPCs.OnListingsReceived -= HandleListingsReceived; MarketRPCs.OnMyListingsReceived -= HandleMyListingsReceived; MarketRPCs.OnBankBalanceReceived -= HandleBankBalanceReceived; MarketRPCs.OnListItemResult -= HandleListItemResult; MarketRPCs.OnBuyItemResult -= HandleBuyItemResult; MarketRPCs.OnCancelListingResult -= HandleCancelListingResult; MarketRPCs.OnDepositResult -= HandleDepositResult; MarketRPCs.OnWithdrawResult -= HandleWithdrawResult; MarketRPCs.OnTransactionHistoryReceived -= HandleTransactionHistoryReceived; } private void HandleListingsReceived(List<MarketListing> listings, int totalCount, int totalPages) { LogDebug($"Received {listings.Count} listings (total: {totalCount}, pages: {totalPages})"); _marketUI?.OnListingsReceived(listings, totalCount, totalPages); } private void HandleMyListingsReceived(List<MarketListing> listings) { LogDebug($"Received {listings.Count} of my listings"); _marketUI?.OnListingsReceived(listings, listings.Count, 1); } private void HandleBankBalanceReceived(int balance) { LogDebug($"Received bank balance: {balance}"); _marketUI?.OnBankBalanceReceived(balance); } private void HandleListItemResult(bool success, string message) { LogDebug($"List item result: {success} - {message}"); _marketUI?.OnListItemComplete(success, message); } private void HandleBuyItemResult(bool success, string message, MarketListing purchasedListing) { LogDebug($"Buy item result: {success} - {message}"); if (success && purchasedListing != null) { DeliverPurchasedItem(purchasedListing); } _marketUI?.OnBuyComplete(success, message); } private void HandleCancelListingResult(bool success, string message, MarketListing cancelledListing) { LogDebug($"Cancel listing result: {success} - {message}"); if (success && cancelledListing != null) { ReturnCancelledItem(cancelledListing); } _marketUI?.OnCancelComplete(success, message); } private void ReturnCancelledItem(MarketListing listing) { if (listing == null) { LogWarning("Cannot return null listing"); return; } Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { LogError("Cannot return item - no local player"); return; } Inventory inventory = ((Humanoid)localPlayer).GetInventory(); if (inventory == null) { LogError("Cannot return item - no inventory"); return; } string localizedName = ItemHelper.GetLocalizedName(listing.ItemPrefabName); if (ItemHelper.AddItemToInventory(inventory, listing.ItemPrefabName, listing.Quality, listing.Quantity, listing.ItemData)) { LogInfo($"Returned {listing.Quantity}x {localizedName} to player from cancelled listing"); FeedbackHelper.ShowSuccess($"Returned {listing.Quantity}x {localizedName}"); return; } LogWarning($"Inventory full - dropping {listing.Quantity}x {localizedName} at player's feet"); if (DropItemAtPlayer(listing)) { FeedbackHelper.ShowError("Inventory full - " + localizedName + " dropped at your feet!"); return; } LogError($"CRITICAL: Failed to drop {listing.Quantity}x {localizedName} - item may be lost!"); FeedbackHelper.ShowError("Failed to return " + localizedName + " - contact server admin!"); } private bool DropItemAtPlayer(MarketListing listing) { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: 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_008e: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) try { Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { return false; } ZNetScene instance = ZNetScene.instance; GameObject val = ((instance != null) ? instance.GetPrefab(listing.ItemPrefabName) : null); if ((Object)(object)val == (Object)null) { LogError("DropItemAtPlayer: Cannot find prefab for " + listing.ItemPrefabName); return false; } Vector3 val2 = ((Component)localPlayer).transform.position + ((Component)localPlayer).transform.forward * 1.5f + Vector3.up * 0.5f; GameObject val3 = Object.Instantiate<GameObject>(val, val2, Quaternion.identity); if ((Object)(object)val3 == (Object)null) { return false; } ItemDrop component = val3.GetComponent<ItemDrop>(); if ((Object)(object)component != (Object)null) { component.m_itemData.m_stack = listing.Quantity; component.m_itemData.m_quality = listing.Quality; if (!string.IsNullOrEmpty(listing.ItemData)) { ItemSerializationHelper.Deserialize(component.m_itemData, listing.ItemData); } LogInfo($"Dropped {listing.Quantity}x {listing.ItemPrefabName} at player's feet"); return true; } Object.Destroy((Object)(object)val3); return false; } catch (Exception ex) { LogError("DropItemAtPlayer exception: " + ex.Message); return false; } } private void HandleDepositResult(bool success, string message, int newBalance) { LogDebug($"Deposit result: {success} - {message}, new balance: {newBalance}"); _marketUI?.OnDepositComplete(success, newBalance, message); } private void HandleWithdrawResult(bool success, string message, int newBalance, int withdrawnAmount) { LogDebug($"Withdraw result: {success} - {message}, new balance: {newBalance}, withdrawn: {withdrawnAmount}"); if (success && withdrawnAmount > 0) { DeliverCoins(withdrawnAmount); } _marketUI?.OnWithdrawComplete(success, newBalance, message); } private void HandleTransactionHistoryReceived(List<TransactionRecord> transactions, int totalCount, int totalPages) { LogDebug($"Received {transactions.Count} transactions (total: {totalCount}, pages: {totalPages})"); _marketUI?.OnTransactionHistoryReceived(transactions, totalCount, totalPages); } private void DeliverCoins(int amount) { if (amount <= 0) { return; } if ((Object)(object)Player.m_localPlayer == (Object)null) { LogError("Cannot deliver coins - no local player"); return; } if (PlayerHelper.GiveCoins(amount)) { LogInfo($"Delivered {amount} coins to player"); FeedbackHelper.ShowSuccess($"Received {amount} coins"); return; } LogError("Failed to deliver coins to inventory - attempting rollback to bank"); string platformId = PlayerHelper.GetPlatformId(); if (!string.IsNullOrEmpty(platformId)) { MarketRPCs.RequestDeposit(platformId, amount); FeedbackHelper.ShowError("Inventory full - coins returned to bank!"); LogInfo($"Rolled back {amount} coins to bank for {platformId}"); } else { LogError($"CRITICAL: Could not rollback {amount} coins - no platform ID!"); FeedbackHelper.ShowError("Inventory full - item could not be delivered"); } } private void DeliverPurchasedItem(MarketListing listing) { if (listing == null) { LogWarning("Cannot deliver null listing"); return; } Player localPlayer = Player.m_localPlayer; if ((Object)(object)localPlayer == (Object)null) { LogError("Cannot deliver item - no local player"); return; } Inventory inventory = ((Humanoid)localPlayer).GetInventory(); if (inventory == null) { LogError("Cannot deliver item - no inventory"); return; } string localizedName = ItemHelper.GetLocalizedName(listing.ItemPrefabName); if (ItemHelper.AddItemToInventory(inventory, listing.ItemPrefabName, listing.Quality, listing.Quantity, listing.ItemData)) { LogInfo($"Delivered {listing.Quantity}x {localizedName} to player"); FeedbackHelper.ShowSuccess($"Received {listing.Quantity}x {localizedName}"); return; } LogError($"Failed to deliver {listing.Quantity}x {localizedName} to inventory - attempting refund"); int totalPrice = listing.GetTotalPrice(); string platformId = PlayerHelper.GetPlatformId(); if (!string.IsNullOrEmpty(platformId) && totalPrice > 0) { MarketRPCs.RequestDeposit(platformId, totalPrice); FeedbackHelper.ShowError($"Inventory full - {totalPrice} coins refunded to bank!"); LogInfo($"Refunded {totalPrice} coins to bank for failed item delivery: {localizedName}"); } else { LogError($"CRITICAL: Could not refund {totalPrice} coins for {localizedName} - no platform ID!"); FeedbackHelper.ShowError("Inventory full - item could not be delivered"); } } } } namespace SimpleMarket.UI { public class BankPanel : MonoBehaviour { private GameObject _container; private Text _balanceText; private InputField _amountInput; private Button _depositButton; private Button _withdrawButton; private Button _depositAllButton; private Button _withdrawAllButton; private Text _inventoryCoinsText; private int _currentBalance; private int _inventoryCoins; private const int MaxCoinStack = 999; public event Action<int> OnDepositRequested; public event Action<int> OnWithdrawRequested; public static BankPanel Create(Transform parent, Vector2 position) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("BankPanel"); val.transform.SetParent(parent, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 1f); obj.anchorMax = new Vector2(1f, 1f); obj.pivot = new Vector2(0.5f, 1f); obj.anchoredPosition = position; obj.sizeDelta = new Vector2(-40f, 55f); ((Graphic)val.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0.2f); BankPanel bankPanel = val.AddComponent<BankPanel>(); bankPanel._container = val; bankPanel.CreateUI(); return bankPanel; } private void CreateUI() { CreateBalanceDisplay(); CreateAmountInput(); CreateActionButtons(); CreateInventoryDisplay(); } private void CreateBalanceDisplay() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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_00a1: 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) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) ((Object)GUIManager.Instance.CreateText("\ud83d\udcb0", _container.transform, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(25f, 0f), GUIManager.Instance.AveriaSerifBold, 20, new Color(1f, 0.85f, 0f), false, Color.black, 30f, 30f, false)).name = "BankIcon"; GameObject val = GUIManager.Instance.CreateText("Bank: 0", _container.transform, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(110f, 0f), GUIManager.Instance.AveriaSerifBold, 18, new Color(1f, 0.85f, 0f), true, Color.black, 150f, 30f, false); ((Object)val).name = "BankBalanceText"; _balanceText = val.GetComponent<Text>(); if ((Object)(object)_balanceText != (Object)null) { _balanceText.alignment = (TextAnchor)3; } } private void CreateAmountInput() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) ((Object)GUIManager.Instance.CreateText("Amount:", _container.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(-120f, 0f), GUIManager.Instance.AveriaSerif, 14, Color.white, false, Color.black, 60f, 25f, false)).name = "AmountLabel"; GameObject val = GUIManager.Instance.CreateInputField(_container.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(-50f, 0f), (ContentType)2, "0", 14, 80f, 30f); ((Object)val).name = "AmountInput"; _amountInput = val.GetComponent<InputField>(); } private void CreateActionButtons() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: 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_00d0: 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_0093: Expected O, but got Unknown //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Expected O, but got Unknown //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_020e: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01d1: Expected O, but got Unknown //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Expected O, but got Unknown GameObject val = GUIManager.Instance.CreateButton("Deposit", _container.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(40f, 0f), 80f, 30f); ((Object)val).name = "DepositButton"; _depositButton = val.GetComponent<Button>(); if ((Object)(object)_depositButton != (Object)null) { ((UnityEvent)_depositButton.onClick).AddListener(new UnityAction(OnDepositClicked)); } GameObject val2 = GUIManager.Instance.CreateButton("All", _container.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(95f, 0f), 35f, 30f); ((Object)val2).name = "DepositAllButton"; _depositAllButton = val2.GetComponent<Button>(); if ((Object)(object)_depositAllButton != (Object)null) { ((UnityEvent)_depositAllButton.onClick).AddListener(new UnityAction(OnDepositAllClicked)); } Text componentInChildren = val2.GetComponentInChildren<Text>(); if ((Object)(object)componentInChildren != (Object)null) { componentInChildren.fontSize = 11; } GameObject val3 = GUIManager.Instance.CreateButton("Withdraw", _container.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(170f, 0f), 90f, 30f); ((Object)val3).name = "WithdrawButton"; _withdrawButton = val3.GetComponent<Button>(); if ((Object)(object)_withdrawButton != (Object)null) { ((UnityEvent)_withdrawButton.onClick).AddListener(new UnityAction(OnWithdrawClicked)); } GameObject val4 = GUIManager.Instance.CreateButton("999", _container.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(230f, 0f), 35f, 30f); ((Object)val4).name = "WithdrawMaxButton"; _withdrawAllButton = val4.GetComponent<Button>(); if ((Object)(object)_withdrawAllButton != (Object)null) { ((UnityEvent)_withdrawAllButton.onClick).AddListener(new UnityAction(OnWithdrawAllClicked)); } Text componentInChildren2 = val4.GetComponentInChildren<Text>(); if ((Object)(object)componentInChildren2 != (Object)null) { componentInChildren2.fontSize = 11; } } private void CreateInventoryDisplay() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003d: 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) GameObject val = GUIManager.Instance.CreateText("Inventory: 0 coins", _container.transform, new Vector2(1f, 0.5f), new Vector2(1f, 0.5f), new Vector2(-90f, 0f), GUIManager.Instance.AveriaSerif, 13, new Color(0.8f, 0.8f, 0.8f), false, Color.black, 150f, 25f, false); ((Object)val).name = "InventoryCoinsText"; _inventoryCoinsText = val.GetComponent<Text>(); if ((Object)(object)_inventoryCoinsText != (Object)null) { _inventoryCoinsText.alignment = (TextAnchor)5; } } public void UpdateBalance(int balance) { _currentBalance = balance; if ((Object)(object)_balanceText != (Object)null) { _balanceText.text = $"Bank: {balance:N0}"; } } public void UpdateInventoryCoins(int coins) { _inventoryCoins = coins; if ((Object)(object)_inventoryCoinsText != (Object)null) { _inventoryCoinsText.text = $"Inventory: {coins:N0} coins"; } } public void RefreshInventoryCoins() { if (!((Object)(object)Player.m_localPlayer == (Object)null)) { Inventory inventory = ((Humanoid)Player.m_localPlayer).GetInventory(); if (inventory != null) { int coins = inventory.CountItems("$item_coins", -1, true); UpdateInventoryCoins(coins); } } } private int GetInputAmount() { if ((Object)(object)_amountInput == (Object)null || string.IsNullOrEmpty(_amountInput.text)) { return 0; } if (int.TryParse(_amountInput.text, out var result)) { return Math.Max(0, result); } return 0; } private void OnDepositClicked() { int inputAmount = GetInputAmount(); if (inputAmount > 0) { if (inputAmount > _inventoryCoins) { FeedbackHelper.ShowError("Not enough coins in inventory"); } else { this.OnDepositRequested?.Invoke(inputAmount); } } else { FeedbackHelper.ShowWarning("Enter an amount to deposit"); } } private void OnDepositAllClicked() { if (_inventoryCoins > 0) { this.OnDepositRequested?.Invoke(_inventoryCoins); } else { FeedbackHelper.ShowWarning("No coins in inventory"); } } private void OnWithdrawClicked() { int inputAmount = GetInputAmount(); if (inputAmount > 0) { inputAmount = Math.Min(inputAmount, 999); if (inputAmount > _currentBalance) { FeedbackHelper.ShowError("Not enough coins in bank"); } else { this.OnWithdrawRequested?.Invoke(inputAmount); } } else { FeedbackHelper.ShowWarning("Enter an amount to withdraw"); } } private void OnWithdrawAllClicked() { if (_currentBalance > 0) { int obj = Math.Min(_currentBalance, 999); this.OnWithdrawRequested?.Invoke(obj); } else { FeedbackHelper.ShowWarning("No coins in bank"); } } public void ClearInput() { if ((Object)(object)_amountInput != (Object)null) { _amountInput.text = ""; } } private void OnDestroy() { if ((Object)(object)_depositButton != (Object)null) { ((UnityEventBase)_depositButton.onClick).RemoveAllListeners(); } if ((Object)(object)_withdrawButton != (Object)null) { ((UnityEventBase)_withdrawButton.onClick).RemoveAllListeners(); } if ((Object)(object)_depositAllButton != (Object)null) { ((UnityEventBase)_depositAllButton.onClick).RemoveAllListeners(); } if ((Object)(object)_withdrawAllButton != (Object)null) { ((UnityEventBase)_withdrawAllButton.onClick).RemoveAllListeners(); } } } public class CategoryButtons : MonoBehaviour { private GameObject _container; private List<GameObject> _categoryButtons = new List<GameObject>(); private Dictionary<string, Button> _buttonMap = new Dictionary<string, Button>(); private string _selectedCategory = "All"; private static readonly Color SelectedColor = new Color(1f, 0.8f, 0.2f, 1f); private static readonly Color UnselectedColor = new Color(0.8f, 0.8f, 0.8f, 1f); public string SelectedCategory => _selectedCategory; public event Action<string> OnCategorySelected; public static CategoryButtons Create(Transform parent, Vector2 position, float width) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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) //IL_006e: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("CategoryButtonsContainer"); val.transform.SetParent(parent, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 1f); obj.anchorMax = new Vector2(1f, 1f); obj.pivot = new Vector2(0.5f, 1f); obj.anchoredPosition = position; obj.sizeDelta = new Vector2(-40f, 80f); CategoryButtons categoryButtons = val.AddComponent<CategoryButtons>(); categoryButtons._container = val; categoryButtons.CreateButtons(); return categoryButtons; } private void CreateButtons() { GameObject val = CreateButtonRow("Row1", 0f); GameObject val2 = CreateButtonRow("Row2", -40f); List<string> categoriesList = SimpleMarketConfig.GetCategoriesList(); float num = 100f; float height = 32f; float spacing = 5f; int num2 = 7; int num3 = 0; CreateCategoryButton(val.transform, "All", num3, num, height, spacing, num2); _selectedCategory = "All"; num3++; foreach (string item in categoriesList) { Transform parent = ((num3 < num2) ? val.transform : val2.transform); int index = ((num3 < num2) ? num3 : (num3 - num2)); CreateCategoryButton(parent, item, index, num, height, spacing, num2); num3++; if (num3 >= num2 * 2 - 2) { break; } } float width = num + 20f; float width2 = num; CreateCategoryButton(val2.transform, "My History", 0, width2, height, spacing, num2, alignRight: true, 55f); CreateCategoryButton(val2.transform, "My Listings", 0, width, height, spacing, num2, alignRight: true); UpdateButtonStates(); } private GameObject CreateButtonRow(string name, float yOffset) { //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) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0069: 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_0088: Expected O, but got Unknown GameObject val = new GameObject(name); val.transform.SetParent(_container.transform, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 1f); obj.anchorMax = new Vector2(1f, 1f); obj.pivot = new Vector2(0.5f, 1f); obj.anchoredPosition = new Vector2(0f, yOffset); obj.sizeDelta = new Vector2(0f, 35f); return val; } private void CreateCategoryButton(Transform parent, string category, int index, float width, float height, float spacing, int buttonsPerRow, bool alignRight = false, float rightOffset = 0f) { //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0077: 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_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Expected O, but got Unknown float num = (float)buttonsPerRow * (width + spacing) - spacing; float num2 = (0f - num) / 2f + width / 2f; float num3 = ((!alignRight) ? (num2 + (float)index * (width + spacing)) : (num / 2f - width / 2f - 10f - rightOffset)); GameObject val = GUIManager.Instance.CreateButton(category, parent, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(num3, 0f), width, height); ((Object)val).name = "CategoryBtn_" + category.Replace(" ", ""); _categoryButtons.Add(val); Button component = val.GetComponent<Button>(); if ((Object)(object)component != (Object)null) { string cat = category; ((UnityEvent)component.onClick).AddListener((UnityAction)delegate { SelectCategory(cat); }); _buttonMap[category] = component; } Text componentInChildren = val.GetComponentInChildren<Text>(); if ((Object)(object)componentInChildren != (Object)null) { componentInChildren.fontSize = ((category.Length > 10) ? 11 : 13); componentInChildren.fontStyle = (FontStyle)1; } } public void SelectCategory(string category) { if (!(_selectedCategory == category)) { _selectedCategory = category; UpdateButtonStates(); this.OnCategorySelected?.Invoke(category); SimpleMarketPlugin.LogDebug("Category selected: " + category); } } private void UpdateButtonStates() { //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) foreach (KeyValuePair<string, Button> item in _buttonMap) { Text componentInChildren = ((Component)item.Value).GetComponentInChildren<Text>(); if ((Object)(object)componentInChildren != (Object)null) { bool flag = item.Key == _selectedCategory; ((Graphic)componentInChildren).color = (flag ? SelectedColor : UnselectedColor); if (flag) { componentInChildren.fontStyle = (FontStyle)1; } else { componentInChildren.fontStyle = (FontStyle)0; } } } } public void Reset() { SelectCategory("All"); } public void RebuildButtons() { string selectedCategory = _selectedCategory; foreach (GameObject categoryButton in _categoryButtons) { if ((Object)(object)categoryButton != (Object)null) { Object.Destroy((Object)(object)categoryButton); } } _categoryButtons.Clear(); _buttonMap.Clear(); Transform val = _container.transform.Find("Row1"); Transform val2 = _container.transform.Find("Row2"); if ((Object)(object)val != (Object)null) { Object.Destroy((Object)(object)((Component)val).gameObject); } if ((Object)(object)val2 != (Object)null) { Object.Destroy((Object)(object)((Component)val2).gameObject); } CreateButtons(); if (_buttonMap.ContainsKey(selectedCategory)) { _selectedCategory = selectedCategory; UpdateButtonStates(); } else { _selectedCategory = "All"; UpdateButtonStates(); } SimpleMarketPlugin.LogDebug("Category buttons rebuilt. Categories: " + string.Join(",", SimpleMarketConfig.GetCategoriesList())); } private void OnDestroy() { foreach (GameObject categoryButton in _categoryButtons) { if ((Object)(object)categoryButton != (Object)null) { Object.Destroy((Object)(object)categoryButton); } } _categoryButtons.Clear(); _buttonMap.Clear(); } } public class HistoryPanel : MonoBehaviour { private GameObject _container; private ScrollRect _scrollRect; private Text _emptyText; private Text _pageInfoText; private Button _prevButton; private Button _nextButton; private List<TransactionRow> _transactionRows = new List<TransactionRow>(); private string _currentPlatformId; private List<TransactionRecord> _transactions = new List<TransactionRecord>(); private int _currentPage; private int _totalPages = 1; private int _totalCount; private const float RowHeight = 60f; private const float Padding = 10f; private int _pageSize = 10; public static HistoryPanel Create(Transform parent, string platformId) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("HistoryPanel"); val.transform.SetParent(parent, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = Vector2.zero; obj.anchorMax = Vector2.one; obj.offsetMin = Vector2.zero; obj.offsetMax = Vector2.zero; HistoryPanel historyPanel = val.AddComponent<HistoryPanel>(); historyPanel._container = val; historyPanel._currentPlatformId = platformId; historyPanel._pageSize = SimpleMarketConfig.TransactionHistoryPageSize.Value; historyPanel.CreateUI(); return historyPanel; } private void CreateUI() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0053: 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_0095: Unknown result type (might be due to invalid IL or missing references) GUIManager.Instance.CreateText("Transaction History", _container.transform, new Vector2(0f, 1f), new Vector2(1f, 1f), new Vector2(0f, -20f), GUIManager.Instance.AveriaSerifBold, 18, GUIManager.Instance.ValheimOrange, true, Color.black, 300f, 30f, false).GetComponent<Text>().alignment = (TextAnchor)4; CreateScrollArea(); _emptyText = CreateCenteredText("No transaction history yet.\nPurchases and sales will appear here.", new Color(0.6f, 0.6f, 0.6f), 14); CreatePaginationControls(); } private void CreateScrollArea() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_0071: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Expected O, but got Unknown //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0189: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("ScrollView"); val.transform.SetParent(_container.transform, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 0f); obj.anchorMax = new Vector2(1f, 1f); obj.offsetMin = new Vector2(10f, 50f); obj.offsetMax = new Vector2(-25f, -50f); ScrollRect val2 = val.AddComponent<ScrollRect>(); val2.horizontal = false; val2.vertical = true; val2.movementType = (MovementType)2; val2.scrollSensitivity = 50f; ((Graphic)val.AddComponent<Image>()).color = new Color(0.1f, 0.1f, 0.1f, 0.3f); val.AddComponent<Mask>().showMaskGraphic = true; GameObject val3 = new GameObject("Viewport"); val3.transform.SetParent(val.transform, false); RectTransform val4 = val3.AddComponent<RectTransform>(); val4.anchorMin = Vector2.zero; val4.anchorMax = Vector2.one; val4.offsetMin = Vector2.zero; val4.offsetMax = Vector2.zero; GameObject val5 = new GameObject("Content"); val5.transform.SetParent(val3.transform, false); RectTransform val6 = val5.AddComponent<RectTransform>(); val6.anchorMin = new Vector2(0f, 1f); val6.anchorMax = new Vector2(1f, 1f); val6.pivot = new Vector2(0.5f, 1f); val6.anchoredPosition = Vector2.zero; val6.sizeDelta = new Vector2(0f, 0f); val2.viewport = val4; val2.content = val6; _scrollRect = val2; CreateVerticalScrollbar(); } private void CreateVerticalScrollbar() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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) //IL_00d4: 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_00f7: Expected O, but got Unknown //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_017d: 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_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("VerticalScrollbar"); val.transform.SetParent(_container.transform, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(1f, 0f); obj.anchorMax = new Vector2(1f, 1f); obj.pivot = new Vector2(1f, 0.5f); obj.anchoredPosition = new Vector2(-5f, 0f); obj.sizeDelta = new Vector2(15f, 0f); obj.offsetMin = new Vector2(-20f, 50f); obj.offsetMax = new Vector2(-5f, -50f); ((Graphic)val.AddComponent<Image>()).color = new Color(0.15f, 0.15f, 0.15f, 0.8f); Scrollbar val2 = val.AddComponent<Scrollbar>(); val2.direction = (Direction)2; GameObject val3 = new GameObject("SlidingArea"); val3.transform.SetParent(val.transform, false); RectTransform obj2 = val3.AddComponent<RectTransform>(); obj2.anchorMin = Vector2.zero; obj2.anchorMax = Vector2.one; obj2.offsetMin = new Vector2(2f, 2f); obj2.offsetMax = new Vector2(-2f, -2f); GameObject val4 = new GameObject("Handle"); val4.transform.SetParent(val3.transform, false); RectTransform val5 = val4.AddComponent<RectTransform>(); val5.anchorMin = Vector2.zero; val5.anchorMax = Vector2.one; val5.offsetMin = Vector2.zero; val5.offsetMax = Vector2.zero; Image val6 = val4.AddComponent<Image>(); ((Graphic)val6).color = new Color(0.5f, 0.45f, 0.35f, 1f); val2.handleRect = val5; ((Selectable)val2).targetGraphic = (Graphic)(object)val6; ((Selectable)val2).colors = GUIManager.Instance.ValheimScrollbarHandleColorBlock; _scrollRect.verticalScrollbar = val2; _scrollRect.verticalScrollbarVisibility = (ScrollbarVisibility)2; } private void CreatePaginationControls() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Expected O, but got Unknown //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_013d: 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_0154: Unknown result type (might be due to invalid IL or missing references) //IL_019c: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Expected O, but got Unknown GameObject val = new GameObject("Pagination"); val.transform.SetParent(_container.transform, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 0f); obj.anchorMax = new Vector2(1f, 0f); obj.pivot = new Vector2(0.5f, 0f); obj.anchoredPosition = new Vector2(0f, 10f); obj.sizeDelta = new Vector2(0f, 35f); GameObject val2 = GUIManager.Instance.CreateButton("◀ Prev", val.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(-100f, 0f), 80f, 30f); _prevButton = val2.GetComponent<Button>(); ((UnityEvent)_prevButton.onClick).AddListener(new UnityAction(OnPrevPage)); GameObject val3 = GUIManager.Instance.CreateText("Page 1 / 1", val.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 0f), GUIManager.Instance.AveriaSerif, 14, Color.white, true, Color.black, 120f, 30f, false); _pageInfoText = val3.GetComponent<Text>(); _pageInfoText.alignment = (TextAnchor)4; GameObject val4 = GUIManager.Instance.CreateButton("Next ▶", val.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(100f, 0f), 80f, 30f); _nextButton = val4.GetComponent<Button>(); ((UnityEvent)_nextButton.onClick).AddListener(new UnityAction(OnNextPage)); } private Text CreateCenteredText(string text, Color color, int fontSize) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) Text component = GUIManager.Instance.CreateText(text, _container.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), Vector2.zero, GUIManager.Instance.AveriaSerif, fontSize, color, true, Color.black, 400f, 60f, false).GetComponent<Text>(); component.alignment = (TextAnchor)4; return component; } public void SetTransactions(List<TransactionRecord> transactions, int totalCount, int totalPages) { _transactions = transactions ?? new List<TransactionRecord>(); _totalCount = totalCount; _totalPages = Math.Max(1, totalPages); RefreshDisplay(); } public void Refresh() { MarketRPCs.RequestGetTransactionHistory(_currentPlatformId, _currentPage, _pageSize); } public int GetCurrentPage() { return _currentPage; } public int GetPageSize() { return _pageSize; } public void SetCurrentPlatformId(string platformId) { _currentPlatformId = platformId; } private void RefreshDisplay() { //IL_00e3: Unknown result type (might be due to invalid IL or missing references) ClearTransactionRows(); bool flag = _transactions != null && _transactions.Count > 0; if ((Object)(object)_emptyText != (Object)null) { ((Component)_emptyText).gameObject.SetActive(!flag); } if (flag) { ScrollRect scrollRect = _scrollRect; RectTransform val = ((scrollRect != null) ? scrollRect.content : null); if ((Object)(object)val == (Object)null) { SimpleMarketPlugin.LogError("HistoryPanel: ScrollRect content is null, cannot display transactions"); return; } float num = 0f; foreach (TransactionRecord transaction in _transactions) { TransactionRow transactionRow = TransactionRow.Create(((Component)val).transform, transaction, _currentPlatformId); transactionRow.SetYPosition(num); _transactionRows.Add(transactionRow); num -= 70f; } val.sizeDelta = new Vector2(0f, Math.Abs(num)); } UpdatePagination(); } private void ClearTransactionRows() { foreach (TransactionRow transactionRow in _transactionRows) { if ((Object)(object)transactionRow != (Object)null) { Object.Destroy((Object)(object)((Component)transactionRow).gameObject); } } _transactionRows.Clear(); } private void UpdatePagination() { if ((Object)(object)_pageInfoText != (Object)null) { _pageInfoText.text = $"Page {_currentPage + 1} / {_totalPages}"; } if ((Object)(object)_prevButton != (Object)null) { ((Selectable)_prevButton).interactable = _currentPage > 0; } if ((Object)(object)_nextButton != (Object)null) { ((Selectable)_nextButton).interactable = _currentPage < _totalPages - 1; } } private void OnPrevPage() { if (_currentPage > 0) { _currentPage--; Refresh(); } } private void OnNextPage() { if (_currentPage < _totalPages - 1) { _currentPage++; Refresh(); } } private void OnDestroy() { ClearTransactionRows(); if ((Object)(object)_prevButton != (Object)null) { ((UnityEventBase)_prevButton.onClick).RemoveAllListeners(); } if ((Object)(object)_nextButton != (Object)null) { ((UnityEventBase)_nextButton.onClick).RemoveAllListeners(); } } } public class TransactionRow : MonoBehaviour { private GameObject _container; private Image _iconImage; private Text _descriptionText; private Text _priceText; private Text _timestampText; private SocketFrame _socketFrame; private Color? _socketColor; private TransactionRecord _transaction; private string _currentPlatformId; private bool _isBuyer; private const float RowHeight = 60f; private const float IconSize = 45f; private const float Padding = 8f; public static TransactionRow Create(Transform parent, TransactionRecord transaction, string currentPlatformId) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("TransactionRow"); val.transform.SetParent(parent, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 1f); obj.anchorMax = new Vector2(1f, 1f); obj.pivot = new Vector2(0.5f, 1f); obj.sizeDelta = new Vector2(-20f, 60f); ((Graphic)val.AddComponent<Image>()).color = new Color(0.15f, 0.15f, 0.15f, 0.7f); TransactionRow transactionRow = val.AddComponent<TransactionRow>(); transactionRow._container = val; transactionRow._currentPlatformId = currentPlatformId; transactionRow._transaction = transaction; transactionRow._isBuyer = transaction.IsBuyer(currentPlatformId); transactionRow.CreateUI(); transactionRow.UpdateDisplay(); return transactionRow; } private void CreateUI() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Expected O, but got Unknown //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: 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_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0128: 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) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Expected O, but got Unknown //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_025f: Expected O, but got Unknown //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_029c: Unknown result type (might be due to invalid IL or missing references) //IL_02b1: Unknown result type (might be due to invalid IL or missing references) //IL_02c6: Unknown result type (might be due to invalid IL or missing references) //IL_02da: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_0358: Unknown result type (might be due to invalid IL or missing references) //IL_0367: Unknown result type (might be due to invalid IL or missing references) //IL_036e: Expected O, but got Unknown //IL_0398: Unknown result type (might be due to invalid IL or missing references) //IL_03ad: Unknown result type (might be due to invalid IL or missing references) //IL_03c2: Unknown result type (might be due to invalid IL or missing references) //IL_03d7: Unknown result type (might be due to invalid IL or missing references) //IL_03eb: Unknown result type (might be due to invalid IL or missing references) //IL_0439: Unknown result type (might be due to invalid IL or missing references) //IL_0457: Unknown result type (might be due to invalid IL or missing references) //IL_046b: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("IconContainer"); val.transform.SetParent(_container.transform, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 0.5f); obj.anchorMax = new Vector2(0f, 0.5f); obj.pivot = new Vector2(0f, 0.5f); obj.anchoredPosition = new Vector2(8f, 0f); obj.sizeDelta = new Vector2(45f, 45f); ((Graphic)val.AddComponent<Image>()).color = new Color(0.1f, 0.1f, 0.1f, 0.8f); GameObject val2 = new GameObject("ItemIcon"); val2.transform.SetParent(val.transform, false); RectTransform obj2 = val2.AddComponent<RectTransform>(); obj2.anchorMin = Vector2.zero; obj2.anchorMax = Vector2.one; obj2.offsetMin = new Vector2(2f, 2f); obj2.offsetMax = new Vector2(-2f, -2f); _iconImage = val2.AddComponent<Image>(); ((Graphic)_iconImage).color = Color.white; _iconImage.preserveAspect = true; _socketFrame = SocketFrame.Create(val.transform, new Vector2(45f, 45f)); GameObject val3 = new GameObject("Description"); val3.transform.SetParent(_container.transform, false); RectTransform obj3 = val3.AddComponent<RectTransform>(); obj3.anchorMin = new Vector2(0f, 0f); obj3.anchorMax = new Vector2(1f, 1f); obj3.offsetMin = new Vector2(63f, 24f); obj3.offsetMax = new Vector2(-110f, -5f); _descriptionText = val3.AddComponent<Text>(); _descriptionText.font = GUIManager.Instance.AveriaSerifBold; _descriptionText.fontSize = 13; ((Graphic)_descriptionText).color = Color.white; _descriptionText.alignment = (TextAnchor)3; _descriptionText.supportRichText = true; Outline obj4 = val3.AddComponent<Outline>(); ((Shadow)obj4).effectColor = Color.black; ((Shadow)obj4).effectDistance = new Vector2(1f, -1f); GameObject val4 = new GameObject("Price"); val4.transform.SetParent(_container.transform, false); RectTransform obj5 = val4.AddComponent<RectTransform>(); obj5.anchorMin = new Vector2(1f, 0f); obj5.anchorMax = new Vector2(1f, 1f); obj5.pivot = new Vector2(1f, 0.5f); obj5.anchoredPosition = new Vector2(-8f, 0f); obj5.sizeDelta = new Vector2(100f, 0f); _priceText = val4.AddComponent<Text>(); _priceText.font = GUIManager.Instance.AveriaSerifBold; _priceText.fontSize = 14; ((Graphic)_priceText).color = new Color(1f, 0.85f, 0f); _priceText.alignment = (TextAnchor)5; Outline obj6 = val4.AddComponent<Outline>(); ((Shadow)obj6).effectColor = Color.black; ((Shadow)obj6).effectDistance = new Vector2(1f, -1f); GameObject val5 = new GameObject("Timestamp"); val5.transform.SetParent(_container.transform, false); RectTransform obj7 = val5.AddComponent<RectTransform>(); obj7.anchorMin = new Vector2(0f, 0f); obj7.anchorMax = new Vector2(1f, 0f); obj7.pivot = new Vector2(0f, 0f); obj7.anchoredPosition = new Vector2(63f, 8f); obj7.sizeDelta = new Vector2(-120f, 20f); _timestampText = val5.AddComponent<Text>(); _timestampText.font = GUIManager.Instance.AveriaSerif; _timestampText.fontSize = 11; ((Graphic)_timestampText).color = new Color(0.5f, 0.5f, 0.5f); _timestampText.alignment = (TextAnchor)3; Outline obj8 = val5.AddComponent<Outline>(); ((Shadow)obj8).effectColor = Color.black; ((Shadow)obj8).effectDistance = new Vector2(1f, -1f); } private void UpdateDisplay() { //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) if (_transaction != null) { _socketColor = GetSocketColorForTransaction(); string text = ((!string.IsNullOrEmpty(_transaction.LocalizedName)) ? _transaction.LocalizedName : ItemHelper.GetLocalizedName(_transaction.ItemPrefabName)); if (_transaction.Quality > 1) { text = text + " " + _transaction.GetQualityStars(); } string otherPartyName = _transaction.GetOtherPartyName(_currentPlatformId); string text2 = ((!_socketColor.HasValue) ? text : ("<color=#" + ColorUtility.ToHtmlStringRGB(_socketColor.Value) + ">" + text + "</color>")); string arg = ((_transaction.TotalPrice == 1) ? "coin" : "coins"); if (_isBuyer) { _descriptionText.text = $"You purchased {_transaction.Quantity}x {text2} from {otherPartyName}"; ((Graphic)_descriptionText).color = new Color(0.7f, 0.9f, 1f); _priceText.text = $"-{_transaction.TotalPrice:N0} {arg}"; ((Graphic)_priceText).color = new Color(1f, 0.5f, 0.5f); } else { _descriptionText.text = $"{otherPartyName} purchased your {_transaction.Quantity}x {text2}"; ((Graphic)_descriptionText).color = new Color(0.7f, 1f, 0.7f); _priceText.text = $"+{_transaction.TotalPrice:N0} {arg}"; ((Graphic)_priceText).color = new Color(0.5f, 1f, 0.5f); } _timestampText.text = _transaction.GetAgeString(); LoadItemIcon(); } } private Color? GetSocketColorForTransaction() { if (_transaction == null) { return null; } ItemData val = ItemHelper.CreateItemFromTransaction(_transaction); if (val != null) { return JewelcraftingCompat.GetSocketColor(val); } return null; } private void LoadItemIcon() { //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) if (_transaction == null || (Object)(object)_iconImage == (Object)null) { return; } try { Sprite itemIcon = ItemHelper.GetItemIcon(_transaction.ItemPrefabName); if ((Object)(object)itemIcon != (Object)null) { _iconImage.sprite = itemIcon; ((Graphic)_iconImage).color = Color.white; ApplySocketFrame(); return; } } catch (Exception ex) { SimpleMarketPlugin.LogDebug("Failed to load icon for " + _transaction.ItemPrefabName + ": " + ex.Message); } _iconImage.sprite = null; ((Graphic)_iconImage).color = new Color(0.3f, 0.3f, 0.3f); _socketFrame?.Hide(); } private void ApplySocketFrame() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_socketFrame == (Object)null)) { if (_socketColor.HasValue) { _socketFrame.Show(_socketColor.Value); } else { _socketFrame.Hide(); } } } public void SetYPosition(float y) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) RectTransform component = _container.GetComponent<RectTransform>(); if ((Object)(object)component != (Object)null) { component.anchoredPosition = new Vector2(0f, y); } } } public class ListingPanel : MonoBehaviour, IPointerEnterHandler, IEventSystemHandler, IPointerExitHandler { private GameObject _container; private Image _iconImage; private Text _itemNameText; private Text _quantityText; private Text _priceText; private Text _sellerText; private Text _ageText; private Button _actionButton; private Text _actionButtonText; private InputField _quantityInput; private GameObject _quantityInputContainer; private SocketFrame _socketFrame; private MarketListing _listing; private bool _isOwnListing; private string _currentPlatformId; private Color? _socketColor; private const float PanelHeight = 70f; private const float IconSize = 50f; private const float Padding = 10f; public event Action<MarketListing> OnBuyClicked; public event Action<MarketListing> OnCancelClicked; public event Action<MarketListing, int> OnBuyPartialClicked; public static ListingPanel Create(Transform parent, MarketListing listing, string currentPlatformId) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("ListingPanel"); val.transform.SetParent(parent, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 1f); obj.anchorMax = new Vector2(1f, 1f); obj.pivot = new Vector2(0.5f, 1f); obj.sizeDelta = new Vector2(-20f, 70f); ((Graphic)val.AddComponent<Image>()).color = new Color(0.15f, 0.15f, 0.15f, 0.7f); ListingPanel listingPanel = val.AddComponent<ListingPanel>(); listingPanel._container = val; listingPanel._currentPlatformId = currentPlatformId; listingPanel.CreateUI(); listingPanel.SetListing(listing); return listingPanel; } private void CreateUI() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Expected O, but got Unknown //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: 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_010c: Unknown result type (might be due to invalid IL or missing references) //IL_0128: 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) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_021f: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_026f: Unknown result type (might be due to invalid IL or missing references) //IL_028f: Unknown result type (might be due to invalid IL or missing references) //IL_02b0: Unknown result type (might be due to invalid IL or missing references) //IL_02bf: Unknown result type (might be due to invalid IL or missing references) //IL_02df: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("IconContainer"); val.transform.SetParent(_container.transform, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 0.5f); obj.anchorMax = new Vector2(0f, 0.5f); obj.pivot = new Vector2(0f, 0.5f); obj.anchoredPosition = new Vector2(10f, 0f); obj.sizeDelta = new Vector2(50f, 50f); ((Graphic)val.AddComponent<Image>()).color = new Color(0.1f, 0.1f, 0.1f, 0.8f); GameObject val2 = new GameObject("ItemIcon"); val2.transform.SetParent(val.transform, false); RectTransform obj2 = val2.AddComponent<RectTransform>(); obj2.anchorMin = Vector2.zero; obj2.anchorMax = Vector2.one; obj2.offsetMin = new Vector2(2f, 2f); obj2.offsetMax = new Vector2(-2f, -2f); _iconImage = val2.AddComponent<Image>(); ((Graphic)_iconImage).color = Color.white; _iconImage.preserveAspect = true; _socketFrame = SocketFrame.Create(val.transform, new Vector2(50f, 50f)); _itemNameText = CreateText("ItemName", new Vector2(199f, 15f), new Vector2(0f, 0.5f), 260f, 25f, 16, GUIManager.Instance.ValheimOrange, (TextAnchor)3); if ((Object)(object)_itemNameText != (Object)null) { _itemNameText.supportRichText = true; } _sellerText = CreateText("Seller", new Vector2(131f, -10f), new Vector2(0f, 0.5f), 120f, 20f, 12, new Color(0.7f, 0.7f, 0.7f), (TextAnchor)3); _quantityText = CreateText("Quantity", new Vector2(335f, -10f), new Vector2(0f, 0.5f), 80f, 20f, 14, Color.white, (TextAnchor)3); _priceText = CreateText("Price", new Vector2(430f, 0f), new Vector2(0f, 0.5f), 130f, 25f, 16, new Color(1f, 0.85f, 0f), (TextAnchor)4); _ageText = CreateText("Age", new Vector2(-180f, -10f), new Vector2(1f, 0.5f), 100f, 20f, 11, new Color(0.5f, 0.5f, 0.5f), (TextAnchor)5); CreateQuantityInput(); CreateActionButton(); } private Text CreateText(string name, Vector2 position, Vector2 anchor, float width, float height, int fontSize, Color color, TextAnchor alignment) { //IL_0015: 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) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0027: 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) GameObject obj = GUIManager.Instance.CreateText("", _container.transform, anchor, anchor, position, GUIManager.Instance.AveriaSerifBold, fontSize, color, true, Color.black, width, height, false); ((Object)obj).name = name; Text component = obj.GetComponent<Text>(); if ((Object)(object)component != (Object)null) { component.alignment = alignment; } return component; } private void CreateQuantityInput() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) _quantityInputContainer = new GameObject("QuantityInputContainer"); _quantityInputContainer.transform.SetParent(_container.transform, false); RectTransform obj = _quantityInputContainer.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(1f, 0.5f); obj.anchorMax = new Vector2(1f, 0.5f); obj.pivot = new Vector2(1f, 0.5f); obj.anchoredPosition = new Vector2(-120f, 10f); obj.sizeDelta = new Vector2(70f, 30f); GUIManager.Instance.CreateText("Buy:", _quantityInputContainer.transform, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(-25f, 0f), GUIManager.Instance.AveriaSerif, 12, Color.white, false, Color.black, 30f, 20f, false); GameObject val = GUIManager.Instance.CreateInputField(_quantityInputContainer.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(-2f, 0f), (ContentType)2, "1", 12, 50f, 25f); _quantityInput = val.GetComponent<InputField>(); _quantityInputContainer.SetActive(false); } private void CreateActionButton() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Expected O, but got Unknown GameObject val = GUIManager.Instance.CreateButton("Buy", _container.transform, new Vector2(1f, 0.5f), new Vector2(1f, 0.5f), new Vector2(-55f, 0f), 80f, 35f); ((Object)val).name = "ActionButton"; _actionButton = val.GetComponent<Button>(); _actionButtonText = val.GetComponentInChildren<Text>(); if ((Object)(object)_actionButton != (Object)null) { ((UnityEvent)_actionButton.onClick).AddListener(new UnityAction(OnActionButtonClicked)); } } public void SetListing(MarketListing listing) { _listing = listing; _isOwnListing = listing.SellerPlatformId == _currentPlatformId; UpdateDisplay(); } private void UpdateDisplay() { //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) if (_listing == null) { return; } _socketColor = GetSocketColorForListing(); string text = GetLocalizedItemName(_listing.ItemPrefabName); if (_listing.Quality > 1) { text += $" ★{_listing.Quality}"; } if (_socketColor.HasValue) { _itemNameText.text = "<color=#" + ColorUtility.ToHtmlStringRGB(_socketColor.Value) + ">" + text + "</color>"; } else { _itemNameText.text = text; ((Graphic)_itemNameText).color = GUIManager.Instance.ValheimOrange; } _quantityText.text = $"x{_listing.Quantity}"; if (_listing.Quantity == 1) { _priceText.text = $"{_listing.Price:N0} coins"; } else { int totalPrice = _listing.GetTotalPrice(); _priceText.text = $"{totalPrice:N0} coins (stack)"; } _sellerText.text = "Seller: " + _listing.SellerName; _ageText.text = _listing.GetAgeString(); if (_isOwnListing) { _actionButtonText.text = "Cancel"; _quantityInputContainer.SetActive(false); } else { _actionButtonText.text = "Buy"; _quantityInputContainer.SetActive(_listing.Quantity > 1 && _listing.AllowsPartialPurchase()); if ((Object)(object)_quantityInput != (Object)null) { _quantityInput.text = _listing.Quantity.ToString(); } } LoadItemIcon(); } private void LoadItemIcon() { //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) if (_listing == null || (Object)(object)_iconImage == (Object)null) { return; } try { ZNetScene instance = ZNetScene.instance; GameObject val = ((instance != null) ? instance.GetPrefab(_listing.ItemPrefabName) : null); if ((Object)(object)val != (Object)null) { ItemDrop component = val.GetComponent<ItemDrop>(); if ((Object)(object)component != (Object)null) { Sprite icon = component.m_itemData.GetIcon(); if ((Object)(object)icon != (Object)null) { _iconImage.sprite = icon; ((Graphic)_iconImage).color = Color.white; ApplySocketFrame(); return; } } } } catch (Exception ex) { SimpleMarketPlugin.LogDebug("Failed to load icon for " + _listing.ItemPrefabName + ": " + ex.Message); } _iconImage.sprite = null; ((Graphic)_iconImage).color = new Color(0.3f, 0.3f, 0.3f); _socketFrame?.Hide(); } private Color? GetSocketColorForListing() { if (_listing == null) { return null; } ItemData val = ItemHelper.CreateItemFromListing(_listing); if (val != null) { return JewelcraftingCompat.GetSocketColor(val); } return null; } private void ApplySocketFrame() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)_socketFrame == (Object)null)) { if (_socketColor.HasValue) { _socketFrame.Show(_socketColor.Value); } else { _socketFrame.Hide(); } } } private string GetLocalizedItemName(string prefabName) { return ItemHelper.GetLocalizedName(prefabName); } private void OnActionButtonClicked() { if (_listing != null) { int result; if (_isOwnListing) { this.OnCancelClicked?.Invoke(_listing); } else if (_quantityInputContainer.activeSelf && (Object)(object)_quantityInput != (Object)null && int.TryParse(_quantityInput.text, out result) && result > 0 && result < _listing.Quantity) { this.OnBuyPartialClicked?.Invoke(_listing, result); } else { this.OnBuyClicked?.Invoke(_listing); } } } public void OnPointerEnter(PointerEventData eventData) { if (_listing != null) { MarketListing listing = _listing; Transform transform = _container.transform; MarketTooltip.ShowTooltip(listing, (RectTransform)(object)((transform is RectTransform) ? transform : null)); } } public void OnPointerExit(PointerEventData eventData) { MarketTooltip.HideTooltip(); } public void SetYPosition(float y) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) RectTransform component = _container.GetComponent<RectTransform>(); if ((Object)(object)component != (Object)null) { component.anchoredPosition = new Vector2(0f, y); } } public float GetHeight() { return 70f; } private void OnDestroy() { if ((Object)(object)_actionButton != (Object)null) { ((UnityEventBase)_actionButton.onClick).RemoveAllListeners(); } } } public class ListingsScrollView : MonoBehaviour { private GameObject _container; private GameObject _scrollArea; private ScrollRect _scrollRect; private RectTransform _contentRect; private GameObject _noListingsText; private GameObject _loadingText; private GameObject _paginationPanel; private Button _prevButton; private Button _nextButton; private Text _pageText; private GameObject _controlsPanel; private Dropdown _sortDropdown; private InputField _searchInput; private List<ListingPanel> _listingPanels = new List<ListingPanel>(); private List<MarketListing> _currentListings = new List<MarketListing>(); private string _currentPlatformId; private int _currentPage = 1; private int _totalPages = 1; private int _listingsPerPage = 10; private const float ListingHeight = 75f; private const float ListingSpacing = 5f; public event Action<MarketListing> OnBuyClicked; public event Action<MarketListing> OnCancelClicked; public event Action<MarketListing, int> OnBuyPartialClicked; public event Action<int> OnPageChanged; public static ListingsScrollView Create(Transform parent, RectTransform bounds) { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("ListingsScrollView"); val.transform.SetParent(parent, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = bounds.anchorMin; obj.anchorMax = bounds.anchorMax; obj.offsetMin = bounds.offsetMin; obj.offsetMax = bounds.offsetMax; ListingsScrollView listingsScrollView = val.AddComponent<ListingsScrollView>(); listingsScrollView._container = val; listingsScrollView._listingsPerPage = SimpleMarketConfig.ListingsPerPage.Value; listingsScrollView.CreateUI(); return listingsScrollView; } private void CreateUI() { CreateControlsPanel(); CreateScrollArea(); CreatePaginationPanel(); CreateNoListingsText(); CreateLoadingText(); } private void CreateControlsPanel() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_028c: Unknown result type (might be due to invalid IL or missing references) //IL_029b: Unknown result type (might be due to invalid IL or missing references) //IL_02ac: Unknown result type (might be due to invalid IL or missing references) //IL_02b2: Unknown result type (might be due to invalid IL or missing references) //IL_02eb: Unknown result type (might be due to invalid IL or missing references) //IL_02fa: Unknown result type (might be due to invalid IL or missing references) //IL_0309: Unknown result type (might be due to invalid IL or missing references) _controlsPanel = new GameObject("ControlsPanel"); _controlsPanel.transform.SetParent(_container.transform, false); RectTransform obj = _controlsPanel.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 1f); obj.anchorMax = new Vector2(1f, 1f); obj.pivot = new Vector2(0.5f, 1f); obj.anchoredPosition = new Vector2(0f, 0f); obj.sizeDelta = new Vector2(0f, 35f); ((Object)GUIManager.Instance.CreateText("Sort:", _controlsPanel.transform, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(30f, 0f), GUIManager.Instance.AveriaSerif, 13, Color.white, false, Color.black, 40f, 25f, false)).name = "SortLabel"; GameObject val = GUIManager.Instance.CreateDropDown(_controlsPanel.transform, new Vector2(0f, 0.5f), new Vector2(0f, 0.5f), new Vector2(120f, 0f), 12, 110f, 28f); ((Object)val).name = "SortDropdown"; _sortDropdown = val.GetComponent<Dropdown>(); if ((Object)(object)_sortDropdown != (Object)null) { _sortDropdown.ClearOptions(); _sortDropdown.AddOptions(new List<string> { "Newest", "Oldest", "Price: Low", "Price: High", "Name A-Z" }); int value = SimpleMarketConfig.DefaultSortMode.Value switch { "Oldest" => 1, "PriceLow" => 2, "PriceHigh" => 3, "Name" => 4, _ => 0, }; _sortDropdown.value = value; ((UnityEvent<int>)(object)_sortDropdown.onValueChanged).AddListener((UnityAction<int>)OnSortChanged); } ((Object)GUIManager.Instance.CreateText("Search:", _controlsPanel.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(20f, 0f), GUIManager.Instance.AveriaSerif, 13, Color.white, false, Color.black, 55f, 25f, false)).name = "SearchLabel"; GameObject val2 = GUIManager.Instance.CreateInputField(_controlsPanel.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(140f, 0f), (ContentType)0, "Item name...", 12, 150f, 28f); ((Object)val2).name = "SearchInput"; _searchInput = val2.GetComponent<InputField>(); if ((Object)(object)_searchInput != (Object)null) { ((UnityEvent<string>)(object)_searchInput.onEndEdit).AddListener((UnityAction<string>)OnSearchChanged); } } private void CreateScrollArea() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Expected O, but got Unknown //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Expected O, but got Unknown _scrollArea = new GameObject("ScrollArea"); _scrollArea.transform.SetParent(_container.transform, false); RectTransform obj = _scrollArea.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 0f); obj.anchorMax = new Vector2(1f, 1f); obj.offsetMin = new Vector2(5f, 45f); obj.offsetMax = new Vector2(-25f, -40f); ((Graphic)_scrollArea.AddComponent<Image>()).color = new Color(0f, 0f, 0f, 0.2f); _scrollArea.AddComponent<Mask>().showMaskGraphic = true; _scrollRect = _scrollArea.AddComponent<ScrollRect>(); _scrollRect.horizontal = false; _scrollRect.vertical = true; _scrollRect.movementType = (MovementType)2; _scrollRect.scrollSensitivity = 80f; GameObject val = new GameObject("Content"); val.transform.SetParent(_scrollArea.transform, false); _contentRect = val.AddComponent<RectTransform>(); _contentRect.anchorMin = new Vector2(0f, 1f); _contentRect.anchorMax = new Vector2(1f, 1f); _contentRect.pivot = new Vector2(0.5f, 1f); _contentRect.anchoredPosition = Vector2.zero; _contentRect.sizeDelta = new Vector2(0f, 0f); _scrollRect.content = _contentRect; val.AddComponent<ContentSizeFitter>().verticalFit = (FitMode)2; VerticalLayoutGroup obj2 = val.AddComponent<VerticalLayoutGroup>(); ((HorizontalOrVerticalLayoutGroup)obj2).spacing = 5f; ((LayoutGroup)obj2).padding = new RectOffset(5, 5, 5, 5); ((HorizontalOrVerticalLayoutGroup)obj2).childForceExpandWidth = true; ((HorizontalOrVerticalLayoutGroup)obj2).childForceExpandHeight = false; ((HorizontalOrVerticalLayoutGroup)obj2).childControlWidth = true; ((HorizontalOrVerticalLayoutGroup)obj2).childControlHeight = false; CreateVerticalScrollbar(); } private void CreateVerticalScrollbar() { //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Expected O, but got Unknown //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0048: 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_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_009c: 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) //IL_00d4: 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_00f7: Expected O, but got Unknown //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_016a: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_017d: 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_0193: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01d9: Unknown result type (might be due to invalid IL or missing references) GameObject val = new GameObject("VerticalScrollbar"); val.transform.SetParent(_container.transform, false); RectTransform obj = val.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(1f, 0f); obj.anchorMax = new Vector2(1f, 1f); obj.pivot = new Vector2(1f, 0.5f); obj.anchoredPosition = new Vector2(-5f, 0f); obj.sizeDelta = new Vector2(15f, -85f); obj.offsetMin = new Vector2(-20f, 45f); obj.offsetMax = new Vector2(-5f, -40f); ((Graphic)val.AddComponent<Image>()).color = new Color(0.15f, 0.15f, 0.15f, 0.8f); Scrollbar val2 = val.AddComponent<Scrollbar>(); val2.direction = (Direction)2; GameObject val3 = new GameObject("SlidingArea"); val3.transform.SetParent(val.transform, false); RectTransform obj2 = val3.AddComponent<RectTransform>(); obj2.anchorMin = Vector2.zero; obj2.anchorMax = Vector2.one; obj2.offsetMin = new Vector2(2f, 2f); obj2.offsetMax = new Vector2(-2f, -2f); GameObject val4 = new GameObject("Handle"); val4.transform.SetParent(val3.transform, false); RectTransform val5 = val4.AddComponent<RectTransform>(); val5.anchorMin = Vector2.zero; val5.anchorMax = Vector2.one; val5.offsetMin = Vector2.zero; val5.offsetMax = Vector2.zero; Image val6 = val4.AddComponent<Image>(); ((Graphic)val6).color = new Color(0.5f, 0.45f, 0.35f, 1f); val2.handleRect = val5; ((Selectable)val2).targetGraphic = (Graphic)(object)val6; ((Selectable)val2).colors = GUIManager.Instance.ValheimScrollbarHandleColorBlock; _scrollRect.verticalScrollbar = val2; _scrollRect.verticalScrollbarVisibility = (ScrollbarVisibility)2; } private void CreatePaginationPanel() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Expected O, but got Unknown //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00be: 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_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Expected O, but got Unknown //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01fb: Unknown result type (might be due to invalid IL or missing references) //IL_020a: 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_0260: Expected O, but got Unknown _paginationPanel = new GameObject("PaginationPanel"); _paginationPanel.transform.SetParent(_container.transform, false); RectTransform obj = _paginationPanel.AddComponent<RectTransform>(); obj.anchorMin = new Vector2(0f, 0f); obj.anchorMax = new Vector2(1f, 0f); obj.pivot = new Vector2(0.5f, 0f); obj.anchoredPosition = new Vector2(0f, 5f); obj.sizeDelta = new Vector2(0f, 35f); GameObject val = GUIManager.Instance.CreateButton("< Prev", _paginationPanel.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(-100f, 0f), 70f, 28f); ((Object)val).name = "PrevButton"; _prevButton = val.GetComponent<Button>(); if ((Object)(object)_prevButton != (Object)null) { ((UnityEvent)_prevButton.onClick).AddListener(new UnityAction(OnPrevPage)); } GameObject val2 = GUIManager.Instance.CreateText("Page 1 of 1", _paginationPanel.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 0f), GUIManager.Instance.AveriaSerif, 14, Color.white, false, Color.black, 100f, 25f, false); ((Object)val2).name = "PageText"; _pageText = val2.GetComponent<Text>(); if ((Object)(object)_pageText != (Object)null) { _pageText.alignment = (TextAnchor)4; } GameObject val3 = GUIManager.Instance.CreateButton("Next >", _paginationPanel.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(100f, 0f), 70f, 28f); ((Object)val3).name = "NextButton"; _nextButton = val3.GetComponent<Button>(); if ((Object)(object)_nextButton != (Object)null) { ((UnityEvent)_nextButton.onClick).AddListener(new UnityAction(OnNextPage)); } } private void CreateNoListingsText() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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) //IL_0064: Unknown result type (might be due to invalid IL or missing references) _noListingsText = GUIManager.Instance.CreateText("No listings found\n\nBe the first to list an item!", _scrollArea.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 0f), GUIManager.Instance.AveriaSerif, 16, new Color(0.6f, 0.6f, 0.6f), false, Color.black, 300f, 100f, false); ((Object)_noListingsText).name = "NoListingsText"; Text component = _noListingsText.GetComponent<Text>(); if ((Object)(object)component != (Object)null) { component.alignment = (TextAnchor)4; } _noListingsText.SetActive(false); } private void CreateLoadingText() { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_003e: 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) //IL_0064: Unknown result type (might be due to invalid IL or missing references) _loadingText = GUIManager.Instance.CreateText("Loading listings...", _scrollArea.transform, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(0f, 0f), GUIManager.Instance.AveriaSerif, 16, new Color(0.8f, 0.8f, 0.8f), false, Color.black, 200f, 30f, false); ((Object)_loadingText).name = "LoadingText"; Text component = _loadingText.GetComponent<Text>(); if ((Object)(object)component != (Object)null) { component.alignment = (TextAnchor)4; } _loadingText.SetActive(false); } public void SetCurrentPlatformId(string platformId) { _currentPlatformId = platformId; } public void SetListings(List<MarketListing> listings, int totalCount, int totalPages) { _currentListings = listings ?? new List<MarketListing>(); _totalPages = Math.Max(1, totalPages); if (_currentPage > _totalPages) { _currentPage = _totalPages; } RefreshDisplay(); } public void ShowLoading() { ClearListingPanels(); _loadingText.SetActive(tr