using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using EntityStates;
using JetBrains.Annotations;
using KinematicCharacterController;
using R2API;
using R2API.Utils;
using Rewired.ComponentControls.Effects;
using RoR2;
using RoR2.Achievements;
using RoR2.HudOverlay;
using RoR2.Projectile;
using RoR2.Skills;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;
using UnityEngine.Rendering;
using UnityEngine.UI;
[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("Widowmaker")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Widowmaker")]
[assembly: AssemblyTitle("Widowmaker")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace Widowmaker;
public static class Achievements
{
[RegisterAchievement("WIDOWMAKER_MASTERY", "ACHIEVEMENT_WIDOWMAKER_MASTERY_UNLOCKABLE_ID", null, null)]
public class MasteryUnlockable : BasePerSurvivorClearGameMonsoonAchievement
{
public override BodyIndex LookUpRequiredBodyIndex()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
return BodyCatalog.FindBodyIndex("WidowmakerBody");
}
}
internal static UnlockableDef masteryUnlock;
public static void RegisterUnlockables()
{
//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_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_004d: 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_0065: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
masteryUnlock = NewUnlockable<MasteryUnlockable>("MASTERY", LoadoutAPI.CreateSkinIcon(Color32.op_Implicit(new Color32((byte)30, (byte)30, (byte)30, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)169, (byte)169, (byte)177, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)147, (byte)138, (byte)254, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)96, (byte)72, (byte)134, byte.MaxValue))), "WIDOWMAKER: Mastery", "As Widowmaker, beat the game or obliterate on Monsoon.");
}
private static UnlockableDef NewUnlockable<T>(string AchievementIdentifier, Sprite Icon, string Title, string Description) where T : BaseAchievement
{
string text = "ACHIEVEMENT_WIDOWMAKER_";
UnlockableDef val = ScriptableObject.CreateInstance<UnlockableDef>();
string langName = text + AchievementIdentifier + "_NAME";
string langDesc = text + AchievementIdentifier + "_DESCRIPTION";
LanguageAPI.Add(langName, Title);
LanguageAPI.Add(langDesc, Description);
Func<string> func = () => Language.GetStringFormatted("UNLOCKED_FORMAT", new object[2]
{
Language.GetString(langName),
Language.GetString(langDesc)
});
Type typeFromHandle = typeof(T);
val.cachedName = text + AchievementIdentifier + "_UNLOCKABLE_ID";
val.getHowToUnlockString = func;
val.getUnlockedString = func;
val.achievementIcon = Icon;
val.sortScore = 200;
val.hidden = false;
ContentAddition.AddUnlockableDef(val);
return val;
}
}
internal class Assets
{
public static AssetBundle MainAssetBundle;
public static T Load<T>(string name) where T : Object
{
return MainAssetBundle.LoadAsset<T>(name);
}
public static void PopulateAssets()
{
Assembly executingAssembly = Assembly.GetExecutingAssembly();
if ((Object)(object)MainAssetBundle == (Object)null)
{
using Stream stream = executingAssembly.GetManifestResourceStream("Widowmaker.AssetBundle.widowmakerassets");
MainAssetBundle = AssetBundle.LoadFromStream(stream);
}
using Stream stream2 = executingAssembly.GetManifestResourceStream("Widowmaker.Widowmaker.bnk");
byte[] array = new byte[stream2.Length];
stream2.Read(array, 0, array.Length);
SoundBanks.Add(array);
}
}
internal class DisplayBehaviour : MonoBehaviour
{
public GameObject line;
private float stopwatch;
private uint ID;
public Animator sniperAnimator;
private void Start()
{
ID = AkSoundEngine.PostEvent("Play_Widowmaker_Intro", ((Component)this).gameObject);
}
private void OnDisable()
{
AkSoundEngine.StopPlayingID(ID);
}
public void ActivateSniper()
{
sniperAnimator.SetBool("scope", true);
}
private void FixedUpdate()
{
stopwatch += Time.fixedDeltaTime;
if (stopwatch >= 0.4f && !line.activeInHierarchy)
{
line.SetActive(true);
}
}
}
internal class HookBehaviour : MonoBehaviour, IProjectileImpactBehavior
{
private bool collision;
private WidowBehaviour behaviour;
private GameObject owner;
private Transform muzzle;
private LineRenderer line;
private ProjectileSimple simple;
private Rigidbody rb;
private Collider collider;
private uint ID;
private void Awake()
{
line = ((Component)this).GetComponent<LineRenderer>();
simple = ((Component)this).GetComponent<ProjectileSimple>();
rb = ((Component)this).GetComponent<Rigidbody>();
collider = ((Component)this).GetComponent<Collider>();
}
private void Start()
{
owner = ((Component)this).GetComponent<ProjectileController>().owner;
behaviour = owner.GetComponent<WidowBehaviour>();
behaviour.hookProjectile = ((Component)this).gameObject;
muzzle = ((Component)owner.GetComponent<ModelLocator>().modelTransform).GetComponent<ChildLocator>().FindChild("hookMuzzle");
ID = AkSoundEngine.PostEvent("Play_Widowmaker_Hook_Loop", ((Component)this).gameObject);
}
private void OnDisable()
{
AkSoundEngine.StopPlayingID(ID);
}
public void OnCollisionEnter(Collision collision)
{
}
public void OnProjectileImpact(ProjectileImpactInfo impactInfo)
{
//IL_0009: 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_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ca: Unknown result type (might be due to invalid IL or missing references)
//IL_0069: Unknown result type (might be due to invalid IL or missing references)
//IL_006a: Unknown result type (might be due to invalid IL or missing references)
//IL_006f: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
if (collision || !Object.op_Implicit((Object)(object)impactInfo.collider))
{
return;
}
collision = true;
if (Object.op_Implicit((Object)(object)((Component)impactInfo.collider).GetComponent<HurtBox>()))
{
((Component)this).transform.parent = ((Component)impactInfo.collider).transform;
}
if (Object.op_Implicit((Object)(object)behaviour))
{
behaviour.hookPos = impactInfo.estimatedPointOfImpact;
((Behaviour)simple).enabled = false;
rb.velocity = Vector3.zero;
if (Util.HasEffectiveAuthority(owner))
{
owner.GetComponent<EntityStateMachine>().SetNextState((EntityState)(object)new HookState());
}
}
EffectManager.SimpleEffect(Prefabs.Load<GameObject>("RoR2/Base/Common/VFX/OmniImpactVFXSlash.prefab"), impactInfo.estimatedPointOfImpact, Quaternion.identity, false);
AkSoundEngine.PostEvent("Play_gravekeeper_attack2_impact", ((Component)this).gameObject);
}
private void UpdateLine()
{
//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_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)
if (Object.op_Implicit((Object)(object)line) && Object.op_Implicit((Object)(object)muzzle))
{
line.SetPositions((Vector3[])(object)new Vector3[2]
{
((Component)this).transform.position,
muzzle.position
});
}
}
private void FixedUpdate()
{
UpdateLine();
}
private void Update()
{
//IL_0094: 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_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
if (!Object.op_Implicit((Object)(object)owner))
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
if (!Object.op_Implicit((Object)(object)line) || !Object.op_Implicit((Object)(object)muzzle))
{
return;
}
UpdateLine();
if (Object.op_Implicit((Object)(object)behaviour) && simple.stopwatch >= behaviour.hookDuration)
{
collider.enabled = false;
Transform transform = ((Component)this).transform;
Vector3 val = muzzle.position - ((Component)this).transform.position;
transform.forward = ((Vector3)(ref val)).normalized;
if (Vector3.Distance(muzzle.position, ((Component)this).transform.position) <= 5f)
{
Object.Destroy((Object)(object)((Component)this).gameObject);
}
}
}
}
internal class TracerEmit : MonoBehaviour
{
public int particleAmount = 1000;
private void Start()
{
((Component)this).GetComponent<Tracer>().beamObject.GetComponent<ParticleSystem>().Emit(particleAmount);
}
}
internal class VisualizerPrefabSetter : MonoBehaviour
{
private SniperTargetViewer target;
private WidowBehaviour behaviour;
private GameObject visualizerPrefab;
private void Awake()
{
target = ((Component)this).GetComponent<SniperTargetViewer>();
visualizerPrefab = target.visualizerPrefab;
}
private void Update()
{
if (!Object.op_Implicit((Object)(object)behaviour) && Object.op_Implicit((Object)(object)target.hud) && Object.op_Implicit((Object)(object)target.hud.targetBodyObject))
{
behaviour = target.hud.targetBodyObject.GetComponent<WidowBehaviour>();
return;
}
GameObject val = (behaviour.emp ? Prefabs.targetVisualizerEmp : Prefabs.targetVisualizer);
if ((Object)(object)visualizerPrefab != (Object)(object)val)
{
visualizerPrefab = val;
target.SetDisplayedTargets((IReadOnlyList<HurtBox>)Array.Empty<HurtBox>());
target.hurtBoxToVisualizer.Clear();
}
target.visualizerPrefab = visualizerPrefab;
}
}
internal class WidowBehaviour : MonoBehaviour
{
private CharacterBody body;
public bool emp;
public bool scoping;
public float charge;
public float maxCharge = 1f;
private float stopwatch;
private float baseCooldown = 0.5f;
private float cooldownStopwatch = 0.5f;
public string path = "RoR2/Junk/Bandit/MuzzleflashBanditPistol.prefab";
public Vector3 hookPos;
public float maxHookDistance = 8f;
public float hookSpeed = 0.25f;
public float hookForce = 10f;
public float hookDuration = 0.3f;
public float minHookSpeed = 7f;
public float maxHookSpeed = 15f;
public float hookUpForceMult = 0.5f;
public GameObject hookProjectile;
private uint ID;
private void Awake()
{
body = ((Component)this).GetComponent<CharacterBody>();
}
private void Update()
{
if (Object.op_Implicit((Object)(object)body))
{
if (body.hasEffectiveAuthority)
{
body.skillLocator.primary.skillDef.icon = ((!scoping) ? Prefabs.smg : (emp ? Prefabs.sniperEmp : Prefabs.sniper));
}
int num = (Object.op_Implicit((Object)(object)body.inventory) ? body.inventory.GetItemCount(Items.SecondarySkillMagazine) : 0);
GenericSkill primary = body.skillLocator.primary;
primary.maxStock = primary.skillDef.GetMaxStock(primary) + primary.bonusStockFromBody + num * 5;
}
}
private void FixedUpdate()
{
if (!Object.op_Implicit((Object)(object)body))
{
return;
}
cooldownStopwatch += Time.fixedDeltaTime;
if (scoping && cooldownStopwatch >= baseCooldown / body.attackSpeed)
{
if (stopwatch == 0f && body.hasEffectiveAuthority)
{
ID = AkSoundEngine.PostEvent("Play_Widowmaker_Scope_Charge", ((Component)this).gameObject);
}
stopwatch += Time.fixedDeltaTime;
}
else
{
AkSoundEngine.StopPlayingID(ID);
stopwatch = 0f;
}
charge = Mathf.Clamp01(stopwatch / (maxCharge / body.attackSpeed));
}
public void ResetCharge()
{
cooldownStopwatch = 0f;
stopwatch = 0f;
charge = 0f;
}
}
internal class WidowScopeBehaviour : MonoBehaviour
{
public WidowBehaviour behaviour;
public GameObject indicator1;
public GameObject indicator2;
public GameObject indicator3;
public GameObject fullcharge;
public TextMeshProUGUI text;
private bool playedSound;
private void FixedUpdate()
{
if (Object.op_Implicit((Object)(object)behaviour) && Object.op_Implicit((Object)(object)indicator1) && Object.op_Implicit((Object)(object)text) && Object.op_Implicit((Object)(object)fullcharge))
{
indicator1.SetActive(behaviour.charge >= 0.3f);
indicator2.SetActive(behaviour.charge >= 0.66f);
indicator3.SetActive(behaviour.charge >= 1f);
fullcharge.SetActive(behaviour.charge >= 1f);
if (fullcharge.activeInHierarchy && !playedSound)
{
playedSound = true;
}
else
{
playedSound = false;
}
((TMP_Text)text).text = Mathf.CeilToInt(behaviour.charge * 100f) + "%";
}
}
}
internal class Hook
{
internal static void Hooks()
{
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0012: Expected O, but got Unknown
RecalculateStatsAPI.GetStatCoefficients += new StatHookEventHandler(RecalculateStatsAPI_GetStatCoefficients);
}
private static void RecalculateStatsAPI_GetStatCoefficients(CharacterBody sender, StatHookEventArgs args)
{
if (sender.HasBuff(Prefabs.visor))
{
args.critDamageMultAdd += sender.critMultiplier;
}
}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("com.Dragonyck.Widowmaker", "Widowmaker", "1.0.2")]
[NetworkCompatibility(/*Could not decode attribute arguments.*/)]
public class MainPlugin : BaseUnityPlugin
{
public const string MODUID = "com.Dragonyck.Widowmaker";
public const string MODNAME = "Widowmaker";
public const string VERSION = "1.0.2";
public const string SURVIVORNAME = "Widowmaker";
public const string SURVIVORNAMEKEY = "WIDOWMAKER";
public static GameObject characterPrefab;
public static readonly Color characterColor = Color32.op_Implicit(new Color32((byte)212, (byte)7, (byte)64, byte.MaxValue));
private void Awake()
{
Assets.PopulateAssets();
Achievements.RegisterUnlockables();
Prefabs.CreatePrefabs();
CreatePrefab();
RegisterStates();
RegisterCharacter();
Hook.Hooks();
}
internal static void CreatePrefab()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_00de: Unknown result type (might be due to invalid IL or missing references)
//IL_00e4: Expected O, but got Unknown
//IL_010f: Unknown result type (might be due to invalid IL or missing references)
//IL_0120: Unknown result type (might be due to invalid IL or missing references)
//IL_0131: Unknown result type (might be due to invalid IL or missing references)
//IL_013b: Unknown result type (might be due to invalid IL or missing references)
//IL_014b: Unknown result type (might be due to invalid IL or missing references)
//IL_0151: Expected O, but got Unknown
//IL_0178: Unknown result type (might be due to invalid IL or missing references)
//IL_0189: Unknown result type (might be due to invalid IL or missing references)
//IL_019a: Unknown result type (might be due to invalid IL or missing references)
//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
//IL_01ca: Unknown result type (might be due to invalid IL or missing references)
//IL_01d7: Unknown result type (might be due to invalid IL or missing references)
//IL_0249: Unknown result type (might be due to invalid IL or missing references)
//IL_037a: Unknown result type (might be due to invalid IL or missing references)
//IL_03b4: Unknown result type (might be due to invalid IL or missing references)
//IL_03b9: Unknown result type (might be due to invalid IL or missing references)
//IL_041d: Unknown result type (might be due to invalid IL or missing references)
//IL_0422: Unknown result type (might be due to invalid IL or missing references)
//IL_044f: Unknown result type (might be due to invalid IL or missing references)
//IL_0454: Unknown result type (might be due to invalid IL or missing references)
//IL_04dd: Unknown result type (might be due to invalid IL or missing references)
//IL_0508: Unknown result type (might be due to invalid IL or missing references)
//IL_0515: Unknown result type (might be due to invalid IL or missing references)
//IL_05e5: Unknown result type (might be due to invalid IL or missing references)
//IL_05ea: Unknown result type (might be due to invalid IL or missing references)
//IL_05ef: Unknown result type (might be due to invalid IL or missing references)
//IL_060a: Unknown result type (might be due to invalid IL or missing references)
//IL_060f: Unknown result type (might be due to invalid IL or missing references)
//IL_0614: Unknown result type (might be due to invalid IL or missing references)
//IL_062f: Unknown result type (might be due to invalid IL or missing references)
//IL_0634: Unknown result type (might be due to invalid IL or missing references)
//IL_0639: Unknown result type (might be due to invalid IL or missing references)
//IL_064e: Unknown result type (might be due to invalid IL or missing references)
//IL_0653: Unknown result type (might be due to invalid IL or missing references)
//IL_0658: Unknown result type (might be due to invalid IL or missing references)
//IL_065d: Unknown result type (might be due to invalid IL or missing references)
//IL_0696: Unknown result type (might be due to invalid IL or missing references)
//IL_069b: Unknown result type (might be due to invalid IL or missing references)
//IL_06a0: Unknown result type (might be due to invalid IL or missing references)
//IL_06b3: Unknown result type (might be due to invalid IL or missing references)
//IL_06b8: Unknown result type (might be due to invalid IL or missing references)
//IL_06bd: Unknown result type (might be due to invalid IL or missing references)
//IL_06d2: Unknown result type (might be due to invalid IL or missing references)
//IL_06d7: Unknown result type (might be due to invalid IL or missing references)
//IL_06dc: Unknown result type (might be due to invalid IL or missing references)
//IL_06ee: Unknown result type (might be due to invalid IL or missing references)
//IL_06f3: Unknown result type (might be due to invalid IL or missing references)
//IL_06f8: Unknown result type (might be due to invalid IL or missing references)
//IL_06fd: Unknown result type (might be due to invalid IL or missing references)
//IL_089e: Unknown result type (might be due to invalid IL or missing references)
//IL_0933: Unknown result type (might be due to invalid IL or missing references)
//IL_0938: Unknown result type (might be due to invalid IL or missing references)
//IL_097b: Unknown result type (might be due to invalid IL or missing references)
//IL_0980: Unknown result type (might be due to invalid IL or missing references)
//IL_09ae: Unknown result type (might be due to invalid IL or missing references)
//IL_09b3: Unknown result type (might be due to invalid IL or missing references)
GameObject val = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Commando/CommandoBody.prefab").WaitForCompletion();
characterPrefab = PrefabAPI.InstantiateClone(val, "WidowmakerBody", true);
characterPrefab.GetComponent<NetworkIdentity>().localPlayerAuthority = true;
characterPrefab.AddComponent<WidowBehaviour>();
Object.Destroy((Object)(object)((Component)characterPrefab.transform.Find("ModelBase")).gameObject);
Object.Destroy((Object)(object)((Component)characterPrefab.transform.Find("CameraPivot")).gameObject);
Object.Destroy((Object)(object)((Component)characterPrefab.transform.Find("AimOrigin")).gameObject);
GameObject val2 = Assets.MainAssetBundle.LoadAsset<GameObject>("widowMdl");
Utils.UpdateMaterial(Assets.MainAssetBundle.LoadAsset<Material>("line"));
Utils.UpdateMaterial(Assets.MainAssetBundle.LoadAsset<Material>("hook"));
GameObject val3 = new GameObject("ModelBase");
val3.transform.parent = characterPrefab.transform;
val3.transform.localPosition = new Vector3(0f, -0.94f, 0f);
val3.transform.localRotation = Quaternion.identity;
val3.transform.localScale = Vector3.one * 1.2f;
GameObject val4 = new GameObject("AimOrigin");
val4.transform.parent = val3.transform;
val4.transform.localPosition = new Vector3(0f, 1f, 0f);
val4.transform.localRotation = Quaternion.identity;
val4.transform.localScale = Vector3.one;
Transform transform = val2.transform;
transform.parent = val3.transform;
transform.localPosition = Vector3.zero;
transform.localScale = Vector3.one;
transform.localRotation = Quaternion.identity;
CharacterDirection component = characterPrefab.GetComponent<CharacterDirection>();
component.targetTransform = val3.transform;
component.modelAnimator = val2.GetComponentInChildren<Animator>();
component.turnSpeed = 720f;
CharacterBody component2 = characterPrefab.GetComponent<CharacterBody>();
((Object)component2).name = "WidowmakerBody";
component2.baseNameToken = "WIDOWMAKER_NAME";
component2.subtitleNameToken = "WIDOWMAKER_SUBTITLE";
component2.bodyFlags = (BodyFlags)17;
component2.rootMotionInMainState = false;
component2.mainRootSpeed = 0f;
component2.baseMaxHealth = 110f;
component2.levelMaxHealth = 35f;
component2.baseRegen = 1.5f;
component2.levelRegen = 0.2f;
component2.baseMaxShield = 0f;
component2.levelMaxShield = 0f;
component2.baseMoveSpeed = 7f;
component2.levelMoveSpeed = 0f;
component2.baseAcceleration = 110f;
component2.baseJumpPower = 15f;
component2.levelJumpPower = 0f;
component2.baseDamage = 12f;
component2.levelDamage = 2.4f;
component2.baseAttackSpeed = 1f;
component2.levelAttackSpeed = 0f;
component2.baseCrit = 1f;
component2.levelCrit = 0f;
component2.baseArmor = 0f;
component2.levelArmor = 0f;
component2.baseJumpCount = 1;
component2.sprintingSpeedMultiplier = 1.45f;
component2.wasLucky = false;
component2.hideCrosshair = false;
component2.aimOriginTransform = val4.transform;
component2.hullClassification = (HullClassification)0;
component2.portraitIcon = (Texture)(object)Assets.MainAssetBundle.LoadAsset<Sprite>("portrait1x128").texture;
component2.isChampion = false;
component2.currentVehicle = null;
component2.skinIndex = 0u;
component2.bodyColor = characterColor;
CharacterMotor component3 = characterPrefab.GetComponent<CharacterMotor>();
component3.walkSpeedPenaltyCoefficient = 1f;
component3.characterDirection = component;
component3.muteWalkMotion = false;
component3.mass = 160f;
component3.airControl = 0.25f;
component3.disableAirControlUntilCollision = false;
component3.generateParametersOnAwake = true;
InputBankTest component4 = characterPrefab.GetComponent<InputBankTest>();
component4.moveVector = Vector3.zero;
CameraTargetParams component5 = characterPrefab.GetComponent<CameraTargetParams>();
component5.cameraParams = val.GetComponent<CameraTargetParams>().cameraParams;
component5.cameraPivotTransform = null;
component5.recoil = Vector2.zero;
component5.dontRaycastToPivot = false;
ModelLocator component6 = characterPrefab.GetComponent<ModelLocator>();
component6.modelTransform = transform;
component6.modelBaseTransform = val3.transform;
component6.dontReleaseModelOnDeath = false;
component6.autoUpdateModelTransform = true;
component6.dontDetatchFromParent = false;
component6.noCorpse = false;
component6.normalizeToFloor = false;
component6.preserveModel = false;
ChildLocator component7 = val2.GetComponent<ChildLocator>();
CharacterModel val5 = val2.AddComponent<CharacterModel>();
SkinnedMeshRenderer[] componentsInChildren = val2.GetComponentsInChildren<SkinnedMeshRenderer>();
List<RendererInfo> list = new List<RendererInfo>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
list.Add(new RendererInfo
{
renderer = (Renderer)(object)componentsInChildren[i],
defaultMaterial = Utils.InstantiateMaterial(((Renderer)componentsInChildren[i]).material),
defaultShadowCastingMode = (ShadowCastingMode)1,
ignoreOverlays = false
});
}
RendererInfo[] array = list.ToArray();
val5.body = component2;
val5.baseRendererInfos = array;
val5.autoPopulateLightInfos = true;
val5.invisibilityCount = 0;
val5.temporaryOverlays = new List<TemporaryOverlay>();
val5.mainSkinnedMeshRenderer = componentsInChildren[0];
GameObject gameObject = ((Component)transform).gameObject;
CharacterModel component8 = gameObject.GetComponent<CharacterModel>();
ModelSkinController val6 = gameObject.AddComponent<ModelSkinController>();
ChildLocator component9 = gameObject.GetComponent<ChildLocator>();
LanguageAPI.Add("WIDOWMAKERBODY_DEFAULT_SKIN_NAME", "Default");
LanguageAPI.Add("WIDOWMAKERBODY_MASTERY_SKIN_NAME", "Overwatch 1");
val6.skins = (SkinDef[])(object)new SkinDef[2]
{
LoadoutAPI.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(componentsInChildren, gameObject, "WIDOWMAKERBODY_DEFAULT_SKIN_NAME", "base", array, Color32.op_Implicit(new Color32((byte)30, (byte)30, (byte)30, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)169, (byte)169, (byte)177, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)147, (byte)138, (byte)254, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)96, (byte)72, (byte)134, byte.MaxValue)))),
LoadoutAPI.CreateNewSkinDef(Utils.CreateNewSkinDefInfo(componentsInChildren, gameObject, "WIDOWMAKERBODY_MASTERY_SKIN_NAME", "skin", array, Color32.op_Implicit(new Color32((byte)249, (byte)197, (byte)250, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)231, (byte)4, (byte)4, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)103, (byte)110, (byte)167, byte.MaxValue)), Color32.op_Implicit(new Color32((byte)75, (byte)75, (byte)75, byte.MaxValue))))
};
SkinnedMeshRenderer[] array2 = componentsInChildren;
foreach (SkinnedMeshRenderer val7 in array2)
{
if (((Object)val7).name.Contains("skin"))
{
((Component)val7).gameObject.SetActive(false);
}
}
HealthComponent component10 = characterPrefab.GetComponent<HealthComponent>();
component10.health = component2.baseMaxHealth;
component10.shield = 0f;
component10.barrier = 0f;
component10.magnetiCharge = 0f;
component10.body = null;
component10.dontShowHealthbar = false;
characterPrefab.GetComponent<Interactor>().maxInteractionDistance = 3f;
characterPrefab.GetComponent<InteractionDriver>().highlightInteractor = true;
SfxLocator component11 = characterPrefab.GetComponent<SfxLocator>();
component11.deathSound = "Play_ui_player_death";
component11.barkSound = "";
component11.openSound = "";
component11.landingSound = "Play_char_land";
component11.fallDamageSound = "Play_char_land_fall_damage";
component11.aliveLoopStart = "";
component11.aliveLoopStop = "";
characterPrefab.GetComponent<Rigidbody>().mass = 100f;
Collider[] componentsInChildren2 = val2.GetComponentsInChildren<Collider>();
HurtBoxGroup val8 = val2.AddComponent<HurtBoxGroup>();
List<HurtBox> list2 = new List<HurtBox>();
Collider[] array3 = componentsInChildren2;
foreach (Collider val9 in array3)
{
HurtBox val10 = ((Component)val9).gameObject.AddComponent<HurtBox>();
((Component)val10).gameObject.layer = LayerIndex.entityPrecise.intVal;
val10.healthComponent = component10;
val10.isBullseye = true;
val10.damageModifier = (DamageModifier)0;
val10.hurtBoxGroup = val8;
val10.indexInGroup = 0;
val8.mainHurtBox = val10;
val8.bullseyeCount = 1;
list2.Add(val10);
}
val8.hurtBoxes = list2.ToArray();
KinematicCharacterMotor component12 = characterPrefab.GetComponent<KinematicCharacterMotor>();
component12.CharacterController = (BaseCharacterController)(object)component3;
FootstepHandler val11 = val2.AddComponent<FootstepHandler>();
val11.baseFootstepString = "Play_player_footstep";
val11.sprintFootstepOverrideString = "";
val11.enableFootstepDust = true;
val11.footstepDustPrefab = Addressables.LoadAssetAsync<GameObject>((object)"RoR2/Base/Common/VFX/GenericFootstepDust.prefab").WaitForCompletion();
Utils.NewStateMachine<Idle>(characterPrefab, "Scope");
Utils.NewStateMachine<Idle>(characterPrefab, "Visor");
EntityStateMachine component13 = ((Component)component2).GetComponent<EntityStateMachine>();
component13.mainStateType = new SerializableEntityStateType(typeof(CharacterMain));
CharacterDeathBehavior component14 = characterPrefab.GetComponent<CharacterDeathBehavior>();
component14.deathStateMachine = characterPrefab.GetComponent<EntityStateMachine>();
component14.deathState = new SerializableEntityStateType(typeof(GenericCharacterDeath));
NetworkStateMachine component15 = ((Component)component2).GetComponent<NetworkStateMachine>();
component15.stateMachines = ((Component)component2).GetComponents<EntityStateMachine>();
ContentAddition.AddBody(characterPrefab);
}
private void RegisterCharacter()
{
//IL_00bb: Unknown result type (might be due to invalid IL or missing references)
//IL_00c0: Unknown result type (might be due to invalid IL or missing references)
string text = "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > " + Environment.NewLine + "<style=cSub>\r\n\r\n< ! > ";
string text2 = "..and so she left.";
string text3 = "..and so she vanished.";
LanguageAPI.Add("WIDOWMAKER_NAME", "Widowmaker");
LanguageAPI.Add("WIDOWMAKER_DESCRIPTION", text);
LanguageAPI.Add("WIDOWMAKER_SUBTITLE", "");
LanguageAPI.Add("WIDOWMAKER_OUTRO", text2);
LanguageAPI.Add("WIDOWMAKER_FAIL", text3);
SurvivorDef val = ScriptableObject.CreateInstance<SurvivorDef>();
val.cachedName = "WIDOWMAKER_NAME";
val.unlockableDef = null;
val.descriptionToken = "WIDOWMAKER_DESCRIPTION";
val.primaryColor = characterColor;
val.bodyPrefab = characterPrefab;
val.displayPrefab = Utils.NewDisplayModel(((Component)characterPrefab.GetComponent<ModelLocator>().modelBaseTransform).gameObject, "WidowmakerDisplay");
val.outroFlavorToken = "WIDOWMAKER_OUTRO";
val.desiredSortPosition = 20f;
val.mainEndingEscapeFailureFlavorToken = "WIDOWMAKER_FAIL";
ContentAddition.AddSurvivorDef(val);
SkillSetup();
GameObject val2 = PrefabAPI.InstantiateClone(Prefabs.Load<GameObject>("RoR2/Base/Commando/CommandoMonsterMaster.prefab"), "WidowmakerMaster", true);
ContentAddition.AddMaster(val2);
CharacterMaster component = val2.GetComponent<CharacterMaster>();
component.bodyPrefab = characterPrefab;
}
private void RegisterStates()
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: 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_0023: 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_0033: Unknown result type (might be due to invalid IL or missing references)
//IL_003b: Unknown result type (might be due to invalid IL or missing references)
bool flag = default(bool);
ContentAddition.AddEntityState<Primary>(ref flag);
ContentAddition.AddEntityState<PrimaryReloadWait>(ref flag);
ContentAddition.AddEntityState<Reload>(ref flag);
ContentAddition.AddEntityState<Secondary>(ref flag);
ContentAddition.AddEntityState<Utility>(ref flag);
ContentAddition.AddEntityState<Special>(ref flag);
ContentAddition.AddEntityState<CharacterMain>(ref flag);
ContentAddition.AddEntityState<HookState>(ref flag);
}
private void SkillSetup()
{
GenericSkill[] componentsInChildren = characterPrefab.GetComponentsInChildren<GenericSkill>();
foreach (GenericSkill val in componentsInChildren)
{
Object.DestroyImmediate((Object)(object)val);
}
PassiveSetup();
PrimarySetup();
SecondarySetup();
UtilitySetup();
SpecialSetup();
}
private void PassiveSetup()
{
SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
LanguageAPI.Add("WIDOWMAKER_PASSIVE_NAME", "Widow's Kiss");
LanguageAPI.Add("WIDOWMAKER_PASSIVE_DESCRIPTION", "All <style=cIsDamage>critical strike chance</style> is converted to <style=cIsDamage>critical damage</style> instead.");
PassiveItemSkillDef val = Object.Instantiate<PassiveItemSkillDef>(Prefabs.Load<PassiveItemSkillDef>("RoR2/DLC1/Railgunner/RailgunnerBodyPassiveConvertCrit.asset"));
((SkillDef)val).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("passive");
((SkillDef)val).skillDescriptionToken = "WIDOWMAKER_PASSIVE_DESCRIPTION";
((SkillDef)val).skillName = "WIDOWMAKER_PASSIVE_NAME";
((SkillDef)val).skillNameToken = "WIDOWMAKER_PASSIVE_NAME";
Utils.NewGenericSkill(characterPrefab, (SkillDef)(object)val);
}
private void PrimarySetup()
{
//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_007c: Unknown result type (might be due to invalid IL or missing references)
SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
LanguageAPI.Add("WIDOWMAKER_M1", "Machine Gun");
LanguageAPI.Add("WIDOWMAKER_M1_DESCRIPTION", "Fire a Automatic assault weapon for <style=cIsDamage>120% damage</style>. Automatically <style=cIsUtility>recharges</style> after firing all bullets.");
SkillDef val = ScriptableObject.CreateInstance<SkillDef>();
val.activationState = new SerializableEntityStateType(typeof(Primary));
val.activationStateMachineName = "Weapon";
val.baseMaxStock = 35;
val.baseRechargeInterval = 0f;
val.beginSkillCooldownOnSkillEnd = true;
val.canceledFromSprinting = false;
val.fullRestockOnAssign = true;
val.interruptPriority = (InterruptPriority)0;
val.isCombatSkill = true;
val.mustKeyPress = false;
val.cancelSprintingOnActivation = true;
val.rechargeStock = 0;
val.requiredStock = 1;
val.stockToConsume = 1;
val.icon = Prefabs.smg;
val.skillDescriptionToken = "WIDOWMAKER_M1_DESCRIPTION";
val.skillName = "WIDOWMAKER_M1";
val.skillNameToken = "WIDOWMAKER_M1";
ContentAddition.AddSkillDef(val);
component.primary = Utils.NewGenericSkill(characterPrefab, val);
}
private void SecondarySetup()
{
//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_007b: Unknown result type (might be due to invalid IL or missing references)
SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
LanguageAPI.Add("WIDOWMAKER_M2", "Sniper");
LanguageAPI.Add("WIDOWMAKER_M2_DESCRIPTION", "Hold for long-ranged sniper weapon, charging up over time. Highlights <style=cIsDamage>Weak Points</style>. Fire a piercing shot for <style=cIsDamage>200%-1000% damage</style>. Consumes <style=cIsDamage>5</style> bullets.");
WidowSkillDef widowSkillDef = ScriptableObject.CreateInstance<WidowSkillDef>();
((SkillDef)widowSkillDef).activationState = new SerializableEntityStateType(typeof(Secondary));
((SkillDef)widowSkillDef).activationStateMachineName = "Scope";
((SkillDef)widowSkillDef).baseMaxStock = 0;
((SkillDef)widowSkillDef).baseRechargeInterval = 0f;
((SkillDef)widowSkillDef).beginSkillCooldownOnSkillEnd = true;
((SkillDef)widowSkillDef).canceledFromSprinting = false;
((SkillDef)widowSkillDef).fullRestockOnAssign = false;
((SkillDef)widowSkillDef).interruptPriority = (InterruptPriority)0;
((SkillDef)widowSkillDef).isCombatSkill = true;
((SkillDef)widowSkillDef).mustKeyPress = true;
((SkillDef)widowSkillDef).cancelSprintingOnActivation = true;
((SkillDef)widowSkillDef).rechargeStock = 0;
((SkillDef)widowSkillDef).requiredStock = 0;
((SkillDef)widowSkillDef).stockToConsume = 0;
((SkillDef)widowSkillDef).icon = Assets.MainAssetBundle.LoadAsset<Sprite>("secondary");
((SkillDef)widowSkillDef).skillDescriptionToken = "WIDOWMAKER_M2_DESCRIPTION";
((SkillDef)widowSkillDef).skillName = "WIDOWMAKER_M2";
((SkillDef)widowSkillDef).skillNameToken = "WIDOWMAKER_M2";
ContentAddition.AddSkillDef((SkillDef)(object)widowSkillDef);
component.secondary = Utils.NewGenericSkill(characterPrefab, (SkillDef)(object)widowSkillDef);
}
private void UtilitySetup()
{
//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_007b: Unknown result type (might be due to invalid IL or missing references)
SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
LanguageAPI.Add("WIDOWMAKER_UTIL", "Grappling Hook");
LanguageAPI.Add("WIDOWMAKER_UTIL_DESCRIPTION", "Launch a hook that pulls you towards a ledge. Can be cancelled by pressing the Jump key.");
SkillDef val = ScriptableObject.CreateInstance<SkillDef>();
val.activationState = new SerializableEntityStateType(typeof(Utility));
val.activationStateMachineName = "Slide";
val.baseMaxStock = 1;
val.baseRechargeInterval = 5f;
val.beginSkillCooldownOnSkillEnd = true;
val.canceledFromSprinting = false;
val.fullRestockOnAssign = false;
val.interruptPriority = (InterruptPriority)0;
val.isCombatSkill = false;
val.mustKeyPress = true;
val.cancelSprintingOnActivation = false;
val.rechargeStock = 1;
val.requiredStock = 1;
val.stockToConsume = 1;
val.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("utility");
val.skillDescriptionToken = "WIDOWMAKER_UTIL_DESCRIPTION";
val.skillName = "WIDOWMAKER_UTIL";
val.skillNameToken = "WIDOWMAKER_UTIL";
ContentAddition.AddSkillDef(val);
component.utility = Utils.NewGenericSkill(characterPrefab, val);
}
private void SpecialSetup()
{
//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_007b: Unknown result type (might be due to invalid IL or missing references)
SkillLocator component = characterPrefab.GetComponent<SkillLocator>();
LanguageAPI.Add("WIDOWMAKER_SPEC", "Infra-Sight");
LanguageAPI.Add("WIDOWMAKER_SPEC_DESCRIPTION", "Highlights <style=cIsHealth>True Weak Points</style> for <style=cIsUtility>8s</style>, doubling <style=cIsDamage>critical damage</style>. Can be cancelled by pressing the Jump key.");
SkillDef val = ScriptableObject.CreateInstance<SkillDef>();
val.activationState = new SerializableEntityStateType(typeof(Special));
val.activationStateMachineName = "Visor";
val.baseMaxStock = 1;
val.baseRechargeInterval = 18f;
val.beginSkillCooldownOnSkillEnd = true;
val.canceledFromSprinting = false;
val.fullRestockOnAssign = false;
val.interruptPriority = (InterruptPriority)0;
val.isCombatSkill = true;
val.mustKeyPress = true;
val.cancelSprintingOnActivation = false;
val.rechargeStock = 1;
val.requiredStock = 1;
val.stockToConsume = 1;
val.icon = Assets.MainAssetBundle.LoadAsset<Sprite>("special");
val.skillDescriptionToken = "WIDOWMAKER_SPEC_DESCRIPTION";
val.skillName = "WIDOWMAKER_SPEC";
val.skillNameToken = "WIDOWMAKER_SPEC";
ContentAddition.AddSkillDef(val);
component.special = Utils.NewGenericSkill(characterPrefab, val);
}
}
internal class Prefabs
{
internal static GameObject scope;
internal static GameObject targetVisualizer;
internal static GameObject targetVisualizerEmp;
internal static GameObject hook;
internal static GameObject critEffect;
internal static GameObject critEffectEmp;
internal static GameObject sniperTracer;
internal static GameObject sniperTracerCharged;
internal static GameObject sniperTracerEmp;
internal static GameObject sniperMuzzle;
internal static CharacterCameraParams scopeParamsData;
internal static BuffDef visor;
internal static Material scanMat;
internal static Sprite smg;
internal static Sprite sniper;
internal static Sprite sniperEmp;
internal static T Load<T>(string path)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Unknown result type (might be due to invalid IL or missing references)
return Addressables.LoadAssetAsync<T>((object)path).WaitForCompletion();
}
internal static void CreatePrefabs()
{
//IL_0038: Unknown result type (might be due to invalid IL or missing references)
//IL_0042: Expected O, but got Unknown
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Unknown result type (might be due to invalid IL or missing references)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f3: Expected O, but got Unknown
//IL_0112: Unknown result type (might be due to invalid IL or missing references)
//IL_0182: Unknown result type (might be due to invalid IL or missing references)
//IL_0187: Unknown result type (might be due to invalid IL or missing references)
//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0200: Unknown result type (might be due to invalid IL or missing references)
//IL_024f: Unknown result type (might be due to invalid IL or missing references)
//IL_025b: Unknown result type (might be due to invalid IL or missing references)
//IL_02cf: Unknown result type (might be due to invalid IL or missing references)
//IL_02d5: Expected O, but got Unknown
//IL_02db: Unknown result type (might be due to invalid IL or missing references)
//IL_03a1: Unknown result type (might be due to invalid IL or missing references)
//IL_03b5: Unknown result type (might be due to invalid IL or missing references)
//IL_03bf: Expected O, but got Unknown
//IL_0438: Unknown result type (might be due to invalid IL or missing references)
//IL_0442: Unknown result type (might be due to invalid IL or missing references)
//IL_0463: Unknown result type (might be due to invalid IL or missing references)
//IL_05b0: Unknown result type (might be due to invalid IL or missing references)
//IL_05b7: Expected O, but got Unknown
//IL_05b9: Unknown result type (might be due to invalid IL or missing references)
//IL_05c6: Unknown result type (might be due to invalid IL or missing references)
//IL_05d3: Unknown result type (might be due to invalid IL or missing references)
//IL_05e0: Unknown result type (might be due to invalid IL or missing references)
//IL_05ea: Unknown result type (might be due to invalid IL or missing references)
//IL_054d: Unknown result type (might be due to invalid IL or missing references)
//IL_0552: Unknown result type (might be due to invalid IL or missing references)
//IL_04eb: Unknown result type (might be due to invalid IL or missing references)
//IL_04f5: Unknown result type (might be due to invalid IL or missing references)
//IL_0516: Unknown result type (might be due to invalid IL or missing references)
smg = Assets.Load<Sprite>("primary");
sniper = Assets.Load<Sprite>("sniper");
sniperEmp = Assets.Load<Sprite>("sniperEmp");
scanMat = new Material(Load<Material>("RoR2/InDev/matEcho.mat"));
scanMat.SetTexture("_RemapTex", (Texture)null);
scanMat.SetColor("_TintColor", Color.red);
scanMat.SetFloat("_ZTest", 8f);
scopeParamsData = Load<CharacterCameraParams>("RoR2/DLC1/Railgunner/ccpRailgunnerScopeHeavy.asset");
visor = Utils.NewBuffDef("Infra-Sight", stack: false, hidden: false, Load<Sprite>("RoR2/Base/CritOnUse/texBuffFullCritIcon.tif"), MainPlugin.characterColor);
sniperMuzzle = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Common/VFX/Muzzleflash1.prefab"), "WidowmakerSniperMuzzle", false);
ParticleSystemRenderer[] componentsInChildren = sniperMuzzle.GetComponentsInChildren<ParticleSystemRenderer>();
foreach (ParticleSystemRenderer val in componentsInChildren)
{
((Renderer)val).material = new Material(((Renderer)val).material);
((Renderer)val).material.DisableKeyword("VERTEXCOLOR");
((Renderer)val).material.SetColor("_TintColor", Color.red);
}
ContentAddition.AddEffect(sniperMuzzle);
critEffect = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Common/VFX/CritsparkHeavy.prefab"), "WidowmakerCritEffect", false);
critEffect.GetComponent<EffectComponent>().soundName = "Play_Widowmaker_Sniper_Crit";
ParticleSystem[] componentsInChildren2 = critEffect.GetComponentsInChildren<ParticleSystem>(true);
foreach (ParticleSystem val2 in componentsInChildren2)
{
MainModule main = val2.main;
((MainModule)(ref main)).simulationSpeed = 0.25f;
}
ContentAddition.AddEffect(critEffect);
critEffectEmp = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Golem/ExplosionGolem.prefab"), "WidowmakerCritEffectEmp", false);
critEffectEmp.GetComponent<EffectComponent>().soundName = "Play_Widowmaker_Sniper_CritEmp";
ParticleSystem[] componentsInChildren3 = critEffectEmp.GetComponentsInChildren<ParticleSystem>(true);
foreach (ParticleSystem val3 in componentsInChildren3)
{
MainModule main2 = val3.main;
((MainModule)(ref main2)).simulationSpeed = 0.25f;
}
ContentAddition.AddEffect(critEffectEmp);
sniperTracer = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/ClayBruiser/TracerClayBruiserMinigun.prefab"), "WidowmakerSniperTracer", false);
LineRenderer component = sniperTracer.GetComponent<LineRenderer>();
component.startColor = Color.red;
component.endColor = Color.red;
((Renderer)sniperTracer.GetComponent<Tracer>().beamObject.GetComponent<LineRenderer>()).material = Load<Material>("RoR2/Base/Common/VFX/matEquipmentTrail.mat");
ContentAddition.AddEffect(sniperTracer);
sniperTracerCharged = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Huntress/TracerHuntressSnipe.prefab"), "WidowmakerSniperTracerCharged", false);
((Component)sniperTracerCharged.GetComponentInChildren<LineRenderer>()).gameObject.SetActive(false);
Material val4 = new Material(Load<Material>("RoR2/Base/Huntress/matHuntressSwingTrail.mat"));
val4.SetColor("_TintColor", Color.red);
val4.SetTexture("_MainTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/VFX/texLightning3Mask.tif"));
val4.SetTexture("_RemapTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/ColorRamps/texRampMageFire.png"));
val4.SetFloat("_Boost", 3.5f);
val4.SetFloat("_AlphaBoost", 1.5f);
GameObject beamObject = sniperTracerCharged.GetComponent<Tracer>().beamObject;
beamObject.AddComponent<DestroyOnParticleEnd>();
ParticleSystemRenderer component2 = beamObject.GetComponent<ParticleSystemRenderer>();
component2.trailMaterial = val4;
ContentAddition.AddEffect(sniperTracerCharged);
sniperTracerEmp = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/Base/Golem/TracerGolem.prefab"), "WidowmakerTracerEmp", false);
ParticleSystemRenderer componentInChildren = sniperTracerEmp.GetComponentInChildren<ParticleSystemRenderer>();
((Component)componentInChildren).transform.localScale = new Vector3(1f, 0.3f, 0.3f);
((Renderer)componentInChildren).material = new Material(((Renderer)componentInChildren).material);
((Renderer)componentInChildren).material.SetTexture("_MainTex", (Texture)(object)Load<Texture2D>("RoR2/Base/Common/VFX/texOmniHitspark2Mask.png"));
ContentAddition.AddEffect(sniperTracerEmp);
targetVisualizer = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/DLC1/Railgunner/RailgunnerSniperTargetVisualizerHeavy.prefab"), "WidowmakerScopeTargetVisualizer", false);
Image[] componentsInChildren4 = targetVisualizer.GetComponentsInChildren<Image>();
foreach (Image val5 in componentsInChildren4)
{
if (((Component)val5).transform.GetSiblingIndex() == 0)
{
((Component)val5).transform.localScale = Vector3.one * 0.7f;
((Component)val5).transform.localRotation = Quaternion.Euler(0f, 0f, 45f);
}
else
{
val5.sprite = Assets.Load<Sprite>("target");
}
}
targetVisualizerEmp = PrefabAPI.InstantiateClone(Load<GameObject>("RoR2/DLC1/Railgunner/RailgunnerSniperTargetVisualizerHeavy.prefab"), "WidowmakerScopeTargetVisualizerEmp", false);
Image[] componentsInChildren5 = targetVisualizerEmp.GetComponentsInChildren<Image>();
foreach (Image val6 in componentsInChildren5)
{
if (((Component)val6).transform.GetSiblingIndex() == 0)
{
((Component)val6).transform.localScale = Vector3.one * 0.7f;
((Component)val6).transform.localRotation = Quaternion.Euler(0f, 0f, 45f);
}
else
{
val6.sprite = Assets.Load<Sprite>("targetEmp");
((Graphic)val6).color = Color32.op_Implicit(new Color32(byte.MaxValue, byte.MaxValue, byte.MaxValue, (byte)200));
}
}
scope = PrefabAPI.InstantiateClone(Assets.Load<GameObject>("Scope"), "WidowmakerScope", false);
ChildLocator component3 = scope.GetComponent<ChildLocator>();
GameObject gameObject = ((Component)component3.FindChild("targetViewer")).gameObject;
RectTransform val7 = (RectTransform)gameObject.transform;
((Transform)val7).localScale = Vector3.one;
((Transform)val7).localPosition = Vector3.zero;
val7.anchorMax = Vector2.one;
val7.pivot = Vector2.one * 0.5f;
gameObject.AddComponent<SniperTargetViewer>().visualizerPrefab = targetVisualizer;
gameObject.AddComponent<VisualizerPrefabSetter>();
WidowScopeBehaviour widowScopeBehaviour = scope.AddComponent<WidowScopeBehaviour>();
widowScopeBehaviour.indicator1 = ((Component)component3.FindChild("indicator1")).gameObject;
widowScopeBehaviour.indicator2 = ((Component)component3.FindChild("indicator2")).gameObject;
widowScopeBehaviour.indicator3 = ((Component)component3.FindChild("indicator3")).gameObject;
widowScopeBehaviour.fullcharge = ((Component)component3.FindChild("fullCharge")).gameObject;
widowScopeBehaviour.text = ((Component)component3.FindChild("text")).GetComponent<TextMeshProUGUI>();
Utils.AddScaleComponent(((Component)component3.FindChild("mid")).gameObject, 0.08f);
Utils.AddScaleComponent(((Component)component3.FindChild("dots")).gameObject, 0.12f);
Utils.AddScaleComponent(((Component)component3.FindChild("inner")).gameObject, 0.22f);
Utils.AddScaleComponent(((Component)component3.FindChild("outer")).gameObject, 0.35f);
ObjectScaleCurve val8 = Utils.AddScaleComponent(widowScopeBehaviour.fullcharge, 0.15f);
val8.overallCurve = AnimationCurve.EaseInOut(0f, 1.6f, 1f, 1f);
hook = PrefabAPI.InstantiateClone(Assets.Load<GameObject>("hookProjectile"), "WidowmakerHook", false);
hook.AddComponent<NetworkIdentity>();
hook.layer = LayerIndex.projectile.intVal;
hook.AddComponent<ProjectileNetworkTransform>();
hook.AddComponent<ProjectileController>();
ProjectileSimple val9 = hook.AddComponent<ProjectileSimple>();
val9.desiredForwardSpeed = 270f;
val9.lifetime = 999f;
val9.updateAfterFiring = true;
Utils.AddScaleComponent(((Component)hook.transform.GetChild(0)).gameObject, 0.2f);
hook.AddComponent<HookBehaviour>();
ContentAddition.AddProjectile(hook);
}
}
internal class CharacterMain : GenericCharacterMain
{
}
internal class HookState : GenericCharacterMain
{
private WidowBehaviour behaviour;
private Vector3 pos;
private float moveSpeedScale;
private uint ID;
public override void OnEnter()
{
//IL_001b: 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_0090: 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_00a0: Unknown result type (might be due to invalid IL or missing references)
//IL_00a5: Unknown result type (might be due to invalid IL or missing references)
//IL_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_00b2: 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_00b4: Unknown result type (might be due to invalid IL or missing references)
//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
//IL_00d6: 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_00e1: 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)
//IL_00e9: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
((GenericCharacterMain)this).OnEnter();
behaviour = ((EntityState)this).GetComponent<WidowBehaviour>();
pos = behaviour.hookPos;
moveSpeedScale = Util.Remap(((BaseState)this).moveSpeedStat, 7f, 25f, behaviour.minHookSpeed, behaviour.maxHookSpeed);
((EntityState)this).PlayAnimation("Body", "Hook");
((BaseCharacterMain)this).modelAnimator.SetBool("hook", true);
ID = AkSoundEngine.PostEvent("Play_Widowmaker_Hook_Pull", ((EntityState)this).gameObject);
Vector3 val = pos - ((EntityState)this).transform.position;
Vector2 val2 = Util.Vector3XZToVector2XY(((Vector3)(ref val)).normalized);
if (val2 != Vector2.zero)
{
((Vector2)(ref val2)).Normalize();
val = new Vector3(val2.x, 0f, val2.y);
Vector3 normalized = ((Vector3)(ref val)).normalized;
((EntityState)this).characterDirection.moveVector = normalized;
}
}
public override void OnExit()
{
AkSoundEngine.PostEvent("Play_Widowmaker_Hook_End", ((EntityState)this).gameObject);
AkSoundEngine.StopPlayingID(ID);
((BaseCharacterMain)this).modelAnimator.SetBool("hook", false);
((GenericCharacterMain)this).OnExit();
}
public override void HandleMovements()
{
//IL_0010: 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_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_0028: Unknown result type (might be due to invalid IL or missing references)
//IL_002d: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0101: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Unknown result type (might be due to invalid IL or missing references)
//IL_0112: 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_0129: Unknown result type (might be due to invalid IL or missing references)
//IL_012e: Unknown result type (might be due to invalid IL or missing references)
//IL_0133: 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_0083: 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_0093: 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_00ac: Unknown result type (might be due to invalid IL or missing references)
//IL_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
//IL_00dc: Unknown result type (might be due to invalid IL or missing references)
//IL_00e1: Unknown result type (might be due to invalid IL or missing references)
if (!((EntityState)this).isAuthority)
{
return;
}
Vector3 val = pos - ((EntityState)this).transform.position;
Vector3 normalized = ((Vector3)(ref val)).normalized;
bool down = ((EntityState)this).inputBank.jump.down;
if (Vector3.Distance(((EntityState)this).transform.position, pos) <= behaviour.maxHookDistance || down)
{
((EntityState)this).characterMotor.velocity = normalized * behaviour.hookForce * moveSpeedScale;
if (down)
{
CharacterMotor characterMotor = ((EntityState)this).characterMotor;
characterMotor.velocity += Vector3.up * behaviour.hookForce * moveSpeedScale * behaviour.hookUpForceMult;
}
((EntityState)this).outer.SetNextStateToMain();
}
else
{
((EntityState)this).characterMotor.velocity = Vector3.zero;
CharacterMotor characterMotor2 = ((EntityState)this).characterMotor;
characterMotor2.rootMotion += normalized * behaviour.hookSpeed * moveSpeedScale;
}
}
}
internal class Primary : BaseSkillState
{
private float duration;
private float baseDuration;
private WidowBehaviour behaviour;
private float minSsniperDamageCoefficient = 2f;
private float maxSniperDamageCoefficient = 10f;
private float smgDamageCoefficient = 1.2f;
private GameObject sniperMuzzle = Prefabs.sniperMuzzle;
private GameObject smgTracer = Prefabs.Load<GameObject>("RoR2/Base/Commando/TracerCommandoDefault.prefab");
private GameObject smgMuzzle = Prefabs.Load<GameObject>("RoR2/Base/Common/VFX/Muzzleflash1.prefab");
private GameObject impactEffect = Prefabs.Load<GameObject>("RoR2/Base/Common/VFX/OmniImpactVFX.prefab");
private GameObject bulletSniperTargetHitEffect;
public override void OnEnter()
{
((BaseState)this).OnEnter();
behaviour = ((EntityState)this).GetComponent<WidowBehaviour>();
((BaseState)this).StartAimMode(1f, false);
baseDuration = (behaviour.scoping ? 0.35f : 0.1f);
duration = baseDuration / ((BaseState)this).attackSpeedStat;
if (((EntityState)this).isAuthority && behaviour.scoping)
{
((EntityState)this).skillLocator.primary.DeductStock(4);
}
((EntityState)this).PlayAnimation("Gesture, Override", behaviour.scoping ? "Sniper_Fire" : "SMG_Fire");
if (behaviour.scoping)
{
bool flag = behaviour.charge >= behaviour.maxCharge;
if (((EntityState)this).isAuthority)
{
AkSoundEngine.PostEvent(flag ? "Play_Widowmaker_Sniper_Fire_Strong_UI" : "Play_Widowmaker_Sniper_Fire_Weak_UI", ((EntityState)this).gameObject);
}
else
{
AkSoundEngine.PostEvent(flag ? "Play_Widowmaker_Sniper_Fire_Strong" : "Play_Widowmaker_Sniper_Fire_Weak", ((EntityState)this).gameObject);
}
}
else
{
AkSoundEngine.PostEvent("Play_Widowmaker_SMG_Fire", ((EntityState)this).gameObject);
}
Fire();
behaviour.ResetCharge();
}
private void Fire()
{
//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)
//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
//IL_00f1: Unknown result type (might be due to invalid IL or missing references)
//IL_00f8: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0106: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_010e: Unknown result type (might be due to invalid IL or missing references)
//IL_0113: Unknown result type (might be due to invalid IL or missing references)
//IL_015b: Unknown result type (might be due to invalid IL or missing references)
//IL_015d: Unknown result type (might be due to invalid IL or missing references)
//IL_0162: Unknown result type (might be due to invalid IL or missing references)
//IL_0164: 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_017b: Unknown result type (might be due to invalid IL or missing references)
//IL_0180: Unknown result type (might be due to invalid IL or missing references)
//IL_01a1: Unknown result type (might be due to invalid IL or missing references)
//IL_01ac: Unknown result type (might be due to invalid IL or missing references)
//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
//IL_01d5: Unknown result type (might be due to invalid IL or missing references)
//IL_01f4: Unknown result type (might be due to invalid IL or missing references)
//IL_01fb: Unknown result type (might be due to invalid IL or missing references)
//IL_0201: Unknown result type (might be due to invalid IL or missing references)
//IL_0207: Unknown result type (might be due to invalid IL or missing references)
//IL_0226: Unknown result type (might be due to invalid IL or missing references)
//IL_0231: Unknown result type (might be due to invalid IL or missing references)
//IL_0242: Unknown result type (might be due to invalid IL or missing references)
//IL_0268: Unknown result type (might be due to invalid IL or missing references)
//IL_025c: Unknown result type (might be due to invalid IL or missing references)
//IL_026d: Unknown result type (might be due to invalid IL or missing references)
//IL_0272: Unknown result type (might be due to invalid IL or missing references)
//IL_0279: 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_02d1: Unknown result type (might be due to invalid IL or missing references)
//IL_02dc: Unknown result type (might be due to invalid IL or missing references)
float num = (behaviour.scoping ? 8f : 1.2f);
((BaseState)this).AddRecoil(-1f * num, -1.5f * num, -0.25f * num, 0.25f * num);
((EntityState)this).characterBody.AddSpreadBloom(2f);
EffectManager.SimpleMuzzleFlash(behaviour.scoping ? sniperMuzzle : smgMuzzle, ((EntityState)this).gameObject, "weaponMuzzle", false);
if (behaviour.scoping)
{
bulletSniperTargetHitEffect = BulletAttack.sniperTargetHitEffect;
BulletAttack.sniperTargetHitEffect = (behaviour.emp ? Prefabs.critEffectEmp : ((behaviour.charge >= 1f) ? Prefabs.critEffect : impactEffect));
}
if (((EntityState)this).isAuthority)
{
Ray aimRay = ((BaseState)this).GetAimRay();
float num2 = 0.0425f;
new BulletAttack
{
bulletCount = 1u,
aimVector = ((Ray)(ref aimRay)).direction,
origin = ((Ray)(ref aimRay)).origin,
damage = ((BaseState)this).damageStat * (behaviour.scoping ? Util.Remap(behaviour.charge, 0f, 1f, minSsniperDamageCoefficient, maxSniperDamageCoefficient) : smgDamageCoefficient),
damageColorIndex = (DamageColorIndex)0,
damageType = (DamageType)0,
falloffModel = (FalloffModel)((!behaviour.scoping) ? 1 : 0),
maxDistance = (behaviour.scoping ? 9999 : 250),
force = 80f,
minSpread = 0f - num2,
maxSpread = num2,
isCrit = ((BaseState)this).RollCrit(),
owner = ((EntityState)this).gameObject,
muzzleName = (behaviour.scoping ? "" : "weaponMuzzle"),
smartCollision = true,
procChainMask = default(ProcChainMask),
procCoefficient = (behaviour.scoping ? 0.4f : 0.12f),
radius = 0.05f,
sniper = behaviour.scoping,
stopperMask = ((behaviour.scoping & behaviour.emp) ? ((LayerIndex)(ref LayerIndex.world)).mask : CommonMasks.bullet),
weapon = null,
tracerEffectPrefab = ((!behaviour.scoping) ? smgTracer : (behaviour.emp ? Prefabs.sniperTracerEmp : ((behaviour.charge >= 1f) ? Prefabs.sniperTracerCharged : Prefabs.sniperTracer))),
spreadPitchScale = 1f,
spreadYawScale = 1f,
hitEffectPrefab = impactEffect
}.Fire();
}
BulletAttack.sniperTargetHitEffect = bulletSniperTargetHitEffect;
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
if (((EntityState)this).skillLocator.primary.stock == 0)
{
((EntityState)this).outer.SetNextState((EntityState)(object)new Reload());
}
else
{
((EntityState)this).outer.SetNextState((EntityState)(object)new PrimaryReloadWait());
}
}
}
public override void OnExit()
{
((EntityState)this).OnExit();
}
public override InterruptPriority GetMinimumInterruptPriority()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
return (InterruptPriority)2;
}
}
internal class PrimaryReloadWait : BaseSkillState
{
public float duration = 3f;
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).isAuthority)
{
if (((EntityState)this).fixedAge >= duration)
{
((EntityState)this).outer.SetNextState((EntityState)(object)new Reload());
}
if (((BaseSkillState)this).IsKeyDownAuthority())
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
}
internal class Reload : BaseSkillState
{
private float duration;
private float baseDuration = 1.5f;
private uint ID = 0u;
public override void OnEnter()
{
((BaseState)this).OnEnter();
duration = baseDuration / ((BaseState)this).attackSpeedStat;
((EntityState)this).PlayAnimation("Gesture, Override", "Reload", "Reload", duration);
AkSoundEngine.PostEvent("Play_Widowmaker_Reload", ((EntityState)this).gameObject);
Animator component = ((Component)((BaseState)this).FindModelChild("sniper")).GetComponent<Animator>();
component.SetFloat("reload", ((BaseState)this).attackSpeedStat);
component.Play("Reload", 1);
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= duration * 0.65f && ID == 0)
{
ID = Util.PlayAttackSpeedSound("Play_bandit2_m1_reload_finish", ((EntityState)this).gameObject, ((BaseState)this).attackSpeedStat);
}
if (((EntityState)this).isAuthority)
{
if (((EntityState)this).fixedAge >= duration)
{
((EntityState)this).outer.SetNextStateToMain();
}
else if (((EntityState)this).inputBank.skill1.down && ((EntityState)this).skillLocator.primary.stock > 0)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
public override void OnExit()
{
AkSoundEngine.StopPlayingID(ID);
((EntityState)this).skillLocator.primary.Reset();
((EntityState)this).OnExit();
}
public override InterruptPriority GetMinimumInterruptPriority()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
return (InterruptPriority)1;
}
}
internal class Secondary : BaseSkillState
{
private float duration = 0.12f;
private WidowBehaviour behaviour;
private OverlayController overlayController;
private CameraParamsOverrideHandle cameraParamsOverrideHandle;
private OverrideRequest crosshairOverrideRequest;
private Animator sniperAnimator;
private uint ID;
public override void OnEnter()
{
//IL_005d: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00ce: Unknown result type (might be due to invalid IL or missing references)
//IL_00d5: Unknown result type (might be due to invalid IL or missing references)
//IL_00da: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
((EntityState)this).PlayAnimation("Aim, Override", "AimUp");
behaviour = ((EntityState)this).GetComponent<WidowBehaviour>();
behaviour.scoping = true;
if (((EntityState)this).isAuthority)
{
Prefabs.scope.GetComponent<WidowScopeBehaviour>().behaviour = behaviour;
overlayController = HudOverlayManager.AddOverlay(((EntityState)this).gameObject, new OverlayCreationParams
{
prefab = Prefabs.scope,
childLocatorEntry = "ScopeContainer"
});
crosshairOverrideRequest = CrosshairUtils.RequestOverrideForBody(((EntityState)this).characterBody, Prefabs.Load<GameObject>("RoR2/Base/UI/SimpleDotCrosshair.prefab"), (OverridePriority)1);
cameraParamsOverrideHandle = ((EntityState)this).cameraTargetParams.AddParamsOverride(new CameraParamsOverrideRequest
{
cameraParamsData = Prefabs.scopeParamsData.data,
priority = 1f
}, duration);
}
sniperAnimator = ((Component)((BaseState)this).FindModelChild("sniper")).GetComponent<Animator>();
sniperAnimator.SetBool("scope", true);
}
public override void FixedUpdate()
{
((EntityState)this).FixedUpdate();
((BaseState)this).StartAimMode(1f, false);
((EntityState)this).characterBody.isSprinting = false;
if ((((EntityState)this).isAuthority && !((BaseSkillState)this).IsKeyDownAuthority()) || ((EntityState)this).skillLocator.primary.stock == 0)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
//IL_0070: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Unknown result type (might be due to invalid IL or missing references)
behaviour.scoping = false;
AkSoundEngine.PostEvent("Play_railgunner_m2_scope_out", ((EntityState)this).gameObject);
AkSoundEngine.StopPlayingID(ID);
if (Object.op_Implicit((Object)(object)sniperAnimator))
{
sniperAnimator.SetBool("scope", false);
}
((EntityState)this).GetModelAnimator().SetTrigger("aim");
if (((EntityState)this).isAuthority)
{
((EntityState)this).cameraTargetParams.RemoveParamsOverride(cameraParamsOverrideHandle, duration);
if (crosshairOverrideRequest != null)
{
crosshairOverrideRequest.Dispose();
}
if (overlayController != null)
{
HudOverlayManager.RemoveOverlay(overlayController);
}
}
((EntityState)this).OnExit();
}
}
internal class Special : BaseSkillState
{
private float duration = 8f;
private WidowBehaviour behaviour;
private Dictionary<HurtBox, GameObject> targetDict = new Dictionary<HurtBox, GameObject>();
private uint ID;
public override void OnEnter()
{
((BaseState)this).OnEnter();
behaviour = ((EntityState)this).GetComponent<WidowBehaviour>();
behaviour.emp = true;
((EntityState)this).GetModelAnimator().SetBool("visor", true);
((EntityState)this).PlayAnimation("Gesture, Override", behaviour.scoping ? "ActivateHelmet_Aim" : "ActivateHelmet_NoAim");
if (NetworkServer.active)
{
((EntityState)this).characterBody.AddBuff(Prefabs.visor);
}
if (((EntityState)this).isAuthority)
{
AkSoundEngine.PostEvent("Play_Widowmaker_Scan_Activate", ((EntityState)this).gameObject);
ID = AkSoundEngine.PostEvent("Play_Widowmaker_Scan_Loop", ((EntityState)this).gameObject);
}
}
public override void FixedUpdate()
{
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
((EntityState)this).FixedUpdate();
foreach (HurtBox readOnlySniperTargets in HurtBox.readOnlySniperTargetsList)
{
GameObject value = null;
if (Object.op_Implicit((Object)(object)readOnlySniperTargets.healthComponent) && readOnlySniperTargets.healthComponent.alive && FriendlyFireManager.ShouldDirectHitProceed(readOnlySniperTargets.healthComponent, ((EntityState)this).teamComponent.teamIndex) && (Object)(object)readOnlySniperTargets.healthComponent.body != (Object)(object)((EntityState)this).characterBody && !targetDict.TryGetValue(readOnlySniperTargets, out value) && !Object.op_Implicit((Object)(object)value))
{
CharacterBody body = readOnlySniperTargets.healthComponent.body;
value = ((Component)readOnlySniperTargets.healthComponent).gameObject;
targetDict.Add(readOnlySniperTargets, value);
if (Object.op_Implicit((Object)(object)body.modelLocator) && Object.op_Implicit((Object)(object)body.modelLocator.modelTransform))
{
TemporaryOverlay val = ((Component)body.modelLocator.modelTransform).gameObject.AddComponent<TemporaryOverlay>();
val.duration = duration - ((EntityState)this).fixedAge;
val.animateShaderAlpha = true;
val.alphaCurve = AnimationCurve.EaseInOut(0f, 1f, 1f, 0f);
val.destroyComponentOnEnd = true;
val.originalMaterial = Prefabs.scanMat;
val.AddToCharacerModel(((Component)body.modelLocator.modelTransform).GetComponent<CharacterModel>());
}
}
}
if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
{
((EntityState)this).outer.SetNextStateToMain();
}
}
public override void OnExit()
{
if (((EntityState)this).isAuthority)
{
AkSoundEngine.StopPlayingID(ID);
AkSoundEngine.PostEvent("Play_Widowmaker_Scan_End", ((EntityState)this).gameObject);
}
if (NetworkServer.active)
{
((EntityState)this).characterBody.RemoveBuff(Prefabs.visor);
}
((EntityState)this).GetModelAnimator().SetBool("visor", false);
behaviour.emp = false;
((EntityState)this).OnExit();
}
public override InterruptPriority GetMinimumInterruptPriority()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
return (InterruptPriority)1;
}
}
internal class Utility : BaseSkillState
{
private WidowBehaviour behaviour;
private EntityStateMachine bodyMachine;
public override void OnEnter()
{
//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_003e: Unknown result type (might be due to invalid IL or missing references)
//IL_0045: Unknown result type (might be due to invalid IL or missing references)
//IL_004a: Unknown result type (might be due to invalid IL or missing references)
((BaseState)this).OnEnter();
behaviour = ((EntityState)this).GetComponent<WidowBehaviour>();
bodyMachine = ((EntityState)this).GetComponent<EntityStateMachine>();
if (((EntityState)this).isAuthority)
{
Ray aimRay = ((BaseState)this).GetAimRay();
ProjectileManager.instance.FireProjectile(Prefabs.hook, ((Ray)(ref aimRay)).origin, Util.QuaternionSafeLookRotation(((Ray)(ref aimRay)).direction), ((EntityState)this).gameObject, 0f, 0f, false, (DamageColorIndex)0, (GameObject)null, -1f);
}
((EntityState)this).PlayAnimation("Gesture, Override", "Hook_Fire");
AkSoundEngine.PostEvent("Play_Widowmaker_Hook_Fire", ((EntityState)this).gameObject);
}
public override void FixedUpdate()
{
//IL_0044: 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)
((EntityState)this).FixedUpdate();
if (((EntityState)this).fixedAge >= behaviour.hookDuration * 2f)
{
if (Object.op_Implicit((Object)(object)behaviour.hookProjectile) && Vector3.Distance(((EntityState)this).transform.position, behaviour.hookProjectile.transform.position) <= behaviour.maxHookDistance)
{
EntityState.Destroy((Object)(object)behaviour.hookProjectile);
}
if ((((EntityState)this).isAuthority && !Object.op_Implicit((Object)(object)behaviour.hookProjectile)) || ((object)bodyMachine.state).GetType() != typeof(HookState))
{
((EntityState)this).outer.SetNextStateToMain();
}
}
}
public override void OnExit()
{
if (Object.op_Implicit((Object)(object)behaviour.hookProjectile))
{
EntityState.Destroy((Object)(object)behaviour.hookProjectile);
}
((EntityState)this).OnExit();
}
public override InterruptPriority GetMinimumInterruptPriority()
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0005: Unknown result type (might be due to invalid IL or missing references)
return (InterruptPriority)1;
}
}
internal class Sounds
{
public static readonly uint Play_Widowmaker_Scan_Loop = 436676373u;
public static readonly uint Play_Widowmaker_Reload = 543329008u;
public static readonly uint Play_Widowmaker_SMG_Fire = 1157764585u;
public static readonly uint Play_Widowmaker_Scan_End = 1916908642u;
public static readonly uint Play_Widowmaker_Hook_Fire = 2201021477u;
public static readonly uint Play_Widowmaker_Scan_Activate = 2661975476u;
public static readonly uint Play_Widowmaker_Sniper_Fire_Strong = 2699845585u;
public static readonly uint Play_Widowmaker_Sniper_Fire = 2812470793u;
public static readonly uint Play_Widowmaker_Hook_Loop = 3220300955u;
public static readonly uint Play_Widowmaker_Hook_Pull = 3561982612u;
public static readonly uint Play_Widowmaker_Scope_Charge = 4182114876u;
public static readonly uint Play_Widowmaker_Intro = 4227501751u;
public static readonly uint Play_Widowmaker_Hook_End = 2640461344u;
public static readonly uint Play_Widowmaker_Sniper_Fire_Weak = 2091448908u;
public static readonly uint Play_Widowmaker_Sniper_Fire_UI = 22876322u;
public static readonly uint Play_Widowmaker_Sniper_Fire_Strong_UI = 601977626u;
public static readonly uint Play_Widowmaker_Sniper_Fire_Weak_UI = 312762965u;
public static readonly uint Play_Widowmaker_Sniper_Crit = 812149u;
public static readonly uint Play_Widowmaker_Sniper_CritEmp = 3695148441u;
}
internal static class Extensions
{
public static GameObject NewSyringe(this GameObject g, params Material[] m)
{
((Renderer)g.GetComponentsInChildren<MeshRenderer>(false)[0]).material = m[0];
((Renderer)g.GetComponent<TrailRenderer>()).material = m[1];
((Renderer)g.GetComponent<ParticleSystemRenderer>()).material = m[2];
return g;
}
public static Material SwapTexture(this Material m, Texture2D t)
{
m.mainTexture = (Texture)(object)t;
return m;
}
public static GameObject SwapMaterials(this GameObject g, Material[] m)
{
Renderer[] componentsInChildren = g.GetComponentsInChildren<Renderer>();
for (int i = 0; i < componentsInChildren.Length; i++)
{
if (Object.op_Implicit((Object)(object)m[i]))
{
componentsInChildren[i].material = m[i];
}
}
return g;
}
public static float Mult(this float f, float mult = 100f)
{
return f * mult;
}
public static Color ToRGB255(this Color c, string title, string body)
{
//IL_0001: 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_0019: 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)
return new Color(c.r / 255f, c.g / 255f, c.b / 255f);
}
public static void SetStrings(this TooltipProvider t, string title, string body)
{
t.overrideTitleText = title;
t.overrideBodyText = body;
}
}
internal class Utils
{
public static Color HexTo10(string hexColor)
{
//IL_0025: 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_0035: Unknown result type (might be due to invalid IL or missing references)
//IL_0036: Unknown result type (might be due to invalid IL or missing references)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
char[] array = hexColor.ToCharArray();
return new Color((float)(array[0] + array[1]), (float)(array[2] + array[3]), (float)(array[4] + array[5]), 255f) / 255f;
}
public static EntityStateMachine NewStateMachine<T>(GameObject obj, string customName) where T : EntityState
{
//IL_0021: 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_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)
SerializableEntityStateType val = default(SerializableEntityStateType);
((SerializableEntityStateType)(ref val))..ctor(typeof(T));
EntityStateMachine val2 = obj.AddComponent<EntityStateMachine>();
val2.customName = customName;
val2.initialStateType = val;
val2.mainStateType = val;
return val2;
}
public static GenericSkill NewGenericSkill(GameObject obj, SkillDef skill)
{
//IL_0031: 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_0053: Expected O, but got Unknown
//IL_0054: 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)
GenericSkill val = obj.AddComponent<GenericSkill>();
SkillFamily val2 = ScriptableObject.CreateInstance<SkillFamily>();
val2.variants = (Variant[])(object)new Variant[1];
val._skillFamily = val2;
SkillFamily skillFamily = val.skillFamily;
Variant[] variants = skillFamily.variants;
Variant val3 = new Variant
{
skillDef = skill
};
((Variant)(ref val3)).viewableNode = new Node(skill.skillNameToken, false, (Node)null);
variants[0] = val3;
ContentAddition.AddSkillFamily(skillFamily);
return val;
}
public static void AddAlt(SkillFamily skillFamily, SkillDef SkillDef)
{
//IL_0029: Unknown result type (might be due to invalid IL or missing references)
//IL_0041: Unknown result type (might be due to invalid IL or missing references)
//IL_004b: Expected O, but got Unknown
//IL_004c: 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)
Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
Variant[] variants = skillFamily.variants;
int num = skillFamily.variants.Length - 1;
Variant val = new Variant
{
skillDef = SkillDef
};
((Variant)(ref val)).viewableNode = new Node(SkillDef.skillNameToken, false, (Node)null);
variants[num] = val;
}
public static BuffDef NewBuffDef(string name, bool stack, bool hidden, Sprite sprite, Color color)
{
//IL_0025: 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)
BuffDef val = ScriptableObject.CreateInstance<BuffDef>();
((Object)val).name = name;
val.canStack = stack;
val.isHidden = hidden;
val.iconSprite = sprite;
val.buffColor = color;
ContentAddition.AddBuffDef(val);
return val;
}
public static ObjectScaleCurve AddScaleComponent(GameObject target, float timeMax)
{
ObjectScaleCurve val = target.AddComponent<ObjectScaleCurve>();
val.useOverallCurveOnly = true;
val.timeMax = timeMax;
val.overallCurve = AnimationCurve.Linear(0f, 0f, 1f, 1f);
return val;
}
public static RotateAroundAxis AddRotationComponent(GameObject target, float speed, RotationAxis axis)
{
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
RotateAroundAxis val = target.AddComponent<RotateAroundAxis>();
val.speed = (Speed)2;
val.fastRotationSpeed = speed;
val.rotateAroundAxis = axis;
return val;
}
public static GameObject NewDisplayModel(GameObject model, string name)
{
//IL_0093: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Expected O, but got Unknown
GameObject val = PrefabAPI.InstantiateClone(model, name, false);
Animator componentInChildren = val.GetComponentInChildren<Animator>();
componentInChildren.runtimeAnimatorController = Assets.Load<RuntimeAnimatorController>("displayAnimator");
ChildLocator componentInChildren2 = val.GetComponentInChildren<ChildLocator>();
GameObject gameObject = ((Component)componentInChildren2.FindChild("displayLine")).gameObject;
DisplayBehaviour displayBehaviour = ((Component)componentInChildren).gameObject.AddComponent<DisplayBehaviour>();
displayBehaviour.line = gameObject;
displayBehaviour.sniperAnimator = ((Component)componentInChildren2.FindChild("sniper")).GetComponent<Animator>();
((Behaviour)val.GetComponentInChildren<CharacterModel>()).enabled = false;
SkinnedMeshRenderer[] componentsInChildren = val.GetComponentsInChildren<SkinnedMeshRenderer>(true);
foreach (SkinnedMeshRenderer val2 in componentsInChildren)
{
((Renderer)val2).material = new Material(((Renderer)val2).material);
((Renderer)val2).material.DisableKeyword("DITHER");
}
return val;
}
public static AnimateShaderAlpha AddShaderAlphaComponent(GameObject target, float timeMax, AnimationCurve curve, bool destroyOnEnd = true, bool disableOnEnd = false)
{
AnimateShaderAlpha val = target.AddComponent<AnimateShaderAlpha>();
val.timeMax = timeMax;
val.alphaCurve = curve;
val.destroyOnEnd = destroyOnEnd;
val.disableOnEnd = disableOnEnd;
return val;
}
internal static Sprite CreateSprite(Texture2D tex)
{
//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(tex, new Rect(0f, 0f, (float)((Texture)tex).width, (float)((Texture)tex).height), new Vector2(0.5f, 0.5f), 128f);
}
internal static SkinDefInfo CreateNewSkinDefInfo(SkinnedMeshRenderer[] childList, GameObject rootObject, string skinName, string objectToEnable, RendererInfo[] rendererInfos, params Color[] colors)
{
//IL_0003: 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_00ac: 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_00bc: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: 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_011d: 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_0122: Unknown result type (might be due to invalid IL or missing references)
SkinDefInfo result = default(SkinDefInfo);
result.BaseSkins = Array.Empty<SkinDef>();
result.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0];
result.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0];
List<GameObjectActivation> list = new List<GameObjectActivation>();
foreach (SkinnedMeshRenderer val in childList)
{
GameObjectActivation val2 = default(GameObjectActivation);
val2.gameObject = ((Component)val).gameObject;
val2.shouldActivate = ((Object)val).name.Contains(objectToEnable) || ((Object)val).name.Contains("eye");
GameObjectActivation item = val2;
list.Add(item);
}
result.GameObjectActivations = list.ToArray();
result.Icon = LoadoutAPI.CreateSkinIcon(colors[0], colors[1], colors[2], colors[3]);
result.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0];
result.Name = skinName;
result.NameToken = skinName;
result.RendererInfos = rendererInfos;
result.RootObject = rootObject;
result.UnlockableDef = ((objectToEnable == "skin") ? Achievements.masteryUnlock : null);
return result;
}
internal static SkinDefInfo CreateNewSkinDefInfo(SkinnedMeshRenderer[] childList, GameObject rootObject, string skinName, string objectToEnable, RendererInfo[] rendererInfos)
{
//IL_0003: 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_00ef: Unknown result type (might be due to invalid IL or missing references)
//IL_00f0: Unknown result type (might be due to invalid IL or missing references)
//IL_00f4: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0084: 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)
SkinDefInfo result = default(SkinDefInfo);
result.BaseSkins = Array.Empty<SkinDef>();
result.MinionSkinReplacements = (MinionSkinReplacement[])(object)new MinionSkinReplacement[0];
result.ProjectileGhostReplacements = (ProjectileGhostReplacement[])(object)new ProjectileGhostReplacement[0];
List<GameObjectActivation> list = new List<GameObjectActivation>();
foreach (SkinnedMeshRenderer val in childList)
{
GameObjectActivation val2 = default(GameObjectActivation);
val2.gameObject = ((Component)val).gameObject;
val2.shouldActivate = ((Object)val).name.Contains(objectToEnable) || ((Object)val).name.Contains("eye");
GameObjectActivation item = val2;
list.Add(item);
}
result.GameObjectActivations = list.ToArray();
result.Icon = Assets.MainAssetBundle.LoadAsset<Sprite>(objectToEnable);
result.MeshReplacements = (MeshReplacement[])(object)new MeshReplacement[0];
result.Name = skinName;
result.NameToken = skinName;
result.RendererInfos = rendererInfos;
result.RootObject = rootObject;
result.UnlockableDef = null;
return result;
}
internal static T CopyComponent<T>(T original, GameObject destination) where T : Component
{
Type type = ((object)original).GetType();
Component val = destination.AddComponent(type);
FieldInfo[] fields = type.GetFields();
FieldInfo[] array = fields;
foreach (FieldInfo fieldInfo in array)
{
fieldInfo.SetValue(val, fieldInfo.GetValue(original));
}
return (T)(object)((val is T) ? val : null);
}
public static Sprite CreateSpriteFromTexture(Texture2D texture)
{
//IL_0025: 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)
if (Object.op_Implicit((Object)(object)texture))
{
return Sprite.Create(texture, new Rect(0f, 0f, (float)((Texture)texture).width, (float)((Texture)texture).height), new Vector2(0.5f, 0.5f));
}
return null;
}
public static GameObject FindInActiveObjectByName(string name)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Invalid comparison between Unknown and I4
Transform[] array = Resources.FindObjectsOfTypeAll<Transform>();
for (int i = 0; i < array.Length; i++)
{
if ((int)((Object)array[i]).hideFlags == 0 && ((Object)array[i]).name == name)
{
return ((Component)array[i]).gameObject;
}
}
return null;
}
public static void CreateHitboxes(string name, Transform parent, Vector3[] sizes, Vector3[] positions)
{
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
//IL_003a: Expected O, but got Unknown
//IL_004f: 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_0073: Unknown result type (might be due to invalid IL or missing references)
HitBoxGroup val = ((Component)parent).gameObject.AddComponent<HitBoxGroup>();
val.groupName = name;
List<HitBox> list = new List<HitBox>();
for (int i = 0; i < sizes.Length; i++)
{
GameObject val2 = new GameObject(name + (i + 1));
val2.transform.SetParent(parent);
val2.transform.localPosition = positions[i];
val2.transform.localRotation = Quaternion.identity;
val2.transform.localScale = sizes[i];
HitBox item = val2.AddComponent<HitBox>();
val2.layer = LayerIndex.projectile.intVal;
list.Add(item);
}
val.hitBoxes = list.ToArray();
}
public static GameObject CreateHitbox(string name, Transform parent, Vector3 scale, Vector3 localPosition)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//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)
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
GameObject val = new GameObject(name);
val.transform.SetParent(parent);
val.transform.localPosition = localPosition;
val.transform.localRotation = Quaternion.identity;
val.transform.localScale = scale;
HitBoxGroup val2 = ((Component)parent).gameObject.AddComponent<HitBoxGroup>();
HitBox val3 = val.AddComponent<HitBox>();
val.layer = LayerIndex.projectile.intVal;
val2.hitBoxes = (HitBox[])(object)new HitBox[1] { val3 };
val2.groupName = name;
return val;
}
internal static EffectComponent RegisterEffect(GameObject effect, float duration, string soundName = "", bool parentToReferencedTransform = true, bool positionAtReferencedTransform = true)
{
//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
EffectComponent val = effect.GetComponent<EffectComponent>();
if (!Object.op_Implicit((Object)(object)val))
{
val = effect.AddComponent<EffectComponent>();
}
if (duration != -1f)
{
DestroyOnTimer component = effect.GetComponent<DestroyOnTimer>();
if (!Object.op_Implicit((Object)(object)component))
{
effect.AddComponent<DestroyOnTimer>().duration = duration;
}
else
{
component.duration = duration;
}
}
if (!Object.op_Implicit((Object)(object)effect.GetComponent<NetworkIdentity>()))
{
effect.AddComponent<NetworkIdentity>();
}
if (!Object.op_Implicit((Object)(object)effect.GetComponent<VFXAttributes>()))
{
effect.AddComponent<VFXAttributes>().vfxPriority = (VFXPriority)2;
}
val.applyScale = false;
val.effectIndex = (EffectIndex)(-1);
val.parentToReferencedTransform = parentToReferencedTransform;
val.positionAtReferencedTransform = positionAtReferencedTransform;
val.soundName = soundName;
ContentAddition.AddEffect(effect);
return val;
}
public static Material UpdateMaterial(Material m)
{
Texture mainTexture = m.mainTexture;
Texture texture = m.GetTexture("_BumpMap");
m.shader = Prefabs.Load<Shader>("RoR2/Base/Shaders/HGStandard.shader");
m.SetTexture("_MainTex", mainTexture);
m.SetFloat("_NormalStrength", 1f);
m.SetTexture("_NormalTex", texture);
return m;
}
public static Material InstantiateMaterial(Material m)
{
//IL_0022: 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)
Material val = Object.Instantiate<Material>(Prefabs.Load<Material>("RoR2/Base/Commando/matCommandoDualies.mat"));
if (Object.op_Implicit((Object)(object)val))
{
val.SetColor("_Color", Color.white);
val.SetTexture("_MainTex", m.mainTexture);
val.SetColor("_EmColor", Color.black);
val.SetFloat("_EmPower", 0f);
val.SetTexture("_EmTex", (Texture)null);
val.SetFloat("_NormalStrength", 1f);
val.SetTexture("_NormalTex", m.GetTexture("_BumpMap"));
return val;
}
return val;
}
public static Material InstantiateMaterial(Color color, Texture tex, Color emColor, float emPower, Texture emTex, float normStr, Texture normTex)
{
//IL_0037: 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)
Material val = Object.Instantiate<Material>(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/CommandoBody").GetComponentInChildren<CharacterModel>().baseRendererInfos[0].defaultMaterial);
if (Object.op_Implicit((Object)(object)val))
{
val.SetColor("_Color", color);
val.SetTexture("_MainTex", tex);
val.SetColor("_EmColor", emColor);
val.SetFloat("_EmPower", emPower);
val.SetTexture("_EmTex", emTex);
val.SetFloat("_NormalStrength", 1f);
val.SetTexture("_NormalTex", normTex);
return val;
}
return val;
}
public static Material FindMaterial(string name)
{
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_0015: Invalid comparison between Unknown and I4
Material[] array = Resources.FindObjectsOfTypeAll<Material>();
for (int i = 0; i < array.Length; i++)
{
if ((int)((Object)array[i]).hideFlags == 0 && ((Object)array[i]).name == name)
{
return array[i];
}
}
return null;
}
}
internal class WidowSkillDef : SkillDef
{
private class InstanceData : BaseSkillInstanceData
{
public WidowBehaviour behaviour;
public SkillLocator skillLocator;
}
public override BaseSkillInstanceData OnAssigned([NotNull] GenericSkill skillSlot)
{
return (BaseSkillInstanceData)(object)new InstanceData
{
behaviour = ((Component)skillSlot).GetComponent<WidowBehaviour>(),
skillLocator = ((Component)skillSlot).GetComponent<SkillLocator>()
};
}
internal static bool IsExecutable([NotNull] GenericSkill skillSlot)
{
InstanceData instanceData = (InstanceData)(object)skillSlot.skillInstanceData;
SkillLocator skillLocator = instanceData.skillLocator;
return skillLocator.primary.stock > 0;
}
public override bool CanExecute([NotNull] GenericSkill skillSlot)
{
return IsExecutable(skillSlot) && ((SkillDef)this).CanExecute(skillSlot);
}
public override bool IsReady([NotNull] GenericSkill skillSlot)
{
return ((SkillDef)this).IsReady(skillSlot) && IsExecutable(skillSlot);
}
}