Decompiled source of MaxPlayers v1.0.0

BepInEx\plugins\CrimeSimMaxPlayers.dll

Decompiled 17 hours ago
using System.Collections.Generic;
using System.Reflection;
using System.Runtime.CompilerServices;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using Fusion;
using HarmonyLib;
using Steamworks;
using UnityEngine;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: AssemblyVersion("0.0.0.0")]
namespace CrimeSimMaxPlayers;

[BepInPlugin("com.crimesim.maxplayers", "Crime Simulator Max Players", "1.0.0")]
public class Plugin : BaseUnityPlugin
{
	public const string Guid = "com.crimesim.maxplayers";

	public const string Name = "Crime Simulator Max Players";

	public const string Version = "1.0.0";

	public static ConfigEntry<int> MaxPlayers;

	public static ManualLogSource Log;

	private void Awake()
	{
		//IL_0029: Unknown result type (might be due to invalid IL or missing references)
		//IL_0033: Expected O, but got Unknown
		//IL_0048: Unknown result type (might be due to invalid IL or missing references)
		//IL_004e: Expected O, but got Unknown
		MaxPlayers = ((BaseUnityPlugin)this).Config.Bind<int>("General", "MaxPlayers", 16, new ConfigDescription("联机房间人数上限(默认 16,可改后重启游戏生效)", (AcceptableValueBase)(object)new AcceptableValueRange<int>(2, 250), new object[0]));
		Log = ((BaseUnityPlugin)this).Logger;
		Harmony val = new Harmony("com.crimesim.maxplayers");
		val.PatchAll();
		Log.LogInfo((object)("Crime Simulator Max Players 已加载,当前人数上限: " + MaxPlayers.Value));
	}
}
[HarmonyPatch(typeof(NetworkRunner), "StartGame")]
public static class StartGamePatch
{
	private static void Prefix(ref StartGameArgs args)
	{
		int value = Plugin.MaxPlayers.Value;
		if (args.PlayerCount.HasValue && args.PlayerCount.Value > 0 && args.PlayerCount.Value < value)
		{
			Plugin.Log.LogInfo((object)("[Fusion] PlayerCount " + args.PlayerCount.Value + " -> " + value));
			args.PlayerCount = value;
		}
	}
}
[HarmonyPatch(typeof(SteamMatchmaking), "CreateLobby")]
public static class CreateLobbyPatch
{
	private static void Prefix(ref int cMaxMembers)
	{
		int value = Plugin.MaxPlayers.Value;
		if (cMaxMembers > 0 && cMaxMembers < value)
		{
			Plugin.Log.LogInfo((object)("[Steam] Lobby maxMembers " + cMaxMembers + " -> " + value));
			cMaxMembers = value;
		}
	}
}
[HarmonyPatch(typeof(Lobby), "SpawnPlayer")]
public static class SpawnPlayerPatch
{
	private static bool Prefix(Lobby __instance)
	{
		//IL_0075: Unknown result type (might be due to invalid IL or missing references)
		//IL_0080: Unknown result type (might be due to invalid IL or missing references)
		List<Transform> playerSpawns = __instance.playerSpawns;
		if (playerSpawns == null || playerSpawns.Count == 0)
		{
			Plugin.Log.LogWarning((object)"[Lobby] playerSpawns 为空,回退到原方法");
			return true;
		}
		int spawnedPlayers = __instance.spawnedPlayers;
		int num = spawnedPlayers % playerSpawns.Count;
		if (num < 0)
		{
			num += playerSpawns.Count;
		}
		Transform val = playerSpawns[num];
		((SimulationBehaviour)__instance).Runner.Spawn(__instance.lobbyPlayer, (Vector3?)val.position, (Quaternion?)val.rotation, (PlayerRef?)null, (OnBeforeSpawned)null, (NetworkSpawnFlags)0);
		Plugin.Log.LogInfo((object)("[Lobby] 玩家在出生点索引 " + num + " 生成(原始序号 " + spawnedPlayers + ")"));
		return false;
	}
}