Files
RAGECOOP-V/Server/Scripting/ServerScript.cs

91 lines
2.9 KiB
C#
Raw Normal View History

2022-10-23 19:02:39 +08:00
using System;
using RageCoop.Core;
using RageCoop.Core.Scripting;
2021-08-14 21:49:23 +02:00
2022-10-23 19:02:39 +08:00
namespace RageCoop.Server.Scripting;
/// <summary>
/// Inherit from this class, constructor will be called automatically, but other scripts might have yet been loaded and
/// <see cref="API" /> will be null, you should use <see cref="OnStart" />. to initiate your script.
/// </summary>
public abstract class ServerScript
2021-08-14 21:49:23 +02:00
{
/// <summary>
2022-10-23 19:02:39 +08:00
/// Get the <see cref="Scripting.API" /> instance that can be used to control the server.
/// </summary>
2022-10-23 19:02:39 +08:00
public API API { get; set; }
2021-08-18 11:47:59 +02:00
2022-10-23 19:02:39 +08:00
/// <summary>
/// Get the <see cref="ServerResource" /> this script belongs to, this property won't be initiated before
/// <see cref="OnStart" />.
/// </summary>
public ServerResource CurrentResource { get; internal set; }
2022-07-01 12:22:31 +08:00
2022-10-23 19:02:39 +08:00
/// <summary>
/// Get the <see cref="ResourceFile" /> that the script belongs to.
/// </summary>
public ResourceFile CurrentFile { get; internal set; }
2022-07-01 13:54:18 +08:00
/// <summary>
2022-10-23 19:02:39 +08:00
/// Eqivalent of <see cref="ServerResource.Logger" /> in <see cref="CurrentResource" />
2022-07-01 13:54:18 +08:00
/// </summary>
2022-10-23 19:02:39 +08:00
public Logger Logger => CurrentResource.Logger;
2021-08-18 11:47:59 +02:00
2022-10-23 19:02:39 +08:00
/// <summary>
/// This method would be called from listener thread after all scripts have been loaded.
/// </summary>
public abstract void OnStart();
2022-10-23 19:02:39 +08:00
/// <summary>
/// This method would be called from listener thread when the server is shutting down, you MUST terminate all
/// background jobs/threads in this method.
/// </summary>
public abstract void OnStop();
}
2022-10-23 19:02:39 +08:00
/// <summary>
/// Decorate your method with this attribute and use <see cref="API.RegisterCommands{T}" /> or
/// <see cref="API.RegisterCommands(object)" /> to register commands.
/// </summary>
[AttributeUsage(AttributeTargets.Method, Inherited = false)]
public class Command : Attribute
{
/// <summary>
/// </summary>
/// <param name="name">Name of the command</param>
public Command(string name)
{
Name = name;
2021-08-14 21:49:23 +02:00
}
2021-08-18 11:47:59 +02:00
2022-07-01 13:54:18 +08:00
/// <summary>
2022-10-23 19:02:39 +08:00
/// Sets name of the command
2022-07-01 13:54:18 +08:00
/// </summary>
2022-10-23 19:02:39 +08:00
public string Name { get; set; }
2021-08-18 11:47:59 +02:00
2022-10-23 19:02:39 +08:00
/// <summary>
/// Set the Usage (Example: "Please use "/help"". ArgsLength required!)
/// </summary>
public string Usage { get; set; }
/// <summary>
/// Set the length of arguments (Example: 2 for "/message USERNAME MESSAGE". Usage required!)
/// </summary>
public short ArgsLength { get; set; }
2021-08-14 21:49:23 +02:00
}
2022-10-23 19:02:39 +08:00
/// <summary>
/// The context containg command information.
/// </summary>
public class CommandContext
{
/// <summary>
/// Gets the client which executed the command
/// </summary>
public Client Client { get; internal set; }
/// <summary>
/// Gets the arguments (Example: "/message USERNAME MESSAGE", Args[0] for USERNAME)
/// </summary>
public string[] Args { get; internal set; }
}