ServerScript update

This commit is contained in:
EntenKoeniq
2021-08-18 12:47:36 +02:00
parent 3c05b11292
commit 8f9eefb9ce
4 changed files with 74 additions and 39 deletions

View File

@ -9,7 +9,7 @@ namespace FirstGameMode
[Command("hello")]
public static void HelloCommand(CommandContext ctx)
{
ServerScript.SendChatMessageToPlayer(ctx.Player.Username, "Hello " + ctx.Player.Username + " :)");
API.SendChatMessageToPlayer(ctx.Player.Username, "Hello " + ctx.Player.Username + " :)");
}
[Command("inrange")]
@ -17,18 +17,18 @@ namespace FirstGameMode
{
if (ctx.Player.Ped.IsInRangeOf(new LVector3(0f, 0f, 75f), 7f))
{
ServerScript.SendChatMessageToPlayer(ctx.Player.Username, "You are in range! :)");
API.SendChatMessageToPlayer(ctx.Player.Username, "You are in range! :)");
}
else
{
ServerScript.SendChatMessageToPlayer(ctx.Player.Username, "You are not in range! :(");
API.SendChatMessageToPlayer(ctx.Player.Username, "You are not in range! :(");
}
}
[Command("online")]
public static void OnlineCommand(CommandContext ctx)
{
ServerScript.SendChatMessageToPlayer(ctx.Player.Username, ServerScript.GetAllPlayersCount() + " player online!");
API.SendChatMessageToPlayer(ctx.Player.Username, API.GetAllPlayersCount() + " player online!");
}
[Command("kick")]
@ -36,11 +36,11 @@ namespace FirstGameMode
{
if (ctx.Args.Length < 2)
{
ServerScript.SendChatMessageToPlayer(ctx.Player.Username, "Please use \"/kick <USERNAME> <REASON>\"");
API.SendChatMessageToPlayer(ctx.Player.Username, "Please use \"/kick <USERNAME> <REASON>\"");
return;
}
ServerScript.KickPlayerByUsername(ctx.Args[0], ctx.Args.Skip(1).ToArray());
API.KickPlayerByUsername(ctx.Args[0], ctx.Args.Skip(1).ToArray());
}
}
}

View File

@ -1,7 +1,9 @@
using CoopServer;
using CoopServer.Entities;
using System.ComponentModel;
using System.Timers;
using CoopServer;
using CoopServer.Entities;
namespace FirstGameMode
{
public class Main : ServerScript
@ -9,39 +11,45 @@ namespace FirstGameMode
private static readonly Timer RunningSinceTimer = new() { Interval = 1000 };
private static int RunningSince = 0;
public override void Start()
public Main()
{
RunningSinceTimer.Start();
RunningSinceTimer.Elapsed += new ElapsedEventHandler((sender, e) => RunningSince += 1);
RegisterCommand("running", RunningCommand);
RegisterCommands<Commands>();
API.OnPlayerConnected += OnPlayerConnected;
API.OnPlayerDisconnected += OnPlayerDisconnected;
API.OnChatMessage += OnChatMessage;
API.RegisterCommand("running", RunningCommand);
API.RegisterCommands<Commands>();
}
public static void RunningCommand(CommandContext ctx)
{
SendChatMessageToPlayer(ctx.Player.Username, "Server has been running for: " + RunningSince + " seconds!");
API.SendChatMessageToPlayer(ctx.Player.Username, "Server has been running for: " + RunningSince + " seconds!");
}
public override void OnPlayerConnect(EntitiesPlayer client)
public static void OnPlayerConnected(EntitiesPlayer client)
{
SendChatMessageToAll("Player " + client.Username + " connected!");
API.SendChatMessageToAll("Player " + client.Username + " connected!");
}
public override void OnPlayerDisconnect(EntitiesPlayer player, string reason)
public static void OnPlayerDisconnected(EntitiesPlayer player)
{
SendChatMessageToAll(player.Username + " left the server, reason: " + reason);
API.SendChatMessageToAll("Player " + player.Username + " disconnected!");
}
public override bool OnChatMessage(string username, string message)
public static void OnChatMessage(string username, string message, CancelEventArgs e)
{
e.Cancel = true;
if (message.StartsWith("EASTEREGG"))
{
SendChatMessageToPlayer(username, "You found the EASTEREGG! *-*");
return true;
API.SendChatMessageToPlayer(username, "You found the EASTEREGG! *-*");
return;
}
return false;
API.SendChatMessageToAll(message, username);
}
}
}

View File

@ -152,7 +152,7 @@ namespace CoopServer
}
else
{
GameMode.Start();
GameMode.API.InvokeStart();
}
}
}
@ -476,7 +476,7 @@ namespace CoopServer
if (GameMode != null)
{
GameMode.OnPlayerConnect(Players[packet.Player]);
GameMode.API.InvokePlayerConnect(Players[packet.Player]);
}
List<NetConnection> playerList = Util.FilterAllLocal(local);
@ -518,7 +518,7 @@ namespace CoopServer
{
if (GameMode != null)
{
GameMode.OnPlayerDisconnect(Players[packet.Player], reason);
GameMode.API.InvokePlayerDisconnect(Players[packet.Player], reason);
}
List<NetConnection> playerList = Util.FilterAllLocal(packet.Player);
@ -644,22 +644,24 @@ namespace CoopServer
}
else
{
string username = packet.Username;
NetConnection userConnection = Util.GetConnectionByUsername(packet.Username);
if (userConnection == null)
{
return;
}
packet = new()
outgoingMessage = MainNetServer.CreateMessage();
new ChatMessagePacket()
{
Username = "Server",
Message = "Command not found!"
};
outgoingMessage = MainNetServer.CreateMessage();
packet.PacketToNetOutGoingMessage(outgoingMessage);
MainNetServer.SendMessage(outgoingMessage, MainNetServer.Connections.Find(con => con.RemoteUniqueIdentifier == Players.First(x => x.Value.Username == username).Key), NetDeliveryMethod.ReliableOrdered, 0);
}.PacketToNetOutGoingMessage(outgoingMessage);
MainNetServer.SendMessage(outgoingMessage, userConnection, NetDeliveryMethod.ReliableOrdered, 0);
}
return;
}
else if (GameMode.OnChatMessage(packet.Username, packet.Message))
else if (GameMode.API.InvokeChatMessage(packet.Username, packet.Message))
{
return;
}

View File

@ -1,29 +1,53 @@
using System;
using System.Collections.Generic;
using System.ComponentModel;
using Lidgren.Network;
namespace CoopServer
{
public class ServerScript
public abstract class ServerScript
{
public virtual void Start() { }
public virtual void OnPlayerConnect(Entities.EntitiesPlayer player)
{
Logging.Info("New player [" + player.SocialClubName + " | " + player.Username + "] connected!");
public API API = new();
}
public virtual void OnPlayerDisconnect(Entities.EntitiesPlayer player, string reason)
public class API
{
Logging.Info(player.Username + " left the server, reason: " + reason);
#region DELEGATES
public delegate void ChatEvent(string username, string message, CancelEventArgs cancel);
public delegate void PlayerEvent(Entities.EntitiesPlayer player);
#endregion
#region EVENTS
public event EventHandler OnStart;
public event ChatEvent OnChatMessage;
public event PlayerEvent OnPlayerConnected;
public event PlayerEvent OnPlayerDisconnected;
internal void InvokeStart()
{
OnStart?.Invoke(this, EventArgs.Empty);
}
public virtual bool OnChatMessage(string username, string message)
internal void InvokePlayerConnect(Entities.EntitiesPlayer player)
{
return false;
OnPlayerConnected?.Invoke(player);
}
internal void InvokePlayerDisconnect(Entities.EntitiesPlayer player, string reason)
{
OnPlayerDisconnected?.Invoke(player);
}
internal bool InvokeChatMessage(string username, string message)
{
var args = new CancelEventArgs(false);
OnChatMessage?.Invoke(username, message, args);
return args.Cancel;
}
#endregion
#region FUNCTIONS
public static List<long> GetAllConnections()
{
List<long> result = new();
@ -121,6 +145,7 @@ namespace CoopServer
{
Server.RegisterCommands<T>();
}
#endregion
}
public class Command