using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Microsoft.CodeAnalysis;
using R2API;
using RiskOfOptions;
using RiskOfOptions.OptionConfigs;
using RiskOfOptions.Options;
using RoR2;
using RoR2.Navigation;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Events;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("ShrineOfTransmutation")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+119a0254361d7f81c4553108cee95bd32dc14f3c")]
[assembly: AssemblyProduct("ShrineOfTransmutation")]
[assembly: AssemblyTitle("ShrineOfTransmutation")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
internal sealed class RefSafetyRulesAttribute : Attribute
{
public readonly int Version;
public RefSafetyRulesAttribute(int P_0)
{
Version = P_0;
}
}
}
namespace ShrineOfTransmutation
{
internal static class Log
{
private static ManualLogSource _logSource;
internal static void Init(ManualLogSource logSource)
{
_logSource = logSource;
}
internal static void Debug(object data)
{
_logSource.LogDebug(data);
}
internal static void Error(object data)
{
_logSource.LogError(data);
}
internal static void Fatal(object data)
{
_logSource.LogFatal(data);
}
internal static void Info(object data)
{
_logSource.LogInfo(data);
}
internal static void Message(object data)
{
_logSource.LogMessage(data);
}
internal static void Warning(object data)
{
_logSource.LogWarning(data);
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("Xerphy.ShrineOfTransmutation", "ShrineOfTransmutation", "1.1.0")]
public class ShrineOfTransmutation : BaseUnityPlugin
{
public const string PluginGUID = "Xerphy.ShrineOfTransmutation";
public const string PluginAuthor = "Xerphy";
public const string PluginName = "ShrineOfTransmutation";
public const string PluginVersion = "1.1.0";
private AssetBundle mainAssetBundle;
private GameObject shrineOfTransmutation;
private Sprite logo;
public static ConfigEntry<bool> importantAlert { get; set; }
public static ConfigEntry<bool> chanceToDestroyItem { get; set; }
public static ConfigEntry<bool> chanceToDowngradeItem { get; set; }
public static ConfigEntry<bool> chanceToUpgradeItem { get; set; }
public static ConfigEntry<bool> canDestroyAtAllTiers { get; set; }
public void Awake()
{
//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
//IL_01ab: Unknown result type (might be due to invalid IL or missing references)
//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
//IL_01bc: Unknown result type (might be due to invalid IL or missing references)
//IL_01e1: Unknown result type (might be due to invalid IL or missing references)
//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
//IL_01f8: Expected O, but got Unknown
//IL_01f8: 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_0205: Unknown result type (might be due to invalid IL or missing references)
//IL_0207: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: Expected O, but got Unknown
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_02ca: Expected O, but got Unknown
//IL_02d0: Unknown result type (might be due to invalid IL or missing references)
//IL_02da: Expected O, but got Unknown
//IL_02e0: Unknown result type (might be due to invalid IL or missing references)
//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
//IL_02f7: Expected O, but got Unknown
//IL_02fc: Expected O, but got Unknown
//IL_02f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0301: Expected O, but got Unknown
//IL_0307: Unknown result type (might be due to invalid IL or missing references)
//IL_0311: Expected O, but got Unknown
//IL_0317: Unknown result type (might be due to invalid IL or missing references)
//IL_0321: Expected O, but got Unknown
mainAssetBundle = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("ShrineOfTransmutation.dll", "shrineoftransmutationbundle"));
shrineOfTransmutation = PrefabAPI.InstantiateClone(mainAssetBundle.LoadAsset<GameObject>("Assets/ShrineOfTransmutation/ShrineOfTransmutationAssets/ShrineOfTransmutation.prefab"), "ShrineOfTransmutationModel");
logo = mainAssetBundle.LoadAsset<Sprite>("Assets/ShrineOfTransmutation/ShrineOfTransmutationAssets/ShrineOfTransmutationLogo.png");
Log.Init(((BaseUnityPlugin)this).Logger);
((Object)shrineOfTransmutation).name = "ShrineOfTransmutation";
shrineOfTransmutation.AddComponent<NetworkIdentity>();
PurchaseInteraction val = shrineOfTransmutation.AddComponent<PurchaseInteraction>();
ShrineOfTransmutationManager shrineOfTransmutationManager = shrineOfTransmutation.AddComponent<ShrineOfTransmutationManager>();
string colorHexString = ColorCatalog.GetColorHexString((ColorIndex)1);
string colorHexString2 = ColorCatalog.GetColorHexString((ColorIndex)2);
string colorHexString3 = ColorCatalog.GetColorHexString((ColorIndex)3);
val.contextToken = "Use Shrine of Transmutation (<color=#" + colorHexString + ">1 It</color><color=#" + colorHexString2 + ">em</color><color=#" + colorHexString3 + ">(s)</color><style=cIsDamage>)";
val.NetworkdisplayNameToken = "Shrine of Transmutation (<color=#" + colorHexString + ">1 It</color><color=#" + colorHexString2 + ">em</color><color=#" + colorHexString3 + ">(s)</color><style=cIsDamage>)";
shrineOfTransmutationManager.purchaseInteraction = val;
shrineOfTransmutation.GetComponent<Highlight>().targetRenderer = (Renderer)(object)shrineOfTransmutation.GetComponentInChildren<MeshRenderer>();
((Component)shrineOfTransmutation.transform.GetChild(0)).gameObject.AddComponent<EntityLocator>().entity = shrineOfTransmutation;
InteractableSpawnCard val2 = ScriptableObject.CreateInstance<InteractableSpawnCard>();
((Object)val2).name = "iscShrineOfTransmutation";
((SpawnCard)val2).prefab = shrineOfTransmutation;
((SpawnCard)val2).sendOverNetwork = true;
((SpawnCard)val2).hullSize = (HullClassification)1;
((SpawnCard)val2).nodeGraphType = (GraphType)0;
((SpawnCard)val2).requiredFlags = (NodeFlags)0;
((SpawnCard)val2).forbiddenFlags = (NodeFlags)16;
((SpawnCard)val2).directorCreditCost = 5;
((SpawnCard)val2).occupyPosition = true;
val2.orientToFloor = false;
val2.skipSpawnWhenSacrificeArtifactEnabled = false;
DirectorCard card = new DirectorCard
{
selectionWeight = 10,
spawnCard = (SpawnCard)(object)val2
};
DirectorCardHolder val3 = new DirectorCardHolder
{
Card = card,
InteractableCategory = (InteractableCategory)4
};
Helpers.AddNewInteractable(val3);
importantAlert = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "IMPORTANT", true, "Everyone needs to have the same options for multiplayer. You can change these settings while playing, but don't try that in multiplayer.");
chanceToDestroyItem = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enable item destruction at tier 1", true, "Toggle for if items should have a chance to be destroyed.");
canDestroyAtAllTiers = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enable item destruction at all tiers", false, "Toggle for if items should have a chance to be destroyed at all tiers. 'Enable item destruction at tier 1' must be toggled to true for this to work.");
chanceToDowngradeItem = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enable item downgrading", true, "Toggle for if items should have a chance to be downgraded.");
chanceToUpgradeItem = ((BaseUnityPlugin)this).Config.Bind<bool>("General", "Enable item upgrading", true, "Toggle for if items should have a chance to be upgraded.");
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(importantAlert));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(chanceToDestroyItem));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(canDestroyAtAllTiers, new CheckBoxConfig
{
checkIfDisabled = new IsDisabledDelegate(Check)
}));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(chanceToDowngradeItem));
ModSettingsManager.AddOption((BaseOption)new CheckBoxOption(chanceToUpgradeItem));
ModSettingsManager.SetModDescription("Shrine that lets you reroll white, green, and red items. With a chance to upgrade them, downgrade them, or even destroy them!");
ModSettingsManager.SetModIcon(logo);
}
private bool Check()
{
return !chanceToDestroyItem.Value;
}
}
public class ShrineOfTransmutationManager : NetworkBehaviour
{
public PurchaseInteraction purchaseInteraction;
private GameObject shrineUseEffect = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/ShrineUseEffect.prefab").WaitForCompletion();
private Xoroshiro128Plus rng;
public PickupIndex dropPickup;
public Transform dropTransform;
public float dropUpVelocityStrength = 20f;
public float dropForwardVelocityStrength = 2.5f;
private CostTypeIndex currentCostType;
private ItemDef takenItem;
public void Start()
{
if (NetworkServer.active && Object.op_Implicit((Object)(object)Run.instance))
{
purchaseInteraction.SetAvailable(true);
}
purchaseInteraction.ShouldShowOnScanner();
((UnityEvent<Interactor>)(object)purchaseInteraction.onPurchase).AddListener((UnityAction<Interactor>)OnPurchase);
}
public void Awake()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Expected O, but got Unknown
//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_0034: Unknown result type (might be due to invalid IL or missing references)
rng = new Xoroshiro128Plus(Run.instance.treasureRng.nextUlong);
dropTransform = ((Component)this).transform;
dropPickup = PickupIndex.none;
currentCostType = (CostTypeIndex)0;
}
[Server]
public void OnPurchase(Interactor interactor)
{
//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_005a: 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_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: 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)
//IL_0091: Expected O, but got Unknown
//IL_00a2: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
//IL_00ba: Unknown result type (might be due to invalid IL or missing references)
//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
//IL_00df: Unknown result type (might be due to invalid IL or missing references)
if (!NetworkServer.active)
{
Debug.LogWarning((object)"[Server] function 'ShrineOfTransmutationManager::OnPurchase(RoR2.Interactor)' called on client");
}
else if (CanBeAffordedByInteractor(interactor))
{
purchaseInteraction.SetAvailable(false);
EffectManager.SpawnEffect(shrineUseEffect, new EffectData
{
origin = ((Component)this).gameObject.transform.position,
rotation = Quaternion.identity,
scale = 3f,
color = Color32.op_Implicit(Color.cyan)
}, true);
CharacterBody component = ((Component)interactor).GetComponent<CharacterBody>();
CostTypeDef val = RandomizeCostType(interactor);
ItemIndex val2 = (ItemIndex)(-1);
PayCostResults val3 = val.PayCost(1, interactor, ((Component)this).gameObject, rng, val2);
CreateItemTakenOrb(component.corePosition, ((Component)this).gameObject, val3.itemsTaken[0]);
takenItem = ItemCatalog.GetItemDef(val3.itemsTaken[0]);
((MonoBehaviour)this).StartCoroutine(Delay());
}
}
[Server]
private IEnumerator Delay()
{
yield return (object)new WaitForSeconds(1.5f);
ItemDrop();
purchaseInteraction.SetAvailable(true);
}
public PickupIndex RollDrop()
{
//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_00eb: Unknown result type (might be due to invalid IL or missing references)
//IL_00f2: Expected O, but got Unknown
//IL_0881: Unknown result type (might be due to invalid IL or missing references)
//IL_0882: Unknown result type (might be due to invalid IL or missing references)
//IL_02e5: Unknown result type (might be due to invalid IL or missing references)
//IL_02ea: Unknown result type (might be due to invalid IL or missing references)
//IL_02eb: Unknown result type (might be due to invalid IL or missing references)
//IL_02f2: Expected O, but got Unknown
//IL_033c: 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 type (might be due to invalid IL or missing references)
//IL_0216: Unknown result type (might be due to invalid IL or missing references)
//IL_021d: Expected O, but got Unknown
//IL_0267: Unknown result type (might be due to invalid IL or missing references)
//IL_016e: Unknown result type (might be due to invalid IL or missing references)
//IL_0173: Unknown result type (might be due to invalid IL or missing references)
//IL_0174: Unknown result type (might be due to invalid IL or missing references)
//IL_017b: Expected O, but got Unknown
//IL_01c5: Unknown result type (might be due to invalid IL or missing references)
//IL_0886: Unknown result type (might be due to invalid IL or missing references)
//IL_0636: Unknown result type (might be due to invalid IL or missing references)
//IL_063b: Unknown result type (might be due to invalid IL or missing references)
//IL_063c: Unknown result type (might be due to invalid IL or missing references)
//IL_0643: Expected O, but got Unknown
//IL_068d: Unknown result type (might be due to invalid IL or missing references)
//IL_039e: Unknown result type (might be due to invalid IL or missing references)
//IL_03a3: Unknown result type (might be due to invalid IL or missing references)
//IL_03a4: Unknown result type (might be due to invalid IL or missing references)
//IL_03ab: Expected O, but got Unknown
//IL_03f5: Unknown result type (might be due to invalid IL or missing references)
//IL_07f8: Unknown result type (might be due to invalid IL or missing references)
//IL_07fd: Unknown result type (might be due to invalid IL or missing references)
//IL_07fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0805: Expected O, but got Unknown
//IL_084f: Unknown result type (might be due to invalid IL or missing references)
//IL_0560: Unknown result type (might be due to invalid IL or missing references)
//IL_0565: Unknown result type (might be due to invalid IL or missing references)
//IL_0566: Unknown result type (might be due to invalid IL or missing references)
//IL_056d: Expected O, but got Unknown
//IL_05b7: Unknown result type (might be due to invalid IL or missing references)
//IL_0755: Unknown result type (might be due to invalid IL or missing references)
//IL_075a: Unknown result type (might be due to invalid IL or missing references)
//IL_075b: Unknown result type (might be due to invalid IL or missing references)
//IL_0762: Expected O, but got Unknown
//IL_07ac: Unknown result type (might be due to invalid IL or missing references)
//IL_06e8: Unknown result type (might be due to invalid IL or missing references)
//IL_06ef: Expected O, but got Unknown
//IL_04bd: Unknown result type (might be due to invalid IL or missing references)
//IL_04c2: Unknown result type (might be due to invalid IL or missing references)
//IL_04c3: Unknown result type (might be due to invalid IL or missing references)
//IL_04ca: Expected O, but got Unknown
//IL_0514: Unknown result type (might be due to invalid IL or missing references)
//IL_0450: Unknown result type (might be due to invalid IL or missing references)
//IL_0457: Expected O, but got Unknown
int num = rng.RangeInt(1, 1001);
PickupIndex result = PickupIndex.none;
int num2 = 50;
int num3 = 150;
int num4 = 200;
int num5 = 100;
int num6 = 300;
List<PickupIndex> availableTier1DropList = Run.instance.availableTier1DropList;
List<PickupIndex> availableTier2DropList = Run.instance.availableTier2DropList;
List<PickupIndex> availableTier3DropList = Run.instance.availableTier3DropList;
string colorHexString = ColorCatalog.GetColorHexString((ColorIndex)1);
string colorHexString2 = ColorCatalog.GetColorHexString((ColorIndex)2);
string colorHexString3 = ColorCatalog.GetColorHexString((ColorIndex)3);
if (!ShrineOfTransmutation.chanceToDestroyItem.Value)
{
num2 = 0;
}
if (!ShrineOfTransmutation.chanceToDowngradeItem.Value)
{
num4 = 0;
num6 = 0;
}
if (!ShrineOfTransmutation.chanceToUpgradeItem.Value)
{
num3 = 0;
num5 = 0;
}
if (((object)(CostTypeIndex)(ref currentCostType)).Equals((object)(CostTypeIndex)4))
{
if (num <= num2)
{
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Destroyed </color><color=#" + colorHexString + ">" + Language.GetString(takenItem.nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
else if (num >= 1001 - num3)
{
result = availableTier2DropList[rng.RangeInt(0, availableTier2DropList.Count)];
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Upgraded </color><color=#" + colorHexString + ">" + Language.GetString(takenItem.nameToken) + "</color><color=#307FFF> to </color><color=#" + colorHexString2 + ">" + Language.GetString(ItemCatalog.GetItemDef(((PickupIndex)(ref result)).itemIndex).nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
else
{
result = availableTier1DropList[rng.RangeInt(0, availableTier1DropList.Count)];
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Rerolled </color><color=#" + colorHexString + ">" + Language.GetString(takenItem.nameToken) + "</color><color=#307FFF> to </color><color=#" + colorHexString + ">" + Language.GetString(ItemCatalog.GetItemDef(((PickupIndex)(ref result)).itemIndex).nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
}
else if (((object)(CostTypeIndex)(ref currentCostType)).Equals((object)(CostTypeIndex)5))
{
if (num <= num4)
{
result = availableTier1DropList[rng.RangeInt(0, availableTier1DropList.Count)];
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Downgraded </color><color=#" + colorHexString2 + ">" + Language.GetString(takenItem.nameToken) + "</color><color=#307FFF> to </color><color=#" + colorHexString + ">" + Language.GetString(ItemCatalog.GetItemDef(((PickupIndex)(ref result)).itemIndex).nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
else if (num >= 1001 - num5)
{
result = availableTier3DropList[rng.RangeInt(0, availableTier3DropList.Count)];
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Upgraded </color><color=#" + colorHexString2 + ">" + Language.GetString(takenItem.nameToken) + "</color><color=#307FFF> to </color><color=#" + colorHexString3 + ">" + Language.GetString(ItemCatalog.GetItemDef(((PickupIndex)(ref result)).itemIndex).nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
else if (ShrineOfTransmutation.canDestroyAtAllTiers.Value)
{
if (num <= num4 + num2)
{
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Destroyed </color><color=#" + colorHexString2 + ">" + Language.GetString(takenItem.nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
else
{
result = availableTier2DropList[rng.RangeInt(0, availableTier2DropList.Count)];
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Rerolled </color><color=#" + colorHexString2 + ">" + Language.GetString(takenItem.nameToken) + "</color><color=#307FFF> to </color><color=#" + colorHexString2 + ">" + Language.GetString(ItemCatalog.GetItemDef(((PickupIndex)(ref result)).itemIndex).nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
}
else
{
result = availableTier2DropList[rng.RangeInt(0, availableTier2DropList.Count)];
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Rerolled </color><color=#" + colorHexString2 + ">" + Language.GetString(takenItem.nameToken) + "</color><color=#307FFF> to </color><color=#" + colorHexString2 + ">" + Language.GetString(ItemCatalog.GetItemDef(((PickupIndex)(ref result)).itemIndex).nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
}
else if (((object)(CostTypeIndex)(ref currentCostType)).Equals((object)(CostTypeIndex)6))
{
if (num <= num6)
{
result = availableTier2DropList[rng.RangeInt(0, availableTier2DropList.Count)];
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Downgraded </color><color=#" + colorHexString3 + ">" + Language.GetString(takenItem.nameToken) + "</color><color=#307FFF> to </color><color=#" + colorHexString2 + ">" + Language.GetString(ItemCatalog.GetItemDef(((PickupIndex)(ref result)).itemIndex).nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
else if (ShrineOfTransmutation.canDestroyAtAllTiers.Value)
{
if (num <= num6 + num2)
{
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Destroyed </color><color=#" + colorHexString3 + ">" + Language.GetString(takenItem.nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
else
{
result = availableTier3DropList[rng.RangeInt(0, availableTier3DropList.Count)];
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Rerolled </color><color=#" + colorHexString3 + ">" + Language.GetString(takenItem.nameToken) + "</color><color=#307FFF> to </color><color=#" + colorHexString3 + ">" + Language.GetString(ItemCatalog.GetItemDef(((PickupIndex)(ref result)).itemIndex).nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
}
else
{
result = availableTier3DropList[rng.RangeInt(0, availableTier3DropList.Count)];
SimpleChatMessage val = new SimpleChatMessage();
val.baseToken = "<style=cEvent><color=#307FFF>Rerolled </color><color=#" + colorHexString3 + ">" + Language.GetString(takenItem.nameToken) + "</color><color=#307FFF> to </color><color=#" + colorHexString3 + ">" + Language.GetString(ItemCatalog.GetItemDef(((PickupIndex)(ref result)).itemIndex).nameToken) + "</color></style>";
Chat.SendBroadcastChat((ChatMessageBase)(object)val);
}
}
return result;
}
[Server]
public void ItemDrop()
{
//IL_001c: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: 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)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: 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_0065: Unknown result type (might be due to invalid IL or missing references)
//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_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0089: Unknown result type (might be due to invalid IL or missing references)
//IL_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0098: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00a2: 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)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00b1: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
if (!NetworkServer.active)
{
Debug.LogWarning((object)"[Server] function 'System.Void RoR2.ChestBehavior::ItemDrop()' called on client");
}
dropPickup = RollDrop();
if (dropPickup != PickupIndex.none)
{
float num = 360f;
Vector3 val = Vector3.up * dropUpVelocityStrength + dropTransform.forward * dropForwardVelocityStrength;
Quaternion val2 = Quaternion.AngleAxis(num, Vector3.up);
PickupDropletController.CreatePickupDroplet(dropPickup, dropTransform.position + Vector3.up * 1.5f, val);
val = val2 * val;
dropPickup = PickupIndex.none;
}
currentCostType = (CostTypeIndex)0;
}
public bool CanBeAffordedByInteractor(Interactor activator)
{
if (CostTypeCatalog.GetCostTypeDef((CostTypeIndex)4).IsAffordable(1, activator))
{
return true;
}
if (CostTypeCatalog.GetCostTypeDef((CostTypeIndex)5).IsAffordable(1, activator))
{
return true;
}
if (CostTypeCatalog.GetCostTypeDef((CostTypeIndex)6).IsAffordable(1, activator))
{
return true;
}
return false;
}
public CostTypeIndex PickRandomTier(Interactor activator, CostTypeIndex costType)
{
//IL_00d2: 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_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00a1: 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_00ca: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
bool flag2 = false;
bool flag3 = false;
CharacterBody component = ((Component)activator).GetComponent<CharacterBody>();
int totalItemCountOfTier = component.inventory.GetTotalItemCountOfTier((ItemTier)0);
int totalItemCountOfTier2 = component.inventory.GetTotalItemCountOfTier((ItemTier)1);
int totalItemCountOfTier3 = component.inventory.GetTotalItemCountOfTier((ItemTier)2);
int num = totalItemCountOfTier + totalItemCountOfTier2 + totalItemCountOfTier3;
if (Object.op_Implicit((Object)(object)component.inventory))
{
if (totalItemCountOfTier > 0)
{
flag = true;
}
if (totalItemCountOfTier2 > 0)
{
flag2 = true;
}
if (totalItemCountOfTier3 > 0)
{
flag3 = true;
}
int num2 = rng.RangeInt(0, num);
if (num2 < totalItemCountOfTier && flag)
{
costType = (CostTypeIndex)4;
}
else if (num2 >= num - totalItemCountOfTier3 && flag3)
{
costType = (CostTypeIndex)6;
}
else if (flag2)
{
costType = (CostTypeIndex)5;
}
}
return costType;
}
public bool CanScrapBeUsed(Interactor activator)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0022: Unknown result type (might be due to invalid IL or missing references)
//IL_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_002e: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: 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_005b: Unknown result type (might be due to invalid IL or missing references)
//IL_0076: 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)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
bool flag2 = false;
bool flag3 = false;
bool flag4 = false;
CharacterBody component = ((Component)activator).GetComponent<CharacterBody>();
ItemIndex val = ItemCatalog.FindItemIndex("ScrapWhite");
ItemIndex val2 = ItemCatalog.FindItemIndex("ScrapGreen");
ItemIndex val3 = ItemCatalog.FindItemIndex("ScrapRed");
ItemIndex val4 = ItemCatalog.FindItemIndex("RegeneratingScrap");
if (Object.op_Implicit((Object)(object)component.inventory))
{
if (component.inventory.GetItemCount(val) > 0)
{
flag = true;
}
if (component.inventory.GetItemCount(val2) > 0)
{
flag2 = true;
}
if (component.inventory.GetItemCount(val3) > 0)
{
flag3 = true;
}
if (component.inventory.GetItemCount(val4) > 0)
{
flag4 = true;
}
}
return flag || flag2 || flag3 || flag4;
}
public CostTypeIndex PickRandomScrap(Interactor activator)
{
//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_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_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_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0062: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_012d: 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_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0111: Unknown result type (might be due to invalid IL or missing references)
//IL_0124: 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)
bool flag = false;
bool flag2 = false;
bool flag3 = false;
CharacterBody component = ((Component)activator).GetComponent<CharacterBody>();
ItemIndex val = ItemCatalog.FindItemIndex("ScrapWhite");
ItemIndex val2 = ItemCatalog.FindItemIndex("ScrapGreen");
ItemIndex val3 = ItemCatalog.FindItemIndex("ScrapRed");
ItemIndex val4 = ItemCatalog.FindItemIndex("RegeneratingScrap");
int itemCount = component.inventory.GetItemCount(val);
int itemCount2 = component.inventory.GetItemCount(val2);
int itemCount3 = component.inventory.GetItemCount(val3);
int itemCount4 = component.inventory.GetItemCount(val4);
int num = itemCount + itemCount2 + itemCount3;
if (Object.op_Implicit((Object)(object)component.inventory))
{
if (itemCount > 0)
{
flag = true;
}
if (itemCount2 > 0)
{
flag2 = true;
}
if (itemCount3 > 0)
{
flag3 = true;
}
if (itemCount4 > 0)
{
return (CostTypeIndex)5;
}
int num2 = rng.RangeInt(0, num);
if (num2 < itemCount && flag)
{
return (CostTypeIndex)4;
}
if (num2 >= num - itemCount3 && flag3)
{
return (CostTypeIndex)6;
}
if (flag2)
{
return (CostTypeIndex)5;
}
return (CostTypeIndex)0;
}
return (CostTypeIndex)0;
}
public CostTypeDef RandomizeCostType(Interactor activator)
{
//IL_0002: 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_001e: Unknown result type (might be due to invalid IL or missing references)
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
//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_0026: 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)
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
CostTypeIndex costType = (CostTypeIndex)0;
return CostTypeCatalog.GetCostTypeDef(currentCostType = ((!CanScrapBeUsed(activator)) ? PickRandomTier(activator, costType) : PickRandomScrap(activator)));
}
[Server]
public static void CreateItemTakenOrb(Vector3 effectOrigin, GameObject targetObject, ItemIndex itemIndex)
{
//IL_0026: 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_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003e: 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_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Expected I4, but got Unknown
//IL_0048: Expected O, but got Unknown
if (!NetworkServer.active)
{
Debug.LogWarning((object)"[Server] function 'System.Void RoR2.PurchaseInteraction::CreateItemTakenOrb(UnityEngine.Vector3,UnityEngine.GameObject,RoR2.ItemIndex)' called on client");
return;
}
GameObject val = LegacyResourcesAPI.Load<GameObject>("Prefabs/Effects/OrbEffects/ItemTakenOrbEffect");
EffectData val2 = new EffectData
{
origin = effectOrigin,
genericFloat = 1.5f,
genericUInt = (uint)(itemIndex + 1)
};
val2.SetNetworkedObjectReference(targetObject);
EffectManager.SpawnEffect(val, val2, true);
}
}
}