Skip to content

Commit

Permalink
Fixed Events.cs naming scheme. Moved MPModCheckManager events to Even…
Browse files Browse the repository at this point in the history
…ts.cs
  • Loading branch information
DragonFire47 committed Dec 2, 2023
1 parent 00dad83 commit 9deb49e
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 64 deletions.
92 changes: 67 additions & 25 deletions PulsarModLoader/Events.cs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
using HarmonyLib;
using PulsarModLoader.Chat.Extensions;
using PulsarModLoader.MPModChecks;
using PulsarModLoader.Patches;

namespace PulsarModLoader
Expand All @@ -17,82 +18,85 @@ public class Events
/// <summary>
/// creates PulsarModLoader.Events Instance. Additionally adds PML events
/// </summary>
public Events()
internal Events()
{
Instance = this;
}

/// <summary>
/// Called by Event EnterNewGame
/// used by EnterNewGameEvent
/// </summary>
public delegate void EnterNewGameEvent();
public delegate void EnterNewGameDelegate();

/// <summary>
/// Postfixes PLGlobal.EnterNewGame(). Called by PLNetworkManager.ClientWaitForHubIDAndLoadLevel and PLNetworkManager.ServerWaitForHubIDAndLoadLevel.
/// </summary>
public event EnterNewGameEvent EnterNewGame;
public event EnterNewGameDelegate EnterNewGameEvent;

[HarmonyPatch(typeof(PLGlobal), "EnterNewGame")]
class EnterNewGamePatch
{
static void Postfix()
{
Events.Instance.EnterNewGame?.Invoke();
//Clear NetworkedPeers on game enter
MPModCheckManager.Instance.NetworkedPeersModLists.Clear();

Events.Instance.EnterNewGameEvent?.Invoke();
}
}

/// <summary>
/// Called by Event OnLeaveGame
/// Used by OnLeaveGameEvent
/// </summary>
public delegate void OnLeaveGameEvent();
public delegate void OnLeaveGameDelegate();

/// <summary>
/// Prefixes PLNetworkManager.OnLeaveGame(bool). Called by a variety of methods centered around intentionally and unintentionally leaving a game.
/// </summary>
public event OnLeaveGameEvent OnLeaveGame;
public event OnLeaveGameDelegate OnLeaveGameEvent;

[HarmonyPatch(typeof(PLNetworkManager), "OnLeaveGame")]
class OnLeaveGamePatch
{
static void Prefix()
{
Events.Instance.OnLeaveGame?.Invoke();
Events.Instance.OnLeaveGameEvent?.Invoke();
}
}


/// <summary>
/// Called By Event GameOver
/// Used By GameOverEvent
/// </summary>
/// <param name="backToMainMenu"></param>
public delegate void GameOverEvent(bool backToMainMenu);
public delegate void GameOverDelegate(bool backToMainMenu);

/// <summary>
/// Prefixes PLNetworkManager.GameOver(Bool), Called by PLNetworkManager.OnLoeavGame, PLServer.SendGameOver, PLServer.ServerWaitForClientsToLeaveGame
/// </summary>
public event GameOverEvent GameOver;
public event GameOverDelegate GameOverEvent;

[HarmonyPatch(typeof(PLNetworkManager), "GameOver")]
class GameOverPatch
{
static void Prefix(bool backToMainMenu)
{
Events.Instance.GameOver?.Invoke(backToMainMenu);
Events.Instance.GameOverEvent?.Invoke(backToMainMenu);
}
}


/// <summary>
/// Called by Event SpawnNewPlayer
/// Used by SpawnNewPlayerEvent
/// </summary>
/// <param name="newPhotonPlayer"></param>
/// <param name="inPlayerName"></param>
public delegate void SpawnNewPlayerEvent(PhotonPlayer newPhotonPlayer, string inPlayerName);
public delegate void SpawnNewPlayerDelegate(PhotonPlayer newPhotonPlayer, string inPlayerName);

/// <summary>
/// Postfixes PLServer.SpawnNewPlayer(PhotonPlayer, String) Called By PLServer.LoginMessage. Onle called for players connecting.
/// </summary>
public event SpawnNewPlayerEvent SpawnNewPlayer;
public event SpawnNewPlayerDelegate SpawnNewPlayerEvent;

[HarmonyPatch(typeof(PLServer), "SpawnNewPlayer")]
class SpawnNewPlayerPatch
Expand All @@ -102,21 +106,21 @@ static void Postfix(PhotonPlayer newPhotonPlayer, string inPlayerName)
//Updates PlayerList on Player Added.
PhotonProperties.UpdatePlayerList();

Events.Instance.SpawnNewPlayer?.Invoke(newPhotonPlayer, inPlayerName);
Events.Instance.SpawnNewPlayerEvent?.Invoke(newPhotonPlayer, inPlayerName);
}
}


/// <summary>
/// Called by Event RemovePlayer
/// Used by RemovePlayerEvent
/// </summary>
/// <param name="player"></param>
public delegate void RemovePlayerEvent(PLPlayer player);
public delegate void RemovePlayerDelegate(PLPlayer player);

/// <summary>
/// Prefixes PLServer.RemovePlayer(PLPlayer) Called by PLNetworkManager.OnPhotonPlayerDisconnected, PLServer.ServerRemoveBot, PLServer.ServerRemoveCrewBotPlayer
/// </summary>
public event RemovePlayerEvent RemovePlayer;
public event RemovePlayerDelegate RemovePlayerEvent;

[HarmonyPatch(typeof(PLServer), "RemovePlayer")]
class RemovePlayerPatch
Expand All @@ -126,20 +130,20 @@ static void Prefix(PLPlayer inPlayer)
//Updates PlayerList on Player Added
PhotonProperties.UpdatePlayerList();

Events.Instance.RemovePlayer?.Invoke(inPlayer);
Events.Instance.RemovePlayerEvent?.Invoke(inPlayer);
}
}


/// <summary>
/// Called by Event ServerStart
/// Used by ServerStartEvent
/// </summary>
public delegate void ServerStartEvent(PLServer instance);
public delegate void ServerStartDelegate(PLServer instance);

/// <summary>
/// Postfixes PLServer.Start(). Called by Unity after creation of a server instance.
/// </summary>
public event ServerStartEvent ServerStart;
public event ServerStartDelegate ServerStartEvent;

[HarmonyPatch(typeof(PLServer), "Start")]
class ServerStartPatch
Expand All @@ -150,7 +154,45 @@ static void Postfix(PLServer __instance)
ChatHelper.publicCached = false;
HandlePublicCommands.RequestPublicCommands();

Events.Instance.ServerStart?.Invoke(__instance);
Events.Instance.ServerStartEvent?.Invoke(__instance);
}
}

/// <summary>
/// Used by ClientModlistRecievedEvent
/// </summary>
/// <param name="IncomingPlayer"></param>
public delegate void ClientModlistRecievedDelegate(PhotonPlayer IncomingPlayer);


/// <summary>
/// Called after a client modlist has been recieved by the MPModCheckManager instance.
/// </summary>
public event ClientModlistRecievedDelegate ClientModlistRecievedEvent;

internal void CallClientModlistRecievedEvent(PhotonPlayer IncomingPlayer)
{
ClientModlistRecievedEvent?.Invoke(IncomingPlayer);
}


/// <summary>
/// Used by ServerOnClientVerifiedEvent
/// </summary>
/// <param name="JoiningPhotonPlayer"></param>
public delegate void ServerOnClientVerifiedDelegate(PhotonPlayer JoiningPhotonPlayer);

/// <summary>
/// Called after a client is succesfully verified, as a postfix to PLServer.ServerOnClientVerified(PhotonPlayer).
/// </summary>
public ServerOnClientVerifiedDelegate ServerOnClientVerifiedEvent;

[HarmonyPatch(typeof(PLServer), "ServerOnClientVerified")]
class ServerOnClientVerifiedPatch
{
static void Postfix(PhotonPlayer client)
{
Events.Instance.ServerOnClientVerifiedEvent?.Invoke(client);
}
}
}
Expand Down
34 changes: 4 additions & 30 deletions PulsarModLoader/MPModChecks/MPModCheckManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -88,32 +88,6 @@ private void RefreshData(PulsarMod mod = null)

private MPModDataBlock[] MyModList = null;

/// <summary>
/// Called after all mod checks finished HostSide
/// </summary>
public delegate void ModChecksFinishedHost(PhotonPlayer JoiningPhotonPlayer);

/// <summary>
/// Called after all mod checks finished HostSide
/// </summary>
public event ModChecksFinishedHost OnModChecksFinishedHost;

/*
/// <summary>
/// Called after all mod checks finished ClientSide
/// </summary>
//public delegate void ModChecksFinishedClient();
/// <summary>
/// Called after all mod checks finished ClientSide
/// </summary>
//public event ModChecksFinishedClient OnModChecksFinishedClient;*/

/// <summary>
/// List of clients that have requested mod lists of other clients.
/// </summary>
public List<PhotonPlayer> RequestedModLists = new List<PhotonPlayer>();

internal Dictionary<PhotonPlayer, MPUserDataBlock> NetworkedPeersModLists = new Dictionary<PhotonPlayer, MPUserDataBlock>();

private int HighestLevelOfMPMods = 0;
Expand All @@ -122,7 +96,7 @@ private void RefreshData(PulsarMod mod = null)
/// Gets full mod list of Networked Peer.
/// </summary>
/// <param name="Photonplayer"></param>
/// <returns></returns>
/// <returns>MPUserDataBlock of NetworkedPeer. Returns null if no modlist found.</returns>
public MPUserDataBlock GetNetworkedPeerMods(PhotonPlayer Photonplayer)
{
if (NetworkedPeersModLists.TryGetValue(Photonplayer, out MPUserDataBlock value))
Expand All @@ -138,7 +112,7 @@ public MPUserDataBlock GetNetworkedPeerMods(PhotonPlayer Photonplayer)
/// <summary>
/// Checks if given player has mod, checked by HarmonyID
/// </summary>
/// <param name="player"></param>
/// <param name="Player"></param>
/// <param name="HarmonyIdentifier"></param>
/// <returns>Returns true if player has mod</returns>
public bool NetworkedPeerHasMod(PhotonPlayer Player, string HarmonyIdentifier)
Expand Down Expand Up @@ -402,7 +376,7 @@ private static MPUserDataBlock GetHostModList(RoomInfo room)
}
catch
{

Logger.Info("Failed to Deserialize host mod list. Could be an older version of PML");
}
}
return new MPUserDataBlock();
Expand Down Expand Up @@ -657,7 +631,6 @@ public bool HostOnClientJoined(PhotonPlayer Player)
}
else
{
OnModChecksFinishedHost?.Invoke(Player);
Logger.Info("Modcheck passed, proceding onwards");
}
}
Expand All @@ -681,6 +654,7 @@ class JoinRoomPatch
{
static bool Prefix(RoomInfo room)
{

return Instance.ClientClickJoinRoom(room);
}
}
Expand Down
13 changes: 4 additions & 9 deletions PulsarModLoader/ModMessage/ModMessageHelper.cs
Original file line number Diff line number Diff line change
Expand Up @@ -143,15 +143,10 @@ public void ClientRecieveModList(byte[] recievedData, PhotonMessageInfo pmi)
MPUserDataBlock userDataBlock = MPModCheckManager.DeserializeHashlessMPUserData(recievedData);
Logger.Info($"recieved modlist from user with the following info:\nPMLVersion: {userDataBlock.PMLVersion}\nModlist:{MPModCheckManager.GetModListAsString(userDataBlock.ModData)}");

//Check if client modlist already exists, then update or add modlist.
if (MPModCheckManager.Instance.GetNetworkedPeerModlistExists(pmi.sender))
{
MPModCheckManager.Instance.NetworkedPeersModLists[pmi.sender] = userDataBlock;
}
else
{
MPModCheckManager.Instance.AddNetworkedPeerMods(pmi.sender, userDataBlock);
}

MPModCheckManager.Instance.AddNetworkedPeerMods(pmi.sender, userDataBlock);

Events.Instance.CallClientModlistRecievedEvent(pmi.sender);
}

/// <summary>
Expand Down

0 comments on commit 9deb49e

Please sign in to comment.