init: add workspace files

This commit is contained in:
2026-05-26 16:41:20 +08:00
commit f4f2393f72
1041 changed files with 67405 additions and 0 deletions

101
world/cmd/skill/sbook.js Normal file
View File

@@ -0,0 +1,101 @@
this.inherits(COMMAND);
this.command = "sbook";
this.allow_busy = true;
this.allow_state = true;
this.regex = /^(\w+)(?:\s+(\w+))?$/;
this.enter = function (me, arg, isok) {
if (!arg) return this.render_books(me);
if (arg === 'clear') return this.clear_base(me);
if (arg.length < 4) return this.check_books(me, arg);
const book = me.find_obj(arg);
if (!book || !book.path.startsWith('book/book#'))
return me.send('你要存储什么秘籍?');
var skill = SKILL.get(book.skill);
if (!skill) return me.send('没有这个武功可以存储。');
if (skill.type === SKILL_TYPES.BASE) {
me.send('基础武功不用保存。');
if (this.has_base(me)) {
me.send_commands('sbook clear', '取出已有的基础秘籍');
}
return;
}
if (!isok) {
me.send('将武功秘籍存储到你的书架,后续直接从书架中学习。');
me.send_commands('sbook ' + arg + " ok", '确定存储');
}
else {
if (!me.books) me.books = [];
if (me.books.indexOf(book.skill) > -1)
return me.send('你的书架上已经有' + skill.color_name + "了。");
me.books.push(book.skill);
me.send('<hic>你将' + book.unit_name(1) + '存放到书架。</hic>');
me.remove_obj(book, 1);
me.send(`{"type":"dialog","dialog":"skills","book":["${skill.name}",${skill.grade},${me.books.length - 1}]}`);
}
}
this.check_books = function (me, arg) {
let index = parseInt(arg);
if (!(index >= 0 && index < me.books.length))
return me.send('你要查看哪本秘籍? ');
let skill = SKILL.get(me.books[index]);
if (!skill)
return me.send('没有这本秘籍。 ');
let desc = "一本武功秘籍,里面记载了" + skill.color_name + "的练习方法。";
var cond = skill.condition_tostring();
if (cond) {
desc = desc + "\n学习条件\n" + cond;
} else {
desc = desc + "\n学习条件无" + cond;
}
me.send(desc);
}
this.render_books = function (me) {
let str = ['{"type":"dialog","dialog":"skills",'];
let books = me.books ?? [];
str.push("books:[");
for (let i = 0; i < books.length; i++) {
if (i > 0) str.push(',');
let skill = SKILL.get(books[i]);
str.push('["', skill.name, '",', skill.grade, ']')
}
str.push(']}');
me.send(str.join(""));
}
this.clear_base = function (me) {
let books = me.books ?? [];
for (let i = 0; i < books.length; i++) {
let skill = SKILL.get(books[i]);
if (skill.type === SKILL_TYPES.BASE) {
let obj = me.add_obj('book/book#' + skill.id);
me.send('你取出' + obj.unit_name(1) + "。");
books.splice(i, 1);
i--;
}
}
this.render_books(me);
}
this.has_base = function (me) {
let books = me.books ?? [];
for (let sk of books) {
let skill = SKILL.get(sk);
if (skill.type === SKILL_TYPES.BASE)
return true;
}
return false;
}
const COMBINED = [10, 10, 30, 50, 100, 200, 500];
this.split_book = function (me, book) {
let books = me.books ?? [];
if (books.indexOf(book.skill) < 0) return me.notify('你只能把已经存放到书架的' + book.color_name + "拆分为秘籍残页。");
let skill = SKILL.get(book.skill);
if (skill.grade < 1) return me.notify('基础功法和知识类秘籍不能拆分。');
let count = COMBINED[skill.grade];
if (!me.remove_obj(book, 1)) return me.notify('拆分失败。');
let obj = me.add_obj('book/bc#' + skill.id, count);
me.send('你将' + book.color_name + "拆分为" + obj.unit_name(count) + "。");
}