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