cubrr / boson Goto Github PK
View Code? Open in Web Editor NEWA dedicated server administration plugin for TeknoMW3
License: GNU General Public License v3.0
A dedicated server administration plugin for TeknoMW3
License: GNU General Public License v3.0
A rank shall contain an integer level, a string description and a list of commands.
The level shall be an unique integer where the lowest number represents a rank with the least rights and the highest number represents a rank with the most rights. The description string shall be used to provide context to other users about the rank. The list of commands contains the base commands for the rank.
interface IRank
{
IEnumerable<ICommand> Commands { get; }
string Description { get; }
int Level { get; }
}
An account shall consist of a rank, unique username, password and VIP status flag.
If the account is the guest account used for unregistered clients, the username shall be "Guest", the password null
and vip status false
.
interface IUserAccount
{
string Username { get; }
string Password { get; }
IRank Rank { get; }
bool Vip { get; }
}
abstract class IGuestAccount : IUserAccount
{
public virtual string Username { get { return "Guest"; } }
public virtual string Password { get { return null; } }
public abstract IRank Rank { get; protected set; }
public virtual bool Vip { get { return false; } }
}
The account manager shall handle client registrations, logins, password changes.
interface IAccountManager
{
HashSet<IUserAccount> AuthenticatedUsers { get; }
/* Return type undefined for now */ void Authenticate(IUserAccount userAccount, string password);
/* Return type undefined for now */ void SignOut(IUserAccount userAccount);
/* Return type undefined for now */ void Register(IUserAccount userAccount, string password);
/* Return type undefined for now */ void UpdatePassword(IUserAccount userAccount, string currentPassword, string newPassword);
}
Long plugin responses to clients should be paginated with manual page turning.
PaginatedMessage
class with IList<string>
containing the pages and a CurrentPage
property.BosonClient
and let the command check if the client has any paginated messages pending?Line 96 in 4fa2af6
public BaseScript.EventEat CallCommand(string commandName, IList<string> arguments, ChatMessage message, out string exceptionMessage)
{
// TODO: Maybe some day we can call commands remotely
exceptionMessage = null;
ICommand command;
...
Implement spell checking for commands. The Levenshtein algo from the old plugin could be used.
jCuber: !halp
[Q - BOSON] Did you mean: !help?
Need to be able to blacklist following entity properties:
With the new plugin persistence feature in the upcoming Tekno 2.7.4.0, this feature is a must.
Need the following models:
Commands should...
Should we consider making the plugin fully modular? Note to self: don't use Assembly.LoadFile
.
Todo: EXPLORE APPDOMAINS MORE IN THE PLUGIN CONTEXT
Method | Pros | Cons | Notes |
---|---|---|---|
Assembly.LoadFrom the entire shebang |
Can't unload assemblies without unloading the AppDomain | ||
Assembly.LoadFrom from main plugin DLL to load each module |
Can't unload assemblies without unloading the AppDomain | ||
Separate AppDomains and shadow copying[1] [2] | Enables hot module updates; no restarts. | How to do appdomain interop? Will Mono crash? | https://github.com/jduv/AppDomainToolkit |
Use separate program which calls embedded Mono methods that unloads the assemblies and fastrestarts | Complete control and access | Need someone to run the program...unless we can drop an executable. Also, still need to restart. | If managed: Marshal.GetDelegateForFunctionPointer |
Need to create logger outputs for SQLite, text files and dedicated server window.
We want to be able to unit test this shit
Lift log message literals to XML files or resources in satellite assemblies.
Prerequisite: #6
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.