ServerScript update
This commit is contained in:
@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user