CLre/CLre_server/API/MainServer/UserVerification.cs

95 lines
No EOL
3.2 KiB
C#

using System;
using System.Reflection;
using GameNetworkLayer.Shared;
using HarmonyLib;
using Svelto.Context;
using Svelto.ECS;
namespace CLre_server.API.MainServer
{
public class UserVerification
{
public static UserVerification Instance { get; internal set; }
private delegate void DisconnectPlayer_VerificationFailedProto(int playerId, string error);
private delegate void DisconnectPlayerProto(int playerId, NetworkDispatcherCode code);
private readonly DisconnectPlayer_VerificationFailedProto _disconnectPlayerVerificationFailed;
private readonly DisconnectPlayerProto _disconnectPlayer;
// This doesn't seem to do actually generate a popup, but it will stop the player from loading in
/*public void DisconnectPlayer_VerificationFailed(int playerId, string error)
{
_disconnectPlayerVerificationFailed(playerId, error);
}*/
public void DisconnectPlayer(int playerId, NetworkDispatcherCode code = NetworkDispatcherCode.ModVerificationFail)
{
_disconnectPlayer(playerId, code);
}
internal UserVerification(IQueryingEntitiesEngine uvs)
{
Type uvsType = AccessTools.TypeByName("User.Server.UserVerificationServer");
_disconnectPlayerVerificationFailed =
Utility.Reflection.MethodAsDelegate<DisconnectPlayer_VerificationFailedProto>(uvsType,
"DisconnectPlayer_VerificationFailed",
//parameters: new [] {typeof(int), typeof(string)},
instance: uvs);
_disconnectPlayer =
Utility.Reflection.MethodAsDelegate<DisconnectPlayerProto>(uvsType, "DisconnectPlayer", instance: uvs);
}
}
// This seems to think that __instance is always simply a System.Object (caused by Harmony?), which doesn't work
/*[HarmonyPatch]
class UserVerificationServer_Constructor_Patch
{
private static IQueryingEntitiesEngine uvs = null;
[HarmonyPrefix]
public static void BeforeMethodCall()
{
}
[HarmonyPostfix]
public static void AfterMethodCall(IQueryingEntitiesEngine __instance)
{
uvs = __instance;
UserVerification.Instance = new UserVerification(__instance);
}
[HarmonyTargetMethod]
public static MethodBase Target()
{
return AccessTools.Constructor(AccessTools.TypeByName("User.Server.UserVerificationServer"));
}
}*/
[HarmonyPatch]
class MainGameServer_CreatePlayerDisconnectionSequence_Patch
{
private static IQueryingEntitiesEngine uvs = null;
[HarmonyPrefix]
public static void BeforeMethodCall()
{
}
[HarmonyPostfix]
public static void AfterMethodCall(IQueryingEntitiesEngine userVerificationEng)
{
uvs = userVerificationEng;
UserVerification.Instance = new UserVerification(userVerificationEng);
}
[HarmonyTargetMethod]
public static MethodBase Target()
{
return AccessTools.Method("GameServer.GameFramework.MainGameServer:CreatePlayerDisconnectionSequence");
}
}
}