init: add workspace files
This commit is contained in:
43
world/cmd/skill/checkskill.js
Normal file
43
world/cmd/skill/checkskill.js
Normal file
@@ -0,0 +1,43 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "checkskill";
|
||||
this.allow_busy = true;
|
||||
this.allow_state = true;
|
||||
this.allow_die = true;
|
||||
this.regex = /^(\w+)(?:\s(\w+))?$/;
|
||||
const num_reg = /^\d+$/;
|
||||
this.enter = function (player, skid, from) {
|
||||
var skill_base = SKILL.get(skid);
|
||||
if (!skill_base) {
|
||||
return player.send("没有这个技能。");
|
||||
}
|
||||
// if (skill_base.is_custom && !player.create_for(skid)) {
|
||||
// return player.send('你只能查看公开的技能信息。');
|
||||
// }
|
||||
|
||||
|
||||
var target = player;
|
||||
if (from == "help" || num_reg.test(from)) {
|
||||
let lv = parseInt(from);
|
||||
return player.send(skill_base.query_desc(player, lv > 0 && lv < 3000 ? lv : 1000));
|
||||
} else if (from) {
|
||||
target = player.find_obj(from, player.environment);
|
||||
if (!target && player.user_level > 1) {
|
||||
target = WORLD.getUser(from);
|
||||
}
|
||||
if (!target) player.send("没有这个人。");
|
||||
if (player.user_level < 1 && !target.is(player.query_temp("master")) && target.master !== player.id) {
|
||||
if (!target.on_checkskill || !target.on_checkskill(player)) {
|
||||
return player.notify("你只能查看自己师父的技能。");
|
||||
}
|
||||
}
|
||||
}
|
||||
var obj = {};
|
||||
obj.type = "dialog";
|
||||
obj.dialog = "skills";
|
||||
if (skill_base.is_custom)
|
||||
obj.is_custom = 1;
|
||||
obj.id = skid;
|
||||
if (!target.skills) target.skills = {};
|
||||
obj.desc = skill_base.query_desc(target, target.query_skill(skid, 1000));
|
||||
return player.send(JSON.stringify(obj));
|
||||
}
|
||||
73
world/cmd/skill/enable.js
Normal file
73
world/cmd/skill/enable.js
Normal file
@@ -0,0 +1,73 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "enable";
|
||||
this.regex = /^(\w+?)\s+(.+?)$/;
|
||||
this.allow_fight = false;
|
||||
this.enter = function (me, base, skill, no_sent) {
|
||||
if (!me.skills) return me.notify("你还不会任何技能。");
|
||||
var baseskill = me.skills[base];
|
||||
if (!baseskill) return me.notify("你还不会这个基本技能。");
|
||||
var baseskill_base = SKILL.get(base);
|
||||
if (!baseskill_base || baseskill_base.type !== SKILL_TYPES.BASE) {
|
||||
return me.notify("没有这个基本技能。");
|
||||
}
|
||||
var old_skill;
|
||||
if (baseskill.enable_skill) {
|
||||
old_skill = me.skills[baseskill.enable_skill];
|
||||
if (!old_skill) return me.notify("技能错误,装备失败。");
|
||||
old_skill[base] = false;
|
||||
old_skill = SKILL.get(baseskill.enable_skill);
|
||||
if (old_skill) {
|
||||
old_skill.disenable(me, base, me.query_skill(baseskill.enable_skill));
|
||||
//me.notify('{type:"dialog",dialog:"skills",id:"' + base + '",enable:false}');
|
||||
}
|
||||
baseskill.enable_skill = null;
|
||||
|
||||
} else {
|
||||
if (skill == "none") return;
|
||||
}
|
||||
if (WEAPON_SKILLS[base]) {
|
||||
|
||||
me.remove_status("weapon", true);
|
||||
} else {
|
||||
me.remove_status(base, true);
|
||||
}
|
||||
if (skill && skill !== "none") {
|
||||
var sp_skill = me.skills[skill];
|
||||
var sp_skill_base = SKILL.get(skill);
|
||||
if (!sp_skill) {
|
||||
me.remove_status(base, true);
|
||||
me.init_skill();
|
||||
me.recount();
|
||||
return me.notify("你不会这个技能。");
|
||||
}
|
||||
|
||||
if (!sp_skill_base || sp_skill_base.enable(me, base, me.query_skill(skill)) !== true)
|
||||
return false;
|
||||
baseskill.enable_skill = skill;
|
||||
sp_skill[base] = true;
|
||||
me.notify("你决定使用" + sp_skill_base.query_color_name(me) + "做为" + baseskill_base.color_name + "的特殊技能。");
|
||||
if (me.is_player)
|
||||
me.notify('{type:"dialog",dialog:"skills",id:"' + base + '",enable:"' + skill + '"}');
|
||||
else
|
||||
me.notify('{type:"dialog",dialog:"skills","from":"' + me.id + '",id:"' + base + '",enable:"' + skill + '"}');
|
||||
} else {
|
||||
baseskill.enable_skill = null;
|
||||
me.notify("你决定取消使用" + old_skill.query_color_name(me) + "做为" + baseskill_base.color_name + "的特殊技能。");
|
||||
if (me.is_player)
|
||||
me.notify('{type:"dialog",dialog:"skills",id:"' + base + '",enable:false}');
|
||||
else
|
||||
me.notify('{type:"dialog",dialog:"skills","from":"' + me.id + '",id:"' + base + '",enable:false}');
|
||||
}
|
||||
if (!no_sent) {
|
||||
me.init_skill();
|
||||
me.recount();
|
||||
me.notify_hp();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const WEAPON_SKILLS = {
|
||||
"sword": 4,
|
||||
"blade": 5,
|
||||
"staff": 7, "club": 8, "whip": 9
|
||||
};
|
||||
115
world/cmd/skill/fangqi.js
Normal file
115
world/cmd/skill/fangqi.js
Normal file
@@ -0,0 +1,115 @@
|
||||
|
||||
this.inherits(COMMAND);
|
||||
this.command = "fangqi";
|
||||
this.allow_fight = false;
|
||||
this.regex = /^(\w+)(?:\s+(\w+))?$/;
|
||||
this.enter = function (me, skillid, sid) {
|
||||
if (!me.skills) return me.notify("你还不会任何技能。");
|
||||
var skill = me.skills[skillid];
|
||||
if (!skill) return me.notify("你还不会这个技能。");
|
||||
var skill_base = SKILL.get(skillid);
|
||||
if (!skill_base) return me.notify("没有这个技能。");
|
||||
if (skill_base.grade < 1 || skill_base.type === SKILL_TYPES.KNOWLEDGE) {
|
||||
return me.notify("基础和知识技能不能遗忘。");
|
||||
}
|
||||
if (!sid) {
|
||||
if (skill.ref) {
|
||||
return me.notify("你需要先取消融合才可以遗忘技能。");
|
||||
}
|
||||
if (skill.addin && skill.addin.length > 0) {
|
||||
return me.notify("你需要先取消进阶才可以遗忘技能。");
|
||||
}
|
||||
}
|
||||
|
||||
let up_count = 0;
|
||||
if (skill_base.source_skill) {
|
||||
up_count += (skill_base.grade === 4 ? 50 : 100);
|
||||
}
|
||||
var level = skill.level;
|
||||
|
||||
|
||||
var exp = (100 + level) * (level - 100) / 2 * (skill_base.query_grade(me) + 1) * 5;
|
||||
|
||||
if (skill_base.type !== SKILL_TYPES.KNOWLEDGE) {
|
||||
if (!sid) {
|
||||
let str = "。";
|
||||
if (up_count > 0) {
|
||||
str = ",直接遗忘会退还" + up_count + "份<hiz>门派进阶残页</hiz>。";
|
||||
}
|
||||
let befroe = me.master ? "dc " + me.id + " " : "";
|
||||
me.send("是否确认重置" + skill_base.query_color_name(me) + "?100级后的潜能全部返还" + str);
|
||||
return me.send_commands(befroe + 'fangqi ' + skillid + " ok", '直接遗忘',
|
||||
befroe + 'fangqi ' + skillid + " 100", "重置到100级",
|
||||
befroe + 'fangqi ' + skillid + " 3000", "重置到3000级");
|
||||
} else if (sid !== 'ok') {
|
||||
|
||||
let reset_level = parseInt(sid);
|
||||
if (!(reset_level >= 100)) return me.notify('输入等级错误。');
|
||||
|
||||
|
||||
return this.reset_skill(me, skill, skill_base, reset_level);
|
||||
}
|
||||
}
|
||||
exp = parseInt(exp);
|
||||
|
||||
if (me.remove_skill(skillid)) {
|
||||
me.notify('{type:"dialog",dialog:"skills","from":"' + me.id + '",remove:"' + skillid + '"}');
|
||||
|
||||
if (level > 100 && skill_base.type !== SKILL_TYPES.KNOWLEDGE) {
|
||||
|
||||
me.pot += exp;
|
||||
me.notify("<hic>你遗忘的技能" + skill_base.query_color_name(me) + "转化为" + exp + "点潜能。</hic>");
|
||||
|
||||
} else {
|
||||
me.notify("<hic>你已遗忘技能" + skill_base.query_color_name(me) + "。</hic>");
|
||||
exp = 0;
|
||||
}
|
||||
if (up_count > 0) {
|
||||
let obj = me.add_obj('book/up', up_count);
|
||||
me.send('你获得' + obj.unit_name(up_count) + "。")
|
||||
}
|
||||
if (me.master) return;
|
||||
WORLD.add_recover_obj(me, {
|
||||
id: skillid,
|
||||
name: skill_base.color_name,
|
||||
up_count: up_count,
|
||||
addin: skill.addin,
|
||||
level: level,
|
||||
pot: exp
|
||||
}, 3);
|
||||
}
|
||||
}
|
||||
this.reset_skill = function (me, skill, skill_base, level) {
|
||||
if (skill_base.type === SKILL_TYPES.KNOWLEDGE) return me.notify_fail('知识类技能无法重置。');
|
||||
if (skill.level <= level) return me.notify("你的" + skill_base.query_color_name(me) + "不用重置等级。");
|
||||
let exp = (100 + skill.level) * (skill.level - 100) / 2 * (skill_base.query_grade(me) + 1) * 5;
|
||||
if (level > 100) {
|
||||
exp -= (100 + level) * (level - 100) / 2 * (skill_base.query_grade(me) + 1) * 5;
|
||||
}
|
||||
|
||||
me.pot += exp;
|
||||
let curr_level = me.query_skill(skill_base.id, 0);
|
||||
me.notify("<hic>你的" + skill_base.query_color_name(me)
|
||||
+ "重置为" + level + "级,返回" + exp + "点潜能。</hic>");
|
||||
|
||||
// console.log(curr_level);
|
||||
me.add_score(-skill_base.query_score(curr_level, me));
|
||||
skill_base.release_prop(me, curr_level);
|
||||
|
||||
|
||||
|
||||
skill.level = level;
|
||||
skill.exp = 0;
|
||||
curr_level = me.query_skill(skill_base.id, 0);
|
||||
// console.log(curr_level);
|
||||
me.add_score(skill_base.query_score(curr_level, me));
|
||||
|
||||
skill_base.attach_prop(me, curr_level);
|
||||
me.recount();
|
||||
|
||||
var str = ['{type:"dialog",dialog:"skills",item:'];
|
||||
skill_base.item_to_json(str, skill, me);
|
||||
str.push("}");
|
||||
me.notify(str.join(""));
|
||||
return true;
|
||||
}
|
||||
51
world/cmd/skill/fenpei.js
Normal file
51
world/cmd/skill/fenpei.js
Normal file
@@ -0,0 +1,51 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "fenpei";
|
||||
this.allow_fight = false;
|
||||
this.enter = function (me) {
|
||||
var fen = me.query_temp("fenpei");
|
||||
if (!fen) return me.notify("你目前没有可以分配的先天属性。");
|
||||
if (fen <= 0) return me.notify("你目前的可分配属性是"+fen+",无法分配。");
|
||||
me.notify("请说出你的先天属性,每项15-30,总计" + fen + ",比如:10 0 0 10");
|
||||
me.wait_input = readnumber;
|
||||
}
|
||||
function readnumber(me, cmd) {
|
||||
var fen = me.query_temp("fenpei");
|
||||
if (!cmd) return me.notify("请说出你要增加的先天属性,总计" + fen +",比如:10 0 0 10");
|
||||
var ss = cmd.split(' ');
|
||||
if (ss.length != 5) return me.notify("请说出你要增加的先天属性,总计" + fen +",比如:10 0 0 10");
|
||||
var str = parseInt(ss[1]);
|
||||
var con = parseInt(ss[2]);
|
||||
var dex = parseInt(ss[3]);
|
||||
var int = parseInt(ss[4]);
|
||||
if (str + con + dex + int != fen) return me.notify("四项总计需要是" + fen+",请重新调整");
|
||||
if (str < 0 || con < 0 || dex < 0 || int < 0) return me.notify("单项的值需要大于0");
|
||||
me.set_temp("re_str", str);
|
||||
me.set_temp("re_con", con);
|
||||
me.set_temp("re_dex", dex);
|
||||
me.set_temp("re_int", int);
|
||||
|
||||
me.notify("增加先天属性设置为臂力:" + str + ",根骨:" + con + ",身法:" + dex + ",悟性:" + int + ",是否确认?");
|
||||
me.send_commands("ok", "确认", "cancle", "重新设置");
|
||||
me.wait_input = checkResult;
|
||||
}
|
||||
function checkResult(me, str) {
|
||||
if (str == "ok") {
|
||||
me.str +=( me.query_temp("re_str") || 0);
|
||||
me.con += (me.query_temp("re_con") || 0);
|
||||
me.int += (me.query_temp("re_int") || 0);
|
||||
me.dex += (me.query_temp("re_dex") || 0);
|
||||
me.recount();
|
||||
me.notify("属性调整完成");
|
||||
me.remove_temp("fenpei");
|
||||
me.wait_input = null;
|
||||
me.remove_temp("re_dex");
|
||||
me.remove_temp("re_con");
|
||||
me.remove_temp("re_int");
|
||||
me.remove_temp("re_dex");
|
||||
} else {
|
||||
var fen = me.query_temp("fenpei");
|
||||
if (!fen) return;
|
||||
me.wait_input = readnumber;
|
||||
me.notify("请说出你要增加的先天属性(臂力 根骨 身法 悟性),总计" + fen +",比如:10 0 0 10");
|
||||
}
|
||||
}
|
||||
188
world/cmd/skill/lianxi.js
Normal file
188
world/cmd/skill/lianxi.js
Normal file
@@ -0,0 +1,188 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "lianxi";
|
||||
this.allow_fight = false;
|
||||
this.regex = /^(\w+)(?:\s+(\d+))?$/;
|
||||
this.allow_state = true;
|
||||
|
||||
this.enter = function (me, skid, par) {
|
||||
if (!me.skills) return;
|
||||
if (!(me.pot > 0)) return me.send('你的潜能不足。');
|
||||
if (me.state && me.state.id !== 'lianxi')
|
||||
return me.send('你正在' + me.state.title + "。");
|
||||
var skill = me.skills[skid];
|
||||
if (!skill) return me.notify("你不会这个技能。");
|
||||
|
||||
var skill_base = SKILL.get(skid);
|
||||
if (!skill_base) return me.notify("没有这个技能。");
|
||||
|
||||
if (skill_base.on_practice && skill_base.on_practice(me) === false) return;
|
||||
if (skill_base.on_learn && skill_base.on_learn(me) === false) return;
|
||||
if (skill_base.type == SKILL_TYPES.KNOWLEDGE) {
|
||||
return me.notify(skill_base.color_name + "只能通过学习增加熟练度。");
|
||||
}
|
||||
var min_level = (skill_base.lianxi_level || 100);
|
||||
if (skill.level < min_level) {
|
||||
return me.notify("你的" + skill_base.query_color_name(me) + "等级不够" + min_level + ",无法练习。");
|
||||
}
|
||||
|
||||
if (me.query_prop(skid)) return me.notify("你不能装备增加" + skill_base.color_name + "等级的道具练习。");
|
||||
|
||||
var max = me.skill_limit();
|
||||
if (par) {
|
||||
max = Math.min(par, max);
|
||||
if (!(max > 0)) return me.send('错误的等级设置');
|
||||
if (max <= me.query_skill(skid))
|
||||
return me.notify("你的" + skill_base.query_color_name(me) + "已经练习到" + max + "级了。");
|
||||
}
|
||||
if (me.state) {
|
||||
if (me.state.skill_base === skill_base)
|
||||
return me.send('你正在练习' + skill_base.query_color_name(me) + "。");
|
||||
for (let i = 0; i < me.state.queues.length; i++) {
|
||||
if (me.state.queues[i].skid == skid) {
|
||||
me.state.queues.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
me.state.queues.push({
|
||||
skid: skid,
|
||||
max_level: max
|
||||
});
|
||||
return me.send('已将' + skill_base.query_color_name(me) + "加入练习队列。");
|
||||
}
|
||||
if (!check_skill(me, skill_base, false)) return;
|
||||
|
||||
me.notify("<hic>你开始练习" + skill_base.query_color_name(me) + "。</hic>");
|
||||
me.set_state({
|
||||
id: "lianxi",
|
||||
title: "练习技能",
|
||||
max_level: max,
|
||||
skill_base: skill_base,
|
||||
queues: [],
|
||||
sum_pot: 0,
|
||||
stime: Date.now(),
|
||||
on_enter: do_learn,
|
||||
desc: "[\"你对" + skill_base.query_color_name(me) + "似乎有些心得。\"]",
|
||||
on_stop: function (me, isauto) {
|
||||
if (isauto) {
|
||||
return to_next(me);
|
||||
}
|
||||
},
|
||||
on_check: on_check
|
||||
});
|
||||
}
|
||||
function on_check(me) {
|
||||
let max_level = this.max_level;
|
||||
let speed = count_speed(me);
|
||||
|
||||
|
||||
let skill = this.skill_base;
|
||||
let pot = skill.query_needexp(max_level, me) -
|
||||
skill.query_needexp(me.query_skill(skill.id, 0), me);
|
||||
let str = ['你正在练习', skill.query_color_name(me), '到', max_level, '级,当前练习速度', speed];
|
||||
for (let item of this.queues) {
|
||||
skill = SKILL.get(item.skid);
|
||||
str.push('\n准备练习', skill.query_color_name(me), '到', item.max_level, '级');
|
||||
pot += (skill.query_needexp(item.max_level, me) -
|
||||
skill.query_needexp(me.query_skill(skill.id, 0), me));
|
||||
|
||||
}
|
||||
str.push('\n<hic>预计耗时');
|
||||
|
||||
if (pot < me.pot) {
|
||||
format_timespan(Math.floor(pot / speed) * 5, str);
|
||||
str.push('练习完成');
|
||||
|
||||
} else {
|
||||
format_timespan(Math.floor(me.pot / speed) * 5, str);
|
||||
pot = me.pot;
|
||||
str.push('潜能不足中断');
|
||||
}
|
||||
str.push(',已消耗', this.sum_pot, '/', Math.floor(pot), '潜能。');
|
||||
str.push('</hic>\n点击练习其他武功可添加到队列。');
|
||||
me.send(str.join(""));
|
||||
}
|
||||
|
||||
|
||||
function format_timespan(time, str) {
|
||||
if (time < 60) return str.push('少于1分钟');
|
||||
if (time > 86400) {
|
||||
str.push(Math.floor(time / 86400), '天');
|
||||
time = time % 86400;
|
||||
}
|
||||
if (time > 3600) {
|
||||
str.push(Math.floor(time / 3600), '小时');
|
||||
time = time % 3600;
|
||||
}
|
||||
str.push(Math.floor(time / 60), '分钟');
|
||||
}
|
||||
|
||||
|
||||
|
||||
function to_next(me) {
|
||||
let state = me.state;
|
||||
if (state.queues.length > 0) {
|
||||
let item = state.queues.shift();
|
||||
var skill_base = SKILL.get(item.skid);
|
||||
if (!skill_base) return me.notify("没有这个技能。");
|
||||
state.max_level = item.max_level;
|
||||
state.skill_base = skill_base;
|
||||
me.send('你开始练习' + skill_base.query_color_name(me) + "。");
|
||||
state.desc = "[\"你对" + skill_base.query_color_name(me) + "似乎有些心得。\"]";
|
||||
|
||||
me.send(`{type:"state",state:"你正在${state.title}",desc:${state.desc}}`);
|
||||
return false;
|
||||
}
|
||||
if (me.query_setting('auto_work')) {
|
||||
return WORLD.check_user_next(me);
|
||||
}
|
||||
}
|
||||
|
||||
function check_skill(me, skill, limit = true) {
|
||||
|
||||
var lv = me.query_skill(skill.id, 0);
|
||||
if (limit && me.state && me.state.max_level && lv >= me.state.max_level) {
|
||||
return me.notify_fail("你的"
|
||||
+ skill.query_color_name(me) + "已经练习到" + me.state.max_level + "级了。");
|
||||
}
|
||||
var max_lv = me.skill_limit();
|
||||
|
||||
if (!(lv < max_lv)) {
|
||||
return me.notify_fail("也许是缺乏实战经验,你觉得你的" + skill.query_color_name(me) + "已经到了瓶颈了。");
|
||||
|
||||
}
|
||||
var ens = skill.can_enables;
|
||||
if (ens && ens.length) {
|
||||
for (var i = 0; i < ens.length; i++) {
|
||||
if (lv >= me.query_skill(ens[i], 0)) {
|
||||
me.notify("你的基本功火候未到,必须先打好基础才能继续提高。");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (skill.do_practice && skill.do_practice(me, lv) == false) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
function do_learn(me) {
|
||||
if (me.pot > 0) {
|
||||
|
||||
if (!check_skill(me, this.skill_base)) return false;
|
||||
var exp = count_speed(me);
|
||||
if (exp > me.pot) exp = me.pot;
|
||||
me.pot -= exp;
|
||||
this.sum_pot += exp;
|
||||
return this.skill_base.add_exp(me, parseInt(exp));
|
||||
}
|
||||
return me.notify_fail("你的潜能不够,无法继续练习下去了。");
|
||||
|
||||
}
|
||||
|
||||
function count_speed(me) {
|
||||
let pot = parseInt((me.int + me.query_prop("int")) * (100 + me.query_prop("lianxi_per")
|
||||
+ me.family.query_temp('lianxi_per', 0)
|
||||
+ WORLD.DATA.query_temp("lianxi_per", 0) + me.int) / 100);
|
||||
|
||||
|
||||
return pot;
|
||||
}
|
||||
101
world/cmd/skill/sbook.js
Normal file
101
world/cmd/skill/sbook.js
Normal 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) + "。");
|
||||
}
|
||||
59
world/cmd/skill/sk_group.js
Normal file
59
world/cmd/skill/sk_group.js
Normal file
@@ -0,0 +1,59 @@
|
||||
|
||||
this.inherits(COMMAND);
|
||||
this.command = "skgroup";
|
||||
this.allow_fight = false;
|
||||
this.enter = function (me, par) {
|
||||
let index = parseInt(par);
|
||||
if (!(index >= 0 && index < 3)) return;
|
||||
let cur_index = this.cur_eqs(me);
|
||||
if (cur_index < 0) return me.send('装备错误。');
|
||||
let eqs = me.sk_groups[index];
|
||||
if (!eqs) return me.send('当前正在装备该技能组。');
|
||||
me.sk_groups[index] = null;
|
||||
this.save_eqgroup(me, cur_index);
|
||||
const enable_command = WORLD.COMMANDS.enable.enter;
|
||||
for (let i = 0; i < SK_TYPES.length; i++) {
|
||||
let sk_type = SK_TYPES[i];
|
||||
let skill = me.skills[sk_type];
|
||||
if (!skill) continue;
|
||||
let enable_skill = eqs[i];
|
||||
if (!enable_skill && !skill.enable_skill) continue;
|
||||
if (enable_skill && skill.enable_skill === enable_skill) continue;
|
||||
enable_command(me, sk_type, enable_skill, true);
|
||||
}
|
||||
|
||||
me.send(`{type:"dialog",dialog:"skills",sk_group:${index}}`);
|
||||
me.init_skill();
|
||||
me.recount();
|
||||
me.notify_hp();
|
||||
|
||||
}
|
||||
|
||||
this.enable_one = function (me, base, skill) {
|
||||
|
||||
}
|
||||
|
||||
|
||||
const SK_TYPES = [
|
||||
"force", "unarmed", "dodge", "parry", "sword",
|
||||
"blade", "throwing", "staff", "club", "whip"
|
||||
];
|
||||
this.cur_eqs = function (me) {
|
||||
for (let i = 0; i < me.sk_groups.length; i++) {
|
||||
if (!me.sk_groups[i])
|
||||
return i;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
this.save_eqgroup = function (me, index) {
|
||||
let eqs = [];
|
||||
for (let sk of SK_TYPES) {
|
||||
let skill = me.skills[sk];
|
||||
if (skill && skill.enable_skill) {
|
||||
eqs.push(skill.enable_skill);
|
||||
} else {
|
||||
eqs.push("");
|
||||
}
|
||||
}
|
||||
me.sk_groups[index] = eqs;
|
||||
}
|
||||
10
world/cmd/skill/stopstate.js
Normal file
10
world/cmd/skill/stopstate.js
Normal file
@@ -0,0 +1,10 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "stopstate";
|
||||
this.allow_busy = true;
|
||||
this.allow_state = true;
|
||||
this.enter = function (player) {
|
||||
if (player.state) {
|
||||
if (player.state.no_stop) return player.notify(player.state.no_stop);
|
||||
}
|
||||
player.set_state(null);
|
||||
}
|
||||
141
world/cmd/skill/study.js
Normal file
141
world/cmd/skill/study.js
Normal file
@@ -0,0 +1,141 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "study";
|
||||
this.allow_fight = false;
|
||||
this.enter = function (me, bookid) {
|
||||
if (!bookid) return me.notify("你要学习什么技能?");
|
||||
|
||||
if (bookid.length < 4) return this.study_from_books(me, bookid);
|
||||
|
||||
var target = me.find_obj(bookid);
|
||||
if (!target) return me.notify("你身上没有这本书。");
|
||||
if (!target.path.startsWith('book/book') && !target.path.startsWith('book/chao')
|
||||
&& !target.is('sp/new/ksforce')
|
||||
&& !target.is('sp/new/ksunarmed') && !target.is('book/zc'))
|
||||
return me.notify("你不能从" + target.color_name + "里学到任何东西。");
|
||||
|
||||
if (!target.skill) return me.notify("你不能从" + target.color_name + "里学到任何东西。");
|
||||
|
||||
var skill = SKILL.get(target.skill);
|
||||
if (!skill) return me.notify("没有这个技能。");
|
||||
|
||||
|
||||
this.study_skill(me, skill, target);
|
||||
|
||||
}
|
||||
|
||||
this.study_from_books = function (me, bindex) {
|
||||
let books = me.books;
|
||||
if (me.master) {
|
||||
let user = WORLD.getUser(me.master);
|
||||
if (!user) return me.send('你没有书架。');
|
||||
books = user.books;
|
||||
}
|
||||
if (!books) return me.send('你要学哪个武功?');
|
||||
let index = parseInt(bindex);
|
||||
if (!(index >= 0 && index < books.length))
|
||||
return me.send('你要学哪个武功?');
|
||||
var skill = SKILL.get(books[index]);
|
||||
if (!skill) return me.notify("书架上没有这个武功秘籍。");
|
||||
var target = { color_name: skill.color_name, max_level: 100, };
|
||||
this.study_skill(me, skill, target);
|
||||
}
|
||||
|
||||
this.study_skill = function (me, skill, target) {
|
||||
if (skill.is_custom && !me.create_for(skill.id)) return me.notify('这是别人自创的武功,目前无法学习。');
|
||||
|
||||
if (!checkSkillCount(me, skill.id)) return;
|
||||
if (!me.skills) me.skills = {};
|
||||
|
||||
|
||||
if (me.skills[skill.id + "2"]) return me.notify("你已经学会了的" + skill.color_name + "的进阶武功,不用再学习了。");
|
||||
|
||||
// if (skill.do_learn && skill.do_learn(me, lv) == false) return false;
|
||||
|
||||
if (me.query_skill(skill.id) === 0 && skill.do_learn(me) == false) return;
|
||||
|
||||
if (check_skill(me, target, skill) == false) return;
|
||||
|
||||
if (me.query_prop(skill.id)) return me.notify("你不能装备增加" + skill.color_name + "等级的道具读书。");
|
||||
me.notify("<hic>你开始认真研读" + target.color_name + "。</hic>");
|
||||
|
||||
me.set_state({
|
||||
id: "study",
|
||||
title: "读书",
|
||||
target: target,
|
||||
skill_base: skill,
|
||||
stime: Date.now(),
|
||||
on_enter: do_learn,
|
||||
no_move: "读书要专心,不要乱跑。",
|
||||
desc: "[\"你对" + skill.color_name + "似乎有些心得。\"]",
|
||||
on_stop: function (me, isauto) {
|
||||
if (isauto) {
|
||||
if (me.query_setting('auto_work')) {
|
||||
return WORLD.check_user_next(me);
|
||||
}
|
||||
}
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function checkSkillCount(me, sk) {
|
||||
var count = 0;
|
||||
for (var skid in me.skills) {
|
||||
if (skid == sk) return true;
|
||||
var skill_base = SKILL.get(skid);
|
||||
if (skill_base && skill_base.type == SKILL_TYPES.SKILL) {
|
||||
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if (count >= 50) return me.notify_fail('你的技能数量已经达到上限(基础武功和知识类武功外的其他技能不能超过50个)。');
|
||||
return true;
|
||||
}
|
||||
function check_skill(me, book, skill) {
|
||||
var lv = me.query_skill(skill.id, 0);
|
||||
if (book.max_level <= lv)
|
||||
return me.notify_fail("这本书上的内容对你来说太浅了。");
|
||||
|
||||
if (skill.type != SKILL_TYPES.KNOWLEDGE) {
|
||||
var max_lv = me.skill_limit();
|
||||
if (lv >= max_lv) {
|
||||
return me.notify_fail("也许是缺乏实战经验,你无法理解" + book.color_name + "上面的内容。");
|
||||
|
||||
}
|
||||
var ens = skill.can_enables;
|
||||
if (ens && ens.length) {
|
||||
for (var i = 0; i < ens.length; i++) {
|
||||
if (lv >= me.query_skill(ens[i], 0)) {
|
||||
me.notify("也许是基本功火候未到,你对" + book.color_name + "上面的内容无法理解。");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// this.on_study = function (me, skill, lv) {
|
||||
// return true;
|
||||
// }
|
||||
// if (book.on_study && book.on_study(me, skill, lv) == false) {
|
||||
// return false;
|
||||
// }
|
||||
return true;
|
||||
}
|
||||
function do_learn(me) {
|
||||
|
||||
if (check_skill(me, this.target, this.skill_base) == false) return false;
|
||||
|
||||
var exp = parseInt((me.int + me.query_prop("int")) * (100 + me.query_prop("study_per")) / 100) * 2;
|
||||
if (!(exp > 0)) exp = me.int;
|
||||
|
||||
this.skill_base.add_exp(me, exp);
|
||||
var lv = me.query_skill(this.skill_base.id, 0);
|
||||
if (this.target.max_level <= lv) {
|
||||
me.set_skill(this.skill_base.id, this.target.max_level);
|
||||
var one_score = this.skill_base.query_one_score(me);
|
||||
|
||||
|
||||
me.add_score(one_score * (this.target.max_level - lv));
|
||||
me.send('{type:"dialog",dialog:"skills",id:"' + this.skill_base.id + '",level:' + this.target.max_level + ',exp:0}');
|
||||
}
|
||||
}
|
||||
6
world/cmd/skill/xiulian.js
Normal file
6
world/cmd/skill/xiulian.js
Normal file
@@ -0,0 +1,6 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "xiulian";
|
||||
this.allow_fight = false;
|
||||
this.enter = function (me) {
|
||||
|
||||
}
|
||||
279
world/cmd/skill/xue.js
Normal file
279
world/cmd/skill/xue.js
Normal file
@@ -0,0 +1,279 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "xue";
|
||||
this.allow_state = true;
|
||||
this.allow_fight = false;
|
||||
this.regex = /^(?:(\d+)\s)?(\w+)\s+from\s+(.+?)$/;
|
||||
this.enter = function (me, par, sk, target) {
|
||||
if (!sk) return me.notify("你要学习什么技能?");
|
||||
target = me.find_obj(target, me.environment);
|
||||
if (!target) return me.notify("你要跟谁学习技能?");
|
||||
|
||||
if (!me.skills) me.skills = {};
|
||||
var skill_base = SKILL.get(sk);
|
||||
if (!skill_base) return me.notify("没有这个技能。");
|
||||
if (skill_base.grade !== skill_base.query_grade(me)
|
||||
&& skill_base.type !== SKILL_TYPES.KNOWLEDGE)
|
||||
return me.notify('你的' + skill_base.query_color_name(me) + "已经进阶,不能再通过学习提升等级了。");
|
||||
if (target.is_player) {
|
||||
if (!me.master ||
|
||||
me.master !== target.id
|
||||
|| skill_base.type !== SKILL_TYPES.BASE) {
|
||||
return me.notify(me.name + "不能向" + target.name + "请教" + skill_base.color_name + "!");
|
||||
}
|
||||
} else {
|
||||
if (target.on_teach) {
|
||||
if (target.on_teach(me, sk) === false) return;
|
||||
} else {
|
||||
if (target.master == me.id) {
|
||||
if (target.on_master_learn && target.on_master_learn(me, sk) == false) return;
|
||||
|
||||
} else {
|
||||
if (!target.is(me.query_temp("master")))
|
||||
return me.notify(target.name + "对你说道:请教?这怎么敢当!");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (BAN_SKILLS[sk]) return me.send(skill_base.color_name + '不能通过学习升级。');
|
||||
|
||||
if (!target.skills[sk]) return me.notify(target.name + "不会这个技能。");
|
||||
|
||||
if (target.skills[sk].disable) return me.notify("这个技能暂时不能学习,请联系管理员处理。");
|
||||
|
||||
|
||||
|
||||
if (me.skills[sk + "2"]) return me.notify("你已经学会了的" + skill_base.color_name + "的进阶武功,不用再学习了。");
|
||||
const skill_level = me.query_skill(sk, 0);
|
||||
if (skill_level === 0 && skill_base.do_learn(me) == false) return;
|
||||
|
||||
if (check_skill(me, skill_base, target, false) == false) {
|
||||
return;
|
||||
}
|
||||
if (target.is(me.query_temp("master"))) {
|
||||
if (skill_base.grade > 3 && skill_level === 0) {
|
||||
if (me.query_temp('sm_level', 0) < 2 && me.query_temp("gongji", 0) < 5000) {
|
||||
return me.notify(target.name + "对你说道:你对本门的贡献还不够,还需要多加努力。");
|
||||
}
|
||||
}
|
||||
}
|
||||
if (!checkSkillCount(me, sk)) return;
|
||||
var max = skill_base.type === SKILL_TYPES.KNOWLEDGE ? 0 : me.skill_limit();
|
||||
if (par) {
|
||||
max = parseInt(par);
|
||||
if (!(max > 0)) return me.send('错误的等级设置');
|
||||
if (max <= skill_level)
|
||||
return me.notify("你的" + skill_base.query_color_name(me) + "已经学习到" + max + "级了。");
|
||||
}
|
||||
if (me.state) {
|
||||
if (me.state.id !== 'learn')
|
||||
return me.notify('你正在' + me.state.title + "。");
|
||||
if (me.state.skill_base.id === sk)
|
||||
return me.send('你正在学习' + skill_base.query_color_name(me) + "。");
|
||||
for (let i = 0; i < me.state.queues.length; i++) {
|
||||
if (me.state.queues[i].skid == sk) {
|
||||
me.state.queues.splice(i, 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
me.state.queues.push({
|
||||
skid: sk,
|
||||
max_level: max
|
||||
});
|
||||
return me.send('已将' + skill_base.query_color_name(me) + "加入学习队列。");
|
||||
}
|
||||
me.notify("<hic>你开始向" + target.name + "请教有关「" + skill_base.name + "」的疑问。</hic>");
|
||||
me.set_state({
|
||||
id: "learn",
|
||||
title: "学习" + skill_base.name,
|
||||
target: target,
|
||||
max_level: max,
|
||||
skill_base: skill_base,
|
||||
queues: [],
|
||||
on_enter: do_learn,
|
||||
no_move: "你在听师父讲解,还是不要乱走的好。",
|
||||
desc: "[\"你听了" + target.name + "的指导,似乎有些心得。\"]",
|
||||
on_stop: function (me, isauto) {
|
||||
if (isauto) {
|
||||
return to_next(me);
|
||||
}
|
||||
},
|
||||
on_check: on_check
|
||||
});
|
||||
|
||||
}
|
||||
const BAN_SKILLS = {
|
||||
linshuijing: true,
|
||||
guanshanjue: true
|
||||
};
|
||||
|
||||
function on_check(me) {
|
||||
|
||||
|
||||
let speed = count_speed(me);
|
||||
|
||||
let skill = this.skill_base;
|
||||
let target_lv = Math.min(me.skill_limit(), this.target.query_skill(skill.id, 0));
|
||||
if (skill.type === SKILL_TYPES.KNOWLEDGE)
|
||||
target_lv = this.target.query_skill(skill.id, 0);
|
||||
let max_level = this.max_level || target_lv;
|
||||
let pot = skill.query_needexp(max_level, me) -
|
||||
skill.query_needexp(me.query_skill(skill.id, 0), me);
|
||||
let str = ['你正在学习', skill.query_color_name(me), ',当前学习速度', speed];
|
||||
|
||||
for (let item of this.queues) {
|
||||
skill = SKILL.get(item.skid);
|
||||
let maxlv = item.max_level || target_lv;
|
||||
str.push('\n准备学习', skill.query_color_name(me), '到', maxlv, '级');
|
||||
pot += (skill.query_needexp(maxlv, me) -
|
||||
skill.query_needexp(me.query_skill(skill.id, 0), me));
|
||||
|
||||
}
|
||||
str.push('\n<hic>预计耗时');
|
||||
if (pot < me.pot) {
|
||||
format_timespan(Math.floor(pot / speed) * 5, str);
|
||||
} else {
|
||||
format_timespan(Math.floor(me.pot / speed) * 5, str);
|
||||
str.push(',潜能不足。');
|
||||
}
|
||||
str.push('</hic>\n点击学习其他武功可添加到学习队列。');
|
||||
me.send(str.join(""));
|
||||
}
|
||||
|
||||
|
||||
function format_timespan(time, str) {
|
||||
if (time < 60) return str.push('少于1分钟');
|
||||
if (time > 86400) {
|
||||
str.push(Math.floor(time / 86400), '天');
|
||||
time = time % 86400;
|
||||
}
|
||||
if (time > 3600) {
|
||||
str.push(Math.floor(time / 3600), '小时');
|
||||
time = time % 3600;
|
||||
}
|
||||
str.push(Math.floor(time / 60), '分钟');
|
||||
}
|
||||
|
||||
function to_next(me) {
|
||||
let state = me.state;
|
||||
if (state.queues.length > 0) {
|
||||
let item = state.queues.shift();
|
||||
var skill_base = SKILL.get(item.skid);
|
||||
if (!skill_base) return me.notify("没有这个技能。");
|
||||
state.max_level = item.max_level;
|
||||
state.skill_base = skill_base;
|
||||
me.notify("<hic>你开始向" + state.target.name
|
||||
+ "请教有关「" + skill_base.name + "」的疑问。</hic>");
|
||||
|
||||
return false;
|
||||
}
|
||||
if (me.query_setting('auto_work')) {
|
||||
return WORLD.check_user_next(me);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function checkSkillCount(me, sk) {
|
||||
var count = 0;
|
||||
for (var skid in me.skills) {
|
||||
if (skid == sk) return true;
|
||||
var skill_base = SKILL.get(skid);
|
||||
if (skill_base && skill_base.type == SKILL_TYPES.SKILL) {
|
||||
|
||||
count++;
|
||||
}
|
||||
}
|
||||
if (count >= 50) return me.notify_fail('你的技能数量已经达到上限(基础武功和知识类武功外的其他技能不能超过50个)。');
|
||||
return true;
|
||||
}
|
||||
function check_skill(me, skill, master, limit = true) {
|
||||
|
||||
var lv = me.query_skill(skill.id, 0);
|
||||
if (lv >= master.query_skill(skill.id, 0)) {
|
||||
me.notify("这项技能你的程度已经不输你师父了。");
|
||||
return false;
|
||||
}
|
||||
if (limit && me.state && me.state.max_level && lv >= me.state.max_level) {
|
||||
return me.notify_fail("你的" + skill.color_name + "学习完毕。");
|
||||
}
|
||||
if (skill.type != SKILL_TYPES.KNOWLEDGE) {
|
||||
var max_lv = me.skill_limit();
|
||||
if (lv >= max_lv) {
|
||||
return me.notify_fail("也许是缺乏实战经验,你对" + master.name + "的讲解总是无法领会。");
|
||||
|
||||
}
|
||||
var ens = skill.can_enables;
|
||||
if (ens && ens.length) {
|
||||
for (var i = 0; i < ens.length; i++) {
|
||||
if (lv >= me.query_skill(ens[i], 0)) {
|
||||
me.notify("也许是基本功火候未到,你对" + master.name + "的讲解总是无法领会。");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// if (skill.do_learn(me, lv) == false) {
|
||||
// return false;
|
||||
// }
|
||||
return true;
|
||||
}
|
||||
function do_learn(me) {
|
||||
var master = this.target;
|
||||
if (!me.is_here(master) || !master.is_living()) {
|
||||
return false;
|
||||
}
|
||||
if (me.pot <= 0) {
|
||||
me.notify("你的潜能不够,无法继续学习下去了。");
|
||||
return false;
|
||||
}
|
||||
var skill = me.skills[this.skill_base.id];
|
||||
var lv = 0;
|
||||
if (skill) {
|
||||
lv = skill.level;
|
||||
}
|
||||
if (lv >= master.query_skill(this.skill_base.id, 0)) {
|
||||
me.notify("这项技能你的程度已经不输你师父了。");
|
||||
return false;
|
||||
}
|
||||
if (check_skill(me, this.skill_base, master) == false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
var exp = count_speed(me);
|
||||
if (lv < 300) {
|
||||
exp = exp * 5;
|
||||
if (this.skill_base.type == SKILL_TYPES.KNOWLEDGE) {
|
||||
exp = exp * 2;
|
||||
}
|
||||
} else {
|
||||
if (this.skill_base.type == SKILL_TYPES.KNOWLEDGE) {
|
||||
exp = exp * 10;
|
||||
}
|
||||
}
|
||||
if (master.do_teach) {
|
||||
return master.do_teach(me, this.skill_base, lv);
|
||||
}
|
||||
|
||||
if (exp > me.pot)
|
||||
return me.notify_fail("你的潜能不够,无法继续学习下去了。");
|
||||
|
||||
if (this.skill_base.type === SKILL_TYPES.KNOWLEDGE) {
|
||||
let diff = me.query_prop('haoranqi');
|
||||
let diff_pot = exp;
|
||||
if (diff > 0) {
|
||||
diff_pot = parseInt(exp - exp * diff / 100);
|
||||
}
|
||||
me.pot -= diff_pot;
|
||||
} else {
|
||||
me.pot -= exp;
|
||||
}
|
||||
this.skill_base.add_exp(me, exp);
|
||||
|
||||
}
|
||||
|
||||
function count_speed(me) {
|
||||
let pot = parseInt((me.int + me.query_prop("int")) *
|
||||
(100 + me.query_prop("study_per") + me.family.query_temp('study_per', 0)
|
||||
+ WORLD.DATA.query_temp("study_per", 0) + me.int) / 100) * 3;
|
||||
|
||||
return pot;
|
||||
}
|
||||
Reference in New Issue
Block a user