Some mods may be broken due to the recent Alloyed Collective update.
Decompiled source of Ash TeleportVote v1.0.1
plugin/Ash_TeleportVote.dll
Decompiled 2 months agousing System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.Versioning; using BepInEx; using On.RoR2; using RoR2; using UnityEngine; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)] [assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")] [assembly: AssemblyVersion("0.0.0.0")] namespace Ash_TeleportVote; [BepInPlugin("Ashen_O.Ash_TeleportVote", "Ash_TeleportVote", "1.0.1")] public class Ash_TeleportVote : BaseUnityPlugin { private static readonly HashSet<NetworkUser> readyPlayers = new HashSet<NetworkUser>(); private static TeleporterInteraction currentTeleporter; public void Awake() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Expected O, but got Unknown TeleporterInteraction.OnInteractionBegin += new hook_OnInteractionBegin(TeleporterIntercept); Chat.CCSay += new hook_CCSay(ProcessMessage); } private static void ProcessMessage(orig_CCSay orig, ConCommandArgs args) { //IL_0001: 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_0155: Unknown result type (might be due to invalid IL or missing references) NetworkUser sender = args.sender; string text = ((ConCommandArgs)(ref args))[0].Trim().ToLowerInvariant(); if ((Object)(object)sender == (Object)null) { Debug.Log((object)"[Ash][TeleportVote][Message] Server message received"); orig.Invoke(args); } else if (text == "r") { Debug.Log((object)"[Ash][TeleportVote][Message] User message received"); UserReady(sender); } else if (text == "start") { Debug.Log((object)"[Ash][TeleportVote][Message] User message received"); if (!AllReady()) { return; } if ((Object)(object)currentTeleporter == (Object)null) { currentTeleporter = Object.FindObjectOfType<TeleporterInteraction>(); if ((Object)(object)currentTeleporter == (Object)null) { return; } } NetworkUser val = GetAliveUsers().FirstOrDefault(); object obj; if (val == null) { obj = null; } else { CharacterMaster master = val.master; obj = ((master != null) ? master.GetBody() : null); } CharacterBody val2 = (CharacterBody)obj; if (!((Object)(object)val2 == (Object)null)) { Interactor component = ((Component)val2).GetComponent<Interactor>(); if ((Object)(object)component == (Object)null) { Debug.Log((object)("[Ash][TeleportVote][Interaction] No Interactor found on " + ((Object)val2).name + ", cannot simulate teleporter interaction")); return; } currentTeleporter.OnInteractionBegin(component); readyPlayers.Clear(); } } else { orig.Invoke(args); } } private void TeleporterIntercept(orig_OnInteractionBegin orig, TeleporterInteraction self, Interactor activator) { Debug.Log((object)"[Ash][TeleportVote][Interaction] Starting teleporter interaction"); CharacterBody val = ((activator != null) ? ((Component)activator).GetComponent<CharacterBody>() : null); object obj; if (val == null) { obj = null; } else { CharacterMaster master = val.master; if (master == null) { obj = null; } else { PlayerCharacterMasterController playerCharacterMasterController = master.playerCharacterMasterController; obj = ((playerCharacterMasterController != null) ? playerCharacterMasterController.networkUser : null); } } NetworkUser val2 = (NetworkUser)obj; if (!((Object)(object)val2 == (Object)null)) { UserReady(val2); if (AllReady()) { readyPlayers.Clear(); orig.Invoke(self, activator); } } } private static void UserReady(NetworkUser user) { //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_0080: Expected O, but got Unknown //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Expected O, but got Unknown List<NetworkUser> aliveUsers = GetAliveUsers(); if (readyPlayers.Add(user)) { Debug.Log((object)("[Ash][TeleportVote][Interaction] " + user.userName + " is ready")); Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = "<color=orange>" + user.userName + "</color> is ready! " + $"(<color=yellow>{readyPlayers.Count}</color>/<color=yellow>{aliveUsers.Count}</color>)" }); if (AllReady()) { Chat.SendBroadcastChat((ChatMessageBase)new SimpleChatMessage { baseToken = "<color=red>[Ash]</color> All players are ready!" }); } } } private static List<NetworkUser> GetAliveUsers() { return NetworkUser.readOnlyInstancesList.Where(delegate(NetworkUser u) { int result; if (u == null) { result = 0; } else { CharacterMaster master = u.master; bool? obj; if (master == null) { obj = null; } else { CharacterBody body = master.GetBody(); if (body == null) { obj = null; } else { HealthComponent healthComponent = body.healthComponent; obj = ((healthComponent != null) ? new bool?(healthComponent.alive) : null); } } bool? flag = obj; result = (flag.GetValueOrDefault() ? 1 : 0); } return (byte)result != 0; }).ToList(); } private static bool AllReady() { List<NetworkUser> aliveUsers = GetAliveUsers(); bool flag = aliveUsers.All((NetworkUser u) => readyPlayers.Contains(u)); if (flag) { Debug.Log((object)"[Ash][TeleportVote][Interaction] All players are ready"); } return flag; } }