Decompiled source of PlayableTurret v1.1.3

PlayableTurretMod.dll

Decompiled 2 weeks ago
using System;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using EntityStates;
using EntityStates.ClayBruiser.Weapon;
using EntityStates.Commando.CommandoWeapon;
using EntityStates.EngiTurret.EngiTurretWeapon;
using EntityStates.GolemMonster;
using EntityStates.Huntress;
using EntityStates.LunarExploderMonster.Weapon;
using EntityStates.Mage.Weapon;
using EntityStates.Toolbot;
using EntityStates.Treebot.Weapon;
using R2API;
using R2API.Utils;
using RoR2;
using RoR2.Skills;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.Networking;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("PlayableTurretMod")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("PlayableTurretMod")]
[assembly: AssemblyTitle("PlayableTurretMod")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace PlayableTurretMod;

public class WalkerChargeBeam : BaseState
{
	public static float baseDuration = 1f;

	public static float laserMaxWidth = 0.2f;

	private float duration;

	private uint chargePlayID;

	private GameObject chargeEffect;

	private GameObject laserEffect;

	private LineRenderer laserLineComponent;

	private Vector3 laserDirection;

	private Vector3 visualEndPosition;

	private float flashTimer;

	private bool laserOn;

	private Animator animator;

	public override void OnEnter()
	{
		//IL_00e3: Unknown result type (might be due to invalid IL or missing references)
		//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
		//IL_0160: Unknown result type (might be due to invalid IL or missing references)
		//IL_0167: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		duration = baseDuration / base.attackSpeedStat;
		Transform modelTransform = ((EntityState)this).GetModelTransform();
		((BaseState)this).StartAimMode(duration + 2f, false);
		((EntityState)this).characterBody._defaultCrosshairPrefab = LegacyResourcesAPI.Load<GameObject>("Prefabs/Crosshair/BanditCrosshair");
		chargePlayID = Util.PlayAttackSpeedSound(ChargeLaser.attackSoundString, ((EntityState)this).gameObject, base.attackSpeedStat);
		if (Object.op_Implicit((Object)(object)modelTransform))
		{
			ChildLocator component = ((Component)modelTransform).GetComponent<ChildLocator>();
			if (Object.op_Implicit((Object)(object)component))
			{
				Transform val = component.FindChild(MinigunState.muzzleName);
				if (Object.op_Implicit((Object)(object)val))
				{
					if (Object.op_Implicit((Object)(object)ChargeLaser.effectPrefab))
					{
						chargeEffect = Object.Instantiate<GameObject>(ChargeLaser.effectPrefab, val.position, val.rotation);
						chargeEffect.transform.parent = val;
						ScaleParticleSystemDuration component2 = chargeEffect.GetComponent<ScaleParticleSystemDuration>();
						if (Object.op_Implicit((Object)(object)component2))
						{
							component2.newDuration = duration;
						}
					}
					if (Object.op_Implicit((Object)(object)ChargeLaser.laserPrefab))
					{
						laserEffect = Object.Instantiate<GameObject>(ChargeLaser.laserPrefab, val.position, val.rotation);
						laserEffect.transform.parent = val;
						laserLineComponent = laserEffect.GetComponent<LineRenderer>();
					}
				}
			}
		}
		if (Object.op_Implicit((Object)(object)((EntityState)this).characterBody))
		{
			((EntityState)this).characterBody.SetAimTimer(duration);
		}
		flashTimer = 0f;
		laserOn = true;
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		if (Object.op_Implicit((Object)(object)chargeEffect))
		{
			EntityState.Destroy((Object)(object)chargeEffect);
		}
		if (Object.op_Implicit((Object)(object)laserEffect))
		{
			EntityState.Destroy((Object)(object)laserEffect);
		}
	}

	public override void Update()
	{
		//IL_0036: 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)
		//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_0057: Unknown result type (might be due to invalid IL or missing references)
		//IL_005c: Unknown result type (might be due to invalid IL or missing references)
		//IL_005f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0061: Unknown result type (might be due to invalid IL or missing references)
		//IL_0063: Unknown result type (might be due to invalid IL or missing references)
		//IL_0068: Unknown result type (might be due to invalid IL or missing references)
		//IL_006d: 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_0086: Unknown result type (might be due to invalid IL or missing references)
		//IL_00b6: 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_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)
		((EntityState)this).Update();
		if (!Object.op_Implicit((Object)(object)laserEffect) || !Object.op_Implicit((Object)(object)laserLineComponent))
		{
			return;
		}
		float num = 1000f;
		Ray aimRay = ((BaseState)this).GetAimRay();
		Vector3 position = laserEffect.transform.parent.position;
		Vector3 point = ((Ray)(ref aimRay)).GetPoint(num);
		laserDirection = point - position;
		RaycastHit val = default(RaycastHit);
		if (Physics.Raycast(aimRay, ref val, num, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
		{
			point = ((RaycastHit)(ref val)).point;
		}
		laserLineComponent.SetPosition(0, position);
		laserLineComponent.SetPosition(1, point);
		float num2;
		if (duration - ((EntityState)this).age > 0.5f)
		{
			num2 = ((EntityState)this).age / duration;
		}
		else
		{
			flashTimer -= Time.deltaTime;
			if (flashTimer <= 0f)
			{
				laserOn = !laserOn;
				flashTimer = 1f / 30f;
			}
			num2 = (laserOn ? 1f : 0f);
		}
		num2 *= laserMaxWidth;
		laserLineComponent.startWidth = num2;
		laserLineComponent.endWidth = num2;
	}

	public override void FixedUpdate()
	{
		//IL_0030: Unknown result type (might be due to invalid IL or missing references)
		//IL_0035: Unknown result type (might be due to invalid IL or missing references)
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
		{
			WalkerFireBeam walkerFireBeam = new WalkerFireBeam();
			walkerFireBeam.laserDirection = laserDirection;
			((EntityState)this).outer.SetNextState((EntityState)(object)walkerFireBeam);
		}
	}

	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;
	}
}
public class WalkerFireBeam : BaseState
{
	public static float damageCoefficient = 8f;

	public static float procCoefficient = 1f;

	public static float force = 500f;

	public static float minSpread = 0f;

	public static float maxSpread = 0f;

	public static int bulletCount = 1;

	public static float baseDuration = 0.5f;

	public static float radius = 1.25f;

	public float recoilAmplitude = 10f;

	public float bloom = 6f;

	public Vector3 laserDirection;

	private float duration;

	private Ray modifiedAimRay;

	private Animator animator;

	public override void OnEnter()
	{
		//IL_001c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0021: Unknown result type (might be due to invalid IL or missing references)
		//IL_002d: Unknown result type (might be due to invalid IL or missing references)
		//IL_004c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0051: Unknown result type (might be due to invalid IL or missing references)
		//IL_0110: Unknown result type (might be due to invalid IL or missing references)
		//IL_011b: 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)
		//IL_0127: Unknown result type (might be due to invalid IL or missing references)
		//IL_012c: Unknown result type (might be due to invalid IL or missing references)
		//IL_012f: Unknown result type (might be due to invalid IL or missing references)
		//IL_013d: Unknown result type (might be due to invalid IL or missing references)
		//IL_014c: Unknown result type (might be due to invalid IL or missing references)
		//IL_015c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0185: Unknown result type (might be due to invalid IL or missing references)
		//IL_018a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0196: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01a5: Unknown result type (might be due to invalid IL or missing references)
		//IL_01aa: Unknown result type (might be due to invalid IL or missing references)
		//IL_01af: Unknown result type (might be due to invalid IL or missing references)
		//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
		//IL_01bd: Unknown result type (might be due to invalid IL or missing references)
		//IL_01c8: Unknown result type (might be due to invalid IL or missing references)
		//IL_01d3: Unknown result type (might be due to invalid IL or missing references)
		//IL_01de: Unknown result type (might be due to invalid IL or missing references)
		//IL_01e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_01ef: 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_0206: Unknown result type (might be due to invalid IL or missing references)
		//IL_0211: Unknown result type (might be due to invalid IL or missing references)
		//IL_0213: Unknown result type (might be due to invalid IL or missing references)
		//IL_0218: Unknown result type (might be due to invalid IL or missing references)
		//IL_0223: Unknown result type (might be due to invalid IL or missing references)
		//IL_022e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0239: Unknown result type (might be due to invalid IL or missing references)
		//IL_0255: 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_0267: Unknown result type (might be due to invalid IL or missing references)
		//IL_026e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0274: 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_017d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0182: Unknown result type (might be due to invalid IL or missing references)
		((BaseState)this).OnEnter();
		duration = baseDuration / base.attackSpeedStat;
		modifiedAimRay = ((BaseState)this).GetAimRay();
		((Ray)(ref modifiedAimRay)).direction = laserDirection;
		animator = ((EntityState)this).GetModelAnimator();
		Transform modelTransform = ((EntityState)this).GetModelTransform();
		Ray aimRay = ((BaseState)this).GetAimRay();
		((BaseState)this).StartAimMode(2f, false);
		float num = recoilAmplitude / base.attackSpeedStat;
		((BaseState)this).AddRecoil(-1f * num, -1.5f * num, -0.25f * num, 0.25f * num);
		((EntityState)this).characterBody.AddSpreadBloom(bloom);
		Util.PlayAttackSpeedSound(FireLaser.attackSoundString, ((EntityState)this).gameObject, 2f);
		string muzzleName = MinigunState.muzzleName;
		if (Object.op_Implicit((Object)(object)FireLaser.effectPrefab))
		{
			EffectManager.SimpleMuzzleFlash(FireLaser.effectPrefab, ((EntityState)this).gameObject, muzzleName, false);
		}
		if (((EntityState)this).isAuthority)
		{
			float num2 = 1000f;
			Vector3 val = ((Ray)(ref modifiedAimRay)).origin + ((Ray)(ref modifiedAimRay)).direction * num2;
			RaycastHit val2 = default(RaycastHit);
			if (Physics.Raycast(modifiedAimRay, ref val2, num2, LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.world)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.defaultLayer)).mask) | LayerMask.op_Implicit(((LayerIndex)(ref LayerIndex.entityPrecise)).mask)))
			{
				val = ((RaycastHit)(ref val2)).point;
			}
			new BulletAttack
			{
				owner = ((EntityState)this).gameObject,
				weapon = ((EntityState)this).gameObject,
				origin = ((Ray)(ref aimRay)).origin,
				aimVector = ((Ray)(ref aimRay)).direction,
				minSpread = 0f,
				maxSpread = 0f,
				bulletCount = (uint)bulletCount,
				procCoefficient = procCoefficient,
				damageType = (DamageType)262144,
				damage = damageCoefficient * base.damageStat,
				force = force,
				falloffModel = (FalloffModel)0,
				tracerEffectPrefab = FireLaser.tracerEffectPrefab,
				muzzleName = MinigunState.muzzleName,
				hitEffectPrefab = FireLaser.hitEffectPrefab,
				isCrit = Util.CheckRoll(base.critStat, ((EntityState)this).characterBody.master),
				HitEffectNormal = false,
				radius = radius,
				smartCollision = true,
				stopperMask = ((LayerIndex)(ref LayerIndex.world)).mask
			}.Fire();
		}
		((EntityState)this).PlayCrossfade("Gesture, Additive", "FireMinigun", 0.75f * duration);
	}

	public override void OnExit()
	{
		((EntityState)this).OnExit();
		((EntityState)this).characterBody._defaultCrosshairPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/crosshair/SimpleDotCrosshair");
		((EntityState)this).PlayCrossfade("Gesture, Additive", "BufferEmpty", 0.2f);
		animator.SetBool("WeaponIsReady", false);
	}

	public override void FixedUpdate()
	{
		((EntityState)this).FixedUpdate();
		if (((EntityState)this).fixedAge >= duration && ((EntityState)this).isAuthority)
		{
			((EntityState)this).outer.SetNextStateToMain();
		}
	}

	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 static class Log
{
	private static ManualLogSource _logSource;

	internal static void Initialize(ManualLogSource logSource)
	{
		_logSource = logSource;
	}

	private static string ToString(object o)
	{
		return o?.ToString() ?? "null";
	}

	internal static void LogTrace(object data)
	{
		StackTrace stackTrace = new StackTrace();
		StackFrame frame = stackTrace.GetFrame(1);
		MethodBase method = frame.GetMethod();
		string text = "[TRACE // " + method.DeclaringType.Name + "::" + method.Name + "]: ";
		text += ToString(data);
		_logSource.Log((LogLevel)32, (object)text);
	}

	internal static void LogDebug(object data)
	{
		_logSource.LogDebug((object)ToString(data));
	}

	internal static void LogError(object data)
	{
		_logSource.LogError((object)ToString(data));
	}

	internal static void LogFatal(object data)
	{
		_logSource.LogFatal((object)ToString(data));
	}

	internal static void LogInfo(object data)
	{
		_logSource.LogInfo((object)ToString(data));
	}

	internal static void LogMessage(object data)
	{
		_logSource.LogMessage((object)ToString(data));
	}

	internal static void LogWarning(object data)
	{
		_logSource.LogWarning((object)ToString(data));
	}
}
[BepInDependency(/*Could not decode attribute arguments.*/)]
[BepInPlugin("Saltlords.PlayableTurret", "PlayableTurret", "1.0.0")]
[R2APISubmoduleDependency(new string[] { "PrefabAPI", "SurvivorAPI", "SoundAPI", "LanguageAPI", "EffectAPI", "LoadoutAPI", "ProjectileAPI", "DamageAPI", "RecalculateStatsAPI", "BuffAPI" })]
public class TurretPlugin : BaseUnityPlugin
{
	public const string PluginGUID = "Saltlords.PlayableTurret";

	public const string PluginAuthor = "Saltlords";

	public const string PluginName = "PlayableTurret";

	public const string PluginVersion = "1.0.0";

	public const string characterLore = "<style=cMono>[  BEGIN OUTPUT  ]</style>\n\n<style=cIsHealth><i>“ WHAT AM I FIGHTING FOR? ”</i></style>\n<style=cIsHealth>“AM I ONE OF </style>[faction red]</style><style=cIsHealth>?”</style>\n<style=cIsHealth>“AM I ONE OF</style> [faction white]<style=cIsHealth>?”</style>\n\n...\n\n<style=cMono>[  CEASE OUTPUT  ]</style>\n\n<style=cMono>[  BEGIN OUTPUT  ]</style>\n\n“Take note of the <style=cIsDamage>ratios</style>.”\n“High speed. Speed is war.”\n“Quadrupeds are easier, and more stable.”\n“We deviate from that.”\n“Powered by refuse – all material has value. Quality of components reduces stability.”\n“I will tie destruction with destruction.”\n\n...\n\n<style=cMono>[  CEASE OUTPUT  ]\n\n> TRANSLATION ERRORS: 2\n\n> [faction red]; CANNOT TRANSLATE\n\n> [faction white]; CANNOT TRANSLATE</style>\n\n========================================\n\nTranslation powered by NewGenesis0. Al?l r?ights? r?????????.</style>";

	public const bool resize = false;

	public static GameObject body;

	private static SerializableEntityStateType UtilCreateSerializableAndNetRegister<T>() where T : EntityState
	{
		//IL_0027: Unknown result type (might be due to invalid IL or missing references)
		//IL_0037: Unknown result type (might be due to invalid IL or missing references)
		//IL_003c: Unknown result type (might be due to invalid IL or missing references)
		//IL_003f: Unknown result type (might be due to invalid IL or missing references)
		Log.LogTrace("Registering EntityState " + typeof(T).FullName + " and returning a new instance of SerializableEntityStateType of that type...");
		bool flag = default(bool);
		ContentAddition.AddEntityState<T>(ref flag);
		return new SerializableEntityStateType(typeof(T));
	}

	public static float GetICBMDamageMult(CharacterBody body)
	{
		float num = 1f;
		if (Object.op_Implicit((Object)(object)body) && Object.op_Implicit((Object)(object)body.inventory))
		{
			int itemCount = body.inventory.GetItemCount(Items.MoreMissile);
			int num2 = itemCount - 1;
			if (num2 > 0)
			{
				num += (float)num2 * 0.5f;
			}
		}
		return num;
	}

	public void Awake()
	{
		//IL_0207: Unknown result type (might be due to invalid IL or missing references)
		//IL_020c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0254: Unknown result type (might be due to invalid IL or missing references)
		//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
		//IL_02b1: Unknown result type (might be due to invalid IL or missing references)
		//IL_02d7: 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)
		//IL_0324: Unknown result type (might be due to invalid IL or missing references)
		//IL_037c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0381: Unknown result type (might be due to invalid IL or missing references)
		//IL_03b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_03bc: Unknown result type (might be due to invalid IL or missing references)
		//IL_0404: Unknown result type (might be due to invalid IL or missing references)
		//IL_045c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0461: Unknown result type (might be due to invalid IL or missing references)
		//IL_049c: Unknown result type (might be due to invalid IL or missing references)
		//IL_04a1: Unknown result type (might be due to invalid IL or missing references)
		//IL_04e9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0541: Unknown result type (might be due to invalid IL or missing references)
		//IL_0546: Unknown result type (might be due to invalid IL or missing references)
		//IL_056c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0571: Unknown result type (might be due to invalid IL or missing references)
		//IL_05b9: Unknown result type (might be due to invalid IL or missing references)
		//IL_0611: Unknown result type (might be due to invalid IL or missing references)
		//IL_0616: Unknown result type (might be due to invalid IL or missing references)
		//IL_064c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0651: Unknown result type (might be due to invalid IL or missing references)
		//IL_0699: Unknown result type (might be due to invalid IL or missing references)
		//IL_06f1: Unknown result type (might be due to invalid IL or missing references)
		//IL_06f6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0731: Unknown result type (might be due to invalid IL or missing references)
		//IL_0736: Unknown result type (might be due to invalid IL or missing references)
		//IL_077e: Unknown result type (might be due to invalid IL or missing references)
		//IL_07d6: Unknown result type (might be due to invalid IL or missing references)
		//IL_07db: Unknown result type (might be due to invalid IL or missing references)
		//IL_0811: Unknown result type (might be due to invalid IL or missing references)
		//IL_0816: Unknown result type (might be due to invalid IL or missing references)
		//IL_085e: Unknown result type (might be due to invalid IL or missing references)
		//IL_08b6: Unknown result type (might be due to invalid IL or missing references)
		//IL_08bb: Unknown result type (might be due to invalid IL or missing references)
		//IL_08f2: Unknown result type (might be due to invalid IL or missing references)
		//IL_08f7: Unknown result type (might be due to invalid IL or missing references)
		//IL_093f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0997: Unknown result type (might be due to invalid IL or missing references)
		//IL_099c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b7b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b95: Unknown result type (might be due to invalid IL or missing references)
		//IL_0b9f: Expected O, but got Unknown
		//IL_0ba0: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ba2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ba8: Unknown result type (might be due to invalid IL or missing references)
		//IL_0baa: Unknown result type (might be due to invalid IL or missing references)
		//IL_0bdb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c01: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c0b: Expected O, but got Unknown
		//IL_0c0c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c0e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c21: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c3a: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c44: Expected O, but got Unknown
		//IL_0c45: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c47: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c4d: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c4f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0c80: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ca6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0cb0: Expected O, but got Unknown
		//IL_0cb1: Unknown result type (might be due to invalid IL or missing references)
		//IL_0cb3: Unknown result type (might be due to invalid IL or missing references)
		//IL_0cc6: Unknown result type (might be due to invalid IL or missing references)
		//IL_0cdf: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ce9: Expected O, but got Unknown
		//IL_0cea: Unknown result type (might be due to invalid IL or missing references)
		//IL_0cec: Unknown result type (might be due to invalid IL or missing references)
		//IL_0cf2: Unknown result type (might be due to invalid IL or missing references)
		//IL_0cf4: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d25: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d4b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d55: Expected O, but got Unknown
		//IL_0d56: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d58: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d6b: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d84: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d8e: Expected O, but got Unknown
		//IL_0d8f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d91: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d97: Unknown result type (might be due to invalid IL or missing references)
		//IL_0d99: Unknown result type (might be due to invalid IL or missing references)
		//IL_0ddb: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e01: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e0b: Expected O, but got Unknown
		//IL_0e0c: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e0e: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e3f: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e65: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e6f: Expected O, but got Unknown
		//IL_0e70: Unknown result type (might be due to invalid IL or missing references)
		//IL_0e72: Unknown result type (might be due to invalid IL or missing references)
		//IL_109b: Unknown result type (might be due to invalid IL or missing references)
		//IL_10b7: Unknown result type (might be due to invalid IL or missing references)
		//IL_10d8: Unknown result type (might be due to invalid IL or missing references)
		//IL_113d: Unknown result type (might be due to invalid IL or missing references)
		//IL_1142: Unknown result type (might be due to invalid IL or missing references)
		//IL_1147: Unknown result type (might be due to invalid IL or missing references)
		((BaseUnityPlugin)this).Logger.LogWarning((object)"MegaSurvivorPack is loading...");
		SkillDef val = ScriptableObject.CreateInstance<SkillDef>();
		GameObject val2 = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterBodies/EngiWalkerTurretBody"), "PCBeetleBody");
		val2.AddComponent<EquipmentSlot>();
		val2.GetComponent<NetworkIdentity>().localPlayerAuthority = true;
		GenericSkill[] componentsInChildren = val2.GetComponentsInChildren<GenericSkill>();
		foreach (GenericSkill val3 in componentsInChildren)
		{
			((BaseUnityPlugin)this).Logger.LogMessage((object)"Cleaning out skills");
			Object.DestroyImmediate((Object)(object)val3);
		}
		SkillLocator component = val2.GetComponent<SkillLocator>();
		Reflection.SetFieldValue<GenericSkill[]>((object)component, "allSkills", (GenericSkill[])(object)new GenericSkill[0]);
		component.primary = val2.GetComponent<GenericSkill>();
		((BaseUnityPlugin)this).Logger.LogMessage((object)"Replacing Primary");
		component.primary = val2.AddComponent<GenericSkill>();
		SkillFamily val4 = ScriptableObject.CreateInstance<SkillFamily>();
		val4.variants = (Variant[])(object)new Variant[1];
		ContentAddition.AddSkillFamily(val4);
		Reflection.SetFieldValue<SkillFamily>((object)component.primary, "_skillFamily", val4);
		component.secondary = val2.GetComponent<GenericSkill>();
		((BaseUnityPlugin)this).Logger.LogMessage((object)"Replacing Secondary");
		component.secondary = val2.AddComponent<GenericSkill>();
		SkillFamily val5 = ScriptableObject.CreateInstance<SkillFamily>();
		val5.variants = (Variant[])(object)new Variant[1];
		ContentAddition.AddSkillFamily(val5);
		Reflection.SetFieldValue<SkillFamily>((object)component.secondary, "_skillFamily", val5);
		component.utility = val2.GetComponent<GenericSkill>();
		((BaseUnityPlugin)this).Logger.LogMessage((object)"Replacing Utility");
		component.utility = val2.AddComponent<GenericSkill>();
		SkillFamily val6 = ScriptableObject.CreateInstance<SkillFamily>();
		val6.variants = (Variant[])(object)new Variant[1];
		ContentAddition.AddSkillFamily(val6);
		Reflection.SetFieldValue<SkillFamily>((object)component.utility, "_skillFamily", val6);
		component.special = val2.GetComponent<GenericSkill>();
		((BaseUnityPlugin)this).Logger.LogMessage((object)"Replacing Special");
		component.special = val2.AddComponent<GenericSkill>();
		SkillFamily val7 = ScriptableObject.CreateInstance<SkillFamily>();
		val7.variants = (Variant[])(object)new Variant[1];
		ContentAddition.AddSkillFamily(val7);
		Reflection.SetFieldValue<SkillFamily>((object)component.special, "_skillFamily", val7);
		SkillDef val8 = ScriptableObject.CreateInstance<SkillDef>();
		val8.activationState = new SerializableEntityStateType(typeof(FireBeam));
		val8.activationStateMachineName = "Weapon";
		val8.baseMaxStock = 1;
		val8.baseRechargeInterval = 0f;
		val8.beginSkillCooldownOnSkillEnd = false;
		val8.canceledFromSprinting = false;
		val8.cancelSprintingOnActivation = true;
		val8.fullRestockOnAssign = true;
		val8.interruptPriority = (InterruptPriority)0;
		val8.isCombatSkill = true;
		val8.mustKeyPress = false;
		val8.rechargeStock = 1;
		val8.requiredStock = 1;
		val8.stockToConsume = 0;
		val8.skillDescriptionToken = "CARBTURRET_PRIMARY_BULLT_DESCRIPTION";
		val8.skillName = "CARBTURRET_PRIMARY_BULLT_NAME";
		val8.skillNameToken = "CARBTURRET_PRIMARY_BULLT_NAME";
		val8.icon = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Commando/CommandoBodyFireFMJ.asset").WaitForCompletion().icon;
		SkillDef val9 = ScriptableObject.CreateInstance<SkillDef>();
		val9.activationState = new SerializableEntityStateType(typeof(FireExploderShards));
		val9.activationStateMachineName = "Weapon";
		val9.baseMaxStock = 8;
		val9.baseRechargeInterval = 1f;
		val9.beginSkillCooldownOnSkillEnd = false;
		val9.canceledFromSprinting = false;
		val9.cancelSprintingOnActivation = true;
		val9.fullRestockOnAssign = true;
		val9.interruptPriority = (InterruptPriority)1;
		val9.isCombatSkill = true;
		val9.mustKeyPress = false;
		val9.rechargeStock = 1;
		val9.requiredStock = 1;
		val9.stockToConsume = 1;
		val9.skillDescriptionToken = "CARBTURRET_SECONDARY_STRONG_DESCRIPTION";
		val9.skillName = "CARBTURRET_SECONDARY_STRONG_NAME";
		val9.skillNameToken = "CARBTURRET_SECONDARY_STRONG_NAME";
		val9.icon = ((SkillDef)Addressables.LoadAssetAsync<ToolbotWeaponSkillDef>((object)"RoR2/Base/Toolbot/ToolbotBodyFireGrenadeLauncher.asset").WaitForCompletion()).icon;
		SkillDef val10 = ScriptableObject.CreateInstance<SkillDef>();
		LanguageAPI.Add("KEYWORD_WEAK23", "<style=cKeywordName>Weaken</style><style=cSub>Reduce movement speed and damage by <style=cIsDamage>40%</style>. Reduce armor by <style=cIsDamage>30</style>.</style>");
		val10.activationState = new SerializableEntityStateType(typeof(ChargeSonicBoom));
		val10.activationStateMachineName = "Weapon";
		val10.baseMaxStock = 1;
		val10.baseRechargeInterval = 5.5f;
		val10.beginSkillCooldownOnSkillEnd = false;
		val10.canceledFromSprinting = false;
		val10.cancelSprintingOnActivation = false;
		val10.fullRestockOnAssign = true;
		val10.interruptPriority = (InterruptPriority)1;
		val10.isCombatSkill = true;
		val10.mustKeyPress = true;
		val10.rechargeStock = 1;
		val10.requiredStock = 1;
		val10.stockToConsume = 1;
		val10.skillDescriptionToken = "CARBTURRET_UTILITY_DISP_DESCRIPTION";
		val10.skillName = "CARBTURRET_UTILITY_DISP_NAME";
		val10.skillNameToken = "CARBTURRET_UTILITY_DISP_NAME";
		val10.icon = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Treebot/TreebotBodySonicBoom.asset").WaitForCompletion().icon;
		val10.keywordTokens = new string[1] { "KEYWORD_WEAK23" };
		SkillDef val11 = ScriptableObject.CreateInstance<SkillDef>();
		val11.activationState = new SerializableEntityStateType(typeof(FireShotgunBlast));
		val11.activationStateMachineName = "Weapon";
		val11.baseMaxStock = 1;
		val11.baseRechargeInterval = 6f;
		val11.beginSkillCooldownOnSkillEnd = false;
		val11.canceledFromSprinting = false;
		val11.cancelSprintingOnActivation = false;
		val11.fullRestockOnAssign = true;
		val11.interruptPriority = (InterruptPriority)1;
		val11.isCombatSkill = true;
		val11.mustKeyPress = true;
		val11.rechargeStock = 1;
		val11.requiredStock = 1;
		val11.stockToConsume = 1;
		val11.skillDescriptionToken = "CARBTURRET_SPECIAL_SPORE_DESCRIPTION";
		val11.skillName = "CARBTURRET_SPECIAL_SPORE_NAME";
		val11.skillNameToken = "CARBTURRET_SPECIAL_SPORE_NAME";
		val11.icon = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Commando/CommandoBodyFireShotgunBlast.asset").WaitForCompletion().icon;
		SkillDef val12 = ScriptableObject.CreateInstance<SkillDef>();
		val12.activationState = new SerializableEntityStateType(typeof(FireGauss));
		val12.activationStateMachineName = "Weapon";
		val12.baseMaxStock = 1;
		val12.baseRechargeInterval = 0f;
		val12.beginSkillCooldownOnSkillEnd = false;
		val12.canceledFromSprinting = false;
		val12.cancelSprintingOnActivation = true;
		val12.fullRestockOnAssign = true;
		val12.interruptPriority = (InterruptPriority)0;
		val12.isCombatSkill = true;
		val12.mustKeyPress = false;
		val12.rechargeStock = 1;
		val12.requiredStock = 1;
		val12.stockToConsume = 0;
		val12.skillDescriptionToken = "CARBTURRET_PRIMARY_BULLT2_DESCRIPTION";
		val12.skillName = "CARBTURRET_PRIMARY_BULLT2_NAME";
		val12.skillNameToken = "CARBTURRET_PRIMARY_BULLT2_NAME";
		val12.icon = ((SkillDef)Addressables.LoadAssetAsync<ReloadSkillDef>((object)"RoR2/Base/Bandit2/Bandit2Blast.asset").WaitForCompletion()).icon;
		SkillDef val13 = ScriptableObject.CreateInstance<SkillDef>();
		LanguageAPI.Add("KEYWORD_FREIZA", "<style=cKeywordName>Freezing</style><style=cSub>Freeze enemies in place. Frozen enemies are <style=cIsHealth>instantly killed</style> if below <style=cIsHealth>30%</style> health.</style>");
		val13.activationState = new SerializableEntityStateType(typeof(PrepWall));
		val13.activationStateMachineName = "Weapon";
		val13.baseMaxStock = 1;
		val13.baseRechargeInterval = 12f;
		val13.beginSkillCooldownOnSkillEnd = true;
		val13.canceledFromSprinting = false;
		val13.cancelSprintingOnActivation = false;
		val13.fullRestockOnAssign = true;
		val13.interruptPriority = (InterruptPriority)1;
		val13.isCombatSkill = true;
		val13.mustKeyPress = true;
		val13.rechargeStock = 1;
		val13.requiredStock = 1;
		val13.stockToConsume = 1;
		val13.skillDescriptionToken = "CARBTURRET_SECONDARY_STRONG2_DESCRIPTION";
		val13.skillName = "CARBTURRET_SECONDARY_STRONG2_NAME";
		val13.skillNameToken = "CARBTURRET_SECONDARY_STRONG2_NAME";
		val13.icon = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Mage/MageBodyWall.asset").WaitForCompletion().icon;
		val13.keywordTokens = new string[1] { "KEYWORD_FREIZA" };
		SkillDef val14 = ScriptableObject.CreateInstance<SkillDef>();
		val14.activationState = new SerializableEntityStateType(typeof(BlinkState));
		val14.activationStateMachineName = "Weapon";
		val14.baseMaxStock = 1;
		val14.baseRechargeInterval = 8f;
		val14.beginSkillCooldownOnSkillEnd = true;
		val14.canceledFromSprinting = false;
		val14.cancelSprintingOnActivation = false;
		val14.fullRestockOnAssign = true;
		val14.interruptPriority = (InterruptPriority)1;
		val14.isCombatSkill = true;
		val14.mustKeyPress = true;
		val14.rechargeStock = 1;
		val14.requiredStock = 1;
		val14.stockToConsume = 1;
		val14.skillDescriptionToken = "CARBTURRET_UTILITY_DISP2_DESCRIPTION";
		val14.skillName = "CARBTURRET_UTILITY_DISP2_NAME";
		val14.skillNameToken = "CARBTURRET_UTILITY_DISP2_NAME";
		val14.icon = ((SkillDef)Addressables.LoadAssetAsync<MercDashSkillDef>((object)"RoR2/Base/Merc/MercBodyAssaulter.asset").WaitForCompletion()).icon;
		SkillDef val15 = ScriptableObject.CreateInstance<SkillDef>();
		LanguageAPI.Add("KEYWORD_STUNNAIZA", "<style=cKeywordName>Stunning</style><style=cSub>Interrupts enemies and briefly stuns them.</style>");
		val15.activationState = new SerializableEntityStateType(typeof(AimStunDrone));
		val15.activationStateMachineName = "Weapon";
		val15.baseMaxStock = 1;
		val15.baseRechargeInterval = 6f;
		val15.beginSkillCooldownOnSkillEnd = false;
		val15.canceledFromSprinting = false;
		val15.cancelSprintingOnActivation = false;
		val15.fullRestockOnAssign = true;
		val15.interruptPriority = (InterruptPriority)1;
		val15.isCombatSkill = true;
		val15.mustKeyPress = true;
		val15.rechargeStock = 1;
		val15.requiredStock = 1;
		val15.stockToConsume = 1;
		val15.skillDescriptionToken = "CARBTURRET_SPECIAL_SPORE2_DESCRIPTION";
		val15.skillName = "CARBTURRET_SPECIAL_SPORE2_NAME";
		val15.skillNameToken = "CARBTURRET_SPECIAL_SPORE2_NAME";
		val15.icon = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Toolbot/ToolbotBodyStunDrone.asset").WaitForCompletion().icon;
		((BaseUnityPlugin)this).Logger.LogMessage((object)"Adding third primary");
		SkillDef val16 = ScriptableObject.CreateInstance<SkillDef>();
		val16.activationState = new SerializableEntityStateType(typeof(WalkerChargeBeam));
		val16.activationStateMachineName = "Weapon";
		val16.baseMaxStock = 1;
		val16.baseRechargeInterval = 0f;
		val16.beginSkillCooldownOnSkillEnd = true;
		val16.canceledFromSprinting = false;
		val16.cancelSprintingOnActivation = true;
		val16.fullRestockOnAssign = true;
		val16.interruptPriority = (InterruptPriority)0;
		val16.isCombatSkill = true;
		val16.mustKeyPress = false;
		val16.rechargeStock = 1;
		val16.requiredStock = 1;
		val16.stockToConsume = 0;
		val16.skillDescriptionToken = "CARBTURRET_PRIMARY_BULLT3_DESCRIPTION";
		val16.skillName = "CARBTURRET_PRIMARY_BULLT3_NAME";
		val16.skillNameToken = "CARBTURRET_PRIMARY_BULLT3_NAME";
		val16.icon = Addressables.LoadAssetAsync<SkillDef>((object)"RoR2/Base/Commando/CommandoBodyFireFMJ.asset").WaitForCompletion().icon;
		ContentAddition.AddSkillDef(val8);
		ContentAddition.AddSkillDef(val10);
		ContentAddition.AddSkillDef(val9);
		ContentAddition.AddSkillDef(val11);
		ContentAddition.AddSkillDef(val12);
		ContentAddition.AddSkillDef(val13);
		ContentAddition.AddSkillDef(val14);
		ContentAddition.AddSkillDef(val15);
		ContentAddition.AddSkillDef(val16);
		((BaseUnityPlugin)this).Logger.LogMessage((object)"Skilldefs added");
		LanguageAPI.Add("CARBTURRET_PRIMARY_BULLT_NAME", "APPLY_FORCE");
		LanguageAPI.Add("CARBTURRET_PRIMARY_BULLT_DESCRIPTION", "Fire a <style=cIsUtility>slowing</style> continuous short-range beam for <style=cIsDamage>200% damage</style> per second.");
		LanguageAPI.Add("CARBTURRET_SECONDARY_STRONG_NAME", "APPLY_SUPRESSION");
		LanguageAPI.Add("CARBTURRET_SECONDARY_STRONG_DESCRIPTION", "Fire an <style=cIsDamage>orb</style> for <style=cIsDamage>200% damage</style>. Can hold up to <style=cIsDamage>8</style>.");
		LanguageAPI.Add("CARBTURRET_UTILITY_DISP_NAME", "DISPERSE");
		LanguageAPI.Add("CARBTURRET_UTILITY_DISP_DESCRIPTION", "Fire a <style=cIsUtility>Sonic Boom</style> that <style=cIsDamage>Weakens</style> all enemies on hit.");
		LanguageAPI.Add("CARBTURRET_SPECIAL_SPORE_NAME", "SHATTER");
		LanguageAPI.Add("CARBTURRET_SPECIAL_SPORE_DESCRIPTION", "Fire two close-range blasts that deal <style=cIsDamage>8x200% damage</style> total.");
		LanguageAPI.Add("CARBTURRET_PRIMARY_BULLT2_NAME", "APPLY_PRESSURE");
		LanguageAPI.Add("CARBTURRET_PRIMARY_BULLT2_DESCRIPTION", "Fire a <style=cIsUtility>gauss blast</style> for <style=cIsDamage>100% damage</style>.");
		LanguageAPI.Add("CARBTURRET_SECONDARY_STRONG2_NAME", "APPLY_OPPRESSION");
		LanguageAPI.Add("CARBTURRET_SECONDARY_STRONG2_DESCRIPTION", "<style=cIsUtility>Freezing</style>. Create a barrier that hurts enemies for <style=cIsDamage>100% damage</style>.");
		LanguageAPI.Add("CARBTURRET_UTILITY_DISP2_NAME", "FLICKER");
		LanguageAPI.Add("CARBTURRET_UTILITY_DISP2_DESCRIPTION", "<style=cIsUtility>Disappear</style> and <style=cIsUtility>teleport</style> forward.");
		LanguageAPI.Add("CARBTURRET_SPECIAL_SPORE2_NAME", "DISCOMBOBULATE");
		LanguageAPI.Add("CARBTURRET_SPECIAL_SPORE2_DESCRIPTION", "<style=cIsDamage>Stunning</style>. Launch a canister for <style=cIsDamage>220% damage</style>. Drops <style=cIsDamage>stun</style> bomblets for <style=cIsDamage>5x44%</style> damage.");
		LanguageAPI.Add("CARBTURRET_PRIMARY_BULLT3_NAME", "OVERFLOW");
		LanguageAPI.Add("CARBTURRET_PRIMARY_BULLT3_DESCRIPTION", "Charge up and fire a long-range beam for <style=cIsDamage>100% damage</style>.");
		SkillFamily skillFamily = component.primary.skillFamily;
		SkillFamily skillFamily2 = component.secondary.skillFamily;
		SkillFamily skillFamily3 = component.utility.skillFamily;
		SkillFamily skillFamily4 = component.special.skillFamily;
		((BaseUnityPlugin)this).Logger.LogMessage((object)"SKILLS FINAL");
		Variant[] variants = skillFamily.variants;
		int num = 0;
		Variant val17 = default(Variant);
		val17.skillDef = val8;
		((Variant)(ref val17)).viewableNode = new Node(val8.skillNameToken, false, (Node)null);
		Variant val18 = val17;
		variants[num] = val18;
		Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
		Variant[] variants2 = skillFamily.variants;
		int num2 = skillFamily.variants.Length - 1;
		val17 = new Variant
		{
			skillDef = val12,
			unlockableName = ""
		};
		((Variant)(ref val17)).viewableNode = new Node(val12.skillNameToken, false, (Node)null);
		variants2[num2] = val17;
		Variant[] variants3 = skillFamily2.variants;
		int num3 = 0;
		val17 = default(Variant);
		val17.skillDef = val9;
		((Variant)(ref val17)).viewableNode = new Node(val.skillNameToken, false, (Node)null);
		val18 = val17;
		variants3[num3] = val18;
		Array.Resize(ref skillFamily2.variants, skillFamily2.variants.Length + 1);
		Variant[] variants4 = skillFamily2.variants;
		int num4 = skillFamily2.variants.Length - 1;
		val17 = new Variant
		{
			skillDef = val13,
			unlockableName = ""
		};
		((Variant)(ref val17)).viewableNode = new Node(val13.skillNameToken, false, (Node)null);
		variants4[num4] = val17;
		Variant[] variants5 = skillFamily3.variants;
		int num5 = 0;
		val17 = default(Variant);
		val17.skillDef = val10;
		((Variant)(ref val17)).viewableNode = new Node(val.skillNameToken, false, (Node)null);
		val18 = val17;
		variants5[num5] = val18;
		Array.Resize(ref skillFamily3.variants, skillFamily3.variants.Length + 1);
		Variant[] variants6 = skillFamily3.variants;
		int num6 = skillFamily3.variants.Length - 1;
		val17 = new Variant
		{
			skillDef = val14,
			unlockableName = ""
		};
		((Variant)(ref val17)).viewableNode = new Node(val14.skillNameToken, false, (Node)null);
		variants6[num6] = val17;
		Variant[] variants7 = skillFamily4.variants;
		int num7 = 0;
		val17 = default(Variant);
		val17.skillDef = val11;
		((Variant)(ref val17)).viewableNode = new Node(val.skillNameToken, false, (Node)null);
		val18 = val17;
		variants7[num7] = val18;
		((BaseUnityPlugin)this).Logger.LogMessage((object)"Please work");
		Array.Resize(ref skillFamily4.variants, skillFamily4.variants.Length + 1);
		Variant[] variants8 = skillFamily4.variants;
		int num8 = skillFamily4.variants.Length - 1;
		val17 = new Variant
		{
			skillDef = val15,
			unlockableName = ""
		};
		((Variant)(ref val17)).viewableNode = new Node(val15.skillNameToken, false, (Node)null);
		variants8[num8] = val17;
		Array.Resize(ref skillFamily.variants, skillFamily.variants.Length + 1);
		Variant[] variants9 = skillFamily.variants;
		int num9 = skillFamily.variants.Length - 1;
		val17 = new Variant
		{
			skillDef = val16,
			unlockableName = ""
		};
		((Variant)(ref val17)).viewableNode = new Node(val16.skillNameToken, false, (Node)null);
		variants9[num9] = val17;
		ContentAddition.AddBody(val2);
		((BaseUnityPlugin)this).Logger.LogMessage((object)"Body added");
		LanguageAPI.Add("PCBeetle_DESC", "The TR58 Carbonizer Turret is a middle-ranged survivor with decent mobility." + Environment.NewLine + Environment.NewLine + "<style=cSub><!> “The future is now! Cybernetic enhancements – buy them cheap and become the person you’ve always dreamed of being!”</style>" + Environment.NewLine + Environment.NewLine + "<style=cSub><!> DISPERSE is especially helpful against elites and speedy enemies, as it weakens them, reducing their armor, decreasing their movement speed and damage. It can also push flying monsters into walls to kill them.</style>" + Environment.NewLine + Environment.NewLine + "<style=cSub><!> Items that increase attack speed, such as Soldier's Syringe, affect the damage per second of APPLY_FORCE.</style>");
		LanguageAPI.Add("PCBeetle_LORE", "<style=cMono>[  BEGIN OUTPUT  ]</style>\n\n<style=cIsHealth><i>“ WHAT AM I FIGHTING FOR? ”</i></style>\n<style=cIsHealth>“AM I ONE OF </style>[faction red]</style><style=cIsHealth>?”</style>\n<style=cIsHealth>“AM I ONE OF</style> [faction white]<style=cIsHealth>?”</style>\n\n...\n\n<style=cMono>[  CEASE OUTPUT  ]</style>\n\n<style=cMono>[  BEGIN OUTPUT  ]</style>\n\n“Take note of the <style=cIsDamage>ratios</style>.”\n“High speed. Speed is war.”\n“Quadrupeds are easier, and more stable.”\n“We deviate from that.”\n“Powered by refuse – all material has value. Quality of components reduces stability.”\n“I will tie destruction with destruction.”\n\n...\n\n<style=cMono>[  CEASE OUTPUT  ]\n\n> TRANSLATION ERRORS: 2\n\n> [faction red]; CANNOT TRANSLATE\n\n> [faction white]; CANNOT TRANSLATE</style>\n\n========================================\n\nTranslation powered by NewGenesis0. Al?l r?ights? r?????????.</style>");
		LanguageAPI.Add("PCBeetle_NAME", "TR58 Carbonizer");
		LanguageAPI.Add("PCBeetle_SUBNAME", "Inferior Construct");
		LanguageAPI.Add("SALTCARBON_OUTRO_FLAVOR", "..and so it left, still searching for its creator.");
		LanguageAPI.Add("SALTCARBON_MAIN_ENDING_ESCAPE_FAILURE_FLAVOR", "..and so it vanished, inanimate once more.");
		CharacterBody component2 = val2.GetComponent<CharacterBody>();
		CharacterBody val19 = component2;
		val2.GetComponent<Interactor>().maxInteractionDistance = 3f;
		CameraTargetParams component3 = val2.GetComponent<CameraTargetParams>();
		component3.dontRaycastToPivot = true;
		CharacterBody obj = val19;
		obj.baseMaxHealth *= 1f;
		component2.levelMaxHealth = 33f;
		component2.baseRegen = 1f;
		component2.levelRegen = 0.25f;
		component2.baseArmor = 0f;
		component2.levelArmor = 0f;
		val19 = component2;
		CharacterBody obj2 = val19;
		obj2.baseDamage *= 1f;
		component2.levelDamage = 2.4f;
		component2.baseCrit = 1f;
		component2.levelCrit = 0f;
		component2.baseMoveSpeed = 8f;
		component2.levelMoveSpeed = 0f;
		component2.baseAttackSpeed = 1f;
		component2.levelAttackSpeed = 0f;
		component2.hideCrosshair = false;
		component2.baseNameToken = "PCBeetle_NAME";
		component2.subtitleNameToken = "PCBeetle_SUBNAME";
		GameObject val20 = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("prefabs/characterdisplays/engidisplay"), "WalkerBodyDisplay", true);
		Transform val21 = val20.transform.Find("mdlEngi");
		Transform val22 = val20.transform.Find("mdlEngiTurret");
		val21.localPosition = new Vector3(100f, 100f, 100f);
		val22.localPosition = new Vector3(0f, 0f, 0f);
		val22.localRotation = new Quaternion(0f, 0f, 0f, 1f);
		SurvivorDef val23 = ScriptableObject.CreateInstance<SurvivorDef>();
		val23.bodyPrefab = val2;
		val23.descriptionToken = "PCBeetle_DESC";
		val23.displayPrefab = val20;
		val23.cachedName = "Inferior Construct";
		val23.desiredSortPosition = 16f;
		val23.bodyPrefab.GetComponent<CharacterBody>().bodyColor = Color32.op_Implicit(new Color32((byte)135, (byte)83, (byte)224, byte.MaxValue));
		val23.mainEndingEscapeFailureFlavorToken = "SALTCARBON_OUTRO_FLAVOR";
		val23.bodyPrefab.GetComponent<CharacterBody>()._defaultCrosshairPrefab = LegacyResourcesAPI.Load<GameObject>("prefabs/crosshair/simpledotcrosshair");
		ContentAddition.AddSurvivorDef(val23);
		GameObject val24 = PrefabAPI.InstantiateClone(LegacyResourcesAPI.Load<GameObject>("Prefabs/CharacterMasters/TreebotMonsterMaster"), "WalkerPlayableMonsterMaster", true);
		val24.GetComponent<CharacterMaster>().bodyPrefab = val2;
		ContentAddition.AddMaster(val24);
	}
}