using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using BepInEx.Logging;
using EnemiesReturns.Enemies.Judgement;
using EnemiesReturns.Enemies.LynxTribe;
using EnemiesReturns.Enemies.MechanicalSpider;
using EntityStates;
using EntityStates.Barrel;
using EntityStates.Bell.BellWeapon;
using EntityStates.BrotherMonster;
using EntityStates.Croco;
using EntityStates.DroneCombiner;
using EntityStates.DroneScrapper;
using EntityStates.FalseSonBoss;
using EntityStates.Interactables.GoldBeacon;
using EntityStates.Loader;
using EntityStates.MealPrep;
using EntityStates.Merc;
using EntityStates.Merc.Weapon;
using EntityStates.MeridianEvent;
using EntityStates.Missions.AccessCodes.Node;
using EntityStates.Missions.Arena.NullWard;
using EntityStates.Missions.BrotherEncounter;
using EntityStates.Missions.GeodeSecretMission;
using EntityStates.Missions.Moon;
using EntityStates.QuestVolatileBattery;
using EntityStates.Scrapper;
using EntityStates.ShrineHalcyonite;
using EntityStates.SolusWing2;
using EntityStates.Toolbot;
using EntityStates.VoidRaidCrab;
using EntityStates.VoidSurvivor.Weapon;
using HG;
using HG.Reflection;
using IL.EntityStates.Bell.BellWeapon;
using IL.EntityStates.Merc;
using IL.EntityStates.Merc.Weapon;
using IL.RoR2;
using IL.RoR2.UI;
using IL.RoR2.UI.LogBook;
using ItemQualities;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On;
using On.EntityStates.Barrel;
using On.EntityStates.BrotherMonster;
using On.EntityStates.Croco;
using On.EntityStates.DroneCombiner;
using On.EntityStates.DroneScrapper;
using On.EntityStates.FalseSonBoss;
using On.EntityStates.Interactables.GoldBeacon;
using On.EntityStates.Loader;
using On.EntityStates.MealPrep;
using On.EntityStates.Merc;
using On.EntityStates.Merc.Weapon;
using On.EntityStates.Missions.AccessCodes.Node;
using On.EntityStates.Missions.Arena.NullWard;
using On.EntityStates.Missions.BrotherEncounter;
using On.EntityStates.Missions.GeodeSecretMission;
using On.EntityStates.Missions.Moon;
using On.EntityStates.QuestVolatileBattery;
using On.EntityStates.Scrapper;
using On.EntityStates.ShrineHalcyonite;
using On.EntityStates.SolusWing2;
using On.EntityStates.Toolbot;
using On.EntityStates.VoidRaidCrab;
using On.EntityStates.VoidSurvivor.Weapon;
using On.RoR2;
using On.RoR2.CharacterAI;
using On.RoR2.UI;
using On.RoR2.UI.LogBook;
using On.RoR2.UI.MainMenu;
using ProperSave;
using R2API;
using R2API.Utils;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Artifacts;
using RoR2.CharacterAI;
using RoR2.ConVar;
using RoR2.ContentManagement;
using RoR2.EntitlementManagement;
using RoR2.ExpansionManagement;
using RoR2.Hologram;
using RoR2.Items;
using RoR2.Networking;
using RoR2.Orbs;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.Stats;
using RoR2.UI;
using RoR2.UI.LogBook;
using RoR2.UI.MainMenu;
using SS2;
using SS2.Components;
using TMPro;
using TPDespair.ZetAspects;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.Rendering.PostProcessing;
using UnityEngine.UI;
using WolfoLibrary;
using WolfoQoL_Client.DeathScreen;
using WolfoQoL_Client.Menu;
using WolfoQoL_Client.ModSupport;
using WolfoQoL_Client.Reminders;
using WolfoQoL_Client.Skins;
using WolfoQoL_Client.Text;
using vanillaVoid.Interactables;
using vanillaVoid.Items;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: OptIn]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("WolfoQoL_Client")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+785c975fb2625db9ea82ba60d8d21db880c87e83")]
[assembly: AssemblyProduct("WolfoQoL_Client")]
[assembly: AssemblyTitle("WolfoQoL_Client")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace WolfoQoL_Client
{
public static class Assets
{
[CompilerGenerated]
private static class <>O
{
public static hook_SetFolders <0>__SetFolders;
}
public static AssetBundle Bundle;
public static PluginInfo PluginInfo;
public static string Folder = "QualityOfLife\\";
internal static string assemblyDir => Path.GetDirectoryName(PluginInfo.Location);
public static Sprite Load(string s)
{
return Bundle.LoadAsset<Sprite>("Assets/WQoL/PingIcons/" + s + ".png");
}
internal static void Init(PluginInfo info)
{
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: Expected O, but got Unknown
PluginInfo = info;
if (!Directory.Exists(GetPathToFile(Folder)))
{
Folder = "plugins\\" + Folder;
}
if (Directory.Exists(GetPathToFile(Folder + "AssetBundles")))
{
Bundle = AssetBundle.LoadFromFile(GetPathToFile(Folder + "AssetBundles", "wolfoqualityoflife"));
Bundle.LoadAllAssets();
}
else
{
Debug.LogError((object)"COULD NOT FIND ASSETBUNDLES FOLDER");
}
if (WConfig.cfgTestDisableMod.Value)
{
return;
}
if (Directory.Exists(GetPathToFile(Folder + "Languages")))
{
object obj = <>O.<0>__SetFolders;
if (obj == null)
{
hook_SetFolders val = SetFolders;
<>O.<0>__SetFolders = val;
obj = (object)val;
}
Language.SetFolders += (hook_SetFolders)obj;
}
else
{
Debug.LogError((object)"COULD NOT FIND LANGUAGES FOLDER");
}
}
private static void SetFolders(orig_SetFolders orig, Language self, IEnumerable<string> newFolders)
{
IEnumerable<string> second = Directory.EnumerateDirectories(Path.Combine(GetPathToFile(Folder + "Languages")), self.name);
orig.Invoke(self, newFolders.Union(second));
}
internal static string GetPathToFile(string folderName)
{
return Path.Combine(assemblyDir, folderName);
}
internal static string GetPathToFile(string folderName, string fileName)
{
return Path.Combine(GetPathToFile(folderName), fileName);
}
}
public static class ClientChecks
{
[CompilerGenerated]
private static class <>O
{
public static hook_Start <0>__AddClientListeners;
public static hook_SetBodyPrefabToPreference <1>__PlayerCharacterMasterController_SetBodyPrefabToPreference;
public static hook_OnDeserialize <2>__ClientCheck_Multishop;
public static hook_OnEnter <3>__ScrapperBaseState_OnEnter;
public static hook_OnEnter <4>__ScrappingDroneMessage_Client;
public static Manipulator <5>__ClientCheck_Purchase;
public static Manipulator <6>__Inventory_OnDeserialize;
public static hook_OnDisable <7>__EquipmentDrone_ForceMessage;
}
public static void Start()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Expected O, but got Unknown
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Expected O, but got Unknown
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Expected O, but got Unknown
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Expected O, but got Unknown
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e2: Expected O, but got Unknown
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Expected O, but got Unknown
object obj = <>O.<0>__AddClientListeners;
if (obj == null)
{
hook_Start val = AddClientListeners;
<>O.<0>__AddClientListeners = val;
obj = (object)val;
}
PlayerCharacterMasterController.Start += (hook_Start)obj;
object obj2 = <>O.<1>__PlayerCharacterMasterController_SetBodyPrefabToPreference;
if (obj2 == null)
{
hook_SetBodyPrefabToPreference val2 = PlayerCharacterMasterController_SetBodyPrefabToPreference;
<>O.<1>__PlayerCharacterMasterController_SetBodyPrefabToPreference = val2;
obj2 = (object)val2;
}
PlayerCharacterMasterController.SetBodyPrefabToPreference += (hook_SetBodyPrefabToPreference)obj2;
object obj3 = <>O.<2>__ClientCheck_Multishop;
if (obj3 == null)
{
hook_OnDeserialize val3 = ClientCheck_Multishop;
<>O.<2>__ClientCheck_Multishop = val3;
obj3 = (object)val3;
}
MultiShopController.OnDeserialize += (hook_OnDeserialize)obj3;
object obj4 = <>O.<3>__ScrapperBaseState_OnEnter;
if (obj4 == null)
{
hook_OnEnter val4 = ScrapperBaseState_OnEnter;
<>O.<3>__ScrapperBaseState_OnEnter = val4;
obj4 = (object)val4;
}
ScrapperBaseState.OnEnter += (hook_OnEnter)obj4;
object obj5 = <>O.<4>__ScrappingDroneMessage_Client;
if (obj5 == null)
{
hook_OnEnter val5 = ScrappingDroneMessage_Client;
<>O.<4>__ScrappingDroneMessage_Client = val5;
obj5 = (object)val5;
}
DroneScrapperBaseState.OnEnter += (hook_OnEnter)obj5;
object obj6 = <>O.<5>__ClientCheck_Purchase;
if (obj6 == null)
{
Manipulator val6 = ClientCheck_Purchase;
<>O.<5>__ClientCheck_Purchase = val6;
obj6 = (object)val6;
}
PurchaseInteraction.OnDeserialize += (Manipulator)obj6;
object obj7 = <>O.<6>__Inventory_OnDeserialize;
if (obj7 == null)
{
Manipulator val7 = Inventory_OnDeserialize;
<>O.<6>__Inventory_OnDeserialize = val7;
obj7 = (object)val7;
}
Inventory.OnDeserialize += (Manipulator)obj7;
object obj8 = <>O.<7>__EquipmentDrone_ForceMessage;
if (obj8 == null)
{
hook_OnDisable val8 = EquipmentDrone_ForceMessage;
<>O.<7>__EquipmentDrone_ForceMessage = val8;
obj8 = (object)val8;
}
SummonMasterBehavior.OnDisable += (hook_OnDisable)obj8;
}
private static void ScrappingDroneMessage_Client(orig_OnEnter orig, DroneScrapperBaseState self)
{
orig.Invoke(self);
if (!NetworkServer.active && self is DroneScrapping)
{
DroneLoss_ClientListener.SendMessage();
}
}
private static void PlayerCharacterMasterController_SetBodyPrefabToPreference(orig_SetBodyPrefabToPreference orig, PlayerCharacterMasterController self)
{
orig.Invoke(self);
ItemLossBase_ClientListener itemLossBase_ClientListener = default(ItemLossBase_ClientListener);
if (((Component)self).TryGetComponent<ItemLossBase_ClientListener>(ref itemLossBase_ClientListener))
{
itemLossBase_ClientListener.subjectAsNetworkUser = self.networkUser;
}
}
private static void EquipmentDrone_ForceMessage(orig_OnDisable orig, SummonMasterBehavior self)
{
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Invalid comparison between Unknown and I4
orig.Invoke(self);
if (self.callOnEquipmentSpentOnPurchase)
{
PurchaseInteraction component = ((Component)self).GetComponent<PurchaseInteraction>();
if (Object.op_Implicit((Object)(object)component) && (int)component.costType == 7)
{
PlayerItemLoss_ClientListener.forceEquip = true;
PlayerItemLoss_ClientListener.token = "ITEM_LOSS_GENERIC";
ItemLossBase_ClientListener.TryMessage();
}
}
}
private static void ClientCheck_Purchase(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchStfld(x, "RoR2.PurchaseInteraction", "available")
});
if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchStfld(x, "RoR2.PurchaseInteraction", "available")
}))
{
val.Emit(OpCodes.Ldarg_0);
val.EmitDelegate<Func<bool, PurchaseInteraction, bool>>((Func<bool, PurchaseInteraction, bool>)delegate(bool t, PurchaseInteraction pur)
{
if (!t)
{
CheckInteractable_ClientOnly(pur, isMulti: false);
}
return t;
});
}
else
{
Log.LogWarning("IL Failed : PurchaseInteraction_OnDeserialize");
}
}
private static void Inventory_OnDeserialize(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdflda(x, "RoR2.Inventory", "permanentItemStacks")
}))
{
val.EmitDelegate<Func<Inventory, Inventory>>((Func<Inventory, Inventory>)delegate(Inventory inventory)
{
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
PlayerItemLoss_ClientListener playerItemLoss_ClientListener2 = default(PlayerItemLoss_ClientListener);
if (((Component)inventory).TryGetComponent<PlayerItemLoss_ClientListener>(ref playerItemLoss_ClientListener2))
{
inventory.WriteAllPermanentItemStacks((Span<int>)playerItemLoss_ClientListener2.prevItems);
playerItemLoss_ClientListener2.prevEquip = inventory.currentEquipmentIndex;
}
return inventory;
});
}
else
{
Log.LogWarning("IL Failed : Inventory_OnDeserialize 1");
}
val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchStfld(x, "RoR2.Inventory", "equipmentDisabled")
});
if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdarg(x, 0)
}))
{
val.EmitDelegate<Func<Inventory, Inventory>>((Func<Inventory, Inventory>)delegate(Inventory inventory)
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
PlayerItemLoss_ClientListener playerItemLoss_ClientListener = default(PlayerItemLoss_ClientListener);
if (((Component)inventory).TryGetComponent<PlayerItemLoss_ClientListener>(ref playerItemLoss_ClientListener))
{
playerItemLoss_ClientListener.prevEquip = inventory.currentEquipmentIndex;
}
return inventory;
});
}
else
{
Log.LogWarning("IL Failed : Inventory_OnDeserialize 2");
}
}
private static void ScrapperBaseState_OnEnter(orig_OnEnter orig, ScrapperBaseState self)
{
orig.Invoke(self);
if (!NetworkServer.active && self is WaitToBeginScrapping)
{
PlayerItemLoss_ClientListener.source = ItemLossMessage.Source.Scrapper;
ItemLossBase_ClientListener.TryMessage();
}
}
public static void AddClientListeners(orig_Start orig, PlayerCharacterMasterController self)
{
orig.Invoke(self);
((Component)self).gameObject.AddComponent<DroneCollection>();
if (!WQoLMain.HostHasMod)
{
((Component)self).gameObject.AddComponent<KillerInfo_ClientListener>();
((Component)self).gameObject.AddComponent<PlayerItemLoss_ClientListener>();
}
}
private static void ClientCheck_Multishop(orig_OnDeserialize orig, MultiShopController self, NetworkReader reader, bool initialState)
{
bool available = self.available;
orig.Invoke(self, reader, initialState);
if (available && !self.available && ((Object)self).name.StartsWith("FreeChestMultiShop"))
{
CheckInteractable_ClientOnly(null, isMulti: true);
}
}
public static void CheckInteractable_ClientOnly(PurchaseInteraction purchase, bool isMulti)
{
//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_0058: 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_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0099: Expected I4, but got Unknown
if (isMulti)
{
if (Object.op_Implicit((Object)(object)TreasureReminder.instance.Objective_FreeChest))
{
TreasureReminder.Deduct(TreasureReminder.instance.Objective_FreeChest, ref TreasureReminder.instance.freeChestCount);
}
return;
}
if (purchase.saleStarCompatible)
{
PlayerItemLoss_ClientListener.TrySaleStar(purchase);
}
CostTypeIndex costType = purchase.costType;
CostTypeIndex val = costType;
switch ((int)val)
{
case 4:
case 5:
case 6:
case 10:
if (((Object)((Component)purchase).gameObject).name.StartsWith("LunarCauldron"))
{
PlayerItemLoss_ClientListener.source = ItemLossMessage.Source.LunarCauldron;
PlayerItemLoss_ClientListener.token = "ITEM_LOSS_CAULDRON";
}
else
{
PlayerItemLoss_ClientListener.token = "ITEM_LOSS_GENERIC";
}
ItemLossBase_ClientListener.TryMessage();
break;
case 7:
PlayerItemLoss_ClientListener.checkEquip = true;
PlayerItemLoss_ClientListener.token = "ITEM_LOSS_GENERIC";
ItemLossBase_ClientListener.TryMessage();
break;
case 9:
PlayerItemLoss_ClientListener.checkEquip = true;
PlayerItemLoss_ClientListener.source = ItemLossMessage.Source.CleansingPool;
PlayerItemLoss_ClientListener.token = "ITEM_LOSS_CLEANSING";
ItemLossBase_ClientListener.TryMessage();
break;
case 12:
if (Object.op_Implicit((Object)(object)TreasureReminder.instance))
{
TreasureReminder.Deduct(TreasureReminder.instance.Objective_Lockbox, ref TreasureReminder.instance.lockboxCount);
}
break;
case 13:
if (Object.op_Implicit((Object)(object)TreasureReminder.instance))
{
TreasureReminder.Deduct(TreasureReminder.instance.Objective_LockboxVoid, ref TreasureReminder.instance.lockboxVoidCount);
}
break;
case 0:
break;
case 1:
case 2:
case 3:
case 8:
case 11:
break;
}
}
}
public class KillerInfo_ClientListener : MonoBehaviour
{
[CompilerGenerated]
private sealed class <Delay_DeathMessage>d__8 : IEnumerator<object>, IEnumerator, IDisposable
{
private int <>1__state;
private object <>2__current;
public KillerInfo_ClientListener <>4__this;
object IEnumerator<object>.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
object IEnumerator.Current
{
[DebuggerHidden]
get
{
return <>2__current;
}
}
[DebuggerHidden]
public <Delay_DeathMessage>d__8(int <>1__state)
{
this.<>1__state = <>1__state;
}
[DebuggerHidden]
void IDisposable.Dispose()
{
<>1__state = -2;
}
private bool MoveNext()
{
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Expected O, but got Unknown
switch (<>1__state)
{
default:
return false;
case 0:
<>1__state = -1;
<>2__current = (object)new WaitForSeconds(0.3f);
<>1__state = 1;
return true;
case 1:
<>1__state = -1;
<>4__this.SendMessage();
<>4__this.latestDmg = null;
return false;
}
}
bool IEnumerator.MoveNext()
{
//ILSpy generated this explicit interface implementation from .override directive in MoveNext
return this.MoveNext();
}
[DebuggerHidden]
void IEnumerator.Reset()
{
throw new NotSupportedException();
}
}
public GameObject playerBodyObject;
public CharacterBody charBody;
public CharacterMaster playerMaster;
public UnityAction deathEvent;
public bool killed = false;
private DamageDealtMessage latestDmg;
public void OnEnable()
{
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Expected O, but got Unknown
if (WQoLMain.HostHasMod)
{
Log.LogMessage("Host has mod, removing Client Workaround : KillerInfo_ClientListener");
Object.Destroy((Object)(object)this);
return;
}
PlayerCharacterMasterController component = ((Component)this).GetComponent<PlayerCharacterMasterController>();
if (!((Object)(object)component == (Object)null))
{
GlobalEventManager.onClientDamageNotified += onClientDamageNotified;
playerMaster = component.master;
playerMaster.onBodyStart += Master_onBodyStart;
if (deathEvent == null)
{
deathEvent = new UnityAction(OnBodyDeath);
playerMaster.onBodyDeath.AddListener(deathEvent);
}
}
}
public void OnDisable()
{
if (deathEvent != null)
{
playerMaster.onBodyDeath.RemoveListener(deathEvent);
}
playerMaster.onBodyStart -= Master_onBodyStart;
GlobalEventManager.onClientDamageNotified -= onClientDamageNotified;
}
public void SendMessage()
{
//IL_00f5: 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)
if (latestDmg == null)
{
return;
}
if (charBody.healthComponent.alive)
{
Log.LogMessage("KillerInfo_ClientListener | Sending message but is Alive?" + (object)charBody);
}
if (killed)
{
Log.LogMessage("KillerInfo_ClientListener | Already sent message, how are they dying again?" + (object)charBody);
return;
}
killed = true;
string bestBodyName = Util.GetBestBodyName(latestDmg.attacker);
CharacterMaster attackerMaster = null;
CharacterBody val = null;
if (Object.op_Implicit((Object)(object)latestDmg.attacker))
{
val = latestDmg.attacker.GetComponent<CharacterBody>();
if (Object.op_Implicit((Object)(object)val))
{
attackerMaster = val.master;
}
}
DeathMessage.DeathAndKillerInventoryMessage(latestDmg.damage, charBody, val, attackerMaster, latestDmg.damageType, latestDmg.damageColorIndex, latestDmg.delayedHit, sendOverNetwork: false);
}
[IteratorStateMachine(typeof(<Delay_DeathMessage>d__8))]
public IEnumerator Delay_DeathMessage()
{
//yield-return decompiler failed: Unexpected instruction in Iterator.Dispose()
return new <Delay_DeathMessage>d__8(0)
{
<>4__this = this
};
}
private void Master_onBodyStart(CharacterBody obj)
{
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
killed = false;
playerBodyObject = ((Component)obj).gameObject;
charBody = obj;
if (obj.isRemoteOp && WConfig.DroneMessage_RemoteOp.Value)
{
DroneChatMessage obj2 = new DroneChatMessage
{
baseToken = "REMOTEOP_DRONE",
_DroneIndex = DroneCatalog.GetDroneIndexFromBodyIndex(obj.bodyIndex)
};
((SubjectChatMessage)obj2).subjectAsNetworkUser = playerMaster.playerCharacterMasterController.networkUser;
Chat.AddMessage((ChatMessageBase)(object)obj2);
}
}
private void OnBodyDeath()
{
((MonoBehaviour)this).StartCoroutine(Delay_DeathMessage());
if (WConfig.cfgTestClient.Value)
{
SendMessage();
killed = false;
}
}
private void onClientDamageNotified(DamageDealtMessage dmg)
{
if ((Object)(object)dmg.victim == (Object)(object)playerBodyObject)
{
latestDmg = dmg;
}
}
}
public class ItemLossBase_ClientListener : MonoBehaviour
{
public static ItemLossBase_ClientListener latest;
public Inventory inventory;
public NetworkUser subjectAsNetworkUser;
public int[] prevItems = ItemCatalog.RequestItemStackArray();
public EquipmentIndex prevEquip = (EquipmentIndex)(-1);
public virtual void OnEnable()
{
if (WQoLMain.HostHasMod)
{
Log.LogMessage("Host has mod, removing Client Workaround : ItemLoss_ClientListener");
Object.Destroy((Object)(object)this);
}
else
{
inventory = ((Component)this).GetComponent<Inventory>();
inventory.onInventoryChanged += Inventory_onInventoryChanged;
}
}
public virtual void OnDisable()
{
if (Object.op_Implicit((Object)(object)inventory))
{
inventory.onInventoryChanged -= Inventory_onInventoryChanged;
}
}
public virtual void Inventory_onInventoryChanged()
{
latest = this;
}
public static void TryMessage()
{
if ((Object)(object)latest != (Object)null)
{
latest.TryMessageInstance();
}
}
public virtual void TryMessageInstance()
{
}
}
public class DevotionItemLoss_ClientListener : ItemLossBase_ClientListener
{
public override void OnEnable()
{
base.OnEnable();
CharacterMaster summonerMaster = ((Component)this).GetComponent<DevotionInventoryController>().SummonerMaster;
if ((Object)(object)summonerMaster == (Object)null)
{
Log.LogWarning("DevotionItemLoss Client Listener null Summoner Master");
}
subjectAsNetworkUser = summonerMaster.playerCharacterMasterController.networkUser;
}
public override void Inventory_onInventoryChanged()
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
base.Inventory_onInventoryChanged();
SingleItemLoss(inventory.permanentItemStacks);
}
public bool SingleItemLoss(ItemCollection now)
{
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
int num = -1;
int pickupQuantity = -1;
for (int i = 0; i < prevItems.Length; i++)
{
if (prevItems[i] > ((ItemCollection)(ref now)).GetStackValue((ItemIndex)i))
{
flag = true;
num = i;
pickupQuantity = prevItems[i] - ((ItemCollection)(ref now)).GetStackValue((ItemIndex)i);
break;
}
}
if (flag)
{
PickupIndex val = PickupCatalog.FindPickupIndex((ItemIndex)num);
PickupDef pickupDef = ((PickupIndex)(ref val)).pickupDef;
Log.LogMessage(pickupDef.internalName);
DevotionDeathMessage devotionDeathMessage = new DevotionDeathMessage();
((SubjectChatMessage)devotionDeathMessage).subjectAsNetworkUser = subjectAsNetworkUser;
((SubjectChatMessage)devotionDeathMessage).baseToken = "DEVOTED_LEMURIAN_DEATH";
((PlayerPickupChatMessage)devotionDeathMessage).pickupToken = pickupDef.nameToken;
((PlayerPickupChatMessage)devotionDeathMessage).pickupColor = Color32.op_Implicit(pickupDef.baseColor);
((PlayerPickupChatMessage)devotionDeathMessage).pickupQuantity = (uint)pickupQuantity;
Chat.AddMessage((ChatMessageBase)(object)devotionDeathMessage);
}
inventory.WriteAllPermanentItemStacks((Span<int>)prevItems);
return flag;
}
}
public class DroneLoss_ClientListener : MonoBehaviour
{
public static NetworkUser lastDroneOwner;
public static GameObject lastDeadDrone;
public static int tier;
public void OnDisable()
{
lastDroneOwner = ((Component)this).GetComponent<MinionOwnership>().ownerMaster.playerCharacterMasterController.networkUser;
lastDeadDrone = ((Component)this).GetComponent<CharacterMaster>().bodyPrefab;
tier = ((Component)this).GetComponent<Inventory>().GetItemCountPermanent(Items.DroneUpgradeHidden);
}
public static void SendMessage()
{
//IL_0052: 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_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
if (!((Object)(object)lastDroneOwner == (Object)null) && !((Object)(object)lastDeadDrone == (Object)null))
{
ItemLossMessage obj = new ItemLossMessage
{
source = ItemLossMessage.Source.DroneScrapper,
baseToken = "ITEM_LOSS_SCRAP",
itemCount = tier,
pickupIndexOnlyOneItem = PickupCatalog.FindPickupIndex(DroneCatalog.GetDroneIndexFromBodyIndex(lastDeadDrone.GetComponent<CharacterBody>().bodyIndex))
};
((SubjectChatMessage)obj).subjectAsNetworkUser = lastDroneOwner;
Chat.AddMessage((ChatMessageBase)(object)obj);
}
}
}
public class PlayerItemLoss_ClientListener : ItemLossBase_ClientListener
{
public static bool forceEquip = false;
public static bool checkEquip = false;
public static bool checkSaleStar = false;
public static string token = "ITEM_LOSS_GENERIC";
public static ItemLossMessage.Source source;
public void Start()
{
subjectAsNetworkUser = ((Component)this).GetComponent<PlayerCharacterMasterController>().networkUser;
}
public override void Inventory_onInventoryChanged()
{
base.Inventory_onInventoryChanged();
if (forceEquip)
{
ItemLossBase_ClientListener.TryMessage();
}
}
public static void TrySaleStar(PurchaseInteraction purchase)
{
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Expected I4, but got Unknown
if (WConfig.cfgMessagesSaleStar.Value && (Object)(object)ItemLossBase_ClientListener.latest != (Object)null)
{
int num = (int)Items.LowerPricedChests.itemIndex;
int num2 = ItemLossBase_ClientListener.latest.prevItems[num];
int itemCountEffective = ItemLossBase_ClientListener.latest.inventory.GetItemCountEffective((ItemIndex)num);
Log.LogMessage("SaleStar " + num2 + " " + itemCountEffective);
if (num2 > 0 && itemCountEffective == 0)
{
ItemLossBase_ClientListener.latest.prevItems[num] = 0;
InteractableMessage obj = new InteractableMessage
{
interactableToken = purchase.displayNameToken
};
((SubjectChatMessage)obj).subjectAsNetworkUser = ItemLossBase_ClientListener.latest.subjectAsNetworkUser;
Chat.AddMessage((ChatMessageBase)(object)obj);
}
}
}
public override void TryMessageInstance()
{
//IL_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Invalid comparison between Unknown and I4
//IL_006d: Unknown result type (might be due to invalid IL or missing references)
//IL_0073: Invalid comparison between Unknown and I4
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Unknown result type (might be due to invalid IL or missing references)
base.TryMessageInstance();
bool flag = false;
if (source == ItemLossMessage.Source.Scrapper)
{
flag = ItemScrapMessage(inventory.permanentItemStacks);
}
else if (!forceEquip)
{
flag = ((!checkEquip || (int)inventory.currentEquipmentIndex != -1) ? ItemMessage(inventory.permanentItemStacks) : EquipmentMessage());
}
else
{
if ((int)prevEquip == -1)
{
prevEquip = inventory.currentEquipmentIndex;
}
flag = EquipmentMessage();
}
if (!flag)
{
}
forceEquip = false;
checkEquip = false;
source = ItemLossMessage.Source.Default;
}
public bool ItemScrapMessage(ItemCollection now)
{
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
if (!WConfig.cfgMessageScrap.Value)
{
return false;
}
bool flag = false;
int num = -1;
int itemCount = -1;
for (int i = 0; i < prevItems.Length; i++)
{
if (prevItems[i] > ((ItemCollection)(ref now)).GetStackValue((ItemIndex)i))
{
flag = true;
num = i;
itemCount = prevItems[i] - ((ItemCollection)(ref now)).GetStackValue((ItemIndex)i);
break;
}
}
if (flag)
{
ItemLossMessage obj = new ItemLossMessage
{
source = ItemLossMessage.Source.Scrapper,
baseToken = "ITEM_LOSS_SCRAP"
};
((SubjectChatMessage)obj).subjectAsNetworkUser = subjectAsNetworkUser;
obj.pickupIndexOnlyOneItem = PickupCatalog.FindPickupIndex((ItemIndex)num);
obj.itemCount = itemCount;
Chat.AddMessage((ChatMessageBase)(object)obj);
}
inventory.WriteAllPermanentItemStacks((Span<int>)prevItems);
return flag;
}
public bool ItemMessage(ItemCollection now)
{
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
int[] array = ItemCatalog.RequestItemStackArray();
int num = 0;
int num2 = -1;
for (int i = 0; i < prevItems.Length; i++)
{
if (prevItems[i] > ((ItemCollection)(ref now)).GetStackValue((ItemIndex)i))
{
num++;
num2 = i;
array[i] = prevItems[i] - ((ItemCollection)(ref now)).GetStackValue((ItemIndex)i);
}
}
if (num == 1)
{
if (token != "ITEM_LOSS_CAULDRON")
{
ItemDef itemDef = ItemCatalog.GetItemDef((ItemIndex)num2);
if (itemDef.ContainsTag((ItemTag)10))
{
token = "ITEM_LOSS_USED";
}
}
ItemLossMessage obj = new ItemLossMessage
{
source = source,
baseToken = token
};
((SubjectChatMessage)obj).subjectAsNetworkUser = subjectAsNetworkUser;
obj.pickupIndexOnlyOneItem = PickupCatalog.FindPickupIndex((ItemIndex)num2);
Chat.AddMessage((ChatMessageBase)(object)obj);
}
else if (num > 0)
{
ItemLossMessage obj2 = new ItemLossMessage
{
baseToken = token
};
((SubjectChatMessage)obj2).subjectAsNetworkUser = subjectAsNetworkUser;
obj2.itemStacks = array;
Chat.AddMessage((ChatMessageBase)(object)obj2);
}
inventory.WriteAllPermanentItemStacks((Span<int>)prevItems);
return num > 0;
}
public bool EquipmentMessage()
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Invalid comparison between Unknown and I4
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Invalid comparison between Unknown and I4
//IL_0019: 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)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
bool result = false;
EquipmentIndex currentEquipmentIndex = inventory.currentEquipmentIndex;
if ((int)currentEquipmentIndex == -1)
{
currentEquipmentIndex = prevEquip;
}
if ((int)currentEquipmentIndex != -1)
{
result = true;
ItemLossMessage obj = new ItemLossMessage
{
baseToken = token,
pickupIndexOnlyOneItem = PickupCatalog.FindPickupIndex(currentEquipmentIndex)
};
((SubjectChatMessage)obj).subjectAsNetworkUser = subjectAsNetworkUser;
Chat.AddMessage((ChatMessageBase)(object)obj);
}
else
{
Log.LogWarning("EquipmentMessage but without Equipment?");
}
prevEquip = inventory.currentEquipmentIndex;
return result;
}
}
public struct AllyDef
{
public ItemTier tier;
public float desiredSortPosition;
public ColorIndex colorOverride;
public Texture bgTextureOverride;
public ExpansionDef requiredExpansion;
}
public static class AllyCatalog
{
[CompilerGenerated]
private static class <>O
{
public static hook_DroneBody <0>__PageBuilder_DroneBody;
}
public static Dictionary<BodyIndex, AllyDef> AllyDefs;
public static void Make()
{
//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)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0159: Unknown result type (might be due to invalid IL or missing references)
//IL_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_018c: Unknown result type (might be due to invalid IL or missing references)
//IL_01a8: Unknown result type (might be due to invalid IL or missing references)
//IL_01bf: Unknown result type (might be due to invalid IL or missing references)
//IL_01db: Unknown result type (might be due to invalid IL or missing references)
//IL_01fe: Unknown result type (might be due to invalid IL or missing references)
//IL_021a: Unknown result type (might be due to invalid IL or missing references)
//IL_0223: Unknown result type (might be due to invalid IL or missing references)
//IL_024b: Unknown result type (might be due to invalid IL or missing references)
//IL_0267: Unknown result type (might be due to invalid IL or missing references)
//IL_0270: Unknown result type (might be due to invalid IL or missing references)
//IL_0298: Unknown result type (might be due to invalid IL or missing references)
//IL_02b5: Unknown result type (might be due to invalid IL or missing references)
//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
//IL_02f5: Unknown result type (might be due to invalid IL or missing references)
//IL_0318: Unknown result type (might be due to invalid IL or missing references)
//IL_0335: Unknown result type (might be due to invalid IL or missing references)
//IL_035e: Unknown result type (might be due to invalid IL or missing references)
//IL_0363: Unknown result type (might be due to invalid IL or missing references)
//IL_0369: Expected O, but got Unknown
Debug.Log((object)"AllyCatalog");
DroneDefs.BackupDrone.colorOverride = (ColorIndex)5;
DroneDefs.DTGunnerDrone.colorOverride = (ColorIndex)12;
DroneDefs.DTHealDrone.colorOverride = (ColorIndex)12;
DroneDefs.DTHaulerDrone.colorOverride = (ColorIndex)12;
bool flag = Chainloader.PluginInfos.ContainsKey("prodzpod.RealerCheatUnlocks");
if (AllyDefs != null)
{
return;
}
AllyDefs = new Dictionary<BodyIndex, AllyDef>();
if (!(!WConfig.Logbook_AllyExpansion.Value || flag))
{
if (Language.currentLanguage.TokenIsRegistered("LOGBOOK_CATEGORY_DRONE_AND_ALLIES"))
{
LanguageAPI.Add("LOGBOOK_CATEGORY_DRONE", Language.GetString("LOGBOOK_CATEGORY_DRONE_AND_ALLIES"));
}
AllyDefs.Add(BodyPrefabs.SquidTurretBody.bodyIndex, new AllyDef
{
desiredSortPosition = 200f,
tier = (ItemTier)1
});
AllyDefs.Add(BodyPrefabs.FriendUnitBody.bodyIndex, new AllyDef
{
desiredSortPosition = 200f,
tier = (ItemTier)2,
requiredExpansion = DLCS.DLC3
});
AllyDefs.Add(BodyPrefabs.BeetleGuardAllyBody.bodyIndex, new AllyDef
{
desiredSortPosition = 1f,
tier = (ItemTier)4
});
AllyDefs.Add(BodyPrefabs.RoboBallRedBuddyBody.bodyIndex, new AllyDef
{
desiredSortPosition = 2f,
tier = (ItemTier)4
});
AllyDefs.Add(BodyPrefabs.RoboBallGreenBuddyBody.bodyIndex, new AllyDef
{
desiredSortPosition = 2f,
tier = (ItemTier)4
});
AllyDefs.Add(BodyPrefabs.MinorConstructOnKillBody.bodyIndex, new AllyDef
{
desiredSortPosition = 3f,
tier = (ItemTier)4,
requiredExpansion = DLCS.DLC1
});
AllyDefs.Add(BodyPrefabs.EngiTurretBody.bodyIndex, new AllyDef
{
desiredSortPosition = 30f,
tier = (ItemTier)6,
colorOverride = (ColorIndex)12,
bgTextureOverride = LegacyResourcesAPI.Load<Texture>("Textures/ItemIcons/BG/texSurvivorBGIcon")
});
AllyDefs.Add(BodyPrefabs.EngiWalkerTurretBody.bodyIndex, new AllyDef
{
desiredSortPosition = 31f,
tier = (ItemTier)6,
colorOverride = (ColorIndex)12,
bgTextureOverride = LegacyResourcesAPI.Load<Texture>("Textures/ItemIcons/BG/texSurvivorBGIcon")
});
AllyDefs.Add(BodyPrefabs.NullifierAllyBody.bodyIndex, new AllyDef
{
desiredSortPosition = 3f,
tier = (ItemTier)9,
requiredExpansion = DLCS.DLC1
});
AllyDefs.Add(BodyPrefabs.VoidJailerAllyBody.bodyIndex, new AllyDef
{
desiredSortPosition = 3f,
tier = (ItemTier)9,
requiredExpansion = DLCS.DLC1
});
AllyDefs.Add(BodyPrefabs.VoidMegaCrabAllyBody.bodyIndex, new AllyDef
{
desiredSortPosition = 3f,
tier = (ItemTier)9,
requiredExpansion = DLCS.DLC1
});
object obj = <>O.<0>__PageBuilder_DroneBody;
if (obj == null)
{
hook_DroneBody val = PageBuilder_DroneBody;
<>O.<0>__PageBuilder_DroneBody = val;
obj = (object)val;
}
PageBuilder.DroneBody += (hook_DroneBody)obj;
}
}
private static void PageBuilder_DroneBody(orig_DroneBody orig, PageBuilder builder)
{
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_001e: Invalid comparison between Unknown and I4
CharacterBody val = (CharacterBody)builder.entry.extraData;
if ((int)DroneCatalog.GetDroneIndexFromBodyIndex(val.bodyIndex) == -1)
{
string text = ((Object)val).name.Replace("Body", "_SKILL_DESCRIPTION").ToUpper();
if (Language.english.TokenIsRegistered(text))
{
builder.AddDescriptionPanel(Language.GetString(text));
}
builder.AddSimpleBody(val);
builder.AddDronePanel(val);
builder.AddBodyLore(val);
}
else
{
orig.Invoke(builder);
}
}
public static bool CanSelectDroneEntry(AllyDef allyDef, Dictionary<ExpansionDef, bool> expansionAvailability)
{
ExpansionDef requiredExpansion = allyDef.requiredExpansion;
return !Object.op_Implicit((Object)(object)requiredExpansion) || !expansionAvailability.ContainsKey(requiredExpansion) || expansionAvailability[requiredExpansion];
}
public static EntryStatus GetAllyStatus(in Entry entry, UserProfile viewerProfile)
{
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
if (viewerProfile == null)
{
return (EntryStatus)3;
}
if (viewerProfile.statSheet.GetStatValueULong(PerBodyStatDef.timesSummoned, ((Object)((Component)(CharacterBody)entry.extraData).gameObject).name) != 0)
{
return (EntryStatus)4;
}
return (EntryStatus)3;
}
public static ItemTier TierFromBodyDroneOrAlly(CharacterBody body)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Invalid comparison between Unknown and I4
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: 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_0024: 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)
//IL_0041: 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_004d: Unknown result type (might be due to invalid IL or missing references)
DroneIndex droneIndexFromBodyIndex = DroneCatalog.GetDroneIndexFromBodyIndex(body.bodyIndex);
if ((int)droneIndexFromBodyIndex != -1)
{
return DroneCatalog.GetDroneDef(droneIndexFromBodyIndex).tier;
}
if (AllyDefs.TryGetValue(body.bodyIndex, out var value))
{
return value.tier;
}
return (ItemTier)0;
}
public static float SortFromBodyDroneOrAlly(CharacterBody body)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Invalid comparison between Unknown and I4
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
DroneIndex droneIndexFromBodyIndex = DroneCatalog.GetDroneIndexFromBodyIndex(body.bodyIndex);
if ((int)droneIndexFromBodyIndex != -1)
{
return DroneCatalog.GetDroneDef(droneIndexFromBodyIndex).desiredSortPosition;
}
if (AllyDefs.TryGetValue(body.bodyIndex, out var value))
{
return value.desiredSortPosition;
}
return 0f;
}
}
public static class Logbook_MoreStats
{
[CompilerGenerated]
private static class <>O
{
public static hook_AddBodyStatsPanel <0>__PageBuilder_AddBodyStatsPanel;
public static hook_AddMonsterPanel <1>__ExtraMonsterStats;
public static hook_AddSurvivorPanel <2>__PageBuilder_AddSurvivorPanel;
public static hook_SurvivorBody <3>__PageBuilder_SurvivorBody;
public static hook_AddStagePanel <4>__PageBuilder_AddStagePanel1;
}
public static void MoreStats()
{
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Expected O, but got Unknown
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0043: Expected O, but got Unknown
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_0064: Expected O, but got Unknown
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_0085: Expected O, but got Unknown
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Expected O, but got Unknown
Logbook_AddRecipes.Add();
object obj = <>O.<0>__PageBuilder_AddBodyStatsPanel;
if (obj == null)
{
hook_AddBodyStatsPanel val = PageBuilder_AddBodyStatsPanel;
<>O.<0>__PageBuilder_AddBodyStatsPanel = val;
obj = (object)val;
}
PageBuilder.AddBodyStatsPanel += (hook_AddBodyStatsPanel)obj;
object obj2 = <>O.<1>__ExtraMonsterStats;
if (obj2 == null)
{
hook_AddMonsterPanel val2 = ExtraMonsterStats;
<>O.<1>__ExtraMonsterStats = val2;
obj2 = (object)val2;
}
PageBuilder.AddMonsterPanel += (hook_AddMonsterPanel)obj2;
object obj3 = <>O.<2>__PageBuilder_AddSurvivorPanel;
if (obj3 == null)
{
hook_AddSurvivorPanel val3 = PageBuilder_AddSurvivorPanel;
<>O.<2>__PageBuilder_AddSurvivorPanel = val3;
obj3 = (object)val3;
}
PageBuilder.AddSurvivorPanel += (hook_AddSurvivorPanel)obj3;
object obj4 = <>O.<3>__PageBuilder_SurvivorBody;
if (obj4 == null)
{
hook_SurvivorBody val4 = PageBuilder_SurvivorBody;
<>O.<3>__PageBuilder_SurvivorBody = val4;
obj4 = (object)val4;
}
PageBuilder.SurvivorBody += (hook_SurvivorBody)obj4;
object obj5 = <>O.<4>__PageBuilder_AddStagePanel1;
if (obj5 == null)
{
hook_AddStagePanel val5 = PageBuilder_AddStagePanel1;
<>O.<4>__PageBuilder_AddStagePanel1 = val5;
obj5 = (object)val5;
}
PageBuilder.AddStagePanel += (hook_AddStagePanel)obj5;
}
private static void PageBuilder_AddStagePanel1(orig_AddStagePanel orig, PageBuilder self, SceneDef sceneDef)
{
string @string = Language.GetString(sceneDef.subtitleToken);
if (@string.Length != 0)
{
self.AddSimpleTextPanel(" <color=#D5EBF2><sprite name=\"CloudLeft\" tint=1> " + @string + " <sprite name=\"CloudRight\" tint=1></color>");
}
orig.Invoke(self, sceneDef);
}
private static void PageBuilder_SurvivorBody(orig_SurvivorBody orig, PageBuilder builder)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Expected O, but got Unknown
//IL_0020: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(builder);
CharacterBody val = (CharacterBody)builder.entry.extraData;
SurvivorDef survivorDef = SurvivorCatalog.GetSurvivorDef(SurvivorCatalog.bodyIndexToSurvivorIndex[val.bodyIndex]);
string text = string.Empty;
bool flag = false;
if (!string.IsNullOrEmpty(survivorDef.outroFlavorToken))
{
flag = true;
text = text + Language.GetString(survivorDef.outroFlavorToken) + "\n";
}
if (!string.IsNullOrEmpty(survivorDef.mainEndingEscapeFailureFlavorToken))
{
flag = true;
text = text + Language.GetString(survivorDef.mainEndingEscapeFailureFlavorToken) + "\n";
}
if (flag)
{
builder.AddSimpleTextPanel(text);
}
}
private static void PageBuilder_AddStagePanel(orig_AddStagePanel orig, PageBuilder self, SceneDef sceneDef)
{
orig.Invoke(self, sceneDef);
TextMeshProUGUI component = ((Component)self.managedObjects.Last().GetComponent<ChildLocator>().FindChild("MainLabel")).GetComponent<TextMeshProUGUI>();
}
private static void PageBuilder_AddSimplePickup(orig_AddSimplePickup orig, PageBuilder self, PickupIndex pickupIndex)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, pickupIndex);
TextMeshProUGUI component = ((Component)self.managedObjects[self.managedObjects.Count - 2].GetComponent<ChildLocator>().FindChild("MainLabel")).GetComponent<TextMeshProUGUI>();
}
public static string TimeHHMMSSDisplayValueFormatter(double time2)
{
ulong num = (ulong)time2;
ulong num2 = num / 3600;
ulong num3 = (num - num2 * 3600) / 60;
ulong num4 = num - num2 * 3600 - num3 * 60;
return $"{num2:00}:{num3:00}:{num4:00}";
}
private static void PageBuilder_AddSurvivorPanel(orig_AddSurvivorPanel orig, PageBuilder self, CharacterBody bodyPrefabComponent)
{
orig.Invoke(self, bodyPrefabComponent);
string text = TimeHHMMSSDisplayValueFormatter(self.statSheet.GetStatValueDouble(PerBodyStatDef.totalTimeAlive, ((Object)((Component)bodyPrefabComponent).gameObject).name));
TextMeshProUGUI component = ((Component)self.managedObjects.Last().GetComponent<ChildLocator>().FindChild("MainLabel")).GetComponent<TextMeshProUGUI>();
string empty = string.Empty;
string name = ((Object)((Component)bodyPrefabComponent).gameObject).name;
empty += StatMethod(PerBodyStatDef.totalWins, name, self.statSheet);
empty = empty + Language.GetString("PERBODYSTATNAME_TOTALTIMEALIVE") + ": <style=cEvent>" + text + "</style>\n";
empty += ((TMP_Text)component).text;
empty += StatMethod(PerBodyStatDef.killsAs, name, self.statSheet);
empty += StatMethod(PerBodyStatDef.damageDealtAs, name, self.statSheet);
empty += StatMethod(PerBodyStatDef.damageTakenAs, name, self.statSheet);
empty += StatMethod(PerBodyStatDef.deathsAs, name, self.statSheet);
((TMP_Text)component).text = empty;
}
public static string StatMethod(PerBodyStatDef statDef, string bodyName, StatSheet self)
{
return Language.GetString(statDef.nameToken) + ": <style=cEvent>" + TextSerialization.ToStringNumeric(self.GetStatValueULong(statDef, bodyName)) + "</style>\n";
}
private static void ExtraMonsterStats(orig_AddMonsterPanel orig, PageBuilder self, CharacterBody bodyPrefabComponent)
{
orig.Invoke(self, bodyPrefabComponent);
string name = ((Object)((Component)bodyPrefabComponent).gameObject).name;
TextMeshProUGUI component = ((Component)self.managedObjects.Last().GetComponent<ChildLocator>().FindChild("MainLabel")).GetComponent<TextMeshProUGUI>();
string empty = string.Empty;
empty += StatMethod(PerBodyStatDef.damageDealtTo, name, self.statSheet);
empty += ((TMP_Text)component).text;
empty += "\n";
empty += StatMethod(PerBodyStatDef.damageTakenFrom, name, self.statSheet);
((TMP_Text)component).text = empty;
}
private static void PageBuilder_AddBodyStatsPanel(orig_AddBodyStatsPanel orig, PageBuilder self, CharacterBody bodyPrefabComponent)
{
if (self.managedObjects.Count == 0 && bodyPrefabComponent.subtitleNameToken.Length != 0)
{
self.AddSimpleTextPanel(" <color=#D5EBF2><sprite name=\"CloudLeft\" tint=1> " + Language.GetString(bodyPrefabComponent.subtitleNameToken) + " <sprite name=\"CloudRight\" tint=1></style>");
}
orig.Invoke(self, bodyPrefabComponent);
}
}
public static class LogbookStuff
{
[CompilerGenerated]
private static class <>O
{
public static hook_BuildMonsterEntries <0>__AddMissingMonsters;
public static hook_BuildMonsterEntries <1>__SortBossMonster;
public static hook_BuildPickupEntries <2>__AddMissingEquipment;
public static Manipulator <3>__SortBossEquip2;
public static hook_BuildSurvivorEntries <4>__SurvivorEntryColor;
public static hook_GetPickupStatus <5>__EliteEquipmentViewable;
public static Action <6>__Add;
}
public static void Start()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Expected O, but got Unknown
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Expected O, but got Unknown
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Expected O, but got Unknown
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Expected O, but got Unknown
//IL_00b6: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Expected O, but got Unknown
//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
//IL_01ce: Unknown result type (might be due to invalid IL or missing references)
//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
object obj = <>O.<0>__AddMissingMonsters;
if (obj == null)
{
hook_BuildMonsterEntries val = AddMissingMonsters;
<>O.<0>__AddMissingMonsters = val;
obj = (object)val;
}
LogBookController.BuildMonsterEntries += (hook_BuildMonsterEntries)obj;
object obj2 = <>O.<1>__SortBossMonster;
if (obj2 == null)
{
hook_BuildMonsterEntries val2 = SortBossMonster;
<>O.<1>__SortBossMonster = val2;
obj2 = (object)val2;
}
LogBookController.BuildMonsterEntries += (hook_BuildMonsterEntries)obj2;
object obj3 = <>O.<2>__AddMissingEquipment;
if (obj3 == null)
{
hook_BuildPickupEntries val3 = AddMissingEquipment;
<>O.<2>__AddMissingEquipment = val3;
obj3 = (object)val3;
}
LogBookController.BuildPickupEntries += (hook_BuildPickupEntries)obj3;
object obj4 = <>O.<3>__SortBossEquip2;
if (obj4 == null)
{
Manipulator val4 = SortBossEquip2;
<>O.<3>__SortBossEquip2 = val4;
obj4 = (object)val4;
}
LogBookController.BuildPickupEntries += (Manipulator)obj4;
object obj5 = <>O.<4>__SurvivorEntryColor;
if (obj5 == null)
{
hook_BuildSurvivorEntries val5 = SurvivorEntryColor;
<>O.<4>__SurvivorEntryColor = val5;
obj5 = (object)val5;
}
LogBookController.BuildSurvivorEntries += (hook_BuildSurvivorEntries)obj5;
object obj6 = <>O.<5>__EliteEquipmentViewable;
if (obj6 == null)
{
hook_GetPickupStatus val6 = EliteEquipmentViewable;
<>O.<5>__EliteEquipmentViewable = val6;
obj6 = (object)val6;
}
LogBookController.GetPickupStatus += (hook_GetPickupStatus)obj6;
Logbook_Allies.MoreStats();
Logbook_MoreStats.MoreStats();
((ResourceAvailability)(ref SceneCatalog.availability)).CallWhenAvailable((Action)LogSimuStages.Add);
Addressables.LoadAssetAsync<SceneDef>((object)"RoR2/DLC2/meridian/meridian.asset").WaitForCompletion().stageOrder = 80;
LegacyResourcesAPI.Load<SceneDef>("SceneDefs/goldshores").stageOrder = 81;
LegacyResourcesAPI.Load<SceneDef>("SceneDefs/bazaar").stageOrder = 90;
LegacyResourcesAPI.Load<SceneDef>("SceneDefs/arena").stageOrder = 91;
LegacyResourcesAPI.Load<SceneDef>("SceneDefs/voidstage").stageOrder = 92;
Addressables.LoadAssetAsync<SceneDef>((object)"RoR2/DLC1/voidraid/voidraid.asset").WaitForCompletion().stageOrder = 93;
LegacyResourcesAPI.Load<SceneDef>("SceneDefs/mysteryspace").stageOrder = 150;
LegacyResourcesAPI.Load<SceneDef>("SceneDefs/limbo").stageOrder = 151;
Addressables.LoadAssetAsync<SceneDef>((object)"808fe615086cfa042baf950436b1da20").WaitForCompletion().stageOrder = 95;
Addressables.LoadAssetAsync<SceneDef>((object)"55dcf3dbd137f99458af33ad467bb574").WaitForCompletion().stageOrder = 96;
Addressables.LoadAssetAsync<SceneDef>((object)"5272c5e76a99aa046b72ad8fb941974c").WaitForCompletion().stageOrder = 97;
}
private static void SortBossEquip2(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchStloc(x, 1)
}))
{
val.EmitDelegate<Func<IEnumerable<Entry>, IEnumerable<Entry>>>((Func<IEnumerable<Entry>, IEnumerable<Entry>>)((IEnumerable<Entry> entries) => entries.OrderBy((Entry entry) => EquipmentCatalog.GetEquipmentDef(PickupCatalog.GetPickupDef((PickupIndex)entry.extraData).equipmentIndex).isBoss)));
}
else
{
Log.LogWarning("IL Failed: SortBossEquip2");
}
}
private static EntryStatus EliteEquipmentViewable(orig_GetPickupStatus orig, ref Entry entry, UserProfile viewerProfile)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000c: Invalid comparison between Unknown and I4
//IL_0024: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0171: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Invalid comparison between Unknown and I4
//IL_016c: Unknown result type (might be due to invalid IL or missing references)
//IL_016d: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Unknown result type (might be due to invalid IL or missing references)
//IL_007f: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: Invalid comparison between Unknown and I4
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_0161: Unknown result type (might be due to invalid IL or missing references)
EntryStatus val = orig.Invoke(ref entry, viewerProfile);
if ((int)val == 4)
{
return val;
}
PickupIndex val2 = (PickupIndex)entry.extraData;
PickupDef pickupDef = PickupCatalog.GetPickupDef(val2);
EquipmentIndex val3 = (EquipmentIndex)((pickupDef == null) ? (-1) : ((int)pickupDef.equipmentIndex));
if ((int)val3 != -1)
{
EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(val3);
if (Object.op_Implicit((Object)(object)equipmentDef.passiveBuffDef) && equipmentDef.passiveBuffDef.isElite)
{
if (viewerProfile.HasDiscoveredPickup(val2))
{
return (EntryStatus)4;
}
bool flag = false;
if ((Object)(object)equipmentDef == (Object)(object)Equipment.AffixLunar)
{
flag = viewerProfile.HasUnlockable(Items.LunarBadLuck.unlockableDef);
}
else if ((Object)(object)equipmentDef == (Object)(object)Equipment.EliteVoidEquipment)
{
flag = viewerProfile.HasAchievement("Characters.VoidSurvivor");
}
else if ((Object)(object)equipmentDef == (Object)(object)Equipment.EliteAurelioniteEquipment)
{
flag = viewerProfile.HasUnlockable(Equipment.HealAndRevive.unlockableDef);
}
else
{
EliteDef eliteDef = equipmentDef.passiveBuffDef.eliteDef;
flag = (((int)eliteDef.devotionLevel != 2) ? viewerProfile.HasUnlockable(Survivors.Captain.unlockableDef) : viewerProfile.HasUnlockable(Items.Clover.unlockableDef));
}
if (flag)
{
return (EntryStatus)4;
}
return (EntryStatus)3;
}
}
return val;
}
private static Entry[] SortBossMonster(orig_BuildMonsterEntries orig, Dictionary<ExpansionDef, bool> expansionAvailability)
{
if (!WConfig.Logbook_SortBosses.Value)
{
return orig.Invoke(expansionAvailability);
}
Entry[] array = orig.Invoke(expansionAvailability);
List<Entry> list = new List<Entry>();
List<Entry> list2 = new List<Entry>();
for (int i = 0; i < array.Length; i++)
{
object extraData = array[i].extraData;
if (((CharacterBody)((extraData is CharacterBody) ? extraData : null)).isChampion)
{
list2.Add(array[i]);
}
else
{
list.Add(array[i]);
}
}
list.AddRange(list2);
return list.ToArray();
}
public static Entry[] AddMissingMonsters(orig_BuildMonsterEntries orig, Dictionary<ExpansionDef, bool> expansionAvailability)
{
if (WConfig.Logbook_More.Value)
{
UnlockableDef logUnlockableDef = ((Component)BodyPrefabs.GupBody).GetComponent<DeathRewards>().logUnlockableDef;
((Component)BodyPrefabs.GeepBody).GetComponent<DeathRewards>().logUnlockableDef = logUnlockableDef;
((Component)BodyPrefabs.GipBody).GetComponent<DeathRewards>().logUnlockableDef = logUnlockableDef;
UnlockableDef logUnlockableDef2 = ((Component)BodyPrefabs.MinePodBody).GetComponent<DeathRewards>().logUnlockableDef;
((Component)BodyPrefabs.SolusMineBody).GetComponent<DeathRewards>().logUnlockableDef = logUnlockableDef2;
BodyPrefabs.ScavLunar1Body.baseNameToken = "SCAVLUNAR_BODY_SUBTITLE";
((Component)BodyPrefabs.ScavLunar1Body).GetComponent<DeathRewards>().logUnlockableDef = LegacyResourcesAPI.Load<UnlockableDef>("UnlockableDefs/Logs.Stages.limbo");
}
if (WConfig.Logbook_WeirdoEnemies.Value)
{
UnlockableDef logUnlockableDef3 = ((Component)BodyPrefabs.SolusAmalgamatorBody).GetComponent<DeathRewards>().logUnlockableDef;
((Component)BodyPrefabs.SolusAmalgamatorFlamethrowerCannonBody).GetComponent<DeathRewards>().logUnlockableDef = logUnlockableDef3;
((Component)BodyPrefabs.SolusAmalgamatorMissilePodBody).GetComponent<DeathRewards>().logUnlockableDef = logUnlockableDef3;
((Component)BodyPrefabs.SolusAmalgamatorThrusterBody).GetComponent<DeathRewards>().logUnlockableDef = logUnlockableDef3;
UnlockableDef logUnlockableDef4 = LegacyResourcesAPI.Load<UnlockableDef>("unlockabledefs/Items.Clover");
UnityObjectExtensions.EnsureComponent<DeathRewards>(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/UrchinTurretBody")).logUnlockableDef = logUnlockableDef4;
}
Entry[] result = orig.Invoke(expansionAvailability);
BodyPrefabs.ScavLunar1Body.baseNameToken = "SCAVLUNAR1_BODY_NAME";
return result;
}
public static Entry[] AddMissingEquipment(orig_BuildPickupEntries orig, Dictionary<ExpansionDef, bool> expansionAvailability)
{
Equipment.EliteGoldEquipment.dropOnDeathChance = 0f;
List<EquipmentDef> list = new List<EquipmentDef>();
if (!WQoLMain.ZetAspects && WConfig.Logbook_EliteEquip.Value)
{
for (int i = 0; i < EliteCatalog.eliteDefs.Length; i++)
{
EquipmentDef eliteEquipmentDef = EliteCatalog.eliteDefs[i].eliteEquipmentDef;
if (Object.op_Implicit((Object)(object)eliteEquipmentDef) && eliteEquipmentDef.dropOnDeathChance != 0f)
{
list.Add(eliteEquipmentDef);
}
}
}
if (WConfig.Logbook_More.Value)
{
list.Add(Equipment.QuestVolatileBattery);
list.Add(Equipment.BossHunterConsumed);
list.Add(Equipment.HealAndReviveConsumed);
}
for (int j = 0; j < list.Count; j++)
{
list[j].canDrop = true;
}
Entry[] result = orig.Invoke(expansionAvailability);
for (int k = 0; k < list.Count; k++)
{
list[k].canDrop = false;
}
return result;
}
public static Entry[] SurvivorEntryColor(orig_BuildSurvivorEntries orig, Dictionary<ExpansionDef, bool> expansionAvailability)
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
Entry[] array = orig.Invoke(expansionAvailability);
for (int i = 0; i < array.Length; i++)
{
array[i].color = ColorModule.NewSurvivorLogbookNameColor;
}
return array;
}
}
public static class Logbook_AddRecipes
{
[CompilerGenerated]
private static class <>O
{
public static hook_AddSimplePickup <0>__AddRecipe;
public static hook_PopulateRecipes <1>__RemoveUnneededCycleImages;
public static hook_PopulateImages <2>__RemoveDuplicateRecipes;
public static hook_PopulateImages <3>__RecipeStrip_PopulateImages;
public static hook_SetEntry <4>__LogBookPage_SetEntry;
}
public static void Add()
{
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Expected O, but got Unknown
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Expected O, but got Unknown
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Expected O, but got Unknown
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_008b: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Expected O, but got Unknown
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Expected O, but got Unknown
if (WConfig.Logbook_Recipes.Value)
{
object obj = <>O.<0>__AddRecipe;
if (obj == null)
{
hook_AddSimplePickup val = AddRecipe;
<>O.<0>__AddRecipe = val;
obj = (object)val;
}
PageBuilder.AddSimplePickup += (hook_AddSimplePickup)obj;
object obj2 = <>O.<1>__RemoveUnneededCycleImages;
if (obj2 == null)
{
hook_PopulateRecipes val2 = RemoveUnneededCycleImages;
<>O.<1>__RemoveUnneededCycleImages = val2;
obj2 = (object)val2;
}
RecipeInfoContainer.PopulateRecipes += (hook_PopulateRecipes)obj2;
object obj3 = <>O.<2>__RemoveDuplicateRecipes;
if (obj3 == null)
{
hook_PopulateImages val3 = RemoveDuplicateRecipes;
<>O.<2>__RemoveDuplicateRecipes = val3;
obj3 = (object)val3;
}
RecipeDisplay.PopulateImages += (hook_PopulateImages)obj3;
object obj4 = <>O.<3>__RecipeStrip_PopulateImages;
if (obj4 == null)
{
hook_PopulateImages val4 = RecipeStrip_PopulateImages;
<>O.<3>__RecipeStrip_PopulateImages = val4;
obj4 = (object)val4;
}
RecipeStrip.PopulateImages += (hook_PopulateImages)obj4;
GameObject val5 = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/UI/RecipeDisplayUpdated.prefab").WaitForCompletion();
((Transform)val5.GetComponentInChildren<RecipeDisplay>().recipeStripPrefab).GetChild(1).GetChild(0).localPosition = new Vector3(-20f, 0f, 0f);
CyclingImage[] componentsInChildren = val5.GetComponentsInChildren<CyclingImage>();
foreach (CyclingImage val6 in componentsInChildren)
{
val6.beatBetweenSwaps = 0.8f;
}
object obj5 = <>O.<4>__LogBookPage_SetEntry;
if (obj5 == null)
{
hook_SetEntry val7 = LogBookPage_SetEntry;
<>O.<4>__LogBookPage_SetEntry = val7;
obj5 = (object)val7;
}
LogBookPage.SetEntry += (hook_SetEntry)obj5;
}
}
private static void LogBookPage_SetEntry(orig_SetEntry orig, LogBookPage self, UserProfile userProfile, Entry entry)
{
orig.Invoke(self, userProfile, entry);
((Component)((Transform)self.pageBuilder.container).parent.parent.GetChild(1)).gameObject.SetActive(true);
((Component)((Transform)self.pageBuilder.container).parent.parent.parent).GetComponent<LayoutGroup>().SetDirty();
}
public static void RecipeStrip_PopulateNew(RecipeStrip self, PickupIndex itemRecipesFor, bool usedIn)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_014e: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
//IL_01b7: Unknown result type (might be due to invalid IL or missing references)
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
//IL_01dc: Unknown result type (might be due to invalid IL or missing references)
PickupIndex value = self.recipe.possibleIngredients[0].pickups[0];
bool flag = ((ReadOnlySpan<PickupIndex>)self.recipe.possibleIngredients[0].pickups).IndexOf<PickupIndex>(value) != -1;
bool flag2 = ((ReadOnlySpan<PickupIndex>)self.recipe.possibleIngredients[1].pickups).IndexOf<PickupIndex>(value) != -1;
bool flag3 = false;
for (int i = 0; i < self.recipe.possibleIngredients.Length; i++)
{
RectTransform val = Object.Instantiate<RectTransform>(self.imagePrefab);
((Component)val).gameObject.SetActive(true);
((Transform)val).parent = (Transform)(object)self.ingredientContainer;
List<PickupIndex> list = new List<PickupIndex>();
PickupIndex[] pickups = self.recipe.possibleIngredients[i].pickups;
foreach (PickupIndex val2 in pickups)
{
if (PickupAvailable(val2))
{
list.Add(val2);
}
}
flag3 = flag3 || list.Count == 0;
((Component)val).GetComponent<CyclingImage>().SetSpritesFromPickupIndices(list.ToArray());
}
if (!((Object)(object)self.resultIcon != (Object)null))
{
return;
}
PickupDef pickupDef = PickupCatalog.GetPickupDef(self.recipe.result);
if (pickupDef != null)
{
self.resultIcon.sprite = pickupDef.iconSprite;
}
if ((Object)(object)self.resultBackground != (Object)null)
{
Image[] componentsInChildren = ((Component)self.resultBackground).GetComponentsInChildren<Image>();
Color darkColor = pickupDef.darkColor;
Image[] array = componentsInChildren;
foreach (Image val3 in array)
{
float a = ((Graphic)val3).color.a;
((Graphic)val3).color = new Color(darkColor.r, darkColor.g, darkColor.b, a);
}
}
}
private static void RecipeStrip_PopulateImages(orig_PopulateImages orig, RecipeStrip self)
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Expected O, but got Unknown
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
if (((Component)self).transform.GetChild(0).childCount == 2 && self.recipe != null && self.recipe.possibleIngredients != null)
{
orig.Invoke(self);
if (self.recipe.amountToDrop > 1)
{
GameObject val = new GameObject("Quantity");
((TMP_Text)val.AddComponent<HGTextMeshProUGUI>()).text = self.recipe.amountToDrop + "x";
((TMP_Text)val.GetComponent<HGTextMeshProUGUI>()).fontSize = 30f;
val.transform.SetParent(((Component)self.resultIcon).transform, false);
val.transform.localPosition = new Vector3(24f, -8f, 0f);
}
}
}
private static void RemoveUnneededCycleImages(orig_PopulateRecipes orig, RecipeInfoContainer self, PickupIndex pickupIndex)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, pickupIndex);
try
{
Fixture((Transform)(object)self.createdFromDisplay.container, pickupIndex, 1);
Fixture((Transform)(object)self.usedToMakeDisplay.container, pickupIndex, 0);
}
catch (Exception ex)
{
Debug.LogError((object)ex);
}
}
public static void Fixture(Transform recipeHolder, PickupIndex pickup, int start)
{
//IL_001c: 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_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
for (int i = start; i < recipeHolder.childCount; i++)
{
RecipeStrip component = ((Component)recipeHolder.GetChild(i)).GetComponent<RecipeStrip>();
if (!component.recipe.IsUsedInMultipleSlots(pickup))
{
if (component.recipe.possibleIngredients[1].pickups.Length != 1 && ((ReadOnlySpan<PickupIndex>)component.recipe.possibleIngredients[1].pickups).IndexOf<PickupIndex>(pickup) != -1)
{
((Component)((Component)component).transform.GetChild(0).GetChild(3)).GetComponent<CyclingImage>().SetSprites((Sprite[])(object)new Sprite[1] { PickupCatalog.GetPickupDef(pickup).iconSprite });
}
else if (component.recipe.possibleIngredients[0].pickups.Length != 1 && ((ReadOnlySpan<PickupIndex>)component.recipe.possibleIngredients[0].pickups).IndexOf<PickupIndex>(pickup) != -1)
{
((Component)((Component)component).transform.GetChild(0).GetChild(2)).GetComponent<CyclingImage>().SetSprites((Sprite[])(object)new Sprite[1] { PickupCatalog.GetPickupDef(pickup).iconSprite });
}
}
}
}
internal static bool PickupAvailable(PickupIndex index)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Invalid comparison between Unknown and I4
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: Invalid comparison between Unknown and I4
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Unknown result type (might be due to invalid IL or missing references)
PickupDef pickupDef = PickupCatalog.GetPickupDef(index);
if ((int)pickupDef.itemIndex != -1)
{
ItemDef itemDef = ItemCatalog.GetItemDef(pickupDef.itemIndex);
if ((Object)(object)itemDef != (Object)null)
{
ExpansionDef requiredExpansion = itemDef.requiredExpansion;
if ((Object)(object)requiredExpansion != (Object)null)
{
return ((BaseUserEntitlementTracker<LocalUser>)(object)EntitlementManager.localUserEntitlementTracker).AnyUserHasEntitlement(requiredExpansion.requiredEntitlement);
}
}
}
else if ((int)pickupDef.equipmentIndex != -1)
{
EquipmentDef equipmentDef = EquipmentCatalog.GetEquipmentDef(pickupDef.equipmentIndex);
if ((Object)(object)equipmentDef != (Object)null)
{
ExpansionDef requiredExpansion2 = equipmentDef.requiredExpansion;
if ((Object)(object)requiredExpansion2 != (Object)null)
{
return ((BaseUserEntitlementTracker<LocalUser>)(object)EntitlementManager.localUserEntitlementTracker).AnyUserHasEntitlement(requiredExpansion2.requiredEntitlement);
}
}
}
return true;
}
private static void RemoveDuplicateRecipes(orig_PopulateImages orig, RecipeDisplay self, List<RecipeEntry> newRecipeEntries)
{
//IL_003f: 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_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
bool flag = ((Object)self).name.StartsWith("U");
flag = false;
List<RecipeEntry> list = newRecipeEntries.Distinct().ToList();
List<RecipeEntry> list2 = new List<RecipeEntry>();
foreach (RecipeEntry item in list)
{
if (PickupAvailable(item.result) && (!flag || item.Required(item.result) == 0) && (item.possibleIngredients[0].pickups.Length != 1 || PickupAvailable(item.possibleIngredients[0].pickups[0])) && (item.possibleIngredients[1].pickups.Length != 1 || PickupAvailable(item.possibleIngredients[1].pickups[0])))
{
list2.Add(item);
}
}
if (list2.Count > 1)
{
list2.Sort((RecipeEntry x, RecipeEntry y) => x.RecipeComparer(in y));
}
orig.Invoke(self, list2);
if (Object.op_Implicit((Object)(object)self.container))
{
for (int i = 0; i < ((Transform)self.container).childCount; i++)
{
((Component)((Transform)self.container).GetChild(i)).GetComponent<RecipeStrip>().PopulateImages();
}
}
}
private static void AddRecipe(orig_AddSimplePickup orig, PageBuilder self, PickupIndex pickupIndex)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: 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)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, pickupIndex);
GameObject val = self.AddPrefabInstance(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/DLC3/UI/RecipeDisplayUpdated.prefab").WaitForCompletion());
val.GetComponent<RecipeInfoContainer>().PopulateRecipes(pickupIndex);
((Graphic)val.GetComponent<Image>()).color = new Color(0.3255f, 0.4039f, 0.4706f, 0.8706f);
val.GetComponent<Image>().sprite = Addressables.LoadAssetAsync<Sprite>((object)"03f90788916529e459ba4d7f40bb32ee").WaitForCompletion();
val.SetActive(CraftableCatalog.resultToRecipeSearchTable.ContainsKey(pickupIndex) || CraftableCatalog.pickupToIngredientSearchTable.ContainsKey(pickupIndex));
}
public static int RecipeComparer(this RecipeEntry first, in RecipeEntry other)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_001d: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_00b0: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0094: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_00fd: Unknown result type (might be due to invalid IL or missing references)
//IL_011d: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Invalid comparison between Unknown and I4
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_012c: Invalid comparison between Unknown and I4
//IL_018a: Unknown result type (might be due to invalid IL or missing references)
//IL_0190: Invalid comparison between Unknown and I4
//IL_013c: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_0199: Invalid comparison between Unknown and I4
//IL_0200: Unknown result type (might be due to invalid IL or missing references)
//IL_0206: Unknown result type (might be due to invalid IL or missing references)
//IL_021d: Unknown result type (might be due to invalid IL or missing references)
//IL_0223: Unknown result type (might be due to invalid IL or missing references)
PickupDef val = null;
PickupDef val2 = null;
if (first.result != other.result)
{
val = PickupCatalog.GetPickupDef(first.result);
val2 = PickupCatalog.GetPickupDef(other.result);
}
else if (first.possibleIngredients[0].pickups[0] != other.possibleIngredients[0].pickups[0])
{
val = PickupCatalog.GetPickupDef(first.possibleIngredients[0].pickups[0]);
val2 = PickupCatalog.GetPickupDef(other.possibleIngredients[0].pickups[0]);
}
else if (first.possibleIngredients[1].pickups[0] != other.possibleIngredients[1].pickups[0])
{
val = PickupCatalog.GetPickupDef(first.possibleIngredients[1].pickups[0]);
val2 = PickupCatalog.GetPickupDef(other.possibleIngredients[1].pickups[0]);
}
if (val == null)
{
return 0;
}
if ((int)val.itemIndex != -1 && (int)val2.itemIndex != -1)
{
int num = TierToSorting(val2.itemTier).CompareTo(TierToSorting(val.itemTier));
if (num == 0)
{
return val.internalName.CompareTo(val2.internalName);
}
return num;
}
if ((int)val.equipmentIndex != -1 && (int)val2.equipmentIndex != -1)
{
if (val.isBoss && !val2.isBoss)
{
return -1;
}
if (val.isLunar && !val2.isLunar)
{
return -1;
}
return val.internalName.CompareTo(val2.internalName);
}
if (val.pickupIndex < val2.pickupIndex)
{
return -1;
}
if (val.pickupIndex > val2.pickupIndex)
{
return 1;
}
return 0;
}
public static int TierToSorting(ItemTier itemTier)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Expected I4, but got Unknown
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Expected I4, but got Unknown
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Expected I4, but got Unknown
switch (itemTier - 6)
{
case 0:
case 1:
case 2:
return itemTier - 6;
case 3:
return 4;
case 4:
return 10000;
default:
return (int)itemTier;
}
}
}
public class Logbook_AllyStatsMult : MonoBehaviour
{
public float healthMult = 1f;
public float damageMult = 1f;
public int healthDecay;
}
public class Logbook_Allies
{
[CompilerGenerated]
private static class <>O
{
public static hook_AddBodyStatsPanel <0>__PageBuilder_AddBodyStatsPanel1;
public static hook_BuildDroneEntries <1>__LogBookController_BuildDroneEntries;
public static hook_AddDronePanel <2>__PageBuilder_AddDronePanel;
public static Manipulator <3>__FixNegativeRegenStatNotShowingInLog;
public static Manipulator <4>__AddOperatorCommand;
public static Action <5>__Make;
public static Action <6>__SetDroneIcon;
}
public static void MoreStats()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Expected O, but got Unknown
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Expected O, but got Unknown
//IL_00ff: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Unknown result type (might be due to invalid IL or missing references)
//IL_010a: Expected O, but got Unknown
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: Expected O, but got Unknown
//IL_0141: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_014c: Expected O, but got Unknown
Logbook_AllyStatsMult logbook_AllyStatsMult = null;
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"5290eaf612d386740ac26f289e06b62f").WaitForCompletion();
logbook_AllyStatsMult = val.AddComponent<Logbook_AllyStatsMult>();
logbook_AllyStatsMult.healthDecay = 30;
GameObject val2 = Addressables.LoadAssetAsync<GameObject>((object)"e21e3b9cdc2802148986eda1c923c9a1").WaitForCompletion();
logbook_AllyStatsMult = val2.AddComponent<Logbook_AllyStatsMult>();
logbook_AllyStatsMult.healthMult = 2f;
logbook_AllyStatsMult.damageMult = 4f;
GameObject val3 = Addressables.LoadAssetAsync<GameObject>((object)"bf5b53aa9306bce4b910220a43b30062").WaitForCompletion();
logbook_AllyStatsMult = val3.AddComponent<Logbook_AllyStatsMult>();
logbook_AllyStatsMult.healthMult = 4f;
logbook_AllyStatsMult.damageMult = 4f;
GameObject val4 = Addressables.LoadAssetAsync<GameObject>((object)"1553966a1aafdb743bf87ff4d6602c22").WaitForCompletion();
logbook_AllyStatsMult = val4.AddComponent<Logbook_AllyStatsMult>();
logbook_AllyStatsMult.healthDecay = 30;
object obj = <>O.<0>__PageBuilder_AddBodyStatsPanel1;
if (obj == null)
{
hook_AddBodyStatsPanel val5 = PageBuilder_AddBodyStatsPanel1;
<>O.<0>__PageBuilder_AddBodyStatsPanel1 = val5;
obj = (object)val5;
}
PageBuilder.AddBodyStatsPanel += (hook_AddBodyStatsPanel)obj;
object obj2 = <>O.<1>__LogBookController_BuildDroneEntries;
if (obj2 == null)
{
hook_BuildDroneEntries val6 = LogBookController_BuildDroneEntries;
<>O.<1>__LogBookController_BuildDroneEntries = val6;
obj2 = (object)val6;
}
LogBookController.BuildDroneEntries += (hook_BuildDroneEntries)obj2;
object obj3 = <>O.<2>__PageBuilder_AddDronePanel;
if (obj3 == null)
{
hook_AddDronePanel val7 = PageBuilder_AddDronePanel;
<>O.<2>__PageBuilder_AddDronePanel = val7;
obj3 = (object)val7;
}
PageBuilder.AddDronePanel += (hook_AddDronePanel)obj3;
object obj4 = <>O.<3>__FixNegativeRegenStatNotShowingInLog;
if (obj4 == null)
{
Manipulator val8 = FixNegativeRegenStatNotShowingInLog;
<>O.<3>__FixNegativeRegenStatNotShowingInLog = val8;
obj4 = (object)val8;
}
PageBuilder.AddBodyStatsPanel += (Manipulator)obj4;
object obj5 = <>O.<4>__AddOperatorCommand;
if (obj5 == null)
{
Manipulator val9 = AddOperatorCommand;
<>O.<4>__AddOperatorCommand = val9;
obj5 = (object)val9;
}
PageBuilder.DroneBody += (Manipulator)obj5;
((ResourceAvailability)(ref BodyCatalog.availability)).CallWhenAvailable((Action)AllyCatalog.Make);
((ResourceAvailability)(ref LogBookController.availability)).CallWhenAvailable((Action)SetDroneIcon);
}
public static void SetDroneIcon()
{
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
((Graphic)((Component)CommonAssets.droneEntryIcon.transform.GetChild(0)).GetComponent<RawImage>()).color = new Color(0.6588f, 0.708f, 0.741f, 1f);
}
private static void FixNegativeRegenStatNotShowingInLog(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_0042: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext((MoveType)2, new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, "UnityEngine.Mathf", "Epsilon")
}))
{
val.Prev.OpCode = OpCodes.Ldc_R4;
val.Prev.Operand = 0f;
val.Next.OpCode = OpCodes.Bne_Un_S;
}
else
{
Log.LogWarning("IL Failed: FixNegativeRegenStatNotShowingInLog");
}
}
private static void AddOperatorCommand(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext((MoveType)0, new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdloc(x, 0),
(Instruction x) => ILPatternMatchingExt.MatchCallvirt(x, "RoR2.UI.LogBook.PageBuilder", "AddSimpleBody")
}))
{
val.Emit(OpCodes.Ldloc_0);
val.EmitDelegate<Func<PageBuilder, CharacterBody, PageBuilder>>((Func<PageBuilder, CharacterBody, PageBuilder>)delegate(PageBuilder page, CharacterBody body)
{
bool flag = false;
if (Object.op_Implicit((Object)(object)Run.instance) && Run.instance.IsExpansionEnabled(DLCS.DLC3))
{
flag = true;
}
else if (((BaseUserEntitlementTracker<LocalUser>)(object)EntitlementManager.localUserEntitlementTracker).AnyUserHasEntitlement(DLCS.DLC3.requiredEntitlement))
{
flag = true;
}
if (flag)
{
string text = body.baseNameToken.Replace("DT", "").Replace("BODY_NAME", "TIERINFO");
if (Language.english.TokenIsRegistered(text))
{
TextMeshProUGUI component = ((Component)page.managedObjects.Last().GetComponent<ChildLocator>().FindChild("MainLabel")).GetComponent<TextMeshProUGUI>();
((TMP_Text)component).text = ((TMP_Text)component).text + "\n" + Language.GetString(text);
}
DroneCommandReceiver val2 = default(DroneCommandReceiver);
if (((Component)body).TryGetComponent<DroneCommandReceiver>(ref val2))
{
GenericSkill commandSkill = val2.commandSkill;
if (Object.op_Implicit((Object)(object)val2.commandSkill) && Object.op_Implicit((Object)(object)val2.commandSkill.skillFamily))
{
page.AddSimpleTextPanel(string.Format("<color=#1FEFAD>{0}:</color>\n{1}", new object[2]
{
Language.GetString("DRONETECH_SECONDARY_NAME"),
Language.GetString(val2.commandSkill.skillFamily.defaultSkillDef.skillDescriptionToken)
}));
}
}
}
return page;
});
}
else
{
Log.LogWarning("IL Failed: AddOperatorCommand");
}
}
private static void PageBuilder_AddDronePanel(orig_AddDronePanel orig, PageBuilder self, CharacterBody bodyPrefabComponent)
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0030: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0038: Invalid comparison between Unknown and I4
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, bodyPrefabComponent);
TextMeshProUGUI component = ((Component)self.managedObjects.Last().GetComponent<ChildLocator>().FindChild("MainLabel")).GetComponent<TextMeshProUGUI>();
DroneIndex droneIndexFromBodyIndex = DroneCatalog.GetDroneIndexFromBodyIndex(bodyPrefabComponent.bodyIndex);
if ((int)droneIndexFromBodyIndex != -1)
{
DroneDef droneDef = DroneCatalog.GetDroneDef(droneIndexFromBodyIndex);
if (Object.op_Implicit((Object)(object)droneDef) && Object.op_Implicit((Object)(object)droneDef.droneBrokenSpawnCard))
{
PurchaseInteraction component2 = droneDef.droneBrokenSpawnCard.prefab.GetComponent<PurchaseInteraction>();
CostTypeDef costTypeDef = CostTypeCatalog.GetCostTypeDef(component2.costType);
Language.GetStringFormatted(costTypeDef.costStringFormatToken, new object[1] { component2.cost });
((TMP_Text)component).text = ((TMP_Text)component).text + Language.GetStringFormatted("DRONE_COST_STAT", new object[1] { Language.GetStringFormatted(costTypeDef.costStringFormatToken, new object[1] { component2.cost }) });
}
}
}
private static Entry[] LogBookController_BuildDroneEntries(orig_BuildDroneEntries orig, Dictionary<ExpansionDef, bool> expansionAvailability)
{
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Unknown result type (might be due to invalid IL or missing references)
//IL_0164: Unknown result type (might be due to invalid IL or missing references)
//IL_0333: Unknown result type (might be due to invalid IL or missing references)
//IL_033e: Unknown result type (might be due to invalid IL or missing references)
//IL_0349: Unknown result type (might be due to invalid IL or missing references)
//IL_0354: Unknown result type (might be due to invalid IL or missing references)
//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
//IL_01cf: Expected O, but got Unknown
//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
//IL_020b: 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_0210: Unknown result type (might be due to invalid IL or missing references)
//IL_0215: Unknown result