Please disclose if any significant portion of your mod was created using AI tools by adding the 'AI Generated' category. Failing to do so may result in the mod being removed from Thunderstore.
Decompiled source of Ash TeleportVote v1.0.1
plugin/Ash_TeleportVote.dll
Decompiled 7 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; } }