Add some client API
This commit is contained in:
@ -29,7 +29,7 @@ namespace RageCoop.Client
|
|||||||
{
|
{
|
||||||
if (p.InternalEndPoint!=null && p.ExternalEndPoint!=null && (p.Connection==null || p.Connection.Status==NetConnectionStatus.Disconnected))
|
if (p.InternalEndPoint!=null && p.ExternalEndPoint!=null && (p.Connection==null || p.Connection.Status==NetConnectionStatus.Disconnected))
|
||||||
{
|
{
|
||||||
Main.Logger.Trace($"Sending HolePunch message to {p.InternalEndPoint},{p.ExternalEndPoint}. {p.Username}:{p.PedID}");
|
Main.Logger.Trace($"Sending HolePunch message to {p.InternalEndPoint},{p.ExternalEndPoint}. {p.Username}:{p.ID}");
|
||||||
var msg = Networking.Peer.CreateMessage();
|
var msg = Networking.Peer.CreateMessage();
|
||||||
new Packets.HolePunch
|
new Packets.HolePunch
|
||||||
{
|
{
|
||||||
@ -69,7 +69,7 @@ namespace RageCoop.Client
|
|||||||
puncher.HolePunchStatus=(byte)(p.Status+1);
|
puncher.HolePunchStatus=(byte)(p.Status+1);
|
||||||
if (p.Status>=3)
|
if (p.Status>=3)
|
||||||
{
|
{
|
||||||
Main.Logger.Debug("HolePunch sucess: "+from+", "+puncher.PedID);
|
Main.Logger.Debug("HolePunch sucess: "+from+", "+puncher.ID);
|
||||||
if (puncher.ConnectWhenPunched && (puncher.Connection==null || puncher.Connection.Status==NetConnectionStatus.Disconnected))
|
if (puncher.ConnectWhenPunched && (puncher.Connection==null || puncher.Connection.Status==NetConnectionStatus.Disconnected))
|
||||||
{
|
{
|
||||||
Main.Logger.Debug("Connecting to peer: "+from);
|
Main.Logger.Debug("Connecting to peer: "+from);
|
||||||
|
@ -141,7 +141,7 @@ namespace RageCoop.Client
|
|||||||
{
|
{
|
||||||
var p = new Player
|
var p = new Player
|
||||||
{
|
{
|
||||||
PedID = packet.PedID,
|
ID = packet.PedID,
|
||||||
Username= packet.Username,
|
Username= packet.Username,
|
||||||
};
|
};
|
||||||
PlayerList.SetPlayer(packet.PedID, packet.Username);
|
PlayerList.SetPlayer(packet.PedID, packet.Username);
|
||||||
|
@ -67,12 +67,12 @@ namespace RageCoop.Client
|
|||||||
if (Players.TryGetValue(id, out p))
|
if (Players.TryGetValue(id, out p))
|
||||||
{
|
{
|
||||||
p.Username=username;
|
p.Username=username;
|
||||||
p.PedID=id;
|
p.ID=id;
|
||||||
p._latencyToServer=latency;
|
p._latencyToServer=latency;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
p = new Player { PedID=id, Username=username, _latencyToServer=latency };
|
p = new Player { ID=id, Username=username, _latencyToServer=latency };
|
||||||
Players.Add(id, p);
|
Players.Add(id, p);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -90,7 +90,7 @@ namespace RageCoop.Client
|
|||||||
{
|
{
|
||||||
p.FakeBlip=World.CreateBlip(p.Position);
|
p.FakeBlip=World.CreateBlip(p.Position);
|
||||||
}
|
}
|
||||||
if (EntityPool.PedExists(p.PedID))
|
if (EntityPool.PedExists(p.ID))
|
||||||
{
|
{
|
||||||
p.FakeBlip.DisplayType = BlipDisplayType.NoDisplay;
|
p.FakeBlip.DisplayType = BlipDisplayType.NoDisplay;
|
||||||
}
|
}
|
||||||
@ -139,32 +139,32 @@ namespace RageCoop.Client
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal class Player
|
public class Player
|
||||||
{
|
{
|
||||||
public byte HolePunchStatus { get; set; } = 1;
|
public byte HolePunchStatus { get; internal set; } = 1;
|
||||||
public bool IsHost;
|
public bool IsHost { get; internal set; }
|
||||||
public string Username { get; internal set; }
|
public string Username { get; internal set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Universal character ID.
|
/// Universal ped ID.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public int PedID
|
public int ID
|
||||||
{
|
{
|
||||||
get; internal set;
|
get; internal set;
|
||||||
}
|
}
|
||||||
public IPEndPoint InternalEndPoint { get; set; }
|
public IPEndPoint InternalEndPoint { get; internal set; }
|
||||||
public IPEndPoint ExternalEndPoint { get; set; }
|
public IPEndPoint ExternalEndPoint { get; internal set; }
|
||||||
public bool ConnectWhenPunched { get; set; }
|
internal bool ConnectWhenPunched { get; set; }
|
||||||
public Blip FakeBlip { get; set; }
|
public Blip FakeBlip { get; internal set; }
|
||||||
public Vector3 Position { get; set; }
|
public Vector3 Position { get; internal set; }
|
||||||
public SyncedPed Character { get; set; }
|
public SyncedPed Character { get; internal set; }
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Player round-trip time in seconds, will be the latency to server if not using P2P connection.
|
/// Player round-trip time in seconds, will be the rtt to server if not using P2P connection.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public float Ping => Main.LocalPlayerID==PedID ? Networking.Latency*2 : (HasDirectConnection ? Connection.AverageRoundtripTime : _latencyToServer*2);
|
public float Ping => Main.LocalPlayerID==ID ? Networking.Latency*2 : (HasDirectConnection ? Connection.AverageRoundtripTime : _latencyToServer*2);
|
||||||
public float PacketTravelTime => HasDirectConnection ? Connection.AverageRoundtripTime/2 : Networking.Latency+_latencyToServer;
|
public float PacketTravelTime => HasDirectConnection ? Connection.AverageRoundtripTime/2 : Networking.Latency+_latencyToServer;
|
||||||
public float _latencyToServer = 0;
|
internal float _latencyToServer = 0;
|
||||||
public bool DisplayNameTag { get; set; } = true;
|
public bool DisplayNameTag { get; set; } = true;
|
||||||
public NetConnection Connection { get; set; }
|
public NetConnection Connection { get; internal set; }
|
||||||
public bool HasDirectConnection => Connection?.Status==NetConnectionStatus.Connected;
|
public bool HasDirectConnection => Connection?.Status == NetConnectionStatus.Connected;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ using RageCoop.Core;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
|
||||||
namespace RageCoop.Client.Scripting
|
namespace RageCoop.Client.Scripting
|
||||||
{
|
{
|
||||||
@ -212,13 +213,12 @@ namespace RageCoop.Client.Scripting
|
|||||||
/// Get a <see cref="Core.Logger"/> that RAGECOOP is currently using.
|
/// Get a <see cref="Core.Logger"/> that RAGECOOP is currently using.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static Logger Logger
|
public static Logger Logger => Main.Logger;
|
||||||
{
|
/// <summary>
|
||||||
get
|
/// Get all players indexed by their ID
|
||||||
{
|
/// </summary>
|
||||||
return Main.Logger;
|
public static Dictionary<int,Player> Players => new Dictionary<int, Player>(PlayerList.Players);
|
||||||
}
|
|
||||||
}
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region FUNCTIONS
|
#region FUNCTIONS
|
||||||
@ -246,6 +246,15 @@ namespace RageCoop.Client.Scripting
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// List all servers from master server address
|
||||||
|
/// </summary>
|
||||||
|
/// <returns></returns>
|
||||||
|
public static List<ServerInfo> ListServers()
|
||||||
|
{
|
||||||
|
return JsonConvert.DeserializeObject<List<ServerInfo>>(HttpHelper.DownloadString(Main.Settings.MasterServer));
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Send a local chat message to this player
|
/// Send a local chat message to this player
|
||||||
/// </summary>
|
/// </summary>
|
||||||
|
@ -114,10 +114,6 @@ namespace RageCoop.Client
|
|||||||
Function.Call(Hash.SET_NUMBER_OF_PARKED_VEHICLES, 0);
|
Function.Call(Hash.SET_NUMBER_OF_PARKED_VEHICLES, 0);
|
||||||
Function.Call(Hash.SET_DISTANT_CARS_ENABLED, false);
|
Function.Call(Hash.SET_DISTANT_CARS_ENABLED, false);
|
||||||
Function.Call(Hash.DISABLE_VEHICLE_DISTANTLIGHTS, true);
|
Function.Call(Hash.DISABLE_VEHICLE_DISTANTLIGHTS, true);
|
||||||
|
|
||||||
if (Networking.IsOnServer)
|
|
||||||
{
|
|
||||||
|
|
||||||
foreach (Ped ped in World.GetAllPeds())
|
foreach (Ped ped in World.GetAllPeds())
|
||||||
{
|
{
|
||||||
SyncedPed c = EntityPool.GetPedByHandle(ped.Handle);
|
SyncedPed c = EntityPool.GetPedByHandle(ped.Handle);
|
||||||
@ -136,7 +132,7 @@ namespace RageCoop.Client
|
|||||||
foreach (Vehicle veh in World.GetAllVehicles())
|
foreach (Vehicle veh in World.GetAllVehicles())
|
||||||
{
|
{
|
||||||
SyncedVehicle v = veh.GetSyncEntity();
|
SyncedVehicle v = veh.GetSyncEntity();
|
||||||
if (v.MainVehicle == Game.Player.LastVehicle || v.MainVehicle==Game.Player.Character.CurrentVehicle)
|
if (v.MainVehicle == Game.Player.LastVehicle || v.MainVehicle == Game.Player.Character.CurrentVehicle)
|
||||||
{
|
{
|
||||||
// Don't delete player's vehicle
|
// Don't delete player's vehicle
|
||||||
continue;
|
continue;
|
||||||
@ -149,32 +145,6 @@ namespace RageCoop.Client
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
foreach (Ped ped in World.GetAllPeds())
|
|
||||||
{
|
|
||||||
if ((ped != Game.Player.Character) && (ped.PopulationType != EntityPopulationType.Mission))
|
|
||||||
{
|
|
||||||
// Main.Logger.Trace($"Removing ped {ped.Handle}. Reason:RemoveTraffic");
|
|
||||||
ped.CurrentVehicle?.Delete();
|
|
||||||
ped.Kill();
|
|
||||||
ped.Delete();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
var last = Game.Player.Character.LastVehicle;
|
|
||||||
var current = Game.Player.Character.CurrentVehicle;
|
|
||||||
foreach (Vehicle veh in World.GetAllVehicles())
|
|
||||||
{
|
|
||||||
if (veh.PopulationType != EntityPopulationType.Mission && veh != last && veh!=current)
|
|
||||||
{
|
|
||||||
// Main.Logger.Debug($"Removing Vehicle {veh.Handle}. Reason:ClearTraffic");
|
|
||||||
|
|
||||||
veh.Delete();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,9 +5,12 @@ using Newtonsoft.Json;
|
|||||||
|
|
||||||
namespace RageCoop.Core
|
namespace RageCoop.Core
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
internal class ServerInfo
|
/// A json object representing a server's information as annouced to master server.
|
||||||
|
/// </summary>
|
||||||
|
public class ServerInfo
|
||||||
{
|
{
|
||||||
|
#pragma warning disable 1591
|
||||||
public string address { get; set; }
|
public string address { get; set; }
|
||||||
public string port { get; set; }
|
public string port { get; set; }
|
||||||
public string name { get; set; }
|
public string name { get; set; }
|
||||||
|
Reference in New Issue
Block a user