Added support for multiple resources
This commit is contained in:
@ -3,7 +3,7 @@
|
|||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net6.0</TargetFramework>
|
<TargetFramework>net6.0</TargetFramework>
|
||||||
<AssemblyVersion>1.10.1.0001</AssemblyVersion>
|
<AssemblyVersion>1.11.0.0001</AssemblyVersion>
|
||||||
<FileVersion>1.0.0.0</FileVersion>
|
<FileVersion>1.0.0.0</FileVersion>
|
||||||
<RepositoryUrl>https://github.com/GTACOOP-R/GTACoop-R</RepositoryUrl>
|
<RepositoryUrl>https://github.com/GTACOOP-R/GTACoop-R</RepositoryUrl>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
namespace CoopServer
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace CoopServer
|
||||||
{
|
{
|
||||||
public struct PlayerData
|
public struct PlayerData
|
||||||
{
|
{
|
||||||
@ -14,9 +16,12 @@
|
|||||||
LastPosition = CurrentPosition;
|
LastPosition = CurrentPosition;
|
||||||
CurrentPosition = value;
|
CurrentPosition = value;
|
||||||
|
|
||||||
if (Server.MainResource != null && !LVector3.Equals(CurrentPosition, LastPosition))
|
if (Server.Resources.Any() && !LVector3.Equals(CurrentPosition, LastPosition))
|
||||||
{
|
{
|
||||||
Server.MainResource.InvokePlayerPositionUpdate(this);
|
foreach (Resource resource in Server.Resources)
|
||||||
|
{
|
||||||
|
resource.InvokePlayerPositionUpdate(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -26,9 +31,12 @@
|
|||||||
get => CurrentHealth;
|
get => CurrentHealth;
|
||||||
set
|
set
|
||||||
{
|
{
|
||||||
if (CurrentHealth != value && Server.MainResource != null)
|
if (Server.Resources.Any() && CurrentHealth != value)
|
||||||
{
|
{
|
||||||
Server.MainResource.InvokePlayerHealthUpdate(this);
|
foreach (Resource resource in Server.Resources)
|
||||||
|
{
|
||||||
|
resource.InvokePlayerHealthUpdate(this);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
CurrentHealth = value;
|
CurrentHealth = value;
|
||||||
|
@ -30,7 +30,7 @@ namespace CoopServer
|
|||||||
|
|
||||||
public static NetServer MainNetServer;
|
public static NetServer MainNetServer;
|
||||||
|
|
||||||
public static Resource MainResource = null;
|
public static List<Resource> Resources = new();
|
||||||
public static Dictionary<Command, Action<CommandContext>> Commands;
|
public static Dictionary<Command, Action<CommandContext>> Commands;
|
||||||
|
|
||||||
public static readonly List<Client> Clients = new();
|
public static readonly List<Client> Clients = new();
|
||||||
@ -171,12 +171,16 @@ namespace CoopServer
|
|||||||
#endregion
|
#endregion
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!string.IsNullOrEmpty(MainSettings.Resource))
|
if (MainSettings.Resources.Any())
|
||||||
|
{
|
||||||
|
Commands = new();
|
||||||
|
|
||||||
|
MainSettings.Resources.ForEach(x =>
|
||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
string resourcepath = AppDomain.CurrentDomain.BaseDirectory + "resources" + Path.DirectorySeparatorChar + MainSettings.Resource + ".dll";
|
string resourcepath = AppDomain.CurrentDomain.BaseDirectory + "resources" + Path.DirectorySeparatorChar + x + ".dll";
|
||||||
Logging.Info($"Loading resource {resourcepath}...");
|
Logging.Info($"Loading resource \"{x}.dll\"...");
|
||||||
|
|
||||||
Assembly asm = Assembly.LoadFrom(resourcepath);
|
Assembly asm = Assembly.LoadFrom(resourcepath);
|
||||||
Type[] types = asm.GetExportedTypes();
|
Type[] types = asm.GetExportedTypes();
|
||||||
@ -189,11 +193,9 @@ namespace CoopServer
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Commands = new();
|
|
||||||
|
|
||||||
if (Activator.CreateInstance(enumerable.ToArray()[0]) is ServerScript script)
|
if (Activator.CreateInstance(enumerable.ToArray()[0]) is ServerScript script)
|
||||||
{
|
{
|
||||||
MainResource = new(script);
|
Resources.Add(new(script));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -203,8 +205,9 @@ namespace CoopServer
|
|||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Logging.Error(e.Message);
|
Logging.Error(e.InnerException.Message);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Listen();
|
Listen();
|
||||||
@ -427,8 +430,7 @@ namespace CoopServer
|
|||||||
packet = new ModPacket();
|
packet = new ModPacket();
|
||||||
packet.NetIncomingMessageToPacket(message);
|
packet.NetIncomingMessageToPacket(message);
|
||||||
ModPacket modPacket = (ModPacket)packet;
|
ModPacket modPacket = (ModPacket)packet;
|
||||||
if (MainResource != null &&
|
if (Resources.Any(x => x.InvokeModPacketReceived(modPacket.NetHandle, modPacket.Target, modPacket.Mod, modPacket.CustomPacketID, modPacket.Bytes)))
|
||||||
MainResource.InvokeModPacketReceived(modPacket.NetHandle, modPacket.Target, modPacket.Mod, modPacket.CustomPacketID, modPacket.Bytes))
|
|
||||||
{
|
{
|
||||||
// Was canceled
|
// Was canceled
|
||||||
}
|
}
|
||||||
@ -504,14 +506,17 @@ namespace CoopServer
|
|||||||
}
|
}
|
||||||
|
|
||||||
Logging.Warning("Server is shutting down!");
|
Logging.Warning("Server is shutting down!");
|
||||||
if (MainResource != null)
|
if (Resources.Any())
|
||||||
|
{
|
||||||
|
Resources.ForEach(x =>
|
||||||
{
|
{
|
||||||
// Waiting for resource...
|
// Waiting for resource...
|
||||||
while (!MainResource.ReadyToStop)
|
while (!x.ReadyToStop)
|
||||||
{
|
{
|
||||||
// 16 milliseconds to sleep to reduce CPU usage
|
// 16 milliseconds to sleep to reduce CPU usage
|
||||||
Thread.Sleep(1000 / 60);
|
Thread.Sleep(1000 / 60);
|
||||||
}
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MainNetServer.Connections.Count > 0)
|
if (MainNetServer.Connections.Count > 0)
|
||||||
@ -617,10 +622,7 @@ namespace CoopServer
|
|||||||
// Accept the connection and send back a new handshake packet with the connection ID
|
// Accept the connection and send back a new handshake packet with the connection ID
|
||||||
local.Approve(outgoingMessage);
|
local.Approve(outgoingMessage);
|
||||||
|
|
||||||
if (MainResource != null)
|
Resources.ForEach(x => x.InvokePlayerHandshake(tmpClient));
|
||||||
{
|
|
||||||
MainResource.InvokePlayerHandshake(tmpClient);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// The connection has been approved, now we need to send all other players to the new player and the new player to all players
|
// The connection has been approved, now we need to send all other players to the new player and the new player to all players
|
||||||
@ -666,9 +668,9 @@ namespace CoopServer
|
|||||||
MainNetServer.SendMessage(outgoingMessage, clients, NetDeliveryMethod.ReliableOrdered, 0);
|
MainNetServer.SendMessage(outgoingMessage, clients, NetDeliveryMethod.ReliableOrdered, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MainResource != null)
|
if (Resources.Any())
|
||||||
{
|
{
|
||||||
MainResource.InvokePlayerConnected(localClient);
|
Resources.ForEach(x => x.InvokePlayerConnected(localClient));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -703,9 +705,9 @@ namespace CoopServer
|
|||||||
|
|
||||||
Clients.Remove(localClient);
|
Clients.Remove(localClient);
|
||||||
|
|
||||||
if (MainResource != null)
|
if (Resources.Any())
|
||||||
{
|
{
|
||||||
MainResource.InvokePlayerDisconnected(localClient);
|
Resources.ForEach(x => x.InvokePlayerDisconnected(localClient));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -747,9 +749,9 @@ namespace CoopServer
|
|||||||
MainNetServer.SendMessage(outgoingMessage, x, NetDeliveryMethod.UnreliableSequenced, (int)ConnectionChannel.Player);
|
MainNetServer.SendMessage(outgoingMessage, x, NetDeliveryMethod.UnreliableSequenced, (int)ConnectionChannel.Player);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (MainResource != null)
|
if (Resources.Any())
|
||||||
{
|
{
|
||||||
MainResource.InvokePlayerUpdate(client);
|
Resources.ForEach(x => x.InvokePlayerUpdate(client));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -787,9 +789,9 @@ namespace CoopServer
|
|||||||
MainNetServer.SendMessage(outgoingMessage, x, NetDeliveryMethod.UnreliableSequenced, (int)ConnectionChannel.Player);
|
MainNetServer.SendMessage(outgoingMessage, x, NetDeliveryMethod.UnreliableSequenced, (int)ConnectionChannel.Player);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (MainResource != null)
|
if (Resources.Any())
|
||||||
{
|
{
|
||||||
MainResource.InvokePlayerUpdate(client);
|
Resources.ForEach(x => x.InvokePlayerUpdate(client));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -827,9 +829,9 @@ namespace CoopServer
|
|||||||
MainNetServer.SendMessage(outgoingMessage, x, NetDeliveryMethod.UnreliableSequenced, (int)ConnectionChannel.Player);
|
MainNetServer.SendMessage(outgoingMessage, x, NetDeliveryMethod.UnreliableSequenced, (int)ConnectionChannel.Player);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (MainResource != null)
|
if (Resources.Any())
|
||||||
{
|
{
|
||||||
MainResource.InvokePlayerUpdate(client);
|
Resources.ForEach(x => x.InvokePlayerUpdate(client));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -867,9 +869,9 @@ namespace CoopServer
|
|||||||
MainNetServer.SendMessage(outgoingMessage, x, NetDeliveryMethod.UnreliableSequenced, (int)ConnectionChannel.Player);
|
MainNetServer.SendMessage(outgoingMessage, x, NetDeliveryMethod.UnreliableSequenced, (int)ConnectionChannel.Player);
|
||||||
});
|
});
|
||||||
|
|
||||||
if (MainResource != null)
|
if (Resources.Any())
|
||||||
{
|
{
|
||||||
MainResource.InvokePlayerUpdate(client);
|
Resources.ForEach(x => x.InvokePlayerUpdate(client));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -878,7 +880,7 @@ namespace CoopServer
|
|||||||
{
|
{
|
||||||
NetOutgoingMessage outgoingMessage;
|
NetOutgoingMessage outgoingMessage;
|
||||||
|
|
||||||
if (MainResource != null)
|
if (Resources.Any())
|
||||||
{
|
{
|
||||||
if (packet.Message.StartsWith('/'))
|
if (packet.Message.StartsWith('/'))
|
||||||
{
|
{
|
||||||
@ -936,7 +938,7 @@ namespace CoopServer
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MainResource.InvokeChatMessage(packet.Username, packet.Message))
|
if (Resources.Any(x => x.InvokeChatMessage(packet.Username, packet.Message)))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
namespace CoopServer
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace CoopServer
|
||||||
{
|
{
|
||||||
public class Settings
|
public class Settings
|
||||||
{
|
{
|
||||||
@ -6,7 +8,7 @@
|
|||||||
public int MaxPlayers { get; set; } = 16;
|
public int MaxPlayers { get; set; } = 16;
|
||||||
public string Name { get; set; } = "GTACoop:R server";
|
public string Name { get; set; } = "GTACoop:R server";
|
||||||
public string WelcomeMessage { get; set; } = "Welcome on this server :)";
|
public string WelcomeMessage { get; set; } = "Welcome on this server :)";
|
||||||
public string Resource { get; set; } = "";
|
public List<string> Resources { get; set; } = new List<string>();
|
||||||
public bool Allowlist { get; set; } = false;
|
public bool Allowlist { get; set; } = false;
|
||||||
public bool NpcsAllowed { get; set; } = true;
|
public bool NpcsAllowed { get; set; } = true;
|
||||||
public bool ModsAllowed { get; set; } = false;
|
public bool ModsAllowed { get; set; } = false;
|
||||||
|
Reference in New Issue
Block a user