Files
wsmud/world/cmd/dialog/task.js
2026-05-26 16:41:20 +08:00

64 lines
1.7 KiB
JavaScript

this.inherits(COMMAND);
this.command = "task";
this.regex = /(\w+)\s+(\w+)(?:\s(\w+))?(?:\s(\w+))?/;
this.allow_state = true;
this.enter = function (me, tid, cmd, oid) {
if (!tid || !cmd) return;
if (!me.is_player || !WORLD.is_server(me)) return;
if (tid === 'all') return this.tasks_fin(me);
let task = USERTASK.GET(tid);
if (!task) return me.notify("没有这个任务。");
let target = null;
if (!oid && !(ALLOW_COMMANDS[cmd])) {
oid = cmd;
cmd = 'start';
}
if (oid) {
target = me.find_obj(oid, me.environment);
if (!target) return me.notify("这里没有这个人。");
}
switch (cmd) {
case "fin":
this.task_fin(me, task);
break;
case "start":
task.start(me, target);
break;
case "giveup":
task.giveup(me);
break;
case "fin2":
this.task_fin(me, task, 'ok');
break;
}
}
const ALLOW_COMMANDS = {
start: true,
giveup: true,
fin: true,
fin2: true
};
this.task_fin = function (me, task, par) {
if (task.on_finish(me, par)) {
const obj = {};
obj.type = "dialog";
obj.dialog = "tasks";
obj.id = task.id;
obj.state = task.query_state(me);
if (obj.state) {
obj.title = task.query_title(me);
obj.desc = task.query_desc(me);
}
return me.notify(JSON.stringify(obj));
}
}
this.tasks_fin = function (me) {
for (let i = 0; i < WORLD.TASKS.length; i++) {
const task = WORLD.TASKS[i];
if (task.query_state(me) === 2) {
this.task_fin(me, task);
}
}
}