using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using BepInEx;
using BepInEx.Logging;
using GameNetcodeStuff;
using HarmonyLib;
using LC_API.GameInterfaceAPI.Features;
using LC_API.Networking;
using ToxicOmega_Tools.Patches;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.EventSystems;
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: AssemblyTitle("ToxicOmega_Tools")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ToxicOmega_Tools")]
[assembly: AssemblyCopyright("Copyright © 2023")]
[assembly: AssemblyTrademark("")]
[assembly: ComVisible(false)]
[assembly: Guid("f25f0ba7-4a38-4ce6-8d98-4ee185b333d6")]
[assembly: TargetFramework(".NETFramework,Version=v4.7.2", FrameworkDisplayName = ".NET Framework 4.7.2")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.0.0.0")]
[module: UnverifiableCode]
namespace System.Runtime.CompilerServices
{
[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
internal sealed class IgnoresAccessChecksToAttribute : Attribute
{
public IgnoresAccessChecksToAttribute(string assemblyName)
{
}
}
}
namespace ToxicOmega_Tools
{
[BepInPlugin("com.toxicomega.toxicomega_tools", "ToxicOmega Tools", "2.0.0")]
public class Plugin : BaseUnityPlugin
{
private const string modGUID = "com.toxicomega.toxicomega_tools";
private const string modName = "ToxicOmega Tools";
private const string modVersion = "2.0.0";
private readonly Harmony harmony = new Harmony("com.toxicomega.toxicomega_tools");
internal static Plugin Instance;
internal static ManualLogSource mls;
internal List<Waypoint> waypoints = new List<Waypoint>();
internal Random shipTeleporterSeed;
internal bool enableGod = false;
private void Awake()
{
if ((Object)(object)Instance == (Object)null)
{
Instance = this;
}
mls = Logger.CreateLogSource("com.toxicomega.toxicomega_tools");
mls.LogInfo((object)"ToxicOmega Tools mod has awoken.");
mls.LogMessage((object)" _______ __ __ ___ ___ __ ");
mls.LogMessage((object)"| ___|__.--.--.-----.--| | | | .-----.----.-----|__.-----.-----.");
mls.LogMessage((object)"| ___| |_ _| -__| _ | | | | -__| _|__ --| | _ | |");
mls.LogMessage((object)"|___| |__|__.__|_____|_____| \\_____/|_____|__| |_____|__|_____|__|__|");
harmony.PatchAll();
Network.RegisterAll();
}
public static bool CheckPlayerIsHost(PlayerControllerB player)
{
return Player.HostPlayer.ClientId == player.playerClientId;
}
public static PlayerControllerB GetPlayerFromString(string searchString)
{
PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts;
if (searchString.StartsWith("#") && searchString.Length > 1)
{
string text = searchString.Substring(1);
if (ulong.TryParse(text, out var clientId))
{
PlayerControllerB val = ((IEnumerable<PlayerControllerB>)allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(clientId)));
if ((Object)(object)val != (Object)null)
{
return val;
}
LogMessage($"No Player with ID {clientId}!", isError: true);
return null;
}
LogMessage("Player ID # " + text + " is invalid!", isError: true);
return null;
}
PlayerControllerB val2 = ((IEnumerable<PlayerControllerB>)allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerUsername.ToLower().StartsWith(searchString.ToLower())));
if ((Object)(object)val2 != (Object)null)
{
return val2;
}
LogMessage("Player " + searchString + " not found!", isError: true);
return null;
}
public static Vector3 GetPositionFromCommand(string input, int positionType, PlayerControllerB playerToTP = null)
{
//IL_0005: 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_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_009c: Unknown result type (might be due to invalid IL or missing references)
//IL_0082: Unknown result type (might be due to invalid IL or missing references)
//IL_0087: Unknown result type (might be due to invalid IL or missing references)
//IL_095a: Unknown result type (might be due to invalid IL or missing references)
//IL_095b: Unknown result type (might be due to invalid IL or missing references)
//IL_095f: Unknown result type (might be due to invalid IL or missing references)
//IL_05fd: Unknown result type (might be due to invalid IL or missing references)
//IL_0602: Unknown result type (might be due to invalid IL or missing references)
//IL_05cb: Unknown result type (might be due to invalid IL or missing references)
//IL_05d0: Unknown result type (might be due to invalid IL or missing references)
//IL_058d: Unknown result type (might be due to invalid IL or missing references)
//IL_0592: Unknown result type (might be due to invalid IL or missing references)
//IL_0197: Unknown result type (might be due to invalid IL or missing references)
//IL_019c: Unknown result type (might be due to invalid IL or missing references)
//IL_0170: 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_0531: Unknown result type (might be due to invalid IL or missing references)
//IL_0536: Unknown result type (might be due to invalid IL or missing references)
//IL_053a: Unknown result type (might be due to invalid IL or missing references)
//IL_054f: Unknown result type (might be due to invalid IL or missing references)
//IL_0555: Unknown result type (might be due to invalid IL or missing references)
//IL_055a: Unknown result type (might be due to invalid IL or missing references)
//IL_055f: Unknown result type (might be due to invalid IL or missing references)
//IL_04d7: Unknown result type (might be due to invalid IL or missing references)
//IL_04dc: Unknown result type (might be due to invalid IL or missing references)
//IL_04e0: 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_04ef: Unknown result type (might be due to invalid IL or missing references)
//IL_04f1: Unknown result type (might be due to invalid IL or missing references)
//IL_04f6: Unknown result type (might be due to invalid IL or missing references)
//IL_08b5: Unknown result type (might be due to invalid IL or missing references)
//IL_08ba: Unknown result type (might be due to invalid IL or missing references)
//IL_0143: Unknown result type (might be due to invalid IL or missing references)
//IL_0148: Unknown result type (might be due to invalid IL or missing references)
//IL_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: 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)
//IL_0206: 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_0373: Unknown result type (might be due to invalid IL or missing references)
//IL_0378: Unknown result type (might be due to invalid IL or missing references)
//IL_035e: Unknown result type (might be due to invalid IL or missing references)
//IL_0363: Unknown result type (might be due to invalid IL or missing references)
//IL_06f7: Unknown result type (might be due to invalid IL or missing references)
//IL_06fc: Unknown result type (might be due to invalid IL or missing references)
//IL_07a5: Unknown result type (might be due to invalid IL or missing references)
//IL_07aa: Unknown result type (might be due to invalid IL or missing references)
//IL_0775: Unknown result type (might be due to invalid IL or missing references)
//IL_077a: 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_0787: Unknown result type (might be due to invalid IL or missing references)
//IL_078d: Unknown result type (might be due to invalid IL or missing references)
//IL_078f: Unknown result type (might be due to invalid IL or missing references)
//IL_0794: Unknown result type (might be due to invalid IL or missing references)
//IL_08fc: Unknown result type (might be due to invalid IL or missing references)
//IL_0901: Unknown result type (might be due to invalid IL or missing references)
//IL_08ec: Unknown result type (might be due to invalid IL or missing references)
//IL_08f1: Unknown result type (might be due to invalid IL or missing references)
//IL_02e8: Unknown result type (might be due to invalid IL or missing references)
//IL_02ed: Unknown result type (might be due to invalid IL or missing references)
//IL_0440: Unknown result type (might be due to invalid IL or missing references)
//IL_0445: Unknown result type (might be due to invalid IL or missing references)
//IL_06ca: Unknown result type (might be due to invalid IL or missing references)
//IL_06cf: Unknown result type (might be due to invalid IL or missing references)
//IL_0685: Unknown result type (might be due to invalid IL or missing references)
//IL_068a: Unknown result type (might be due to invalid IL or missing references)
//IL_0872: Unknown result type (might be due to invalid IL or missing references)
//IL_0877: Unknown result type (might be due to invalid IL or missing references)
//IL_02bb: Unknown result type (might be due to invalid IL or missing references)
//IL_02c0: Unknown result type (might be due to invalid IL or missing references)
//IL_0294: Unknown result type (might be due to invalid IL or missing references)
//IL_0299: Unknown result type (might be due to invalid IL or missing references)
//IL_0413: Unknown result type (might be due to invalid IL or missing references)
//IL_0418: Unknown result type (might be due to invalid IL or missing references)
//IL_03ec: Unknown result type (might be due to invalid IL or missing references)
//IL_03f1: Unknown result type (might be due to invalid IL or missing references)
//IL_0845: Unknown result type (might be due to invalid IL or missing references)
//IL_084a: Unknown result type (might be due to invalid IL or missing references)
//IL_081e: Unknown result type (might be due to invalid IL or missing references)
//IL_0823: Unknown result type (might be due to invalid IL or missing references)
bool flag = false;
bool flag2 = false;
Vector3 result = Vector3.zero;
Terminal val = Object.FindObjectOfType<Terminal>();
RoundManager instance = RoundManager.Instance;
RandomScrapSpawn[] array = Object.FindObjectsOfType<RandomScrapSpawn>();
PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController;
switch (positionType)
{
case 0:
if (input == "$")
{
if (array.Length == 0)
{
LogMessage("No RandomScrapSpawn in this area!", isError: true);
return Vector3.zero;
}
result = ((Component)array[Random.Range(0, array.Length)]).transform.position;
}
else if (input.StartsWith("@") && input.Length > 1)
{
if (!int.TryParse(input.Substring(1), out var result5))
{
LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true);
return Vector3.zero;
}
if (result5 >= Instance.waypoints.Count)
{
LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true);
return Vector3.zero;
}
Waypoint waypoint4 = Instance.waypoints[result5];
HUDManager_Patch.sendPlayerInside = waypoint4.isInside;
result = waypoint4.position;
}
else if (input == "")
{
result = ((Component)localPlayerController).transform.position;
}
else
{
flag = true;
}
break;
case 1:
if (input == "" || input == "$")
{
if (instance.outsideAINodes.Length == 0 || !((Object)(object)instance.outsideAINodes[0] != (Object)null))
{
LogMessage("No outsideAINodes in this area!", isError: true);
return Vector3.zero;
}
result = instance.outsideAINodes[Random.Range(0, instance.outsideAINodes.Length)].transform.position;
}
else if (input.StartsWith("@") && input.Length > 1)
{
if (!int.TryParse(input.Substring(1), out var result6))
{
LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true);
return Vector3.zero;
}
if (result6 >= Instance.waypoints.Count)
{
LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true);
return Vector3.zero;
}
Waypoint waypoint5 = Instance.waypoints[result6];
result = waypoint5.position;
}
else
{
flag = true;
}
break;
case 2:
if (input == "" || input == "$")
{
if (instance.allEnemyVents.Length == 0 || !((Object)(object)instance.allEnemyVents[0] != (Object)null))
{
LogMessage("No allEnemyVents in this area!", isError: true);
return Vector3.zero;
}
result = instance.allEnemyVents[Random.Range(0, instance.allEnemyVents.Length)].floorNode.position;
}
else if (input.StartsWith("@") && input.Length > 1)
{
if (!int.TryParse(input.Substring(1), out var result3))
{
LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true);
return Vector3.zero;
}
if (result3 >= Instance.waypoints.Count)
{
LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true);
return Vector3.zero;
}
Waypoint waypoint2 = Instance.waypoints[result3];
result = waypoint2.position;
}
else
{
flag = true;
}
break;
case 3:
if (input == "$")
{
if (instance.insideAINodes.Length == 0 || !((Object)(object)instance.insideAINodes[0] != (Object)null))
{
LogMessage("No insideAINodes in this area!", isError: true);
return Vector3.zero;
}
HUDManager_Patch.sendPlayerInside = true;
if (Instance.shipTeleporterSeed == null)
{
mls.LogInfo((object)"Teleport Seed: Random");
Vector3 position2 = instance.insideAINodes[Random.Range(0, instance.insideAINodes.Length)].transform.position;
result = instance.GetRandomNavMeshPositionInRadius(position2, 10f, default(NavMeshHit));
}
else
{
mls.LogInfo((object)"Teleport Seed: Inverse-Teleporter");
Vector3 position3 = instance.insideAINodes[Instance.shipTeleporterSeed.Next(0, instance.insideAINodes.Length)].transform.position;
Random random = Instance.shipTeleporterSeed;
result = instance.GetRandomNavMeshPositionInBoxPredictable(position3, 10f, default(NavMeshHit), random, -1);
}
LogMessage("Teleported " + playerToTP.playerUsername + " to random location within factory.");
}
else if (input == "!")
{
if (!((Object)(object)val != (Object)null))
{
LogMessage("Terminal not found!", isError: true);
return Vector3.zero;
}
HUDManager_Patch.sendPlayerInside = false;
result = ((Component)val).transform.position;
LogMessage("Teleported " + playerToTP.playerUsername + " to terminal.");
}
else if (input.StartsWith("@") && input.Length > 1)
{
if (!int.TryParse(input.Substring(1), out var result4))
{
LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true);
return Vector3.zero;
}
if (result4 >= Instance.waypoints.Count)
{
LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true);
return Vector3.zero;
}
Waypoint waypoint3 = Instance.waypoints[result4];
HUDManager_Patch.sendPlayerInside = waypoint3.isInside;
result = waypoint3.position;
LogMessage($"Teleported {playerToTP.playerUsername} to Waypoint @{result4}.");
}
else
{
flag2 = true;
flag = true;
}
break;
case 4:
if (input == "" || input == "$")
{
if (instance.insideAINodes.Length == 0 || !((Object)(object)instance.insideAINodes[0] != (Object)null))
{
LogMessage("No insideAINodes in this area!", isError: true);
return Vector3.zero;
}
Vector3 position = instance.insideAINodes[Random.Range(0, instance.insideAINodes.Length)].transform.position;
result = instance.GetRandomNavMeshPositionInRadius(position, 10f, default(NavMeshHit));
}
else if (input.StartsWith("@") && input.Length > 1)
{
if (!int.TryParse(input.Substring(1), out var result2))
{
LogMessage("Waypoint @" + input.Substring(1) + " is invalid!", isError: true);
return Vector3.zero;
}
if (result2 >= Instance.waypoints.Count)
{
LogMessage("Waypoint @" + input.Substring(1) + " does not exist!", isError: true);
return Vector3.zero;
}
Waypoint waypoint = Instance.waypoints[result2];
result = waypoint.position;
}
else
{
flag = true;
}
break;
}
if (flag)
{
PlayerControllerB playerFromString = GetPlayerFromString(input);
if ((Object)(object)playerFromString == (Object)null || !playerFromString.isPlayerControlled)
{
return Vector3.zero;
}
if (playerFromString.isPlayerDead)
{
LogMessage("Could not target " + playerFromString.playerUsername + "!\nPlayer is dead!", isError: true);
return Vector3.zero;
}
result = ((Component)playerFromString).transform.position;
if (flag2)
{
HUDManager_Patch.sendPlayerInside = Player.Get(playerFromString).IsInFactory;
LogMessage("Teleported " + playerToTP.playerUsername + " to " + playerFromString.playerUsername + ".");
}
}
return result;
}
public static void LogMessage(string message, bool isError = false)
{
string empty = string.Empty;
if (isError)
{
empty = "Error!";
mls.LogError((object)message);
}
else
{
empty = "Success!";
mls.LogInfo((object)message);
}
HUDManager.Instance.DisplayTip(empty, message, isError, false, "LC_Tip1");
}
public static void PlayerTeleportEffects(ulong playerClientID, bool isInside)
{
//IL_009b: Unknown result type (might be due to invalid IL or missing references)
//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(playerClientID)));
if ((Object)(object)val.redirectToEnemy != (Object)null)
{
val.redirectToEnemy.ShipTeleportEnemy();
}
SavePlayer(val);
if (Object.op_Implicit((Object)(object)Object.FindObjectOfType<AudioReverbPresets>()))
{
Object.FindObjectOfType<AudioReverbPresets>().audioPresets[isInside ? 2 : 3].ChangeAudioReverbForPlayer(val);
}
val.isInElevator = !isInside;
val.isInHangarShipRoom = !isInside;
val.isInsideFactory = isInside;
val.averageVelocity = 0f;
val.velocityLastFrame = Vector3.zero;
val.beamUpParticle.Play();
val.beamOutBuildupParticle.Play();
}
public static void RevivePlayer(ulong playerClientID)
{
//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
PlayerControllerB localPlayerController = StartOfRound.Instance.localPlayerController;
PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(playerClientID)));
StartOfRound instance = StartOfRound.Instance;
Terminal val2 = Object.FindObjectOfType<Terminal>();
Debug.Log((object)"Reviving players A");
val.ResetPlayerBloodObjects(val.isPlayerDead);
if (val.isPlayerDead || val.isPlayerControlled)
{
val.isClimbingLadder = false;
val.ResetZAndXRotation();
val.health = 100;
val.disableLookInput = false;
Debug.Log((object)"Reviving players B");
if (val.isPlayerDead)
{
val.isPlayerDead = false;
val.isPlayerControlled = true;
val.isInElevator = true;
val.isInHangarShipRoom = true;
val.isInsideFactory = false;
val.wasInElevatorLastFrame = false;
instance.SetPlayerObjectExtrapolate(false);
val.TeleportPlayer(((Component)val2).transform.position, false, 0f, false, true);
val.setPositionOfDeadPlayer = false;
val.DisablePlayerModel(instance.allPlayerObjects[playerClientID], true, true);
((Behaviour)val.helmetLight).enabled = false;
Debug.Log((object)"Reviving players C");
val.Crouch(false);
val.criticallyInjured = false;
if ((Object)(object)val.playerBodyAnimator != (Object)null)
{
val.playerBodyAnimator.SetBool("Limp", false);
}
val.bleedingHeavily = false;
val.activatingItem = false;
val.twoHanded = false;
val.inSpecialInteractAnimation = false;
val.disableSyncInAnimation = false;
val.inAnimationWithEnemy = null;
val.holdingWalkieTalkie = false;
val.speakingToWalkieTalkie = false;
Debug.Log((object)"Reviving players D");
val.isSinking = false;
val.isUnderwater = false;
val.sinkingValue = 0f;
val.statusEffectAudio.Stop();
val.DisableJetpackControlsLocally();
val.health = 100;
Debug.Log((object)"Reviving players E");
val.mapRadarDotAnimator.SetBool("dead", false);
if (((NetworkBehaviour)val).IsOwner)
{
HUDManager.Instance.gasHelmetAnimator.SetBool("gasEmitting", false);
val.hasBegunSpectating = false;
HUDManager.Instance.RemoveSpectateUI();
HUDManager.Instance.gameOverAnimator.SetTrigger("revive");
val.hinderedMultiplier = 1f;
val.isMovementHindered = 0;
val.sourcesCausingSinking = 0;
Debug.Log((object)"Reviving players E2");
val.reverbPreset = instance.shipReverb;
}
}
Debug.Log((object)"Reviving players F");
SoundManager.Instance.earsRingingTimer = 0f;
val.voiceMuffledByEnemy = false;
SoundManager.Instance.playerVoicePitchTargets[playerClientID] = 1f;
SoundManager.Instance.SetPlayerPitch(1f, (int)playerClientID);
if ((Object)(object)val.currentVoiceChatIngameSettings == (Object)null)
{
instance.RefreshPlayerVoicePlaybackObjects();
}
if ((Object)(object)val.currentVoiceChatIngameSettings != (Object)null)
{
if ((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null)
{
val.currentVoiceChatIngameSettings.InitializeComponents();
}
if ((Object)(object)val.currentVoiceChatIngameSettings.voiceAudio == (Object)null)
{
return;
}
((Component)val.currentVoiceChatIngameSettings.voiceAudio).GetComponent<OccludeAudio>().overridingLowPass = false;
}
Debug.Log((object)"Reviving players G");
}
val.bleedingHeavily = false;
val.criticallyInjured = false;
val.playerBodyAnimator.SetBool("Limp", false);
val.health = 100;
HUDManager.Instance.UpdateHealthUI(100, false);
val.spectatedPlayerScript = null;
((Behaviour)HUDManager.Instance.audioListenerLowPass).enabled = false;
Debug.Log((object)"Reviving players H");
instance.SetSpectateCameraToGameOverMode(false, val);
instance.livingPlayers++;
instance.allPlayersDead = false;
instance.UpdatePlayerVoiceEffects();
if (localPlayerController.playerClientId == val.playerClientId)
{
HUDManager.Instance.HideHUD(false);
}
}
public static void SavePlayer(PlayerControllerB player)
{
CentipedeAI[] array = Object.FindObjectsByType<CentipedeAI>((FindObjectsSortMode)0);
for (int i = 0; i < array.Length; i++)
{
if ((Object)(object)array[i].clingingToPlayer == (Object)(object)player)
{
((EnemyAI)array[i]).HitEnemy(0, player, true);
}
}
ForestGiantAI[] array2 = Object.FindObjectsByType<ForestGiantAI>((FindObjectsSortMode)0);
for (int j = 0; j < array2.Length; j++)
{
if ((Object)(object)((EnemyAI)array2[j]).inSpecialAnimationWithPlayer == (Object)(object)player)
{
((Component)array2[j]).GetComponentInChildren<EnemyAI>().SetEnemyStunned(true, 7.5f, player);
}
}
MaskedPlayerEnemy[] array3 = Object.FindObjectsByType<MaskedPlayerEnemy>((FindObjectsSortMode)0);
for (int k = 0; k < array3.Length; k++)
{
if ((Object)(object)((EnemyAI)array3[k]).inSpecialAnimationWithPlayer == (Object)(object)player)
{
((EnemyAI)array3[k]).CancelSpecialAnimationWithPlayer();
((EnemyAI)array3[k]).HitEnemy(0, player, true);
((Component)array3[k]).GetComponentInChildren<EnemyAI>().SetEnemyStunned(true, 7.5f, player);
}
}
if (StartOfRound.Instance.localPlayerController.playerClientId == player.playerClientId)
{
HUDManager.Instance.HUDAnimator.SetBool("biohazardDamage", false);
}
}
public static void SpawnEnemy(int enemyID, int amount, string targetString)
{
}
public static void SpawnItem(int itemID, int amount, int value, string targetString)
{
//IL_0014: Unknown result type (might be due to invalid IL or missing references)
//IL_0019: Unknown result type (might be due to invalid IL or missing references)
//IL_0142: Unknown result type (might be due to invalid IL or missing references)
//IL_0149: Unknown result type (might be due to invalid IL or missing references)
//IL_014f: Unknown result type (might be due to invalid IL or missing references)
List<Item> itemsList = StartOfRound.Instance.allItemsList.itemsList;
if (GetPositionFromCommand(targetString, 0) == Vector3.zero)
{
return;
}
string text = ((value >= 0) ? $"{value}" : "Random");
string text2 = ((targetString == "$") ? "Random" : ((!targetString.StartsWith("@")) ? GetPlayerFromString(targetString).playerUsername : ("WP @" + targetString.Substring(1))));
LogMessage($"Spawned Item\nName: {((Object)itemsList[itemID]).name}, ID: {itemID}, Amount: {amount}, Value: {text}, Location: {text2}.");
for (int i = 0; i < amount; i++)
{
try
{
if (itemsList[itemID].minValue > itemsList[itemID].maxValue)
{
int minValue = itemsList[itemID].minValue;
itemsList[itemID].minValue = itemsList[itemID].maxValue;
itemsList[itemID].maxValue = minValue;
}
Item val = Item.CreateAndSpawnItem(itemsList[itemID].itemName, true, GetPositionFromCommand(targetString, 0), default(Quaternion));
if (itemID == 59)
{
mls.LogInfo((object)"RPC SENDING: \"TOT_SYNC_AMMO\".");
Network.Broadcast<TOT_ITEM_Broadcast>("TOT_SYNC_AMMO", new TOT_ITEM_Broadcast
{
networkObjectID = ((NetworkBehaviour)val).NetworkObjectId
});
mls.LogInfo((object)"RPC END: \"TOT_SYNC_AMMO\".");
}
if ((Object)(object)val != (Object)null && value != -1)
{
val.ScrapValue = value;
}
}
catch (Exception ex)
{
LogMessage($"Unable to Spawn Item ID: {itemID}", isError: true);
mls.LogError((object)ex);
}
}
}
public static void SpawnTrap(int trapID, int amount, string targetString)
{
//IL_000a: Unknown result type (might be due to invalid IL or missing references)
//IL_000f: Unknown result type (might be due to invalid IL or missing references)
//IL_00f7: Unknown result type (might be due to invalid IL or missing references)
//IL_0103: Unknown result type (might be due to invalid IL or missing references)
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_010b: 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_011c: Unknown result type (might be due to invalid IL or missing references)
//IL_0121: Unknown result type (might be due to invalid IL or missing references)
//IL_01e6: Unknown result type (might be due to invalid IL or missing references)
//IL_01eb: 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_01f6: Unknown result type (might be due to invalid IL or missing references)
//IL_020f: 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_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)
//IL_0235: Unknown result type (might be due to invalid IL or missing references)
RoundManager instance = RoundManager.Instance;
if (GetPositionFromCommand(targetString, 4) == Vector3.zero)
{
return;
}
LogMessage(string.Format(arg2: (targetString == "$") ? "Random" : ((!targetString.StartsWith("@")) ? GetPlayerFromString(targetString).playerUsername : ("WP @" + targetString.Substring(1))), format: "Spawned Trap\nName: {0}, Amount: {1}, Location: {2}.", arg0: (trapID == 1) ? "Turret" : "Mine", arg1: amount));
switch (trapID)
{
case 0:
{
SpawnableMapObject[] spawnableMapObjects2 = instance.currentLevel.spawnableMapObjects;
foreach (SpawnableMapObject val3 in spawnableMapObjects2)
{
try
{
if ((Object)(object)val3.prefabToSpawn.GetComponentInChildren<Landmine>() != (Object)null)
{
for (int l = 0; l < amount; l++)
{
Vector3 randomNavMeshPositionInRadius = instance.GetRandomNavMeshPositionInRadius(val3.prefabToSpawn.transform.position, 10f, default(NavMeshHit));
GameObject val4 = Object.Instantiate<GameObject>(val3.prefabToSpawn, GetPositionFromCommand(targetString, 4), Quaternion.identity);
val4.GetComponent<NetworkObject>().Spawn(true);
}
break;
}
}
catch (Exception ex2)
{
LogMessage("Unable to Spawn Trap: " + ((trapID == 1) ? "Turret" : "Mine") + "!", isError: true);
mls.LogError((object)ex2);
}
}
break;
}
case 1:
{
SpawnableMapObject[] spawnableMapObjects = instance.currentLevel.spawnableMapObjects;
foreach (SpawnableMapObject val in spawnableMapObjects)
{
try
{
if ((Object)(object)val.prefabToSpawn.GetComponentInChildren<Turret>() != (Object)null)
{
for (int j = 0; j < amount; j++)
{
Vector3 positionFromCommand = GetPositionFromCommand(targetString, 4);
GameObject val2 = Object.Instantiate<GameObject>(val.prefabToSpawn, positionFromCommand, Quaternion.identity);
val2.transform.eulerAngles = new Vector3(0f, instance.YRotationThatFacesTheFarthestFromPosition(positionFromCommand + Vector3.up * 0.2f, 25f, 6), 0f);
val2.GetComponent<NetworkObject>().Spawn(true);
}
break;
}
}
catch (Exception ex)
{
LogMessage("Unable to Spawn Trap: " + ((trapID == 1) ? "Turret" : "Mine") + "!", isError: true);
mls.LogError((object)ex);
}
}
break;
}
}
}
}
public class Waypoint
{
public bool isInside { get; set; }
public Vector3 position { get; set; }
}
}
namespace ToxicOmega_Tools.Patches
{
[HarmonyPatch(typeof(HUDManager))]
internal class HUDManager_Patch
{
public static bool sendPlayerInside = true;
private static int itemListPage;
private static int enemyListPage;
private static int itemID;
private static int itemCount;
private static int itemValue;
private static int enemyID;
private static int spawnCount;
private static int trapID;
private static string playerString = "";
private static PlayerControllerB playerTarget = null;
public static List<SpawnableEnemyWithRarity> allEnemiesList;
[HarmonyPatch("EnableChat_performed")]
[HarmonyPrefix]
private static bool EnableChatAction(HUDManager __instance)
{
PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
if (localPlayerController.isPlayerDead && Plugin.CheckPlayerIsHost(localPlayerController))
{
ShipBuildModeManager.Instance.CancelBuildMode(true);
__instance.localPlayer.isTypingChat = true;
((Selectable)__instance.chatTextField).Select();
__instance.PingHUDElement(__instance.Chat, 0.1f, 1f, 1f);
((Behaviour)__instance.typingIndicator).enabled = true;
return false;
}
return true;
}
[HarmonyPatch("SubmitChat_performed")]
[HarmonyPrefix]
private static bool RegisterChatCommand(HUDManager __instance)
{
//IL_0ac9: Unknown result type (might be due to invalid IL or missing references)
//IL_0ace: Unknown result type (might be due to invalid IL or missing references)
//IL_0b44: Unknown result type (might be due to invalid IL or missing references)
//IL_0cde: Unknown result type (might be due to invalid IL or missing references)
//IL_0dab: Unknown result type (might be due to invalid IL or missing references)
//IL_0db0: Unknown result type (might be due to invalid IL or missing references)
//IL_0dcb: Unknown result type (might be due to invalid IL or missing references)
//IL_0df4: Unknown result type (might be due to invalid IL or missing references)
//IL_0fdb: Unknown result type (might be due to invalid IL or missing references)
//IL_0fe1: Unknown result type (might be due to invalid IL or missing references)
//IL_0e84: Unknown result type (might be due to invalid IL or missing references)
//IL_1592: Unknown result type (might be due to invalid IL or missing references)
//IL_15a9: Unknown result type (might be due to invalid IL or missing references)
//IL_0bbe: Unknown result type (might be due to invalid IL or missing references)
//IL_0bc3: Unknown result type (might be due to invalid IL or missing references)
//IL_0c39: Unknown result type (might be due to invalid IL or missing references)
RoundManager instance = RoundManager.Instance;
Terminal val = Object.FindObjectOfType<Terminal>();
List<Item> itemsList = StartOfRound.Instance.allItemsList.itemsList;
PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
__instance.tipsPanelCoroutine = null;
bool flag = true;
string text = __instance.chatTextField.text;
if (text == null || text == "")
{
return true;
}
string[] array = (from s in text.Split(new char[1] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
select s.TrimEnd(Array.Empty<char>()).ToLowerInvariant()).ToArray();
if (!Plugin.CheckPlayerIsHost(localPlayerController))
{
return true;
}
switch (array[0].Replace("/", "").ToLower())
{
case "help":
{
List<string> list4 = new List<string>
{
"Item: Lists spawnable items", "Give: Spawns items", "Trap: Spawns traps", "List: Lists current Players/Items/Enemies", "TP: Teleport players", "WP: Creates/lists waypoints", "Heal: Heals/revives a player", "GodMode: Disables death", "Code: Lists/toggles blast doors and traps", "Breaker: Toggles breaker box",
"Credit: Lists/adjusts spendable credits", "Charge: Charges a player's held item"
};
int result3 = 1;
if (array.Length > 1)
{
int.TryParse(array[1], out result3);
}
result3 = Math.Max(result3, 1);
FindPage(list4, result3, 4, "Command");
break;
}
case "item":
case "it":
case "items":
if (array.Length > 1)
{
int.TryParse(array[1], out itemListPage);
}
itemListPage = Math.Max(itemListPage, 1);
FindPage(itemsList, itemListPage, 10, "Item");
break;
case "give":
case "gi":
playerString = "";
itemID = 0;
itemCount = 1;
itemValue = -1;
if (array.Length < 2)
{
FindPage(itemsList, 1, 10, "Item");
break;
}
if (!int.TryParse(array[1], out itemID) || itemID >= itemsList.Count)
{
Plugin.LogMessage("Item ID \"" + array[1] + "\" not found!", isError: true);
break;
}
if (array.Length > 2)
{
int.TryParse(array[2], out itemCount);
}
itemCount = Math.Max(itemCount, 1);
if (array.Length > 3)
{
if (array[3] == "$")
{
itemValue = -1;
}
else
{
int.TryParse(array[3], out itemValue);
if (itemValue < 0)
{
itemValue = 0;
}
}
}
if (array.Length > 4)
{
playerString = string.Join(" ", array.Skip(4)).ToLower();
}
Plugin.SpawnItem(itemID, itemCount, itemValue, playerString);
break;
case "en":
case "enemy":
case "enemies":
Plugin.LogMessage("Removed!", isError: true);
break;
case "sp":
case "spawn":
Plugin.LogMessage("Removed!", isError: true);
break;
case "trap":
case "tr":
spawnCount = 1;
playerString = "";
if (array.Length < 2)
{
HUDManager.Instance.DisplayTip("Trap List", "ID #0: Mine\nID #1: Turret", false, false, "LC_Tip1");
break;
}
if ("landmine".StartsWith(array[1]) || "mine".StartsWith(array[1]) || array[1] == "0")
{
trapID = 0;
}
else
{
if (!"turret".StartsWith(array[1]) && !(array[1] == "1"))
{
Plugin.LogMessage("Unable to find a trap with name " + array[1] + "!", isError: true);
break;
}
trapID = 1;
}
if (array.Length > 2)
{
int.TryParse(array[2], out spawnCount);
spawnCount = Math.Max(spawnCount, 1);
}
if (array.Length > 3)
{
playerString = string.Join(" ", array.Skip(3)).ToLower();
}
Plugin.SpawnTrap(trapID, spawnCount, playerString);
break;
case "list":
case "li":
{
string text4 = "";
int result = 1;
if (array.Length > 2)
{
int.TryParse(array[2], out result);
}
result = Math.Max(result, 1);
if (array.Length < 2 || "players".StartsWith(array[1]))
{
List<PlayerControllerB> list = StartOfRound.Instance.allPlayerScripts.ToList();
text4 = "Player";
FindPage(list, result, 10, text4);
}
else if ("items".StartsWith(array[1]))
{
List<GrabbableObject> list2 = Object.FindObjectsOfType<GrabbableObject>().ToList();
text4 = "Active Item";
FindPage(list2, result, 10, text4);
}
else if ("enemy".StartsWith(array[1]) || "enemies".StartsWith(array[1]))
{
List<EnemyAI> list3 = Object.FindObjectsOfType<EnemyAI>().ToList();
text4 = "Active Enemy";
FindPage(list3, result, 10, text4);
}
else
{
Plugin.LogMessage("Unable to find list by name " + array[1] + "!", isError: true);
}
break;
}
case "tele":
case "tp":
case "teleport":
switch (array.Length)
{
case 1:
if (Plugin.GetPositionFromCommand("!", 3, localPlayerController) != Vector3.zero)
{
if (!localPlayerController.isPlayerDead)
{
Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_TP_PLAYER\".");
Network.Broadcast<TOT_TP_PLAYER_Broadcast>("TOT_TP_PLAYER", new TOT_TP_PLAYER_Broadcast
{
isInside = false,
playerClientId = localPlayerController.playerClientId
});
Plugin.mls.LogInfo((object)"RPC END: \"TOT_TP_PLAYER\".");
Player.Get(localPlayerController).Position = Plugin.GetPositionFromCommand("!", 3, localPlayerController);
}
else
{
Plugin.LogMessage("Could not teleport " + localPlayerController.playerUsername + "!\nPlayer is dead!", isError: true);
}
}
break;
case 2:
case 3:
{
PlayerControllerB val4 = ((array.Length > 2) ? Plugin.GetPlayerFromString(array[1]) : localPlayerController);
if ((Object)(object)val4 != (Object)null && !val4.isPlayerDead)
{
if (Plugin.GetPositionFromCommand((array.Length > 2) ? array[2] : array[1], 3, val4) != Vector3.zero)
{
Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_TP_PLAYER\".");
Network.Broadcast<TOT_TP_PLAYER_Broadcast>("TOT_TP_PLAYER", new TOT_TP_PLAYER_Broadcast
{
isInside = sendPlayerInside,
playerClientId = val4.playerClientId
});
Plugin.mls.LogInfo((object)"RPC END: \"TOT_TP_PLAYER\".");
Player.Get(val4).Position = Plugin.GetPositionFromCommand((array.Length > 2) ? array[2] : array[1], 3, val4);
}
}
else if ((Object)(object)val4 != (Object)null && val4.isPlayerDead)
{
Plugin.LogMessage("Could not teleport " + val4.playerUsername + "!\nPlayer is dead!", isError: true);
}
break;
}
}
break;
case "wp":
case "waypoint":
case "waypoints":
if (array.Length == 1)
{
if (Plugin.Instance.waypoints.Count > 0)
{
string text2 = "";
for (int i = 0; i < Plugin.Instance.waypoints.Count; i++)
{
text2 += $"@{i}{Plugin.Instance.waypoints[i].position}, ";
}
text2 = text2.TrimEnd(',', ' ') + ".";
HUDManager.Instance.DisplayTip("Waypoint List", text2, false, false, "LC_Tip1");
}
else
{
Plugin.LogMessage("Waypoint List is empty!", isError: true);
}
}
else if ("add".StartsWith(array[1]))
{
if ((Object)(object)localPlayerController != (Object)null && !localPlayerController.isPlayerDead)
{
bool isInFactory = Player.Get(localPlayerController).IsInFactory;
Vector3 position = ((Component)localPlayerController).transform.position;
Plugin.Instance.waypoints.Add(new Waypoint
{
isInside = isInFactory,
position = position
});
Plugin.LogMessage($"Waypoint @{Plugin.Instance.waypoints.Count - 1} created at {position}.");
}
}
else if ("clear".StartsWith(array[1]))
{
Plugin.Instance.waypoints.Clear();
Plugin.LogMessage("Waypoints cleared.");
}
else if ("door".StartsWith(array[1]) || "entrance".StartsWith(array[1]))
{
Plugin.Instance.waypoints.Add(new Waypoint
{
isInside = true,
position = RoundManager.FindMainEntrancePosition(true, false)
});
Plugin.LogMessage($"Waypoint @{Plugin.Instance.waypoints.Count - 1} created at Main Entrance.");
}
break;
case "heal":
case "save":
case "he":
if (array.Length < 2)
{
playerTarget = localPlayerController;
}
else
{
string searchString2 = string.Join(" ", array.Skip(1)).ToLower();
playerTarget = Plugin.GetPlayerFromString(searchString2);
}
if ((Object)(object)playerTarget != (Object)null)
{
if (playerTarget.isPlayerDead)
{
Plugin.LogMessage("Attempting to revive " + playerTarget.playerUsername + ".");
}
else
{
Plugin.LogMessage("Healing " + playerTarget.playerUsername + ".");
}
Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_HEAL_PLAYER\".");
Network.Broadcast<TOT_PLAYER_Broadcast>("TOT_HEAL_PLAYER", new TOT_PLAYER_Broadcast
{
playerClientId = playerTarget.playerClientId
});
Plugin.mls.LogInfo((object)"RPC END: \"TOT_HEAL_PLAYER\".");
Player.Get(playerTarget).SprintMeter = 100f;
Player.Get(playerTarget).Health = 100;
Player.Get(playerTarget).Hurt(-1, (CauseOfDeath)0, default(Vector3), false, 0, false, true);
}
break;
case "gm":
case "godmode":
case "god":
Plugin.Instance.enableGod = !Plugin.Instance.enableGod;
Plugin.LogMessage("GodMode toggled " + (Plugin.Instance.enableGod ? "on!" : "off."));
break;
case "code":
case "co":
case "codes":
{
TerminalAccessibleObject[] array2 = Object.FindObjectsOfType<TerminalAccessibleObject>();
if (array2.Length != 0)
{
if (array.Length < 2)
{
string text3 = "";
TerminalAccessibleObject[] array3 = array2;
foreach (TerminalAccessibleObject val5 in array3)
{
if (val5.objectCode != null)
{
text3 += val5.objectCode;
if (val5.isBigDoor)
{
text3 += "(Door), ";
}
else if (Object.op_Implicit((Object)(object)((Component)val5).GetComponentInChildren<Turret>()))
{
text3 += "(Turret), ";
}
else if (Object.op_Implicit((Object)(object)((Component)val5).GetComponentInChildren<Landmine>()))
{
text3 += "(Landmine), ";
}
}
}
text3 = text3.TrimEnd(',', ' ') + ".";
HUDManager.Instance.DisplayTip("Code List", text3, false, false, "LC_Tip1");
break;
}
TerminalAccessibleObject[] array4 = array2;
foreach (TerminalAccessibleObject val6 in array4)
{
if ((Object)(object)val6 != (Object)null && val6.objectCode == array[1])
{
val6.CallFunctionFromTerminal();
if (Object.op_Implicit((Object)(object)((Component)val6).GetComponentInChildren<Turret>()))
{
((Component)val6).GetComponentInChildren<Turret>().ToggleTurretEnabled(false);
}
else if (Object.op_Implicit((Object)(object)((Component)val6).GetComponentInChildren<Landmine>()))
{
((Component)val6).GetComponentInChildren<Landmine>().ToggleMine(false);
}
}
}
Plugin.LogMessage("Attempted to toggle all TerminalAccessibleObject of code " + array[1] + ".");
}
else
{
Plugin.LogMessage("No TerminalAccessibleObject in this area!", isError: true);
}
break;
}
case "br":
case "breaker":
{
BreakerBox val3 = Object.FindObjectOfType<BreakerBox>();
if ((Object)(object)val3 != (Object)null)
{
val3.SwitchBreaker(!val3.isPowerOn);
Plugin.LogMessage("Turned breaker " + (val3.isPowerOn ? "on" : "off") + ".");
}
else
{
Plugin.LogMessage("BreakerBox not found!", isError: true);
}
break;
}
case "cr":
case "money":
case "credits":
case "credit":
if ((Object)(object)val != (Object)null)
{
if (array.Length < 2)
{
Plugin.LogMessage($"Group Credits: {val.groupCredits}");
break;
}
int.TryParse(array[1], out var result2);
Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_TERMINAL_CREDITS\".");
Network.Broadcast<TOT_INT_Broadcast>("TOT_TERMINAL_CREDITS", new TOT_INT_Broadcast
{
dataInt = result2
});
Plugin.mls.LogInfo((object)"RPC END: \"TOT_TERMINAL_CREDITS\".");
Plugin.LogMessage($"Adjusted Credits by {result2}.\nNew Total: {val.groupCredits}.");
}
else
{
Plugin.LogMessage("Terminal not found!", isError: true);
}
break;
case "ch":
case "charge":
if (array.Length < 2)
{
playerTarget = localPlayerController;
}
else
{
string searchString = string.Join(" ", array.Skip(1)).ToLower();
playerTarget = Plugin.GetPlayerFromString(searchString);
}
if ((Object)(object)playerTarget != (Object)null && !playerTarget.isPlayerDead)
{
GrabbableObject val2 = playerTarget.ItemSlots[playerTarget.currentItemSlot];
if ((Object)(object)val2 != (Object)null)
{
if (val2.itemProperties.requiresBattery)
{
Plugin.mls.LogInfo((object)"RPC SENDING: \"TOT_CHARGE_PLAYER\".");
Network.Broadcast<TOT_PLAYER_Broadcast>("TOT_CHARGE_PLAYER", new TOT_PLAYER_Broadcast
{
playerClientId = playerTarget.playerClientId
});
Plugin.mls.LogInfo((object)"RPC END: \"TOT_CHARGE_PLAYER\".");
Plugin.LogMessage("Charging " + playerTarget.playerUsername + "'s item \"" + val2.itemProperties.itemName + "\".");
}
else
{
Plugin.LogMessage(playerTarget.playerUsername + "'s item \"" + val2.itemProperties.itemName + "\" does not use a battery!", isError: true);
}
}
else
{
Plugin.LogMessage(playerTarget.playerUsername + " is not holding an item!", isError: true);
}
}
else if (playerTarget.isPlayerDead)
{
Plugin.LogMessage("Could not charge " + playerTarget.playerUsername + "'s item!\nPlayer is dead!", isError: true);
}
break;
default:
flag = false;
break;
}
if (flag)
{
__instance.chatTextField.text = string.Empty;
}
if (localPlayerController.isPlayerDead && Plugin.CheckPlayerIsHost(localPlayerController))
{
if (!string.IsNullOrEmpty(__instance.chatTextField.text) && __instance.chatTextField.text.Length < 50)
{
__instance.AddTextToChatOnServer(__instance.chatTextField.text, (int)__instance.localPlayer.playerClientId);
}
for (int l = 0; l < StartOfRound.Instance.allPlayerScripts.Length; l++)
{
if (StartOfRound.Instance.allPlayerScripts[l].isPlayerControlled && (double)Vector3.Distance(((Component)GameNetworkManager.Instance.localPlayerController).transform.position, ((Component)StartOfRound.Instance.allPlayerScripts[l]).transform.position) > 24.399999618530273 && (!GameNetworkManager.Instance.localPlayerController.holdingWalkieTalkie || !StartOfRound.Instance.allPlayerScripts[l].holdingWalkieTalkie))
{
__instance.playerCouldRecieveTextChatAnimator.SetTrigger("ping");
break;
}
}
localPlayerController.isTypingChat = false;
__instance.chatTextField.text = "";
EventSystem.current.SetSelectedGameObject((GameObject)null);
__instance.PingHUDElement(__instance.Chat, 2f, 1f, 0.2f);
((Behaviour)__instance.typingIndicator).enabled = false;
return false;
}
return true;
}
private static void FindPage<T>(List<T> list, int page, int itemsPerPage, string listName)
{
List<Item> itemsList = StartOfRound.Instance.allItemsList.itemsList;
List<PlayerControllerB> list2 = StartOfRound.Instance.allPlayerScripts.ToList();
List<GrabbableObject> list3 = Object.FindObjectsOfType<GrabbableObject>().ToList();
List<EnemyAI> list4 = Object.FindObjectsOfType<EnemyAI>().ToList();
bool flag = true;
int count = list.Count;
int num = (int)Math.Ceiling((double)count / (double)itemsPerPage);
page = Math.Min(page, num);
int num2 = (page - 1) * itemsPerPage;
int val = num2 + itemsPerPage - 1;
val = Math.Min(val, count - 1);
if (num2 < 0 || num2 >= count || num2 > val)
{
if (num2 >= count || list.Count == 0)
{
Plugin.LogMessage(listName + " list is empty!", isError: true);
}
else
{
Plugin.LogMessage("Invalid page number! Please enter a valid page number.", isError: true);
}
return;
}
string text = "";
for (int i = num2; i <= val; i++)
{
switch (listName)
{
case "Item":
text += $"{itemsList[i].itemName}({i}), ";
continue;
case "Command":
text += $"{list[i]}\n";
continue;
case "Player":
if (list2[i].isPlayerControlled)
{
text += $"Player #{list2[i].playerClientId}: {list2[i].playerUsername}\n";
continue;
}
break;
}
if (listName == "Active Item")
{
text = text + list3[i].itemProperties.itemName + ", ";
flag = false;
}
else if (listName == "Active Enemy")
{
text = text + list4[i].enemyType.enemyName + ", ";
flag = false;
}
}
text = text.TrimEnd(',', ' ', '\n') + ((listName == "Player") ? "" : ".");
string text2 = string.Format("{0}{1} (Page {2} of {3})", listName, flag ? " List" : "", page, num);
HUDManager.Instance.DisplayTip(text2, text, false, false, "LC_Tip1");
}
}
[HarmonyPatch(typeof(PlayerControllerB))]
internal class PlayerControllerB_Patch
{
[HarmonyPatch("KillPlayer")]
[HarmonyPostfix]
private static void DeadPlayerEnableHUD(PlayerControllerB __instance)
{
if (Player.HostPlayer.ClientId == __instance.playerClientId)
{
HUDManager instance = HUDManager.Instance;
instance.HideHUD(false);
instance.ToggleHUD(true);
}
}
[HarmonyPatch("AllowPlayerDeath")]
[HarmonyPrefix]
private static bool OverrideDeath(PlayerControllerB __instance)
{
PlayerControllerB localPlayerController = GameNetworkManager.Instance.localPlayerController;
if (!Plugin.CheckPlayerIsHost(localPlayerController))
{
return true;
}
return !Plugin.Instance.enableGod;
}
}
[HarmonyPatch(typeof(RoundManager))]
internal class RoundManagerPatch
{
[HarmonyPatch("LoadNewLevel")]
[HarmonyPrefix]
private static void ModifyLevel(ref SelectableLevel newLevel)
{
}
private static bool ListHasEnemy(List<SpawnableEnemyWithRarity> list, string enemyName)
{
return list.Any((SpawnableEnemyWithRarity e) => e.enemyType.enemyName == enemyName);
}
private static List<SpawnableEnemyWithRarity> FixInsideEnemySpawns()
{
//IL_004b: Unknown result type (might be due to invalid IL or missing references)
//IL_0051: Expected O, but got Unknown
//IL_005f: Unknown result type (might be due to invalid IL or missing references)
//IL_0066: Expected O, but got Unknown
//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
//IL_00af: Expected O, but got Unknown
//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
//IL_00c4: Expected O, but got Unknown
//IL_0107: Unknown result type (might be due to invalid IL or missing references)
//IL_010d: Expected O, but got Unknown
//IL_011b: Unknown result type (might be due to invalid IL or missing references)
//IL_0122: Expected O, but got Unknown
//IL_0165: Unknown result type (might be due to invalid IL or missing references)
//IL_016c: Expected O, but got Unknown
//IL_017a: Unknown result type (might be due to invalid IL or missing references)
//IL_0181: Expected O, but got Unknown
//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
//IL_01cd: Expected O, but got Unknown
//IL_01db: Unknown result type (might be due to invalid IL or missing references)
//IL_01e2: Expected O, but got Unknown
//IL_0227: Unknown result type (might be due to invalid IL or missing references)
//IL_022e: Expected O, but got Unknown
//IL_023c: Unknown result type (might be due to invalid IL or missing references)
//IL_0243: Expected O, but got Unknown
//IL_0288: Unknown result type (might be due to invalid IL or missing references)
//IL_028f: Expected O, but got Unknown
//IL_029d: Unknown result type (might be due to invalid IL or missing references)
//IL_02a4: Expected O, but got Unknown
//IL_02e9: Unknown result type (might be due to invalid IL or missing references)
//IL_02f0: Expected O, but got Unknown
//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
//IL_0305: Expected O, but got Unknown
//IL_034a: Unknown result type (might be due to invalid IL or missing references)
//IL_0351: Expected O, but got Unknown
//IL_035f: Unknown result type (might be due to invalid IL or missing references)
//IL_0366: Expected O, but got Unknown
//IL_03ab: Unknown result type (might be due to invalid IL or missing references)
//IL_03b2: Expected O, but got Unknown
//IL_03c0: Unknown result type (might be due to invalid IL or missing references)
//IL_03c7: Expected O, but got Unknown
//IL_040c: Unknown result type (might be due to invalid IL or missing references)
//IL_0413: Expected O, but got Unknown
//IL_0421: Unknown result type (might be due to invalid IL or missing references)
//IL_0428: Expected O, but got Unknown
//IL_046d: Unknown result type (might be due to invalid IL or missing references)
//IL_0474: Expected O, but got Unknown
//IL_0482: Unknown result type (might be due to invalid IL or missing references)
//IL_0489: Expected O, but got Unknown
//IL_04ce: Unknown result type (might be due to invalid IL or missing references)
//IL_04d5: Expected O, but got Unknown
//IL_04e3: Unknown result type (might be due to invalid IL or missing references)
//IL_04ea: Expected O, but got Unknown
List<SpawnableEnemyWithRarity> list = new List<SpawnableEnemyWithRarity>();
BlobAI val = null;
CentipedeAI val2 = null;
CrawlerAI val3 = null;
DressGirlAI val4 = null;
FlowermanAI val5 = null;
HoarderBugAI val6 = null;
JesterAI val7 = null;
LassoManAI val8 = null;
MaskedPlayerEnemy val9 = null;
NutcrackerEnemyAI val10 = null;
PufferAI val11 = null;
SandSpiderAI val12 = null;
SpringManAI val13 = null;
Object[] array = Resources.FindObjectsOfTypeAll(typeof(BlobAI));
foreach (Object val14 in array)
{
val = (BlobAI)val14;
}
SpawnableEnemyWithRarity val15 = new SpawnableEnemyWithRarity();
if ((Object)(object)val != (Object)null)
{
val15.enemyType = ((EnemyAI)val).enemyType;
}
list.Add(val15);
Object[] array2 = Resources.FindObjectsOfTypeAll(typeof(CentipedeAI));
foreach (Object val16 in array2)
{
val2 = (CentipedeAI)val16;
}
SpawnableEnemyWithRarity val17 = new SpawnableEnemyWithRarity();
if ((Object)(object)val2 != (Object)null)
{
val17.enemyType = ((EnemyAI)val2).enemyType;
}
list.Add(val17);
Object[] array3 = Resources.FindObjectsOfTypeAll(typeof(CrawlerAI));
foreach (Object val18 in array3)
{
val3 = (CrawlerAI)val18;
}
SpawnableEnemyWithRarity val19 = new SpawnableEnemyWithRarity();
if ((Object)(object)val3 != (Object)null)
{
val19.enemyType = ((EnemyAI)val3).enemyType;
}
list.Add(val19);
Object[] array4 = Resources.FindObjectsOfTypeAll(typeof(DressGirlAI));
foreach (Object val20 in array4)
{
val4 = (DressGirlAI)val20;
}
SpawnableEnemyWithRarity val21 = new SpawnableEnemyWithRarity();
if ((Object)(object)val4 != (Object)null)
{
val21.enemyType = ((EnemyAI)val4).enemyType;
}
list.Add(val21);
Object[] array5 = Resources.FindObjectsOfTypeAll(typeof(FlowermanAI));
foreach (Object val22 in array5)
{
val5 = (FlowermanAI)val22;
}
SpawnableEnemyWithRarity val23 = new SpawnableEnemyWithRarity();
if ((Object)(object)val5 != (Object)null)
{
val23.enemyType = ((EnemyAI)val5).enemyType;
}
list.Add(val23);
Object[] array6 = Resources.FindObjectsOfTypeAll(typeof(HoarderBugAI));
foreach (Object val24 in array6)
{
val6 = (HoarderBugAI)val24;
}
SpawnableEnemyWithRarity val25 = new SpawnableEnemyWithRarity();
if ((Object)(object)val6 != (Object)null)
{
val25.enemyType = ((EnemyAI)val6).enemyType;
}
list.Add(val25);
Object[] array7 = Resources.FindObjectsOfTypeAll(typeof(JesterAI));
foreach (Object val26 in array7)
{
val7 = (JesterAI)val26;
}
SpawnableEnemyWithRarity val27 = new SpawnableEnemyWithRarity();
if ((Object)(object)val7 != (Object)null)
{
val27.enemyType = ((EnemyAI)val7).enemyType;
}
list.Add(val27);
Object[] array8 = Resources.FindObjectsOfTypeAll(typeof(LassoManAI));
foreach (Object val28 in array8)
{
val8 = (LassoManAI)val28;
}
SpawnableEnemyWithRarity val29 = new SpawnableEnemyWithRarity();
if ((Object)(object)val8 != (Object)null)
{
val29.enemyType = ((EnemyAI)val8).enemyType;
}
list.Add(val29);
Object[] array9 = Resources.FindObjectsOfTypeAll(typeof(MaskedPlayerEnemy));
foreach (Object val30 in array9)
{
val9 = (MaskedPlayerEnemy)val30;
}
SpawnableEnemyWithRarity val31 = new SpawnableEnemyWithRarity();
if ((Object)(object)val9 != (Object)null)
{
val31.enemyType = ((EnemyAI)val9).enemyType;
}
list.Add(val31);
Object[] array10 = Resources.FindObjectsOfTypeAll(typeof(NutcrackerEnemyAI));
foreach (Object val32 in array10)
{
val10 = (NutcrackerEnemyAI)val32;
}
SpawnableEnemyWithRarity val33 = new SpawnableEnemyWithRarity();
if ((Object)(object)val10 != (Object)null)
{
val33.enemyType = ((EnemyAI)val10).enemyType;
}
list.Add(val33);
Object[] array11 = Resources.FindObjectsOfTypeAll(typeof(PufferAI));
foreach (Object val34 in array11)
{
val11 = (PufferAI)val34;
}
SpawnableEnemyWithRarity val35 = new SpawnableEnemyWithRarity();
if ((Object)(object)val11 != (Object)null)
{
val35.enemyType = ((EnemyAI)val11).enemyType;
}
list.Add(val35);
Object[] array12 = Resources.FindObjectsOfTypeAll(typeof(SandSpiderAI));
foreach (Object val36 in array12)
{
val12 = (SandSpiderAI)val36;
}
SpawnableEnemyWithRarity val37 = new SpawnableEnemyWithRarity();
if ((Object)(object)val12 != (Object)null)
{
val37.enemyType = ((EnemyAI)val12).enemyType;
}
list.Add(val37);
Object[] array13 = Resources.FindObjectsOfTypeAll(typeof(SpringManAI));
foreach (Object val38 in array13)
{
val13 = (SpringManAI)val38;
}
SpawnableEnemyWithRarity val39 = new SpawnableEnemyWithRarity();
if ((Object)(object)val13 != (Object)null)
{
val39.enemyType = ((EnemyAI)val13).enemyType;
}
list.Add(val39);
return list;
}
private static List<SpawnableEnemyWithRarity> FixOutsideEnemySpawns()
{
//IL_0039: Unknown result type (might be due to invalid IL or missing references)
//IL_003f: Expected O, but got Unknown
//IL_004d: Unknown result type (might be due to invalid IL or missing references)
//IL_0054: Expected O, but got Unknown
//IL_0097: Unknown result type (might be due to invalid IL or missing references)
//IL_009d: Expected O, but got Unknown
//IL_00ab: Unknown result type (might be due to invalid IL or missing references)
//IL_00b2: Expected O, but got Unknown
//IL_00f5: Unknown result type (might be due to invalid IL or missing references)
//IL_00fb: Expected O, but got Unknown
//IL_0109: Unknown result type (might be due to invalid IL or missing references)
//IL_0110: Expected O, but got Unknown
//IL_0153: Unknown result type (might be due to invalid IL or missing references)
//IL_015a: Expected O, but got Unknown
//IL_0168: Unknown result type (might be due to invalid IL or missing references)
//IL_016f: Expected O, but got Unknown
//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
//IL_01bb: Expected O, but got Unknown
//IL_01c9: Unknown result type (might be due to invalid IL or missing references)
//IL_01d0: Expected O, but got Unknown
//IL_0215: Unknown result type (might be due to invalid IL or missing references)
//IL_021c: Expected O, but got Unknown
//IL_022a: Unknown result type (might be due to invalid IL or missing references)
//IL_0231: Expected O, but got Unknown
//IL_0276: Unknown result type (might be due to invalid IL or missing references)
//IL_027d: Expected O, but got Unknown
//IL_028b: Unknown result type (might be due to invalid IL or missing references)
//IL_0292: Expected O, but got Unknown
List<SpawnableEnemyWithRarity> list = new List<SpawnableEnemyWithRarity>();
BaboonBirdAI val = null;
DocileLocustBeesAI val2 = null;
DoublewingAI val3 = null;
ForestGiantAI val4 = null;
MouthDogAI val5 = null;
RedLocustBees val6 = null;
SandWormAI val7 = null;
Object[] array = Resources.FindObjectsOfTypeAll(typeof(BaboonBirdAI));
foreach (Object val8 in array)
{
val = (BaboonBirdAI)val8;
}
SpawnableEnemyWithRarity val9 = new SpawnableEnemyWithRarity();
if ((Object)(object)val != (Object)null)
{
val9.enemyType = ((EnemyAI)val).enemyType;
}
list.Add(val9);
Object[] array2 = Resources.FindObjectsOfTypeAll(typeof(DocileLocustBeesAI));
foreach (Object val10 in array2)
{
val2 = (DocileLocustBeesAI)val10;
}
SpawnableEnemyWithRarity val11 = new SpawnableEnemyWithRarity();
if ((Object)(object)val2 != (Object)null)
{
val11.enemyType = ((EnemyAI)val2).enemyType;
}
list.Add(val11);
Object[] array3 = Resources.FindObjectsOfTypeAll(typeof(DoublewingAI));
foreach (Object val12 in array3)
{
val3 = (DoublewingAI)val12;
}
SpawnableEnemyWithRarity val13 = new SpawnableEnemyWithRarity();
if ((Object)(object)val3 != (Object)null)
{
val13.enemyType = ((EnemyAI)val3).enemyType;
}
list.Add(val13);
Object[] array4 = Resources.FindObjectsOfTypeAll(typeof(ForestGiantAI));
foreach (Object val14 in array4)
{
val4 = (ForestGiantAI)val14;
}
SpawnableEnemyWithRarity val15 = new SpawnableEnemyWithRarity();
if ((Object)(object)val4 != (Object)null)
{
val15.enemyType = ((EnemyAI)val4).enemyType;
}
list.Add(val15);
Object[] array5 = Resources.FindObjectsOfTypeAll(typeof(MouthDogAI));
foreach (Object val16 in array5)
{
val5 = (MouthDogAI)val16;
}
SpawnableEnemyWithRarity val17 = new SpawnableEnemyWithRarity();
if ((Object)(object)val5 != (Object)null)
{
val17.enemyType = ((EnemyAI)val5).enemyType;
}
list.Add(val17);
Object[] array6 = Resources.FindObjectsOfTypeAll(typeof(RedLocustBees));
foreach (Object val18 in array6)
{
val6 = (RedLocustBees)val18;
}
SpawnableEnemyWithRarity val19 = new SpawnableEnemyWithRarity();
if ((Object)(object)val6 != (Object)null)
{
val19.enemyType = ((EnemyAI)val6).enemyType;
}
list.Add(val19);
Object[] array7 = Resources.FindObjectsOfTypeAll(typeof(SandWormAI));
foreach (Object val20 in array7)
{
val7 = (SandWormAI)val20;
}
SpawnableEnemyWithRarity val21 = new SpawnableEnemyWithRarity();
if ((Object)(object)val7 != (Object)null)
{
val21.enemyType = ((EnemyAI)val7).enemyType;
}
list.Add(val21);
return list;
}
}
[HarmonyPatch(typeof(ShipTeleporter))]
internal class ShipTeleporter_Patch
{
[HarmonyPatch("SetRandomSeed")]
[HarmonyPostfix]
private static void grabTeleporterSeed(ref Random ___shipTeleporterSeed)
{
Plugin.Instance.shipTeleporterSeed = ___shipTeleporterSeed;
}
[HarmonyPatch("OnDisable")]
[HarmonyPostfix]
private static void resetTeleporterSeed()
{
Plugin.Instance.shipTeleporterSeed = null;
}
}
[HarmonyPatch(typeof(StartMatchLever))]
internal class StartMatchLever_Patch
{
[HarmonyPatch("StartGame")]
[HarmonyPostfix]
private static void resetWaypoints()
{
Plugin.Instance.waypoints.Clear();
}
}
internal class TOTNetworking
{
private static string hostVerifiedMessage = "RPC SENDER VERIFIED AS HOST, PROCEEDING WITH HANDLER METHOD.";
private static string nonHostSenderMessage = "RPC SENDER IS NOT THE HOST, HANDLER METHOD CANCELLED.";
[NetworkMessage("TOT_CHARGE_PLAYER", true)]
public static void TOT_CHARGE_PLAYER_HANDLER(ulong sender, TOT_PLAYER_Broadcast message)
{
Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_CHARGE_PLAYER\".");
PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender)));
if (Plugin.CheckPlayerIsHost(player2))
{
Plugin.mls.LogInfo((object)hostVerifiedMessage);
PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(message.playerClientId)));
GrabbableObject val2 = val.ItemSlots[val.currentItemSlot];
if ((Object)(object)val2 != (Object)null && val2.itemProperties.requiresBattery)
{
val2.insertedBattery.charge = 1f;
}
}
else
{
Plugin.mls.LogInfo((object)nonHostSenderMessage);
}
}
[NetworkMessage("TOT_HEAL_PLAYER", true)]
public static void TOT_HEAL_PLAYER_HANDLER(ulong sender, TOT_PLAYER_Broadcast message)
{
Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_HEAL_PLAYER\".");
PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender)));
if (Plugin.CheckPlayerIsHost(player2))
{
Plugin.mls.LogInfo((object)hostVerifiedMessage);
PlayerControllerB val = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(message.playerClientId)));
if ((Object)(object)val != (Object)null && val.isPlayerDead)
{
Plugin.RevivePlayer(val.playerClientId);
}
if ((Object)(object)val != (Object)null)
{
Plugin.SavePlayer(val);
val.isExhausted = false;
val.bleedingHeavily = false;
}
}
else
{
Plugin.mls.LogInfo((object)nonHostSenderMessage);
}
}
[NetworkMessage("TOT_TERMINAL_CREDITS", true)]
public static void TOT_TERMINAL_CREDITS_HANDLER(ulong sender, TOT_INT_Broadcast message)
{
Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_TERMINAL_CREDITS\".");
PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender)));
if (Plugin.CheckPlayerIsHost(player2))
{
Plugin.mls.LogInfo((object)hostVerifiedMessage);
Terminal val = Object.FindObjectOfType<Terminal>();
if ((Object)(object)val != (Object)null)
{
val.groupCredits += message.dataInt;
}
}
else
{
Plugin.mls.LogInfo((object)nonHostSenderMessage);
}
}
[NetworkMessage("TOT_TP_PLAYER", true)]
public static void TOT_TP_PLAYER_HANDLER(ulong sender, TOT_TP_PLAYER_Broadcast message)
{
Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_TP_PLAYER\".");
PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender)));
if (Plugin.CheckPlayerIsHost(player2))
{
Plugin.mls.LogInfo((object)hostVerifiedMessage);
Plugin.mls.LogInfo((object)$"Found: {((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender))).playerUsername}, Sending Inside: {message.isInside}");
Plugin.PlayerTeleportEffects(message.playerClientId, message.isInside);
}
else
{
Plugin.mls.LogInfo((object)nonHostSenderMessage);
}
}
[NetworkMessage("TOT_SYNC_AMMO", true)]
public static void TOT_SYNC_AMMO_HANDLER(ulong sender, TOT_ITEM_Broadcast message)
{
Plugin.mls.LogInfo((object)"RPC RECEIVED: \"TOT_SYNC_AMMO\".");
PlayerControllerB player2 = ((IEnumerable<PlayerControllerB>)StartOfRound.Instance.allPlayerScripts).FirstOrDefault((Func<PlayerControllerB, bool>)((PlayerControllerB player) => player.playerClientId.Equals(sender)));
if (Plugin.CheckPlayerIsHost(player2))
{
Plugin.mls.LogInfo((object)hostVerifiedMessage);
((Component)((IEnumerable<Item>)Item.List).FirstOrDefault((Func<Item, bool>)((Item item) => ((NetworkBehaviour)item).NetworkObjectId.Equals(message.networkObjectID)))).GetComponentInChildren<ShotgunItem>().shellsLoaded = 2;
}
else
{
Plugin.mls.LogInfo((object)nonHostSenderMessage);
}
}
}
internal class TOT_INT_Broadcast
{
public int dataInt { get; set; }
}
internal class TOT_ITEM_Broadcast
{
public ulong networkObjectID { get; set; }
}
internal class TOT_PLAYER_Broadcast
{
public ulong playerClientId { get; set; }
}
internal class TOT_TP_PLAYER_Broadcast
{
public bool isInside { get; set; }
public ulong playerClientId { get; set; }
}
}