2021-08-15 07:54:25 +02:00
using System ;
2022-06-24 16:49:59 +08:00
using RageCoop.Core.Scripting ;
2021-08-14 21:49:23 +02:00
2022-06-04 18:09:42 +08:00
namespace RageCoop.Server.Scripting
2021-08-14 21:49:23 +02:00
{
2022-06-12 15:39:32 +08:00
/// <summary>
2022-06-23 14:10:16 +08:00
/// 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.
2022-06-12 15:39:32 +08:00
/// </summary>
2022-07-01 12:22:31 +08:00
public abstract class ServerScript
2021-11-27 22:44:00 +01:00
{
2022-06-12 15:39:32 +08:00
/// <summary>
2022-07-01 13:54:18 +08:00
/// This method would be called from listener thread after all scripts have been loaded.
2022-06-12 15:39:32 +08:00
/// </summary>
2022-07-01 12:22:31 +08:00
public abstract void OnStart ( ) ;
2021-08-18 11:47:59 +02:00
2022-04-12 06:04:02 +02:00
/// <summary>
2022-07-01 13:54:18 +08:00
/// This method would be called from listener thread when the server is shutting down, you MUST terminate all background jobs/threads in this method.
2022-04-12 06:04:02 +02:00
/// </summary>
2022-07-01 12:22:31 +08:00
public abstract void OnStop ( ) ;
2022-06-23 14:10:16 +08:00
2022-07-01 13:54:18 +08:00
/// <summary>
2022-07-02 11:23:12 +08:00
/// Get the <see cref="Scripting.API"/> instance that can be used to control the server.
2022-07-01 13:54:18 +08:00
/// </summary>
2022-06-23 14:10:16 +08:00
public API API { get ; set ; }
2022-07-01 12:22:31 +08:00
/// <summary>
2022-07-02 11:23:12 +08:00
/// Get the <see cref="ServerResource"/> this script belongs to, this property won't be initiated before <see cref="OnStart"/>.
2022-07-01 12:22:31 +08:00
/// </summary>
public ServerResource CurrentResource { get ; internal set ; }
2022-07-01 13:54:18 +08:00
/// <summary>
/// Get the <see cref="ResourceFile"/> that the script belongs to.
/// </summary>
2022-07-01 12:22:31 +08:00
public ResourceFile CurrentFile { get ; internal set ; }
2022-04-12 06:04:02 +02:00
}
2022-07-01 13:54:18 +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>
2022-04-12 06:04:02 +02:00
[AttributeUsage(AttributeTargets.Method, Inherited = false)]
2021-12-02 23:05:22 +01:00
public class Command : Attribute
2021-08-18 11:47:59 +02:00
{
/// <summary>
/// Sets name of the command
/// </summary>
public string Name { get ; set ; }
2021-12-16 14:52:48 +01:00
/// <summary>
/// Set the Usage (Example: "Please use "/help"". ArgsLength required!)
/// </summary>
2021-12-02 23:05:22 +01:00
public string Usage { get ; set ; }
2021-12-16 14:52:48 +01:00
/// <summary>
/// Set the length of arguments (Example: 2 for "/message USERNAME MESSAGE". Usage required!)
/// </summary>
2021-12-02 23:05:22 +01:00
public short ArgsLength { get ; set ; }
2022-07-01 17:00:42 +08:00
/// <summary>
///
/// </summary>
/// <param name="name">Name of the command</param>
public Command ( string name )
2021-08-15 07:54:25 +02:00
{
2021-08-18 11:47:59 +02:00
Name = name ;
2021-08-15 07:54:25 +02:00
}
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>
/// The context containg command information.
/// </summary>
2021-08-18 11:47:59 +02:00
public class CommandContext
{
/// <summary>
/// Gets the client which executed the command
/// </summary>
2021-08-26 17:01:32 +02:00
public Client Client { get ; internal set ; }
2021-08-18 11:47:59 +02:00
/// <summary>
2021-12-16 14:52:48 +01:00
/// Gets the arguments (Example: "/message USERNAME MESSAGE", Args[0] for USERNAME)
2021-08-18 11:47:59 +02:00
/// </summary>
public string [ ] Args { get ; internal set ; }
}
2021-08-14 21:49:23 +02:00
}