Decompiled source of BalanceConfigurator v1.2.1

plugins/BalanceConfigurator.Plugin.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using SimpleInjector;
using TrainworksReloaded.Base;
using TrainworksReloaded.Core;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("BalanceConfigurator.Plugin")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.2.1.0")]
[assembly: AssemblyInformationalVersion("1.2.1+bdbee15f460abbaff405b3e2617098a91ec340a2")]
[assembly: AssemblyProduct("BalanceConfigurator.Plugin")]
[assembly: AssemblyTitle("BalanceConfigurator.Plugin")]
[assembly: AssemblyVersion("1.2.1.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.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableAttribute : Attribute
	{
		public readonly byte[] NullableFlags;

		public NullableAttribute(byte P_0)
		{
			NullableFlags = new byte[1] { P_0 };
		}

		public NullableAttribute(byte[] P_0)
		{
			NullableFlags = P_0;
		}
	}
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
	internal sealed class NullableContextAttribute : Attribute
	{
		public readonly byte Flag;

		public NullableContextAttribute(byte P_0)
		{
			Flag = P_0;
		}
	}
	[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 BalanceConfigurator.Plugin
{
	internal class ConfigDescriptionBuilder
	{
		public string English { get; set; } = "";


		public string French { get; set; } = "";


		public string German { get; set; } = "";


		public string Russian { get; set; } = "";


		public string Portuguese { get; set; } = "";


		public string Chinese { get; set; } = "";


		public string Spanish { get; set; } = "";


		public string ChineseTraditional { get; set; } = "";


		public string Korean { get; set; } = "";


		public string Japanese { get; set; } = "";


		public override string ToString()
		{
			StringBuilder stringBuilder = new StringBuilder();
			if (!string.IsNullOrEmpty(English))
			{
				stringBuilder.AppendLine(English);
			}
			if (!string.IsNullOrEmpty(French))
			{
				stringBuilder.AppendLine(French);
			}
			if (!string.IsNullOrEmpty(German))
			{
				stringBuilder.AppendLine(German);
			}
			if (!string.IsNullOrEmpty(Russian))
			{
				stringBuilder.AppendLine(Russian);
			}
			if (!string.IsNullOrEmpty(Portuguese))
			{
				stringBuilder.AppendLine(Portuguese);
			}
			if (!string.IsNullOrEmpty(Chinese))
			{
				stringBuilder.AppendLine(Chinese);
			}
			if (!string.IsNullOrEmpty(Spanish))
			{
				stringBuilder.AppendLine(Spanish);
			}
			if (!string.IsNullOrEmpty(ChineseTraditional))
			{
				stringBuilder.AppendLine(ChineseTraditional);
			}
			if (!string.IsNullOrEmpty(Korean))
			{
				stringBuilder.AppendLine(Korean);
			}
			if (!string.IsNullOrEmpty(Japanese))
			{
				stringBuilder.AppendLine(Japanese);
			}
			return stringBuilder.ToString().TrimEnd();
		}
	}
	[BepInPlugin("BalanceConfigurator.Plugin", "BalanceConfigurator.Plugin", "1.2.1")]
	public class Plugin : BaseUnityPlugin
	{
		internal static ManualLogSource Logger = new ManualLogSource("BalanceConfigurator.Plugin");

		private ConfigEntry<int>? startingGold;

		private ConfigEntry<int>? maxHandSize;

		private ConfigEntry<int>? startOfTurnEnergy;

		private ConfigEntry<int>? startOfDeploymentPhaseEnergy;

		private ConfigEntry<int>? maxEnergy;

		private ConfigEntry<int>? initialDragonsHoardCap;

		private ConfigEntry<int>? maxDragonsHoard;

		private ConfigEntry<int>? startOfTurnCards;

		private ConfigEntry<int>? unitUpgradeSlots;

		private ConfigEntry<int>? spellUpgradeSlots;

		private ConfigEntry<int>? equipmentUpgradeSlots;

		private ConfigEntry<int>? numSpawnPointsPerFloor;

		private ConfigEntry<int>? characterCapacityPerFloor;

		private ConfigEntry<int>? maxMutatorCount;

		private ConfigEntry<int>? championUpgradesShown;

		private ConfigEntry<float>? mainClanXpFactor;

		private ConfigEntry<float>? subClanXpFactor;

		private ConfigEntry<int>? alternateChampionUnlockLevel;

		private ConfigEntry<int>? cardRarityTicketCommon;

		private ConfigEntry<int>? cardRarityTicketUncommon;

		private ConfigEntry<int>? cardRarityTicketRare;

		private ConfigEntry<int>? cardRarityTicketChampion;

		private ConfigEntry<int>? enhancerRarityTicketCommon;

		private ConfigEntry<int>? enhancerRarityTicketUncommon;

		private ConfigEntry<int>? enhancerRarityTicketRare;

		private ConfigEntry<int>? enhancerRarityTicketChampion;

		private ConfigEntry<int>? relicRarityTicketCommon;

		private ConfigEntry<int>? relicRarityTicketUncommon;

		private ConfigEntry<int>? relicRarityTicketRare;

		private ConfigEntry<int>? relicRarityTicketChampion;

		private ConfigEntry<int>? goldSkipCardDraft;

		private ConfigEntry<int>? goldSkipRelicDraft;

		private ConfigEntry<int>? goldSkipChampionUpgrade;

		private ConfigEntry<int>? goldSkipIndividualRelic;

		private ConfigEntry<int>? goldSkipIndividualCard;

		private ConfigEntry<int>? goldSkipPurge;

		private ConfigEntry<int>? goldSkipLevelUpUnit;

		private ConfigEntry<int>? chanceOfOptionalOutpostDialogue;

		private ConfigEntry<float>? fastDialogueMultiplier;

		private ConfigEntry<int>? draftCostCommonCardMin;

		private ConfigEntry<int>? draftCostCommonCardMax;

		private ConfigEntry<int>? draftCostUncommonCardMin;

		private ConfigEntry<int>? draftCostUncommonCardMax;

		private ConfigEntry<int>? draftCostRareCardMin;

		private ConfigEntry<int>? draftCostRareCardMax;

		private ConfigEntry<int>? draftCostCommonRelicMin;

		private ConfigEntry<int>? draftCostCommonRelicMax;

		private ConfigEntry<int>? draftCostUncommonRelicMin;

		private ConfigEntry<int>? draftCostUncommonRelicMax;

		private ConfigEntry<int>? draftCostRareRelicMin;

		private ConfigEntry<int>? draftCostRareRelicMax;

		private ConfigEntry<int>? draftCostCommonEnhancerMin;

		private ConfigEntry<int>? draftCostCommonEnhancerMax;

		private ConfigEntry<int>? draftCostUncommonEnhancerMin;

		private ConfigEntry<int>? draftCostUncommonEnhancerMax;

		private ConfigEntry<int>? draftCostRareEnhancerMin;

		private ConfigEntry<int>? draftCostRareEnhancerMax;

		public void Awake()
		{
			Logger = ((BaseUnityPlugin)this).Logger;
			FormConfiguration();
			Railend.ConfigurePostAction((Action<Container>)delegate(Container c)
			{
				SaveManager val = default(SaveManager);
				if (!c.GetInstance<GameDataClient>().TryGetProvider<SaveManager>(ref val))
				{
					Logger.LogError((object)"Failed to get SaveManager instance please report this https://github.com/Monster-Train-2-Modding-Group/Balance-Configurator/issues");
				}
				else
				{
					BalanceData balanceData = val.GetAllGameData().GetBalanceData();
					ReconfigureBalance(balanceData);
				}
			});
			Logger.LogInfo((object)"Plugin BalanceConfigurator.Plugin is loaded!");
		}

		private void FormConfiguration()
		{
			startingGold = ((BaseUnityPlugin)this).Config.Bind<int>("Gold", "Starting Gold", 50, new ConfigDescriptionBuilder
			{
				English = "Starting Gold in a run.",
				Chinese = "修改一轮游戏的初始金钱。"
			}.ToString());
			startOfTurnCards = ((BaseUnityPlugin)this).Config.Bind<int>("Hand Size", "Initial Hand Size", 5, new ConfigDescriptionBuilder
			{
				English = "Starting hand size.",
				Chinese = "修改每回合的初始抽牌数量。"
			}.ToString());
			maxHandSize = ((BaseUnityPlugin)this).Config.Bind<int>("Hand Size", "Max Hand Size", 10, new ConfigDescriptionBuilder
			{
				English = "Maximum hand size possible.",
				Chinese = "修改手牌数量上限。"
			}.ToString());
			startOfTurnEnergy = ((BaseUnityPlugin)this).Config.Bind<int>("Ember", "Starting Ember", 3, new ConfigDescriptionBuilder
			{
				English = "Starting ember gained per turn in a run.",
				Chinese = "修改每回合获得的初始余烬数量。"
			}.ToString());
			startOfDeploymentPhaseEnergy = ((BaseUnityPlugin)this).Config.Bind<int>("Ember", "Deployment Phase Ember", 1, new ConfigDescriptionBuilder
			{
				English = "Extra ember given during the Deployment Phase.",
				Chinese = "修改初始部署余烬数量。"
			}.ToString());
			maxEnergy = ((BaseUnityPlugin)this).Config.Bind<int>("Ember", "Maximum Ember", 99, new ConfigDescriptionBuilder
			{
				English = "Maximum ember that is possible during a turn.",
				Chinese = "修改余烬数量上限。"
			}.ToString());
			initialDragonsHoardCap = ((BaseUnityPlugin)this).Config.Bind<int>("Dragons Hoard", "Initial Dragons Hoard Cap", 8, new ConfigDescriptionBuilder
			{
				English = "Initial cap on Dragons Hoard.",
				Chinese = "修改龙族宝藏的初始数量上限。"
			}.ToString());
			maxDragonsHoard = ((BaseUnityPlugin)this).Config.Bind<int>("Dragons Hoard", "Maximum Dragons Hoard Cap", 13, new ConfigDescriptionBuilder
			{
				English = "Maximum cap on Dragons Hoard that's possible in given run.",
				Chinese = "修改龙族宝藏的最大数量上限。"
			}.ToString());
			unitUpgradeSlots = ((BaseUnityPlugin)this).Config.Bind<int>("Upgrades and Slots", "Unit Upgrade Slots", 2, new ConfigDescriptionBuilder
			{
				English = "Initial amount of unit upgrade slots available.",
				Chinese = "修改单位的初始升级栏位数量。"
			}.ToString());
			spellUpgradeSlots = ((BaseUnityPlugin)this).Config.Bind<int>("Upgrades and Slots", "Spell Upgrade Slots", 2, new ConfigDescriptionBuilder
			{
				English = "Initial amount of spell upgrade slots available.",
				Chinese = "修改法术的初始升级栏位数量。"
			}.ToString());
			equipmentUpgradeSlots = ((BaseUnityPlugin)this).Config.Bind<int>("Upgrades and Slots", "Equipment Upgrade Slots", 0, new ConfigDescriptionBuilder
			{
				English = "Initial amount of equipment upgrade slots available (Currently equipment can't be upgraded).",
				Chinese = "修改装备的初始升级栏位数量(目前装备无法升级)。"
			}.ToString());
			championUpgradesShown = ((BaseUnityPlugin)this).Config.Bind<int>("Upgrades and Slots", "Champion Upgrades Shown", 2, new ConfigDescriptionBuilder
			{
				English = "Number of champion upgrades shown in the Light Forge.",
				Chinese = "修改光之锻炉出现的勇者升级数量。"
			}.ToString());
			numSpawnPointsPerFloor = ((BaseUnityPlugin)this).Config.Bind<int>("Floor Balance", "Num Spawn Points Per Floor", 7, new ConfigDescriptionBuilder
			{
				English = "Maximum number of spawn points (characters) that can be present on a side of the floor.",
				Chinese = "修改每层每方势力的单位数量上限。"
			}.ToString());
			characterCapacityPerFloor = ((BaseUnityPlugin)this).Config.Bind<int>("Floor Balance", "Character Capacity Per Floor", 5, new ConfigDescriptionBuilder
			{
				English = "Initial amount of capacity per floor.",
				Chinese = "修改每层的初始容量值。"
			}.ToString());
			maxMutatorCount = ((BaseUnityPlugin)this).Config.Bind<int>("Mutators", "Max Mutator Count", 3, new ConfigDescriptionBuilder
			{
				English = "Maximum amount of mutators that can be applied to a run.",
				Chinese = "修改一轮游戏的转变器数量上限。"
			}.ToString());
			mainClanXpFactor = ((BaseUnityPlugin)this).Config.Bind<float>("XP and Unlocks", "Main Clan Xp Factor", 1f, new ConfigDescriptionBuilder
			{
				English = "Scales the base amount of XP amount given to the primary clan at the end of a run.",
				Chinese = "修改在一轮游戏结束之后,主氏族获得经验的倍率。"
			}.ToString());
			subClanXpFactor = ((BaseUnityPlugin)this).Config.Bind<float>("XP and Unlocks", "Sub Clan Xp Factor", 0.5f, new ConfigDescriptionBuilder
			{
				English = "Scales the base amount of XP amount given to the allied clan at the end of a run.",
				Chinese = "修改在一轮游戏结束之后,盟友氏族获得经验的倍率。"
			}.ToString());
			alternateChampionUnlockLevel = ((BaseUnityPlugin)this).Config.Bind<int>("XP and Unlocks", "Alternate Champion Unlock Level", 5, new ConfigDescriptionBuilder
			{
				English = "The level at which the alternate champion is available.",
				Chinese = "修改备选勇者的解锁等级。"
			}.ToString());
			cardRarityTicketCommon = ((BaseUnityPlugin)this).Config.Bind<int>("Card Rarity Ticket Counts", "Common", 940, new ConfigDescriptionBuilder
			{
				English = "Number of tickets that will produce a common card when drafting a card. (Rings 1 & 2 only, non banner drafts)",
				Chinese = "修改自选卡牌时,普通卡牌出现的权重。出现的几率为该权重占权重总和中的比例。(仅前2层区域的除战旗以外的自选卡牌)"
			}.ToString());
			cardRarityTicketUncommon = ((BaseUnityPlugin)this).Config.Bind<int>("Card Rarity Ticket Counts", "Uncommon", 55, new ConfigDescriptionBuilder
			{
				English = "Number of tickets that will produce a uncommon card when drafting a card.",
				Chinese = "修改自选卡牌时,高级卡牌出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			cardRarityTicketRare = ((BaseUnityPlugin)this).Config.Bind<int>("Card Rarity Ticket Counts", "Rare", 5, new ConfigDescriptionBuilder
			{
				English = "Number of tickets that will produce a rare card when drafting a card.",
				Chinese = "修改自选卡牌时,稀有卡牌出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			cardRarityTicketChampion = ((BaseUnityPlugin)this).Config.Bind<int>("Card Rarity Ticket Counts", "Champion", 0, new ConfigDescriptionBuilder
			{
				English = "(Unused) number of tickets that will produce a champion card in a card draft.",
				Chinese = "(未使用)修改自选卡牌时,勇者卡牌出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			enhancerRarityTicketCommon = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Rarity Ticket Counts", "Common", 70, new ConfigDescriptionBuilder
			{
				English = "Number of tickets that will produce a common enhancer when finding an enhancer.",
				Chinese = "修改商店升级时,普通升级石出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			enhancerRarityTicketUncommon = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Rarity Ticket Counts", "Uncommon", 30, new ConfigDescriptionBuilder
			{
				English = "Number of tickets that will produce a uncommon enhancer when finding an enhancer.",
				Chinese = "修改商店升级时,高级升级石出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			enhancerRarityTicketRare = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Rarity Ticket Counts", "Rare", 0, new ConfigDescriptionBuilder
			{
				English = "Number of tickets that will produce a rare enhancer when finding an enhancer.",
				Chinese = "修改商店升级时,稀有升级石出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			enhancerRarityTicketChampion = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Rarity Ticket Counts", "Champion", 0, new ConfigDescriptionBuilder
			{
				English = "(Unused) number of tickets that will produce a champion enahncer when finding an enhancer.",
				Chinese = "(未使用)修改商店升级时,勇者升级石出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			relicRarityTicketCommon = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Rarity Ticket Counts", "Common", 80, new ConfigDescriptionBuilder
			{
				English = "Number of tickets that will produce a common relic when drafting a relic.",
				Chinese = "修改自选神器时,普通神器出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			relicRarityTicketUncommon = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Rarity Ticket Counts", "Uncommon", 20, new ConfigDescriptionBuilder
			{
				English = "Number of tickets that will produce a uncommon relic when drafting a relic.",
				Chinese = "修改自选神器时,高级神器出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			relicRarityTicketRare = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Rarity Ticket Counts", "Rare", 0, new ConfigDescriptionBuilder
			{
				English = "Number of tickets that will produce a rare relic when drafting a relic.",
				Chinese = "修改自选神器时,稀有神器出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			relicRarityTicketChampion = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Rarity Ticket Counts", "Champion", 0, new ConfigDescriptionBuilder
			{
				English = "Unused no chance of finding a champion relic in a relic draft.",
				Chinese = "(未使用)修改自选神器时,勇者神器出现的权重。出现的几率为该权重占权重总和中的比例。"
			}.ToString());
			goldSkipCardDraft = ((BaseUnityPlugin)this).Config.Bind<int>("Gold For Skipping Rewards", "Card Draft", 10, new ConfigDescriptionBuilder
			{
				English = "Gold for skipping a Card Draft.",
				Chinese = "修改跳过自选卡牌时获得的金钱。"
			}.ToString());
			goldSkipRelicDraft = ((BaseUnityPlugin)this).Config.Bind<int>("Gold For Skipping Rewards", "Relic Draft", 25, new ConfigDescriptionBuilder
			{
				English = "Gold for skipping a Relic Draft.",
				Chinese = "修改跳过自选神器时获得的金钱。"
			}.ToString());
			goldSkipChampionUpgrade = ((BaseUnityPlugin)this).Config.Bind<int>("Gold For Skipping Rewards", "Champion Upgrade Draft", 0, new ConfigDescriptionBuilder
			{
				English = "Gold for skipping a Champion Upgrade.",
				Chinese = "修改跳过勇者升级时获得的金钱。"
			}.ToString());
			goldSkipIndividualRelic = ((BaseUnityPlugin)this).Config.Bind<int>("Gold For Skipping Rewards", "Individual Relic", 25, new ConfigDescriptionBuilder
			{
				English = "Gold for skipping a singular Relic Draft.",
				Chinese = "修改跳过单件神器时获得的金钱。"
			}.ToString());
			goldSkipIndividualCard = ((BaseUnityPlugin)this).Config.Bind<int>("Gold For Skipping Rewards", "Individual Card", 10, new ConfigDescriptionBuilder
			{
				English = "Gold for skipping a singular Card Draft.",
				Chinese = "修改跳过单张卡牌时获得的金钱。"
			}.ToString());
			goldSkipPurge = ((BaseUnityPlugin)this).Config.Bind<int>("Gold For Skipping Rewards", "Purge", 0, new ConfigDescriptionBuilder
			{
				English = "Gold for skipping a Purge.",
				Chinese = "修改跳过移除卡牌时获得的金钱。"
			}.ToString());
			goldSkipLevelUpUnit = ((BaseUnityPlugin)this).Config.Bind<int>("Gold For Skipping Rewards", "Level Up Unit", 0, new ConfigDescriptionBuilder
			{
				English = "(Unused) Gold for skipping a Level Up Unit.",
				Chinese = "(未使用)修改跳过升级单位时获得的金钱。"
			}.ToString());
			chanceOfOptionalOutpostDialogue = ((BaseUnityPlugin)this).Config.Bind<int>("Dialogues", "Chance of Optional Output Dialogue", 30, new ConfigDescriptionBuilder
			{
				English = "Percentage chance of getting an optional outpost dialogue after a run (0-100).",
				Chinese = "修改在一轮游戏结束之后,契约前哨站可选对话的出现概率百分比(0-100)。"
			}.ToString());
			fastDialogueMultiplier = ((BaseUnityPlugin)this).Config.Bind<float>("Dialogues", "Fast Dialog Multiplier", 2f, new ConfigDescriptionBuilder
			{
				English = "Multiplier for fast dialogues.",
				Chinese = "修改对话的速度倍率。"
			}.ToString());
			draftCostCommonCardMin = ((BaseUnityPlugin)this).Config.Bind<int>("Card Draft Costs", "Minimum Cost Common Card", 20, new ConfigDescriptionBuilder
			{
				English = "Minimum cost of a common card.",
				Chinese = "修改普通卡牌的最低价格。"
			}.ToString());
			draftCostCommonCardMax = ((BaseUnityPlugin)this).Config.Bind<int>("Card Draft Costs", "Maximum Cost Common Card", 20, new ConfigDescriptionBuilder
			{
				English = "Maximum cost of an common card.",
				Chinese = "修改普通卡牌的最高价格。"
			}.ToString());
			draftCostUncommonCardMin = ((BaseUnityPlugin)this).Config.Bind<int>("Card Draft Costs", "Minimum Cost Uncommon Card", 40, new ConfigDescriptionBuilder
			{
				English = "Minimum cost of a uncommon card.",
				Chinese = "修改高级卡牌的最低价格。"
			}.ToString());
			draftCostUncommonCardMax = ((BaseUnityPlugin)this).Config.Bind<int>("Card Draft Costs", "Maximum Cost Uncommon Card", 40, new ConfigDescriptionBuilder
			{
				English = "Maximum cost of an uncommon card.",
				Chinese = "修改高级卡牌的最高价格。"
			}.ToString());
			draftCostRareCardMin = ((BaseUnityPlugin)this).Config.Bind<int>("Card Draft Costs", "Minimum Cost Rare Card", 90, new ConfigDescriptionBuilder
			{
				English = "Minimum cost of a rare card.",
				Chinese = "修改稀有卡牌的最低价格。"
			}.ToString());
			draftCostRareCardMax = ((BaseUnityPlugin)this).Config.Bind<int>("Card Draft Costs", "Maximum Cost Rare Card", 90, new ConfigDescriptionBuilder
			{
				English = "Maximum cost of a rare card.",
				Chinese = "修改稀有卡牌的最高价格。"
			}.ToString());
			draftCostCommonRelicMin = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Draft Costs", "Minimum Cost Common Relic", 125, new ConfigDescriptionBuilder
			{
				English = "Minimum cost of a common artifact.",
				Chinese = "修改普通神器的最低价格。"
			}.ToString());
			draftCostCommonRelicMax = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Draft Costs", "Maximum Cost Common Relic", 175, new ConfigDescriptionBuilder
			{
				English = "Maximum cost of an common artifact.",
				Chinese = "修改普通神器的最高价格。"
			}.ToString());
			draftCostUncommonRelicMin = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Draft Costs", "Minimum Cost Uncommon Relic", 125, new ConfigDescriptionBuilder
			{
				English = "Minimum cost of a uncommon artifact.",
				Chinese = "修改高级神器的最低价格。"
			}.ToString());
			draftCostUncommonRelicMax = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Draft Costs", "Maximum Cost Uncommon Relic", 175, new ConfigDescriptionBuilder
			{
				English = "Maximum cost of an uncommon artifact.",
				Chinese = "修改高级神器的最高价格。"
			}.ToString());
			draftCostRareRelicMin = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Draft Costs", "Minimum Cost Rare Relic", 999, new ConfigDescriptionBuilder
			{
				English = "(Unused) Minimum cost of a rare shop artifact.",
				Chinese = "(未使用)修改稀有神器的最低价格。"
			}.ToString());
			draftCostRareRelicMax = ((BaseUnityPlugin)this).Config.Bind<int>("Relic Draft Costs", "Maximum Cost Rare Relic", 999, new ConfigDescriptionBuilder
			{
				English = "(Unused) Maximum cost of a rare artifact.",
				Chinese = "(未使用)修改稀有神器的最高价格。"
			}.ToString());
			draftCostCommonEnhancerMin = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Draft Costs", "Minimum Cost Common Enhancer", 15, new ConfigDescriptionBuilder
			{
				English = "Minimum cost of a common shop upgrade.",
				Chinese = "修改普通升级石的最低价格。"
			}.ToString());
			draftCostCommonEnhancerMax = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Draft Costs", "Maximum Cost Common Enhancer", 25, new ConfigDescriptionBuilder
			{
				English = "Maximum cost of an common shop upgrade.",
				Chinese = "修改普通升级石的最高价格。"
			}.ToString());
			draftCostUncommonEnhancerMin = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Draft Costs", "Minimum Cost Uncommon Enhancer", 35, new ConfigDescriptionBuilder
			{
				English = "Minimum cost of a uncommon shop upgrade.",
				Chinese = "修改高级升级石的最低价格。"
			}.ToString());
			draftCostUncommonEnhancerMax = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Draft Costs", "Maximum Cost Uncommon Enhancer", 35, new ConfigDescriptionBuilder
			{
				English = "Maximum cost of an uncommon shop upgrade.",
				Chinese = "修改高级升级石的最高价格。"
			}.ToString());
			draftCostRareEnhancerMin = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Draft Costs", "Minimum Cost Rare Enhancer", 80, new ConfigDescriptionBuilder
			{
				English = "Minimum cost of a rare shop upgrade.",
				Chinese = "修改稀有升级石的最低价格。"
			}.ToString());
			draftCostRareEnhancerMax = ((BaseUnityPlugin)this).Config.Bind<int>("Enhancer (Shop Upgrade) Draft Costs", "Maximum Cost Rare Enhancer", 110, new ConfigDescriptionBuilder
			{
				English = "Maximum cost of a rare shop upgrade.",
				Chinese = "修改稀有升级石的最高价格。"
			}.ToString());
		}

		private void ReconfigureBalance(BalanceData balanceData)
		{
			//IL_0305: Unknown result type (might be due to invalid IL or missing references)
			//IL_0334: Unknown result type (might be due to invalid IL or missing references)
			//IL_0363: Unknown result type (might be due to invalid IL or missing references)
			//IL_0392: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_041f: Unknown result type (might be due to invalid IL or missing references)
			//IL_044e: Unknown result type (might be due to invalid IL or missing references)
			//IL_047d: Unknown result type (might be due to invalid IL or missing references)
			List<RarityTicket> rarityTicket = GetRarityTicket(cardRarityTicketCommon, cardRarityTicketUncommon, cardRarityTicketRare, cardRarityTicketChampion);
			List<RarityTicket> rarityTicket2 = GetRarityTicket(enhancerRarityTicketCommon, enhancerRarityTicketUncommon, enhancerRarityTicketRare, enhancerRarityTicketChampion);
			List<RarityTicket> rarityTicket3 = GetRarityTicket(relicRarityTicketCommon, relicRarityTicketUncommon, relicRarityTicketRare, relicRarityTicketChampion);
			GoldForSkippingRewardsData? goldForSkippingRewards = GetGoldForSkippingRewards();
			SafeSetField<BalanceData>(balanceData, "cardRarityTicketValues", rarityTicket);
			SafeSetField<BalanceData>(balanceData, "enhancerRarityTicketValues", rarityTicket2);
			SafeSetField<BalanceData>(balanceData, "relicRarityTicketValues", rarityTicket3);
			SafeSetField<BalanceData>(balanceData, "goldForSkippingRewards", goldForSkippingRewards);
			SafeSetField<BalanceData>(balanceData, "startingGold", startingGold.Value);
			SafeSetField<BalanceData>(balanceData, "maxHandSize", maxHandSize.Value);
			SafeSetField<BalanceData>(balanceData, "startOfTurnEnergy", startOfTurnEnergy.Value);
			SafeSetField<BalanceData>(balanceData, "startOfDeploymentPhaseEnergy", startOfDeploymentPhaseEnergy.Value);
			SafeSetField<BalanceData>(balanceData, "maxEnergy", maxEnergy.Value);
			SafeSetField<BalanceData>(balanceData, "initialDragonsHoardCap", initialDragonsHoardCap.Value);
			SafeSetField<BalanceData>(balanceData, "maxDragonsHoard", maxDragonsHoard.Value);
			SafeSetField<BalanceData>(balanceData, "startOfTurnCards", startOfTurnCards.Value);
			SafeSetField<BalanceData>(balanceData, "unitUpgradeSlots", unitUpgradeSlots.Value);
			SafeSetField<BalanceData>(balanceData, "spellUpgradeSlots", spellUpgradeSlots.Value);
			SafeSetField<BalanceData>(balanceData, "equipmentUpgradeSlots", equipmentUpgradeSlots.Value);
			SafeSetField<BalanceData>(balanceData, "numSpawnPointsPerFloor", numSpawnPointsPerFloor.Value);
			SafeSetField<BalanceData>(balanceData, "characterCapacityPerFloor", characterCapacityPerFloor.Value);
			SafeSetField<BalanceData>(balanceData, "maxMutatorCount", maxMutatorCount.Value);
			SafeSetField<BalanceData>(balanceData, "championUpgradesShown", championUpgradesShown.Value);
			SafeSetField<BalanceData>(balanceData, "mainClanXpFactor", mainClanXpFactor.Value);
			SafeSetField<BalanceData>(balanceData, "subClanXpFactor", subClanXpFactor.Value);
			SafeSetField<BalanceData>(balanceData, "alternateChampionUnlockLevel", alternateChampionUnlockLevel.Value);
			SafeSetField<BalanceData>(balanceData, "chanceOfOptionalOutpostDialogue", chanceOfOptionalOutpostDialogue.Value);
			SafeSetField<BalanceData>(balanceData, "fastDialogueMultiplier", fastDialogueMultiplier.Value);
			if (SafeGetField(balanceData, "draftCosts") is DraftCost[] array)
			{
				SafeSetField<DraftCost>(array[0], "costRange", (object)new Vector2Int(draftCostCommonCardMin.Value, draftCostCommonCardMax.Value));
				SafeSetField<DraftCost>(array[1], "costRange", (object)new Vector2Int(draftCostUncommonCardMin.Value, draftCostUncommonCardMax.Value));
				SafeSetField<DraftCost>(array[2], "costRange", (object)new Vector2Int(draftCostRareCardMin.Value, draftCostRareCardMax.Value));
				SafeSetField<DraftCost>(array[3], "costRange", (object)new Vector2Int(draftCostCommonRelicMin.Value, draftCostCommonRelicMax.Value));
				SafeSetField<DraftCost>(array[4], "costRange", (object)new Vector2Int(draftCostUncommonRelicMin.Value, draftCostUncommonRelicMax.Value));
				SafeSetField<DraftCost>(array[5], "costRange", (object)new Vector2Int(draftCostRareRelicMin.Value, draftCostRareRelicMax.Value));
				SafeSetField<DraftCost>(array[6], "costRange", (object)new Vector2Int(draftCostCommonEnhancerMin.Value, draftCostCommonEnhancerMax.Value));
				SafeSetField<DraftCost>(array[7], "costRange", (object)new Vector2Int(draftCostUncommonEnhancerMin.Value, draftCostUncommonEnhancerMax.Value));
				SafeSetField<DraftCost>(array[8], "costRange", (object)new Vector2Int(draftCostRareEnhancerMin.Value, draftCostRareEnhancerMax.Value));
			}
		}

		private void SafeSetField<T>(T? data, string field, object? obj)
		{
			if (data == null)
			{
				Logger.LogError((object)"Internal Error data is null");
				throw new ArgumentNullException("data");
			}
			if (obj == null)
			{
				Logger.LogWarning((object)("Not setting " + typeof(T).Name + " field " + field + " because the value to set is null (value specified may be invalid or field not present)"));
				return;
			}
			try
			{
				Logger.LogDebug((object)$"Setting {typeof(T).Name} field {field} to {obj}");
				AccessTools.Field(data.GetType(), field).SetValue(data, obj);
			}
			catch (Exception ex)
			{
				Logger.LogError((object)("Could not set " + typeof(T).Name + " field " + field + " because of an exception " + ex.Message));
			}
		}

		private object? SafeGetField(BalanceData balanceData, string field)
		{
			try
			{
				Logger.LogDebug((object)("Getting BalanceData field " + field));
				return AccessTools.Field(((object)balanceData).GetType(), field).GetValue(balanceData);
			}
			catch (Exception ex)
			{
				Logger.LogError((object)("Could not get BalanceData field " + field + " because of an exception " + ex.Message));
			}
			return null;
		}

		private List<RarityTicket>? GetRarityTicket(ConfigEntry<int> common, ConfigEntry<int> uncommon, ConfigEntry<int> rare, ConfigEntry<int> champion)
		{
			//IL_0009: 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_0024: 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_0036: 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_0051: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: 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_0075: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: 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)
			return new List<RarityTicket>(4)
			{
				new RarityTicket
				{
					rarityType = (CollectableRarity)0,
					ticketValue = common.Value
				},
				new RarityTicket
				{
					rarityType = (CollectableRarity)1,
					ticketValue = uncommon.Value
				},
				new RarityTicket
				{
					rarityType = (CollectableRarity)2,
					ticketValue = rare.Value
				},
				new RarityTicket
				{
					rarityType = (CollectableRarity)3,
					ticketValue = champion.Value
				}
			};
		}

		private GoldForSkippingRewardsData? GetGoldForSkippingRewards()
		{
			//IL_0002: 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)
			GoldForSkippingRewardsData value = default(GoldForSkippingRewardsData);
			value.cardDraft = goldSkipCardDraft.Value;
			value.blessingDraft = goldSkipRelicDraft.Value;
			value.championUpgradeDraft = goldSkipChampionUpgrade.Value;
			value.individualBlessing = goldSkipIndividualRelic.Value;
			value.individualCard = goldSkipIndividualCard.Value;
			value.purge = goldSkipPurge.Value;
			value.levelUpUnit = goldSkipLevelUpUnit.Value;
			return value;
		}
	}
	public static class MyPluginInfo
	{
		public const string PLUGIN_GUID = "BalanceConfigurator.Plugin";

		public const string PLUGIN_NAME = "BalanceConfigurator.Plugin";

		public const string PLUGIN_VERSION = "1.2.1";
	}
}