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;
}
}