mirror of
https://github.com/danbulant/flying-squid
synced 2026-07-05 19:20:54 +00:00
fixes
This commit is contained in:
parent
19b5c9a9cc
commit
b51519e138
1 changed files with 71 additions and 71 deletions
|
|
@ -1,92 +1,88 @@
|
||||||
var Vec3 = require('vec3');
|
var Vec3 = require('vec3');
|
||||||
module.exports = inject;
|
module.exports = inject;
|
||||||
|
|
||||||
function inject(serv, player, options) {
|
class Command {
|
||||||
var hash = {};
|
constructor(params, parent, hash) {
|
||||||
|
this.params = params;
|
||||||
|
this.parent = parent;
|
||||||
|
this.hash = parent ? parent.hash : {};
|
||||||
|
|
||||||
class Command {
|
this.updateHistory();
|
||||||
constructor(params, parent) {
|
}
|
||||||
this.params = params;
|
|
||||||
this.parent = parent;
|
|
||||||
this.child = [];
|
|
||||||
|
|
||||||
this.updateHistory();
|
find(command) {
|
||||||
}
|
var res;
|
||||||
|
for(var key in this.hash) {
|
||||||
|
var space = this.hash[key].space(true);
|
||||||
|
if(space) space += '?';
|
||||||
|
|
||||||
static find(command) {
|
var ended = space + '(.*)';
|
||||||
var res;
|
|
||||||
for(var key in hash) {
|
|
||||||
var space = hash[key].space(true);
|
|
||||||
if(space) space += '?';
|
|
||||||
|
|
||||||
var ended = space + '(.*)';
|
var finded = command.match(new RegExp('^' + key + ended));
|
||||||
|
if(finded) {
|
||||||
var finded = command.match(new RegExp('^' + key + ended));
|
res = [this.hash[key], finded];
|
||||||
if(finded) {
|
|
||||||
res = [hash[key], finded];
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static use(command) {
|
return res;
|
||||||
var res = this.find(command);
|
}
|
||||||
|
|
||||||
if(res) {
|
use(command) {
|
||||||
var parse = res[0].params.parse;
|
var res = this.find(command);
|
||||||
if(parse) {
|
|
||||||
if(typeof parse == 'function') {
|
if(res) {
|
||||||
res[1] = parse(res[1][1]);
|
var parse = res[0].params.parse;
|
||||||
if(res[1] === false) {
|
if(parse) {
|
||||||
player.chat(res[0].params.usage ? 'Usage: ' + res[0].params.usage : 'Bad syntax');
|
if(typeof parse == 'function') {
|
||||||
return;
|
res[1] = parse(res[1][1]);
|
||||||
}
|
if(res[1] === false) {
|
||||||
} else {
|
return res[0].params.usage ? 'Usage: ' + res[0].params.usage : 'Bad syntax';
|
||||||
res[1] = res[1][1].match(parse);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
res[1].shift();
|
res[1] = res[1][1].match(parse);
|
||||||
}
|
}
|
||||||
|
|
||||||
res = res[0].params.action(res[1]);
|
|
||||||
if(res) player.chat('' + res);
|
|
||||||
} else {
|
} else {
|
||||||
player.chat('Command not found');
|
res[1].shift();
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
updateHistory() {
|
|
||||||
var all = '(.+?)';
|
|
||||||
|
|
||||||
var list = [this.params.base];
|
|
||||||
if(this.params.aliases && this.params.aliases.length) {
|
|
||||||
this.params.aliases.forEach(al => list.unshift(al));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
list.forEach((command) => {
|
res = res[0].params.action(res[1]);
|
||||||
var parentBase = this.parent ? (this.parent.path || '') : '';
|
if(res) return '' + res;
|
||||||
this.path = parentBase + this.space() + (command || all);
|
} else {
|
||||||
if(this.path == all && !this.parent) this.path = '';
|
return 'Command not found';
|
||||||
|
|
||||||
if(this.path) hash[this.path] = this;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
add(params) {
|
|
||||||
var command = new Command(params, this);
|
|
||||||
this.child.push(command);
|
|
||||||
|
|
||||||
return command;
|
|
||||||
}
|
|
||||||
|
|
||||||
space(end) {
|
|
||||||
var first = !(this.parent && this.parent.parent);
|
|
||||||
return this.params.merged || (!end && first) ? '' : ' ';
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var base = new Command({ basic: true });
|
updateHistory() {
|
||||||
|
var all = '(.+?)';
|
||||||
|
|
||||||
|
var list = [this.params.base];
|
||||||
|
if(this.params.aliases && this.params.aliases.length) {
|
||||||
|
this.params.aliases.forEach(al => list.unshift(al));
|
||||||
|
}
|
||||||
|
|
||||||
|
list.forEach((command) => {
|
||||||
|
var parentBase = this.parent ? (this.parent.path || '') : '';
|
||||||
|
this.path = parentBase + this.space() + (command || all);
|
||||||
|
if(this.path == all && !this.parent) this.path = '';
|
||||||
|
|
||||||
|
if(this.path) this.hash[this.path] = this;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
add(params) {
|
||||||
|
var command = new Command(params, this);
|
||||||
|
|
||||||
|
return command;
|
||||||
|
}
|
||||||
|
|
||||||
|
space(end) {
|
||||||
|
var first = !(this.parent && this.parent.parent);
|
||||||
|
return this.params.merged || (!end && first) ? '' : ' ';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function inject(serv, player, options) {
|
||||||
|
var base = new Command({});
|
||||||
|
|
||||||
base.add({
|
base.add({
|
||||||
base: 'help',
|
base: 'help',
|
||||||
|
|
@ -94,9 +90,10 @@ function inject(serv, player, options) {
|
||||||
usage: '/help [command]',
|
usage: '/help [command]',
|
||||||
action(params) {
|
action(params) {
|
||||||
var c = params[0];
|
var c = params[0];
|
||||||
|
var hash = base.hash;
|
||||||
|
|
||||||
if(c) {
|
if(c) {
|
||||||
var res = Command.find(params[0])[0];
|
var res = base.find(params[0])[0];
|
||||||
|
|
||||||
var help = res.params.help && res.params.help(params);
|
var help = res.params.help && res.params.help(params);
|
||||||
return help ? '' + help : 'Information not found';
|
return help ? '' + help : 'Information not found';
|
||||||
|
|
@ -340,5 +337,8 @@ function inject(serv, player, options) {
|
||||||
|
|
||||||
serv.commands = base;
|
serv.commands = base;
|
||||||
|
|
||||||
player.handleCommand = Command.use.bind(Command);
|
player.handleCommand = function(str) {
|
||||||
|
var res = base.use(str);
|
||||||
|
if(res) player.chat('' + res);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue