ee79fe5cc2
In some circumstances (like proximity, missions...) we may want to target messages to only a sub set of all the users connected to the server. Adding this optional parameter to SendModPacketToAll and SendChatMessageToAll allows that while being backwards compatible with the API Fixes some problems introduced in the non interactive mode Changes the SetLocalTraffic parameter to make it more readable so now SetLocalTraffic(true) means to ENABLE local traffic while SetLocalTraffic(false) means DISABLE local traffic
125 lines
4.2 KiB
C#
125 lines
4.2 KiB
C#
using System;
|
|
using System.Net;
|
|
using System.Collections.Generic;
|
|
|
|
using Newtonsoft.Json;
|
|
|
|
using LemonUI.Menus;
|
|
|
|
namespace CoopClient.Menus.Sub
|
|
{
|
|
internal class ServerListClass
|
|
{
|
|
[JsonProperty("address")]
|
|
public string Address { get; set; }
|
|
[JsonProperty("port")]
|
|
public string Port { get; set; }
|
|
[JsonProperty("name")]
|
|
public string Name { get; set; }
|
|
[JsonProperty("version")]
|
|
public string Version { get; set; }
|
|
[JsonProperty("players")]
|
|
public int Players { get; set; }
|
|
[JsonProperty("maxPlayers")]
|
|
public int MaxPlayers { get; set; }
|
|
[JsonProperty("allowlist")]
|
|
public bool AllowList { get; set; }
|
|
[JsonProperty("mods")]
|
|
public bool Mods { get; set; }
|
|
[JsonProperty("npcs")]
|
|
public bool NPCs { get; set; }
|
|
[JsonProperty("country")]
|
|
public string Country { get; set; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Don't use it!
|
|
/// </summary>
|
|
public class Servers
|
|
{
|
|
internal NativeMenu MainMenu = new NativeMenu("GTACOOP:R", "Servers", "Go to the server list")
|
|
{
|
|
UseMouse = false,
|
|
Alignment = Main.MainSettings.FlipMenu ? GTA.UI.Alignment.Right : GTA.UI.Alignment.Left
|
|
};
|
|
internal NativeItem ResultItem = null;
|
|
|
|
/// <summary>
|
|
/// Don't use it!
|
|
/// </summary>
|
|
public Servers()
|
|
{
|
|
MainMenu.Opening += (object sender, System.ComponentModel.CancelEventArgs e) =>
|
|
{
|
|
MainMenu.Add(ResultItem = new NativeItem("Loading..."));
|
|
GetAllServer();
|
|
};
|
|
MainMenu.Closed += (object sender, EventArgs e) =>
|
|
{
|
|
for (int i = 0; i < MainMenu.Items.Count; i++)
|
|
{
|
|
MainMenu.Remove(MainMenu.Items[i]);
|
|
}
|
|
};
|
|
}
|
|
private void GetAllServer()
|
|
{
|
|
List<ServerListClass> serverList = null;
|
|
try
|
|
{
|
|
// SSL/TLS
|
|
ServicePointManager.Expect100Continue = true;
|
|
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls13 | SecurityProtocolType.Tls12;
|
|
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
|
|
|
|
WebClient client = new WebClient();
|
|
string data = client.DownloadString(Main.MainSettings.MasterServer);
|
|
serverList = JsonConvert.DeserializeObject<List<ServerListClass>>(data);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
ResultItem.Title = "Download failed!";
|
|
ResultItem.Description = ex.Message; // You have to use any key to see this message
|
|
}
|
|
|
|
if (serverList == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if (ResultItem != null)
|
|
{
|
|
MainMenu.Remove(MainMenu.Items[0]);
|
|
ResultItem = null;
|
|
}
|
|
|
|
foreach (ServerListClass server in serverList)
|
|
{
|
|
string address = $"{server.Address}:{server.Port}";
|
|
NativeItem tmpItem = null;
|
|
MainMenu.Add(tmpItem = new NativeItem($"[{server.Country}] {server.Name}", $"~b~{address}~s~~n~~g~Version {server.Version}.x~s~~n~Mods = {server.Mods}~n~NPCs = {server.NPCs}") { AltTitle = $"[{server.Players}/{server.MaxPlayers}][{(server.AllowList ? "~r~X~s~" : "~g~O~s~")}]"});
|
|
tmpItem.Activated += (object sender, EventArgs e) =>
|
|
{
|
|
try
|
|
{
|
|
MainMenu.Visible = false;
|
|
|
|
Main.MainNetworking.DisConnectFromServer(address);
|
|
#if !NON_INTERACTIVE
|
|
Main.MainMenu.ServerIpItem.AltTitle = address;
|
|
|
|
Main.MainMenu.MainMenu.Visible = true;
|
|
#endif
|
|
Main.MainSettings.LastServerAddress = address;
|
|
Util.SaveSettings();
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
GTA.UI.Notification.Show($"~r~{ex.Message}");
|
|
}
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|