using System;
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 BepInEx;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.ImpMonster;
using IL.RoR2;
using KinematicCharacterController;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using R2API;
using RoR2;
using RoR2.Navigation;
using RoR2.Projectile;
using SOTSItemRework.Items.Green;
using SOTSItemRework.Items.Red;
using SOTSItemRework.Items.White;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("SOTSItemRework")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("SOTSItemRework")]
[assembly: AssemblyTitle("SOTSItemRework")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Microsoft.CodeAnalysis
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
internal sealed class EmbeddedAttribute : Attribute
{
}
}
namespace System.Runtime.CompilerServices
{
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Event | AttributeTargets.Parameter | AttributeTargets.ReturnValue | AttributeTargets.GenericParameter, AllowMultiple = false, Inherited = false)]
internal sealed class NullableAttribute : Attribute
{
public readonly byte[] NullableFlags;
public NullableAttribute(byte P_0)
{
NullableFlags = new byte[1] { P_0 };
}
public NullableAttribute(byte[] P_0)
{
NullableFlags = P_0;
}
}
[CompilerGenerated]
[Microsoft.CodeAnalysis.Embedded]
[AttributeUsage(AttributeTargets.Class | AttributeTargets.Struct | AttributeTargets.Method | AttributeTargets.Interface | AttributeTargets.Delegate, AllowMultiple = false, Inherited = false)]
internal sealed class NullableContextAttribute : Attribute
{
public readonly byte Flag;
public NullableContextAttribute(byte P_0)
{
Flag = P_0;
}
}
}
namespace SOTSItemRework
{
public class ProjectileGlue : MonoBehaviour
{
private Transform target;
private ProjectileTargetComponent targetComponent;
public void Start()
{
targetComponent = ((Component)this).GetComponent<ProjectileTargetComponent>();
target = targetComponent.target;
}
private void FixedUpdate()
{
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)target))
{
((Component)this).transform.position = target.position;
}
}
}
[BepInPlugin("com.Nuxlar.SOTSItemRework", "SOTSItemRework", "1.1.1")]
public class SOTSItemRework : BaseUnityPlugin
{
public static ItemDef emptyItem = ScriptableObject.CreateInstance<ItemDef>();
public static BuffDef emptyBuff = ScriptableObject.CreateInstance<BuffDef>();
public static AssetBundle assetBundle;
public static Sprite transmitterEquipIcon;
public static ConfigEntry<bool> enableEcho;
public static ConfigEntry<bool> enableAntler;
public static ConfigEntry<bool> enableFin;
public static ConfigEntry<bool> enableChronic;
public static ConfigEntry<bool> enableLantern;
public static ConfigEntry<bool> enableDoll;
public static ConfigEntry<bool> enableBeads;
public static ConfigEntry<bool> enableThorn;
public static ConfigEntry<bool> enableTransmitter;
public static ConfigEntry<bool> enableWarBonds;
public static ConfigEntry<bool> enableLens;
public static ConfigEntry<bool> enableNectar;
private static ConfigFile SIRConfig { get; set; }
public void Awake()
{
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Expected O, but got Unknown
//IL_01e2: 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)
SIRConfig = new ConfigFile(Paths.ConfigPath + "\\com.Nuxlar.SOTSItemRework.cfg", true);
enableEcho = SIRConfig.Bind<bool>("General", "Enable Warped Echo Change", true, "Enable Rework");
enableAntler = SIRConfig.Bind<bool>("General", "Enable Antler Shield Change", true, "Enable Rework");
enableFin = SIRConfig.Bind<bool>("General", "Enable Knockback Fin Change", true, "Enable Rework");
enableChronic = SIRConfig.Bind<bool>("General", "Enable Chronic Expansion Change", true, "Enable Rework");
enableLantern = SIRConfig.Bind<bool>("General", "Enable Bolstering Lantern Change", true, "Enable Rework");
enableDoll = SIRConfig.Bind<bool>("General", "Enable Chance Doll Change", true, "Enable Rework");
enableBeads = SIRConfig.Bind<bool>("General", "Enable Prayer Beads Change", true, "Enable Rework");
enableThorn = SIRConfig.Bind<bool>("General", "Enable Noxious Thorn Change", true, "Enable Rework");
enableTransmitter = SIRConfig.Bind<bool>("General", "Enable Unstable Transmitter Change", true, "Enable Rework");
enableWarBonds = SIRConfig.Bind<bool>("General", "Enable War Bonds Change", true, "Enable Rework");
enableLens = SIRConfig.Bind<bool>("General", "Enable Runic Lens Change", true, "Enable Rework");
enableNectar = SIRConfig.Bind<bool>("General", "Enable Growth Nectar Change", true, "Enable Rework");
assetBundle = AssetBundle.LoadFromFile(Path.Combine(Path.GetDirectoryName(((BaseUnityPlugin)this).Info.Location), "sotsitemrework.bundle"));
transmitterEquipIcon = assetBundle.LoadAsset<Sprite>("assets/transmitterequipicon.png");
emptyItem.tier = (ItemTier)5;
emptyItem.hidden = true;
emptyItem.deprecatedTier = (ItemTier)5;
((Object)emptyItem).name = "Empty ItemNux";
ContentAddition.AddItemDef(emptyItem);
((Object)emptyBuff).name = "Empty BuffNux";
ContentAddition.AddBuffDef(emptyBuff);
bool flag = default(bool);
ContentAddition.AddEntityState<TransmitterBlink>(ref flag);
if (enableEcho.Value)
{
new WarpedEcho();
}
if (enableAntler.Value)
{
new AntlerShield();
}
if (enableFin.Value)
{
new KnockbackFin();
}
if (enableChronic.Value)
{
new ChronicExpansion();
}
if (enableLantern.Value)
{
new BolsteringLantern();
}
if (enableDoll.Value)
{
new ChanceDoll();
}
if (enableBeads.Value)
{
new PrayerBeads();
}
if (enableThorn.Value)
{
new NoxiousThorn();
}
if (enableTransmitter.Value)
{
new UnstableTransmitter();
}
if (enableWarBonds.Value)
{
new WarBonds();
}
if (enableLens.Value)
{
new RunicLens();
}
if (enableNectar.Value)
{
new GrowthNectar();
}
}
}
public class TransmitterBlink : BaseState
{
private Transform modelTransform;
private float stopwatch;
private float duration = 0.3f;
private Vector3 blinkDestination = Vector3.zero;
private Vector3 blinkStart = Vector3.zero;
private Animator animator;
private CharacterModel characterModel;
private HurtBoxGroup hurtboxGroup;
private Vector3 blinkVector = Vector3.zero;
public override void OnEnter()
{
//IL_00ae: 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)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: 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)
//IL_00d6: Unknown result type (might be due to invalid IL or missing references)
//IL_00db: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0102: Unknown result type (might be due to invalid IL or missing references)
//IL_010c: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_0135: Unknown result type (might be due to invalid IL or missing references)
//IL_013a: Unknown result type (might be due to invalid IL or missing references)
//IL_013f: Unknown result type (might be due to invalid IL or missing references)
//IL_0144: Unknown result type (might be due to invalid IL or missing references)
//IL_0150: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
modelTransform = ((EntityState)this).GetModelTransform();
if (Object.op_Implicit((Object)(object)modelTransform))
{
animator = ((Component)modelTransform).GetComponent<Animator>();
characterModel = ((Component)modelTransform).GetComponent<CharacterModel>();
hurtboxGroup = ((Component)modelTransform).GetComponent<HurtBoxGroup>();
}
if (Object.op_Implicit((Object)(object)characterModel))
{
CharacterModel obj = characterModel;
obj.invisibilityCount++;
}
if (Object.op_Implicit((Object)(object)hurtboxGroup))
{
HurtBoxGroup obj2 = hurtboxGroup;
int hurtBoxesDeactivatorCounter = obj2.hurtBoxesDeactivatorCounter + 1;
obj2.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter;
}
if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
{
((Behaviour)((EntityState)this).characterMotor).enabled = false;
}
Vector3 val = GetBlinkVector() * 50f;
blinkDestination = ((EntityState)this).transform.position;
blinkStart = ((EntityState)this).transform.position;
NodeGraph groundNodes = SceneInfo.instance.groundNodes;
groundNodes.GetNodePosition(groundNodes.FindClosestNode(((EntityState)this).transform.position + val, ((EntityState)this).characterBody.hullClassification, float.PositiveInfinity), ref blinkDestination);
blinkDestination += ((EntityState)this).transform.position - ((EntityState)this).characterBody.footPosition;
CreateBlinkEffect(Util.GetCorePosition(((EntityState)this).gameObject));
RiftAttack();
}
private void CreateBlinkEffect(Vector3 origin)
{
//IL_0005: 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: 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_001b: 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_0028: Expected O, but got Unknown
EffectManager.SpawnEffect(BlinkState.blinkPrefab, new EffectData
{
rotation = Util.QuaternionSafeLookRotation(blinkVector),
origin = origin
}, false);
}
protected virtual Vector3 GetBlinkVector()
{
//IL_0006: 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_002a: 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_002f: Unknown result type (might be due to invalid IL or missing references)
//IL_0032: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = ((((EntityState)this).inputBank.moveVector == Vector3.zero) ? ((EntityState)this).characterDirection.forward : ((EntityState)this).inputBank.moveVector);
return ((Vector3)(ref val)).normalized;
}
private void SetPosition(Vector3 newPosition)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_001a: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
{
((BaseCharacterController)((EntityState)this).characterMotor).Motor.SetPositionAndRotation(newPosition, Quaternion.identity, true);
}
}
private void RiftAttack()
{
//IL_0000: 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_0016: 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_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: 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_0043: 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_004a: 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_005d: 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_0064: 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)
//IL_006e: 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_0075: 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_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_0097: 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_00a3: Unknown result type (might be due to invalid IL or missing references)
//IL_00ae: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00bb: 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_00c2: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00d2: 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_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00e8: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_00f9: Unknown result type (might be due to invalid IL or missing references)
//IL_0104: Expected O, but got Unknown
new BlastAttack
{
attacker = ((Component)((EntityState)this).characterBody).gameObject,
baseDamage = ((EntityState)this).characterBody.damage * 4f,
baseForce = 1000f,
bonusForce = Vector3.zero,
attackerFiltering = (AttackerFiltering)2,
crit = ((EntityState)this).characterBody.RollCrit(),
damageColorIndex = (DamageColorIndex)3,
damageType = DamageTypeCombo.op_Implicit((DamageType)0),
falloffModel = (FalloffModel)0,
inflictor = ((Component)((EntityState)this).characterBody).gameObject,
position = ((EntityState)this).characterBody.corePosition,
procChainMask = default(ProcChainMask),
procCoefficient = 1f,
radius = 25f,
losType = (LoSType)0,
teamIndex = (TeamIndex)1
}.Fire();
EffectManager.SpawnEffect(CommonAssets.teleportOnLowHealthExplosion, new EffectData
{
origin = ((EntityState)this).characterBody.corePosition,
scale = 50f,
rotation = Quaternion.identity
}, true);
Util.PlaySound("Play_item_proc_teleportOnLowHealth", ((Component)((EntityState)this).characterBody).gameObject);
}
public override void FixedUpdate()
{
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: 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)
((EntityState)this).FixedUpdate();
stopwatch += ((EntityState)this).GetDeltaTime();
if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor) && Object.op_Implicit((Object)(object)((EntityState)this).characterDirection))
{
((EntityState)this).characterMotor.velocity = Vector3.zero;
}
SetPosition(Vector3.Lerp(blinkStart, blinkDestination, stopwatch / BlinkState.duration));
if (!((double)stopwatch < (double)BlinkState.duration) && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
RiftAttack();
CreateBlinkEffect(Util.GetCorePosition(((EntityState)this).gameObject));
modelTransform = ((EntityState)this).GetModelTransform();
if (Object.op_Implicit((Object)(object)modelTransform) && Object.op_Implicit((Object)(object)BlinkState.destealthMaterial))
{
TemporaryOverlayInstance obj = TemporaryOverlayManager.AddOverlay(((Component)animator).gameObject);
obj.duration = 1f;
obj.destroyComponentOnEnd = true;
obj.originalMaterial = BlinkState.destealthMaterial;
obj.inspectorCharacterModel = ((Component)animator).gameObject.GetComponent<CharacterModel>();
obj.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
obj.animateShaderAlpha = true;
}
if (Object.op_Implicit((Object)(object)characterModel))
{
CharacterModel obj2 = characterModel;
obj2.invisibilityCount--;
}
if (Object.op_Implicit((Object)(object)hurtboxGroup))
{
HurtBoxGroup obj3 = hurtboxGroup;
int hurtBoxesDeactivatorCounter = obj3.hurtBoxesDeactivatorCounter - 1;
obj3.hurtBoxesDeactivatorCounter = hurtBoxesDeactivatorCounter;
}
if (Object.op_Implicit((Object)(object)((EntityState)this).characterMotor))
{
((Behaviour)((EntityState)this).characterMotor).enabled = true;
}
((EntityState)this).OnExit();
}
public override InterruptPriority GetMinimumInterruptPriority()
{
return (InterruptPriority)5;
}
}
}
namespace SOTSItemRework.Items.White
{
public class AntlerShield
{
private ItemDef antlerDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/NegateAttack/NegateAttack.asset").WaitForCompletion();
public AntlerShield()
{
//IL_0006: 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_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Expected O, but got Unknown
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
antlerDef.descriptionToken = "Gain shield equal to <style=cIsUtility>4%</style> <style=cStack>(+4% per stack)</style> of your maximum health. Increase movement speed by <style=cIsUtility>14%</style> <style=cStack>(+14% per stack)</style> while shield is active.";
antlerDef.pickupToken = "Gain a recharging shield and increase movement speed while shield is active.";
HealthComponent.TakeDamageProcess += new Manipulator(RemoveVanillaAntlerShield);
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(NewAntlerShield);
}
private void NewAntlerShield(CharacterBody sender, StatHookEventArgs args)
{
if (!Object.op_Implicit((Object)(object)sender.inventory))
{
return;
}
int itemCount = sender.inventory.GetItemCount(Items.NegateAttack);
if (itemCount > 0)
{
args.baseShieldAdd += 0.04f * sender.maxHealth * (float)itemCount;
if (Object.op_Implicit((Object)(object)sender.healthComponent) && sender.healthComponent.shield > 0f)
{
args.moveSpeedMultAdd += 0.14f * (float)itemCount;
}
}
}
private void RemoveVanillaAntlerShield(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[2]
{
(Instruction x) => ILPatternMatchingExt.MatchLdfld(x, typeof(ItemCounts), "antlerShield"),
(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0)
}))
{
val.Index += 2;
val.EmitDelegate<Func<int, int>>((Func<int, int>)((int stack) => int.MaxValue));
}
else
{
Debug.LogError((object)"SOTSItemRework: Removing vanilla Antler Shield hook failed.");
}
}
}
public class BolsteringLantern
{
private ItemDef lanternDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/LowerHealthHigherDamage/LowerHealthHigherDamage.asset").WaitForCompletion();
public BolsteringLantern()
{
//IL_0006: 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_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Expected O, but got Unknown
lanternDef.descriptionToken = "While <style=cIsHealth>health and shield are at 100%</style>, increase damage by <style=cIsUtility>20%</style> <style=cStack>(+20% per stack)</style>.";
lanternDef.pickupToken = "Deal extra damage at max health.";
CharacterBody.UpdateLowerHealthHigherDamage += new hook_UpdateLowerHealthHigherDamage(LanternChange);
}
private void LanternChange(orig_UpdateLowerHealthHigherDamage orig, CharacterBody self)
{
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_012a: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_0168: Invalid comparison between Unknown and I4
//IL_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Invalid comparison between Unknown and I4
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_019d: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)self.inventory))
{
return;
}
int itemCount = self.inventory.GetItemCount(Items.LowerHealthHigherDamage);
if (NetworkServer.active)
{
if (itemCount > 0)
{
if (Object.op_Implicit((Object)(object)self.inventory) && !((double)self.healthComponent.health <= 0.0) && (int)self.teamComponent.teamIndex == 1)
{
float combinedHealthFraction = self.healthComponent.combinedHealthFraction;
if ((double)combinedHealthFraction >= 1.0 && !self.HasBuff(Buffs.LowerHealthHigherDamageBuff))
{
self.AddBuff(Buffs.LowerHealthHigherDamageBuff);
Util.PlaySound("Play_item_proc_lowerHealthHigherDamage_proc", ((Component)self).gameObject);
self.TransmitItemBehavior(new NetworkItemBehaviorData(Items.LowerHealthHigherDamage.itemIndex, 1f));
}
else if (self.HasBuff(Buffs.LowerHealthHigherDamageBuff) && !((double)combinedHealthFraction >= 1.0))
{
self.RemoveBuff(Buffs.LowerHealthHigherDamageBuff);
self.TransmitItemBehavior(new NetworkItemBehaviorData(Items.LowerHealthHigherDamage.itemIndex, 0f));
}
}
}
else if (self.HasBuff(Buffs.LowerHealthHigherDamageBuff))
{
self.RemoveBuff(Buffs.LowerHealthHigherDamageBuff);
self.TransmitItemBehavior(new NetworkItemBehaviorData(Items.LowerHealthHigherDamage.itemIndex, 0f));
}
}
else if (itemCount == 0 && self.HasBuff(Buffs.LowerHealthHigherDamageBuff) && !((double)self.healthComponent.health <= 0.0) && (int)self.teamComponent.teamIndex == 1 && !((double)self.healthComponent.GetNormalizedHealth() >= 1.0))
{
self.RemoveBuff(Buffs.LowerHealthHigherDamageBuff);
self.TransmitItemBehavior(new NetworkItemBehaviorData(Items.LowerHealthHigherDamage.itemIndex, 0f));
}
}
}
public class ChronicExpansion
{
private ItemDef cExpansionDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/IncreaseDamageOnMultiKill/IncreaseDamageOnMultiKill.asset").WaitForCompletion();
public ChronicExpansion()
{
//IL_0006: 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_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Expected O, but got Unknown
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Expected O, but got Unknown
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
//IL_0092: Expected O, but got Unknown
//IL_0099: Unknown result type (might be due to invalid IL or missing references)
//IL_00a3: Expected O, but got Unknown
//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
//IL_00b4: Expected O, but got Unknown
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Expected O, but got Unknown
cExpansionDef.nameToken = "Escalating Expansion";
cExpansionDef.descriptionToken = "Gain a stacking 5% Critical Strike chance after killing an enemy for <style=cIsUtility>3 seconds</style> <style=cStack>(+1.5s per stack)</style>. Duration resets with each kill.";
cExpansionDef.pickupToken = "Gain a stacking 5% Critical Strike chance after killing an enemy for a limited time. Duration resets with each kill.";
CharacterBody.RecalculateStats += new Manipulator(RemoveVanillaCExpansion);
CharacterBody.RecalculateStats += new Manipulator(RemoveVanillaCExpansionBuff);
GlobalEventManager.onCharacterDeathGlobal += ApplyCExpansionBuff;
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(NewCExpansionBuff);
CharacterBody.AddTimedBuff_BuffDef_float += new hook_AddTimedBuff_BuffDef_float(ResetCExpansionBuff);
CharacterBody.UpdateMultiKill += new hook_UpdateMultiKill(RemoveVanillaCExpansionMultiKillUpdate);
CharacterBody.AddMultiKill += new hook_AddMultiKill(RemoveVanillaCExpansionMultiKill);
}
private void RemoveVanillaCExpansionMultiKillUpdate(orig_UpdateMultiKill orig, CharacterBody self, float deltaTime)
{
}
private void RemoveVanillaCExpansionMultiKill(orig_AddMultiKill orig, CharacterBody self, int count)
{
}
private void RemoveVanillaCExpansionBuff(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Buffs), "IncreaseDamageBuff")
}))
{
val.Remove();
val.Emit<SOTSItemRework>(OpCodes.Ldsfld, "emptyBuff");
}
else
{
Debug.LogError((object)"SOTSItemRework: Removing vanilla CExpansion buff hook failed.");
}
}
private void ResetCExpansionBuff(orig_AddTimedBuff_BuffDef_float orig, CharacterBody self, BuffDef buffDef, float duration)
{
//IL_0001: 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_0029: 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)
if (buffDef.buffIndex == Buffs.IncreaseDamageBuff.buffIndex)
{
foreach (TimedBuff timedBuff in self.timedBuffs)
{
if (timedBuff.buffIndex == Buffs.IncreaseDamageBuff.buffIndex)
{
timedBuff.timer = duration;
}
}
}
orig.Invoke(self, buffDef, duration);
}
private void ApplyCExpansionBuff(DamageReport dmgReport)
{
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)dmgReport.attacker) || !Object.op_Implicit((Object)(object)dmgReport.attackerBody) || !Object.op_Implicit((Object)(object)dmgReport.victim) || !Object.op_Implicit((Object)(object)dmgReport.victimBody) || !NetworkServer.active)
{
return;
}
CharacterBody attackerBody = dmgReport.attackerBody;
if (Object.op_Implicit((Object)(object)attackerBody.inventory) && NetworkServer.active)
{
int itemCount = attackerBody.inventory.GetItemCount(Items.IncreaseDamageOnMultiKill);
if (itemCount > 0)
{
float num = 1.5f + 1.5f * (float)itemCount;
attackerBody.AddTimedBuffAuthority(Buffs.IncreaseDamageBuff.buffIndex, num);
}
}
}
private void RemoveVanillaCExpansion(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "IncreaseDamageOnMultiKill")
}))
{
val.Remove();
val.Emit<SOTSItemRework>(OpCodes.Ldsfld, "emptyItem");
}
else
{
Debug.LogError((object)"SOTSItemRework: Removing vanilla CExpansion hook failed.");
}
}
private void NewCExpansionBuff(CharacterBody sender, StatHookEventArgs args)
{
int buffCount = sender.GetBuffCount(Buffs.IncreaseDamageBuff);
if (buffCount > 0)
{
args.critAdd += 5f * (float)buffCount;
}
}
}
public class KnockbackFin
{
private ItemDef finDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/KnockBackHitEnemies/KnockBackHitEnemies.asset").WaitForCompletion();
public KnockbackFin()
{
//IL_0006: 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_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Expected O, but got Unknown
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Expected O, but got Unknown
finDef.nameToken = "Nimble Fin";
finDef.descriptionToken = "Increase jump height by <style=cIsUtility>20%</style> <style=cStack>(+20% per stack)</style>.";
finDef.pickupToken = "Increase jump height by 20%.";
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(NewFin);
GlobalEventManager.ProcessHitEnemy += new Manipulator(RemoveVanillaFin);
}
private void NewFin(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender.inventory))
{
int itemCount = sender.inventory.GetItemCount(Items.KnockBackHitEnemies);
if (itemCount > 0)
{
args.jumpPowerMultAdd += 0.2f * (float)itemCount;
}
}
}
private void RemoveVanillaFin(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "KnockBackHitEnemies")
}))
{
val.Remove();
val.Emit<SOTSItemRework>(OpCodes.Ldsfld, "emptyItem");
}
else
{
Debug.LogError((object)"SOTSItemRework: Removing vanilla Fin hook failed.");
}
}
}
public class WarpedEcho
{
private ItemDef echoDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/DelayedDamage/DelayedDamage.asset").WaitForCompletion();
public WarpedEcho()
{
//IL_0006: 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_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Expected O, but got Unknown
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Expected O, but got Unknown
//IL_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_0081: Expected O, but got Unknown
echoDef.nameToken = "Wanderer's Compass";
echoDef.descriptionToken = "Increase sprint speed by <style=cIsUtility>35%</style> <style=cStack>(+35% per stack)</style> while out of combat.";
echoDef.pickupToken = "Increase sprint speed while out of combat.";
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(SpeedEcho);
DelayedDamageBehavior.Update += new hook_Update(RemoveVanillaEchoBehavior);
CharacterBody.UpdateDelayedDamage += new hook_UpdateDelayedDamage(RemoveVanillaEcho);
}
private void RemoveVanillaEcho(orig_UpdateDelayedDamage orig, CharacterBody self, float deltaTime)
{
}
private void RemoveVanillaEchoBehavior(orig_Update orig, DelayedDamageBehavior self)
{
}
private void SpeedEcho(CharacterBody sender, StatHookEventArgs args)
{
if (Object.op_Implicit((Object)(object)sender.inventory))
{
int itemCount = sender.inventory.GetItemCount(Items.DelayedDamage);
if (itemCount > 0 && sender.outOfCombat)
{
args.sprintSpeedAdd += 0.35f * (float)itemCount;
}
}
}
}
}
namespace SOTSItemRework.Items.Red
{
public class GrowthNectar
{
private ItemDef nectarDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/BoostAllStats/BoostAllStats.asset").WaitForCompletion();
public GrowthNectar()
{
//IL_0006: 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_0055: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Expected O, but got Unknown
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_0070: Expected O, but got Unknown
nectarDef.nameToken = "Vitality Nectar";
nectarDef.descriptionToken = "Gain a <style=cIsUtility>20%</style> <style=cStack>(+20% per stack)</style> stat boost while health is <style=cIsHealth>below 100%</style>.";
nectarDef.pickupToken = "Gain a 20% stat boost while health is below 100%.";
CharacterBody.RecalculateStats += new hook_RecalculateStats(AddNewNectar);
CharacterBody.UpdateBoostAllStatsTimer += new hook_UpdateBoostAllStatsTimer(RemoveVanillaNectarTimer);
}
private void RemoveVanillaNectarTimer(orig_UpdateBoostAllStatsTimer orig, CharacterBody self, float deltaTime)
{
}
private void AddNewNectar(orig_RecalculateStats orig, CharacterBody self)
{
//IL_009a: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self);
if (!Object.op_Implicit((Object)(object)self) || !Object.op_Implicit((Object)(object)self.inventory))
{
return;
}
if (self.inventory.GetItemCount(Items.BoostAllStats) > 0)
{
if (Object.op_Implicit((Object)(object)self.healthComponent) && self.healthComponent.combinedHealthFraction < 1f && self.GetBuffCount(Buffs.BoostAllStatsBuff) == 0)
{
self.SetBuffCount(Buffs.BoostAllStatsBuff.buffIndex, 1);
}
}
else if (self.inventory.GetItemCount(Items.BoostAllStats) <= 0 && self.GetBuffCount(Buffs.BoostAllStatsBuff) > 0)
{
self.SetBuffCount(Buffs.BoostAllStatsBuff.buffIndex, 0);
}
}
}
public class RunicLens
{
private ItemDef lensDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/MeteorAttackOnHighDamage/MeteorAttackOnHighDamage.asset").WaitForCompletion();
private static GameObject tracerEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/TracerGolem.prefab").WaitForCompletion();
private static GameObject hitEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/ExplosionGolem.prefab").WaitForCompletion();
private static GameObject muzzleEffectPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Golem/MuzzleflashGolem.prefab").WaitForCompletion();
public RunicLens()
{
//IL_0006: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Expected O, but got Unknown
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_0091: Expected O, but got Unknown
List<ItemTag> list = lensDef.tags.ToList();
list.Add((ItemTag)11);
list.Add((ItemTag)4);
lensDef.tags = list.ToArray();
lensDef.descriptionToken = "Fire a retalitory laser on taking <style=cIsUtility>10% max health or more</style> as damage. Laser base damage <style=cIsHealth>scales with percent of max health lost</style>, multiplied by <style=cIsUtility>1</style><style=cStack> (+1 per stack)</style>.";
lensDef.pickupToken = "Fire a retalitory laser blast upon taking high damage.";
HealthComponent.TakeDamageProcess += new hook_TakeDamageProcess(AddNewLens);
MeteorAttackOnHighDamageBehavior.FixedUpdate += new hook_FixedUpdate(RemoveVanillaLens);
}
private void RemoveVanillaLens(orig_FixedUpdate orig, MeteorAttackOnHighDamageBehavior self)
{
}
private void AddNewLens(orig_TakeDamageProcess orig, HealthComponent self, DamageInfo damageInfo)
{
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_0139: Unknown result type (might be due to invalid IL or missing references)
//IL_0145: 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_0158: Unknown result type (might be due to invalid IL or missing references)
//IL_015d: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_0170: Unknown result type (might be due to invalid IL or missing references)
//IL_017b: Unknown result type (might be due to invalid IL or missing references)
//IL_017d: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: Unknown result type (might be due to invalid IL or missing references)
//IL_0192: Unknown result type (might be due to invalid IL or missing references)
//IL_0194: Unknown result type (might be due to invalid IL or missing references)
//IL_0199: Unknown result type (might be due to invalid IL or missing references)
//IL_019f: Unknown result type (might be due to invalid IL or missing references)
//IL_01a4: Unknown result type (might be due to invalid IL or missing references)
//IL_01a6: Unknown result type (might be due to invalid IL or missing references)
//IL_01b0: Unknown result type (might be due to invalid IL or missing references)
//IL_01b2: 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_01be: Expected O, but got Unknown
//IL_01c3: 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_01ca: Unknown result type (might be due to invalid IL or missing references)
//IL_01da: Expected O, but got Unknown
if (!self.alive || self.godMode || (double)self.ospTimer > 0.0 || damageInfo.rejected)
{
return;
}
if (Object.op_Implicit((Object)(object)self.body) && Object.op_Implicit((Object)(object)self.body.inventory))
{
int itemCount = self.body.inventory.GetItemCount(Items.MeteorAttackOnHighDamage);
if (itemCount > 0 && Object.op_Implicit((Object)(object)damageInfo.attacker) && Object.op_Implicit((Object)(object)damageInfo.attacker.GetComponent<CharacterBody>()))
{
CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
CharacterBody body = self.body;
float num = damageInfo.damage / self.fullCombinedHealth * 100f;
Debug.LogWarning((object)("full combined hp " + self.fullCombinedHealth));
Debug.LogWarning((object)("hp nm: " + num));
Debug.LogWarning((object)("damage: " + damageInfo.damage));
num *= 1f * (float)itemCount;
if (num < 10f)
{
orig.Invoke(self, damageInfo);
return;
}
Util.PlaySound("Play_golem_laser_fire", ((Component)body).gameObject);
new BlastAttack
{
attacker = ((Component)body).gameObject,
inflictor = ((Component)body).gameObject,
teamIndex = TeamComponent.GetObjectTeam(((Component)body).gameObject),
baseDamage = body.damage * num,
baseForce = 500f,
position = component.corePosition,
radius = 1f,
falloffModel = (FalloffModel)0
}.Fire();
EffectData val = new EffectData
{
origin = component.corePosition,
start = body.corePosition
};
EffectManager.SpawnEffect(muzzleEffectPrefab, new EffectData
{
origin = body.corePosition
}, true);
EffectManager.SpawnEffect(tracerEffectPrefab, val, true);
EffectManager.SpawnEffect(hitEffectPrefab, val, true);
}
}
orig.Invoke(self, damageInfo);
}
}
public class WarBonds
{
private ItemDef bondDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/GoldOnStageStart/GoldOnStageStart.asset").WaitForCompletion();
private static GameObject orbitalProjectile = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Junk/Captain/CaptainAirstrikeProjectile2.prefab").WaitForCompletion();
public WarBonds()
{
//IL_0006: 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_006b: Unknown result type (might be due to invalid IL or missing references)
//IL_0075: Expected O, but got Unknown
//IL_007c: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Expected O, but got Unknown
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Expected O, but got Unknown
orbitalProjectile.AddComponent<ProjectileGlue>();
orbitalProjectile.AddComponent<ProjectileTargetComponent>();
bondDef.nameToken = "Orbital Launch Codes";
bondDef.descriptionToken = "10% chance on hit to launch an orbital probe that deals <style=cIsUtility>750%</style> <style=cStack>(+750% per stack)</style> total damage.";
bondDef.pickupToken = "10% chance on hit to launch an orbital probe.";
GlobalEventManager.ProcessHitEnemy += new hook_ProcessHitEnemy(NewWarBond);
GoldOnStageStartBehaviour.OnEnable += new hook_OnEnable(RemoveVanillaBondOnEnable);
GoldOnStageStartBehaviour.OnDisable += new hook_OnDisable(RemoveVanillaBondOnDisable);
}
private void RemoveVanillaBondOnEnable(orig_OnEnable orig, GoldOnStageStartBehaviour self)
{
}
private void RemoveVanillaBondOnDisable(orig_OnDisable orig, GoldOnStageStartBehaviour self)
{
}
private void NewWarBond(orig_ProcessHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_00fa: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_013d: Unknown result type (might be due to invalid IL or missing references)
//IL_014d: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
//IL_0154: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, damageInfo, victim);
if ((double)damageInfo.procCoefficient == 0.0 || damageInfo.rejected || !NetworkServer.active || !Object.op_Implicit((Object)(object)damageInfo.attacker))
{
return;
}
CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
if (!Object.op_Implicit((Object)(object)component))
{
return;
}
CharacterMaster master = component.master;
if (!Object.op_Implicit((Object)(object)master))
{
return;
}
Inventory inventory = master.inventory;
if (!((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)22))
{
int itemCount = inventory.GetItemCount(Items.GoldOnStageStart);
if (itemCount > 0 && Util.CheckRoll(10f * damageInfo.procCoefficient, master))
{
float num = (float)(7.5 + 7.5 * (double)itemCount);
float damage = Util.OnHitProcDamage(damageInfo.damage, component.damage, num);
ProcChainMask procChainMask = default(ProcChainMask);
((ProcChainMask)(ref procChainMask)).AddProc((ProcType)22);
ProjectileManager.instance.FireProjectile(new FireProjectileInfo
{
projectilePrefab = orbitalProjectile,
position = damageInfo.position,
rotation = Quaternion.identity,
owner = damageInfo.attacker,
damage = damage,
force = 1000f,
crit = damageInfo.crit,
damageColorIndex = (DamageColorIndex)3,
target = victim,
procChainMask = procChainMask
});
}
}
}
}
}
namespace SOTSItemRework.Items.Green
{
public class ChanceDoll
{
private ItemDef dollDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/ExtraShrineItem/ExtraShrineItem.asset").WaitForCompletion();
public ChanceDoll()
{
//IL_0006: 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_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Expected O, but got Unknown
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
dollDef.descriptionToken = "Increase Luck by <style=cIsUtility>20%</style> <style=cStack>(+20% per stack)</style>.";
dollDef.pickupToken = "Increase Luck by 20%.";
ShrineChanceBehavior.AddShrineStack += new Manipulator(RemoveVanillaDoll);
CharacterMaster.OnInventoryChanged += new hook_OnInventoryChanged(AddDecimalLuck);
Util.CheckRoll_float_float_CharacterMaster += new hook_CheckRoll_float_float_CharacterMaster(CalculateDecimalLuck);
}
private void RemoveVanillaDoll(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "ExtraShrineItem")
}))
{
val.Remove();
val.Emit<SOTSItemRework>(OpCodes.Ldsfld, "emptyItem");
}
else
{
Debug.LogError((object)"SOTSItemRework: Removing vanilla Doll hook failed.");
}
}
private void AddDecimalLuck(orig_OnInventoryChanged orig, CharacterMaster self)
{
orig.Invoke(self);
if (self.inventory.GetItemCount(Items.ExtraShrineItem) > 0)
{
self.luck = 0f;
self.luck += (float)self.inventory.GetItemCount(Items.Clover);
self.luck -= (float)self.inventory.GetItemCount(Items.LunarBadLuck);
self.luck += 0.2f * (float)self.inventory.GetItemCount(Items.ExtraShrineItem);
}
}
private bool CalculateDecimalLuck(orig_CheckRoll_float_float_CharacterMaster orig, float percentChance, float luck, CharacterMaster effectOriginMaster)
{
if ((double)luck <= 0.0 || (double)luck % 1.0 == 0.0)
{
return orig.Invoke(percentChance, luck, effectOriginMaster);
}
if ((double)percentChance <= 0.0)
{
return false;
}
int num = Mathf.FloorToInt(Mathf.Abs(luck));
float num2 = Mathf.Abs(luck) - (float)num;
float num3 = Random.Range(0f, 100f);
for (int i = 0; i < num; i++)
{
float num4 = Random.Range(0f, 100f);
num3 = (((double)luck > 0.0) ? Mathf.Min(num3, num4) : Mathf.Max(num3, num4));
}
if ((double)num2 > 0.0)
{
float num5 = Random.Range(0f, 100f);
if ((double)luck > 0.0 && (double)num5 < (double)num2 * 100.0)
{
float num6 = Random.Range(0f, 100f);
num3 = Mathf.Min(num3, num6);
}
}
if ((double)num3 > (double)percentChance)
{
return false;
}
if (Object.op_Implicit((Object)(object)effectOriginMaster))
{
GameObject bodyObject = effectOriginMaster.GetBodyObject();
if (Object.op_Implicit((Object)(object)bodyObject))
{
CharacterBody component = bodyObject.GetComponent<CharacterBody>();
if (Object.op_Implicit((Object)(object)component))
{
component.wasLucky = true;
}
}
}
return true;
}
}
public class NoxiousThorn
{
private ItemDef thornDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/TriggerEnemyDebuffs/TriggerEnemyDebuffs.asset").WaitForCompletion();
private GameObject blightedMissile = PrefabAPI.InstantiateClone(Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/ElitePoison/UrchinSeekingProjectile.prefab").WaitForCompletion(), "BlightedThornMissileNux", false);
public NoxiousThorn()
{
//IL_0006: 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_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_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_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_0153: Expected O, but got Unknown
//IL_015a: Unknown result type (might be due to invalid IL or missing references)
//IL_0164: Expected O, but got Unknown
Object.Destroy((Object)(object)blightedMissile.GetComponent<ProjectileSimple>());
Object.Destroy((Object)(object)blightedMissile.GetComponent<ProjectileDirectionalTargetFinder>());
Object.Destroy((Object)(object)blightedMissile.GetComponent<ProjectileSteerTowardTarget>());
blightedMissile.GetComponent<ProjectileDamage>().damageType = DamageTypeCombo.op_Implicit((DamageType)1048576);
Rigidbody component = blightedMissile.GetComponent<Rigidbody>();
component.collisionDetectionMode = (CollisionDetectionMode)0;
component.useGravity = true;
component.freezeRotation = false;
blightedMissile.AddComponent<QuaternionPID>().gain = 25f;
MissileController obj = blightedMissile.AddComponent<MissileController>();
obj.acceleration = 3f;
obj.deathTimer = 16f;
obj.maxSeekDistance = 100f;
obj.maxVelocity = 35f;
obj.turbulence = 1f;
obj.delayTimer = 0.3f;
obj.giveupTimer = 8f;
ContentAddition.AddProjectile(blightedMissile);
thornDef.descriptionToken = "<style=cIsUtility>15%</style> chance to fire a seeking thorn that deals <style=cIsUtility>75%</style> <style=cStack>(+75% per stack)</style> total damage and blights enemies.";
thornDef.pickupToken = "Chance to fire a blighted seeking thorn.";
GlobalEventManager.ProcessHitEnemy += new hook_ProcessHitEnemy(NewThorn);
CharacterBody.TriggerEnemyDebuffs += new hook_TriggerEnemyDebuffs(RemoveVanillaThorn);
}
private void RemoveVanillaThorn(orig_TriggerEnemyDebuffs orig, CharacterBody self, DamageInfo damageInfo)
{
}
private void NewThorn(orig_ProcessHitEnemy orig, GlobalEventManager self, DamageInfo damageInfo, GameObject victim)
{
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self, damageInfo, victim);
if ((double)damageInfo.procCoefficient == 0.0 || damageInfo.rejected || !NetworkServer.active || !Object.op_Implicit((Object)(object)damageInfo.attacker))
{
return;
}
CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
if (!Object.op_Implicit((Object)(object)component))
{
return;
}
CharacterMaster master = component.master;
if (!Object.op_Implicit((Object)(object)master))
{
return;
}
Inventory inventory = master.inventory;
if (!((ProcChainMask)(ref damageInfo.procChainMask)).HasProc((ProcType)1))
{
int itemCount = inventory.GetItemCount(Items.TriggerEnemyDebuffs);
if (itemCount > 0 && Util.CheckRoll(15f * damageInfo.procCoefficient, master))
{
float num = 0.75f * (float)itemCount;
float num2 = Util.OnHitProcDamage(damageInfo.damage, component.damage, num);
Util.PlaySound("Play_elite_antiHeal_turret_shot", ((Component)component).gameObject);
MissileUtils.FireMissile(component.corePosition, component, damageInfo.procChainMask, victim, num2, damageInfo.crit, blightedMissile, (DamageColorIndex)3, true);
}
}
}
}
public class PrayerBeads
{
private ItemDef beadsDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/ExtraStatsOnLevelUp/ExtraStatsOnLevelUp.asset").WaitForCompletion();
public PrayerBeads()
{
//IL_0006: 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_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004f: Expected O, but got Unknown
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Expected O, but got Unknown
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
beadsDef.descriptionToken = "Grows in power by absorbing experience, storing <style=cIsUtility>5%</style> <style=cStack>(+5% per item stack)</style> of player stats per item level up.";
beadsDef.pickupToken = "Stores experience and gives stats on item level up.";
CharacterBody.RecalculateStats += new Manipulator(RemoveRemovalFunctionality);
CharacterBody.prayerBeadCalculateAppliedStats += new Manipulator(ReduceBeadStats);
CharacterBody.RecalculateStats += new hook_RecalculateStats(AddRemovalLogic);
}
private void AddRemovalLogic(orig_RecalculateStats orig, CharacterBody self)
{
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self);
if (Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(Items.ExtraStatsOnLevelUp) <= 0 && self.GetBuffCount(Buffs.ExtraStatsOnLevelUpBuff) > 0)
{
self.SetBuffCount(Buffs.ExtraStatsOnLevelUpBuff.buffIndex, 0);
}
}
private void ReduceBeadStats(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdcR4(x, 0.2f)
}))
{
val.Next.Operand = 0.05f;
}
else
{
Debug.LogError((object)"SOTSItemRework: Tweaking Beads stats hook failed.");
}
}
private void RemoveRemovalFunctionality(ILContext il)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
if (val.TryGotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdsfld(x, typeof(Items), "ExtraStatsOnLevelUp")
}))
{
val.Remove();
val.Emit<SOTSItemRework>(OpCodes.Ldsfld, "emptyItem");
}
else
{
Debug.LogError((object)"SOTSItemRework: Removing vanilla Beads hook failed.");
}
}
}
public class UnstableTransmitter
{
private ItemDef transmitterDef = Addressables.LoadAssetAsync<ItemDef>((object)"RoR2/DLC2/Items/TeleportOnLowHealth/TeleportOnLowHealth.asset").WaitForCompletion();
private static EquipmentDef transmitterEquip;
public UnstableTransmitter()
{
//IL_0006: 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_0025: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0134: Unknown result type (might be due to invalid IL or missing references)
//IL_013e: Expected O, but got Unknown
//IL_0145: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Expected O, but got Unknown
//IL_0156: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Expected O, but got Unknown
//IL_0167: Unknown result type (might be due to invalid IL or missing references)
//IL_0171: Expected O, but got Unknown
transmitterDef.deprecatedTier = (ItemTier)5;
transmitterDef.tier = (ItemTier)5;
transmitterEquip = ScriptableObject.CreateInstance<EquipmentDef>();
transmitterEquip.appearsInMultiPlayer = true;
transmitterEquip.appearsInSinglePlayer = true;
transmitterEquip.canBeRandomlyTriggered = false;
transmitterEquip.canDrop = false;
transmitterEquip.colorIndex = (ColorIndex)5;
transmitterEquip.cooldown = 20f;
transmitterEquip.isLunar = false;
transmitterEquip.isBoss = false;
transmitterEquip.enigmaCompatible = false;
transmitterEquip.pickupIconSprite = SOTSItemRework.transmitterEquipIcon;
transmitterEquip.pickupModelPrefab = transmitterDef.pickupModelPrefab;
transmitterEquip.nameToken = transmitterDef.nameToken;
((Object)transmitterEquip).name = "transmitter";
transmitterEquip.descriptionToken = "Enter a dimensional rift, teleporting forwards and damaging nearby enemies for <style=cIsUtility>400%</style> base damage when entering and exiting the rift.";
transmitterEquip.pickupToken = "Enter a dimensional rift, teleporting forwards and damaging nearby enemies when entering and exiting the rift.";
transmitterEquip.loreToken = transmitterDef.loreToken;
ContentAddition.AddEquipmentDef(transmitterEquip);
EquipmentSlot.PerformEquipmentAction += new hook_PerformEquipmentAction(PerformEquipmentAction);
TeleportOnLowHealthBehavior.Start += new hook_Start(RemoveVanillaTransmitterStart);
TeleportOnLowHealthBehavior.Update += new hook_Update(RemoveVanillaTransmitterUpdate);
TeleportOnLowHealthBehavior.OnDisable += new hook_OnDisable(RemoveVanillaTransmitterDisable);
}
private bool PerformEquipmentAction(orig_PerformEquipmentAction orig, EquipmentSlot self, EquipmentDef equipmentDef)
{
if (!((Object)(object)equipmentDef == (Object)(object)transmitterEquip))
{
return orig.Invoke(self, equipmentDef);
}
return ActivateEquipment(self);
}
protected bool ActivateEquipment(EquipmentSlot slot)
{
EntityStateMachine[] components = ((Component)slot.characterBody).GetComponents<EntityStateMachine>();
foreach (EntityStateMachine val in components)
{
if (val.customName == "Body")
{
val.SetInterruptState((EntityState)(object)new TransmitterBlink(), (InterruptPriority)5);
}
}
return true;
}
private void RemoveVanillaTransmitterStart(orig_Start orig, TeleportOnLowHealthBehavior self)
{
}
private void RemoveVanillaTransmitterUpdate(orig_Update orig, TeleportOnLowHealthBehavior self)
{
}
private void RemoveVanillaTransmitterDisable(orig_OnDisable orig, TeleportOnLowHealthBehavior self)
{
}
}
}