using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using Photon.Pun;
using UnityEngine;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: IgnoresAccessChecksTo("")]
[assembly: AssemblyCompany("zabu")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("zabumod")]
[assembly: AssemblyTitle("zabumod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[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 REPOJP.ArenaCustomize
{
[BepInPlugin("REPOJP.ArenaCustomize", "ArenaCustomize", "1.4.0")]
public sealed class ArenaCustomizePlugin : BaseUnityPlugin
{
[HarmonyPatch(typeof(Arena), "ArenaInitMultiplayer")]
private static class Arena_ArenaInitMultiplayer_Patch
{
private static bool Prefix(Arena __instance)
{
if (!CfgEnableMod.Value)
{
return true;
}
try
{
RunArenaInit(__instance);
return false;
}
catch (Exception ex)
{
Log.LogError((object)("Failure: ArenaInitMultiplayer Prefix\n" + ex));
return true;
}
}
}
[HarmonyPatch(typeof(Arena), "SpawnMidWeapons")]
private static class Arena_SpawnMidWeapons_Patch
{
private static bool Prefix()
{
if (!CfgEnableMod.Value || !SemiFunc.RunIsArena())
{
return true;
}
if (CfgDisableMidWeaponSpawn.Value)
{
return false;
}
return true;
}
}
[HarmonyPatch(typeof(Arena), "StateLevel1")]
private static class Arena_StateLevel1_Patch
{
private static bool Prefix(Arena __instance)
{
return HandleArenaTimedState(__instance, CfgLevel1Seconds.Value, isLevel3: false);
}
}
[HarmonyPatch(typeof(Arena), "StateLevel2")]
private static class Arena_StateLevel2_Patch
{
private static bool Prefix(Arena __instance)
{
return HandleArenaTimedState(__instance, CfgLevel2Seconds.Value, isLevel3: false);
}
}
[HarmonyPatch(typeof(Arena), "StateLevel3")]
private static class Arena_StateLevel3_Patch
{
private static bool Prefix(Arena __instance)
{
return HandleArenaTimedState(__instance, CfgLevel3Seconds.Value, isLevel3: true);
}
}
[HarmonyPatch(typeof(Arena), "StatePlatformRemove")]
private static class Arena_StatePlatformRemove_Patch
{
private static bool Prefix(Arena __instance)
{
return HandlePlatformRemove(__instance);
}
}
public const string PluginGuid = "REPOJP.ArenaCustomize";
public const string PluginName = "ArenaCustomize";
public const string PluginVersion = "1.4.0";
internal static ArenaCustomizePlugin Instance;
internal static ManualLogSource Log;
private Harmony harmony;
private float periodicBatteryRefillTimer;
private const string SectionGeneral = "A General";
private const string SectionPlatformTimer = "B Platform Timer";
private const string SectionPlatformRemove = "D Platform Remove";
private const string SectionItemCountsMelee = "E Item Counts - Melee";
private const string SectionItemCountsGuns = "F Item Counts - Guns";
private const string SectionItemCountsCarts = "G Item Counts - Carts";
private const string SectionItemCountsDrones = "H Item Counts - Drones";
private const string SectionItemCountsOrbs = "I Item Counts - Orbs";
private const string SectionItemCountsHealth = "J Item Counts - Health";
private const string SectionItemCountsUsables = "K Item Counts - Usables";
internal static ConfigEntry<bool> CfgEnableMod;
internal static ConfigEntry<bool> CfgDisableMidWeaponSpawn;
internal static ConfigEntry<bool> CfgEnableArenaItemSpawn;
internal static ConfigEntry<bool> CfgEnablePeriodicBatteryRefillInArena;
internal static ConfigEntry<int> CfgPeriodicBatteryRefillIntervalSeconds;
internal static ConfigEntry<bool> CfgWriteSpawnLog;
internal static ConfigEntry<bool> CfgShuffleItemVolumes;
internal static ConfigEntry<bool> CfgSpawnOverflowAtCenter;
internal static ConfigEntry<float> CfgSpawnOverflowRadius;
internal static ConfigEntry<float> CfgSpawnOverflowHeightStep;
internal static ConfigEntry<int> CfgLevel1Seconds;
internal static ConfigEntry<int> CfgLevel2Seconds;
internal static ConfigEntry<int> CfgLevel3Seconds;
internal static ConfigEntry<bool> CfgKeepLastPlatform;
internal static ConfigEntry<float> CfgPlatformRemoveDurationSeconds;
internal static ConfigEntry<bool> CfgEnablePlatformShrink;
private static readonly Dictionary<string, Item> ItemByKey = new Dictionary<string, Item>(StringComparer.OrdinalIgnoreCase);
private static readonly Dictionary<string, ConfigEntry<int>> ItemCountConfigsByKey = new Dictionary<string, ConfigEntry<int>>(StringComparer.OrdinalIgnoreCase);
private static readonly Dictionary<string, List<string>> SectionToItemKeys = new Dictionary<string, List<string>>(StringComparer.OrdinalIgnoreCase);
private static readonly Dictionary<string, int> DefaultSpawnCounts = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase)
{
{ "BaseballBat", 2 },
{ "FryingPan", 2 },
{ "InflatableHammer", 2 },
{ "Prodzap", 2 },
{ "SledgeHammer", 2 },
{ "Sword", 2 },
{ "Boltzap", 1 },
{ "CARTCannon", 1 },
{ "CARTLaser", 1 },
{ "Gun", 1 },
{ "PhotonBlaster", 1 },
{ "PulsePistol", 1 },
{ "Shotgun", 1 },
{ "TranqGun", 1 },
{ "CART", 1 },
{ "POCKETCART", 0 },
{ "FeatherDrone", 0 },
{ "HealerDrone", 0 },
{ "IndestructibleDrone", 0 },
{ "RechargeDrone", 0 },
{ "RollDrone", 0 },
{ "ZeroGravityDrone", 0 },
{ "FeatherOrb", 1 },
{ "HealerOrb", 1 },
{ "IndestructibleOrb", 1 },
{ "MagnetOrb", 1 },
{ "RechargeOrb", 1 },
{ "RollOrb", 1 },
{ "ZeroGravityOrb", 0 },
{ "LargeHealthPack100", 2 },
{ "MediumHealthPack50", 2 },
{ "SmallHealthPack25", 2 },
{ "CrouchRestUpgrade", 3 },
{ "DeathHeadBatteryUpgrade", 0 },
{ "DuckBucket", 0 },
{ "DuctTapedGrenades", 3 },
{ "EnergyCrystal", 0 },
{ "ExplosiveMine", 0 },
{ "ExtraJumpUpgrade", 3 },
{ "ExtractionTracker", 0 },
{ "Grenade", 0 },
{ "HealthUpgrade", 3 },
{ "HumanGrenade", 0 },
{ "MapPlayerCountUpgrade", 0 },
{ "PhaseBridge", 1 },
{ "RangeUpgrade", 3 },
{ "RubberDuck", 0 },
{ "ShockwaveGrenade", 0 },
{ "ShockwaveMine", 0 },
{ "SprintSpeedUpgrade", 3 },
{ "StaminaUpgrade", 3 },
{ "StrengthUpgrade", 3 },
{ "StunGrenade", 0 },
{ "Trapzap", 0 },
{ "TumbleClimbUpgrade", 3 },
{ "TumbleLaunchUpgrade", 3 },
{ "TumbleWingsUpgrade", 3 },
{ "ValuableTracker", 0 }
};
private static readonly FieldInfo ArenaFieldStateStart = AccessTools.Field(typeof(Arena), "stateStart");
private static readonly FieldInfo ArenaFieldStateTimer = AccessTools.Field(typeof(Arena), "stateTimer");
private static readonly FieldInfo ArenaFieldLevel = AccessTools.Field(typeof(Arena), "level");
private static readonly FieldInfo ArenaFieldFinalPlatform = AccessTools.Field(typeof(Arena), "finalPlatform");
private static readonly FieldInfo ArenaFieldNextLevel = AccessTools.Field(typeof(Arena), "nextLevel");
private static readonly FieldInfo ArenaFieldPlatforms = AccessTools.Field(typeof(Arena), "platforms");
private static readonly FieldInfo ArenaFieldItemsMid = AccessTools.Field(typeof(Arena), "itemsMid");
private static readonly MethodInfo ArenaMethodNextLevel = AccessTools.Method(typeof(Arena), "NextLevel", (Type[])null, (Type[])null);
private static readonly MethodInfo PunManagerMethodSpawnItem = AccessTools.Method(typeof(PunManager), "SpawnItem", new Type[2]
{
typeof(Item),
typeof(ItemVolume)
}, (Type[])null);
private static readonly MethodInfo ItemBatteryMethodBatteryFullPercentChange = AccessTools.Method(typeof(ItemBattery), "BatteryFullPercentChange", new Type[2]
{
typeof(int),
typeof(bool)
}, (Type[])null);
private static readonly FieldInfo ItemBatteryFieldBatteryLife = AccessTools.Field(typeof(ItemBattery), "batteryLife");
private static readonly FieldInfo ItemBatteryFieldBatteryBars = AccessTools.Field(typeof(ItemBattery), "batteryBars");
private static readonly FieldInfo ItemBatteryFieldBatteryLifeInt = AccessTools.Field(typeof(ItemBattery), "batteryLifeInt");
private static readonly FieldInfo ItemBatteryFieldBatteryLifeCountBars = AccessTools.Field(typeof(ItemBattery), "batteryLifeCountBars");
private static readonly FieldInfo ItemBatteryFieldBatteryLifeCountBarsPrev = AccessTools.Field(typeof(ItemBattery), "batteryLifeCountBarsPrev");
private static readonly FieldInfo ItemBatteryFieldDrainRate = AccessTools.Field(typeof(ItemBattery), "drainRate");
private static readonly FieldInfo ItemBatteryFieldDrainTimer = AccessTools.Field(typeof(ItemBattery), "drainTimer");
private static readonly FieldInfo ItemBatteryFieldChargeRate = AccessTools.Field(typeof(ItemBattery), "chargeRate");
private static readonly FieldInfo ItemBatteryFieldChargeTimer = AccessTools.Field(typeof(ItemBattery), "chargeTimer");
private void Awake()
{
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Expected O, but got Unknown
try
{
Instance = this;
Log = ((BaseUnityPlugin)this).Logger;
((Component)this).transform.parent = null;
((Object)((Component)this).gameObject).hideFlags = (HideFlags)61;
Object.DontDestroyOnLoad((Object)(object)((Component)this).gameObject);
InitializeSectionLists();
BindGeneralConfig();
BindPlatformConfig();
BuildAllItemConfigsAtAwake();
periodicBatteryRefillTimer = Mathf.Max(1, CfgPeriodicBatteryRefillIntervalSeconds.Value);
harmony = new Harmony("REPOJP.ArenaCustomize");
harmony.PatchAll();
((BaseUnityPlugin)this).Logger.LogInfo((object)"ArenaCustomize loaded");
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)("Failure: Awake\n" + ex));
}
}
private void Update()
{
try
{
if (!CfgEnableMod.Value || !CfgEnablePeriodicBatteryRefillInArena.Value)
{
return;
}
if (!SemiFunc.RunIsArena())
{
periodicBatteryRefillTimer = Mathf.Max(1, CfgPeriodicBatteryRefillIntervalSeconds.Value);
}
else if (SemiFunc.IsMasterClientOrSingleplayer())
{
periodicBatteryRefillTimer -= Time.deltaTime;
if (!(periodicBatteryRefillTimer > 0f))
{
periodicBatteryRefillTimer = Mathf.Max(1, CfgPeriodicBatteryRefillIntervalSeconds.Value);
RefillAllArenaItemBatteries();
}
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)("Failure: Update\n" + ex));
}
}
private void OnDestroy()
{
try
{
if (harmony != null)
{
harmony.UnpatchSelf();
}
}
catch (Exception ex)
{
((BaseUnityPlugin)this).Logger.LogError((object)("Failure: OnDestroy\n" + ex));
}
}
private static void InitializeSectionLists()
{
SectionToItemKeys.Clear();
SectionToItemKeys["E Item Counts - Melee"] = new List<string>();
SectionToItemKeys["F Item Counts - Guns"] = new List<string>();
SectionToItemKeys["G Item Counts - Carts"] = new List<string>();
SectionToItemKeys["H Item Counts - Drones"] = new List<string>();
SectionToItemKeys["I Item Counts - Orbs"] = new List<string>();
SectionToItemKeys["J Item Counts - Health"] = new List<string>();
SectionToItemKeys["K Item Counts - Usables"] = new List<string>();
}
private void BindGeneralConfig()
{
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Expected O, but got Unknown
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Expected O, but got Unknown
//IL_017f: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Expected O, but got Unknown
CfgEnableMod = ((BaseUnityPlugin)this).Config.Bind<bool>("A General", "EnableMod", true, "Enable or disable this mod.このMODの有効無効");
CfgDisableMidWeaponSpawn = ((BaseUnityPlugin)this).Config.Bind<bool>("A General", "DisableMidWeaponSpawn", false, "Disable arena mid weapon spawn completely.arena中央途中武器スポーン完全無効");
CfgEnableArenaItemSpawn = ((BaseUnityPlugin)this).Config.Bind<bool>("A General", "EnableArenaItemSpawn", true, "Enable arena item spawning.arena内アイテム生成有効");
CfgEnablePeriodicBatteryRefillInArena = ((BaseUnityPlugin)this).Config.Bind<bool>("A General", "EnablePeriodicBatteryRefillInArena", true, "Periodically refill all item batteries only in arena.arena内のみ全アイテムの充電を定期満タン化");
CfgPeriodicBatteryRefillIntervalSeconds = ((BaseUnityPlugin)this).Config.Bind<int>("A General", "PeriodicBatteryRefillIntervalSeconds", 10, new ConfigDescription("How often to refill all item batteries in arena.seconds.arena内で全アイテムの充電を満タンにする間隔秒", (AcceptableValueBase)(object)new AcceptableValueRange<int>(1, 60), Array.Empty<object>()));
CfgWriteSpawnLog = ((BaseUnityPlugin)this).Config.Bind<bool>("A General", "WriteSpawnLog", true, "Write detailed spawn and classification logs.詳細な生成と分類ログ出力");
CfgShuffleItemVolumes = ((BaseUnityPlugin)this).Config.Bind<bool>("A General", "ShuffleItemVolumes", true, "Shuffle arena item volumes before matching.生成前にarenaのItemVolume順をシャッフル");
CfgSpawnOverflowAtCenter = ((BaseUnityPlugin)this).Config.Bind<bool>("A General", "SpawnOverflowAtCenter", true, "Spawn overflow items around arena center when matching volumes are exhausted.一致するItemVolume不足時にarena中央周辺へ追加生成");
CfgSpawnOverflowRadius = ((BaseUnityPlugin)this).Config.Bind<float>("A General", "SpawnOverflowRadius", 2f, new ConfigDescription("Overflow spawn radius around center.中央追加生成半径", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 20f), Array.Empty<object>()));
CfgSpawnOverflowHeightStep = ((BaseUnityPlugin)this).Config.Bind<float>("A General", "SpawnOverflowHeightStep", 0.25f, new ConfigDescription("Overflow spawn height step.中央追加生成の高さ差", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 5f), Array.Empty<object>()));
}
private void BindPlatformConfig()
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Expected O, but got Unknown
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Expected O, but got Unknown
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_009e: Expected O, but got Unknown
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Expected O, but got Unknown
CfgLevel1Seconds = ((BaseUnityPlugin)this).Config.Bind<int>("B Platform Timer", "Level1Seconds", 30, new ConfigDescription("Arena level 1 duration seconds.arenaレベル1時間", (AcceptableValueBase)(object)new AcceptableValueRange<int>(-1, 180), Array.Empty<object>()));
CfgLevel2Seconds = ((BaseUnityPlugin)this).Config.Bind<int>("B Platform Timer", "Level2Seconds", 30, new ConfigDescription("Arena level 2 duration seconds.arenaレベル2時間", (AcceptableValueBase)(object)new AcceptableValueRange<int>(-1, 180), Array.Empty<object>()));
CfgLevel3Seconds = ((BaseUnityPlugin)this).Config.Bind<int>("B Platform Timer", "Level3Seconds", 30, new ConfigDescription("Arena level 3 duration seconds.arenaレベル3時間", (AcceptableValueBase)(object)new AcceptableValueRange<int>(-1, 180), Array.Empty<object>()));
CfgKeepLastPlatform = ((BaseUnityPlugin)this).Config.Bind<bool>("B Platform Timer", "KeepLastPlatform", true, "Keep the final platform instead of dropping it.最後の床を落とさない");
CfgPlatformRemoveDurationSeconds = ((BaseUnityPlugin)this).Config.Bind<float>("D Platform Remove", "PlatformRemoveDurationSeconds", 3f, new ConfigDescription("Platform remove phase duration seconds.床落下フェーズ時間", (AcceptableValueBase)(object)new AcceptableValueRange<float>(0f, 120f), Array.Empty<object>()));
CfgEnablePlatformShrink = ((BaseUnityPlugin)this).Config.Bind<bool>("D Platform Remove", "EnablePlatformShrink", true, "Actually drop platforms after warning.警告後に実際に床を落とす");
}
private static void BuildAllItemConfigsAtAwake()
{
try
{
ItemByKey.Clear();
InitializeSectionLists();
List<Item> list = CollectAllItemsFromResources();
Dictionary<string, int> usedConfigKeys = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
for (int i = 0; i < list.Count; i++)
{
RegisterCatalogItem(list[i], usedConfigKeys);
}
SortSectionItemLists();
}
catch (Exception ex)
{
Log.LogError((object)("Failure: BuildAllItemConfigsAtAwake\n" + ex));
}
}
private static List<Item> CollectAllItemsFromResources()
{
Dictionary<string, Item> dictionary = new Dictionary<string, Item>(StringComparer.OrdinalIgnoreCase);
try
{
Item[] array = Resources.LoadAll<Item>(string.Empty);
for (int i = 0; i < array.Length; i++)
{
RegisterItemToMap(dictionary, array[i]);
}
}
catch (Exception ex)
{
Log.LogError((object)("Failure: Resources.LoadAll<Item>\n" + ex));
}
try
{
Item[] array2 = Resources.FindObjectsOfTypeAll<Item>();
for (int j = 0; j < array2.Length; j++)
{
RegisterItemToMap(dictionary, array2[j]);
}
}
catch (Exception ex2)
{
Log.LogError((object)("Failure: Resources.FindObjectsOfTypeAll<Item>\n" + ex2));
}
List<Item> list = new List<Item>(dictionary.Values);
list.Sort(CompareItemsForConfig);
return list;
}
private static void RegisterItemToMap(Dictionary<string, Item> map, Item item)
{
if (!((Object)(object)item == (Object)null))
{
string uniqueItemKey = GetUniqueItemKey(item);
if (!string.IsNullOrEmpty(uniqueItemKey) && !map.ContainsKey(uniqueItemKey))
{
map.Add(uniqueItemKey, item);
}
}
}
private static int CompareItemsForConfig(Item a, Item b)
{
string strA = ResolveConfigSection(a) + "|" + GetItemDisplayName(a) + "|" + ((Object)a).name;
string strB = ResolveConfigSection(b) + "|" + GetItemDisplayName(b) + "|" + ((Object)b).name;
return string.Compare(strA, strB, StringComparison.OrdinalIgnoreCase);
}
private static void RegisterCatalogItem(Item item, Dictionary<string, int> usedConfigKeys)
{
//IL_016e: Unknown result type (might be due to invalid IL or missing references)
//IL_0178: Expected O, but got Unknown
if ((Object)(object)item == (Object)null)
{
return;
}
string text = ResolveConfigSection(item);
if (string.IsNullOrEmpty(text))
{
return;
}
string uniqueItemKey = GetUniqueItemKey(item);
if (string.IsNullOrEmpty(uniqueItemKey))
{
return;
}
if (!ItemByKey.ContainsKey(uniqueItemKey))
{
ItemByKey.Add(uniqueItemKey, item);
}
if (!SectionToItemKeys.TryGetValue(text, out List<string> value))
{
value = new List<string>();
SectionToItemKeys[text] = value;
}
if (!value.Contains(uniqueItemKey))
{
value.Add(uniqueItemKey);
}
if (!ItemCountConfigsByKey.ContainsKey(uniqueItemKey))
{
string itemDisplayName = GetItemDisplayName(item);
string text2 = SanitizeConfigKey(itemDisplayName);
if (string.IsNullOrEmpty(text2))
{
text2 = SanitizeConfigKey(((Object)item).name);
}
if (string.IsNullOrEmpty(text2))
{
text2 = "UnknownItem";
}
string text3 = BuildUniqueConfigKey(text2, usedConfigKeys) + "Count";
int defaultSpawnCount = GetDefaultSpawnCount(item, text2);
ConfigEntry<int> value2 = ((BaseUnityPlugin)Instance).Config.Bind<int>(text, text3, defaultSpawnCount, new ConfigDescription("Requested spawn count for " + itemDisplayName + "." + itemDisplayName + " の生成数", (AcceptableValueBase)(object)new AcceptableValueRange<int>(0, 20), Array.Empty<object>()));
ItemCountConfigsByKey[uniqueItemKey] = value2;
if (CfgWriteSpawnLog != null && CfgWriteSpawnLog.Value)
{
Log.LogInfo((object)("Arena item classify: " + text + " -> " + itemDisplayName + " / unityName=" + ((Object)item).name + " / type=" + ((object)(itemType)(ref item.itemType)).ToString() + " / volume=" + ((object)(itemVolume)(ref item.itemVolume)).ToString() + " / path=" + GetPrefabResourcePath(item) + " / default=" + defaultSpawnCount));
}
}
}
private static int GetDefaultSpawnCount(Item item, string sanitizedDisplayName)
{
if (!string.IsNullOrEmpty(sanitizedDisplayName) && DefaultSpawnCounts.TryGetValue(sanitizedDisplayName, out var value))
{
return Mathf.Clamp(value, 0, 20);
}
string text = SanitizeConfigKey(((Object)(object)item != (Object)null) ? ((Object)item).name : string.Empty);
if (!string.IsNullOrEmpty(text) && DefaultSpawnCounts.TryGetValue(text, out value))
{
return Mathf.Clamp(value, 0, 20);
}
string prefabResourcePath = GetPrefabResourcePath(item);
string text2 = SanitizeConfigKey(prefabResourcePath);
if (!string.IsNullOrEmpty(text2) && DefaultSpawnCounts.TryGetValue(text2, out value))
{
return Mathf.Clamp(value, 0, 20);
}
return 0;
}
private static void SortSectionItemLists()
{
foreach (KeyValuePair<string, List<string>> sectionToItemKey in SectionToItemKeys)
{
sectionToItemKey.Value.Sort(delegate(string a, string b)
{
Item value;
string strA = (ItemByKey.TryGetValue(a, out value) ? GetItemDisplayName(value) : a);
Item value2;
string strB = (ItemByKey.TryGetValue(b, out value2) ? GetItemDisplayName(value2) : b);
return string.Compare(strA, strB, StringComparison.OrdinalIgnoreCase);
});
}
}
private static string BuildUniqueConfigKey(string baseKey, Dictionary<string, int> usedConfigKeys)
{
if (!usedConfigKeys.TryGetValue(baseKey, out var value))
{
usedConfigKeys[baseKey] = 1;
return baseKey;
}
return baseKey + "_" + (usedConfigKeys[baseKey] = value + 1);
}
private static string ResolveConfigSection(Item item)
{
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Invalid comparison between Unknown and I4
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Invalid comparison between Unknown and I4
//IL_00ad: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Invalid comparison between Unknown and I4
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Invalid comparison between Unknown and I4
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Invalid comparison between Unknown and I4
//IL_0117: Unknown result type (might be due to invalid IL or missing references)
//IL_0119: Invalid comparison between Unknown and I4
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Invalid comparison between Unknown and I4
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Invalid comparison between Unknown and I4
//IL_0133: Unknown result type (might be due to invalid IL or missing references)
//IL_0136: Invalid comparison between Unknown and I4
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Invalid comparison between Unknown and I4
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_013f: Invalid comparison between Unknown and I4
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Invalid comparison between Unknown and I4
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_0147: Invalid comparison between Unknown and I4
if ((Object)(object)item == (Object)null)
{
return null;
}
string text = (GetItemDisplayName(item) + " " + ((Object)item).name + " " + GetPrefabResourcePath(item)).ToLowerInvariant();
itemType itemType = item.itemType;
if ((int)itemType == 7 || text.Contains("baseball bat"))
{
return "E Item Counts - Melee";
}
if ((int)itemType == 9 || text.Contains("handgun") || text.Contains("shotgun"))
{
return "F Item Counts - Guns";
}
if ((int)itemType == 2 || (int)itemType == 12 || text.Contains("cart"))
{
return "G Item Counts - Carts";
}
if ((int)itemType == 0 || text.Contains("drone"))
{
return "H Item Counts - Drones";
}
if ((int)itemType == 1 || text.Contains("orb"))
{
return "I Item Counts - Orbs";
}
if ((int)itemType == 8)
{
return "J Item Counts - Health";
}
if ((int)itemType == 6 || (int)itemType == 10 || (int)itemType == 11 || (int)itemType == 13 || (int)itemType == 5 || (int)itemType == 3 || (int)itemType == 4)
{
return "K Item Counts - Usables";
}
return null;
}
private static string GetUniqueItemKey(Item item)
{
if ((Object)(object)item == (Object)null)
{
return string.Empty;
}
string prefabResourcePath = GetPrefabResourcePath(item);
if (!string.IsNullOrEmpty(prefabResourcePath))
{
return prefabResourcePath;
}
if (!string.IsNullOrEmpty(((Object)item).name))
{
return ((Object)item).name;
}
if (!string.IsNullOrEmpty(item.itemName))
{
return item.itemName;
}
return string.Empty;
}
internal static string GetItemDisplayName(Item item)
{
if ((Object)(object)item == (Object)null)
{
return "Unknown";
}
if (!string.IsNullOrEmpty(item.itemName))
{
return item.itemName;
}
if (!string.IsNullOrEmpty(((Object)item).name))
{
return ((Object)item).name;
}
return "Unknown";
}
private static string GetPrefabResourcePath(Item item)
{
try
{
if ((Object)(object)item != (Object)null && item.prefab != null && !string.IsNullOrEmpty(item.prefab.ResourcePath))
{
return item.prefab.ResourcePath;
}
}
catch
{
}
return string.Empty;
}
private static string SanitizeConfigKey(string value)
{
if (string.IsNullOrEmpty(value))
{
return string.Empty;
}
StringBuilder stringBuilder = new StringBuilder(value.Length);
foreach (char c in value)
{
if (char.IsLetterOrDigit(c))
{
stringBuilder.Append(c);
}
}
return stringBuilder.ToString();
}
internal static bool IsArenaActive()
{
return CfgEnableMod != null && CfgEnableMod.Value && SemiFunc.RunIsArena();
}
internal static float NormalizeLevelSeconds(int value)
{
if (value < 0)
{
return -1f;
}
if (value > 180)
{
return 180f;
}
return value;
}
internal static float NormalizeNonNegativeSeconds(float value, float max)
{
if (value < 0f)
{
return 0f;
}
if (value > max)
{
return max;
}
return value;
}
internal static int GetConfiguredCount(Item item)
{
if ((Object)(object)item == (Object)null)
{
return 0;
}
string uniqueItemKey = GetUniqueItemKey(item);
if (ItemCountConfigsByKey.TryGetValue(uniqueItemKey, out ConfigEntry<int> value))
{
return Mathf.Clamp(value.Value, 0, 20);
}
return 0;
}
private static List<ItemVolume> CollectArenaVolumes(Arena arena)
{
List<ItemVolume> list = new List<ItemVolume>();
if ((Object)(object)arena == (Object)null || (Object)(object)arena.itemVolumes == (Object)null)
{
return list;
}
for (int i = 0; i < arena.itemVolumes.childCount; i++)
{
Transform child = arena.itemVolumes.GetChild(i);
if (!((Object)(object)child == (Object)null))
{
ItemVolume component = ((Component)child).GetComponent<ItemVolume>();
if ((Object)(object)component != (Object)null)
{
list.Add(component);
}
}
}
if (CfgShuffleItemVolumes.Value)
{
Shuffle(list);
}
return list;
}
private static void Shuffle<T>(IList<T> list)
{
if (list != null)
{
for (int num = list.Count - 1; num > 0; num--)
{
int index = Random.Range(0, num + 1);
T value = list[num];
list[num] = list[index];
list[index] = value;
}
}
}
internal static void RunArenaInit(Arena arena)
{
if ((Object)(object)arena == (Object)null || !CfgEnableMod.Value || !SemiFunc.IsMasterClientOrSingleplayer())
{
return;
}
try
{
if (CfgWriteSpawnLog.Value)
{
Log.LogInfo((object)"Arena initial spawn start");
}
ItemManager.instance.ResetAllItems();
ItemManager.instance.spawnedItems.Clear();
ItemManager.instance.purchasedItems.Clear();
List<Item> list = new List<Item>();
AddSectionItemsToList("E Item Counts - Melee", list);
AddSectionItemsToList("F Item Counts - Guns", list);
if (ArenaFieldItemsMid != null)
{
ArenaFieldItemsMid.SetValue(arena, list);
}
List<ItemVolume> list2 = CollectArenaVolumes(arena);
if (CfgEnableArenaItemSpawn.Value)
{
SpawnConfiguredSection(arena, list2, "K Item Counts - Usables");
SpawnConfiguredSection(arena, list2, "E Item Counts - Melee");
SpawnConfiguredSection(arena, list2, "F Item Counts - Guns");
SpawnConfiguredSection(arena, list2, "G Item Counts - Carts");
SpawnConfiguredSection(arena, list2, "H Item Counts - Drones");
SpawnConfiguredSection(arena, list2, "I Item Counts - Orbs");
SpawnConfiguredSection(arena, list2, "J Item Counts - Health");
}
else if (CfgWriteSpawnLog.Value)
{
Log.LogInfo((object)"Arena item spawn disabled by config");
}
for (int i = 0; i < list2.Count; i++)
{
if ((Object)(object)list2[i] != (Object)null)
{
Object.Destroy((Object)(object)((Component)list2[i]).gameObject);
}
}
}
catch (Exception ex)
{
Log.LogError((object)("Failure: RunArenaInit\n" + ex));
}
}
private static void AddSectionItemsToList(string section, List<Item> target)
{
if (!SectionToItemKeys.TryGetValue(section, out List<string> value) || target == null)
{
return;
}
for (int i = 0; i < value.Count; i++)
{
if (ItemByKey.TryGetValue(value[i], out Item value2) && (Object)(object)value2 != (Object)null)
{
target.Add(value2);
}
}
}
private static void SpawnConfiguredSection(Arena arena, List<ItemVolume> availableVolumes, string sectionName)
{
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
if (!SectionToItemKeys.TryGetValue(sectionName, out List<string> value) || value == null)
{
return;
}
for (int i = 0; i < value.Count; i++)
{
string key = value[i];
if (!ItemByKey.TryGetValue(key, out Item value2) || (Object)(object)value2 == (Object)null)
{
continue;
}
int configuredCount = GetConfiguredCount(value2);
int num = 0;
int num2 = 0;
if (configuredCount > 0)
{
for (int j = 0; j < configuredCount; j++)
{
ItemVolume val = TakeMatchingVolume(availableVolumes, value2.itemVolume);
if ((Object)(object)val != (Object)null)
{
if (SpawnUsingVanillaOrFallback(value2, ((Component)val).transform.position, ((Component)val).transform.rotation, val))
{
num++;
}
}
else if (CfgSpawnOverflowAtCenter.Value)
{
BuildOverflowTransform(arena, j, out var position, out var rotation);
if (SpawnUsingVanillaOrFallback(value2, position, rotation, null))
{
num2++;
}
}
}
}
if (CfgWriteSpawnLog.Value)
{
Log.LogInfo((object)("Arena initial spawn request: " + sectionName + " -> " + GetItemDisplayName(value2) + " requested=" + configuredCount + " spawned=" + (num + num2) + " volume=" + num + " overflow=" + num2));
}
}
}
private static ItemVolume TakeMatchingVolume(List<ItemVolume> availableVolumes, itemVolume itemVolume)
{
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
if (availableVolumes == null)
{
return null;
}
for (int i = 0; i < availableVolumes.Count; i++)
{
ItemVolume val = availableVolumes[i];
if ((Object)(object)val != (Object)null && val.itemVolume == itemVolume)
{
availableVolumes.RemoveAt(i);
return val;
}
}
return null;
}
private static void BuildOverflowTransform(Arena arena, int spawnIndex, out Vector3 position, out Quaternion rotation)
{
//IL_001f: 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_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
Transform val = (((Object)(object)arena.itemsMidSpawner != (Object)null) ? arena.itemsMidSpawner : ((Component)arena).transform);
Vector3 position2 = val.position;
float num = Mathf.Max(0f, CfgSpawnOverflowRadius.Value);
float num2 = Mathf.Max(0f, CfgSpawnOverflowHeightStep.Value);
float num3 = (float)spawnIndex * 47.5f % 360f;
float num4 = num3 * (MathF.PI / 180f);
float num5 = 1f + Mathf.Floor((float)spawnIndex / 8f);
float num6 = num * num5;
position = new Vector3(position2.x + Mathf.Cos(num4) * num6, position2.y + num2 * (float)(spawnIndex % 4), position2.z + Mathf.Sin(num4) * num6);
rotation = Quaternion.Euler(0f, num3, 0f);
}
private static bool SpawnUsingVanillaOrFallback(Item item, Vector3 position, Quaternion rotation, ItemVolume volumeOrNull)
{
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_0100: Unknown result type (might be due to invalid IL or missing references)
//IL_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Unknown result type (might be due to invalid IL or missing references)
ItemVolume val = volumeOrNull;
GameObject val2 = null;
try
{
if ((Object)(object)item == (Object)null)
{
return false;
}
if ((Object)(object)val == (Object)null)
{
val2 = new GameObject("ArenaCustomize_TempItemVolume");
val2.transform.position = position;
val2.transform.rotation = rotation;
val = val2.AddComponent<ItemVolume>();
val.itemVolume = item.itemVolume;
}
if ((Object)(object)PunManager.instance != (Object)null && PunManagerMethodSpawnItem != null)
{
PunManagerMethodSpawnItem.Invoke(PunManager.instance, new object[2] { item, val });
return true;
}
Quaternion val3 = ((Component)val).transform.rotation * item.spawnRotationOffset;
if (SemiFunc.IsMultiplayer())
{
PhotonNetwork.InstantiateRoomObject(item.prefab.ResourcePath, ((Component)val).transform.position, val3, (byte)0, (object[])null);
}
else
{
Object.Instantiate<GameObject>(item.prefab.Prefab, ((Component)val).transform.position, val3);
}
return true;
}
catch (Exception ex)
{
Log.LogError((object)("Failure: SpawnUsingVanillaOrFallback " + GetItemDisplayName(item) + "\n" + ex));
return false;
}
finally
{
if ((Object)(object)val2 != (Object)null)
{
Object.Destroy((Object)(object)val2);
}
}
}
internal static bool HandleArenaTimedState(Arena arena, int configuredSeconds, bool isLevel3)
{
if ((Object)(object)arena == (Object)null || !CfgEnableMod.Value || !SemiFunc.RunIsArena() || !SemiFunc.IsMasterClientOrSingleplayer())
{
return true;
}
try
{
if (ArenaFieldStateStart != null && (bool)ArenaFieldStateStart.GetValue(arena))
{
ArenaFieldStateStart.SetValue(arena, false);
ArenaFieldStateTimer.SetValue(arena, NormalizeLevelSeconds(configuredSeconds));
}
float num = NormalizeLevelSeconds(configuredSeconds);
if (num < 0f)
{
return false;
}
float num2 = ((ArenaFieldStateTimer != null) ? ((float)ArenaFieldStateTimer.GetValue(arena)) : 0f);
if (num2 <= 0f)
{
if (isLevel3 && CfgKeepLastPlatform.Value)
{
if (ArenaFieldStateTimer != null)
{
ArenaFieldStateTimer.SetValue(arena, -1f);
}
return false;
}
if (isLevel3 && ArenaFieldFinalPlatform != null)
{
ArenaFieldFinalPlatform.SetValue(arena, true);
}
if (ArenaMethodNextLevel != null)
{
ArenaMethodNextLevel.Invoke(arena, null);
}
}
}
catch (Exception ex)
{
Log.LogError((object)("Failure: HandleArenaTimedState\n" + ex));
}
return false;
}
internal static bool HandlePlatformRemove(Arena arena)
{
//IL_02db: Unknown result type (might be due to invalid IL or missing references)
//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
//IL_02e3: Unknown result type (might be due to invalid IL or missing references)
//IL_019d: Unknown result type (might be due to invalid IL or missing references)
if ((Object)(object)arena == (Object)null || !CfgEnableMod.Value || !SemiFunc.RunIsArena() || !SemiFunc.IsMasterClientOrSingleplayer())
{
return true;
}
try
{
if (ArenaFieldStateStart != null && (bool)ArenaFieldStateStart.GetValue(arena))
{
int num = ((ArenaFieldLevel != null) ? ((int)ArenaFieldLevel.GetValue(arena)) : 0);
bool flag = ArenaFieldFinalPlatform != null && (bool)ArenaFieldFinalPlatform.GetValue(arena);
List<ArenaPlatform> list = ((ArenaFieldPlatforms != null) ? (ArenaFieldPlatforms.GetValue(arena) as List<ArenaPlatform>) : null);
if ((list == null || list.Count == 0) && (Object)(object)arena != (Object)null)
{
list = new List<ArenaPlatform>(((Component)arena).GetComponentsInChildren<ArenaPlatform>(true));
if (ArenaFieldPlatforms != null)
{
ArenaFieldPlatforms.SetValue(arena, list);
}
}
if (CfgEnablePlatformShrink.Value && !(CfgKeepLastPlatform.Value && flag))
{
int num2 = num - 1;
if (list != null && num2 >= 0 && num2 < list.Count && (Object)(object)list[num2] != (Object)null)
{
list[num2].StateSet((States)2);
}
}
if (arena.soundArenaRemove != null)
{
arena.soundArenaRemove.Play(((Component)arena).transform.position, 1f, 1f, 1f, 1f);
}
if ((Object)(object)GameDirector.instance != (Object)null)
{
GameDirector.instance.CameraShake.Shake(8f, 0.5f);
GameDirector.instance.CameraImpact.Shake(8f, 0.1f);
}
if (ArenaFieldStateStart != null)
{
ArenaFieldStateStart.SetValue(arena, false);
}
if (ArenaFieldStateTimer != null)
{
ArenaFieldStateTimer.SetValue(arena, NormalizeNonNegativeSeconds(CfgPlatformRemoveDurationSeconds.Value, 120f));
}
}
float num3 = ((ArenaFieldStateTimer != null) ? ((float)ArenaFieldStateTimer.GetValue(arena)) : 0f);
bool flag2 = ArenaFieldFinalPlatform != null && (bool)ArenaFieldFinalPlatform.GetValue(arena);
if (num3 <= 0f && !flag2)
{
States val = (States)((!(ArenaFieldNextLevel != null)) ? 1 : ((int)(States)ArenaFieldNextLevel.GetValue(arena)));
arena.StateSet(val);
}
}
catch (Exception ex)
{
Log.LogError((object)("Failure: HandlePlatformRemove\n" + ex));
}
return false;
}
private static bool IsBatteryAlreadyFull(ItemBattery battery)
{
if ((Object)(object)battery == (Object)null)
{
return true;
}
try
{
int batteryBarsValue = GetBatteryBarsValue(battery);
int batteryLifeIntValue = GetBatteryLifeIntValue(battery);
float batteryLifeValue = GetBatteryLifeValue(battery);
return batteryLifeValue >= 99.9f && batteryLifeIntValue >= batteryBarsValue;
}
catch
{
return false;
}
}
private static int GetBatteryBarsValue(ItemBattery battery)
{
if ((Object)(object)battery == (Object)null)
{
return 6;
}
try
{
if (ItemBatteryFieldBatteryBars != null)
{
object value = ItemBatteryFieldBatteryBars.GetValue(battery);
if (value is int)
{
int num = (int)value;
if (num > 0)
{
return num;
}
}
}
}
catch
{
}
return Mathf.Max(1, battery.batteryBars);
}
private static int GetBatteryLifeIntValue(ItemBattery battery)
{
if ((Object)(object)battery == (Object)null)
{
return 0;
}
try
{
if (ItemBatteryFieldBatteryLifeInt != null)
{
object value = ItemBatteryFieldBatteryLifeInt.GetValue(battery);
if (value is int)
{
return (int)value;
}
}
}
catch
{
}
return 0;
}
private static float GetBatteryLifeValue(ItemBattery battery)
{
if ((Object)(object)battery == (Object)null)
{
return 0f;
}
try
{
if (ItemBatteryFieldBatteryLife != null)
{
object value = ItemBatteryFieldBatteryLife.GetValue(battery);
if (value is float)
{
return (float)value;
}
}
}
catch
{
}
return battery.batteryLife;
}
private static void RefillAllArenaItemBatteries()
{
try
{
ItemBattery[] array = Object.FindObjectsOfType<ItemBattery>();
int num = 0;
foreach (ItemBattery val in array)
{
if (!((Object)(object)val == (Object)null) && !SemiFunc.RunIsShop() && !IsBatteryAlreadyFull(val))
{
ForceBatteryFull(val);
num++;
}
}
if (CfgWriteSpawnLog.Value)
{
Log.LogInfo((object)("Arena periodic battery refill: changed=" + num + " scanned=" + array.Length));
}
}
catch (Exception ex)
{
Log.LogError((object)("Failure: RefillAllArenaItemBatteries\n" + ex));
}
}
private static void ForceBatteryFull(ItemBattery battery)
{
if ((Object)(object)battery == (Object)null)
{
return;
}
try
{
int batteryBarsValue = GetBatteryBarsValue(battery);
if (ItemBatteryFieldBatteryLife != null)
{
ItemBatteryFieldBatteryLife.SetValue(battery, 100f);
}
else
{
battery.batteryLife = 100f;
}
if (ItemBatteryFieldBatteryLifeInt != null)
{
ItemBatteryFieldBatteryLifeInt.SetValue(battery, batteryBarsValue);
}
if (ItemBatteryFieldBatteryLifeCountBars != null)
{
ItemBatteryFieldBatteryLifeCountBars.SetValue(battery, batteryBarsValue);
}
if (ItemBatteryFieldBatteryLifeCountBarsPrev != null)
{
ItemBatteryFieldBatteryLifeCountBarsPrev.SetValue(battery, batteryBarsValue);
}
if (ItemBatteryFieldDrainRate != null)
{
ItemBatteryFieldDrainRate.SetValue(battery, 0f);
}
if (ItemBatteryFieldDrainTimer != null)
{
ItemBatteryFieldDrainTimer.SetValue(battery, 0f);
}
if (ItemBatteryFieldChargeRate != null)
{
ItemBatteryFieldChargeRate.SetValue(battery, 0f);
}
if (ItemBatteryFieldChargeTimer != null)
{
ItemBatteryFieldChargeTimer.SetValue(battery, 0f);
}
battery.BatteryToggle(true);
battery.OverrideBatteryShow(0.2f);
if (ItemBatteryMethodBatteryFullPercentChange != null)
{
ItemBatteryMethodBatteryFullPercentChange.Invoke(battery, new object[2] { batteryBarsValue, false });
}
else
{
battery.SetBatteryLife(100);
}
}
catch (Exception ex)
{
Log.LogError((object)("Failure: ForceBatteryFull\n" + ex));
}
}
}
}