using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using BepInEx;
using BepInEx.Unity.IL2CPP;
using BoosterImplants;
using Clonesoft.Json;
using Clonesoft.Json.Linq;
using DropServer.BoosterImplants;
using GameData;
using Hikaria.BoosterTweaker.Managers;
using Il2CppInterop.Runtime.InteropTypes.Arrays;
using Il2CppSystem;
using Il2CppSystem.Collections.Generic;
using Localization;
using TheArchive;
using TheArchive.Core;
using TheArchive.Core.Attributes;
using TheArchive.Core.Attributes.Feature;
using TheArchive.Core.Attributes.Feature.Settings;
using TheArchive.Core.FeaturesAPI;
using TheArchive.Core.FeaturesAPI.Components;
using TheArchive.Core.Localization;
using TheArchive.Core.ModulesAPI;
using TheArchive.Interfaces;
using TheArchive.Loader;
using TheArchive.Utilities;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETCoreApp,Version=v6.0", FrameworkDisplayName = ".NET 6.0")]
[assembly: AssemblyCompany("Hikaria.BoosterTweaker")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+4b51ffe0699664700c04ac6f429db0810c27b301")]
[assembly: AssemblyProduct("Hikaria.BoosterTweaker")]
[assembly: AssemblyTitle("Hikaria.BoosterTweaker")]
[assembly: AssemblyVersion("1.0.0.0")]
namespace Hikaria.BoosterTweaker
{
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("Hikaria.BoosterTweaker", "BoosterTweaker", "1.2.1")]
public class EntryPoint : BasePlugin, IArchiveModule
{
public bool ApplyHarmonyPatches => false;
public bool UsesLegacyPatches => false;
public ArchiveLegacyPatcher Patcher { get; set; }
public static EntryPoint Instance { get; private set; }
public string ModuleGroup => "Perfect Booster";
public Dictionary<Language, string> ModuleGroupLanguages => new Dictionary<Language, string>
{
{
(Language)1,
"完美强化剂"
},
{
(Language)0,
"Perfect Booster"
}
};
public override void Load()
{
Instance = this;
ArchiveMod.RegisterArchiveModule(typeof(EntryPoint));
Logs.LogMessage("OK");
}
public void Init()
{
}
public void OnExit()
{
}
public void OnLateUpdate()
{
}
public void OnSceneWasLoaded(int buildIndex, string sceneName)
{
}
}
internal static class Logs
{
private static IArchiveLogger _logger;
private static IArchiveLogger Logger => _logger ?? (_logger = LoaderWrapper.CreateLoggerInstance("Hikaria.BoosterTweaker", ConsoleColor.White));
public static void LogDebug(object data)
{
Logger.Debug(data.ToString());
}
public static void LogError(object data)
{
Logger.Error(data.ToString());
}
public static void LogInfo(object data)
{
Logger.Info(data.ToString());
}
public static void LogMessage(object data)
{
Logger.Msg(ConsoleColor.White, data.ToString());
}
public static void LogWarning(object data)
{
Logger.Warning(data.ToString());
}
public static void LogNotice(object data)
{
Logger.Notice(data.ToString());
}
public static void LogSuccess(object data)
{
Logger.Success(data.ToString());
}
public static void LogException(Exception ex)
{
Logger.Exception(ex);
}
}
public static class PluginInfo
{
public const string GUID = "Hikaria.BoosterTweaker";
public const string NAME = "BoosterTweaker";
public const string VERSION = "1.2.1";
}
}
namespace Hikaria.BoosterTweaker.Managers
{
public static class BoosterImplantTemplateManager
{
public class bBoosterImplantTemplate
{
public uint BoosterImplantID { get; set; }
public int TemplateIndex { get; set; }
public BoosterImplantCategory ImplantCategory { get; set; }
public Dictionary<int, List<bBoosterImplantEffectTemplate>> EffectGroups { get; set; } = new Dictionary<int, List<bBoosterImplantEffectTemplate>>();
public Dictionary<int, List<bBoosterImplantConditionTemplate>> ConditionGroups { get; set; } = new Dictionary<int, List<bBoosterImplantConditionTemplate>>();
public bBoosterImplantTemplate(BoosterImplantTemplate template)
{
//IL_0041: 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)
BoosterImplantID = template.BoosterImplantID;
ImplantCategory = template.ImplantCategory;
TemplateIndex = BoosterImplantTemplatesLookup.Value[template.ImplantCategory].Count((bBoosterImplantTemplate p) => p.BoosterImplantID == template.BoosterImplantID);
int num = 0;
foreach (List<BoosterImplantEffectTemplate> effectGroup in template.EffectGroups)
{
List<bBoosterImplantEffectTemplate> list = new List<bBoosterImplantEffectTemplate>();
foreach (BoosterImplantEffectTemplate item in effectGroup)
{
list.Add(new bBoosterImplantEffectTemplate(item));
}
EffectGroups.Add(num++, list);
}
num = 0;
foreach (List<uint> conditionGroup in template.ConditionGroups)
{
List<bBoosterImplantConditionTemplate> list2 = new List<bBoosterImplantConditionTemplate>();
foreach (uint item2 in conditionGroup)
{
list2.Add(new bBoosterImplantConditionTemplate(GameDataBlockBase<BoosterImplantConditionDataBlock>.GetBlock(item2)));
}
ConditionGroups.Add(num++, list2);
}
}
}
public class bBoosterImplantEffectTemplate
{
public uint ID { get; set; }
public AgentModifier Effect { get; set; }
public float MaxValue { get; set; }
public float MinValue { get; set; }
public bBoosterImplantEffectTemplate(BoosterImplantEffectTemplate effectTemplate)
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
ID = effectTemplate.BoosterImplantEffect;
Effect = GameDataBlockBase<BoosterImplantEffectDataBlock>.GetBlock(ID).Effect;
MaxValue = effectTemplate.EffectMaxValue;
MinValue = effectTemplate.EffectMinValue;
}
}
public class bBoosterImplantConditionTemplate
{
public uint ID { get; set; }
public BoosterCondition Condition { get; set; }
public bBoosterImplantConditionTemplate(BoosterImplantConditionDataBlock block)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
ID = ((GameDataBlockBase<BoosterImplantConditionDataBlock>)(object)block).persistentID;
Condition = block.Condition;
}
}
public class LocalizedTextJsonConverter : JsonConverter
{
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
writer.WriteValue(string.Empty);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
return BoosterImplantTemplateDataBlock.UNKNOWN_BLOCK.PublicName;
}
public override bool CanConvert(Type objectType)
{
return objectType == typeof(LocalizedText);
}
}
public class ListOfTConverter<T> : JsonConverter<List<T>>
{
public override List<T> ReadJson(JsonReader reader, Type objectType, List<T> existingValue, bool hasExistingValue, JsonSerializer serializer)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Invalid comparison between Unknown and I4
JToken val = JToken.Load(reader);
if ((int)val.Type == 2)
{
return SharedUtils.ToIL2CPPListIfNecessary<T>(val.ToObject<List<T>>(serializer));
}
return null;
}
public override void WriteJson(JsonWriter writer, List<T> value, JsonSerializer serializer)
{
JToken.FromObject((object)value).WriteTo(writer, Array.Empty<JsonConverter>());
}
public ListOfTConverter()
{
((JsonConverter<List<List<T>>>)(object)this)..ctor();
}
}
public class ListOfListOfTConverter<T> : JsonConverter<List<List<T>>>
{
public override List<List<T>> ReadJson(JsonReader reader, Type objectType, List<List<T>> existingValue, bool hasExistingValue, JsonSerializer serializer)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: Invalid comparison between Unknown and I4
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Invalid comparison between Unknown and I4
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
JToken val = JToken.Load(reader);
List<List<T>> val2 = (List<List<T>>)(object)new List<List<List<T>>>();
if ((int)val.Type == 2)
{
foreach (JToken item in val.Children())
{
if ((int)item.Type != 2)
{
continue;
}
List<T> val3 = new List<T>();
foreach (JToken item2 in item.Children())
{
T val4 = item2.ToObject<T>(serializer);
val3.Add(val4);
}
((List<List<List<T>>>)(object)val2).Add((List<List<T>>)(object)val3);
}
}
return val2;
}
public override void WriteJson(JsonWriter writer, List<List<T>> value, JsonSerializer serializer)
{
JToken.FromObject((object)value).WriteTo(writer, Array.Empty<JsonConverter>());
}
public ListOfListOfTConverter()
{
((JsonConverter<List<List<List<List<T>>>>>)(object)this)..ctor();
}
}
public class BoosterImplantEffectTemplate
{
public uint BoosterImplantEffect { get; set; }
public float EffectMaxValue { get; set; }
public float EffectMinValue { get; set; }
public BoosterImplantEffectTemplate(BoosterImplantEffectInstance effect)
{
EffectMaxValue = effect.MaxValue;
EffectMinValue = effect.MinValue;
BoosterImplantEffect = effect.BoosterImplantEffect;
}
}
public class BoosterImplantTemplate
{
public uint BoosterImplantID { get; set; }
public BoosterImplantCategory ImplantCategory { get; set; }
[JsonIgnore]
public List<BoosterImplantEffectTemplate> Effects { get; set; } = new List<BoosterImplantEffectTemplate>();
[JsonIgnore]
public List<List<BoosterImplantEffectTemplate>> RandomEffects { get; set; } = new List<List<BoosterImplantEffectTemplate>>();
[JsonIgnore]
public List<uint> Conditions { get; set; } = new List<uint>();
[JsonIgnore]
public List<uint> RandomConditions { get; set; } = new List<uint>();
[JsonIgnore]
public BoosterImplantTemplateDataBlock TemplateDataBlock { get; private set; }
public List<List<BoosterImplantEffectTemplate>> EffectGroups { get; set; } = new List<List<BoosterImplantEffectTemplate>>();
public List<List<uint>> ConditionGroups { get; set; } = new List<List<uint>>();
public BoosterImplantTemplate(BoosterImplantTemplateDataBlock block)
{
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
TemplateDataBlock = block;
BoosterImplantID = ((GameDataBlockBase<BoosterImplantTemplateDataBlock>)(object)block).persistentID;
ImplantCategory = block.ImplantCategory;
for (int i = 0; i < block.Effects.Count; i++)
{
Effects.Add(new BoosterImplantEffectTemplate(block.Effects[i]));
}
for (int j = 0; j < block.RandomEffects.Count; j++)
{
List<BoosterImplantEffectTemplate> list = new List<BoosterImplantEffectTemplate>();
for (int k = 0; k < block.RandomEffects[j].Count; k++)
{
list.Add(new BoosterImplantEffectTemplate(block.RandomEffects[j][k]));
}
RandomEffects.Add(list);
}
Conditions.AddRange((IEnumerable<uint>)block.Conditions.ToArray());
RandomConditions.AddRange((IEnumerable<uint>)block.RandomConditions.ToArray());
EffectGroups = GenerateEffectGroups();
ConditionGroups = GenerateConditionGroups();
}
private List<List<BoosterImplantEffectTemplate>> GenerateEffectGroups()
{
List<List<BoosterImplantEffectTemplate>> list = new List<List<BoosterImplantEffectTemplate>>();
List<List<BoosterImplantEffectTemplate>> nElementCombinations = GetNElementCombinations(RandomEffects);
for (int i = 0; i < nElementCombinations.Count; i++)
{
List<BoosterImplantEffectTemplate> list2 = Effects.ToList();
list2.AddRange(nElementCombinations[i]);
list.Add(list2);
}
return list;
}
private List<List<uint>> GenerateConditionGroups()
{
return GetNElementCombinations(new List<List<uint>> { Conditions, RandomConditions });
}
private static List<List<T>> GetNElementCombinations<T>(List<List<T>> lists)
{
List<List<T>> list = new List<List<T>>();
GetNElementCombinationsHelper(lists, new List<T>(), 0, list);
return list;
}
private static void GetNElementCombinationsHelper<T>(List<List<T>> lists, List<T> currentCombination, int currentIndex, List<List<T>> combinations)
{
if (currentIndex == lists.Count)
{
combinations.Add(new List<T>(currentCombination));
return;
}
List<T> list = lists[currentIndex];
if (list.Count == 0)
{
GetNElementCombinationsHelper(lists, currentCombination, currentIndex + 1, combinations);
return;
}
foreach (T item in list)
{
currentCombination.Add(item);
GetNElementCombinationsHelper(lists, currentCombination, currentIndex + 1, combinations);
currentCombination.RemoveAt(currentCombination.Count - 1);
}
}
}
private const string R5BoosterTemplatesJson = "[{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":8,\"MinValue\":1.1,\"MaxValue\":1.13}],\"RandomEffects\":[[{\"BoosterImplantEffect\":7,\"MinValue\":1.1,\"MaxValue\":1.15},{\"BoosterImplantEffect\":50,\"MinValue\":1.1,\"MaxValue\":1.15}]],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_HealthSupport_Revive\",\"internalEnabled\":true,\"persistentID\":1},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":12,\"MinValue\":1.15,\"MaxValue\":1.25}],\"RandomEffects\":[],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_HealthSupport_InfectionRes\",\"internalEnabled\":true,\"persistentID\":22},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":3,\"Conditions\":[],\"RandomConditions\":[5,26],\"Effects\":[{\"BoosterImplantEffect\":6,\"MinValue\":1.15,\"MaxValue\":1.25}],\"RandomEffects\":[],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_Health_RegenSpeed\",\"internalEnabled\":true,\"persistentID\":18},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[5,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":10,\"MinValue\":1.05,\"MaxValue\":1.1},{\"BoosterImplantEffect\":11,\"MinValue\":1.05,\"MaxValue\":1.1}]],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_Health_Single_Resistance\",\"internalEnabled\":true,\"persistentID\":23},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[1,7],\"Effects\":[{\"BoosterImplantEffect\":10,\"MinValue\":1.05,\"MaxValue\":1.1},{\"BoosterImplantEffect\":11,\"MinValue\":1.05,\"MaxValue\":1.1}],\"RandomEffects\":[],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_Health_Double_Resistance\",\"internalEnabled\":true,\"persistentID\":24},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[1,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":54,\"MinValue\":1.05,\"MaxValue\":1.1}]],\"ImplantCategory\":0,\"MainEffectType\":1,\"name\":\"Muted_MeleeDamage\",\"internalEnabled\":true,\"persistentID\":4},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[1,7,5],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":52,\"MinValue\":1.05,\"MaxValue\":1.1},{\"BoosterImplantEffect\":53,\"MinValue\":1.05,\"MaxValue\":1.1}]],\"ImplantCategory\":0,\"MainEffectType\":1,\"name\":\"Muted_WeaponDamage\",\"internalEnabled\":true,\"persistentID\":25},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":27,\"MinValue\":1.15,\"MaxValue\":1.25},{\"BoosterImplantEffect\":28,\"MinValue\":1.1,\"MaxValue\":1.15},{\"BoosterImplantEffect\":29,\"MinValue\":1.05,\"MaxValue\":1.1},{\"BoosterImplantEffect\":31,\"MinValue\":1.1,\"MaxValue\":1.15},{\"BoosterImplantEffect\":32,\"MinValue\":1.2,\"MaxValue\":1.3}]],\"ImplantCategory\":0,\"MainEffectType\":4,\"name\":\"Muted_ToolStrength\",\"internalEnabled\":true,\"persistentID\":7},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":40,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":39,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":33,\"MinValue\":1.05,\"MaxValue\":1.1}]],\"ImplantCategory\":0,\"MainEffectType\":4,\"name\":\"Muted_ToolWeakEffects\",\"internalEnabled\":true,\"persistentID\":20},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":34,\"MinValue\":1.2,\"MaxValue\":1.4},{\"BoosterImplantEffect\":35,\"MinValue\":1.05,\"MaxValue\":1.1}],\"RandomEffects\":[],\"ImplantCategory\":0,\"MainEffectType\":3,\"name\":\"Muted_ProcessingSpeed\",\"internalEnabled\":true,\"persistentID\":10},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[7,27],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":41,\"MinValue\":1.13,\"MaxValue\":1.18}]],\"ImplantCategory\":0,\"MainEffectType\":3,\"name\":\"Muted_BioscanSpeed\",\"internalEnabled\":true,\"persistentID\":21},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":36,\"MinValue\":1.1,\"MaxValue\":1.2},{\"BoosterImplantEffect\":37,\"MinValue\":1.1,\"MaxValue\":1.2},{\"BoosterImplantEffect\":38,\"MinValue\":1.1,\"MaxValue\":1.2},{\"BoosterImplantEffect\":5,\"MinValue\":1.15,\"MaxValue\":1.25}]],\"ImplantCategory\":0,\"MainEffectType\":0,\"name\":\"Muted_InitialState\",\"internalEnabled\":true,\"persistentID\":13},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":7,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":8,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":50,\"MinValue\":1.2,\"MaxValue\":1.3}],\"RandomEffects\":[],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_HealthSupport_Revive\",\"internalEnabled\":true,\"persistentID\":26},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":12,\"MinValue\":1.4,\"MaxValue\":1.6}],\"RandomEffects\":[],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_HealthSupport_InfectionRes\",\"internalEnabled\":true,\"persistentID\":27},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[5,26],\"Effects\":[{\"BoosterImplantEffect\":6,\"MinValue\":1.6,\"MaxValue\":2}],\"RandomEffects\":[],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_Health_RegenSpeed\",\"internalEnabled\":true,\"persistentID\":28},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[5,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":10,\"MinValue\":1.15,\"MaxValue\":1.2},{\"BoosterImplantEffect\":11,\"MinValue\":1.15,\"MaxValue\":1.2}]],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_Health_Single_Resistance\",\"internalEnabled\":true,\"persistentID\":29},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[1,7],\"Effects\":[{\"BoosterImplantEffect\":10,\"MinValue\":1.15,\"MaxValue\":1.2},{\"BoosterImplantEffect\":11,\"MinValue\":1.15,\"MaxValue\":1.2}],\"RandomEffects\":[],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_Health_Double_Resistance\",\"internalEnabled\":true,\"persistentID\":30},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[1,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":54,\"MinValue\":1.2,\"MaxValue\":1.3}]],\"ImplantCategory\":1,\"MainEffectType\":1,\"name\":\"Bold_MeleeDamage\",\"internalEnabled\":true,\"persistentID\":31},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[1,7,5],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":52,\"MinValue\":1.15,\"MaxValue\":1.2},{\"BoosterImplantEffect\":53,\"MinValue\":1.15,\"MaxValue\":1.2}]],\"ImplantCategory\":1,\"MainEffectType\":1,\"name\":\"Bold_WeaponDamage\",\"internalEnabled\":true,\"persistentID\":32},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":5,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":27,\"MinValue\":1.4,\"MaxValue\":1.6},{\"BoosterImplantEffect\":28,\"MinValue\":1.2,\"MaxValue\":1.25},{\"BoosterImplantEffect\":29,\"MinValue\":1.15,\"MaxValue\":1.2},{\"BoosterImplantEffect\":31,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":32,\"MinValue\":1.45,\"MaxValue\":1.55}],[{\"BoosterImplantEffect\":39,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":33,\"MinValue\":1.12,\"MaxValue\":1.18},{\"BoosterImplantEffect\":40,\"MinValue\":1.3,\"MaxValue\":1.4}]],\"ImplantCategory\":1,\"MainEffectType\":4,\"name\":\"Bold_ToolStrength\",\"internalEnabled\":true,\"persistentID\":33},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":34,\"MinValue\":1.6,\"MaxValue\":1.8},{\"BoosterImplantEffect\":35,\"MinValue\":1.12,\"MaxValue\":1.18}],\"RandomEffects\":[[{\"BoosterImplantEffect\":49,\"MinValue\":0.91,\"MaxValue\":0.95}]],\"ImplantCategory\":1,\"MainEffectType\":3,\"name\":\"Bold_ProcessingSpeed\",\"internalEnabled\":true,\"persistentID\":35},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[7,27],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":41,\"MinValue\":1.13,\"MaxValue\":1.18}]],\"ImplantCategory\":1,\"MainEffectType\":3,\"name\":\"Bold_BioscanSpeed\",\"internalEnabled\":true,\"persistentID\":36},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":36,\"MinValue\":1.25,\"MaxValue\":1.35},{\"BoosterImplantEffect\":37,\"MinValue\":1.25,\"MaxValue\":1.35},{\"BoosterImplantEffect\":38,\"MinValue\":1.25,\"MaxValue\":1.35},{\"BoosterImplantEffect\":5,\"MinValue\":1.4,\"MaxValue\":1.6}],[{\"BoosterImplantEffect\":6,\"MinValue\":0.8,\"MaxValue\":0.87},{\"BoosterImplantEffect\":34,\"MinValue\":0.71,\"MaxValue\":0.83}]],\"ImplantCategory\":1,\"MainEffectType\":0,\"name\":\"Bold_InitialState\",\"internalEnabled\":true,\"persistentID\":37},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":7,\"MinValue\":1.4,\"MaxValue\":1.5},{\"BoosterImplantEffect\":8,\"MinValue\":1.8,\"MaxValue\":2},{\"BoosterImplantEffect\":50,\"MinValue\":1.4,\"MaxValue\":1.5}],\"RandomEffects\":[[{\"BoosterImplantEffect\":54,\"MinValue\":0.91,\"MaxValue\":0.95},{\"BoosterImplantEffect\":12,\"MinValue\":0.8,\"MaxValue\":0.87},{\"BoosterImplantEffect\":11,\"MinValue\":0.8,\"MaxValue\":0.87}]],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_HealthSupport_Revive\",\"internalEnabled\":true,\"persistentID\":38},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":12,\"MinValue\":1.8,\"MaxValue\":2}],\"RandomEffects\":[[{\"BoosterImplantEffect\":54,\"MinValue\":0.91,\"MaxValue\":0.95}]],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_HealthSupport_InfectionRes\",\"internalEnabled\":true,\"persistentID\":39},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[5,26],\"Effects\":[{\"BoosterImplantEffect\":6,\"MinValue\":2.2,\"MaxValue\":2.5}],\"RandomEffects\":[],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_Health_RegenSpeed\",\"internalEnabled\":true,\"persistentID\":40},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[5,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":10,\"MinValue\":1.3,\"MaxValue\":1.4},{\"BoosterImplantEffect\":11,\"MinValue\":1.3,\"MaxValue\":1.4}]],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_Health_Single_Resistance\",\"internalEnabled\":true,\"persistentID\":41},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[1,7],\"Effects\":[{\"BoosterImplantEffect\":10,\"MinValue\":1.3,\"MaxValue\":1.4},{\"BoosterImplantEffect\":11,\"MinValue\":1.3,\"MaxValue\":1.4}],\"RandomEffects\":[],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_Health_Double_Resistance\",\"internalEnabled\":true,\"persistentID\":42},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[1,29],\"Effects\":[{\"BoosterImplantEffect\":49,\"MinValue\":1.5,\"MaxValue\":1.6}],\"RandomEffects\":[[{\"BoosterImplantEffect\":11,\"MinValue\":0.83,\"MaxValue\":0.9}]],\"ImplantCategory\":2,\"MainEffectType\":1,\"name\":\"Aggressive_MeleeDamage\",\"internalEnabled\":true,\"persistentID\":43},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[1,7,5],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":52,\"MinValue\":1.25,\"MaxValue\":1.3},{\"BoosterImplantEffect\":53,\"MinValue\":1.25,\"MaxValue\":1.3}]],\"ImplantCategory\":2,\"MainEffectType\":1,\"name\":\"Aggressive_WeaponDamage\",\"internalEnabled\":true,\"persistentID\":44},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":6,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":27,\"MinValue\":1.8,\"MaxValue\":2},{\"BoosterImplantEffect\":28,\"MinValue\":1.3,\"MaxValue\":1.4},{\"BoosterImplantEffect\":29,\"MinValue\":1.25,\"MaxValue\":1.3},{\"BoosterImplantEffect\":31,\"MinValue\":1.35,\"MaxValue\":1.4},{\"BoosterImplantEffect\":32,\"MinValue\":1.7,\"MaxValue\":2}],[{\"BoosterImplantEffect\":40,\"MinValue\":1.35,\"MaxValue\":1.4},{\"BoosterImplantEffect\":39,\"MinValue\":1.35,\"MaxValue\":1.4},{\"BoosterImplantEffect\":33,\"MinValue\":1.2,\"MaxValue\":1.3}],[{\"BoosterImplantEffect\":49,\"MinValue\":0.77,\"MaxValue\":0.83},{\"BoosterImplantEffect\":11,\"MinValue\":0.83,\"MaxValue\":0.87},{\"BoosterImplantEffect\":12,\"MinValue\":0.62,\"MaxValue\":0.71}]],\"ImplantCategory\":2,\"MainEffectType\":4,\"name\":\"Aggressive_ToolStrength\",\"internalEnabled\":true,\"persistentID\":45},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":6,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":34,\"MinValue\":2,\"MaxValue\":2.2},{\"BoosterImplantEffect\":35,\"MinValue\":1.2,\"MaxValue\":1.3}],[{\"BoosterImplantEffect\":28,\"MinValue\":1.3,\"MaxValue\":1.4},{\"BoosterImplantEffect\":33,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":50,\"MinValue\":1.4,\"MaxValue\":1.5}],[{\"BoosterImplantEffect\":49,\"MinValue\":0.77,\"MaxValue\":0.83},{\"BoosterImplantEffect\":11,\"MinValue\":0.83,\"MaxValue\":0.87}]],\"ImplantCategory\":2,\"MainEffectType\":3,\"name\":\"Aggressive_ProcessingSpeed\",\"internalEnabled\":true,\"persistentID\":47},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[7,27],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":41,\"MinValue\":1.2,\"MaxValue\":1.25}]],\"ImplantCategory\":2,\"MainEffectType\":3,\"name\":\"Aggressive_BioscanSpeed\",\"internalEnabled\":true,\"persistentID\":48},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":36,\"MinValue\":1.4,\"MaxValue\":1.53},{\"BoosterImplantEffect\":37,\"MinValue\":1.4,\"MaxValue\":1.53},{\"BoosterImplantEffect\":38,\"MinValue\":1.4,\"MaxValue\":1.53},{\"BoosterImplantEffect\":5,\"MinValue\":1.8,\"MaxValue\":2}],[{\"BoosterImplantEffect\":11,\"MinValue\":0.83,\"MaxValue\":0.87},{\"BoosterImplantEffect\":12,\"MinValue\":0.62,\"MaxValue\":0.71},{\"BoosterImplantEffect\":34,\"MinValue\":0.56,\"MaxValue\":0.62}]],\"ImplantCategory\":2,\"MainEffectType\":0,\"name\":\"Aggressive_InitialState\",\"internalEnabled\":true,\"persistentID\":49}]";
private static List<BoosterImplantTemplateDataBlock> OldBoosterImplantTemplateDataBlocks = new List<BoosterImplantTemplateDataBlock>();
public static float BoosterPositiveEffectMultiplier { get; set; } = 1f;
public static bool DisableBoosterConditions { get; set; } = false;
public static bool DisableBoosterNegativeEffects { get; set; } = false;
public static bool EnableCustomPerfectBooster { get; set; } = false;
public static bool EnableCustomBooster { get; set; } = false;
public static CustomSetting<Dictionary<BoosterImplantCategory, List<bBoosterImplantTemplate>>> BoosterImplantTemplatesLookup { get; set; } = new CustomSetting<Dictionary<BoosterImplantCategory, List<bBoosterImplantTemplate>>>("BoosterImplantTemplatesLookup", new Dictionary<BoosterImplantCategory, List<bBoosterImplantTemplate>>
{
{
(BoosterImplantCategory)0,
new List<bBoosterImplantTemplate>()
},
{
(BoosterImplantCategory)1,
new List<bBoosterImplantTemplate>()
},
{
(BoosterImplantCategory)2,
new List<bBoosterImplantTemplate>()
}
}, (Action<Dictionary<BoosterImplantCategory, List<bBoosterImplantTemplate>>>)null, (LoadingTime)0, false);
public static List<BoosterImplantTemplate> BoosterImplantTemplates { get; } = new List<BoosterImplantTemplate>();
public static void LoadTemplateData()
{
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
OldBoosterImplantTemplateDataBlocks.Clear();
OldBoosterImplantTemplateDataBlocks.AddRange(JsonConvert.DeserializeObject<List<BoosterImplantTemplateDataBlock>>("[{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":8,\"MinValue\":1.1,\"MaxValue\":1.13}],\"RandomEffects\":[[{\"BoosterImplantEffect\":7,\"MinValue\":1.1,\"MaxValue\":1.15},{\"BoosterImplantEffect\":50,\"MinValue\":1.1,\"MaxValue\":1.15}]],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_HealthSupport_Revive\",\"internalEnabled\":true,\"persistentID\":1},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":12,\"MinValue\":1.15,\"MaxValue\":1.25}],\"RandomEffects\":[],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_HealthSupport_InfectionRes\",\"internalEnabled\":true,\"persistentID\":22},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":3,\"Conditions\":[],\"RandomConditions\":[5,26],\"Effects\":[{\"BoosterImplantEffect\":6,\"MinValue\":1.15,\"MaxValue\":1.25}],\"RandomEffects\":[],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_Health_RegenSpeed\",\"internalEnabled\":true,\"persistentID\":18},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[5,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":10,\"MinValue\":1.05,\"MaxValue\":1.1},{\"BoosterImplantEffect\":11,\"MinValue\":1.05,\"MaxValue\":1.1}]],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_Health_Single_Resistance\",\"internalEnabled\":true,\"persistentID\":23},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[1,7],\"Effects\":[{\"BoosterImplantEffect\":10,\"MinValue\":1.05,\"MaxValue\":1.1},{\"BoosterImplantEffect\":11,\"MinValue\":1.05,\"MaxValue\":1.1}],\"RandomEffects\":[],\"ImplantCategory\":0,\"MainEffectType\":2,\"name\":\"Muted_Health_Double_Resistance\",\"internalEnabled\":true,\"persistentID\":24},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[1,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":54,\"MinValue\":1.05,\"MaxValue\":1.1}]],\"ImplantCategory\":0,\"MainEffectType\":1,\"name\":\"Muted_MeleeDamage\",\"internalEnabled\":true,\"persistentID\":4},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[1,7,5],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":52,\"MinValue\":1.05,\"MaxValue\":1.1},{\"BoosterImplantEffect\":53,\"MinValue\":1.05,\"MaxValue\":1.1}]],\"ImplantCategory\":0,\"MainEffectType\":1,\"name\":\"Muted_WeaponDamage\",\"internalEnabled\":true,\"persistentID\":25},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":27,\"MinValue\":1.15,\"MaxValue\":1.25},{\"BoosterImplantEffect\":28,\"MinValue\":1.1,\"MaxValue\":1.15},{\"BoosterImplantEffect\":29,\"MinValue\":1.05,\"MaxValue\":1.1},{\"BoosterImplantEffect\":31,\"MinValue\":1.1,\"MaxValue\":1.15},{\"BoosterImplantEffect\":32,\"MinValue\":1.2,\"MaxValue\":1.3}]],\"ImplantCategory\":0,\"MainEffectType\":4,\"name\":\"Muted_ToolStrength\",\"internalEnabled\":true,\"persistentID\":7},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":40,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":39,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":33,\"MinValue\":1.05,\"MaxValue\":1.1}]],\"ImplantCategory\":0,\"MainEffectType\":4,\"name\":\"Muted_ToolWeakEffects\",\"internalEnabled\":true,\"persistentID\":20},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":34,\"MinValue\":1.2,\"MaxValue\":1.4},{\"BoosterImplantEffect\":35,\"MinValue\":1.05,\"MaxValue\":1.1}],\"RandomEffects\":[],\"ImplantCategory\":0,\"MainEffectType\":3,\"name\":\"Muted_ProcessingSpeed\",\"internalEnabled\":true,\"persistentID\":10},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[7,27],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":41,\"MinValue\":1.13,\"MaxValue\":1.18}]],\"ImplantCategory\":0,\"MainEffectType\":3,\"name\":\"Muted_BioscanSpeed\",\"internalEnabled\":true,\"persistentID\":21},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":1},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":36,\"MinValue\":1.1,\"MaxValue\":1.2},{\"BoosterImplantEffect\":37,\"MinValue\":1.1,\"MaxValue\":1.2},{\"BoosterImplantEffect\":38,\"MinValue\":1.1,\"MaxValue\":1.2},{\"BoosterImplantEffect\":5,\"MinValue\":1.15,\"MaxValue\":1.25}]],\"ImplantCategory\":0,\"MainEffectType\":0,\"name\":\"Muted_InitialState\",\"internalEnabled\":true,\"persistentID\":13},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":7,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":8,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":50,\"MinValue\":1.2,\"MaxValue\":1.3}],\"RandomEffects\":[],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_HealthSupport_Revive\",\"internalEnabled\":true,\"persistentID\":26},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":12,\"MinValue\":1.4,\"MaxValue\":1.6}],\"RandomEffects\":[],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_HealthSupport_InfectionRes\",\"internalEnabled\":true,\"persistentID\":27},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[5,26],\"Effects\":[{\"BoosterImplantEffect\":6,\"MinValue\":1.6,\"MaxValue\":2}],\"RandomEffects\":[],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_Health_RegenSpeed\",\"internalEnabled\":true,\"persistentID\":28},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[5,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":10,\"MinValue\":1.15,\"MaxValue\":1.2},{\"BoosterImplantEffect\":11,\"MinValue\":1.15,\"MaxValue\":1.2}]],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_Health_Single_Resistance\",\"internalEnabled\":true,\"persistentID\":29},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[1,7],\"Effects\":[{\"BoosterImplantEffect\":10,\"MinValue\":1.15,\"MaxValue\":1.2},{\"BoosterImplantEffect\":11,\"MinValue\":1.15,\"MaxValue\":1.2}],\"RandomEffects\":[],\"ImplantCategory\":1,\"MainEffectType\":2,\"name\":\"Bold_Health_Double_Resistance\",\"internalEnabled\":true,\"persistentID\":30},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[1,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":54,\"MinValue\":1.2,\"MaxValue\":1.3}]],\"ImplantCategory\":1,\"MainEffectType\":1,\"name\":\"Bold_MeleeDamage\",\"internalEnabled\":true,\"persistentID\":31},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[1,7,5],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":52,\"MinValue\":1.15,\"MaxValue\":1.2},{\"BoosterImplantEffect\":53,\"MinValue\":1.15,\"MaxValue\":1.2}]],\"ImplantCategory\":1,\"MainEffectType\":1,\"name\":\"Bold_WeaponDamage\",\"internalEnabled\":true,\"persistentID\":32},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":5,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":27,\"MinValue\":1.4,\"MaxValue\":1.6},{\"BoosterImplantEffect\":28,\"MinValue\":1.2,\"MaxValue\":1.25},{\"BoosterImplantEffect\":29,\"MinValue\":1.15,\"MaxValue\":1.2},{\"BoosterImplantEffect\":31,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":32,\"MinValue\":1.45,\"MaxValue\":1.55}],[{\"BoosterImplantEffect\":39,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":33,\"MinValue\":1.12,\"MaxValue\":1.18},{\"BoosterImplantEffect\":40,\"MinValue\":1.3,\"MaxValue\":1.4}]],\"ImplantCategory\":1,\"MainEffectType\":4,\"name\":\"Bold_ToolStrength\",\"internalEnabled\":true,\"persistentID\":33},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":34,\"MinValue\":1.6,\"MaxValue\":1.8},{\"BoosterImplantEffect\":35,\"MinValue\":1.12,\"MaxValue\":1.18}],\"RandomEffects\":[[{\"BoosterImplantEffect\":49,\"MinValue\":0.91,\"MaxValue\":0.95}]],\"ImplantCategory\":1,\"MainEffectType\":3,\"name\":\"Bold_ProcessingSpeed\",\"internalEnabled\":true,\"persistentID\":35},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[7,27],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":41,\"MinValue\":1.13,\"MaxValue\":1.18}]],\"ImplantCategory\":1,\"MainEffectType\":3,\"name\":\"Bold_BioscanSpeed\",\"internalEnabled\":true,\"persistentID\":36},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":1,\"y\":2},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":36,\"MinValue\":1.25,\"MaxValue\":1.35},{\"BoosterImplantEffect\":37,\"MinValue\":1.25,\"MaxValue\":1.35},{\"BoosterImplantEffect\":38,\"MinValue\":1.25,\"MaxValue\":1.35},{\"BoosterImplantEffect\":5,\"MinValue\":1.4,\"MaxValue\":1.6}],[{\"BoosterImplantEffect\":6,\"MinValue\":0.8,\"MaxValue\":0.87},{\"BoosterImplantEffect\":34,\"MinValue\":0.71,\"MaxValue\":0.83}]],\"ImplantCategory\":1,\"MainEffectType\":0,\"name\":\"Bold_InitialState\",\"internalEnabled\":true,\"persistentID\":37},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":7,\"MinValue\":1.4,\"MaxValue\":1.5},{\"BoosterImplantEffect\":8,\"MinValue\":1.8,\"MaxValue\":2},{\"BoosterImplantEffect\":50,\"MinValue\":1.4,\"MaxValue\":1.5}],\"RandomEffects\":[[{\"BoosterImplantEffect\":54,\"MinValue\":0.91,\"MaxValue\":0.95},{\"BoosterImplantEffect\":12,\"MinValue\":0.8,\"MaxValue\":0.87},{\"BoosterImplantEffect\":11,\"MinValue\":0.8,\"MaxValue\":0.87}]],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_HealthSupport_Revive\",\"internalEnabled\":true,\"persistentID\":38},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[{\"BoosterImplantEffect\":12,\"MinValue\":1.8,\"MaxValue\":2}],\"RandomEffects\":[[{\"BoosterImplantEffect\":54,\"MinValue\":0.91,\"MaxValue\":0.95}]],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_HealthSupport_InfectionRes\",\"internalEnabled\":true,\"persistentID\":39},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[5,26],\"Effects\":[{\"BoosterImplantEffect\":6,\"MinValue\":2.2,\"MaxValue\":2.5}],\"RandomEffects\":[],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_Health_RegenSpeed\",\"internalEnabled\":true,\"persistentID\":40},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[5,29],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":10,\"MinValue\":1.3,\"MaxValue\":1.4},{\"BoosterImplantEffect\":11,\"MinValue\":1.3,\"MaxValue\":1.4}]],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_Health_Single_Resistance\",\"internalEnabled\":true,\"persistentID\":41},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":4,\"Conditions\":[],\"RandomConditions\":[1,7],\"Effects\":[{\"BoosterImplantEffect\":10,\"MinValue\":1.3,\"MaxValue\":1.4},{\"BoosterImplantEffect\":11,\"MinValue\":1.3,\"MaxValue\":1.4}],\"RandomEffects\":[],\"ImplantCategory\":2,\"MainEffectType\":2,\"name\":\"Aggressive_Health_Double_Resistance\",\"internalEnabled\":true,\"persistentID\":42},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":1,\"Conditions\":[],\"RandomConditions\":[1,29],\"Effects\":[{\"BoosterImplantEffect\":49,\"MinValue\":1.5,\"MaxValue\":1.6}],\"RandomEffects\":[[{\"BoosterImplantEffect\":11,\"MinValue\":0.83,\"MaxValue\":0.9}]],\"ImplantCategory\":2,\"MainEffectType\":1,\"name\":\"Aggressive_MeleeDamage\",\"internalEnabled\":true,\"persistentID\":43},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[1,7,5],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":52,\"MinValue\":1.25,\"MaxValue\":1.3},{\"BoosterImplantEffect\":53,\"MinValue\":1.25,\"MaxValue\":1.3}]],\"ImplantCategory\":2,\"MainEffectType\":1,\"name\":\"Aggressive_WeaponDamage\",\"internalEnabled\":true,\"persistentID\":44},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":6,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":27,\"MinValue\":1.8,\"MaxValue\":2},{\"BoosterImplantEffect\":28,\"MinValue\":1.3,\"MaxValue\":1.4},{\"BoosterImplantEffect\":29,\"MinValue\":1.25,\"MaxValue\":1.3},{\"BoosterImplantEffect\":31,\"MinValue\":1.35,\"MaxValue\":1.4},{\"BoosterImplantEffect\":32,\"MinValue\":1.7,\"MaxValue\":2}],[{\"BoosterImplantEffect\":40,\"MinValue\":1.35,\"MaxValue\":1.4},{\"BoosterImplantEffect\":39,\"MinValue\":1.35,\"MaxValue\":1.4},{\"BoosterImplantEffect\":33,\"MinValue\":1.2,\"MaxValue\":1.3}],[{\"BoosterImplantEffect\":49,\"MinValue\":0.77,\"MaxValue\":0.83},{\"BoosterImplantEffect\":11,\"MinValue\":0.83,\"MaxValue\":0.87},{\"BoosterImplantEffect\":12,\"MinValue\":0.62,\"MaxValue\":0.71}]],\"ImplantCategory\":2,\"MainEffectType\":4,\"name\":\"Aggressive_ToolStrength\",\"internalEnabled\":true,\"persistentID\":45},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":6,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":34,\"MinValue\":2,\"MaxValue\":2.2},{\"BoosterImplantEffect\":35,\"MinValue\":1.2,\"MaxValue\":1.3}],[{\"BoosterImplantEffect\":28,\"MinValue\":1.3,\"MaxValue\":1.4},{\"BoosterImplantEffect\":33,\"MinValue\":1.2,\"MaxValue\":1.3},{\"BoosterImplantEffect\":50,\"MinValue\":1.4,\"MaxValue\":1.5}],[{\"BoosterImplantEffect\":49,\"MinValue\":0.77,\"MaxValue\":0.83},{\"BoosterImplantEffect\":11,\"MinValue\":0.83,\"MaxValue\":0.87}]],\"ImplantCategory\":2,\"MainEffectType\":3,\"name\":\"Aggressive_ProcessingSpeed\",\"internalEnabled\":true,\"persistentID\":47},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":2,\"Conditions\":[],\"RandomConditions\":[7,27],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":41,\"MinValue\":1.2,\"MaxValue\":1.25}]],\"ImplantCategory\":2,\"MainEffectType\":3,\"name\":\"Aggressive_BioscanSpeed\",\"internalEnabled\":true,\"persistentID\":48},{\"Deprecated\":false,\"PublicName\":0,\"Description\":\"\",\"DurationRange\":{\"x\":2,\"y\":3},\"DropWeight\":7,\"Conditions\":[],\"RandomConditions\":[],\"Effects\":[],\"RandomEffects\":[[{\"BoosterImplantEffect\":36,\"MinValue\":1.4,\"MaxValue\":1.53},{\"BoosterImplantEffect\":37,\"MinValue\":1.4,\"MaxValue\":1.53},{\"BoosterImplantEffect\":38,\"MinValue\":1.4,\"MaxValue\":1.53},{\"BoosterImplantEffect\":5,\"MinValue\":1.8,\"MaxValue\":2}],[{\"BoosterImplantEffect\":11,\"MinValue\":0.83,\"MaxValue\":0.87},{\"BoosterImplantEffect\":12,\"MinValue\":0.62,\"MaxValue\":0.71},{\"BoosterImplantEffect\":34,\"MinValue\":0.56,\"MaxValue\":0.62}]],\"ImplantCategory\":2,\"MainEffectType\":0,\"name\":\"Aggressive_InitialState\",\"internalEnabled\":true,\"persistentID\":49}]", (JsonConverter[])(object)new JsonConverter[4]
{
new LocalizedTextJsonConverter(),
(JsonConverter)new ListOfTConverter<uint>(),
(JsonConverter)new ListOfTConverter<BoosterImplantEffectInstance>(),
(JsonConverter)new ListOfListOfTConverter<BoosterImplantEffectInstance>()
}));
BoosterImplantTemplates.Clear();
Il2CppArrayBase<BoosterImplantTemplateDataBlock> allBlocksForEditor = GameDataBlockBase<BoosterImplantTemplateDataBlock>.GetAllBlocksForEditor();
for (int i = 0; i < allBlocksForEditor.Count; i++)
{
BoosterImplantTemplates.Add(new BoosterImplantTemplate(allBlocksForEditor[i]));
}
for (int j = 0; j < OldBoosterImplantTemplateDataBlocks.Count; j++)
{
BoosterImplantTemplates.Add(new BoosterImplantTemplate(OldBoosterImplantTemplateDataBlocks[j]));
}
BoosterImplantTemplatesLookup.Value = new Dictionary<BoosterImplantCategory, List<bBoosterImplantTemplate>>
{
{
(BoosterImplantCategory)0,
new List<bBoosterImplantTemplate>()
},
{
(BoosterImplantCategory)1,
new List<bBoosterImplantTemplate>()
},
{
(BoosterImplantCategory)2,
new List<bBoosterImplantTemplate>()
}
};
for (int k = 0; k < BoosterImplantTemplates.Count; k++)
{
BoosterImplantTemplatesLookup.Value[BoosterImplantTemplates[k].ImplantCategory].Add(new bBoosterImplantTemplate(BoosterImplantTemplates[k]));
}
BoosterImplantTemplatesLookup.Save();
}
public static void ApplyPerfectBoosterFromTemplate(BoosterImplant boosterImplant, List<BoosterImplantEffectTemplate> effectGroup, List<uint> conditions)
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
List<Effect> list = new List<Effect>();
foreach (BoosterImplantEffectTemplate item in effectGroup)
{
list.Add(new Effect
{
Id = item.BoosterImplantEffect,
Value = ((item.EffectMaxValue <= 1f && DisableBoosterNegativeEffects) ? 1f : ((item.EffectMaxValue - 1f) * BoosterPositiveEffectMultiplier + 1f))
});
}
boosterImplant.Effects = Il2CppStructArray<Effect>.op_Implicit(list.ToArray());
boosterImplant.Conditions = Il2CppStructArray<uint>.op_Implicit(DisableBoosterConditions ? Array.Empty<uint>() : conditions.ToArray());
}
public static bool TryGetBoosterImplantTemplate(BoosterImplant boosterImplant, out BoosterImplantTemplate template, out List<BoosterImplantEffectTemplate> effectGroup, out List<uint> conditionGroup, out int effectGroupIndex, out int conditionGroupIndex)
{
template = null;
effectGroup = new List<BoosterImplantEffectTemplate>();
conditionGroup = new List<uint>();
effectGroupIndex = -1;
conditionGroupIndex = -1;
uint persistenID = boosterImplant.TemplateId;
List<BoosterImplantTemplate> list = BoosterImplantTemplates.FindAll((BoosterImplantTemplate p) => p.BoosterImplantID == persistenID && p.ImplantCategory == boosterImplant.Category);
for (int k = 0; k < list.Count; k++)
{
if (list[k].TemplateDataBlock == null)
{
continue;
}
List<List<uint>> conditionGroups = list[k].ConditionGroups;
int count = ((Il2CppArrayBase<uint>)(object)boosterImplant.Conditions).Count;
bool flag = count == 0;
Il2CppStructArray<uint> conditions = boosterImplant.Conditions;
if (count > 0)
{
int j;
for (j = 0; j < conditionGroups.Count; j++)
{
if (count != conditionGroups[j].Count)
{
continue;
}
bool num = ((IEnumerable<uint>)conditions).All((uint p) => conditionGroups[j].Any((uint q) => q == p));
bool flag2 = conditionGroups[j].All((uint p) => ((IEnumerable<uint>)conditions).Any((uint q) => q == p));
if (num && flag2)
{
flag = true;
conditionGroup = conditionGroups[j];
conditionGroupIndex = j;
break;
}
}
}
if (!flag)
{
continue;
}
conditionGroupIndex = 0;
int count2 = ((Il2CppArrayBase<Effect>)(object)boosterImplant.Effects).Count;
bool flag3 = false;
List<List<BoosterImplantEffectTemplate>> effectGroups = list[k].EffectGroups;
List<Effect> effects = ((IEnumerable<Effect>)boosterImplant.Effects).ToList();
int i;
for (i = 0; i < effectGroups.Count; i++)
{
if (effectGroups[i].Count != count2)
{
continue;
}
for (int l = 0; l < effectGroups[i].Count; l++)
{
bool num2 = effects.All((Effect p) => effectGroups[i].Any((BoosterImplantEffectTemplate q) => q.BoosterImplantEffect == p.Id));
bool flag4 = effectGroups[i].All((BoosterImplantEffectTemplate p) => effects.Any((Effect q) => q.Id == p.BoosterImplantEffect));
if (num2 && flag4)
{
flag3 = true;
effectGroup = effectGroups[i];
effectGroupIndex = i;
break;
}
}
if (flag3)
{
break;
}
}
if (flag3)
{
return true;
}
}
return false;
}
}
public static class CustomBoosterImplantManager
{
public class CustomBoosterImplant
{
public class Effect
{
public uint Id { get; set; }
public float Value { get; set; } = 1f;
public Effect(Effect effect)
{
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
Id = effect.Id;
Value = effect.Value;
}
public Effect()
{
}
}
public string Name { get; set; } = string.Empty;
public BoosterImplantCategory Category { get; set; } = (BoosterImplantCategory)3;
public uint TemplateId { get; set; }
public List<uint> Conditions { get; set; } = new List<uint>();
public List<Effect> Effects { get; set; } = new List<Effect>();
public bool Enabled { get; set; }
public CustomBoosterImplant(BoosterImplant implant)
{
//IL_000d: 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_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
Name = implant.GetCompositPublicName(true);
TemplateId = implant.TemplateId;
Conditions = ((IEnumerable<uint>)implant.Conditions).ToList();
Category = implant.Category;
Effects.Clear();
foreach (Effect item in (Il2CppArrayBase<Effect>)(object)implant.Effects)
{
Effects.Add(new Effect(item));
}
Enabled = true;
}
public CustomBoosterImplant()
{
}//IL_000d: Unknown result type (might be due to invalid IL or missing references)
}
public static CustomSetting<Dictionary<BoosterImplantCategory, List<CustomBoosterImplant>>> CustomBoosterImplants { get; set; } = new CustomSetting<Dictionary<BoosterImplantCategory, List<CustomBoosterImplant>>>("CustomBoosterImplants", new Dictionary<BoosterImplantCategory, List<CustomBoosterImplant>>
{
{
(BoosterImplantCategory)0,
new List<CustomBoosterImplant>()
},
{
(BoosterImplantCategory)1,
new List<CustomBoosterImplant>()
},
{
(BoosterImplantCategory)2,
new List<CustomBoosterImplant>()
}
}, (Action<Dictionary<BoosterImplantCategory, List<CustomBoosterImplant>>>)null, (LoadingTime)1, true);
public static void CreateCustomBoosterImplantsFromInventory()
{
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
CustomBoosterImplants.Value = new Dictionary<BoosterImplantCategory, List<CustomBoosterImplant>>
{
{
(BoosterImplantCategory)0,
new List<CustomBoosterImplant>()
},
{
(BoosterImplantCategory)1,
new List<CustomBoosterImplant>()
},
{
(BoosterImplantCategory)2,
new List<CustomBoosterImplant>()
}
};
foreach (Category item in (Il2CppArrayBase<Category>)(object)PersistentInventoryManager.Current.m_boosterImplantInventory.Categories)
{
Enumerator<BoosterImplantInventoryItem> enumerator2 = item.Inventory.GetEnumerator();
while (enumerator2.MoveNext())
{
BoosterImplantInventoryItem current = enumerator2.Current;
CustomBoosterImplants.Value[current.Implant.Category].Add(new CustomBoosterImplant(current.Implant));
}
}
}
public static void ApplyCustomBoosterImplants()
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_0169: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Expected O, but got Unknown
//IL_017d: Unknown result type (might be due to invalid IL or missing references)
//IL_0184: Expected O, but got Unknown
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
uint num = 3223718u;
for (int i = 0; i < 3; i++)
{
List<BoosterImplantInventoryItem> inventory = ((Il2CppArrayBase<Category>)(object)PersistentInventoryManager.Current.m_boosterImplantInventory.Categories)[i].Inventory;
inventory.Clear();
BoosterImplantCategory key = (BoosterImplantCategory)i;
for (int j = 0; j < CustomBoosterImplants.Value[key].Count; j++)
{
CustomBoosterImplant customBoosterImplant = CustomBoosterImplants.Value[key][j];
if (!customBoosterImplant.Enabled || GameDataBlockBase<BoosterImplantTemplateDataBlock>.GetBlock(customBoosterImplant.TemplateId) == null || customBoosterImplant.Effects.Any((CustomBoosterImplant.Effect p) => p.Id == 0) || customBoosterImplant.Conditions.Any((uint p) => p == 0))
{
continue;
}
List<BoosterImplantEffect> list = new List<BoosterImplantEffect>();
foreach (CustomBoosterImplant.Effect effect in customBoosterImplant.Effects)
{
list.Add(new BoosterImplantEffect
{
Id = effect.Id,
Param = effect.Value
});
}
BoosterImplantInventoryItem val = new BoosterImplantInventoryItem(new BoosterImplantInventoryItem
{
Conditions = Il2CppStructArray<uint>.op_Implicit(customBoosterImplant.Conditions.ToArray()),
Effects = Il2CppStructArray<BoosterImplantEffect>.op_Implicit(list.ToArray()),
Id = num,
TemplateId = customBoosterImplant.TemplateId,
Flags = 1u
});
inventory.Add(val);
val.Implant.InstanceId = num;
val.Implant.Uses = (int)val.Implant.Template.DurationRange.y;
customBoosterImplant.Name = val.Implant.GetCompositPublicName(true);
num++;
}
}
}
}
public static class CustomPerfectBoosterImplantManager
{
public class CustomPerfectBoosterImplant
{
public string Name { get; set; } = string.Empty;
public BoosterImplantCategory Category { get; set; } = (BoosterImplantCategory)3;
public uint TemplateId { get; set; }
public int TemplateIndex { get; set; }
public int EffectGroupIndex { get; set; }
public int ConditionGroupIndex { get; set; }
public bool Enabled { get; set; }
public CustomPerfectBoosterImplant(BoosterImplant implant)
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
Name = implant.GetCompositPublicName(true);
TemplateId = implant.TemplateId;
Category = implant.Category;
if (BoosterImplantTemplateManager.TryGetBoosterImplantTemplate(implant, out var _, out var _, out var _, out var effectGroupIndex, out var conditionGroupIndex))
{
ConditionGroupIndex = conditionGroupIndex;
EffectGroupIndex = effectGroupIndex;
}
Enabled = true;
}
public CustomPerfectBoosterImplant()
{
}//IL_000d: Unknown result type (might be due to invalid IL or missing references)
}
public static CustomSetting<Dictionary<BoosterImplantCategory, List<CustomPerfectBoosterImplant>>> CustomPerfectBoosterImplants { get; set; } = new CustomSetting<Dictionary<BoosterImplantCategory, List<CustomPerfectBoosterImplant>>>("CustomPerfectBoosterImplants", new Dictionary<BoosterImplantCategory, List<CustomPerfectBoosterImplant>>
{
{
(BoosterImplantCategory)0,
new List<CustomPerfectBoosterImplant>()
},
{
(BoosterImplantCategory)1,
new List<CustomPerfectBoosterImplant>()
},
{
(BoosterImplantCategory)2,
new List<CustomPerfectBoosterImplant>()
}
}, (Action<Dictionary<BoosterImplantCategory, List<CustomPerfectBoosterImplant>>>)null, (LoadingTime)2, true);
public static void CreateCustomPerfectBoosterImplantsFromInventory()
{
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
CustomPerfectBoosterImplants.Value = new Dictionary<BoosterImplantCategory, List<CustomPerfectBoosterImplant>>
{
{
(BoosterImplantCategory)0,
new List<CustomPerfectBoosterImplant>()
},
{
(BoosterImplantCategory)1,
new List<CustomPerfectBoosterImplant>()
},
{
(BoosterImplantCategory)2,
new List<CustomPerfectBoosterImplant>()
}
};
foreach (Category item in (Il2CppArrayBase<Category>)(object)PersistentInventoryManager.Current.m_boosterImplantInventory.Categories)
{
Enumerator<BoosterImplantInventoryItem> enumerator2 = item.Inventory.GetEnumerator();
while (enumerator2.MoveNext())
{
BoosterImplantInventoryItem current = enumerator2.Current;
CustomPerfectBoosterImplants.Value[current.Implant.Category].Add(new CustomPerfectBoosterImplant(current.Implant));
}
}
}
public static void ApplyCustomPerfectBoosterImplants()
{
//IL_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_018e: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_01d0: Unknown result type (might be due to invalid IL or missing references)
//IL_01d5: 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_020f: Unknown result type (might be due to invalid IL or missing references)
//IL_0216: Unknown result type (might be due to invalid IL or missing references)
//IL_0228: Unknown result type (might be due to invalid IL or missing references)
//IL_0234: Expected O, but got Unknown
//IL_022f: Unknown result type (might be due to invalid IL or missing references)
//IL_0236: Expected O, but got Unknown
//IL_025e: Unknown result type (might be due to invalid IL or missing references)
uint num = 7225460u;
for (int i = 0; i < 3; i++)
{
List<BoosterImplantInventoryItem> inventory = ((Il2CppArrayBase<Category>)(object)PersistentInventoryManager.Current.m_boosterImplantInventory.Categories)[i].Inventory;
inventory.Clear();
BoosterImplantCategory key = (BoosterImplantCategory)i;
for (int j = 0; j < CustomPerfectBoosterImplants.Value[key].Count; j++)
{
CustomPerfectBoosterImplant CustomPerfectBoosterImplant = CustomPerfectBoosterImplants.Value[key][j];
if (!CustomPerfectBoosterImplant.Enabled || GameDataBlockBase<BoosterImplantTemplateDataBlock>.GetBlock(CustomPerfectBoosterImplant.TemplateId) == null)
{
continue;
}
List<BoosterImplantTemplateManager.BoosterImplantTemplate> list = BoosterImplantTemplateManager.BoosterImplantTemplates.FindAll((BoosterImplantTemplateManager.BoosterImplantTemplate p) => p.BoosterImplantID == CustomPerfectBoosterImplant.TemplateId);
if (!list.Any() || CustomPerfectBoosterImplant.TemplateIndex <= -1 || CustomPerfectBoosterImplant.TemplateIndex >= list.Count)
{
continue;
}
BoosterImplantTemplateManager.BoosterImplantTemplate boosterImplantTemplate = list[CustomPerfectBoosterImplant.TemplateIndex];
if (boosterImplantTemplate == null || boosterImplantTemplate.BoosterImplantID == 0 || CustomPerfectBoosterImplant.ConditionGroupIndex >= boosterImplantTemplate.ConditionGroups.Count || CustomPerfectBoosterImplant.EffectGroupIndex >= boosterImplantTemplate.EffectGroups.Count || CustomPerfectBoosterImplant.ConditionGroupIndex <= -1 || CustomPerfectBoosterImplant.EffectGroupIndex <= -1)
{
continue;
}
List<BoosterImplantEffect> list2 = new List<BoosterImplantEffect>();
foreach (BoosterImplantTemplateManager.BoosterImplantEffectTemplate item in boosterImplantTemplate.EffectGroups[CustomPerfectBoosterImplant.EffectGroupIndex])
{
list2.Add(new BoosterImplantEffect
{
Id = item.BoosterImplantEffect,
Param = item.EffectMaxValue
});
}
BoosterImplantInventoryItem val = new BoosterImplantInventoryItem(new BoosterImplantInventoryItem
{
Conditions = Il2CppStructArray<uint>.op_Implicit(boosterImplantTemplate.ConditionGroups[CustomPerfectBoosterImplant.ConditionGroupIndex].ToArray()),
Effects = Il2CppStructArray<BoosterImplantEffect>.op_Implicit(list2.ToArray()),
Id = num,
TemplateId = CustomPerfectBoosterImplant.TemplateId,
Flags = 1u
});
inventory.Add(val);
val.Implant.InstanceId = num;
val.Implant.Uses = (int)val.Implant.Template.DurationRange.y;
CustomPerfectBoosterImplant.Name = val.Implant.GetCompositPublicName(true);
num++;
}
}
}
}
}
namespace Hikaria.BoosterTweaker.Features
{
[DisallowInGameToggle]
[EnableFeatureByDefault]
[HideInModSettings]
public class CustomBooster : Feature
{
public class CustomBoosterSetting
{
[FSDisplayName("正面效果倍率")]
public float BoosterPositiveEffectMultiplier
{
get
{
return BoosterImplantTemplateManager.BoosterPositiveEffectMultiplier;
}
set
{
BoosterImplantTemplateManager.BoosterPositiveEffectMultiplier = value;
}
}
[FSDisplayName("禁用条件")]
public bool DisableBoosterConditions
{
get
{
return BoosterImplantTemplateManager.DisableBoosterConditions;
}
set
{
BoosterImplantTemplateManager.DisableBoosterConditions = value;
}
}
[FSDisplayName("禁用负面效果")]
public bool DisableBoosterNegativeEffects
{
get
{
return BoosterImplantTemplateManager.DisableBoosterNegativeEffects;
}
set
{
BoosterImplantTemplateManager.DisableBoosterNegativeEffects = value;
}
}
[FSDisplayName("强化剂自定义")]
[FSDescription("自定义将导致完美强化剂与模板首选项以及其他作弊选项失效")]
public bool EnableCustomBooster
{
get
{
return BoosterImplantTemplateManager.EnableCustomBooster;
}
set
{
BoosterImplantTemplateManager.EnableCustomBooster = value;
}
}
[FSDisplayName("通过现有强化剂生成自定义强化剂")]
public FButton CreateCustomBoosterFromInventory { get; set; } = new FButton("生成", "生成自定义强化剂", (Action)CustomBoosterImplantManager.CreateCustomBoosterImplantsFromInventory, false);
[FSDisplayName("通过设置文件重载自定义强化剂")]
public FButton LoadCustomBoosterFromSettings { get; set; } = new FButton("重载", "重载自定义强化剂设置", (Action)CustomBoosterImplantManager.CustomBoosterImplants.Load, false);
[FSDisplayName("应用自定义强化剂")]
public FButton ApplyCustomBoosters { get; set; } = new FButton("应用", "应用自定义强化剂", (Action)CustomBoosterImplantManager.ApplyCustomBoosterImplants, false);
[JsonIgnore]
[FSReadOnly(true)]
[FSDisplayName("编辑自定义强化剂")]
public Dictionary<BoosterImplantCategory, CustomBoosterImplantEntryListEntry> CustomBoosterImplantsEntry
{
get
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
Dictionary<BoosterImplantCategory, CustomBoosterImplantEntryListEntry> dictionary = new Dictionary<BoosterImplantCategory, CustomBoosterImplantEntryListEntry>();
for (int i = 0; i < 3; i++)
{
BoosterImplantCategory key = (BoosterImplantCategory)i;
List<CustomBoosterImplantEntry> list = new List<CustomBoosterImplantEntry>();
for (int j = 0; j < CustomBoosterImplantManager.CustomBoosterImplants.Value[key].Count; j++)
{
list.Add(new CustomBoosterImplantEntry(CustomBoosterImplantManager.CustomBoosterImplants.Value[key][j]));
}
dictionary[key] = new CustomBoosterImplantEntryListEntry(list);
}
return dictionary;
}
set
{
}
}
}
public class CustomBoosterImplantEntryListEntry
{
[FSInline]
[FSDisplayName("强化剂列表")]
public List<CustomBoosterImplantEntry> Entries { get; set; } = new List<CustomBoosterImplantEntry>();
public CustomBoosterImplantEntryListEntry(List<CustomBoosterImplantEntry> entries)
{
Entries = entries;
}
}
public class CustomBoosterImplantEntry
{
[FSSeparator]
[FSReadOnly(true)]
[FSDisplayName("名称")]
public string Name
{
get
{
return Implant.Name;
}
set
{
}
}
[FSReadOnly(true)]
[FSDisplayName("类别")]
public BoosterImplantCategory Category
{
get
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return Implant.Category;
}
set
{
}
}
[FSReadOnly(true)]
[FSDisplayName("ID")]
public uint TemplateId
{
get
{
return Implant.TemplateId;
}
set
{
}
}
[FSDisplayName("效果列表")]
public List<CustomBoosterImplantEffectEntry> Effects
{
get
{
List<CustomBoosterImplantEffectEntry> list = new List<CustomBoosterImplantEffectEntry>();
for (int i = 0; i < Implant.Effects.Count; i++)
{
list.Add(new CustomBoosterImplantEffectEntry(Implant.Effects[i]));
}
return list;
}
set
{
}
}
[FSDisplayName("条件列表")]
public List<CustomBoosterImplantConditionEntry> Conditions
{
get
{
List<CustomBoosterImplantConditionEntry> list = new List<CustomBoosterImplantConditionEntry>();
for (int i = 0; i < Implant.Conditions.Count; i++)
{
list.Add(new CustomBoosterImplantConditionEntry(i, Implant));
}
return list;
}
set
{
}
}
[FSDisplayName("状态")]
public bool Enabled
{
get
{
return Implant.Enabled;
}
set
{
Implant.Enabled = value;
}
}
[FSDisplayName("修改")]
public BoosterImplantModifier Modifier { get; set; }
[FSIgnore]
private CustomBoosterImplantManager.CustomBoosterImplant Implant { get; set; }
public CustomBoosterImplantEntry(CustomBoosterImplantManager.CustomBoosterImplant implant)
{
Implant = implant;
Modifier = new BoosterImplantModifier(implant);
}
}
[Localized]
public enum ModifyType
{
Add,
Remove,
Modify
}
[Localized]
public enum ModifyTarget
{
Effect,
Condition
}
public class BoosterImplantModifier
{
[FSDisplayName("ID")]
public uint Id { get; set; }
[FSDisplayName("值")]
public float Value { get; set; } = 1f;
[FSDisplayName("修改模式")]
public ModifyType type { get; set; } = ModifyType.Modify;
[FSDisplayName("修改对象")]
public ModifyTarget target { get; set; }
[FSDisplayName("应用修改")]
public FButton Modify { get; set; }
private CustomBoosterImplantManager.CustomBoosterImplant Implant { get; set; }
public BoosterImplantModifier(CustomBoosterImplantManager.CustomBoosterImplant implant)
{
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Expected O, but got Unknown
Implant = implant;
Modify = new FButton("应用", "应用修改", (Action)DoModify, false);
}
private void DoModify()
{
List<CustomBoosterImplantManager.CustomBoosterImplant.Effect> effects = Implant.Effects;
List<uint> conditions = Implant.Conditions;
switch (type)
{
case ModifyType.Modify:
if (target == ModifyTarget.Effect)
{
int num3 = effects.FindIndex((CustomBoosterImplantManager.CustomBoosterImplant.Effect p) => p.Id == Id);
if (num3 != -1)
{
effects[num3].Value = Value;
}
}
else
{
int num4 = conditions.FindIndex((uint p) => p == Id);
if (num4 != -1)
{
conditions[num4] = Id;
}
}
break;
case ModifyType.Add:
if (target == ModifyTarget.Effect)
{
if (effects.FindIndex((CustomBoosterImplantManager.CustomBoosterImplant.Effect p) => p.Id == Id) == -1)
{
effects.Add(new CustomBoosterImplantManager.CustomBoosterImplant.Effect
{
Id = Id,
Value = Value
});
}
}
else if (conditions.FindIndex((uint p) => p == Id) == -1)
{
conditions.Add(Id);
}
break;
case ModifyType.Remove:
if (target == ModifyTarget.Effect)
{
int num = effects.FindIndex((CustomBoosterImplantManager.CustomBoosterImplant.Effect p) => p.Id == Id);
if (num != -1)
{
effects.RemoveAt(num);
}
}
else
{
int num2 = conditions.FindIndex((uint p) => p == Id);
if (num2 != -1)
{
conditions.RemoveAt(num2);
}
}
break;
}
}
}
public class CustomBoosterImplantEffectEntry
{
[FSSeparator]
[FSDisplayName("效果ID")]
public uint Id
{
get
{
return Effect.Id;
}
set
{
Effect.Id = value;
}
}
[FSDisplayName("效果数值")]
public float Value
{
get
{
return Effect.Value;
}
set
{
Effect.Value = value;
}
}
[FSIgnore]
private CustomBoosterImplantManager.CustomBoosterImplant.Effect Effect { get; set; }
public CustomBoosterImplantEffectEntry(CustomBoosterImplantManager.CustomBoosterImplant.Effect effect)
{
Effect = effect;
}
}
public class CustomBoosterImplantConditionEntry
{
[FSIgnore]
public int Index { get; set; }
[FSSeparator]
[FSDisplayName("条件")]
public uint Condition
{
get
{
return Implant.Conditions[Index];
}
set
{
Implant.Conditions[Index] = value;
}
}
[FSIgnore]
private CustomBoosterImplantManager.CustomBoosterImplant Implant { get; set; }
public CustomBoosterImplantConditionEntry(int index, CustomBoosterImplantManager.CustomBoosterImplant implant)
{
Index = index;
Implant = implant;
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class CM_PageLoadout__ProcessBoosterImplantEvents__Patch
{
private static bool Prefix()
{
if (Settings.EnableCustomBooster)
{
return false;
}
return true;
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class PersistentInventoryManager__Setup__Patch
{
private static void Postfix(PersistentInventoryManager __instance)
{
__instance.OnBoosterImplantInventoryChanged += Action.op_Implicit((Action)delegate
{
if (Settings.EnableCustomBooster)
{
CustomBoosterImplantManager.ApplyCustomBoosterImplants();
}
});
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
internal static class DropServerManager__NewGameSession__Patch
{
public static void Prefix(ref uint[] boosterIds)
{
if (Settings.EnableCustomBooster)
{
boosterIds = null;
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class DropServerGameSession__ConsumeBoosters__Patch
{
private static bool Prefix()
{
return !Settings.EnableCustomBooster;
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class BoosterUtils__BoosterCurrencyFromHeatAndArtifactCount__Patch
{
private static void Postfix(ref int __result)
{
if (Settings.EnableCustomBooster)
{
__result = 0;
}
}
}
public override string Name => "Custom Booster";
[FeatureConfig]
public static CustomBoosterSetting Settings { get; set; }
public override bool RequiresRestart => true;
public override Type[] LocalizationExternalTypes => new Type[3]
{
typeof(BoosterImplantCategory),
typeof(AgentModifier),
typeof(BoosterCondition)
};
}
[DisallowInGameToggle]
[EnableFeatureByDefault]
public class PerfectBooster : Feature
{
public class PerfectBoosterSetting
{
[FSDisplayName("快速刷取")]
public bool EnableBoosterFarmer { get; set; }
[RequiresRestart]
[FSDisplayName("完美强化剂")]
public bool EnablePerfectBooster { get; set; } = true;
[FSDisplayName("禁用消耗")]
public bool DisableBoosterConsume { get; set; } = true;
[FSHeader("自定义强化剂", true)]
[FSDisplayName("启用自定义强化剂")]
public bool EnableCustomPerfectBooster
{
get
{
return BoosterImplantTemplateManager.EnableCustomPerfectBooster;
}
set
{
BoosterImplantTemplateManager.EnableCustomPerfectBooster = value;
}
}
[FSDisplayName("通过现有强化剂生成自定义强化剂")]
public FButton CreateCustomPerfectBoosterFromInventory { get; set; } = new FButton("生成", "生成自定义强化剂", (Action)CustomPerfectBoosterImplantManager.CreateCustomPerfectBoosterImplantsFromInventory, false);
[FSDisplayName("通过设置文件重载自定义强化剂")]
public FButton LoadCustomPerfectBoosterFromSettings { get; set; } = new FButton("重载", "重载自定义强化剂设置", (Action)CustomPerfectBoosterImplantManager.CustomPerfectBoosterImplants.Load, false);
[FSDisplayName("应用自定义强化剂")]
public FButton ApplyCustomPerfectBoosters { get; set; } = new FButton("应用", "应用自定义强化剂", (Action)CustomPerfectBoosterImplantManager.ApplyCustomPerfectBoosterImplants, false);
[JsonIgnore]
[FSReadOnly(true)]
[FSDisplayName("编辑自定义强化剂")]
public Dictionary<BoosterImplantCategory, CustomPerfectBoosterImplantEntryListEntry> CustomPerfectBoosterImplantsEntry
{
get
{
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
Dictionary<BoosterImplantCategory, CustomPerfectBoosterImplantEntryListEntry> dictionary = new Dictionary<BoosterImplantCategory, CustomPerfectBoosterImplantEntryListEntry>();
for (int i = 0; i < 3; i++)
{
BoosterImplantCategory key = (BoosterImplantCategory)i;
List<CustomPerfectBoosterImplantEntry> list = new List<CustomPerfectBoosterImplantEntry>();
for (int j = 0; j < CustomPerfectBoosterImplantManager.CustomPerfectBoosterImplants.Value[key].Count; j++)
{
list.Add(new CustomPerfectBoosterImplantEntry(CustomPerfectBoosterImplantManager.CustomPerfectBoosterImplants.Value[key][j]));
}
dictionary[key] = new CustomPerfectBoosterImplantEntryListEntry(list);
}
return dictionary;
}
set
{
}
}
}
public class CustomPerfectBoosterImplantEntryListEntry
{
[FSInline]
[FSDisplayName("强化剂列表")]
public List<CustomPerfectBoosterImplantEntry> Entries { get; set; } = new List<CustomPerfectBoosterImplantEntry>();
public CustomPerfectBoosterImplantEntryListEntry(List<CustomPerfectBoosterImplantEntry> entries)
{
Entries = entries;
}
}
public class CustomPerfectBoosterImplantEntry
{
[FSSeparator]
[FSReadOnly(true)]
[FSDisplayName("名称")]
public string Name
{
get
{
return Implant.Name;
}
set
{
}
}
[FSReadOnly(true)]
[FSDisplayName("类别")]
public BoosterImplantCategory Category
{
get
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
return Implant.Category;
}
set
{
}
}
[FSReadOnly(true)]
[FSDisplayName("ID")]
public uint TemplateId
{
get
{
return Implant.TemplateId;
}
set
{
}
}
[FSDisplayName("模版索引")]
public int TemplateIndex
{
get
{
return Implant.TemplateIndex;
}
set
{
Implant.TemplateIndex = value;
UpdateTemplate();
}
}
[FSDisplayName("效果组索引")]
public int EffectsGroupIndex
{
get
{
return Implant.EffectGroupIndex;
}
set
{
Implant.EffectGroupIndex = value;
}
}
[FSDisplayName("条件组索引")]
public int ConditionsGroupIndex
{
get
{
return Implant.ConditionGroupIndex;
}
set
{
Implant.ConditionGroupIndex = value;
}
}
[FSDisplayName("状态")]
public bool Enabled
{
get
{
return Implant.Enabled;
}
set
{
Implant.Enabled = value;
}
}
[JsonIgnore]
[FSInline]
[FSDisplayName("可选模板")]
public CustomPerfectBoosterTemplateEntry Templates { get; set; } = new CustomPerfectBoosterTemplateEntry();
[FSIgnore]
private CustomPerfectBoosterImplantManager.CustomPerfectBoosterImplant Implant { get; set; }
public CustomPerfectBoosterImplantEntry(CustomPerfectBoosterImplantManager.CustomPerfectBoosterImplant implant)
{
Implant = implant;
TemplateId = implant.TemplateId;
BoosterImplantTemplateManager.BoosterImplantTemplate boosterImplantTemplate = BoosterImplantTemplateManager.BoosterImplantTemplates.FindAll((BoosterImplantTemplateManager.BoosterImplantTemplate p) => p.BoosterImplantID == implant.TemplateId)[implant.TemplateIndex];
if (boosterImplantTemplate != null && boosterImplantTemplate.BoosterImplantID != 0)
{
Templates.EffectsTemplates.Clear();
for (int i = 0; i < boosterImplantTemplate.EffectGroups.Count; i++)
{
Templates.EffectsTemplates.Add(new BoosterImplantEffectGroupPreferenceEntry(i, boosterImplantTemplate.EffectGroups[i]));
}
Templates.ConditionsTemplates.Clear();
for (int j = 0; j < boosterImplantTemplate.ConditionGroups.Count; j++)
{
Templates.ConditionsTemplates.Add(new BoosterImplantConditionGroupPreferenceEntry(j, boosterImplantTemplate.ConditionGroups[j]));
}
TemplateId = boosterImplantTemplate.BoosterImplantID;
}
}
private void UpdateTemplate()
{
List<BoosterImplantTemplateManager.BoosterImplantTemplate> list = BoosterImplantTemplateManager.BoosterImplantTemplates.FindAll((BoosterImplantTemplateManager.BoosterImplantTemplate p) => p.BoosterImplantID == TemplateId);
if (TemplateIndex <= -1 || TemplateIndex >= list.Count)
{
return;
}
BoosterImplantTemplateManager.BoosterImplantTemplate boosterImplantTemplate = list[TemplateIndex];
if (boosterImplantTemplate != null && boosterImplantTemplate.BoosterImplantID != 0)
{
Templates.EffectsTemplates.Clear();
for (int i = 0; i < boosterImplantTemplate.EffectGroups.Count; i++)
{
Templates.EffectsTemplates.Add(new BoosterImplantEffectGroupPreferenceEntry(i, boosterImplantTemplate.EffectGroups[i]));
}
Templates.ConditionsTemplates.Clear();
for (int j = 0; j < boosterImplantTemplate.ConditionGroups.Count; j++)
{
Templates.ConditionsTemplates.Add(new BoosterImplantConditionGroupPreferenceEntry(j, boosterImplantTemplate.ConditionGroups[j]));
}
TemplateId = boosterImplantTemplate.BoosterImplantID;
}
}
}
public class CustomPerfectBoosterTemplateEntry
{
[FSReadOnly(true)]
[FSDisplayName("可选效果模板")]
public List<BoosterImplantEffectGroupPreferenceEntry> EffectsTemplates { get; set; } = new List<BoosterImplantEffectGroupPreferenceEntry>();
[FSReadOnly(true)]
[FSDisplayName("可选条件模板")]
public List<BoosterImplantConditionGroupPreferenceEntry> ConditionsTemplates { get; set; } = new List<BoosterImplantConditionGroupPreferenceEntry>();
}
public class BoosterImplantEffectGroupPreferenceEntry
{
public class EffectEntry
{
[FSReadOnly(true)]
[FSDisplayName("效果")]
public AgentModifier Effect { get; set; }
public EffectEntry(BoosterImplantEffectDataBlock block)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
Effect = block.Effect;
}
}
[FSSeparator]
[FSReadOnly(true)]
[FSDisplayName("效果组索引")]
public int Index { get; set; }
[FSReadOnly(true)]
[FSInline]
[FSDisplayName("效果列表")]
public List<EffectEntry> Effects { get; set; } = new List<EffectEntry>();
public BoosterImplantEffectGroupPreferenceEntry(int index, List<BoosterImplantTemplateManager.BoosterImplantEffectTemplate> effectGroup)
{
Index = index;
Effects.Clear();
for (int i = 0; i < effectGroup.Count; i++)
{
BoosterImplantEffectDataBlock block = GameDataBlockBase<BoosterImplantEffectDataBlock>.GetBlock(effectGroup[i].BoosterImplantEffect);
if (block != null)
{
Effects.Add(new EffectEntry(block));
}
}
}
}
public class BoosterImplantConditionGroupPreferenceEntry
{
public class ConditionEntry
{
[FSReadOnly(true)]
[FSDisplayName("条件")]
public BoosterCondition Condition { get; set; }
public ConditionEntry(BoosterImplantConditionDataBlock block)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
Condition = block.Condition;
}
}
[FSSeparator]
[FSReadOnly(true)]
[FSDisplayName("条件组索引")]
public int Index { get; set; }
[FSReadOnly(true)]
[FSInline]
[FSDisplayName("条件列表")]
public List<ConditionEntry> Conditions { get; set; } = new List<ConditionEntry>();
public BoosterImplantConditionGroupPreferenceEntry(int index, List<uint> conditionGroup)
{
Index = index;
Conditions.Clear();
for (int i = 0; i < conditionGroup.Count; i++)
{
BoosterImplantConditionDataBlock block = GameDataBlockBase<BoosterImplantConditionDataBlock>.GetBlock(conditionGroup[i]);
if (block != null)
{
Conditions.Add(new ConditionEntry(block));
}
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class LocalizationManager__Setup__Patch
{
private static void Postfix()
{
CustomPerfectBoosterImplantManager.CustomPerfectBoosterImplants.Load();
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class PersistentInventoryManager__Setup__Patch
{
private static void Postfix(PersistentInventoryManager __instance)
{
__instance.OnBoosterImplantInventoryChanged += Action.op_Implicit((Action)delegate
{
if (Settings.EnableCustomPerfectBooster)
{
CustomPerfectBoosterImplantManager.ApplyCustomPerfectBoosterImplants();
}
});
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class BoosterImplantManager__OnActiveBoosterImplantsChanged__Patch
{
private static void Prefix()
{
if (!Settings.EnablePerfectBooster || Settings.EnableCustomPerfectBooster)
{
return;
}
for (int i = 0; i < ((Il2CppArrayBase<Category>)(object)PersistentInventoryManager.Current.m_boosterImplantInventory.Categories).Count; i++)
{
List<BoosterImplantInventoryItem> inventory = ((Il2CppArrayBase<Category>)(object)PersistentInventoryManager.Current.m_boosterImplantInventory.Categories)[i].Inventory;
for (int j = 0; j < inventory.Count; j++)
{
BoosterImplant implant = inventory[j].Implant;
if (BoosterImplantTemplateManager.TryGetBoosterImplantTemplate(implant, out var _, out var effectGroup, out var conditionGroup, out var _, out var _))
{
BoosterImplantTemplateManager.ApplyPerfectBoosterFromTemplate(implant, effectGroup, conditionGroup);
}
}
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class CM_PageLoadout__ProcessBoosterImplantEvents__Patch
{
private static bool Prefix()
{
if (Settings.EnableCustomPerfectBooster)
{
return false;
}
return true;
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
internal static class DropServerManager__NewGameSession__Patch
{
public static void Prefix(ref uint[] boosterIds)
{
if (Settings.DisableBoosterConsume || Settings.EnablePerfectBooster)
{
boosterIds = null;
}
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class DropServerGameSession__ConsumeBoosters__Patch
{
private static bool Prefix()
{
if (!Settings.DisableBoosterConsume)
{
return !Settings.EnableCustomPerfectBooster;
}
return false;
}
}
[ArchivePatch(/*Could not decode attribute arguments.*/)]
private class BoosterUtils__BoosterCurrencyFromHeatAndArtifactCount__Patch
{
private static void Postfix(ref int __result)
{
if (Settings.EnableCustomPerfectBooster)
{
__result = 0;
}
else if (Settings.EnableBoosterFarmer)
{
__result = 100000;
}
}
}
public override string Name => "Perfect Booster";
[FeatureConfig]
public static PerfectBoosterSetting Settings { get; set; }
public override bool RequiresRestart => true;
public override Type[] LocalizationExternalTypes => new Type[3]
{
typeof(BoosterImplantCategory),
typeof(AgentModifier),
typeof(BoosterCondition)
};
public override void OnGameDataInitialized()
{
BoosterImplantTemplateManager.LoadTemplateData();
}
}
}