using System.Collections.Generic; using System.ComponentModel; using System.Linq; namespace CoopClient { /// /// ? /// public static class COOPAPI { #region DELEGATES /// /// ? /// public delegate void ConnectEvent(bool connected, long fromId, string reason = null); /// /// ? /// public delegate void ChatMessage(string from, string message, CancelEventArgs args); /// /// ? /// public delegate void ModEvent(long from, string mod, byte customID, byte[] bytes); #endregion #region EVENTS /// /// ? /// public static event ConnectEvent OnConnection; /// /// ? /// public static event ChatMessage OnChatMessage; /// /// ? /// public static event ModEvent OnModPacketReceived; internal static void Connected() { OnConnection?.Invoke(true, GetLocalID()); } internal static void Disconnected(string reason) { OnConnection?.Invoke(false, GetLocalID(), reason); } internal static void Connected(long userId) { OnConnection?.Invoke(true, userId); } internal static void Disconnected(long userId) { OnConnection?.Invoke(false, userId); } internal static void ModPacketReceived(long from, string mod, byte customID, byte[] bytes) { OnModPacketReceived?.Invoke(from, mod, customID, bytes); } internal static bool ChatMessageReceived(string from, string message) { CancelEventArgs args = new CancelEventArgs(false); OnChatMessage?.Invoke(from, message, args); return args.Cancel; } #endregion /// /// Send a local chat message to this player /// /// Username of the player who sent this message /// The player's message public static void LocalChatMessage(string from, string message) { Main.MainChat.AddMessage(from, message); } /// /// ? /// public static void Connect(string serverAddress) { Main.MainNetworking.DisConnectFromServer(serverAddress); } /// /// ? /// public static void Disconnect() { Main.MainNetworking.DisConnectFromServer(null); } /// /// ? /// public static bool IsOnServer() { return Main.MainNetworking.IsOnServer(); } /// /// Get the local ID from this Lidgren network client when connected to a server /// /// long public static long GetLocalID() { return Main.LocalClientID; } /// /// Get all connected player's as a Dictionary. /// Key = Lidgren-Network client ID /// Value = Character handle or null /// /// Dictionary(long, int) public static Dictionary GetAllPlayers() { Dictionary result = new Dictionary(); lock (Main.Players) { foreach (KeyValuePair player in Main.Players.Where(x => x.Key != Main.LocalClientID)) { result.Add(player.Key, player.Value.Character?.Handle); } } return result; } /// /// Get a player using their Lidgren Network Client ID /// /// Lidgren-Network client ID /// Entities.EntitiesPlayer public static Entities.EntitiesPlayer GetPlayer(long lnID) { lock (Main.Players) { return Main.Players.ContainsKey(lnID) ? Main.Players[lnID] : null; } } /// /// ? /// public static bool IsMenuVisible() { #if NON_INTERACTIVE return false; #else return Main.MainMenu.MenuPool.AreAnyVisible; #endif } /// /// ? /// public static bool IsChatFocused() { return Main.MainChat.Focused; } /// /// ? /// public static bool IsPlayerListVisible() { return Util.GetTickCount64() - PlayerList.Pressed < 5000; } /// /// ? /// public static string GetCurrentVersion() { return Main.CurrentVersion; } /// /// Send any data (bytes) to the server /// /// The name of this modification (script) /// The ID to know what the data is /// Your class, structure or whatever in bytes public static void SendDataToServer(string mod, byte customID, byte[] bytes) { Main.MainNetworking.SendModData(-1, mod, customID, bytes); } /// /// Send any data (bytes) to the all player /// /// The name of this modification (script) /// The ID to know what the data is /// Your class, structure or whatever in bytes public static void SendDataToAll(string mod, byte customID, byte[] bytes) { Main.MainNetworking.SendModData(0, mod, customID, bytes); } /// /// Send any data (bytes) to a player /// /// The Lidgren Network Client ID that receives the data /// The name of this modification (script) /// The ID to know what the data is /// Your class, structure or whatever in bytes public static void SendDataToPlayer(long lnID, string mod, byte customID, byte[] bytes) { Main.MainNetworking.SendModData(lnID, mod, customID, bytes); } /// /// Get that player's local username that has been set /// /// string public static string GetLocalUsername() { return Main.MainSettings.Username; } /// /// ? /// public static void Configure(string playerName, bool shareNpcsWithPlayers, int streamedNpcs, bool disableTrafficSharing, bool debug = false) { Main.MainSettings.Username = playerName; Main.ShareNpcsWithPlayers = shareNpcsWithPlayers; Main.MainSettings.StreamedNpc = streamedNpcs; Main.DisableTraffic = disableTrafficSharing; #if DEBUG Main.UseDebug = debug; #endif } } }