/// <summary> /// Apply game mode to a given set of clients. /// </summary> public void Apply(IEnumerable <ClientObject> clients) { List <BaseMessage> messages = new List <BaseMessage>(); // Add paylaod messages.AddRange(RT_MSG_SERVER_MEMORY_POKE.FromPayload(address, File.ReadAllBytes(BinPath))); // Add module byte[] moduleEntry = new byte[16]; Array.Copy(BitConverter.GetBytes((int)1), 0, moduleEntry, 0, 4); Array.Copy(BitConverter.GetBytes(address), 0, moduleEntry, 4, 4); // messages.Add(new RT_MSG_SERVER_MEMORY_POKE() { Address = 0x000CF000 + (0 * 16), Payload = moduleEntry }); // Send each foreach (var target in clients) { if (target != null && target.IsConnected) { target.AddLobbyMessages(messages); } } }
/// <summary> /// Disables the gamemode module. /// </summary> public static void Disable(IEnumerable <ClientObject> clients) { // reset var modulePokes = RT_MSG_SERVER_MEMORY_POKE.FromPayload(0x000CF000 + (0 * 16), new byte[16]); foreach (var player in clients) { player.AddLobbyMessages(modulePokes); } }
/// <summary> /// Turns patch into a collection of pokes. /// </summary> public List <BaseMessage> Serialize() { List <BaseMessage> results = new List <BaseMessage>(); if (File.Exists(BinPath)) { // Add payload results.AddRange(RT_MSG_SERVER_MEMORY_POKE.FromPayload(address, File.ReadAllBytes(BinPath))); // Add hook if (HookEnabled) { results.Add(new RT_MSG_SERVER_MEMORY_POKE() { Address = hookAddress, Payload = BitConverter.GetBytes(hookValue) }); } } return(results); }