using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Bootstrap;
using BepInEx.Configuration;
using EntityStates;
using EntityStates.AI;
using EntityStates.AI.Walker;
using IL.RoR2.UI;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using On.RoR2;
using RiskOfOptions;
using RiskOfOptions.Options;
using RoR2;
using RoR2.CharacterAI;
using RoR2.ContentManagement;
using RoR2.Navigation;
using RoR2.UI;
using TMPro;
using UnityEngine;
using UnityEngine.Networking;
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 = ".NET Standard 2.0")]
[assembly: AssemblyCompany("PingOrdering")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0+dc3c63f8043ea2277dec5f28ddcc3914ebce0876")]
[assembly: AssemblyProduct("PingOrdering")]
[assembly: AssemblyTitle("PingOrdering")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("1.0.0.0")]
[module: UnverifiableCode]
namespace PingOrdering;
public class AwaitOrders : BaseAIState
{
public enum Orders
{
None,
Move,
Attack,
Assist
}
public Orders order;
public Vector3? targetPosition;
public GameObject target;
public float sprintThreshold;
public PingIndicator ping;
public AwaitOrders(PingIndicator ing = null)
{
ping = ing;
}
public override void OnEnter()
{
//IL_00eb: 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_0105: Unknown result type (might be due to invalid IL or missing references)
//IL_011f: Unknown result type (might be due to invalid IL or missing references)
//IL_0157: Unknown result type (might be due to invalid IL or missing references)
//IL_0193: Unknown result type (might be due to invalid IL or missing references)
//IL_01da: Unknown result type (might be due to invalid IL or missing references)
//IL_01df: Unknown result type (might be due to invalid IL or missing references)
//IL_01f5: 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_0205: Unknown result type (might be due to invalid IL or missing references)
//IL_0271: Unknown result type (might be due to invalid IL or missing references)
//IL_02d6: Unknown result type (might be due to invalid IL or missing references)
//IL_034b: Unknown result type (might be due to invalid IL or missing references)
//IL_0370: Unknown result type (might be due to invalid IL or missing references)
//IL_0375: Unknown result type (might be due to invalid IL or missing references)
//IL_0379: Unknown result type (might be due to invalid IL or missing references)
//IL_037e: Unknown result type (might be due to invalid IL or missing references)
//IL_0382: Unknown result type (might be due to invalid IL or missing references)
//IL_038f: Unknown result type (might be due to invalid IL or missing references)
//IL_039c: Unknown result type (might be due to invalid IL or missing references)
((BaseAIState)this).OnEnter();
if (!Object.op_Implicit((Object)(object)((BaseAIState)this).ai) || !Object.op_Implicit((Object)(object)((BaseAIState)this).body))
{
((EntityState)this).outer.SetNextStateToMain();
AIOrdersPlugin.subordinateDict[((BaseAIState)this).characterMaster.minionOwnership.ownerMaster].Remove(this);
return;
}
if (!Object.op_Implicit((Object)(object)ping))
{
ping = Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/PingIndicator")).GetComponent<PingIndicator>();
PingIndicator obj = ping;
MinionOwnership minionOwnership = ((BaseAIState)this).characterMaster.minionOwnership;
object pingOwner;
if (minionOwnership == null)
{
pingOwner = null;
}
else
{
CharacterMaster ownerMaster = minionOwnership.ownerMaster;
pingOwner = ((ownerMaster != null) ? ((Component)ownerMaster).gameObject : null);
}
obj.pingOwner = (GameObject)pingOwner;
PingIndicator obj2 = ping;
CharacterBody body = ((BaseAIState)this).body;
Vector3? obj3;
if (body == null)
{
obj3 = null;
}
else
{
Transform transform = body.transform;
obj3 = ((transform != null) ? new Vector3?(transform.position) : null);
}
obj2.pingOrigin = (Vector3)(((??)obj3) ?? ((EntityState)this).transform.position);
ping.pingNormal = Vector3.zero;
ping.pingTarget = ((Component)((BaseAIState)this).body).gameObject;
((Component)ping).transform.position = ((BaseAIState)this).body.transform.position;
ping.positionIndicator.targetTransform = ((BaseAIState)this).body.transform;
ping.positionIndicator.defaultPosition = ((BaseAIState)this).body.transform.position;
ping.targetTransformToFollow = ((BaseAIState)this).body.coreTransform;
ping.pingDuration = float.PositiveInfinity;
ping.fixedTimer = float.PositiveInfinity;
ping.pingColor = Color.cyan;
((Graphic)ping.pingText).color = ping.textBaseColor * ping.pingColor;
TextMeshPro pingText = ping.pingText;
MinionOwnership minionOwnership2 = ((BaseAIState)this).characterMaster.minionOwnership;
((TMP_Text)pingText).text = Util.GetBestMasterName((minionOwnership2 != null) ? minionOwnership2.ownerMaster : null);
((Behaviour)ping.pingObjectScaleCurve).enabled = false;
((Behaviour)ping.pingObjectScaleCurve).enabled = true;
ping.pingHighlight.highlightColor = (HighlightColor)451;
Highlight pingHighlight = ping.pingHighlight;
ModelLocator modelLocator = ((BaseAIState)this).body.modelLocator;
object targetRenderer;
if (modelLocator == null)
{
targetRenderer = null;
}
else
{
Transform modelTransform = modelLocator.modelTransform;
targetRenderer = ((modelTransform == null) ? null : ((Component)modelTransform).GetComponentInChildren<CharacterModel>()?.baseRendererInfos?.First((RendererInfo r) => !r.ignoreOverlays).renderer);
}
pingHighlight.targetRenderer = (Renderer)targetRenderer;
ping.pingHighlight.strength = 1f;
ping.pingHighlight.isOn = true;
GameObject[] enemyPingGameObjects = ping.enemyPingGameObjects;
foreach (GameObject val in enemyPingGameObjects)
{
val.SetActive(true);
SpriteRenderer component = val.GetComponent<SpriteRenderer>();
if (Object.op_Implicit((Object)(object)component))
{
component.color = Color.cyan;
}
ParticleSystem component2 = val.GetComponent<ParticleSystem>();
if (Object.op_Implicit((Object)(object)component2))
{
MainModule main = component2.main;
MinMaxGradient startColor = ((MainModule)(ref main)).startColor;
((MinMaxGradient)(ref startColor)).colorMax = Color.cyan;
((MinMaxGradient)(ref startColor)).colorMin = Color.cyan;
((MinMaxGradient)(ref startColor)).color = Color.cyan;
}
}
}
AISkillDriver? obj4 = ((IEnumerable<AISkillDriver>)((BaseAIState)this).ai.skillDrivers).FirstOrDefault((Func<AISkillDriver, bool>)((AISkillDriver drive) => drive.shouldSprint));
sprintThreshold = ((obj4 != null) ? obj4.minDistanceSqr : float.PositiveInfinity);
}
public override void FixedUpdate()
{
//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
//IL_00ef: Expected O, but got Unknown
//IL_02d1: Unknown result type (might be due to invalid IL or missing references)
//IL_02db: Expected O, but got Unknown
//IL_0132: Unknown result type (might be due to invalid IL or missing references)
//IL_0137: Unknown result type (might be due to invalid IL or missing references)
//IL_0146: Unknown result type (might be due to invalid IL or missing references)
//IL_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: 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_0199: Unknown result type (might be due to invalid IL or missing references)
//IL_01a7: Unknown result type (might be due to invalid IL or missing references)
//IL_01ae: Unknown result type (might be due to invalid IL or missing references)
//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
//IL_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_020b: Unknown result type (might be due to invalid IL or missing references)
//IL_0216: Unknown result type (might be due to invalid IL or missing references)
//IL_021b: Unknown result type (might be due to invalid IL or missing references)
//IL_0220: Unknown result type (might be due to invalid IL or missing references)
((BaseAIState)this).FixedUpdate();
if (!Object.op_Implicit((Object)(object)((BaseAIState)this).ai))
{
((EntityState)this).outer.SetNextStateToMain();
AIOrdersPlugin.subordinateDict[((BaseAIState)this).characterMaster.minionOwnership.ownerMaster].Remove(this);
return;
}
if (!Object.op_Implicit((Object)(object)target) && !targetPosition.HasValue)
{
((BaseAIState)this).AimAt(ref base.bodyInputs, ((BaseAIState)this).ai.leader);
}
switch (order)
{
case Orders.None:
break;
case Orders.Attack:
((BaseAIState)this).ai.currentEnemy.gameObject = target;
((BaseAIState)this).ai.enemyAttention = ((BaseAIState)this).ai.enemyAttentionDuration;
((EntityState)this).outer.SetNextState((EntityState)new Combat());
break;
case Orders.Move:
{
if (!Object.op_Implicit((Object)(object)((BaseAIState)this).body) || ((BaseAIState)this).body.moveSpeed == 0f)
{
((EntityState)this).outer.SetNextStateToMain();
}
Agent broadNavigationAgent = ((BaseAIState)this).ai.broadNavigationAgent;
((Agent)(ref broadNavigationAgent)).currentPosition = ((BaseAIState)this).ai.body.footPosition;
((BaseAIState)this).ai.SetGoalPosition(targetPosition);
LocalNavigator localNavigator = ((BaseAIState)this).ai.localNavigator;
AgentOutput output = ((Agent)(ref broadNavigationAgent)).output;
localNavigator.targetPosition = (Vector3)(((??)((AgentOutput)(ref output)).nextPosition) ?? ((BaseAIState)this).ai.localNavigator.targetPosition);
output = ((Agent)(ref broadNavigationAgent)).output;
if (!((AgentOutput)(ref output)).targetReachable)
{
((Agent)(ref broadNavigationAgent)).InvalidatePath();
}
((BaseAIState)this).ai.localNavigator.Update(BaseAIState.cvAIUpdateInterval.value);
base.bodyInputs.moveVector = ((BaseAIState)this).ai.localNavigator.moveVector;
Vector3 val = ((BaseAIState)this).body.footPosition - targetPosition.Value;
float sqrMagnitude = ((Vector3)(ref val)).sqrMagnitude;
base.bodyInputs.pressSprint = sqrMagnitude > sprintThreshold;
if (((BaseAIState)this).ai.localNavigator.wasObstructedLastUpdate)
{
((BaseAIState)this).ModifyInputsForJumpIfNeccessary(ref base.bodyInputs);
}
float num = ((BaseAIState)this).body.radius * ((BaseAIState)this).body.radius * 4f;
if (sqrMagnitude < num)
{
((EntityState)this).outer.SetNextStateToMain();
}
break;
}
case Orders.Assist:
((BaseAIState)this).ai.buddy.gameObject = target;
((BaseAIState)this).ai.customTarget.gameObject = target;
((EntityState)this).outer.SetNextState((EntityState)new Combat());
break;
}
}
public override void OnExit()
{
((BaseAIState)this).OnExit();
if (Object.op_Implicit((Object)(object)ping))
{
ping.fixedTimer = 0f;
}
}
public void SubmitOrder(Orders command, GameObject target, Vector3? targetPosition = null)
{
//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)
order = command;
this.target = target;
this.targetPosition = targetPosition;
if (targetPosition.HasValue)
{
Agent broadNavigationAgent = ((BaseAIState)this).ai.broadNavigationAgent;
((Agent)(ref broadNavigationAgent)).goalPosition = targetPosition;
((Agent)(ref broadNavigationAgent)).InvalidatePath();
}
}
}
[BepInPlugin("xyz.yekoc.PingOrdering", "Ping Ordering", "1.1.2")]
[BepInDependency(/*Could not decode attribute arguments.*/)]
public class AIOrdersPlugin : BaseUnityPlugin
{
[Serializable]
[CompilerGenerated]
private sealed class <>c
{
public static readonly <>c <>9 = new <>c();
public static hook_Update <>9__2_0;
public static Func<Instruction, bool> <>9__2_4;
public static Func<Instruction, bool> <>9__2_5;
public static Func<PingIndicator, bool> <>9__2_6;
public static Func<Instruction, bool> <>9__2_7;
public static Func<Instruction, bool> <>9__2_8;
public static Func<PingIndicator, bool> <>9__2_9;
public static Manipulator <>9__2_1;
public static hook_GetColor <>9__2_2;
internal void <Awake>b__2_0(orig_Update orig, PlayerCharacterMasterController self)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self);
KeyboardShortcut value = attentionButton.Value;
if (!((KeyboardShortcut)(ref value)).IsPressed() || !self.hasEffectiveAuthority)
{
return;
}
MinionGroup val = MinionGroup.FindGroup(((NetworkBehaviour)self.master).netId);
if (val == null)
{
return;
}
MinionOwnership[] members = val.members;
foreach (MinionOwnership val2 in members)
{
if (!Object.op_Implicit((Object)(object)((val2 != null) ? ((Component)val2).gameObject : null)))
{
continue;
}
AwaitOrders awaitOrders = new AwaitOrders();
if (!subordinateDict.ContainsKey(self.master))
{
subordinateDict.Add(self.master, new List<AwaitOrders>());
}
subordinateDict[self.master].Add(awaitOrders);
if (val2 == null)
{
continue;
}
GameObject gameObject = ((Component)val2).gameObject;
if (gameObject != null)
{
EntityStateMachine component = gameObject.GetComponent<EntityStateMachine>();
if (component != null)
{
component.SetState((EntityState)(object)awaitOrders);
}
}
}
}
internal void <Awake>b__2_1(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_016a: Unknown result type (might be due to invalid IL or missing references)
ILCursor val = new ILCursor(il);
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_ENEMY")
});
val.Index += 6;
ILLabel val2 = val.MarkLabel();
val.GotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_ENEMY")
});
val.Emit(OpCodes.Ldarg_0);
val.EmitDelegate<Func<PingIndicator, bool>>((Func<PingIndicator, bool>)delegate(PingIndicator self)
{
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: 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_01bc: Unknown result type (might be due to invalid IL or missing references)
<>c__DisplayClass2_0 <>c__DisplayClass2_ = new <>c__DisplayClass2_0
{
self = self
};
CharacterMaster component2 = <>c__DisplayClass2_.self.pingOwner.GetComponent<CharacterMaster>();
CharacterMaster master = <>c__DisplayClass2_.self.pingTarget.GetComponent<CharacterBody>().master;
if (subordinateDict.ContainsKey(component2) && subordinateDict[component2].Any())
{
<>c__DisplayClass2_1 CS$<>8__locals1 = new <>c__DisplayClass2_1
{
CS$<>8__locals1 = <>c__DisplayClass2_,
flag = TeamManager.IsTeamEnemy(component2.teamIndex, master.teamIndex)
};
subordinateDict[component2].ForEach(delegate(AwaitOrders m)
{
m.SubmitOrder(CS$<>8__locals1.flag ? AwaitOrders.Orders.Attack : AwaitOrders.Orders.Assist, CS$<>8__locals1.CS$<>8__locals1.self.pingTarget);
});
subordinateDict.Remove(component2);
CS$<>8__locals1.CS$<>8__locals1.self.pingDuration = 1f;
return true;
}
BaseAI component3 = ((Component)master).GetComponent<BaseAI>();
object obj;
if (component3 == null)
{
obj = null;
}
else
{
CharacterBody characterBody = component3.leader.characterBody;
obj = ((characterBody != null) ? characterBody.master : null);
}
if ((Object)obj == (Object)(object)component2)
{
<>c__DisplayClass2_.self.pingOwner.GetComponent<PingerController>().pingIndicator = null;
PingerController component4 = <>c__DisplayClass2_.self.pingOwner.GetComponent<PingerController>();
component4.pingStock++;
subordinateDict.Add(component2, new List<AwaitOrders>
{
new AwaitOrders(<>c__DisplayClass2_.self)
});
((Component)master).GetComponent<EntityStateMachine>().SetState((EntityState)(object)subordinateDict[component2][0]);
<>c__DisplayClass2_.self.pingColor = Color.cyan;
<>c__DisplayClass2_.self.pingDuration = float.PositiveInfinity;
<>c__DisplayClass2_.self.enemyPingGameObjects[0].GetComponent<SpriteRenderer>().color = Color.cyan;
<>c__DisplayClass2_.self.pingHighlight.highlightColor = (HighlightColor)451;
return true;
}
return false;
});
val.Emit(OpCodes.Brtrue, (object)val2);
val.Index = 0;
val.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_DEFAULT")
});
val.Index += 5;
val2 = val.MarkLabel();
val.GotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_DEFAULT")
});
val.Emit(OpCodes.Ldarg_0);
val.EmitDelegate<Func<PingIndicator, bool>>((Func<PingIndicator, bool>)delegate(PingIndicator self)
{
<>c__DisplayClass2_2 CS$<>8__locals0 = new <>c__DisplayClass2_2
{
self = self
};
CharacterMaster component = CS$<>8__locals0.self.pingOwner.GetComponent<CharacterMaster>();
if (subordinateDict.ContainsKey(component))
{
subordinateDict[component].ForEach(delegate(AwaitOrders m)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
m.SubmitOrder(AwaitOrders.Orders.Move, null, CS$<>8__locals0.self.pingOrigin);
});
subordinateDict.Remove(component);
CS$<>8__locals0.self.pingDuration = 1f;
return true;
}
return false;
});
val.Emit(OpCodes.Brtrue, (object)val2);
}
internal bool <Awake>b__2_4(Instruction x)
{
return ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_ENEMY");
}
internal bool <Awake>b__2_5(Instruction x)
{
return ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_ENEMY");
}
internal bool <Awake>b__2_6(PingIndicator self)
{
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: 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_01bc: Unknown result type (might be due to invalid IL or missing references)
<>c__DisplayClass2_0 <>c__DisplayClass2_ = new <>c__DisplayClass2_0
{
self = self
};
CharacterMaster component = <>c__DisplayClass2_.self.pingOwner.GetComponent<CharacterMaster>();
CharacterMaster master = <>c__DisplayClass2_.self.pingTarget.GetComponent<CharacterBody>().master;
if (subordinateDict.ContainsKey(component) && subordinateDict[component].Any())
{
<>c__DisplayClass2_1 CS$<>8__locals0 = new <>c__DisplayClass2_1
{
CS$<>8__locals1 = <>c__DisplayClass2_,
flag = TeamManager.IsTeamEnemy(component.teamIndex, master.teamIndex)
};
subordinateDict[component].ForEach(delegate(AwaitOrders m)
{
m.SubmitOrder(CS$<>8__locals0.flag ? AwaitOrders.Orders.Attack : AwaitOrders.Orders.Assist, CS$<>8__locals0.CS$<>8__locals1.self.pingTarget);
});
subordinateDict.Remove(component);
CS$<>8__locals0.CS$<>8__locals1.self.pingDuration = 1f;
return true;
}
BaseAI component2 = ((Component)master).GetComponent<BaseAI>();
object obj;
if (component2 == null)
{
obj = null;
}
else
{
CharacterBody characterBody = component2.leader.characterBody;
obj = ((characterBody != null) ? characterBody.master : null);
}
if ((Object)obj == (Object)(object)component)
{
<>c__DisplayClass2_.self.pingOwner.GetComponent<PingerController>().pingIndicator = null;
PingerController component3 = <>c__DisplayClass2_.self.pingOwner.GetComponent<PingerController>();
component3.pingStock++;
subordinateDict.Add(component, new List<AwaitOrders>
{
new AwaitOrders(<>c__DisplayClass2_.self)
});
((Component)master).GetComponent<EntityStateMachine>().SetState((EntityState)(object)subordinateDict[component][0]);
<>c__DisplayClass2_.self.pingColor = Color.cyan;
<>c__DisplayClass2_.self.pingDuration = float.PositiveInfinity;
<>c__DisplayClass2_.self.enemyPingGameObjects[0].GetComponent<SpriteRenderer>().color = Color.cyan;
<>c__DisplayClass2_.self.pingHighlight.highlightColor = (HighlightColor)451;
return true;
}
return false;
}
internal bool <Awake>b__2_7(Instruction x)
{
return ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_DEFAULT");
}
internal bool <Awake>b__2_8(Instruction x)
{
return ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_DEFAULT");
}
internal bool <Awake>b__2_9(PingIndicator self)
{
<>c__DisplayClass2_2 CS$<>8__locals0 = new <>c__DisplayClass2_2
{
self = self
};
CharacterMaster component = CS$<>8__locals0.self.pingOwner.GetComponent<CharacterMaster>();
if (subordinateDict.ContainsKey(component))
{
subordinateDict[component].ForEach(delegate(AwaitOrders m)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
m.SubmitOrder(AwaitOrders.Orders.Move, null, CS$<>8__locals0.self.pingOrigin);
});
subordinateDict.Remove(component);
CS$<>8__locals0.self.pingDuration = 1f;
return true;
}
return false;
}
internal Color <Awake>b__2_2(orig_GetColor orig, Highlight self)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Invalid comparison between Unknown and I4
//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)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
Color val = orig.Invoke(self);
if (val == Color.magenta && (int)self.highlightColor == 451)
{
return Color.cyan + new Color(0.01f, 0f, 0f);
}
return val;
}
}
[CompilerGenerated]
private sealed class <>c__DisplayClass2_0
{
public PingIndicator self;
}
[CompilerGenerated]
private sealed class <>c__DisplayClass2_1
{
public bool flag;
public <>c__DisplayClass2_0 CS$<>8__locals1;
internal void <Awake>b__10(AwaitOrders m)
{
m.SubmitOrder(flag ? AwaitOrders.Orders.Attack : AwaitOrders.Orders.Assist, CS$<>8__locals1.self.pingTarget);
}
}
[CompilerGenerated]
private sealed class <>c__DisplayClass2_2
{
public PingIndicator self;
internal void <Awake>b__11(AwaitOrders m)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
m.SubmitOrder(AwaitOrders.Orders.Move, null, self.pingOrigin);
}
}
public static Dictionary<CharacterMaster, List<AwaitOrders>> subordinateDict = new Dictionary<CharacterMaster, List<AwaitOrders>>();
public static ConfigEntry<KeyboardShortcut> attentionButton;
private void Awake()
{
//IL_0018: Unknown result type (might be due to invalid IL or missing references)
//IL_005c: Unknown result type (might be due to invalid IL or missing references)
//IL_0061: Unknown result type (might be due to invalid IL or missing references)
//IL_0067: Expected O, but got Unknown
//IL_0081: Unknown result type (might be due to invalid IL or missing references)
//IL_0086: Unknown result type (might be due to invalid IL or missing references)
//IL_008c: Expected O, but got Unknown
//IL_00be: Unknown result type (might be due to invalid IL or missing references)
//IL_00c8: Expected O, but got Unknown
//IL_00a6: 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_00b1: Expected O, but got Unknown
attentionButton = ((BaseUnityPlugin)this).Config.Bind<KeyboardShortcut>("Controls", "Order All", new KeyboardShortcut((KeyCode)102, Array.Empty<KeyCode>()), "Calls the attention of all subordiantes.");
if (Chainloader.PluginInfos.ContainsKey("com.rune580.riskofoptions"))
{
RoOptionize();
}
object obj = <>c.<>9__2_0;
if (obj == null)
{
hook_Update val = delegate(orig_Update orig, PlayerCharacterMasterController self)
{
//IL_000e: Unknown result type (might be due to invalid IL or missing references)
//IL_0013: Unknown result type (might be due to invalid IL or missing references)
//IL_0034: Unknown result type (might be due to invalid IL or missing references)
orig.Invoke(self);
KeyboardShortcut value = attentionButton.Value;
if (((KeyboardShortcut)(ref value)).IsPressed() && self.hasEffectiveAuthority)
{
MinionGroup val8 = MinionGroup.FindGroup(((NetworkBehaviour)self.master).netId);
if (val8 != null)
{
MinionOwnership[] members = val8.members;
foreach (MinionOwnership val9 in members)
{
if (Object.op_Implicit((Object)(object)((val9 != null) ? ((Component)val9).gameObject : null)))
{
AwaitOrders awaitOrders = new AwaitOrders();
if (!subordinateDict.ContainsKey(self.master))
{
subordinateDict.Add(self.master, new List<AwaitOrders>());
}
subordinateDict[self.master].Add(awaitOrders);
if (val9 != null)
{
GameObject gameObject = ((Component)val9).gameObject;
if (gameObject != null)
{
EntityStateMachine component5 = gameObject.GetComponent<EntityStateMachine>();
if (component5 != null)
{
component5.SetState((EntityState)(object)awaitOrders);
}
}
}
}
}
}
}
};
<>c.<>9__2_0 = val;
obj = (object)val;
}
PlayerCharacterMasterController.Update += (hook_Update)obj;
object obj2 = <>c.<>9__2_1;
if (obj2 == null)
{
Manipulator val2 = delegate(ILContext il)
{
//IL_0002: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Expected O, but got Unknown
//IL_007d: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Unknown result type (might be due to invalid IL or missing references)
//IL_0138: Unknown result type (might be due to invalid IL or missing references)
//IL_016a: Unknown result type (might be due to invalid IL or missing references)
ILCursor val6 = new ILCursor(il);
val6.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_ENEMY")
});
val6.Index += 6;
ILLabel val7 = val6.MarkLabel();
val6.GotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_ENEMY")
});
val6.Emit(OpCodes.Ldarg_0);
val6.EmitDelegate<Func<PingIndicator, bool>>((Func<PingIndicator, bool>)delegate(PingIndicator self)
{
//IL_006c: Unknown result type (might be due to invalid IL or missing references)
//IL_0072: Unknown result type (might be due to invalid IL or missing references)
//IL_0175: Unknown result type (might be due to invalid IL or missing references)
//IL_017a: 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_01bc: Unknown result type (might be due to invalid IL or missing references)
CharacterMaster component2 = self.pingOwner.GetComponent<CharacterMaster>();
CharacterMaster master = self.pingTarget.GetComponent<CharacterBody>().master;
if (subordinateDict.ContainsKey(component2) && subordinateDict[component2].Any())
{
bool flag = TeamManager.IsTeamEnemy(component2.teamIndex, master.teamIndex);
subordinateDict[component2].ForEach(delegate(AwaitOrders m)
{
m.SubmitOrder(flag ? AwaitOrders.Orders.Attack : AwaitOrders.Orders.Assist, self.pingTarget);
});
subordinateDict.Remove(component2);
self.pingDuration = 1f;
return true;
}
BaseAI component3 = ((Component)master).GetComponent<BaseAI>();
object obj4;
if (component3 == null)
{
obj4 = null;
}
else
{
CharacterBody characterBody = component3.leader.characterBody;
obj4 = ((characterBody != null) ? characterBody.master : null);
}
if ((Object)obj4 == (Object)(object)component2)
{
self.pingOwner.GetComponent<PingerController>().pingIndicator = null;
PingerController component4 = self.pingOwner.GetComponent<PingerController>();
component4.pingStock++;
subordinateDict.Add(component2, new List<AwaitOrders>
{
new AwaitOrders(self)
});
((Component)master).GetComponent<EntityStateMachine>().SetState((EntityState)(object)subordinateDict[component2][0]);
self.pingColor = Color.cyan;
self.pingDuration = float.PositiveInfinity;
self.enemyPingGameObjects[0].GetComponent<SpriteRenderer>().color = Color.cyan;
self.pingHighlight.highlightColor = (HighlightColor)451;
return true;
}
return false;
});
val6.Emit(OpCodes.Brtrue, (object)val7);
val6.Index = 0;
val6.GotoNext(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_DEFAULT")
});
val6.Index += 5;
val7 = val6.MarkLabel();
val6.GotoPrev(new Func<Instruction, bool>[1]
{
(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "PLAYER_PING_DEFAULT")
});
val6.Emit(OpCodes.Ldarg_0);
val6.EmitDelegate<Func<PingIndicator, bool>>((Func<PingIndicator, bool>)delegate(PingIndicator self)
{
CharacterMaster component = self.pingOwner.GetComponent<CharacterMaster>();
if (subordinateDict.ContainsKey(component))
{
subordinateDict[component].ForEach(delegate(AwaitOrders m)
{
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
m.SubmitOrder(AwaitOrders.Orders.Move, null, self.pingOrigin);
});
subordinateDict.Remove(component);
self.pingDuration = 1f;
return true;
}
return false;
});
val6.Emit(OpCodes.Brtrue, (object)val7);
};
<>c.<>9__2_1 = val2;
obj2 = (object)val2;
}
PingIndicator.RebuildPing += (Manipulator)obj2;
object obj3 = <>c.<>9__2_2;
if (obj3 == null)
{
hook_GetColor val3 = delegate(orig_GetColor orig, Highlight self)
{
//IL_0003: Unknown result type (might be due to invalid IL or missing references)
//IL_0008: Unknown result type (might be due to invalid IL or missing references)
//IL_0009: Unknown result type (might be due to invalid IL or missing references)
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_0017: Unknown result type (might be due to invalid IL or missing references)
//IL_0021: Invalid comparison between Unknown and I4
//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)
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Unknown result type (might be due to invalid IL or missing references)
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_0049: Unknown result type (might be due to invalid IL or missing references)
//IL_0050: Unknown result type (might be due to invalid IL or missing references)
Color val5 = orig.Invoke(self);
return (val5 == Color.magenta && (int)self.highlightColor == 451) ? (Color.cyan + new Color(0.01f, 0f, 0f)) : val5;
};
<>c.<>9__2_2 = val3;
obj3 = (object)val3;
}
Highlight.GetColor += (hook_GetColor)obj3;
ContentManager.collectContentPackProviders += (CollectContentPackProvidersDelegate)delegate(AddContentPackProviderDelegate del)
{
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
//IL_0007: Expected O, but got Unknown
//IL_0021: Unknown result type (might be due to invalid IL or missing references)
//IL_002b: Expected O, but got Unknown
//IL_002b: Unknown result type (might be due to invalid IL or missing references)
//IL_0035: Expected O, but got Unknown
//IL_0044: Unknown result type (might be due to invalid IL or missing references)
//IL_004e: Expected O, but got Unknown
//IL_004e: Unknown result type (might be due to invalid IL or missing references)
//IL_0058: Expected O, but got Unknown
//IL_0067: Unknown result type (might be due to invalid IL or missing references)
//IL_0071: Expected O, but got Unknown
//IL_0071: Unknown result type (might be due to invalid IL or missing references)
//IL_007b: Expected O, but got Unknown
SimpleContentPackProvider val4 = new SimpleContentPackProvider();
val4.identifier = "PingOrdering";
val4.generateContentPackAsyncImplementation = (GenerateContentPackAsyncDelegate)Delegate.Combine((Delegate?)(object)val4.generateContentPackAsyncImplementation, (Delegate?)new GenerateContentPackAsyncDelegate(whycantthisbealambda));
val4.finalizeAsyncImplementation = (FinalizeAsyncDelegate)Delegate.Combine((Delegate?)(object)val4.finalizeAsyncImplementation, (Delegate?)new FinalizeAsyncDelegate(rapidclapping));
val4.loadStaticContentImplementation = (LoadStaticContentAsyncDelegate)Delegate.Combine((Delegate?)(object)val4.loadStaticContentImplementation, (Delegate?)new LoadStaticContentAsyncDelegate(wow));
del.Invoke((IContentPackProvider)(object)val4);
};
}
private IEnumerator whycantthisbealambda(GetContentPackAsyncArgs args)
{
args.output.entityStateTypes.Add(new Type[1] { typeof(AwaitOrders) });
args.ReportProgress(1f);
yield break;
}
private IEnumerator wow(LoadStaticContentAsyncArgs args)
{
args.ReportProgress(1f);
yield break;
}
private IEnumerator rapidclapping(FinalizeAsyncArgs args)
{
args.ReportProgress(1f);
yield break;
}
private void OnDestroy()
{
}
[MethodImpl(MethodImplOptions.NoInlining | MethodImplOptions.NoOptimization)]
private void RoOptionize()
{
//IL_0006: Unknown result type (might be due to invalid IL or missing references)
//IL_0010: Expected O, but got Unknown
ModSettingsManager.AddOption((BaseOption)new KeyBindOption(attentionButton));
}
}