Please disclose if any significant portion of your mod was created 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 REPOConomy v1.2.4
plugins/REPOConomy.dll
Decompiled 10 months agousing System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using BepInEx.Configuration; using BepInEx.Logging; using ExitGames.Client.Photon; using HarmonyLib; using Microsoft.CodeAnalysis; using Newtonsoft.Json; using Photon.Pun; using Photon.Realtime; using UnityEngine; using UnityEngine.SceneManagement; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyCompany("REPOConomy")] [assembly: AssemblyConfiguration("Release")] [assembly: AssemblyFileVersion("1.0.0.0")] [assembly: AssemblyInformationalVersion("1.0.0")] [assembly: AssemblyProduct("REPOConomy")] [assembly: AssemblyTitle("REPOConomy")] [assembly: AssemblyVersion("1.0.0.0")] [module: RefSafetyRules(11)] namespace Microsoft.CodeAnalysis { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] internal sealed class EmbeddedAttribute : Attribute { } } namespace System.Runtime.CompilerServices { [CompilerGenerated] [Microsoft.CodeAnalysis.Embedded] [AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)] internal sealed class RefSafetyRulesAttribute : Attribute { public readonly int Version; public RefSafetyRulesAttribute(int P_0) { Version = P_0; } } } namespace REPOConomyMod { [Serializable] public class CustomEconomyData { public string id; public string name_en; public string name_ru; public string desc_en; public string desc_ru; public float[] color; public float min; public float max; public bool useDelta; } public static class CustomEconomyLoader { public static List<CustomEconomyData> CustomEvents = new List<CustomEconomyData>(); public static void LoadCustomEvents() { string text = Path.Combine(Paths.ConfigPath, "CustomEvents"); if (!Directory.Exists(text)) { Directory.CreateDirectory(text); REPOConomyPlugin.Logger.LogInfo((object)("[REPOConomy] Created folder for custom events: " + text)); } string[] files = Directory.GetFiles(text, "*.json", SearchOption.TopDirectoryOnly); int num = 0; int num2 = 0; string[] array = files; foreach (string text2 in array) { try { List<CustomEconomyData> list = JsonConvert.DeserializeObject<List<CustomEconomyData>>(File.ReadAllText(text2)); if (list != null) { foreach (CustomEconomyData item in list) { if (!string.IsNullOrEmpty(item.id)) { CustomEvents.Add(item); REPOConomyPlugin.Logger.LogInfo((object)("[REPOConomy] Loaded custom event: " + item.name_en + " (" + text2 + ")")); num++; } else { REPOConomyPlugin.Logger.LogWarning((object)("[REPOConomy] Invalid custom event in file: " + text2 + " (missing ID)")); num2++; } } } else { REPOConomyPlugin.Logger.LogWarning((object)("[REPOConomy] JSON file does not contain a valid event list: " + text2)); num2++; } } catch (Exception ex) { REPOConomyPlugin.Logger.LogWarning((object)("[REPOConomy] Failed to load custom event from " + text2 + ": " + ex.Message)); num2++; } } REPOConomyPlugin.Logger.LogInfo((object)$"[REPOConomy] Loaded {num} custom events. Failed: {num2}"); } } public class EconomyController : MonoBehaviour { public static EconomyController Instance; public static bool UIShownOnce; private bool economyResetPending = true; private bool showGUI; private float displayTimer = 8f; private string lastSceneType = ""; private void Awake() { Instance = this; } private void Update() { if (Input.GetKeyDown((KeyCode)103)) { showGUI = !showGUI; displayTimer = 8f; } string currentSceneType = GetCurrentSceneType(); if (currentSceneType != lastSceneType) { lastSceneType = currentSceneType; if ((currentSceneType == "Level" || currentSceneType == "Lobby") ? true : false) { economyResetPending = true; UIShownOnce = false; showGUI = false; } } bool flag = economyResetPending; if (flag) { bool flag2 = ((currentSceneType == "Level" || currentSceneType == "Lobby") ? true : false); flag = flag2; } if (flag) { REPOConomyPlugin.ResetEconomy(); economyResetPending = false; } if (showGUI && REPOConomyPlugin.HasEconomy && currentSceneType == "Level") { displayTimer -= Time.deltaTime; if (displayTimer <= 0f) { showGUI = false; } } } private string GetCurrentSceneType() { if (SemiFunc.RunIsLevel()) { return "Level"; } if (SemiFunc.RunIsLobby()) { return "Lobby"; } return "Other"; } public void ResetGUI() { showGUI = true; displayTimer = 8f; } public void ShowGUI() { showGUI = true; displayTimer = 8f; } private float ClampToStep(float value, float step = 0.1f) { return Mathf.Round(value / step) * step; } private void OnGUI() { //IL_0185: Unknown result type (might be due to invalid IL or missing references) //IL_018a: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Expected O, but got Unknown //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Expected O, but got Unknown //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01ed: Expected O, but got Unknown //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Expected O, but got Unknown //IL_01fe: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0219: Expected O, but got Unknown //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_02a9: Unknown result type (might be due to invalid IL or missing references) //IL_02d2: Unknown result type (might be due to invalid IL or missing references) if (showGUI && REPOConomyPlugin.HasEconomy && SemiFunc.RunIsLevel()) { int currentLevel = REPOConomyPlugin.GetCurrentLevel(); float num3; float num4; if (PhotonNetwork.IsMasterClient) { float num = ClampToStep(REPOConfig.LevelScaleMin.Value); float num2 = ClampToStep(REPOConfig.LevelScaleMax.Value); num3 = (float)(currentLevel - 1) * num; num4 = (float)(currentLevel - 1) * num2; } else { num3 = REPOConomyPlugin.ClientDeltaMin; num4 = REPOConomyPlugin.ClientDeltaMax; } string economyName = REPOConomyPlugin.GetEconomyName(); string text = REPOConomyPlugin.MinPercent.ToString("+#0.##;-#0.##;0"); string text2 = REPOConomyPlugin.MaxPercent.ToString("+#0.##;-#0.##;0"); string text3 = UILocalization.Get("UI_Event") + ": " + economyName; string text4 = UILocalization.Get("UI_Range") + ": " + text + "% - " + text2 + "%"; string text5 = (Mathf.Approximately(num3, num4) ? string.Format("{0}: {1} ({2:+0.##;-0.##;0}%)", UILocalization.Get("UI_Level"), currentLevel, num3) : string.Format("{0}: {1} ({2:+0.##;-0.##;0}% {3:+0.##;-0.##;0}%)", UILocalization.Get("UI_Level"), currentLevel, num3, num4)); string economyFlavor = REPOConomyPlugin.GetEconomyFlavor(); float num5 = (float)Screen.width / 2f; float num6 = (float)Screen.height * 0.15f; GUIStyle val = new GUIStyle(GUI.skin.label) { fontSize = 26, fontStyle = (FontStyle)1, alignment = (TextAnchor)1, richText = true, wordWrap = true }; val.normal.textColor = REPOConomyPlugin.CurrentEconomyColor; float num7 = Mathf.Clamp(Mathf.Max(new float[4] { val.CalcSize(new GUIContent(text3)).x, val.CalcSize(new GUIContent(text4)).x, val.CalcSize(new GUIContent(text5)).x, val.CalcSize(new GUIContent(economyFlavor)).x }) + 40f, 400f, (float)Screen.width * 0.9f); DropShadowLabel(new Rect(num5 - num7 / 2f, num6, num7, 40f), text3, val); DropShadowLabel(new Rect(num5 - num7 / 2f, num6 + 30f, num7, 35f), text4, val); DropShadowLabel(new Rect(num5 - num7 / 2f, num6 + 60f, num7, 35f), text5, val); DropShadowLabel(new Rect(num5 - num7 / 2f, num6 + 90f, num7, 50f), economyFlavor, val); } } private void DropShadowLabel(Rect position, string content, GUIStyle style) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) Color textColor = style.normal.textColor; style.normal.textColor = Color.black; GUI.Label(new Rect(((Rect)(ref position)).x + 2f, ((Rect)(ref position)).y + 2f, ((Rect)(ref position)).width, ((Rect)(ref position)).height), content, style); style.normal.textColor = textColor; GUI.Label(position, content, style); } } public static class REPOConfig { public static ConfigEntry<float> DefaultBaseMin; public static ConfigEntry<float> DefaultBaseMax; public static ConfigEntry<float> LevelScaleMin; public static ConfigEntry<float> LevelScaleMax; public static ConfigEntry<float> MinClampLimit; public static ConfigEntry<float> MaxClampLimit; public static ConfigEntry<bool> ForceStableEconomy; public static ConfigEntry<int> EventStartLevel; public static ConfigEntry<bool> UseEventChance; public static ConfigEntry<int> EventChance; public static ConfigEntry<bool> ShowTotalMapValue; public static ConfigEntry<bool> UseSeparateModifiers; public static ConfigEntry<string> UILanguage; public static ConfigEntry<string> RollMode; public static ConfigEntry<bool> EnableCustomEvents; public static ConfigEntry<bool> DisableVanillaEvents; public static ConfigEntry<bool> UseCustomEventChance; public static ConfigEntry<int> CustomEventChance; public static void Init(ConfigFile config) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Expected O, but got Unknown //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Expected O, but got Unknown //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Expected O, but got Unknown //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Expected O, but got Unknown //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_014a: Expected O, but got Unknown //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Expected O, but got Unknown //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Expected O, but got Unknown //IL_01dd: Unknown result type (might be due to invalid IL or missing references) //IL_01e7: Expected O, but got Unknown //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_0281: Expected O, but got Unknown //IL_02c0: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Expected O, but got Unknown //IL_031f: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Expected O, but got Unknown DefaultBaseMin = config.Bind<float>("Economy", "DefaultBaseMin", 5f, new ConfigDescription("Base minimum (-%) value without modifiers.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), Array.Empty<object>())); DefaultBaseMax = config.Bind<float>("Economy", "DefaultBaseMax", 10f, new ConfigDescription("Base maximum (+%) value without modifiers.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), Array.Empty<object>())); UseSeparateModifiers = config.Bind<bool>("Economy", "UseTwoStepPercentRoll", false, "Use separate positive and negative percent rolls. Result = (base - rollMin) + rollMax."); RollMode = config.Bind<string>("Economy", "PercentRollMode", "Random", new ConfigDescription("Determines weighed percentage RNG: Random = Uniform (Flat), Stable = Near center (Bell curve), Volatile = Near Min/Max (Inverse bell curve), Dynamic (Changes per level)", (AcceptableValueBase)(object)new AcceptableValueList<string>(new string[4] { "Random", "Stable", "Volatile", "Dynamic" }), Array.Empty<object>())); LevelScaleMin = config.Bind<float>("LevelScale", "LevelScaleMin", 1f, new ConfigDescription("How much to add to the minimum (-%) for each level.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), Array.Empty<object>())); LevelScaleMax = config.Bind<float>("LevelScale", "LevelScaleMax", 1f, new ConfigDescription("How much to add to the maximum (+%) for each level.", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), Array.Empty<object>())); MinClampLimit = config.Bind<float>("Limit", "ClampMinLimit", 100f, new ConfigDescription("Maximum reduction limit (for example: -100%).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 500f), Array.Empty<object>())); MaxClampLimit = config.Bind<float>("Limit", "ClampMaxLimit", 1000f, new ConfigDescription("Maximum increase limit (for example: +1000%).", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 10000f), Array.Empty<object>())); EventStartLevel = config.Bind<int>("Events", "EventsStartLevel", 2, new ConfigDescription("At what level will events start (1–12). 1 = immediately, 2 = from the second level, etc.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 12), Array.Empty<object>())); ForceStableEconomy = config.Bind<bool>("Events", "NoEvents", false, "Force enable a stable economy (without events)."); DisableVanillaEvents = config.Bind<bool>("Events", "DisableVanillaEvents", false, "If true, disables all built-in vanilla events. Only custom events will be used, if EnableCustomEvents enabled."); EnableCustomEvents = config.Bind<bool>("Events", "EnableCustomEvents", true, "Enable loading of custom economy events from JSON files to appear in-game."); UseEventChance = config.Bind<bool>("EventsChance", "UseEventsChance", true, "Enable the event drop system based on chance."); EventChance = config.Bind<int>("EventsChance", "EventChance", 50, new ConfigDescription("Chance (1–100) for an event to occur instead of a stable economy.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), Array.Empty<object>())); UseCustomEventChance = config.Bind<bool>("Custom Events Chance", "UseCustomEventChance", true, "Enable a separate chance check for custom events (only applies if UseEventsChance is true). If this feature is disabled, there will be a 50/50 chance of either a vanilla event or a custom event occurring."); CustomEventChance = config.Bind<int>("Custom Events Chance", "CustomEventChance", 50, new ConfigDescription("Chance (1–100%) for custom events to occur instead of vanilla events if UseCustomEventChance is enabled.", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 100), Array.Empty<object>())); ShowTotalMapValue = config.Bind<bool>("Debug", "ShowTotalMapValue", false, "Show total value of all valuables on the map in logs."); UILanguage = config.Bind<string>("UI Settings", "UILanguage", "English", new ConfigDescription("Language used for the economy UI.", (AcceptableValueBase)(object)new AcceptableValueList<string>(new string[2] { "English", "Russian" }), Array.Empty<object>())); } } public class REPOConomyNetworkHandler : MonoBehaviour { private const byte ECONOMY_SYNC_EVENT = 179; private void Start() { PhotonNetwork.NetworkingClient.EventReceived += OnEvent; } private void OnDestroy() { PhotonNetwork.NetworkingClient.EventReceived -= OnEvent; } private void OnEvent(EventData evt) { //IL_013b: 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) if (evt.Code != 179) { return; } try { object[] array = (object[])evt.CustomData; if (array.Length < 5) { REPOConomyPlugin.Logger.LogWarning((object)"[REPOConomy] Invalid economy event data."); return; } if ((int)array[0] == -1) { CustomEconomyData customEconomyData = new CustomEconomyData(); customEconomyData.id = (string)array[5]; customEconomyData.name_en = (string)array[6]; customEconomyData.name_ru = (string)array[7]; customEconomyData.desc_en = (string)array[8]; customEconomyData.desc_ru = (string)array[9]; customEconomyData.color = new float[3] { (float)array[10], (float)array[11], (float)array[12] }; customEconomyData.min = (float)array[1]; customEconomyData.max = (float)array[2]; CustomEconomyData customEconomyData3 = (REPOConomyPlugin.CurrentCustomEconomy = customEconomyData); REPOConomyPlugin.CurrentEconomy = REPOConomyPlugin.EconomyType.Stable; REPOConomyPlugin.CurrentEconomyColor = new Color(customEconomyData3.color[0], customEconomyData3.color[1], customEconomyData3.color[2]); REPOConomyPlugin.Logger.LogInfo((object)("[Economy] Synced custom event: " + customEconomyData3.id)); } else { REPOConomyPlugin.CurrentEconomy = (REPOConomyPlugin.EconomyType)(int)array[0]; REPOConomyPlugin.CurrentCustomEconomy = null; REPOConomyPlugin.CurrentEconomyColor = REPOConomyPlugin.GetEconomyColor(); REPOConomyPlugin.Logger.LogInfo((object)$"[Economy] Synced vanilla event: {REPOConomyPlugin.CurrentEconomy}"); } REPOConomyPlugin.MinPercent = (float)array[1]; REPOConomyPlugin.MaxPercent = (float)array[2]; REPOConomyPlugin.ClientDeltaMin = (float)array[3]; REPOConomyPlugin.ClientDeltaMax = (float)array[4]; REPOConomyPlugin.HasEconomy = true; } catch (Exception arg) { REPOConomyPlugin.Logger.LogError((object)$"[REPOConomy] Handler.OnEvent: {arg}"); } } } [BepInPlugin("PxntxrezStudio.REPOConomy", "REPOConomy", "1.2.4")] public class REPOConomyPlugin : BaseUnityPlugin { [HarmonyPatch(typeof(LevelGenerator), "Start")] public static class Patch_LevelGenerator_Start { public static void Postfix() { if (SemiFunc.RunIsLevel()) { Logger.LogInfo((object)"[REPOConomy] Start Generating InitializeEconomy."); InitializeEconomy(); } } } public enum EconomyType { Stable, Deflation, Inflation, Chaos, FreezeMarket, BlackMarketSurge, Overload, RareBoom, CommonCrash, LegendaryOnlyMatters, EchoMarket, ReverseInflation, LuxuryHunt, DumpsterDive, ExtraProfit, ScamSeason, SuddenDrop, TreasureRush, ZeroGravity, Turbulence, BubbleBurst, CollectorsFrenzy, PanicSale, EconomicTwister, TaxAudit, CrashAndBurn, GoldenHour, CrystalBubble, CoinDecay, EchoCrash, SpeculationBubble, ColdStorage, PriceWhirlwind, ExperimentalPricing, ShadowMarket, AuctionFever, MemoryMarket, LoopbackSpike, GlitchedGoldrush, MarketEclipse, JackpotMirage, CollectorsVoid, VolatileExperiment, CleanSweep, ValueVortex, TemporalSurge, EchoOfWealth, ArtifactBloat, MarketDrain, InversionProtocol, SyntheticDemand, TaxFrenzy, AssetDump, SmugglersSurge, CollectorsCraze, MarketKraken, MarketBoom, PriceLockdown, WildSpeculation, SilentAuction, FlashCrash, CryptoSurge, ResourceRush, DemandSpike, SupplyShortage, ConsumerConfidence, MarketMeltup, BargainHunt, MarketRebound, PriceCascade, BullRun, BearTrap, PanicBuying, SupplyGlut, SpeculatorFrenzy, ValueStabilizer, MarketMirroring, InflationSpike, DeflationDip, EconomicEquilibrium, PriceSurge, BargainBlitz, CollectorCarnival, GhostPrices, BarterBonanza, SeasonalShift, BlackoutSale, InflationEbb, FoolsGold, HoardersHavoc, PennyPinch, Trendsetter, PriceSpike, Clearance, BoomerangMarket, SilentDip, LuxuryOnly, EarlyBubble, LateDeflation, PriceSlalom, FalseDemand, UndergroundTrade, CrystalCrash, GhostRush } public enum PercentRollMode { Random, Stable, Volatile, Dynamic } [HarmonyPatch(typeof(TruckScreenText), "ArrowPointAtGoalLogic")] public static class EconomyUITriggerPatch { [HarmonyPostfix] public static void ShowEconomyUI() { if (!EconomyController.UIShownOnce && SemiFunc.RunIsLevel() && (Object)(object)EconomyController.Instance != (Object)null && HasEconomy) { EconomyController.Instance.ShowGUI(); EconomyController.UIShownOnce = true; LogTotalMapValue(); } } } [HarmonyPatch(typeof(TruckScreenText), "Start")] public static class TruckTextStartReset { [HarmonyPrefix] public static void ResetFlag() { EconomyController.UIShownOnce = false; EconomyInitialized = false; ValuablePatch.ResetKraken(); } } [HarmonyPatch(typeof(ValuableObject), "DollarValueSetLogic")] public class ValuablePatch { private static readonly FieldInfo FI_original = AccessTools.Field(typeof(ValuableObject), "dollarValueOriginal"); private static readonly FieldInfo FI_current = AccessTools.Field(typeof(ValuableObject), "dollarValueCurrent"); private static readonly FieldInfo FI_set = AccessTools.Field(typeof(ValuableObject), "dollarValueSet"); private static bool krakenInitialized = false; private static List<ValuableObject> krakenList; private static int krakenBoostCount; private static float GetOriginal(ValuableObject inst) { return (float)FI_original.GetValue(inst); } private static void SetCurrent(ValuableObject inst, float val) { FI_current.SetValue(inst, val); } private static void MarkSet(ValuableObject inst) { FI_set.SetValue(inst, true); } [HarmonyPostfix] public static void ApplyRandomValue(ValuableObject __instance) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Invalid comparison between Unknown and I4 if ((Object)(object)__instance == (Object)null || SemiFunc.RunIsLobby() || SemiFunc.RunIsShop() || SemiFunc.RunIsArena()) { return; } if ((int)LevelGenerator.Instance.State <= 11) { if (!pendingValuables.Contains(__instance)) { pendingValuables.Add(__instance); } return; } if (!HasEconomy) { if (!pendingValuables.Contains(__instance)) { pendingValuables.Add(__instance); } return; } if ((Object)(object)AssetManager.instance == (Object)null || (Object)(object)AssetManager.instance.surplusValuableSmall == (Object)null || (Object)(object)AssetManager.instance.surplusValuableMedium == (Object)null || (Object)(object)AssetManager.instance.surplusValuableBig == (Object)null) { Logger.LogWarning((object)"[REPOConomy] AssetManager or its values are missing, skipping…"); return; } string name = ((Object)((Component)__instance).gameObject).name; if (name.Contains(((Object)AssetManager.instance.surplusValuableSmall).name) || name.Contains(((Object)AssetManager.instance.surplusValuableMedium).name) || name.Contains(((Object)AssetManager.instance.surplusValuableBig).name)) { Logger.LogInfo((object)("[REPOConomy] Skipped (Surplus): " + name)); return; } float original = GetOriginal(__instance); float num2; if (CurrentEconomy == EconomyType.EconomicTwister) { float num = Random.Range(0f, 2f); num2 = Mathf.Round(original * num); Logger.LogInfo((object)$"[REPOConomy] [Twister] {name} | {original} → {num2} ({num * 100f:0.##}%)"); SetCurrent(__instance, num2); MarkSet(__instance); return; } if (CurrentEconomy == EconomyType.ValueVortex) { float num3 = Random.Range(-1f, 2f); num2 = Mathf.Round(original * (1f + num3)); Logger.LogInfo((object)$"[REPOConomy] [Vortex] {name} | {original} → {num2} ({num3 * 100f:+0.##;-0.##}%)"); SetCurrent(__instance, num2); MarkSet(__instance); return; } if (CurrentEconomy == EconomyType.SmugglersSurge) { float num4 = ((original > 2400f) ? Random.Range(1.5f, 2f) : Random.Range(0.3f, 0.6f)); num2 = Mathf.Round(original * num4); SetCurrent(__instance, num2); MarkSet(__instance); return; } if (CurrentEconomy == EconomyType.CollectorsCraze) { num2 = ((!(original >= 8000f)) ? Mathf.Round(original * (1f + Random.Range(-0.3f, -0.1f))) : Mathf.Round(original * Random.Range(2f, 3f))); SetCurrent(__instance, num2); MarkSet(__instance); return; } if (CurrentEconomy == EconomyType.MarketKraken) { if (!krakenInitialized) { krakenList = Object.FindObjectsOfType<ValuableObject>().ToList(); foreach (ValuableObject kraken in krakenList) { SetCurrent(kraken, 0f); } krakenBoostCount = Mathf.CeilToInt((float)krakenList.Count * 0.3f); krakenInitialized = true; } if (krakenBoostCount > 0 && krakenList.Count > 0) { int index = Random.Range(0, krakenList.Count); ValuableObject inst = krakenList[index]; SetCurrent(inst, Mathf.Round(GetOriginal(inst) * 4f)); krakenList.RemoveAt(index); krakenBoostCount--; } MarkSet(__instance); return; } float num5 = original; if (REPOConfig.UseSeparateModifiers.Value) { float num6 = ((MinPercent < 0f) ? Random.Range(0f, Mathf.Abs(MinPercent)) : 0f); float num7 = ((MaxPercent > 0f) ? Random.Range(0f, MaxPercent) : 0f); float num8 = 0f - num6 + num7; num2 = Mathf.Round(num5 * (1f + num8 / 100f)); string text = ((num6 > 0f) ? $"-{num6:0.##}%" : ""); string text2 = ((num7 > 0f) ? $"+{num7:0.##}%" : ""); string text3 = ((num6 > 0f && num7 > 0f) ? " + " : ""); Logger.LogInfo((object)$"[REPOConomy] {name} | {text}{text3}{text2} = {num8:+0.##;-0.##}% | {num5} → {num2} |"); } else { float minPercent = MinPercent; float maxPercent = MaxPercent; float num8; switch (CurrentRollMode) { case PercentRollMode.Random: num8 = Random.Range(minPercent, maxPercent); break; case PercentRollMode.Stable: { float num11 = 0f; for (int i = 0; i < 3; i++) { num11 += Random.Range(minPercent, maxPercent); } num8 = num11 / 3f; break; } case PercentRollMode.Volatile: { float num9 = Random.Range(minPercent, maxPercent); float num10 = Random.Range(minPercent, maxPercent); num8 = ((Mathf.Abs(num9 - num10) > Mathf.Abs((maxPercent - minPercent) / 2f)) ? num9 : ((Random.value < 0.5f) ? minPercent : maxPercent)); break; } default: num8 = Random.Range(minPercent, maxPercent); break; } num2 = Mathf.Round(num5 * (1f + num8 / 100f)); Logger.LogInfo((object)$"[REPOConomy] {name} | {num5} → {num2} ({num8:+0.##;-0.##}%)"); } SetCurrent(__instance, num2); MarkSet(__instance); } public static void ResetKraken() { krakenInitialized = false; krakenList = null; krakenBoostCount = 0; } } internal static ManualLogSource Logger; private static readonly List<ValuableObject> pendingValuables = new List<ValuableObject>(); public static string CurrentEconomyName = "Stability"; public static string CurrentEconomyFlavor = "Economy by default"; private static readonly FieldInfo FI_current = AccessTools.Field(typeof(ValuableObject), "dollarValueCurrent"); public static bool HasEconomy { get; set; } = false; public static EconomyType CurrentEconomy { get; set; } public static float MinPercent { get; set; } public static float MaxPercent { get; set; } public static bool EconomyInitialized { get; private set; } = false; public static float ClientDeltaMin { get; set; } public static float ClientDeltaMax { get; set; } public static PercentRollMode CurrentRollMode { get; set; } = PercentRollMode.Random; public static Color CurrentEconomyColor { get; set; } = Color.white; public static CustomEconomyData CurrentCustomEconomy { get; set; } = null; private void Awake() { //IL_0010: Unknown result type (might be due to invalid IL or missing references) Logger = ((BaseUnityPlugin)this).Logger; new Harmony("PxntxrezStudio.REPOConomy").PatchAll(); REPOConfig.Init(((BaseUnityPlugin)this).Config); SceneManager.sceneLoaded += OnSceneLoaded; CustomEconomyLoader.LoadCustomEvents(); } private void OnSceneLoaded(Scene scene, LoadSceneMode mode) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: 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_0044: Expected O, but got Unknown if (!SemiFunc.RunIsLobby() && !SemiFunc.RunIsShop() && !SemiFunc.RunIsArena() && (Object)(object)EconomyController.Instance == (Object)null) { GameObject val = new GameObject("EconomyUI"); EconomyController.Instance = val.AddComponent<EconomyController>(); val.AddComponent<REPOConomyNetworkHandler>(); Object.DontDestroyOnLoad((Object)val); } } public static void InitializeEconomy() { if (EconomyInitialized) { Logger.LogInfo((object)"[Economy] Already initialized. Skipping."); return; } if (SemiFunc.RunIsLobby() || SemiFunc.RunIsShop() || SemiFunc.RunIsArena()) { Logger.LogInfo((object)"[Economy] Initialization canceled: Lobby, store, or arena."); return; } if (!SemiFunc.IsMasterClientOrSingleplayer()) { Logger.LogInfo((object)"[Economy] Initialization skipped: not the MasterClient or Singleplayer."); return; } EconomyInitialized = true; int currentLevel = GetCurrentLevel(); float clientDeltaMin = (float)(currentLevel - 1) * REPOConfig.LevelScaleMin.Value; float clientDeltaMax = (float)(currentLevel - 1) * REPOConfig.LevelScaleMax.Value; ClientDeltaMin = clientDeltaMin; ClientDeltaMax = clientDeltaMax; bool value = REPOConfig.ForceStableEconomy.Value; bool flag = currentLevel >= REPOConfig.EventStartLevel.Value; bool flag2 = !REPOConfig.UseEventChance.Value || Random.Range(1, 101) <= REPOConfig.EventChance.Value; bool flag3 = REPOConfig.EnableCustomEvents.Value && CustomEconomyLoader.CustomEvents.Count > 0; bool value2 = REPOConfig.DisableVanillaEvents.Value; bool value3 = REPOConfig.UseCustomEventChance.Value; int value4 = REPOConfig.CustomEventChance.Value; bool flag4 = false; if (value || !flag || !flag2) { ApplyVanillaEconomy(EconomyType.Stable); flag4 = true; } if (!flag4 && flag3 && value2) { PickRandomCustomEvent(); flag4 = true; } if (!flag4 && flag3 && value3) { if (Random.Range(1, 101) <= value4) { PickRandomCustomEvent(); } else { ApplyVanillaEconomy(GetRandomVanillaType()); } flag4 = true; } if (!flag4 && flag3) { if (!value2 && Random.Range(0, 2) == 1) { ApplyVanillaEconomy(GetRandomVanillaType()); } else { PickRandomCustomEvent(); } flag4 = true; } if (!flag4) { ApplyVanillaEconomy(GetRandomVanillaType()); flag4 = true; } string value5 = REPOConfig.RollMode.Value; if (value5 == "Dynamic") { PercentRollMode[] array = new PercentRollMode[3] { PercentRollMode.Random, PercentRollMode.Stable, PercentRollMode.Volatile }; CurrentRollMode = array[Random.Range(0, array.Length)]; } else { CurrentRollMode = (PercentRollMode)Enum.Parse(typeof(PercentRollMode), value5); } foreach (ValuableObject pendingValuable in pendingValuables) { ValuablePatch.ApplyRandomValue(pendingValuable); } pendingValuables.Clear(); } private static bool PickRandomCustomEvent() { //IL_011a: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0303: Unknown result type (might be due to invalid IL or missing references) //IL_0308: Unknown result type (might be due to invalid IL or missing references) //IL_030a: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Expected O, but got Unknown //IL_031a: Unknown result type (might be due to invalid IL or missing references) List<CustomEconomyData> customEvents = CustomEconomyLoader.CustomEvents; CustomEconomyData customEconomyData = customEvents[Random.Range(0, customEvents.Count)]; _ = REPOConfig.UILanguage.Value == "Russian"; CurrentCustomEconomy = customEconomyData; int currentLevel = GetCurrentLevel(); float num = (float)(currentLevel - 1) * REPOConfig.LevelScaleMin.Value; float num2 = (float)(currentLevel - 1) * REPOConfig.LevelScaleMax.Value; ClientDeltaMin = num; ClientDeltaMax = num2; float num3 = 0f - REPOConfig.DefaultBaseMin.Value - num; float num4 = REPOConfig.DefaultBaseMax.Value + num2; if (customEconomyData.useDelta) { num3 += customEconomyData.min; num4 += customEconomyData.max; } else { num3 = customEconomyData.min + ClientDeltaMin; num4 = customEconomyData.max + ClientDeltaMax; } num3 = Mathf.Clamp(num3, 0f - REPOConfig.MinClampLimit.Value, REPOConfig.MaxClampLimit.Value); num4 = Mathf.Clamp(num4, 0f - REPOConfig.MinClampLimit.Value, REPOConfig.MaxClampLimit.Value); MinPercent = num3; MaxPercent = num4; CurrentEconomyColor = (Color)((customEconomyData.color != null && customEconomyData.color.Length == 3) ? new Color(customEconomyData.color[0] / 255f, customEconomyData.color[1] / 255f, customEconomyData.color[2] / 255f) : Color.white); HasEconomy = true; Logger.LogInfo((object)("[Economy] Picked custom event: " + customEconomyData.id + " " + $"({CurrentEconomyName} {MinPercent}%–{MaxPercent}%)")); if (PhotonNetwork.IsMasterClient) { object[] obj = new object[13] { -1, MinPercent, MaxPercent, ClientDeltaMin, ClientDeltaMax, CurrentCustomEconomy.id, CurrentCustomEconomy.name_en ?? "", CurrentCustomEconomy.name_ru ?? "", CurrentCustomEconomy.desc_en ?? "", CurrentCustomEconomy.desc_ru ?? "", null, null, null }; float[] color = CurrentCustomEconomy.color; obj[10] = ((color != null && color.Length != 0) ? (CurrentCustomEconomy.color[0] / 255f) : 1f); float[] color2 = CurrentCustomEconomy.color; obj[11] = ((color2 != null && color2.Length > 1) ? (CurrentCustomEconomy.color[1] / 255f) : 1f); float[] color3 = CurrentCustomEconomy.color; obj[12] = ((color3 != null && color3.Length > 2) ? (CurrentCustomEconomy.color[2] / 255f) : 1f); object[] array = obj; RaiseEventOptions val = new RaiseEventOptions { Receivers = (ReceiverGroup)0 }; PhotonNetwork.RaiseEvent((byte)179, (object)array, val, SendOptions.SendReliable); } return true; } private static void ApplyVanillaEconomy(EconomyType economy) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0c27: Unknown result type (might be due to invalid IL or missing references) //IL_0c2c: Unknown result type (might be due to invalid IL or missing references) //IL_0c2e: Unknown result type (might be due to invalid IL or missing references) //IL_0c35: Expected O, but got Unknown //IL_0c3e: Unknown result type (might be due to invalid IL or missing references) CurrentEconomy = economy; CurrentCustomEconomy = null; CurrentEconomyColor = GetEconomyColor(); HasEconomy = true; int currentLevel = GetCurrentLevel(); float num = (float)(currentLevel - 1) * REPOConfig.LevelScaleMin.Value; float num2 = (float)(currentLevel - 1) * REPOConfig.LevelScaleMax.Value; ClientDeltaMin = num; ClientDeltaMax = num2; float num3 = 0f - REPOConfig.DefaultBaseMin.Value - num; float num4 = REPOConfig.DefaultBaseMax.Value + num2; switch (economy) { case EconomyType.FreezeMarket: num3 = 0f; num4 = 0f; break; case EconomyType.Deflation: num3 -= 10f; num4 -= 5f; break; case EconomyType.Inflation: num3 += 0f; num4 += 10f; break; case EconomyType.Chaos: num3 -= 10f; num4 += 10f; break; case EconomyType.BlackMarketSurge: num3 -= 10f; num4 += 20f; break; case EconomyType.Overload: num3 = -100f; num4 += 100f; break; case EconomyType.RareBoom: num3 += 5f; num4 += 30f; break; case EconomyType.CommonCrash: num3 -= 30f; num4 -= 10f; break; case EconomyType.LegendaryOnlyMatters: num3 = -20f; num4 = 5f; break; case EconomyType.EchoMarket: num3 += Random.Range(-25f, 0f); num4 += Random.Range(0f, 25f); break; case EconomyType.ReverseInflation: num3 -= 15f; num4 -= 5f; break; case EconomyType.LuxuryHunt: num3 += 10f; num4 += 40f; break; case EconomyType.DumpsterDive: num3 += 5f; num4 += 60f; break; case EconomyType.ExtraProfit: num4 += 50f; break; case EconomyType.ScamSeason: num3 -= 30f; num4 -= 10f; break; case EconomyType.SuddenDrop: num3 = -50f; num4 = -20f; break; case EconomyType.TreasureRush: num3 += 100f; num4 += 200f; break; case EconomyType.ZeroGravity: num3 = -50f; num4 = 150f; break; case EconomyType.Turbulence: { float num18 = Random.Range(-30f, 30f); num3 += num18; num4 += num18; break; } case EconomyType.BubbleBurst: num3 -= 40f; num4 -= 5f; break; case EconomyType.CollectorsFrenzy: num3 += 30f; num4 += 80f; break; case EconomyType.PanicSale: num3 = -40f; num4 = -20f; break; case EconomyType.EconomicTwister: num3 = 0f; num4 = 0f; break; case EconomyType.TaxAudit: num3 = -15f; num4 = -15f; break; case EconomyType.CrashAndBurn: num3 = -90f; num4 = 0f; break; case EconomyType.GoldenHour: num3 += 20f; num4 += 50f; break; case EconomyType.CrystalBubble: num3 += 50f; num4 += 100f; break; case EconomyType.CoinDecay: num3 -= 20f; num4 -= 60f; break; case EconomyType.EchoCrash: { float num17 = Random.Range(-50f, 50f); num3 += num17; num4 += num17; break; } case EconomyType.SpeculationBubble: num3 -= 20f; num4 += 100f; break; case EconomyType.ColdStorage: num3 -= 10f; num4 -= 10f; break; case EconomyType.PriceWhirlwind: num3 += Random.Range(-60f, 0f); num4 += Random.Range(0f, 60f); break; case EconomyType.ExperimentalPricing: num3 -= 20f; num4 += 40f; break; case EconomyType.ShadowMarket: num3 -= 60f; num4 += 5f; break; case EconomyType.AuctionFever: num3 += 10f; num4 += 80f; break; case EconomyType.MemoryMarket: num3 = Mathf.Clamp(MinPercent + Random.Range(-5f, 5f), 0f - REPOConfig.MinClampLimit.Value, REPOConfig.MaxClampLimit.Value); num4 = Mathf.Clamp(MaxPercent + Random.Range(-5f, 5f), 0f - REPOConfig.MinClampLimit.Value, REPOConfig.MaxClampLimit.Value); break; case EconomyType.LoopbackSpike: { float num15 = MinPercent * 2f; float num16 = MaxPercent * 2f; num3 = Mathf.Clamp(num15, 0f - REPOConfig.MinClampLimit.Value, REPOConfig.MaxClampLimit.Value); num4 = Mathf.Clamp(num16, 0f - REPOConfig.MinClampLimit.Value, REPOConfig.MaxClampLimit.Value); break; } case EconomyType.GlitchedGoldrush: num3 = 20f; num4 = 100f; break; case EconomyType.MarketEclipse: num3 = -5f; num4 = 5f; break; case EconomyType.JackpotMirage: { float num14 = Random.Range(-50f, 150f); num3 = num14 / 2f; num4 = num14; break; } case EconomyType.CollectorsVoid: num3 = -90f; num4 = -50f; break; case EconomyType.VolatileExperiment: num3 = -100f; num4 = 250f; break; case EconomyType.CleanSweep: num3 = 0f; num4 = 5f; break; case EconomyType.TemporalSurge: num3 -= 20f; num4 += 60f; break; case EconomyType.EchoOfWealth: num3 = MinPercent; num4 = MaxPercent; break; case EconomyType.ArtifactBloat: num3 += 50f; num4 += 100f; break; case EconomyType.MarketDrain: num3 -= 60f; num4 -= 30f; break; case EconomyType.InversionProtocol: { float num13 = num3; num3 = 0f - num4; num4 = 0f - num13; break; } case EconomyType.SyntheticDemand: num3 += Random.Range(0f, 30f); num4 += Random.Range(30f, 80f); break; case EconomyType.TaxFrenzy: num3 = -50f; num4 = -20f; break; case EconomyType.AssetDump: num3 = -80f; num4 = 20f; break; case EconomyType.MarketBoom: num3 += 20f; num4 += 50f; break; case EconomyType.PriceLockdown: num3 = -5f; num4 = 5f; break; case EconomyType.WildSpeculation: { float num12 = Random.Range(-50f, 100f); num3 += num12; num4 += num12; break; } case EconomyType.SilentAuction: num3 += 0f; num4 += 30f; break; case EconomyType.FlashCrash: num3 -= 50f; num4 -= 20f; break; case EconomyType.CryptoSurge: num3 += 10f; num4 += 100f; break; case EconomyType.ResourceRush: num3 += 5f; num4 += 25f; break; case EconomyType.DemandSpike: num3 += 0f; num4 += 60f; break; case EconomyType.SupplyShortage: num3 -= 20f; num4 -= 5f; break; case EconomyType.ConsumerConfidence: num3 += 5f; num4 += 15f; break; case EconomyType.MarketMeltup: num3 += 50f; num4 += 200f; break; case EconomyType.BargainHunt: num3 -= 10f; num4 += 10f; break; case EconomyType.MarketRebound: num3 += 10f; num4 += 20f; break; case EconomyType.PriceCascade: num3 += Random.Range(-20f, 0f); num4 += Random.Range(0f, 20f); break; case EconomyType.BullRun: num3 += 30f; num4 += 60f; break; case EconomyType.BearTrap: num3 -= 60f; num4 -= 30f; break; case EconomyType.PanicBuying: num3 += 50f; num4 += 100f; break; case EconomyType.SupplyGlut: num3 -= 50f; num4 += 10f; break; case EconomyType.SpeculatorFrenzy: { float num11 = Random.Range(-40f, 40f); num3 += num11; num4 += num11; break; } case EconomyType.ValueStabilizer: num3 = Mathf.Clamp(num3, -5f, 5f); num4 = Mathf.Clamp(num4, -5f, 5f); break; case EconomyType.MarketMirroring: num3 = MinPercent; num4 = MaxPercent; break; case EconomyType.InflationSpike: num3 += 15f; num4 += 25f; break; case EconomyType.DeflationDip: num3 -= 15f; num4 -= 25f; break; case EconomyType.EconomicEquilibrium: num3 = 0f; num4 = 0f; break; case EconomyType.PriceSurge: num3 += 20f; num4 += 40f; break; case EconomyType.BargainBlitz: num3 -= 30f; num4 -= 10f; break; case EconomyType.CollectorCarnival: num3 = ((!(num3 >= 50f)) ? (num3 - 10f) : (num3 * 2f)); num4 = ((!(num4 >= 50f)) ? (num4 - 10f) : (num4 * 2f)); break; case EconomyType.GhostPrices: { float num10 = Random.Range(-25f, 25f); num3 += num10; num4 += num10; break; } case EconomyType.BarterBonanza: num3 -= 20f; num4 += 15f; break; case EconomyType.SeasonalShift: num3 += 15f; num4 -= 5f; break; case EconomyType.BlackoutSale: { float num9 = Random.Range(-50f, -30f); num3 += num9; num4 += num9; break; } case EconomyType.InflationEbb: num3 -= 20f; num4 -= 10f; break; case EconomyType.FoolsGold: { float num8 = Random.Range(0f, 50f); num3 = num3 - 10f + num8; num4 = num4 - 10f + num8; break; } case EconomyType.HoardersHavoc: num3 -= 40f; num4 += 10f; break; case EconomyType.PennyPinch: { float num7 = Random.Range(-60f, -40f); num3 += num7; num4 += num7; break; } case EconomyType.Trendsetter: { float num6 = Random.Range(30f, 60f); num3 += num6; num4 += num6; break; } case EconomyType.PriceSpike: num3 += 40f; num4 += 80f; break; case EconomyType.Clearance: num3 -= 60f; num4 -= 20f; break; case EconomyType.BoomerangMarket: num3 += Random.Range(-20f, 10f); num4 += Random.Range(10f, 40f); break; case EconomyType.SilentDip: num3 -= 10f; num4 -= 5f; break; case EconomyType.LuxuryOnly: num3 = -40f; num4 = 5f; break; case EconomyType.EarlyBubble: num3 += 30f; num4 += 100f; break; case EconomyType.LateDeflation: num3 = -70f; num4 = -10f; break; case EconomyType.PriceSlalom: { float num5 = Random.Range(-30f, 30f); num3 += num5; num4 += num5; break; } case EconomyType.FalseDemand: num3 += 10f; num4 += 40f; break; case EconomyType.UndergroundTrade: num3 -= 40f; num4 += 5f; break; case EconomyType.CrystalCrash: num3 = -100f; num4 = -40f; break; case EconomyType.GhostRush: num3 += 50f; num4 += 150f; break; } num3 = Mathf.Clamp(num3, 0f - REPOConfig.MinClampLimit.Value, REPOConfig.MaxClampLimit.Value); num4 = Mathf.Clamp(num4, 0f - REPOConfig.MinClampLimit.Value, REPOConfig.MaxClampLimit.Value); MinPercent = num3; MaxPercent = num4; Logger.LogInfo((object)($"[Economy] Picked vanilla event: {economy}, " + $"Range: {MinPercent}%–{MaxPercent}%")); if (PhotonNetwork.IsMasterClient) { object[] array = new object[5] { (int)economy, MinPercent, MaxPercent, ClientDeltaMin, ClientDeltaMax }; RaiseEventOptions val = new RaiseEventOptions { Receivers = (ReceiverGroup)0 }; PhotonNetwork.RaiseEvent((byte)179, (object)array, val, SendOptions.SendReliable); } } private static EconomyType GetRandomVanillaType() { Array values = Enum.GetValues(typeof(EconomyType)); int index = Random.Range(1, values.Length); return (EconomyType)values.GetValue(index); } private static void LogTotalMapValue() { if (REPOConfig.ShowTotalMapValue.Value) { float num = 0f; ValuableObject[] array = Object.FindObjectsOfType<ValuableObject>(); foreach (ValuableObject obj in array) { num += (float)FI_current.GetValue(obj); } Logger.LogInfo((object)$"[REPOConomy] \ud83d\udcb0 Total value on map: ${Mathf.RoundToInt(num)}"); } } public static int GetCurrentLevel() { if (StatsManager.instance?.runStats != null && StatsManager.instance.runStats.ContainsKey("level")) { return StatsManager.instance.runStats["level"] + 1; } return 1; } public static string GetEconomyName() { if (!HasEconomy) { return "Stability"; } bool flag = REPOConfig.UILanguage.Value == "Russian"; if (CurrentCustomEconomy != null) { if (!flag || string.IsNullOrWhiteSpace(CurrentCustomEconomy.name_ru)) { return CurrentCustomEconomy.name_en; } return CurrentCustomEconomy.name_ru; } if (REPOConfig.EnableCustomEvents.Value) { CustomEconomyData customEconomyData = CustomEconomyLoader.CustomEvents.FirstOrDefault((CustomEconomyData e) => e.id == CurrentCustomEconomy?.id); if (customEconomyData != null) { if (!flag || string.IsNullOrWhiteSpace(customEconomyData.name_ru)) { return customEconomyData.name_en; } return customEconomyData.name_ru; } } return CurrentEconomy switch { EconomyType.Stable => flag ? "Стабильность" : "Stability", EconomyType.Deflation => flag ? "Дефляция" : "Deflation", EconomyType.Inflation => flag ? "Инфляция" : "Inflation", EconomyType.Chaos => flag ? "Хаос" : "Chaos", EconomyType.FreezeMarket => flag ? "Заморозка" : "Freeze Market", EconomyType.BlackMarketSurge => flag ? "Черный Рынок" : "Black Market Surge", EconomyType.Overload => flag ? "Перегруз" : "Overload", EconomyType.RareBoom => flag ? "Редкий бум" : "Rare Boom", EconomyType.CommonCrash => flag ? "Обычный Краш" : "Common Crash", EconomyType.LegendaryOnlyMatters => flag ? "Только Легенды" : "Legendary Only Matters", EconomyType.EchoMarket => flag ? "Рынок Эха" : "Echo Market", EconomyType.ReverseInflation => flag ? "Обратная Инфляция" : "Reverse Inflation", EconomyType.LuxuryHunt => flag ? "Охота За Роскошью" : "Luxury Hunt", EconomyType.DumpsterDive => flag ? "Мусорная Находка" : "Dumpster Dive", EconomyType.ExtraProfit => flag ? "Доп. Прибыль" : "Extra Profit", EconomyType.ScamSeason => flag ? "Сезон Скама" : "Scam Season", EconomyType.SuddenDrop => flag ? "Резкое Падение" : "Sudden Drop", EconomyType.TreasureRush => flag ? "Охота За Сокровищами" : "Treasure Rush", EconomyType.ZeroGravity => flag ? "Невесомость Цен" : "Zero Gravity", EconomyType.Turbulence => flag ? "Турбулентность" : "Turbulence", EconomyType.BubbleBurst => flag ? "Лопнувший Пузырь" : "Bubble Burst", EconomyType.CollectorsFrenzy => flag ? "Коллекционная Лихорадка" : "Collectors Frenzy", EconomyType.PanicSale => flag ? "Паническая Распродажа" : "Panic Sale", EconomyType.EconomicTwister => flag ? "Экономический Твистер" : "Economic Twister", EconomyType.TaxAudit => flag ? "Налоговая Проверка" : "Tax Audit", EconomyType.CrashAndBurn => flag ? "Краш & Выгорание" : "Crash & Burn", EconomyType.GoldenHour => flag ? "Золотой Час" : "Golden Hour", EconomyType.CrystalBubble => flag ? "Хрустальный Пузырь" : "Crystal Bubble", EconomyType.CoinDecay => flag ? "Обесценивание" : "Coin Decay", EconomyType.EchoCrash => flag ? "Эхо-Краш" : "Echo Crash", EconomyType.SpeculationBubble => flag ? "Спекулятивный Пузырь" : "Speculation Bubble", EconomyType.ColdStorage => flag ? "Холодное Хранение" : "Cold Storage", EconomyType.PriceWhirlwind => flag ? "Ценовой Вихрь" : "Price Whirlwind", EconomyType.ExperimentalPricing => flag ? "Экспериментальные Цены" : "Experimental Pricing", EconomyType.ShadowMarket => flag ? "Теневой Рынок" : "Shadow Market", EconomyType.AuctionFever => flag ? "Аукционная Лихорадка" : "Auction Fever", EconomyType.MemoryMarket => flag ? "Рынок Памяти" : "Memory Market", EconomyType.LoopbackSpike => flag ? "Петля Резонанса" : "Loopback Spike", EconomyType.GlitchedGoldrush => flag ? "Глитч Золотой Лихорадки" : "Glitched Goldrush", EconomyType.MarketEclipse => flag ? "Экономическое затмение" : "Market Eclipse", EconomyType.JackpotMirage => flag ? "Мираж Джекпота" : "Jackpot Mirage", EconomyType.CollectorsVoid => flag ? "Пустота Коллекционеров" : "Collector's Void", EconomyType.VolatileExperiment => flag ? "Экспериментальный Хаос" : "Volatile Experiment", EconomyType.CleanSweep => flag ? "Чистая Полоса" : "Clean Sweep", EconomyType.ValueVortex => flag ? "Вихрь Цен" : "Value Vortex", EconomyType.TemporalSurge => flag ? "Всплеск Времени" : "Temporal Surge", EconomyType.EchoOfWealth => flag ? "Отголоски Богатства" : "Echo of Wealth", EconomyType.ArtifactBloat => flag ? "Артефактная Накрутка" : "Artifact Bloat", EconomyType.MarketDrain => flag ? "Слив Рынка" : "Market Drain", EconomyType.InversionProtocol => flag ? "Протокол Инверсии" : "Inversion Protocol", EconomyType.SyntheticDemand => flag ? "Синтетический Спрос" : "Synthetic Demand", EconomyType.TaxFrenzy => flag ? "Налоговая лихорадка" : "Taxman's Frenzy", EconomyType.AssetDump => flag ? "Слитые активы" : "Asset Dump", EconomyType.SmugglersSurge => flag ? "Контрабандный всплеск" : "Smugglers Surge", EconomyType.CollectorsCraze => flag ? "Коллекционный бум" : "Collectors Craze", EconomyType.MarketKraken => flag ? "Кракен на бирже" : "Market Kraken", EconomyType.MarketBoom => flag ? "Рынок Бум" : "Market Boom", EconomyType.PriceLockdown => flag ? "Ценовой Локдаун" : "Price Lockdown", EconomyType.WildSpeculation => flag ? "Безумная Спекуляция" : "Wild Speculation", EconomyType.SilentAuction => flag ? "Тихий Аукцион" : "Silent Auction", EconomyType.FlashCrash => flag ? "Молниеносный Краш" : "Flash Crash", EconomyType.CryptoSurge => flag ? "КриптоПрорыв" : "Crypto Surge", EconomyType.ResourceRush => flag ? "Ресурсный Бум" : "Resource Rush", EconomyType.DemandSpike => flag ? "Всплеск Спроса" : "Demand Spike", EconomyType.SupplyShortage => flag ? "Дефицит Предложений" : "Supply Shortage", EconomyType.ConsumerConfidence => flag ? "Доверие Потребителей" : "Consumer Confidence", EconomyType.MarketMeltup => flag ? "Рыночный Взлет" : "Market Melt-up", EconomyType.BargainHunt => flag ? "Охота за Скидками" : "Bargain Hunt", EconomyType.MarketRebound => flag ? "Отскок Рынка" : "Market Rebound", EconomyType.PriceCascade => flag ? "Ценовой Каскад" : "Price Cascade", EconomyType.BullRun => flag ? "Бычий Рывок" : "Bull Run", EconomyType.BearTrap => flag ? "Медвежья Ловушка" : "Bear Trap", EconomyType.PanicBuying => flag ? "Паническая Покупка" : "Panic Buying", EconomyType.SupplyGlut => flag ? "Избыток Предложений" : "Supply Glut", EconomyType.SpeculatorFrenzy => flag ? "Бешенство Спекулянтов" : "Speculator Frenzy", EconomyType.ValueStabilizer => flag ? "Стабилизатор Цен" : "Value Stabilizer", EconomyType.MarketMirroring => flag ? "Зеркало Рынка" : "Market Mirroring", EconomyType.InflationSpike => flag ? "Всплеск Инфляции" : "Inflation Spike", EconomyType.DeflationDip => flag ? "Провал Дефляции" : "Deflation Dip", EconomyType.EconomicEquilibrium => flag ? "Экономическое Равновесие" : "Economic Equilibrium", EconomyType.PriceSurge => flag ? "Резкий Рост Цен" : "Price Surge", EconomyType.BargainBlitz => flag ? "Скидочный Блиц" : "Bargain Blitz", EconomyType.CollectorCarnival => flag ? "Карнавал Коллекционеров" : "Collector Carnival", EconomyType.GhostPrices => flag ? "Призрачные Цены" : "Ghost Prices", EconomyType.BarterBonanza => flag ? "Бартёрное Безумие" : "Barter Bonanza", EconomyType.SeasonalShift => flag ? "Сезонный Сдвиг" : "Seasonal Shift", EconomyType.BlackoutSale => flag ? "Чёрная Распродажа" : "Blackout Sale", EconomyType.InflationEbb => flag ? "Утихание Инфляции" : "Inflation Ebb", EconomyType.FoolsGold => flag ? "Дурачье Золото" : "Fool’s Gold", EconomyType.HoardersHavoc => flag ? "Хаос Накопителей" : "Hoarder's Havoc", EconomyType.PennyPinch => flag ? "Щепотка Рублей" : "Penny Pinch", EconomyType.Trendsetter => flag ? "Законодатель Трендов" : "Trendsetter", EconomyType.PriceSpike => flag ? "Ценовой всплеск" : "Price Spike", EconomyType.Clearance => flag ? "Ликвидация" : "Clearance", EconomyType.BoomerangMarket => flag ? "Бумеранг Рынка" : "Boomerang Market", EconomyType.SilentDip => flag ? "Тихое падение" : "Silent Dip", EconomyType.LuxuryOnly => flag ? "Только Люкс" : "Luxury Only", EconomyType.EarlyBubble => flag ? "Ранняя надутость" : "Early Bubble", EconomyType.LateDeflation => flag ? "Поздняя дефляция" : "Late Deflation", EconomyType.PriceSlalom => flag ? "Ценовой слалом" : "Price Slalom", EconomyType.FalseDemand => flag ? "Фальшивый спрос" : "False Demand", EconomyType.UndergroundTrade => flag ? "Подпольная торговля" : "Underground Trade", EconomyType.CrystalCrash => flag ? "Хрустальный краш" : "Crystal Crash", EconomyType.GhostRush => flag ? "Призрачная гонка" : "Ghost Rush", _ => "???", }; } public static string GetEconomyFlavor() { bool flag = REPOConfig.UILanguage.Value == "Russian"; if (CurrentCustomEconomy != null) { if (!flag || string.IsNullOrWhiteSpace(CurrentCustomEconomy.desc_ru)) { return CurrentCustomEconomy.desc_en; } return CurrentCustomEconomy.desc_ru; } if (REPOConfig.EnableCustomEvents.Value) { CustomEconomyData customEconomyData = CustomEconomyLoader.CustomEvents.FirstOrDefault((CustomEconomyData e) => e.id == CurrentCustomEconomy?.id); if (customEconomyData != null) { if (!flag || string.IsNullOrWhiteSpace(customEconomyData.desc_ru)) { return customEconomyData.desc_en; } return customEconomyData.desc_ru; } } return CurrentEconomy switch { EconomyType.Stable => flag ? "Экономика по умолчанию" : "Economy by default", EconomyType.Deflation => flag ? "Краш рынка" : "Market Crash", EconomyType.Inflation => flag ? "Момент разбогатеть!" : "Moment to Get Rich!", EconomyType.Chaos => flag ? "Финансовый хаос..." : "Financial chaos...", EconomyType.FreezeMarket => flag ? "Экономика заморожена :(" : "Economy frozen :(", EconomyType.BlackMarketSurge => flag ? "Цены взлетели на черном рынке..." : "Values have become more expensive...", EconomyType.Overload => flag ? "50/50" : "50/50", EconomyType.RareBoom => flag ? "Ценности резко подорожали!" : "Values are suddenly in price!", EconomyType.CommonCrash => flag ? "Ценности обесценились!" : "Values are devalued!", EconomyType.LegendaryOnlyMatters => flag ? "Ценятся только легенды..." : "Only the best makes sense...", EconomyType.EchoMarket => flag ? "Цены скачут как сумасшедшие..." : "Prices are jumping like crazy...", EconomyType.ReverseInflation => flag ? "Бюджет важнее богатства..." : "Budget is better than wealth...", EconomyType.LuxuryHunt => flag ? "Роскошь в моде! Всё подорожало" : "Values are much more expensive!", EconomyType.DumpsterDive => flag ? "Даже мусор стал дорогим!" : "Everything has become expensive!", EconomyType.ExtraProfit => flag ? "Сегодня можно продать выгоднее!" : "Today you can sell more profitably!", EconomyType.ScamSeason => flag ? "Цены падают... :(" : "Prices are falling... :(", EconomyType.SuddenDrop => flag ? "Почти всё обесценилось!" : "Almost everything has depreciated!", EconomyType.TreasureRush => flag ? "Каждая ценность — сокровище!" : "Every value is — treasure!", EconomyType.ZeroGravity => flag ? "Цены нестабильны..." : "Everything is unstable...", EconomyType.Turbulence => flag ? "Цены ведут себя непредсказуемо..." : "Prices behave unpredictably...", EconomyType.BubbleBurst => flag ? "Рынок рос... пока не лопнул" : "The market was booming... until it wasn’t", EconomyType.CollectorsFrenzy => flag ? "Всё ценится больше, чем должно!" : "Everything is worth more than it should be", EconomyType.PanicSale => flag ? "Игроки распродают всё за копейки!" : "Players are panic-selling everything for pennies!", EconomyType.EconomicTwister => flag ? "Каждая ценность получает случайную цену!" : "Every item gets a completely random value", EconomyType.TaxAudit => flag ? "Налоговая проверила ваши ценности" : "The Tax Department has reviewed your valuables", EconomyType.CrashAndBurn => flag ? "Рынок рушится — готовьтесь к убыткам" : "The market is collapsing — brace for losses", EconomyType.GoldenHour => flag ? "Идеальное время для продажи!" : "A perfect time to sell — prices are booming!", EconomyType.CrystalBubble => flag ? "Эйфория на рынке! Цены взлетели..." : "Market euphoria! Prices are sky-high… for now", EconomyType.CoinDecay => flag ? "Всё кажется обесцененным. Продавать или ждать?" : "Everything feels worthless. Time to sell or hold?", EconomyType.EchoCrash => flag ? "Эхо-удары дестабилизируют рынок!" : "Residual shockwaves shake the market unpredictably", EconomyType.SpeculationBubble => flag ? "Цены растут без причин... Пузырь вот-вот лопнет!" : "Prices are inflating without logic... Bubble may burst any time!", EconomyType.ColdStorage => flag ? "Ничего не продаётся... Всё заморожено" : "Nothing sells well. Prices are frozen under market value", EconomyType.PriceWhirlwind => flag ? "Цены крутятся в вихре нестабильности!" : "An unstable market surge throws prices into a whirlwind!", EconomyType.ExperimentalPricing => flag ? "Цены нестабильны из-за рыночных экспериментов" : "Prices fluctuate wildly due to market experiments", EconomyType.ShadowMarket => flag ? "Теневой рынок обесценивает большинство ценностей" : "A secret market drains value from most valuables", EconomyType.AuctionFever => flag ? "Аукционы взвинтили цены до небес!" : "A bidding war is driving prices through the roof!", EconomyType.MemoryMarket => flag ? "Цены как в прошлом... но не совсем" : "Prices mirror the past — but with a twist", EconomyType.LoopbackSpike => flag ? "История повторяется, но куда жёстче" : "History repeats with extreme volatility", EconomyType.GlitchedGoldrush => flag ? "Что-то сломалось... но ты богатеешь" : "Something’s broken… but you’re getting rich", EconomyType.MarketEclipse => flag ? "Экономическое затмение... всё стоит на месте" : "An economic blackout... almost no movement", EconomyType.JackpotMirage => flag ? "Всё выглядит дорого... но ты уверен?" : "Everything looks like gold... but some of it’s fool’s gold", EconomyType.CollectorsVoid => flag ? "Ценности исчезли... всё стало мусором" : "All value is lost — nothing is collectible anymore", EconomyType.VolatileExperiment => flag ? "Экономический эксперимент... полный хаос" : "A dangerous economic experiment — chaos reigns", EconomyType.CleanSweep => flag ? "Затишье... почти ничего не изменилось" : "A calm period — nothing to fear, nothing to gain", EconomyType.ValueVortex => flag ? "Вихрь ценностей — всё непредсказуемо" : "A swirling mess of prices — unpredictable and wild", EconomyType.TemporalSurge => flag ? "Цены колеблются с импульсом времени" : "Prices shift with a pulse of time itself", EconomyType.EchoOfWealth => flag ? "Цены отражают прошлые уровни… с искажением?" : "Prices mimic those from two levels ago?", EconomyType.ArtifactBloat => flag ? "Старый хлам внезапно стал ценным!" : "Old junk is now gold!", EconomyType.MarketDrain => flag ? "Цены медленно утекают в бездну" : "All prices slowly drain into the void", EconomyType.InversionProtocol => flag ? "Низкая цена — высокая ценность, и наоборот" : "Low-value becomes high-value. High-value drops", EconomyType.SyntheticDemand => flag ? "Искусственный спрос вызывает всплеск цен" : "Artificial demand spikes at random", EconomyType.TaxFrenzy => flag ? "Цены упали из-за налогов" : "Tax rates hit hard! Prices plummet", EconomyType.AssetDump => flag ? "Всe сливают активы" : "Everyone's dumping assets!", EconomyType.SmugglersSurge => flag ? "Дорогие вещи рвутся в цене, остальное теряет смысл" : "Expensive items skyrocket, cheap ones tank", EconomyType.CollectorsCraze => flag ? "Только редкие предметы в цене — остальное бесполезно" : "Rare collectibles soar — the rest is junk", EconomyType.MarketKraken => flag ? "Биржа сошла с ума! 30% предметов получат *х4* цену!" : "The market goes wild! 30% of valuables get ×4 boost!", EconomyType.MarketBoom => flag ? "Цены резко растут по всему рынку!" : "Prices surge across the entire market!", EconomyType.PriceLockdown => flag ? "Правительство замораживает все цены..." : "All prices are frozen by decree", EconomyType.WildSpeculation => flag ? "Спекулянты творят хаос: всё летит вверх и вниз!" : "Speculators drive prices wildly up and down!", EconomyType.SilentAuction => flag ? "Аукционы без торговцев — цены неопределённы" : "Auctions run in silence, prices unclear", EconomyType.FlashCrash => flag ? "Мгновенное обрушение цен по всем активам!" : "Instant crash wiping out asset values!", EconomyType.CryptoSurge => flag ? "Криптовалюты захлестнул рост!" : "Cryptocurrencies push the market sky-high!", EconomyType.ResourceRush => flag ? "Дефицит ресурсов: цены на всё растут" : "Resource scarcity drives prices up", EconomyType.DemandSpike => flag ? "Взрывной спрос на товары!" : "Explosive demand floods the market!", EconomyType.SupplyShortage => flag ? "Серьёзный дефицит поставок" : "Severe supply shortages cripple prices", EconomyType.ConsumerConfidence => flag ? "Потребители необоснованно оптимистичны!" : "Consumers irrationally confident!", EconomyType.MarketMeltup => flag ? "Цены тают вверх: никто не может остановиться" : "A melt-up as prices climb uncontrollably!", EconomyType.BargainHunt => flag ? "Ищем редкие скидки: одни вещи падают, другие растут" : "Hunting bargains—some crash, others spike", EconomyType.MarketRebound => flag ? "После обрушения рынок быстро возвращается к росту!" : "After a crash, the market swiftly rebounds!", EconomyType.PriceCascade => flag ? "Цены обваливаются каскадом, но могут отскочить" : "Prices cascade downward, but may bounce back", EconomyType.BullRun => flag ? "Бычий рынок: цены мчатся наверх!" : "A bull run—prices charge skyward!", EconomyType.BearTrap => flag ? "Медвежья ловушка: временный рост перед падением…" : "A bear trap—brief gains before a fall…", EconomyType.PanicBuying => flag ? "Игроки скупают всё подряд—запасы тают!" : "Players panic-buy—supplies vanish!", EconomyType.SupplyGlut => flag ? "Перепроизводство: цены тонут из-за избытка" : "Oversupply—prices sink under glut", EconomyType.SpeculatorFrenzy => flag ? "Спекулянты безудержно качают цены—хаос!" : "Speculators push prices to chaotic extremes!", EconomyType.ValueStabilizer => flag ? "Регуляторные меры удерживают цены в узких рамках" : "Regulatory measures keep prices in check", EconomyType.MarketMirroring => flag ? "Рынок повторяет своё предыдущее состояние" : "The market mirrors its previous level", EconomyType.InflationSpike => flag ? "Кратковременный скачок инфляции!" : "A sudden spike in inflation!", EconomyType.DeflationDip => flag ? "Резкое провал цен в дефляционную яму" : "Prices plunge into a deflationary dip", EconomyType.EconomicEquilibrium => flag ? "Баланс между спросом и предложением—стабильность" : "A perfect balance of supply and demand", EconomyType.PriceSurge => flag ? "Внезапный взлёт цен: все товары подорожали на 20–40%!" : "Sudden price surge—everything jumps 20–40%!", EconomyType.BargainBlitz => flag ? "Молниеносные скидки: всё дешевеет на 30–10%!" : "Flash discounts—prices drop 30–10% instantly!", EconomyType.CollectorCarnival => flag ? "Коллекционные редкости ×2, остальные −10%" : "Collectibles ×2, others −10%", EconomyType.GhostPrices => flag ? "Цены скачут “призрачно”: разброс −25…+25%" : "Ghostly prices—random offset ±25%", EconomyType.BarterBonanza => flag ? "Бартер в моде: дешёвые падают, дорогие растут" : "Barter bonanza—low items down, high items up", EconomyType.SeasonalShift => flag ? "Сезонная коррекция: +15% к низким, −5% к высоким ценам" : "Seasonal shift—min +15%, max −5%", EconomyType.BlackoutSale => flag ? "Чёрная распродажа: всё обесценивается −50…−30%" : "Blackout sale—prices slashed −50…−30%", EconomyType.InflationEbb => flag ? "Инфляция утихла: все цены снижаются на 10–20%" : "Inflation ebb—prices fall 10–20%", EconomyType.FoolsGold => flag ? "Невнятный бум: часть товаров +50%, остальные −10%" : "Fool’s Gold—some +50%, others −10%", EconomyType.HoardersHavoc => flag ? "Накопители скупают всё: дешёвые −40%, дорогие +10%" : "Hoarder's Havoc—cheap −40%, expensive +10%", EconomyType.PennyPinch => flag ? "Жёсткое удешевление: все цены −60…−40%" : "Penny Pinch—prices slump −60…−40%", EconomyType.Trendsetter => flag ? "Топовые товары дорожают: +30…+60%!" : "Trendsetter—premium items surge +30…+60%!", EconomyType.PriceSpike => flag ? "Цены внезапно подскакивают!" : "Prices suddenly spike across the board!", EconomyType.Clearance => flag ? "Обвальная распродажа: всё падает в цене!" : "Massive clearance cuts values everywhere!", EconomyType.BoomerangMarket => flag ? "Цены возвращаются — но не туда!" : "Values swing back—but unpredictably!", EconomyType.SilentDip => flag ? "Незаметный спад..." : "Quiet dip... nothing sells well", EconomyType.LuxuryOnly => flag ? "Ценятся только предметы класса люкс" : "Only luxury items hold value now", EconomyType.EarlyBubble => flag ? "Рынок перегрет с самого начала!" : "A bubble forms early—brace for boom", EconomyType.LateDeflation => flag ? "Цены падают ближе к концу..." : "Late-stage deflation drains the market", EconomyType.PriceSlalom => flag ? "Рынок скользит как на лыжах" : "A slalom of ups and downs", EconomyType.FalseDemand => flag ? "Спекулятивный всплеск спроса!" : "Artificial demand inflates prices!", EconomyType.UndergroundTrade => flag ? "Ценности утекли в тень..." : "Trade continues in the shadows", EconomyType.CrystalCrash => flag ? "Пузырь лопнул — рынок в стеклах" : "The bubble shatters into a crystal crash", EconomyType.GhostRush => flag ? "Цены словно мертвые души — летают вверх!" : "Phantom value rushes sweep the market!", _ => "???", }; } public static Color GetEconomyColor() { //IL_01e7: Unknown result type (might be due to invalid IL or missing references) //IL_01ec: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0208: 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_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_022d: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0238: Unknown result type (might be due to invalid IL or missing references) //IL_023d: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0257: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0277: Unknown result type (might be due to invalid IL or missing references) //IL_027c: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_0287: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_0292: Unknown result type (might be due to invalid IL or missing references) //IL_02a7: 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_02c1: 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_02db: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_02f5: 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_030f: Unknown result type (might be due to invalid IL or missing references) //IL_0314: Unknown result type (might be due to invalid IL or missing references) //IL_0329: Unknown result type (might be due to invalid IL or missing references) //IL_032e: Unknown result type (might be due to invalid IL or missing references) //IL_0343: Unknown result type (might be due to invalid IL or missing references) //IL_0348: Unknown result type (might be due to invalid IL or missing references) //IL_035d: Unknown result type (might be due to invalid IL or missing references) //IL_0362: Unknown result type (might be due to invalid IL or missing references) //IL_0377: Unknown result type (might be due to invalid IL or missing references) //IL_037c: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_0396: Unknown result type (might be due to invalid IL or missing references) //IL_03ab: Unknown result type (might be due to invalid IL or missing references) //IL_03b0: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03bb: Unknown result type (might be due to invalid IL or missing references) //IL_03c5: Unknown result type (might be due to invalid IL or missing references) //IL_03ca: Unknown result type (might be due to invalid IL or missing references) //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03e4: Unknown result type (might be due to invalid IL or missing references) //IL_03f9: Unknown result type (might be due to invalid IL or missing references) //IL_03fe: Unknown result type (might be due to invalid IL or missing references) //IL_0413: Unknown result type (might be due to invalid IL or missing references) //IL_0418: Unknown result type (might be due to invalid IL or missing references) //IL_042d: Unknown result type (might be due to invalid IL or missing references) //IL_0432: Unknown result type (might be due to invalid IL or missing references) //IL_0447: Unknown result type (might be due to invalid IL or missing references) //IL_044c: Unknown result type (might be due to invalid IL or missing references) //IL_0461: Unknown result type (might be due to invalid IL or missing references) //IL_0466: Unknown result type (might be due to invalid IL or missing references) //IL_047b: Unknown result type (might be due to invalid IL or missing references) //IL_0480: Unknown result type (might be due to invalid IL or missing references) //IL_0495: Unknown result type (might be due to invalid IL or missing references) //IL_049a: Unknown result type (might be due to invalid IL or missing references) //IL_04af: Unknown result type (might be due to invalid IL or missing references) //IL_04b4: Unknown result type (might be due to invalid IL or missing references) //IL_04c9: Unknown result type (might be due to invalid IL or missing references) //IL_04ce: Unknown result type (might be due to invalid IL or missing references) //IL_04e3: Unknown result type (might be due to invalid IL or missing references) //IL_04e8: Unknown result type (might be due to invalid IL or missing references) //IL_04fd: Unknown result type (might be due to invalid IL or missing references) //IL_0502: Unknown result type (might be due to invalid IL or missing references) //IL_0517: Unknown result type (might be due to invalid IL or missing references) //IL_051c: Unknown result type (might be due to invalid IL or missing references) //IL_0531: Unknown result type (might be due to invalid IL or missing references) //IL_0536: Unknown result type (might be due to invalid IL or missing references) //IL_054b: Unknown result type (might be due to invalid IL or missing references) //IL_0550: Unknown result type (might be due to invalid IL or missing references) //IL_0565: Unknown result type (might be due to invalid IL or missing references) //IL_056a: Unknown result type (might be due to invalid IL or missing references) //IL_057f: Unknown result type (might be due to invalid IL or missing references) //IL_0584: Unknown result type (might be due to invalid IL or missing references) //IL_0599: Unknown result type (might be due to invalid IL or missing references) //IL_059e: Unknown result type (might be due to invalid IL or missing references) //IL_05b3: Unknown result type (might be due to invalid IL or missing references) //IL_05b8: Unknown result type (might be due to invalid IL or missing references) //IL_05cd: Unknown result type (might be due to invalid IL or missing references) //IL_05d2: Unknown result type (might be due to invalid IL or missing references) //IL_05e7: Unknown result type (might be due to invalid IL or missing references) //IL_05ec: Unknown result type (might be due to invalid IL or missing references) //IL_0601: Unknown result type (might be due to invalid IL or missing references) //IL_0606: Unknown result type (might be due to invalid IL or missing references) //IL_061b: Unknown result type (might be due to invalid IL or missing references) //IL_0620: Unknown result type (might be due to invalid IL or missing references) //IL_0635: Unknown result type (might be due to invalid IL or missing references) //IL_063a: Unknown result type (might be due to invalid IL or missing references) //IL_064f: Unknown result type (might be due to invalid IL or missing references) //IL_0654: Unknown result type (might be due to invalid IL or missing references) //IL_0669: Unknown result type (might be due to invalid IL or missing references) //IL_066e: Unknown result type (might be due to invalid IL or missing references) //IL_0683: Unknown result type (might be due to invalid IL or missing references) //IL_0688: Unknown result type (might be due to invalid IL or missing references) //IL_068e: Unknown result type (might be due to invalid IL or missing references) //IL_0693: Unknown result type (might be due to invalid IL or missing references) //IL_06a8: Unknown result type (might be due to invalid IL or missing references) //IL_06ad: Unknown result type (might be due to invalid IL or missing references) //IL_06c2: Unknown result type (might be due to invalid IL or missing references) //IL_06c7: Unknown result type (might be due to invalid IL or missing references) //IL_06dc: Unknown result type (might be due to invalid IL or missing references) //IL_06e1: Unknown result type (might be due to invalid IL or missing references) //IL_06f6: Unknown result type (might be due to invalid IL or missing references) //IL_06fb: Unknown result type (might be due to invalid IL or missing references) //IL_0710: Unknown result type (might be due to invalid IL or missing references) //IL_0715: Unknown result type (might be due to invalid IL or missing references) //IL_072a: Unknown result type (might be due to invalid IL or missing references) //IL_072f: Unknown result type (might be due to invalid IL or missing references) //IL_0744: Unknown result type (might be due to invalid IL or missing references) //IL_0749: Unknown result type (might be due to invalid IL or missing references) //IL_075e: Unknown result type (might be due to invalid IL or missing references) //IL_0763: Unknown result type (might be due to invalid IL or missing references) //IL_0778: Unknown result type (might be due to invalid IL or missing references) //IL_077d: Unknown result type (might be due to invalid IL or missing references) //IL_0792: Unknown result type (might be due to invalid IL or missing references) //IL_0797: Unknown result type (might be due to invalid IL or missing references) //IL_07ac: Unknown result type (might be due to invalid IL or missing references) //IL_07b1: Unknown result type (might be due to invalid IL or missing references) //IL_07c6: Unknown result type (might be due to invalid IL or missing references) //IL_07cb: Unknown result type (might be due to invalid IL or missing references) //IL_07e0: Unknown result type (might be due to invalid IL or missing references) //IL_07e5: Unknown result type (might be due to invalid IL or missing references) //IL_07fa: Unknown result type (might be due to invalid IL or missing references) //IL_07ff: Unknown result type (might be due to invalid IL or missing references) //IL_0814: Unknown result type (might be due to invalid IL or missing references) //IL_0819: Unknown result type (might be due to invalid IL or missing references) //IL_082e: Unknown result type (might be due to invalid IL or missing references) //IL_0833: Unknown result type (might be due to invalid IL or missing references) //IL_0848: Unknown result type (might be due to invalid IL or missing references) //IL_084d: Unknown result type (might be due to invalid IL or missing references) //IL_0862: Unknown result type (might be due to invalid IL or missing references) //IL_0867: Unknown result type (might be due to invalid IL or missing references) //IL_087c: Unknown result type (might be due to invalid IL or missing references) //IL_0881: Unknown result type (might be due to invalid IL or missing references) //IL_0896: Unknown result type (might be due to invalid IL or missing references) //IL_089b: Unknown result type (might be due to invalid IL or missing references) //IL_08b0: Unknown result type (might be due to invalid IL or missing references) //IL_08b5: Unknown result type (might be due to invalid IL or missing references) //IL_08ca: Unknown result type (might be due to invalid IL or missing references) //IL_08cf: Unknown result type (might be due to invalid IL or missing references) //IL_08e4: Unknown result type (might be due to invalid IL or missing references) //IL_08e9: Unknown result type (might be due to invalid IL or missing references) //IL_08fe: Unknown result type (might be due to invalid IL or missing references) //IL_0903: Unknown result type (might be due to invalid IL or missing references) //IL_0918: Unknown result type (might be due to invalid IL or missing references) //IL_091d: Unknown result type (might be due to invalid IL or missing references) //IL_0932: Unknown result type (might be due to invalid IL or missing references) //IL_0937: Unknown result type (might be due to invalid IL or missing references) //IL_094c: Unknown result type (might be due to invalid IL or missing references) //IL_0951: Unknown result type (might be due to invalid IL or missing references) //IL_0966: Unknown result type (might be due to invalid IL or missing references) //IL_096b: Unknown result type (might be due to invalid IL or missing references) //IL_0980: Unknown result type (might be due to invalid IL or missing references) //IL_0985: Unknown result type (might be due to invalid IL or missing references) //IL_099a: Unknown result type (might be due to invalid IL or missing references) //IL_099f: Unknown result type (might be due to invalid IL or missing references) //IL_09b4: Unknown result type (might be due to invalid IL or missing references) //IL_09b9: Unknown result type (might be due to invalid IL or missing references) //IL_09ce: Unknown result type (might be due to invalid IL or missing references) //IL_09d3: Unknown result type (might be due to invalid IL or missing references) //IL_09e8: Unknown result type (might be due to invalid IL or missing references) //IL_09ed: Unknown result type (might be due to invalid IL or missing references) //IL_0a02: Unknown result type (might be due to invalid IL or missing references) //IL_0a07: Unknown result type (might be due to invalid IL or missing references) //IL_0a1c: Unknown result type (might be due to invalid IL or missing references) //IL_0a21: Unknown result type (might be due to invalid IL or missing references) //IL_0a36: Unknown result type (might be due to invalid IL or missing references) //IL_0a3b: Unknown result type (might be due to invalid IL or missing references) //IL_0a50: Unknown result type (might be due to invalid IL or missing references) //IL_0a55: Unknown result type (might be due to invalid IL or missing references) //IL_0a6a: Unknown result type (might be due to invalid IL or missing references) //IL_0a6f: Unknown result type (might be due to invalid IL or missing references) //IL_0a84: Unknown result type (might be due to invalid IL or missing references) //IL_0a89: Unknown result type (might be due to invalid IL or missing references) //IL_0a9e: Unknown result type (might be due to invalid IL or missing references) //IL_0aa3: Unknown result type (might be due to invalid IL or missing references) //IL_0ab8: Unknown result type (might be due to invalid IL or missing references) //IL_0abd: Unknown result type (might be due to invalid IL or missing references) //IL_0ad2: Unknown result type (might be due to invalid IL or missing references) //IL_0ad7: Unknown result type (might be due to invalid IL or missing references) //IL_0aec: Unknown result type (might be due to invalid IL or missing references) //IL_0af1: Unknown result type (might be due to invalid IL or missing references) //IL_0b06: Unknown result type (might be due to invalid IL or missing references) //IL_0b0b: Unknown result type (might be due to invalid IL or missing references) //IL_0b20: Unknown result type (might be due to invalid IL or missing references) //IL_0b25: Unknown result type (might be due to invalid IL or missing references) //IL_0b3a: Unknown result type (might be due to invalid IL or missing references) //IL_0b3f: Unknown result type (might be due to invalid IL or missing references) //IL_0b54: Unknown result type (might be due to invalid IL or missing references) //IL_0b59: Unknown result type (might be due to invalid IL or missing references) //IL_0b6b: Unknown result type (might be due to invalid IL or missing references) //IL_0b70: Unknown result type (might be due to invalid IL or missing references) //IL_0b82: Unknown result type (might be due to invalid IL or missing references) //IL_0b87: Unknown result type (might be due to invalid IL or missing references) //IL_0b99: Unknown result type (might be due to invalid IL or missing references) //IL_0b9e: Unknown result type (might be due to invalid IL or missing references) //IL_0bb0: Unknown result type (might be due to invalid IL or missing references) //IL_0bb5: Unknown result type (might be due to invalid IL or missing references) //IL_0bc7: Unknown result type (might be due to invalid IL or missing references) //IL_0bcc: Unknown result type (might be due to invalid IL or missing references) //IL_0bd5: Unknown result type (might be due to invalid IL or missing references) //IL_0bcf: Unknown result type (might be due to invalid IL or missing references) //IL_0bd4: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) if (REPOConfig.EnableCustomEvents.Value && CurrentCustomEconomy != null) { float[] color = CurrentCustomEconomy.color; if (color != null && color.Length == 3) { return new Color(color[0], color[1], color[2]); } } return (Color)(CurrentEconomy switch { EconomyType.Stable => Color.white, EconomyType.Deflation => Color.red, EconomyType.Inflation => Color.green, EconomyType.Chaos => Color.cyan, EconomyType.FreezeMarket => Color.gray, EconomyType.BlackMarketSurge => new Color(1f, 0.84f, 0f), EconomyType.Overload => Color.magenta, EconomyType.RareBoom => new Color(0.7f, 0.2f, 1f), EconomyType.CommonCrash => Color.gray, EconomyType.LegendaryOnlyMatters => new Color(1f, 0.9f, 0.1f), EconomyType.EchoMarket => Color.yellow, EconomyType.ReverseInflation => Color.blue, EconomyType.LuxuryHunt => new Color(0.2f, 1f, 0.4f), EconomyType.DumpsterDive => new Color(0.6f, 0.3f, 0f), EconomyType.ExtraProfit => new Color(0.1f, 0.8f, 1f), EconomyType.ScamSeason => new Color(0.5f, 0f, 0.5f), EconomyType.SuddenDrop => new Color(1f, 0.4f, 0f), EconomyType.TreasureRush => new Color(1f, 0.65f, 0f), EconomyType.ZeroGravity => new Color(0.8f, 0.8f, 0.8f), EconomyType.Turbulence => new Color(0.4f, 0.6f, 0.8f), EconomyType.BubbleBurst => new Color(0.7f, 0.2f, 0.2f), EconomyType.CollectorsFrenzy => new Color(1f, 0.85f, 0.3f), EconomyType.PanicSale => new Color(1f, 0.4f, 0.1f), EconomyType.EconomicTwister => Color.Lerp(Color.red, Color.green, Random.value), EconomyType.TaxAudit => new Color(0.3f, 0.4f, 0.6f), EconomyType.CrashAndBurn => new Color(0.5f, 0.1f, 0.1f), EconomyType.GoldenHour => new Color(1f, 0.85f, 0.3f), EconomyType.CrystalBubble => new Color(1f, 0.9f, 1f), EconomyType.CoinDecay => new Color(0.4f, 0.4f, 0.4f), EconomyType.EchoCrash => new Color(0.8f, 0.3f, 0.9f), EconomyType.SpeculationBubble => new Color(1f, 0.6f, 0f), EconomyType.ColdStorage => new Color(0.3f, 0.5f, 0.9f), EconomyType.PriceWhirlwind => new Color(0.5f, 0.9f, 0.7f), EconomyType.ExperimentalPricing => new Color(0.6f, 0.3f, 0.9f), EconomyType.ShadowMarket => new Color(0.1f, 0.1f, 0.1f), EconomyType.AuctionFever => new Color(1f, 0.65f, 0f), EconomyType.MemoryMarket => new Color(0.5f, 0.9f, 0.8f), EconomyType.LoopbackSpike => new Color(1f, 0.6f, 0.3f), EconomyType.GlitchedGoldrush => new Color(1f, 1f, 0.2f), EconomyType.MarketEclipse => new Color(0.2f, 0.2f, 0.2f), EconomyType.JackpotMirage => new Color(1f, 0.75f, 0.3f), EconomyType.CollectorsVoid => new Color(0.1f, 0.1f, 0.1f), EconomyType.VolatileExperiment => new Color(1f, 0f, 0.5f), EconomyType.CleanSweep => new Color(0.8f, 0.95f, 1f), EconomyType.ValueVortex => new Color(0.6f, 0.2f, 1f), EconomyType.TemporalSurge => new Color(0.8f, 0.4f, 1f), EconomyType.EchoOfWealth => new Color(0.5f, 0.7f, 0.9f), EconomyType.ArtifactBloat => new Color(0.9f, 0.6f, 0.1f), EconomyType.MarketDrain => new Color(0.2f, 0.1f, 0.1f), EconomyType.InversionProtocol => new Color(1f, 0f, 1f), EconomyType.SyntheticDemand => new Color(0.3f, 1f, 0.6f), EconomyType.TaxFrenzy => Color.red, EconomyType.AssetDump => new Color(0.4f, 0.2f, 0.6f), EconomyType.SmugglersSurge => new Color(0.8f, 0.6f, 0.1f), EconomyType.CollectorsCraze => new Color(0.6f, 0.3f, 1f), EconomyType.MarketKraken => new Color(0f, 0.7f, 1f), EconomyType.MarketBoom => new Color(1f, 0.6f, 0f), EconomyType.PriceLockdown => new Color(0.5f, 0.5f, 0.5f), EconomyType.WildSpeculation => new Color(1f, 0f, 1f), EconomyType.SilentAuction => new Color(0.8f, 0.8f, 0.2f), EconomyType.FlashCrash => new Color(0.2f, 0f, 0f), EconomyType.CryptoSurge => new Color(0f, 1f, 0.8f), EconomyType.ResourceRush => new Color(0.4f, 0.8f, 0.2f), EconomyType.DemandSpike => new Color(1f, 0.2f, 0.2f), EconomyType.SupplyShortage => new Color(0.6f, 0.3f, 0.1f), EconomyType.ConsumerConfidence => new Color(0.2f, 0.6f, 1f), EconomyType.MarketMeltup => new Color(1f, 0.9f, 0.3f), EconomyType.BargainHunt => new Color(0.2f, 1f, 0.2f), EconomyType.MarketRebound => new Color(0.2f, 1f, 0.4f), EconomyType.PriceCascade => new Color(0.6f, 0.2f, 0.8f), EconomyType.BullRun => new Color(1f, 0.8f, 0.2f), EconomyType.BearTrap => new Color(0.5f, 0.1f, 0.1f), EconomyType.PanicBuying => new Color(1f, 0.2f, 0.2f), EconomyType.SupplyGlut => new Color(0.2f, 0.2f, 1f), EconomyType.SpeculatorFrenzy => new Color(1f, 0.4f, 0.8f), EconomyType.ValueStabilizer => new Color(0.8f, 0.8f, 0.8f), EconomyType.MarketMirroring => new Color(0.3f, 0.7f, 0.7f), EconomyType.InflationSpike => new Color(1f, 0.5f, 0.1f), EconomyType.DeflationDip => new Color(0.1f, 0.5f, 1f), EconomyType.EconomicEquilibrium => new Color(1f, 1f, 1f), EconomyType.PriceSurge => new Color(1f, 0.5f, 0f), EconomyType.BargainBlitz => new Color(0f, 1f, 0.5f), EconomyType.CollectorCarnival => new Color(1f, 0f, 1f), EconomyType.GhostPrices => new Color(0.5f, 0.5f, 0.5f), EconomyType.BarterBonanza => new Color(0.6f, 0.4f, 0.2f), EconomyType.SeasonalShift => new Color(0.4f, 1f, 0.4f), EconomyType.BlackoutSale => new Color(0.5f, 0f, 0f), EconomyType.InflationEbb => new Color(0f, 0f, 1f), EconomyType.FoolsGold => new Color(1f, 0.84f, 0f), EconomyType.HoardersHavoc => new Color(0.5f, 0f, 0.5f), EconomyType.PennyPinch => new Color(0.3f, 0.3f, 0.3f), EconomyType.Trendsetter => new Color(0f, 1f, 1f), EconomyType.PriceSpike => new Color(1f, 0.4f, 0.2f), EconomyType.Clearance => new Color(0.3f, 0.7f, 0.9f), EconomyType.BoomerangMarket => new Color(0.6f, 0.3f, 0.7f), EconomyType.SilentDip => new Color(0.6f, 0.6f, 0.6f), EconomyType.LuxuryOnly => new Color(1f, 0.9f, 0.7f), EconomyType.EarlyBubble => new Color(1f, 0.8f, 0.4f), EconomyType.LateDeflation => new Color(0.2f, 0.3f, 0.9f), EconomyType.PriceSlalom => new Color(0.4f, 1f, 0.4f), EconomyType.FalseDemand => new Color(1f, 0.6f, 0.1f), EconomyType.UndergroundTrade => new Color(0.2f, 0.1f, 0.1f), EconomyType.CrystalCrash => new Color(0.8f, 0.8f, 1f), EconomyType.GhostRush => new Color(1f, 1f, 1f), _ => Color.gray, }); } public static void ResetEconomy() { HasEconomy = false; MinPercent = 0f; MaxPercent = 0f; CurrentEconomy = EconomyType.Stable; ValuablePatch.ResetKraken(); Logger.LogInfo((object)"[Economy] The economy has been reset. Ready for a new race."); } } public static class UILocalization { public static string Get(string key) { bool flag = REPOConfig.UILanguage.Value == "Russian"; return key switch { "UI_Event" => flag ? "Экономика" : "Economy", "UI_Range" => flag ? "Диапазон" : "Range", "UI_Level" => flag ? "Уровень" : "Level", _ => key, }; } } }