using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
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.Logging;
using EntityStates;
using EntityStates.NullifierMonster;
using HG;
using HG.Reflection;
using JetBrains.Annotations;
using KinematicCharacterController;
using Microsoft.CodeAnalysis;
using On.RoR2;
using R2API;
using R2API.Networking;
using R2API.Networking.Interfaces;
using RoR2;
using RoR2.Audio;
using RoR2.CharacterAI;
using RoR2.EntitlementManagement;
using RoR2.ExpansionManagement;
using RoR2.HudOverlay;
using RoR2.Navigation;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.AddressableAssets;
using UnityEngine.Audio;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.UI;
using Vrab.Skills;
using Vrab.States;
using Vrab.Utils;
using Vrab.Utils.Assets;
using Vrab.Utils.Components;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = ".NET Standard 2.1")]
[assembly: AssemblyCompany("Vrab")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Vrab")]
[assembly: AssemblyTitle("Vrab")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: UnverifiableCode]
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 Vrab
{
[BepInPlugin("pseudopulse.Vrab", "Vrab", "1.0.0")]
public class Main : BaseUnityPlugin
{
public const string PluginGUID = "pseudopulse.Vrab";
public const string PluginAuthor = "pseudopulse";
public const string PluginName = "Vrab";
public const string PluginVersion = "1.0.0";
public static ManualLogSource ModLogger;
public static AssetBundle Assets;
public void Awake()
{
ModLogger = ((BaseUnityPlugin)this).Logger;
Assets = AssetBundle.LoadFromFile(Assembly.GetExecutingAssembly().Location.Replace("Vrab.dll", "vrabassets"));
SwapAllShaders(Assets);
ScanTypes(delegate(SkillBase x)
{
x.Init();
});
ScanTypes(delegate(SurvivorBase x)
{
x.Init();
});
ScanTypesNoInstance<EntityState>(delegate(Type x)
{
//IL_0004: Unknown result type (might be due to invalid IL or missing references)
bool flag = default(bool);
ContentAddition.AddEntityState(x, ref flag);
});
NetworkingAPI.RegisterMessageType<SyncVrabTarget>();
}
internal static void ScanTypesNoInstance<T>(Action<Type> action)
{
IEnumerable<Type> enumerable = from x in Assembly.GetExecutingAssembly().GetTypes()
where !x.IsAbstract && x.IsSubclassOf(typeof(T))
select x;
foreach (Type item in enumerable)
{
action(item);
}
}
public static T Load<T>(string path) where T : Object
{
return Assets.LoadAsset<T>(path);
}
internal static void ScanTypes<T>(Action<T> action)
{
IEnumerable<Type> enumerable = from x in Assembly.GetExecutingAssembly().GetTypes()
where !x.IsAbstract && x.IsSubclassOf(typeof(T))
select x;
foreach (Type item in enumerable)
{
T obj = (T)Activator.CreateInstance(item);
action(obj);
}
}
public void SwapAllShaders(AssetBundle bundle)
{
Material[] array = bundle.LoadAllAssets<Material>();
Material[] array2 = array;
foreach (Material val in array2)
{
switch (((Object)val.shader).name)
{
case "Hopoo Games/FX/Cloud Remap":
val.shader = Shader.HGCloudRemap;
break;
case "Stubbed Hopoo Games/Deferred/Standard":
val.shader = Resources.Load<Shader>("shaders/deferred/hgstandard");
break;
case "StubbedShader/deferred/hgstandard":
val.shader = Shader.HGStandard;
break;
case "StubbedShader/fx/hgintersectioncloudremap":
val.shader = Resources.Load<Shader>("shaders/fx/hgintersectioncloudremap");
break;
case "Stubbed Hopoo Games/Deferred/Snow Topped":
val.shader = Resources.Load<Shader>("shaders/deferred/hgsnowtopped");
break;
case "Stubbed Hopoo Games/FX/Cloud Remap":
val.shader = Resources.Load<Shader>("shaders/fx/hgcloudremap");
break;
case "Stubbed Hopoo Games/FX/Cloud Intersection Remap":
val.shader = Resources.Load<Shader>("shaders/fx/hgintersectioncloudremap");
break;
case "Stubbed Hopoo Games/FX/Opaque Cloud Remap":
val.shader = Resources.Load<Shader>("shaders/fx/hgopaquecloudremap");
break;
case "Stubbed Hopoo Games/FX/Distortion":
val.shader = Resources.Load<Shader>("shaders/fx/hgdistortion");
break;
case "Stubbed Hopoo Games/FX/Solid Parallax":
val.shader = Resources.Load<Shader>("shaders/fx/hgsolidparallax");
break;
case "Stubbed Hopoo Games/Environment/Distant Water":
val.shader = Resources.Load<Shader>("shaders/environment/hgdistantwater");
break;
case "StubbedRoR2/Base/Shaders/HGStandard":
val.shader = LegacyShaderAPI.Find("Hopoo Games/Deferred/Standard");
break;
case "StubbedRoR2/Base/Shaders/HGCloudRemap":
val.shader = Shader.HGCloudRemap;
break;
case "StubbedRoR2/Base/Shaders/HGIntersectionCloudRemap":
val.shader = LegacyShaderAPI.Find("Hopoo Games/FX/Cloud Intersection Remap");
break;
}
}
}
}
public abstract class SkillBase<T> : SkillBase where T : SkillBase<T>
{
public static T instance;
public static implicit operator SkillDef(SkillBase<T> skill)
{
return skill.skillDef;
}
public SkillBase()
{
instance = this as T;
}
}
public abstract class SkillBase
{
public SkillDef skillDef;
public abstract string Name { get; }
public abstract string Description { get; }
public virtual string LangToken => GetType().Name.ToUpper();
public string NameToken => "Vrab_SKILL_" + LangToken + "_NAME";
public string DescToken => "Vrab_SKILL_" + LangToken + "_DESC";
public abstract Type ActivationStateType { get; }
public abstract string ActivationMachineName { get; }
public abstract float Cooldown { get; }
public virtual bool BeginCooldownOnSkillEnd { get; } = false;
public virtual bool MustKeyPress { get; } = false;
public virtual int MaxStock { get; } = 1;
public virtual int StockToConsume { get; } = 1;
public virtual int RechargeStock { get; } = 1;
public virtual bool Agile { get; } = false;
public virtual bool CanceledFromSprinting => false;
public virtual string[] Keywords { get; } = null;
public virtual bool IsCombat => true;
public virtual InterruptPriority InterruptPriority => (InterruptPriority)1;
public virtual bool FullRestockOnAssign { get; } = true;
public abstract Sprite Icon { get; }
private static bool DefaultEnabledCallback(SkillBase self)
{
return true;
}
public virtual void Init()
{
CreateSkillDef();
SetupSkillDef();
CreateLang();
}
public virtual void CreateSkillDef()
{
skillDef = ScriptableObject.CreateInstance<SkillDef>();
}
public virtual void SetupSkillDef()
{
//IL_00a9: 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_00fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
skillDef.skillName = Name;
skillDef.skillNameToken = NameToken;
skillDef.skillDescriptionToken = DescToken;
skillDef.baseRechargeInterval = Cooldown;
skillDef.canceledFromSprinting = CanceledFromSprinting;
skillDef.cancelSprintingOnActivation = !Agile;
skillDef.baseMaxStock = MaxStock;
skillDef.stockToConsume = StockToConsume;
skillDef.activationStateMachineName = ActivationMachineName;
skillDef.activationState = new SerializableEntityStateType(ActivationStateType);
skillDef.icon = Icon;
skillDef.rechargeStock = RechargeStock;
skillDef.isCombatSkill = IsCombat;
skillDef.keywordTokens = Keywords;
skillDef.interruptPriority = InterruptPriority;
skillDef.beginSkillCooldownOnSkillEnd = BeginCooldownOnSkillEnd;
skillDef.mustKeyPress = MustKeyPress;
skillDef.fullRestockOnAssign = FullRestockOnAssign;
ContentAddition.AddSkillDef(skillDef);
}
public virtual void CreateLang()
{
NameToken.Add(Name);
DescToken.Add(Description);
}
public string GetConfigName()
{
return Name;
}
}
public abstract class SurvivorBase<T> : SurvivorBase where T : SurvivorBase<T>
{
public static T instance;
public SurvivorBase()
{
instance = this as T;
}
}
public abstract class SurvivorBase
{
public GameObject Body;
public GameObject Master;
public SurvivorDef SurvivorDef;
public SkinDef mastery;
public abstract string Name { get; }
public abstract string Description { get; }
public abstract string Subtitle { get; }
public abstract string Outro { get; }
public abstract string Failure { get; }
public static bool DefaultEnabledCallback(SurvivorBase self)
{
return true;
}
public virtual void Init()
{
LoadAssets();
CreateLang();
ContentAddition.AddBody(Body);
ContentAddition.AddMaster(Master);
ContentAddition.AddSurvivorDef(SurvivorDef);
}
public virtual void LoadAssets()
{
}
public virtual void CreateLang()
{
CharacterBody component = Body.GetComponent<CharacterBody>();
component.baseNameToken.Add(Name);
component.subtitleNameToken.Add(Subtitle);
SurvivorDef.outroFlavorToken.Add(Outro);
SurvivorDef.mainEndingEscapeFailureFlavorToken.Add(Failure);
SurvivorDef.descriptionToken.Add(Description);
}
public EntityStateMachine AddESM(GameObject prefab, string name, SerializableEntityStateType initial)
{
//IL_0010: 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_0017: 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)
EntityStateMachine val = prefab.AddComponent<EntityStateMachine>();
val.customName = name;
val.initialStateType = initial;
val.mainStateType = initial;
return val;
}
public void SwapMaterials(GameObject prefab, Material mat, bool all = false, List<int> renders = null)
{
CharacterModel componentInChildren = prefab.GetComponentInChildren<CharacterModel>();
if (all)
{
for (int i = 0; i < componentInChildren.baseRendererInfos.Length; i++)
{
componentInChildren.baseRendererInfos[i].defaultMaterial = mat;
}
}
if (renders == null)
{
return;
}
foreach (int render in renders)
{
componentInChildren.baseRendererInfos[render].defaultMaterial = mat;
}
}
public void ReplaceSkills(GenericSkill slot, params SkillDef[] skills)
{
//IL_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Expected O, but got Unknown
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
SkillFamily val = ScriptableObject.CreateInstance<SkillFamily>();
((Object)val).name = slot.skillName ?? "default";
List<Variant> list = new List<Variant>();
foreach (SkillDef val2 in skills)
{
Variant item = new Variant
{
skillDef = val2
};
((Variant)(ref item)).viewableNode = new Node(val2.skillNameToken, false, (Node)null);
list.Add(item);
}
val.variants = list.ToArray();
slot._skillFamily = val;
ContentAddition.AddSkillFamily(val);
}
public string GetConfigName()
{
return Name;
}
}
public class DataMeter : MonoBehaviour
{
public float Data = 0f;
public float MaxData = 100f;
public OverlayController controller;
public float errTime = 0f;
public float errPerct = 1f;
public void Start()
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
controller = HudOverlayManager.AddOverlay(((Component)this).gameObject, new OverlayCreationParams
{
prefab = Survivor.OverlayMeter,
childLocatorEntry = "CrosshairExtras"
});
controller.onInstanceAdded += OnAdded;
}
private void OnAdded(OverlayController controller, GameObject @object)
{
@object.GetComponent<CrosshairDataMeterSync>().meter = this;
}
public void OnDestroy()
{
if (controller != null)
{
HudOverlayManager.RemoveOverlay(controller);
controller.onInstanceAdded -= OnAdded;
}
}
public void AddData(float amount)
{
Data += amount;
if (Data > MaxData)
{
Data = MaxData;
}
}
public void SpendData(float amount)
{
Data -= amount;
if (Data < 0f)
{
Data = 0f;
}
}
}
public class CrosshairDataMeterSync : MonoBehaviour
{
public ImageFillController controller;
public DataMeter meter;
public HGTextMeshProUGUI text;
public Image errorImage;
public void Start()
{
controller = ((Component)this).GetComponent<ImageFillController>();
errorImage = controller.images[2];
text = ((Component)this).GetComponentInChildren<HGTextMeshProUGUI>();
}
public void Update()
{
if (Object.op_Implicit((Object)(object)meter))
{
if (meter.errTime > 0f)
{
meter.errTime -= Time.fixedDeltaTime;
((TMP_Text)text).text = "!ERR!MISSING\nDATA";
errorImage.fillAmount = meter.errPerct;
}
else
{
controller.fillScalar = 1f;
controller.SetTValue(meter.Data / meter.MaxData);
errorImage.fillAmount = 0f;
((TMP_Text)text).text = $"{Mathf.Floor(meter.Data / meter.MaxData * 100f)}%";
}
}
}
}
public class SimulatedAIModifier : MonoBehaviour
{
public BaseAI ai;
public void Start()
{
ai = ((Component)this).GetComponent<BaseAI>();
}
public void FixedUpdate()
{
if ((Object.op_Implicit((Object)(object)ai) && (Object)(object)ai.currentEnemy.gameObject != (Object)null && (!Object.op_Implicit((Object)(object)ai.currentEnemy.bestHurtBox) || !((Behaviour)ai.currentEnemy.bestHurtBox).enabled)) || !Object.op_Implicit((Object)(object)ai.currentEnemy.healthComponent) || !ai.currentEnemy.healthComponent.alive)
{
ai.currentEnemy.gameObject = null;
ai.ForceAcquireNearestEnemyIfNoCurrentEnemy();
}
}
}
public class TargetTracker : HurtboxTracker
{
public override void Start()
{
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
targetingIndicatorPrefab = Survivor.TargetPainter;
maxSearchAngle = 30f;
maxSearchDistance = 70f;
targetType = TargetType.Enemy;
userIndex = (TeamIndex)1;
base.Start();
}
}
public class SyncVrabTarget : INetMessage, ISerializableObject
{
private Transform target;
private GameObject tracker;
public SyncVrabTarget(GameObject obj, Transform transform)
{
target = transform;
tracker = obj;
}
public SyncVrabTarget()
{
}
void ISerializableObject.Deserialize(NetworkReader reader)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
HurtBoxReference val = NetworkExtensions.ReadHurtBoxReference(reader);
target = ((Component)((HurtBoxReference)(ref val)).ResolveHurtBox()).transform;
tracker = reader.ReadGameObject();
}
void ISerializableObject.Serialize(NetworkWriter writer)
{
//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_0013: Unknown result type (might be due to invalid IL or missing references)
HurtBoxReference val = HurtBoxReference.FromHurtBox(((Component)target).GetComponent<HurtBox>());
NetworkExtensions.Write(writer, val);
writer.Write(tracker);
}
void INetMessage.OnReceived()
{
tracker.GetComponent<TargetTracker>().target = target;
}
}
public class Survivor : SurvivorBase<Survivor>
{
public static LazyIndex VrabIndex = new LazyIndex("VrabBody");
public static GameObject TargetPainter;
public static GameObject Display;
public static GameObject DeconstructBeam;
public static GameObject OverlayMeter;
public static ItemDef SimulMarker;
public static Material matVrabHologram;
public static GameObject SummonHoloEffect;
public static GameObject ScanEffect;
public static GameObject AnalysisBoltProjectile;
public static BuffDef bdOverload;
public static GameObject RefreshEffect;
public override string Name => "Vrab";
public override string Description => "thats so awesome we call that a vrab void crab what the fuck is that\n\n< ! > Deconstruct cannot miss, but may only be used on the ground.\n< ! > Analyze can collect large amounts of data while clearing out dangerous projectiles.\n< ! > Refresh can boost your holograms at the expense of boosting enemies caught in the blast.\n< ! > To offset Deconstruct's middling damage, utilize your data to construct holograms of powerful enemies with Simulate.\n";
public override string Subtitle => "Luminescent Carrier";
public override string Outro => "...and so it left, its curiosity satiated.";
public override string Failure => "...and so it vanished, its data forever lost.";
public override void LoadAssets()
{
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_0287: Unknown result type (might be due to invalid IL or missing references)
//IL_02b8: Unknown result type (might be due to invalid IL or missing references)
//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
//IL_03ac: Expected O, but got Unknown
//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
//IL_03be: Expected O, but got Unknown
//IL_03c6: Unknown result type (might be due to invalid IL or missing references)
//IL_03d0: Expected O, but got Unknown
//IL_047b: Unknown result type (might be due to invalid IL or missing references)
//IL_0485: Unknown result type (might be due to invalid IL or missing references)
Body = Main.Load<GameObject>("VrabBody.prefab");
Display = Main.Load<GameObject>("VrabDisplay.prefab");
Master = PrefabAPI.InstantiateClone(GameObject.TreebotMonsterMaster, "VrabMaster");
CharacterMaster component = Master.GetComponent<CharacterMaster>();
component.bodyPrefab = Body;
SurvivorDef = Main.Load<SurvivorDef>("sdVrab.asset");
Body.GetComponent<KinematicCharacterMotor>().playerCharacter = true;
ContentAddition.AddNetworkedObject(Body);
PrefabAPI.RegisterNetworkPrefab(Body);
Body.GetComponent<CameraTargetParams>().cameraParams = CharacterCameraParams.ccpTreebot;
Body.AddComponent<TargetTracker>();
Body.GetComponent<CharacterDeathBehavior>().deathState = new SerializableEntityStateType(typeof(DeathState));
EntityStateMachine.FindByCustomName(Body, "Body").mainStateType = new SerializableEntityStateType(typeof(PelagicDrift));
SwapMaterial("mdlVoidWardCrab", 0, Material.matVoidwardCrabPurple);
SwapMaterial("mdlVoidWardCrabArmRings", 1, Material.matNullifierArmor);
SwapMaterial("mdlVoidWardCrabEyes", 2, Material.matVoidwardCrabEyes);
SwapMaterial("mdlVoidWardCrabMouth", 3, Material.matVoidwardCrabMouth);
SwapMaterial("mdlVoidWardCrabWardMetal", 4, Material.matArenaTrim);
SwapMaterial("mdlVoidWardCrabWardSphere", 5, Material.matArenaTerrainGem);
SkillLocator component2 = Body.GetComponent<SkillLocator>();
component2.passiveSkill.skillNameToken = "VRAB_PASSIVE_NAME";
component2.passiveSkill.skillDescriptionToken = "VRAB_PASSIVE_DESC";
component2.passiveSkill.keywordToken = "KEYWORD_DATA";
"VRAB_PASSIVE_NAME".Add("Pelagic Drift");
"VRAB_PASSIVE_DESC".Add("The Vrab has a <style=cIsUtility>slower falling speed</style> and can <style=cIsUtility>ascend</style> by <style=cIsDamage>holding jump</style>, at the cost of <style=cDeath>data</style>. You may not <style=cDeath>Deconstruct</style> while drifting.");
ReplaceSkills(component2.primary, SkillBase<Vrab.Skills.Deconstruct>.instance.skillDef);
ReplaceSkills(component2.secondary, SkillBase<Vrab.Skills.Analyze>.instance.skillDef);
ReplaceSkills(component2.utility, SkillBase<Vrab.Skills.Refresh>.instance.skillDef);
ReplaceSkills(component2.special, SkillBase<Vrab.Skills.Simulate>.instance.skillDef);
"KEYWORD_DATA".Add("<style=cKeywordName>Data</style>Data is a resource used by skills.");
"KEYWORD_SIMULATION".Add("<style=cKeywordName>Simulation</style>Simulated enemies <style=cIsUtility>inherit your items</style> and <style=cDeath>lose health over 60s</style>.");
"KEYWORD_OVERLOAD".Add("<style=cKeywordName>Overload</style>Overloaded characters attack <style=cIsDamage>50%</style> faster and move <style=cIsDamage>100%</style> faster.");
TargetPainter = PrefabAPI.InstantiateClone(GameObject.EngiMissileTrackingIndicator, "VrabTargetPainter");
SpriteRenderer val = TargetPainter.FindComponent<SpriteRenderer>("Base Core");
val.color = Color.magenta;
val.sprite = Texture2D.texCaptainCrosshairInner.MakeSprite();
((Component)val).transform.localScale = new Vector3(0.015f, 0.015f, 0.015f);
DeconstructBeam = Main.Load<GameObject>("DeconstructBeam.prefab");
DetachLineRendererAndFade detachLineRendererAndFade = DeconstructBeam.AddComponent<DetachLineRendererAndFade>();
detachLineRendererAndFade.line = DeconstructBeam.GetComponentInChildren<LineRenderer>();
detachLineRendererAndFade.decayTime = 0.4f;
ScanEffect = Main.Load<GameObject>("ScanEffect.prefab");
ScanEffect.AddComponent<EffectComponent>().applyScale = true;
ContentAddition.AddEffect(ScanEffect);
RefreshEffect = Main.Load<GameObject>("RefreshEffect.prefab");
RefreshEffect.AddComponent<EffectComponent>().applyScale = true;
ContentAddition.AddEffect(RefreshEffect);
OverlayMeter = Main.Load<GameObject>("VrabMeter.prefab");
OverlayMeter.AddComponent<CrosshairDataMeterSync>();
Body.AddComponent<DataMeter>();
SimulMarker = Main.Load<ItemDef>("idSimulMarker.asset");
ContentAddition.AddItemDef(SimulMarker);
matVrabHologram = Main.Load<Material>("matVrabHologram.mat");
CharacterBody.RecalculateStats += new hook_RecalculateStats(HologramDegen);
CharacterModel.UpdateRendererMaterials += new hook_UpdateRendererMaterials(HologramEffect);
CharacterBody.GetDisplayName += new hook_GetDisplayName(HologramName);
SummonHoloEffect = PrefabAPI.InstantiateClone(((Component)GameObject.InfiniteTowerSafeWardAwaitingInteraction.transform.Find("ModelBase/mdlVoidWardCrab/BuiltInEffects/Active")).gameObject, "SummonHologramPulse");
SummonHoloEffect.SetActive(true);
SummonHoloEffect.AddComponent<EffectComponent>().applyScale = true;
SummonHoloEffect.AddComponent<DestroyOnTimer>().duration = 5f;
ContentAddition.AddEffect(SummonHoloEffect);
bdOverload = Main.Load<BuffDef>("bdOverload.asset");
ContentAddition.AddBuffDef(bdOverload);
AnalysisBoltProjectile = PrefabAPI.InstantiateClone(GameObject.VoidBarnacleBullet, "AnalysisBoltProjectile");
GameObject val2 = PrefabAPI.InstantiateClone(GameObject.VoidBarnacleBulletGhost, "AnalysisBoltGhost");
Transform transform = val2.transform;
transform.localScale *= 3f;
AnalysisBoltProjectile.GetComponent<ProjectileController>().ghostPrefab = val2;
((ProjectileExplosion)AnalysisBoltProjectile.GetComponent<ProjectileImpactExplosion>()).explosionEffect = GameObject.VoidMegaCrabDeathBombletsExplosion;
ContentAddition.AddProjectile(AnalysisBoltProjectile);
PrefabAPI.RegisterNetworkPrefab(AnalysisBoltProjectile);
}
private string HologramName(orig_GetDisplayName orig, CharacterBody self)
{
string text = orig.Invoke(self);
if (Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(SimulMarker) > 0)
{
text = "Simulated " + text;
}
return text;
}
private void HologramEffect(orig_UpdateRendererMaterials orig, CharacterModel self, Renderer renderer, Material defaultMaterial, bool ignoreOverlays)
{
orig.Invoke(self, renderer, defaultMaterial, ignoreOverlays);
if (Object.op_Implicit((Object)(object)self.body) && Object.op_Implicit((Object)(object)self.body.inventory) && self.body.inventory.GetItemCount(SimulMarker) > 0 && !(renderer is ParticleSystemRenderer))
{
renderer.sharedMaterial = matVrabHologram;
}
}
private void HologramDegen(orig_RecalculateStats orig, CharacterBody self)
{
orig.Invoke(self);
if (Object.op_Implicit((Object)(object)self.inventory) && self.inventory.GetItemCount(SimulMarker) > 0)
{
float num = 60f;
float num2 = self.maxHealth / num;
self.regen = 0f - num2;
}
if (self.HasBuff(bdOverload))
{
self.moveSpeed *= 1.25f;
self.attackSpeed *= 1.5f;
}
}
private void SwapMaterial(string mesh, int cm, Material mat)
{
SwapMaterialOnObject(mesh, cm, mat, Body);
SwapMaterialOnObject(mesh, cm, mat, Display);
}
private void SwapMaterialOnObject(string mesh, int cm, Material mat, GameObject obj)
{
CharacterModel componentInChildren = obj.GetComponentInChildren<CharacterModel>();
Transform transform = ((Component)componentInChildren).transform;
((Component)transform.Find(mesh)).GetComponent<Renderer>().sharedMaterial = mat;
componentInChildren.baseRendererInfos[cm].defaultMaterial = mat;
}
}
}
namespace Vrab.Utils
{
public class BasicLaserBeam
{
public float DamageCoefficient;
public CharacterBody Owner;
public Transform TargetMuzzle;
private LineRenderer lr;
public GameObject effectInstance;
private bool firing = false;
private float stopwatch = 0f;
private float growthStopwatch = 0f;
private float delay;
private BasicLaserInfo info;
private Transform origin;
private Transform end;
private Vector3 targetEndpoint;
private float origWidth = 0f;
public bool Active => firing;
public BasicLaserBeam(CharacterBody owner, Transform muzzle, BasicLaserInfo info)
{
//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_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0114: Unknown result type (might be due to invalid IL or missing references)
//IL_0125: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
this.info = info;
delay = 1f / info.TickRate;
TargetMuzzle = muzzle;
DamageCoefficient = info.DamageCoefficient * delay;
effectInstance = Object.Instantiate<GameObject>(info.EffectPrefab, ((Component)muzzle).transform.position, Quaternion.identity);
growthStopwatch = info.ChargeDelay;
origin = (info.OriginIsBase ? effectInstance.transform : effectInstance.GetComponent<ChildLocator>().FindChild(info.OriginName));
end = effectInstance.GetComponent<ChildLocator>().FindChild(info.EndpointName);
lr = effectInstance.GetComponent<DetachLineRendererAndFade>().line;
origWidth = lr.widthMultiplier;
Owner = owner;
targetEndpoint = GetEndpoint(out var _);
((Component)end).transform.position = targetEndpoint;
((Component)origin).transform.position = ((Component)TargetMuzzle).transform.position;
}
public void Fire()
{
if (Object.op_Implicit((Object)(object)info.FiringMaterial))
{
((Renderer)lr).material = info.FiringMaterial;
}
lr.widthMultiplier = origWidth * info.FiringWidthMultiplier;
firing = true;
stopwatch = 0f;
}
public void UpdateVisual(float deltaTime)
{
//IL_0017: 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_003e: 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)
((Component)origin).transform.position = ((Component)TargetMuzzle).transform.position;
((Component)end).transform.position = Vector3.MoveTowards(((Component)end).transform.position, targetEndpoint, 250f * deltaTime);
}
public void Update(float deltaTime)
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: 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_008e: Unknown result type (might be due to invalid IL or missing references)
//IL_0095: Unknown result type (might be due to invalid IL or missing references)
//IL_00a6: Expected O, but got Unknown
stopwatch += deltaTime;
if (stopwatch >= delay)
{
targetEndpoint = GetEndpoint(out var unmodified);
stopwatch = 0f;
if (firing && ((NetworkBehaviour)Owner).hasAuthority)
{
GetBulletAttack().Fire();
if (Object.op_Implicit((Object)(object)info.ImpactEffect))
{
EffectManager.SpawnEffect(info.ImpactEffect, new EffectData
{
origin = unmodified,
scale = 1f
}, false);
}
}
}
if (!firing)
{
growthStopwatch -= deltaTime;
lr.widthMultiplier = Mathf.Max(0f, growthStopwatch / info.ChargeDelay);
}
}
public Vector3 GetEndpoint(out Vector3 unmodified)
{
//IL_0026: Unknown result type (might be due to invalid IL or missing references)
//IL_0014: 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_0051: 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_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: 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_0073: Unknown result type (might be due to invalid IL or missing references)
//IL_0074: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_00a7: Unknown result type (might be due to invalid IL or missing references)
//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
//IL_00ad: 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_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00bf: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
//IL_009f: Unknown result type (might be due to invalid IL or missing references)
//IL_00a4: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
Vector3 val = ((info.FiringMode == LaserFiringMode.TrackAim) ? Owner.inputBank.aimDirection : TargetMuzzle.forward);
Vector3 val2 = ((info.FiringMode == LaserFiringMode.TrackAim) ? Owner.inputBank.aimOrigin : TargetMuzzle.position);
Ray val3 = new Ray(val2, val);
Vector3 point = ((Ray)(ref val3)).GetPoint(info.MaxRange);
RaycastHit val4 = default(RaycastHit);
if (Physics.Raycast(val2, val, ref val4, info.MaxRange, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)))
{
point = ((RaycastHit)(ref val4)).point;
}
unmodified = point;
return point + val * 5f;
}
public BulletAttack GetBulletAttack()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_005c: 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_0061: 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_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_008a: Unknown result type (might be due to invalid IL or missing references)
//IL_00b3: 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)
//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
BulletAttack val = new BulletAttack();
val.radius = lr.startWidth * 0.75f;
val.damage = Owner.damage * DamageCoefficient;
val.origin = ((info.FiringMode == LaserFiringMode.TrackAim) ? Owner.inputBank.aimOrigin : TargetMuzzle.position);
Vector3 val2 = ((Component)end).transform.position - TargetMuzzle.position;
val.aimVector = ((Vector3)(ref val2)).normalized;
val.procCoefficient = 1f;
val.owner = ((Component)Owner).gameObject;
val.falloffModel = (FalloffModel)0;
val.isCrit = Util.CheckRoll(Owner.crit, Owner.master);
val.stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask;
return val;
}
public void Stop()
{
Object.Destroy((Object)(object)effectInstance);
}
}
public class BasicLaserInfo
{
public GameObject EffectPrefab;
public string OriginName = "Origin";
public string EndpointName = "End";
public bool OriginIsBase = true;
public float TickRate = 20f;
public float DamageCoefficient = 1f;
public Material FiringMaterial;
public float ChargeDelay = 0.5f;
public float FiringWidthMultiplier = 2f;
public LaserFiringMode FiringMode = LaserFiringMode.Straight;
public float MaxRange = 60f;
public GameObject ImpactEffect;
}
public enum LaserFiringMode
{
TrackAim,
Straight
}
public abstract class CoolerBasicMeleeAttack : BasicMeleeAttack
{
public abstract float BaseDuration { get; }
public abstract float DamageCoefficient { get; }
public abstract string HitboxName { get; }
public abstract GameObject HitEffectPrefab { get; }
public abstract float ProcCoefficient { get; }
public abstract float HitPauseDuration { get; }
public abstract GameObject SwingEffectPrefab { get; }
public abstract string MuzzleString { get; }
public virtual string MechanimHitboxParameter { get; }
public virtual bool ScaleHitPauseDurationWithAttackSpeed { get; } = true;
public virtual Func<bool> AlternateActiveParameter { get; } = () => true;
public override void OnEnter()
{
base.baseDuration = BaseDuration;
base.damageCoefficient = DamageCoefficient;
base.hitBoxGroupName = HitboxName;
base.hitEffectPrefab = HitEffectPrefab;
base.procCoefficient = ProcCoefficient;
base.hitPauseDuration = HitPauseDuration;
base.swingEffectPrefab = SwingEffectPrefab;
base.swingEffectMuzzleString = MuzzleString;
if (MechanimHitboxParameter != null)
{
base.mecanimHitboxActiveParameter = MechanimHitboxParameter;
}
base.scaleHitPauseDurationAndVelocityWithAttackSpeed = ScaleHitPauseDurationWithAttackSpeed;
((BasicMeleeAttack)this).OnEnter();
}
public override void FixedUpdate()
{
((EntityState)this).fixedAge = ((EntityState)this).fixedAge + Time.fixedDeltaTime;
if (string.IsNullOrEmpty(MechanimHitboxParameter) && AlternateActiveParameter())
{
((BasicMeleeAttack)this).BeginMeleeAttackEffect();
}
else if (base.animator.GetFloat(MechanimHitboxParameter) >= 0.5f)
{
((BasicMeleeAttack)this).BeginMeleeAttackEffect();
}
if (((EntityState)this).isAuthority)
{
((BasicMeleeAttack)this).AuthorityFixedUpdate();
}
}
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
internal sealed class AutoRunAttribute : Attribute
{
}
internal sealed class AutoRunCollector
{
public static void HandleAutoRun()
{
Type[] types = Assembly.GetExecutingAssembly().GetTypes();
List<Type> list = types.ToList();
list.RemoveAll(asdf);
types = list.ToArray();
Type[] array = types;
foreach (Type type in array)
{
if (!type.FullName.Contains("CustomEmotesAPI"))
{
continue;
}
TypeInfo typeInfo = type.GetTypeInfo();
MethodInfo[] methods = typeInfo.GetMethods((BindingFlags)(-1));
foreach (MethodInfo methodInfo in methods)
{
AutoRunAttribute customAttribute = methodInfo.GetCustomAttribute<AutoRunAttribute>();
if (customAttribute != null && methodInfo.IsStatic)
{
methodInfo.Invoke(null, null);
}
}
}
}
private static bool asdf(Type s)
{
return s.FullName.Contains("CustomEmotesAPI");
}
}
public class CallNetworkedMethod : INetMessage, ISerializableObject
{
private GameObject obj;
private string method;
private uint id;
public CallNetworkedMethod(GameObject obj, string method)
{
//IL_001d: 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)
this.obj = obj;
this.method = method;
NetworkInstanceId netId = obj.GetComponent<NetworkIdentity>().netId;
id = ((NetworkInstanceId)(ref netId)).Value;
}
public void Serialize(NetworkWriter writer)
{
writer.Write(id);
writer.Write(method);
}
public void Deserialize(NetworkReader reader)
{
id = reader.ReadUInt32();
method = reader.ReadString();
}
public void OnReceived()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
obj = Util.FindNetworkObject(new NetworkInstanceId(id));
obj.SendMessage(method, (SendMessageOptions)1);
}
public CallNetworkedMethod()
{
}
}
public class LockLocalTransform : MonoBehaviour
{
public Vector3 Position;
public Vector3 Rotation;
public Vector3 Scale;
public void LateUpdate()
{
//IL_0008: 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)
//IL_001f: Unknown result type (might be due to invalid IL or missing references)
//IL_0031: Unknown result type (might be due to invalid IL or missing references)
((Component)this).transform.localPosition = Position;
((Component)this).transform.localRotation = Quaternion.Euler(Rotation);
((Component)this).transform.localScale = Scale;
}
}
public static class DamageColourHelper
{
[CompilerGenerated]
private static class <>O
{
public static hook_FindColor <0>__DamageColor_FindColor;
}
public static List<DamageColorIndex> registeredColorIndicies = new List<DamageColorIndex>();
internal static void Init()
{
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
object obj = <>O.<0>__DamageColor_FindColor;
if (obj == null)
{
hook_FindColor val = DamageColor_FindColor;
<>O.<0>__DamageColor_FindColor = val;
obj = (object)val;
}
DamageColor.FindColor += (hook_FindColor)obj;
}
private static Color DamageColor_FindColor(orig_FindColor orig, DamageColorIndex colorIndex)
{
//IL_0006: 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_0020: 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_0015: Unknown result type (might be due to invalid IL or missing references)
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001b: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
if (registeredColorIndicies.Contains(colorIndex))
{
return DamageColor.colors[colorIndex];
}
return orig.Invoke(colorIndex);
}
public static DamageColorIndex RegisterDamageColor(Color color)
{
//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_0025: 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_0029: Unknown result type (might be due to invalid IL or missing references)
int num = DamageColor.colors.Length;
DamageColorIndex val = (DamageColorIndex)(byte)num;
ArrayUtils.ArrayAppend<Color>(ref DamageColor.colors, ref color);
registeredColorIndicies.Add(val);
return val;
}
}
public static class CharacterExtensions
{
public static bool HasSkillEquipped(this CharacterBody body, SkillDef skill)
{
GenericSkill[] components = ((Component)body).GetComponents<GenericSkill>();
foreach (GenericSkill val in components)
{
if ((Object)(object)val.skillDef == (Object)(object)skill)
{
return true;
}
}
return false;
}
public static void ClearInventory(this CharacterBody body)
{
//IL_0035: 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_003c: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)body.inventory))
{
return;
}
List<ItemDef> list = new List<ItemDef>();
foreach (ItemIndex item in body.inventory.itemAcquisitionOrder)
{
ItemDef itemDef = ItemCatalog.GetItemDef(item);
list.Add(itemDef);
}
foreach (ItemDef item2 in list)
{
body.inventory.RemoveItem(item2, body.inventory.GetItemCount(item2));
}
}
public static void ClearInventory(this CharacterBody body, bool hidden)
{
//IL_0035: 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_003c: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)body.inventory))
{
return;
}
List<ItemDef> list = new List<ItemDef>();
foreach (ItemIndex item in body.inventory.itemAcquisitionOrder)
{
ItemDef itemDef = ItemCatalog.GetItemDef(item);
if (hidden)
{
list.Add(itemDef);
}
else if (!itemDef.hidden)
{
list.Add(itemDef);
}
}
foreach (ItemDef item2 in list)
{
body.inventory.RemoveItem(item2, body.inventory.GetItemCount(item2));
}
}
}
public static class EnumeratorExtensions
{
public static T GetRandom<T>(this IEnumerable<T> self)
{
return self.ElementAt(Random.Range(0, self.Count()));
}
public static T GetRandom<T>(this IEnumerable<T> self, Xoroshiro128Plus rng)
{
return self.ElementAt(rng.RangeInt(0, self.Count()));
}
public static T GetRandom<T>(this IEnumerable<T> self, Func<T, bool> predicate)
{
try
{
return self.Where(predicate).ElementAt(Random.Range(0, self.Count()));
}
catch
{
return default(T);
}
}
public static T GetRandom<T>(this IEnumerable<T> self, Xoroshiro128Plus rng, Func<T, bool> predicate)
{
try
{
return self.Where(predicate).ElementAt(rng.RangeInt(0, self.Count()));
}
catch
{
return default(T);
}
}
}
public static class StringExtensions
{
public static void Add(this string str, string text)
{
LanguageAPI.Add(str, text);
}
public static T Load<T>(this string str)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
try
{
return Addressables.LoadAssetAsync<T>((object)str).WaitForCompletion();
}
catch
{
return default(T);
}
}
public static string RemoveUnsafeCharacters(this string str)
{
string[] array = new string[17]
{
"\n", "'", " ", "!", "`", "&", "-", ")", "(", "{",
"}", "|", "@", "<", ">", ".", "\\"
};
string text = str;
string[] array2 = array;
foreach (string oldValue in array2)
{
text = text.Replace(oldValue, "");
}
return text;
}
public static string RemoveUnsafeCharacters(this string str, string[] unsafeChars)
{
string text = str;
foreach (string oldValue in unsafeChars)
{
text = text.Replace(oldValue, "");
}
return text;
}
public static string AutoFormat(this string str)
{
return Formatter.FormatString(str);
}
}
internal class Formatter
{
internal struct Format
{
public string match;
public string expanded;
}
private static List<Format> formats = new List<Format>
{
new Format
{
match = "$su",
expanded = "<style=cIsUtility>"
},
new Format
{
match = "$sd",
expanded = "<style=cIsDamage>"
},
new Format
{
match = "$ss",
expanded = "<style=cStack>"
},
new Format
{
match = "$sr",
expanded = "<style=cDeath>"
},
new Format
{
match = "$sh",
expanded = "<style=cIsHealing>"
},
new Format
{
match = "$se",
expanded = "</style>"
},
new Format
{
match = "$rc",
expanded = "<color=#36D7A9>"
},
new Format
{
match = "$ec",
expanded = "</color>"
},
new Format
{
match = "$pc",
expanded = "<color=#406096>"
},
new Format
{
match = "$sv",
expanded = "<style=cIsVoid>"
}
};
internal static string FormatString(string str)
{
foreach (Format format in formats)
{
str = str.Replace(format.match, format.expanded);
}
return str;
}
}
public static class UnityExtensions
{
public static void RemoveComponent<T>(this GameObject self) where T : Component
{
Object.Destroy((Object)(object)self.GetComponent<T>());
}
public static void RemoveComponents<T>(this GameObject self) where T : Component
{
T[] components = self.GetComponents<T>();
for (int i = 0; i < components.Length; i++)
{
Object.Destroy((Object)(object)components[i]);
}
}
public static void CallNetworkedMethod(this GameObject self, string method, NetworkDestination dest = 1)
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
NetMessageExtensions.Send((INetMessage)(object)new CallNetworkedMethod(self, method), dest);
}
public static T FindComponent<T>(this GameObject self, string name) where T : Component
{
return self.GetComponentsInChildren<T>().FirstOrDefault((T x) => ((Object)((Component)x).gameObject).name == name);
}
public static void RemoveComponent<T>(this Component self) where T : Component
{
Object.Destroy((Object)(object)self.GetComponent<T>());
}
public static void RemoveComponents<T>(this Component self) where T : Component
{
T[] components = self.GetComponents<T>();
for (int i = 0; i < components.Length; i++)
{
Object.Destroy((Object)(object)components[i]);
}
}
public static T AddComponent<T>(this Component self) where T : Component
{
return self.gameObject.AddComponent<T>();
}
public static Sprite MakeSprite(this Texture2D self)
{
//IL_001a: 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)
return Sprite.Create(self, new Rect(0f, 0f, (float)((Texture)self).width, (float)((Texture)self).height), new Vector2(0.5f, 0.5f), 100f);
}
}
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class HookAttribute : SearchableAttribute
{
public Type type;
public string eventName;
public HookAttribute(Type type, string eventName)
{
this.type = type;
this.eventName = eventName;
}
}
public class HookAttributeHandler
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_OnLoad <>9__0_0;
internal IEnumerator <Hook>b__0_0(orig_OnLoad orig, RoR2Application self)
{
Initialize();
return orig.Invoke(self);
}
}
[AutoRun]
internal static void Hook()
{
//IL_0015: 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)
//IL_0020: Expected O, but got Unknown
object obj = <>c.<>9__0_0;
if (obj == null)
{
hook_OnLoad val = delegate(orig_OnLoad orig, RoR2Application self)
{
Initialize();
return orig.Invoke(self);
};
<>c.<>9__0_0 = val;
obj = (object)val;
}
RoR2Application.OnLoad += (hook_OnLoad)obj;
}
internal static void Initialize()
{
List<HookAttribute> list = new List<HookAttribute>();
SearchableAttribute.GetInstances<HookAttribute>(list);
foreach (HookAttribute item in list)
{
if ((((SearchableAttribute)item).target as MethodInfo).IsStatic)
{
EventInfo @event = item.type.GetEvent(item.eventName);
Delegate handler = Delegate.CreateDelegate(@event.EventHandlerType, null, ((SearchableAttribute)item).target as MethodInfo);
@event.AddEventHandler(@event.DeclaringType, handler);
}
}
}
}
public static class ItemHelpers
{
public static RendererInfo[] ItemDisplaySetup(GameObject obj, bool debugmode = false)
{
//IL_0085: Unknown result type (might be due to invalid IL or missing references)
//IL_00cf: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
List<Renderer> list = new List<Renderer>();
MeshRenderer[] componentsInChildren = obj.GetComponentsInChildren<MeshRenderer>();
if (componentsInChildren.Length != 0)
{
list.AddRange((IEnumerable<Renderer>)(object)componentsInChildren);
}
SkinnedMeshRenderer[] componentsInChildren2 = obj.GetComponentsInChildren<SkinnedMeshRenderer>();
if (componentsInChildren2.Length != 0)
{
list.AddRange((IEnumerable<Renderer>)(object)componentsInChildren2);
}
RendererInfo[] array = (RendererInfo[])(object)new RendererInfo[list.Count];
for (int i = 0; i < list.Count; i++)
{
if (debugmode)
{
MaterialControllerComponents.HGControllerFinder hGControllerFinder = ((Component)list[i]).gameObject.AddComponent<MaterialControllerComponents.HGControllerFinder>();
hGControllerFinder.Renderer = list[i];
}
array[i] = new RendererInfo
{
defaultMaterial = ((list[i] is SkinnedMeshRenderer) ? list[i].sharedMaterial : list[i].material),
renderer = list[i],
defaultShadowCastingMode = (ShadowCastingMode)1,
ignoreOverlays = false
};
}
return array;
}
public static string OrderManifestLoreFormatter(string deviceName, string estimatedDelivery, string sentTo, string trackingNumber, string devicePickupDesc, string shippingMethod, string orderDetails)
{
string[] value = new string[19]
{
"<align=left>Estimated Delivery:<indent=70%>Sent To:</indent></align>",
"<align=left>" + estimatedDelivery + "<indent=70%>" + sentTo + "</indent></align>",
"",
"<indent=1%><style=cIsDamage><size=125%><u> Shipping Details:\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0</u></size></style></indent>",
"",
"<indent=2%>-Order: <style=cIsUtility>" + deviceName + "</style></indent>",
"<indent=4%><style=cStack>Tracking Number: " + trackingNumber + "</style></indent>",
"",
"<indent=2%>-Order Description: " + devicePickupDesc + "</indent>",
"",
"<indent=2%>-Shipping Method: <style=cIsHealth>" + shippingMethod + "</style></indent>",
"",
"",
"",
"<indent=2%>-Order Details: " + orderDetails + "</indent>",
"",
"",
"",
"<style=cStack>Delivery being brought to you by the brand new </style><style=cIsUtility>Orbital Drop-Crate System (TM)</style>. <style=cStack><u>No refunds.</u></style>"
};
return string.Join("\n", value);
}
public static void RefreshTimedBuffs(CharacterBody body, BuffDef buffDef, float duration)
{
//IL_0039: 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)
if (!Object.op_Implicit((Object)(object)body) || body.GetBuffCount(buffDef) <= 0)
{
return;
}
foreach (TimedBuff timedBuff in body.timedBuffs)
{
if (buffDef.buffIndex == timedBuff.buffIndex)
{
timedBuff.timer = duration;
}
}
}
public static void RefreshTimedBuffs(CharacterBody body, BuffDef buffDef, float taperStart, float taperDuration)
{
//IL_003b: 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)
if (!Object.op_Implicit((Object)(object)body) || body.GetBuffCount(buffDef) <= 0)
{
return;
}
int num = 0;
foreach (TimedBuff timedBuff in body.timedBuffs)
{
if (buffDef.buffIndex == timedBuff.buffIndex)
{
timedBuff.timer = taperStart + (float)num * taperDuration;
num++;
}
}
}
public static void AddBuffAndDot(BuffDef buff, float duration, int stackCount, CharacterBody body)
{
//IL_0033: 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_003b: Invalid comparison between Unknown and I4
//IL_0075: 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)
if (!NetworkServer.active)
{
return;
}
DotIndex val = (DotIndex)Array.FindIndex(DotController.dotDefs, (DotDef dotDef) => (Object)(object)dotDef.associatedBuff == (Object)(object)buff);
for (int i = 0; i < stackCount; i++)
{
if ((int)val != -1)
{
DotController.InflictDot(((Component)body).gameObject, ((Component)body).gameObject, val, duration, 0.25f, (uint?)null);
}
else
{
body.AddTimedBuff(buff.buffIndex, duration);
}
}
}
public static DotIndex FindAssociatedDotForBuff(BuffDef buff)
{
//IL_0024: 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_0026: 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)
return (DotIndex)Array.FindIndex(DotController.dotDefs, (DotDef dotDef) => (Object)(object)dotDef.associatedBuff == (Object)(object)buff);
}
}
public static class Keywords
{
public static string Poison = "KEYWORD_POISON";
public static string Regenerative = "KEYWORD_RAPID_REGEN";
public static string Agile = "KEYWORD_AGILE";
public static string HealthCost = "KEYWORD_PERCENT_HP";
public static string Disperse = "KEYWORD_SONIC_BOOM";
public static string Weak = "KEYWORD_WEAK";
public static string Heavy = "KEYWORD_HEAVY";
public static string Freeze = "KEYWORD_FREEZING";
public static string Stun = "KEYWORD_STUNNING";
public static string Expose = "KEYWORD_EXPOSE";
public static string Shock = "KEYWORD_SHOCKING";
public static string Slayer = "KEYWORD_SLAYER";
public static string Hemorrhage = "KEYWORD_SUPERBLEED";
public static string Ignite = "KEYWORD_IGNITE";
public static string Weakpoint = "KEYWORD_WEAKPOINT";
public static string ActiveReload = "KEYWORD_ACTIVERELOAD";
public static string VoidCorruption = "KEYWORD_VOIDCORRUPTION";
public static string OverdriveFormPrimary = "Vrab_KEYWORD_OVERDRIVE_PRIMARY";
public static string OverdriveFormSecondary = "Vrab_KEYWORD_OVERDRIVE_SECONDARY";
public static string OverdriveFormAltSecondary = "Vrab_KEYWORD_OVERDRIVE_SECONDARY_ALT";
public static string OverdriveFormUtility = "Vrab_KEYWORD_OVERDRIVE_UTILITY";
public static string OverdriveFormSpecial = "Vrab_KEYWORD_OVERDRIVE_SPECIAL";
public static void SetupKeywords()
{
OverdriveFormPrimary.Add("<style=cKeywordName>Overdriven Form</style><style=cIsUtility>Agile</style>. Fire a rapid stream of bullets for <style=cIsDamage>90% damage</style>. <style=cDeath>Heat increases spread and ignite chance</style>.");
OverdriveFormSecondary.Add("<style=cKeywordName>Overdriven Form</style><style=cIsDamage>Ignite</style>. Fire a short-range heat burst for <style=cIsDamage>8x180% damage</style>. Increase <style=cDeath>heat</style> by <style=cDeath>15%</style>.");
OverdriveFormAltSecondary.Add("<style=cKeywordName>Overdriven Form</style><style=cIsDamage>Ignite</style>. Fire off a <style=cIsDamage>blazing ball</style> for <style=cIsDamage>600%</style> damage that <style=cIsDamage>engulfs</style> the ground on impact for <style=cIsDamage>250%</style> damage per second. Reduce $srheat$se by $su20%$se.");
OverdriveFormUtility.Add("<style=cKeywordName>Overdriven Form</style><style=cIsUtility>Agile</style>. <style=cIsDamage>Stunning</style>. <style=cIsUtility>Sidestep</style> a very short distance and deal <style=cIsDamage>250% damage</style>. Hitting enemies generates <color=#36D7A9>3 Charge</style>.");
OverdriveFormSpecial.Add("<style=cKeywordName>Overdriven Form</style><style=cIsUtility>Agile</style>. <style=cIsDamage>Ignite</style>. Release a <style=cIsDamage>fire nova</style> around you that deals <style=cIsDamage>300%</style> damage, increasing up to <style=cIsDamage>900%</style> in full heat. <style=cIsUtility>Consume all heat</style>, gaining an <style=cIsDamage>attack speed</style> boost, and <style=cDeath>exit overdrive</style>.");
}
}
public static class MathHelpers
{
public static string FloatToPercentageString(float number, float numberBase = 100f)
{
return (number * numberBase).ToString("##0") + "%";
}
public static Vector3 ClosestPointOnSphereToPoint(Vector3 origin, float radius, Vector3 targetPosition)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: 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_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)
//IL_001f: 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)
Vector3 val = targetPosition - origin;
val = Vector3.Normalize(val);
val *= radius;
return origin + val;
}
public static List<Vector3> DistributePointsEvenlyAroundSphere(int points, float radius, Vector3 origin)
{
//IL_0066: Unknown result type (might be due to invalid IL or missing references)
//IL_006d: 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_0077: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
List<Vector3> list = new List<Vector3>();
double num = Math.PI * (3.0 - Math.Sqrt(5.0));
for (int i = 0; i < points; i++)
{
int num2 = 1 - i / (points - 1) * 2;
double num3 = Math.Sqrt(1 - num2 * num2);
double num4 = num * (double)i;
float num5 = (float)(Math.Cos(num4) * num3);
float num6 = (float)(Math.Sin(num4) * num3);
Vector3 val = origin + new Vector3(num5, (float)num2, num6);
list.Add(val * radius);
}
return list;
}
public static List<Vector3> DistributePointsEvenlyAroundCircle(int points, float radius, Vector3 origin, float angleOffset = 0f)
{
//IL_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_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)
List<Vector3> list = new List<Vector3>();
Vector3 item = default(Vector3);
for (int i = 0; i < points; i++)
{
double num = Math.PI * 2.0 / (double)points;
double num2 = num * (double)i + (double)angleOffset;
((Vector3)(ref item))..ctor((float)((double)radius * Math.Cos(num2) + (double)origin.x), origin.y, (float)((double)radius * Math.Sin(num2) + (double)origin.z));
list.Add(item);
}
return list;
}
public static Vector3 GetPointOnUnitSphereCap(Quaternion targetDirection, float angle)
{
//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_001b: 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_002b: 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_0034: 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_0046: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
float num = Random.Range(0f, angle) * (MathF.PI / 180f);
Vector2 insideUnitCircle = Random.insideUnitCircle;
Vector2 val = ((Vector2)(ref insideUnitCircle)).normalized * Mathf.Sin(num);
Vector3 val2 = default(Vector3);
((Vector3)(ref val2))..ctor(val.x, val.y, Mathf.Cos(num));
return targetDirection * val2;
}
public static Vector3 GetPointOnUnitSphereCap(Vector3 targetDirection, float angle)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_000d: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Unknown result type (might be due to invalid IL or missing references)
return GetPointOnUnitSphereCap(Quaternion.LookRotation(targetDirection), angle);
}
public static Vector3 RandomPointOnCircle(Vector3 origin, float radius, Xoroshiro128Plus random)
{
//IL_0012: 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_002a: 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_0034: 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)
float num = random.RangeFloat(0f, MathF.PI * 2f);
return origin + new Vector3(Mathf.Cos(num), 0f, Mathf.Sin(num)) * radius;
}
public static float InverseHyperbolicScaling(float baseValue, float additionalValue, float maxValue, int itemCount)
{
return baseValue + (maxValue - baseValue) * (1f - 1f / (1f + additionalValue * (float)(itemCount - 1)));
}
public static float CustomHyperbolic(float amplificationPercentage, float max = 100f)
{
return (1f - max / (max + amplificationPercentage)) * max;
}
}
public static class MiscUtils
{
public static Vector3? RaycastToDirection(Vector3 position, float maxDistance, Vector3 direction, int layer)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
RaycastHit val = default(RaycastHit);
if (Physics.Raycast(new Ray(position, direction), ref val, maxDistance, layer, (QueryTriggerInteraction)1))
{
return ((RaycastHit)(ref val)).point;
}
return null;
}
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> toShuffle, Xoroshiro128Plus random)
{
List<T> list = new List<T>();
foreach (T item in toShuffle)
{
list.Insert(random.RangeInt(0, list.Count + 1), item);
}
return list;
}
public static Vector3 FindClosestNodeToPosition(Vector3 position, HullClassification hullClassification, bool checkAirNodes = false)
{
//IL_001c: 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_0023: Unknown result type (might be due to invalid IL or missing references)
//IL_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_002a: Unknown result type (might be due to invalid IL or missing references)
//IL_0048: Unknown result type (might be due to invalid IL or missing references)
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: 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_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Unknown result type (might be due to invalid IL or missing references)
NodeGraph val = (checkAirNodes ? SceneInfo.instance.airNodes : SceneInfo.instance.groundNodes);
NodeIndex val2 = val.FindClosestNode(position, hullClassification, float.PositiveInfinity);
if (val2 != NodeIndex.invalid)
{
Vector3 result = default(Vector3);
val.GetNodePosition(val2, ref result);
return result;
}
return Vector3.zero;
}
public static bool TeleportBody(CharacterBody characterBody, GameObject target, GameObject teleportEffect, HullClassification hullClassification, Xoroshiro128Plus rng, float minDistance = 20f, float maxDistance = 45f, bool teleportAir = false)
{
//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_002c: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: 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_0053: 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_005f: 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_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Expected O, but got Unknown
//IL_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Expected O, but got Unknown
//IL_0095: 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_00be: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)characterBody))
{
return false;
}
SpawnCard val = ScriptableObject.CreateInstance<SpawnCard>();
val.hullSize = hullClassification;
val.nodeGraphType = (GraphType)(teleportAir ? 1 : 0);
val.prefab = Resources.Load<GameObject>("SpawnCards/HelperPrefab");
GameObject val2 = DirectorCore.instance.TrySpawnObject(new DirectorSpawnRequest(val, new DirectorPlacementRule
{
placementMode = (PlacementMode)1,
position = target.transform.position,
minDistance = minDistance,
maxDistance = maxDistance
}, rng));
if (Object.op_Implicit((Object)(object)val2))
{
TeleportHelper.TeleportBody(characterBody, val2.transform.position);
if (Object.op_Implicit((Object)(object)teleportEffect))
{
EffectManager.SimpleEffect(teleportEffect, val2.transform.position, Quaternion.identity, true);
}
Object.Destroy((Object)(object)val2);
Object.Destroy((Object)(object)val);
return true;
}
Object.Destroy((Object)(object)val);
return false;
}
public static Vector3? AboveTargetVectorFromDamageInfo(DamageInfo damageInfo, float distanceAboveTarget)
{
//IL_0050: 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_005a: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: 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_0077: 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_007e: Unknown result type (might be due to invalid IL or missing references)
//IL_0083: Unknown result type (might be due to invalid IL or missing references)
//IL_008d: Unknown result type (might be due to invalid IL or missing references)
//IL_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_0126: Unknown result type (might be due to invalid IL or missing references)
//IL_012b: 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_0130: 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_0169: Unknown result type (might be due to invalid IL or missing references)
//IL_016b: Unknown result type (might be due to invalid IL or missing references)
//IL_0171: Unknown result type (might be due to invalid IL or missing references)
//IL_0176: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
if (damageInfo.rejected || !Object.op_Implicit((Object)(object)damageInfo.attacker))
{
return null;
}
CharacterBody component = damageInfo.attacker.GetComponent<CharacterBody>();
if (Object.op_Implicit((Object)(object)component))
{
TeamMask enemyTeams = TeamMask.GetEnemyTeams(component.teamComponent.teamIndex);
HurtBox val = new SphereSearch
{
radius = 1f,
mask = ((LayerIndex)(ref LayerIndex.entityPrecise)).mask,
origin = damageInfo.position
}.RefreshCandidates().FilterCandidatesByHurtBoxTeam(enemyTeams).OrderCandidatesByDistance()
.FilterCandidatesByDistinctHurtBoxEntities()
.GetHurtBoxes()
.FirstOrDefault();
if (Object.op_Implicit((Object)(object)val) && Object.op_Implicit((Object)(object)val.healthComponent) && Object.op_Implicit((Object)(object)val.healthComponent.body))
{
CharacterBody body = val.healthComponent.body;
Vector3 val2 = body.mainHurtBox.collider.ClosestPointOnBounds(body.transform.position + new Vector3(0f, 10000f, 0f));
Vector3? val3 = RaycastToDirection(val2, distanceAboveTarget, Vector3.up, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask));
if (val3.HasValue)
{
return val3.Value;
}
return val2 + Vector3.up * distanceAboveTarget;
}
}
return null;
}
public static Vector3? AboveTargetBody(CharacterBody body, float distanceAbove)
{
//IL_0030: 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_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_0053: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0056: Unknown result type (might be due to invalid IL or missing references)
//IL_0060: Unknown result type (might be due to invalid IL or missing references)
//IL_008f: Unknown result type (might be due to invalid IL or missing references)
//IL_0090: Unknown result type (might be due to invalid IL or missing references)
//IL_0096: Unknown result type (might be due to invalid IL or missing references)
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_0080: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)body))
{
return null;
}
Vector3 val = body.mainHurtBox.collider.ClosestPointOnBounds(body.transform.position + new Vector3(0f, 10000f, 0f));
Vector3? val2 = RaycastToDirection(val, distanceAbove, Vector3.up, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask));
if (val2.HasValue)
{
return val2.Value;
}
return val + Vector3.up * distanceAbove;
}
public static Dictionary<string, Vector3> GetAimSurfaceAlignmentInfo(Ray ray, int layerMask, float distance)
{
//IL_0007: 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_002a: 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_0032: Unknown result type (might be due to invalid IL or missing references)
//IL_0037: Unknown result type (might be due to invalid IL or missing references)
//IL_003c: Unknown result type (might be due to invalid IL or missing references)
//IL_0040: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_0047: Unknown result type (might be due to invalid IL or missing references)
//IL_004c: 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_0050: Unknown result type (might be due to invalid IL or missing references)
//IL_0052: Unknown result type (might be due to invalid IL or missing references)
//IL_0057: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_007a: Unknown result type (might be due to invalid IL or missing references)
//IL_0088: Unknown result type (might be due to invalid IL or missing references)
Dictionary<string, Vector3> dictionary = new Dictionary<string, Vector3>();
RaycastHit val = default(RaycastHit);
if (!Physics.Raycast(ray, ref val, distance, layerMask, (QueryTriggerInteraction)1))
{
return null;
}
Vector3 point = ((RaycastHit)(ref val)).point;
Vector3 val2 = Vector3.Cross(((Ray)(ref ray)).direction, Vector3.up);
Vector3 val3 = Vector3.ProjectOnPlane(((RaycastHit)(ref val)).normal, val2);
Vector3 value = Vector3.Cross(val2, val3);
dictionary.Add("Position", point);
dictionary.Add("Right", val2);
dictionary.Add("Forward", value);
dictionary.Add("Up", val3);
return dictionary;
}
public static FireProjectileInfo GetProjectile(GameObject prefab, float coeff, CharacterBody owner, DamageTypeCombo? damageTypeCombo = null)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: 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_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0059: Unknown result type (might be due to invalid IL or missing references)
//IL_005e: Unknown result type (might be due to invalid IL or missing references)
//IL_005f: 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_0076: Unknown result type (might be due to invalid IL or missing references)
//IL_0079: Unknown result type (might be due to invalid IL or missing references)
FireProjectileInfo val = default(FireProjectileInfo);
val.damage = owner.damage * coeff;
val.crit = owner.RollCrit();
val.projectilePrefab = prefab;
val.owner = ((Component)owner).gameObject;
val.position = owner.corePosition;
val.rotation = Util.QuaternionSafeLookRotation(owner.inputBank.aimDirection);
FireProjectileInfo result = val;
if (damageTypeCombo.HasValue)
{
result.damageTypeOverride = damageTypeCombo;
}
return result;
}
public static Vector3? GroundPoint(this Vector3 point)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Unknown result type (might be due to invalid IL or missing references)
return RaycastToDirection(point, float.PositiveInfinity, Vector3.down, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask));
}
public static Tuple<Vector3?, Vector3?> GroundPointWithNormal(this Vector3 point)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_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_0027: Unknown result type (might be due to invalid IL or missing references)
//IL_003d: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
RaycastHit val = default(RaycastHit);
if (Physics.Raycast(point + Vector3.up * 20f, Vector3.down, ref val, 4000f, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask)))
{
return new Tuple<Vector3?, Vector3?>(((RaycastHit)(ref val)).point, ((RaycastHit)(ref val)).normal);
}
return new Tuple<Vector3?, Vector3?>(null, null);
}
public static Vector3[] GetSafePositionsWithinDistance(Vector3 center, float distance)
{
//IL_0097: 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_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_004d: 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_0054: Unknown result type (might be due to invalid IL or missing references)
//IL_0068: 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)
if (Object.op_Implicit((Object)(object)SceneInfo.instance) && Object.op_Implicit((Object)(object)SceneInfo.instance.groundNodes))
{
NodeGraph groundNodes = SceneInfo.instance.groundNodes;
List<Vector3> list = new List<Vector3>();
Node[] nodes = groundNodes.nodes;
foreach (Node val in nodes)
{
if (Vector3.Distance(val.position, center) <= distance)
{
list.Add(val.position);
}
}
return list.ToArray();
}
return (Vector3[])(object)new Vector3[1] { center };
}
}
public class LazyAddressable<T> where T : Object
{
private Func<T> func;
private T asset = default(T);
public T Asset
{
get
{
if (!Object.op_Implicit((Object)(object)asset))
{
asset = func();
}
return asset;
}
}
public LazyAddressable(Func<T> func)
{
this.func = func;
}
public static implicit operator T(LazyAddressable<T> addressable)
{
return addressable.Asset;
}
}
public class LazyIndex
{
private string target;
private BodyIndex _value = (BodyIndex)(-1);
public BodyIndex Value => UpdateValue();
public LazyIndex(string target)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
this.target = target;
}
public BodyIndex UpdateValue()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Invalid comparison between Unknown and I4
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0011: Invalid comparison between Unknown and I4
//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_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_0036: Unknown result type (might be due to invalid IL or missing references)
if ((int)_value == -1 || (int)_value == -1)
{
_value = BodyCatalog.FindBodyIndex(target);
}
return _value;
}
public static implicit operator BodyIndex(LazyIndex index)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
return index.Value;
}
}
public class Timer
{
public float duration;
public float cur;
private bool inv;
public bool expired = false;
private bool expires;
private bool trueIfExp;
private bool resetOnExp;
public Timer(float dur, bool inverse = false, bool expires = false, bool trueOnExpire = false, bool resetOnExpire = false)
{
duration = dur;
inv = inverse;
trueIfExp = trueOnExpire;
resetOnExp = resetOnExpire;
this.expires = expires;
Reset();
}
public void Reset()
{
cur = (inv ? duration : 0f);
}
public bool Tick()
{
cur += (inv ? (0f - Time.fixedDeltaTime) : Time.fixedDeltaTime);
bool result = (inv ? (cur <= 0f) : (cur >= duration));
if (expires)
{
if (expired && !resetOnExp)
{
return trueIfExp;
}
expired = result;
if (resetOnExp && expired)
{
expired = false;
Reset();
}
}
return result;
}
}
public static class NetworkingHelpers
{
public static T GetObjectFromNetIdValue<T>(uint netIdValue)
{
//IL_002c: 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)
NetworkInstanceId key = default(NetworkInstanceId);
((NetworkInstanceId)(ref key))..ctor(netIdValue);
NetworkIdentity value = null;
if (NetworkServer.active)
{
NetworkServer.objects.TryGetValue(key, out value);
}
else
{
ClientScene.objects.TryGetValue(key, out value);
}
if (Object.op_Implicit((Object)(object)value))
{
T component = ((Component)value).GetComponent<T>();
if (component != null)
{
return component;
}
}
return default(T);
}
}
public static class Scenes
{
public static string AphelianSanctuary = "ancientloft";
public static string VoidFields = "arena";
public static string DistantRoost = "blackbeach";
public static string DistantRoostAlt = "blackbeach2";
public static string AbyssalDepths = "dampcavesimple";
public static string WetlandAspect = "foggyswamp";
public static string RallypointDelta = "frozenwall";
public static string TitanicPlains = "golemplains";
public static string TitanicPlainsAlt = "golemplains2";
public static string AbandonedAqueduct = "goolake";
public static string Commencement = "moon2";
public static string SunderedGrove = "rootjungle";
public static string SirensCall = "shipgraveyard";
public static string SkyMeadow = "skymeadow";
public static string SiphonedForest = "snowyforest";
public static string SulfurPools = "sulfurpools";
public static string VoidLocus = "voidstage";
public static string Planetarium = "voidraid";
public static string ScorchedAcres = "wispgraveyard";
public static string BulwarksAmbry = "artifactword";
public static string Bazaar = "bazaar";
public static string GildedCoast = "goldshores";
public static string MomentWhole = "limbo";
public static string MomentFractured = "mysteryspace";
public static string[] AllStandard = new string[18]
{
AphelianSanctuary, VoidFields, DistantRoost, DistantRoostAlt, AbyssalDepths, WetlandAspect, RallypointDelta, TitanicPlains, TitanicPlainsAlt, AbandonedAqueduct,
Commencement, SunderedGrove, SkyMeadow, SirensCall, SiphonedForest, SulfurPools, ScorchedAcres, BulwarksAmbry
};
}
public static class TotallyNotStolenUtils
{
public enum ItemIconBackgroundType
{
Tier1,
Tier2,
Tier3,
Boss,
Equipment,
Lunar,
Survivor
}
private static Dictionary<ItemTier, ItemIconBackgroundType> itemTierToIconBackgroundType = new Dictionary<ItemTier, ItemIconBackgroundType>
{
{
(ItemTier)0,
ItemIconBackgroundType.Tier1
},
{
(ItemTier)1,
ItemIconBackgroundType.Tier2
},
{
(ItemTier)2,
ItemIconBackgroundType.Tier3
},
{
(ItemTier)4,
ItemIconBackgroundType.Boss
},
{
(ItemTier)3,
ItemIconBackgroundType.Lunar
}
};
public static ItemIconBackgroundType GetItemIconBackgroundTypeFromTier(ItemTier tier)
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Unknown result type (might be due to invalid IL or missing references)
if (itemTierToIconBackgroundType.ContainsKey(tier))
{
return itemTierToIconBackgroundType[tier];
}
return ItemIconBackgroundType.Tier1;
}
public static Sprite AddItemIconBackgroundToSprite(Sprite originalSprite, ItemIconBackgroundType bgType)
{
//IL_0016: Unknown result type (might be due to invalid IL or missing references)
//IL_001c: Expected O, but got Unknown
//IL_0068: 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_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00d9: 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_00f2: 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_0108: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_011e: Unknown result type (might be due to invalid IL or missing references)
//IL_0123: Unknown result type (might be due to invalid IL or missing references)
//IL_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_014a: 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_017f: Unknown result type (might be due to invalid IL or missing references)
//IL_0186: Expected O, but got Unknown
//IL_01de: Unknown result type (might be due to invalid IL or missing references)
//IL_020e: Unknown result type (might be due to invalid IL or missing references)
//IL_0214: Unknown result type (might be due to invalid IL or missing references)
//IL_021b: Expected O, but got Unknown
//IL_021e: Unknown result type (might be due to invalid IL or missing references)
//IL_022c: Unknown result type (might be due to invalid IL or missing references)
//IL_0160: Unknown result type (might be due to invalid IL or missing references)
//IL_0165: Unknown result type (might be due to invalid IL or missing references)
//IL_034e: Unknown result type (might be due to invalid IL or missing references)
//IL_035d: Unknown result type (might be due to invalid IL or missing references)
//IL_024e: Unknown result type (might be due to invalid IL or missing references)
//IL_0253: Unknown result type (might be due to invalid IL or missing references)
//IL_025a: Unknown result type (might be due to invalid IL or missing references)
//IL_025f: Unknown result type (might be due to invalid IL or missing references)
//IL_0267: Unknown result type (might be due to invalid IL or missing references)
//IL_0273: Unknown result type (might be due to invalid IL or missing references)
//IL_027c: Unknown result type (might be due to invalid IL or missing references)
//IL_0283: Unknown result type (might be due to invalid IL or missing references)
//IL_028c: Unknown result type (might be due to invalid IL or missing references)
//IL_0298: Unknown result type (might be due to invalid IL or missing references)
//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
//IL_02bd: Unknown result type (might be due to invalid IL or missing references)
//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
//IL_02cd: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_02dd: 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)
Texture2D texture = originalSprite.texture;
Texture2D val = new Texture2D(((Texture)texture).width, ((Texture)texture).height, (TextureFormat)5, false);
Graphics.ConvertTexture((Texture)(object)texture, (Texture)(object)val);
RenderTexture temporary = RenderTexture.GetTemporary(((Texture)val).width, ((Texture)val).height, 24, (RenderTextureFormat)0);
temporary.Create();
RenderTexture.active = temporary;
Graphics.Blit((Texture)(object)val, temporary);
val.ReadPixels(new Rect(0f, 0f, (float)((Texture)val).width, (float)((Texture)val).height), 0, 0);
val.Apply();
RenderTexture.active = null;
RenderTexture.ReleaseTemporary(temporary);
Sprite val2 = null;
val2 = (Sprite)(bgType switch
{
ItemIconBackgroundType.Tier1 => Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texTier1BGIcon.png").WaitForCompletion(),
ItemIconBackgroundType.Tier2 => Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texTier2BGIcon.png").WaitForCompletion(),
ItemIconBackgroundType.Tier3 => Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texTier3BGIcon.png").WaitForCompletion(),
ItemIconBackgroundType.Boss => Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texBossBGIcon.png").WaitForCompletion(),
ItemIconBackgroundType.Equipment => Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texEquipmentBGIcon.png").WaitForCompletion(),
ItemIconBackgroundType.Lunar => Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texLunarBGIcon.png").WaitForCompletion(),
ItemIconBackgroundType.Survivor => Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texSurvivorBGIcon.png").WaitForCompletion(),
_ => Addressables.LoadAssetAsync<Sprite>((object)"RoR2/Base/Common/texTier1BGIcon.png").WaitForCompletion(),
});
Texture2D val3 = new Texture2D(((Texture)val).width, ((Texture)val).height, (TextureFormat)5, false);
Graphics.ConvertTexture((Texture)(object)val2.texture, (Texture)(object)val3);
temporary = RenderTexture.GetTemporary(((Texture)val3).width, ((Texture)val3).height, 24, (RenderTextureFormat)0);
temporary.Create();
RenderTexture.active = temporary;
Graphics.Blit((Texture)(object)val3, temporary);
val3.ReadPixels(new Rect(0f, 0f, (float)((Texture)val3).width, (float)((Texture)val3).height), 0, 0);
val3.Apply();
RenderTexture.active = null;
RenderTexture.ReleaseTemporary(temporary);
Texture2D val4 = new Texture2D(((Texture)val).width, ((Texture)val).height, val.format, false);
((Texture)val4).wrapMode = ((Texture)val).wrapMode;
((Texture)val4).filterMode = ((Texture)val).filterMode;
for (int i = 0; i < ((Texture)val4).width; i++)
{
for (int j = 0; j < ((Texture)val4).height; j++)
{
Color pixel = val3.GetPixel(i, j);
Color pixel2 = val.GetPixel(i, j);
val4.SetPixel(i, j, new Color(pixel.r * (1f - pixel2.a) + pixel2.r * pixel2.a, pixel.g * (1f - pixel2.a) + pixel2.g * pixel2.a, pixel.b * (1f - pixel2.a) + pixel2.b * pixel2.a, Mathf.Clamp01(pixel.a + pixel2.a)));
}
}
val4.Apply();
return Sprite.Create(val4, new Rect(0f, 0f, (float)((Texture)val4).width, (float)((Texture)val4).height), new Vector2(0.5f, 0.5f), 25f, 1u, (SpriteMeshType)1);
}
public static Sprite CreateItemIconWithBackgroundFromItem(ItemDef itemDef)
{
//IL_0023: Unknown result type (might be due to invalid IL or missing references)
if (Object.op_Implicit((Object)(object)itemDef) && Object.op_Implicit((Object)(object)itemDef.pickupIconSprite))
{
return AddItemIconBackgroundToSprite(itemDef.pickupIconSprite, GetItemIconBackgroundTypeFromTier(itemDef.tier));
}
return null;
}
public static Sprite CreateItemIconWithBackgroundFromEquipment(EquipmentDef equipmentDef)
{
if (Object.op_Implicit((Object)(object)equipmentDef) && Object.op_Implicit((Object)(object)equipmentDef.pickupIconSprite))
{
return AddItemIconBackgroundToSprite(equipmentDef.pickupIconSprite, ItemIconBackgroundType.Equipment);
}
return null;
}
}
[RequireComponent(typeof(InputBankTest))]
[RequireComponent(typeof(CharacterBody))]
public abstract class Tracker : MonoBehaviour
{
public Transform target;
public Indicator indicator;
public GameObject targetingIndicatorPrefab;
private float stopwatch = 0f;
public float searchDelay = 0.1f;
public float maxSearchAngle = 40f;
public float maxSearchDistance = 60f;
public bool isActive = true;
public InputBankTest inputBank;
public CharacterBody body;
public Func<bool> isActiveCallback = DefaultIsActiveCallback;
private Transform lastTarget;
public float minDot => Mathf.Cos(Mathf.Clamp(maxSearchAngle, 0f, 180f) * (MathF.PI / 180f));
private static bool DefaultIsActiveCallback()
{
return true;
}
public virtual void Start()
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0018: Expected O, but got Unknown
indicator = new Indicator(((Component)this).gameObject, targetingIndicatorPrefab);
body = ((Component)this).GetComponent<CharacterBody>();
inputBank = ((Component)this).GetComponent<InputBankTest>();
}
public virtual void FixedUpdate()
{
if (!((NetworkBehaviour)body).hasAuthority)
{
return;
}
if (indicator != null && !DefaultIsActiveCallback())
{
indicator.active = false;
return;
}
if (indicator != null && !Object.op_Implicit((Object)(object)target))
{
indicator.active = false;
}
if (indicator != null && Object.op_Implicit((Object)(object)target))
{
indicator.active = true;
}
stopwatch += Time.fixedDeltaTime;
if (!(stopwatch >= searchDelay))
{
return;
}
stopwatch = 0f;
target = SearchForTarget();
if (Object.op_Implicit((Object)(object)target))
{
if ((Object)(object)lastTarget != (Object)(object)target)
{
NetMessageExtensions.Send((INetMessage)(object)new SyncVrabTarget(((Component)this).gameObject, target), (NetworkDestination)2);
NetMessageExtensions.Send((INetMessage)(object)new SyncVrabTarget(((Component)this).gameObject, target), (NetworkDestination)1);
}
lastTarget = target;
indicator.targetTransform = target;
}
}
public abstract Transform SearchForTarget();
}
public class HurtboxTracker : Tracker
{
public enum TargetType
{
Enemy,
Friendly,
All
}
public TeamIndex userIndex;
public TargetType targetType;
public override void Start()
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
base.Start();
userIndex = body.teamComponent.teamIndex;
}
public override Transform SearchForTarget()
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: 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_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_004a: Unknown re