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

101 lines
3.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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) + "。");
}