init: add workspace files
This commit is contained in:
169
world/cmd/battle/pfm.js
Normal file
169
world/cmd/battle/pfm.js
Normal file
@@ -0,0 +1,169 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "perform";
|
||||
this.allow_busy = true;
|
||||
this.allow_faint = true;
|
||||
this.regex = /^(\w+)\.(.+?)$/;
|
||||
this.enter = function (me, sk, pfmid) {
|
||||
if (!sk || !pfmid) return me.notify("你要使用什么绝招。");
|
||||
if (!me.skills) return me.notify("你目前没有学会任何技能。");
|
||||
var baseSkill = me.skills[sk];
|
||||
if (!baseSkill) return me.notify("你不会用这个技能。");
|
||||
|
||||
|
||||
|
||||
|
||||
var sp_skill = SKILL.get(baseSkill.enable_skill || sk);
|
||||
|
||||
if (!sp_skill) return me.notify("没有这个技能。");
|
||||
|
||||
var sp_myskill = me.skills[sp_skill.id];
|
||||
|
||||
if (!sp_myskill || sp_myskill.disable)
|
||||
return me.notify("这个技能暂时无法使用,请联系管理员处理。");
|
||||
|
||||
|
||||
var is_ref = false;
|
||||
let pfm = sp_skill.get_pfm(pfmid);
|
||||
if (!pfm) {
|
||||
if (pfmid == 'ref') {
|
||||
pfm = me.query_ref_skill(me.skills[baseSkill.enable_skill]);
|
||||
}
|
||||
if (!pfm) {
|
||||
return me.notify(sp_skill.name + "没有这个绝招。");
|
||||
} else {
|
||||
is_ref = true;
|
||||
}
|
||||
|
||||
}
|
||||
if (me.environment.no_fight && !pfm.allow_safe) return me.notify("这里不允许战斗。");
|
||||
|
||||
|
||||
var name = "【" + pfm.name + "】";
|
||||
//0 只能战斗中使用, 1,只能非战斗 2,任何时候
|
||||
if (me.hp <= 0) return;
|
||||
if (!pfm.allow_busy && me.is_busy) return me.notify("你现在手忙脚乱,无法使用" + name + "。");
|
||||
if (me.is_faint && !pfm.allow_faint) return me.send("你正在昏迷中。");
|
||||
if (!pfm.use_type && !me.is_fighting()) return me.notify(name + "只能在战斗中使用。");
|
||||
if (pfm.use_type == 1 && me.is_fighting()) return me.notify("战斗中无法使用" + name + "。");
|
||||
|
||||
|
||||
var lv = me.query_skill(sp_skill.id, 0);
|
||||
if (is_ref) lv = parseInt(lv / 2);
|
||||
if (me.mp < pfm.query_mp(me, lv)) {
|
||||
return me.notify("你的内力不够,无法使用" + name);
|
||||
}
|
||||
if (pfm.check && !pfm.check(me,
|
||||
lv, sk)) return;
|
||||
|
||||
if (pfm.enable_skill && pfm.enable_skill != sk) {
|
||||
return me.notify(name + "需要装备为" + SKILL.get(pfm.enable_skill).name + "才可以使用。");
|
||||
}
|
||||
if (sk === "throwing" && !me.can_throwing()) {
|
||||
return me.notify("你没有装备暗器,无法使用" + name);
|
||||
}
|
||||
|
||||
if (pfm.weapon_type) {
|
||||
if (pfm.weapon_type != me.query_weapon_type())
|
||||
return me.notify("你装备的武器不对,无法使用" + name);
|
||||
} else {
|
||||
let need_weapon = WEAPON[sk];
|
||||
if (need_weapon && need_weapon !== me.query_weapon_type()) {
|
||||
return me.notify("你装备的武器不对,无法使用" + name);
|
||||
}
|
||||
// if (!NOWEAPON[pfm.enable_skill]) {
|
||||
// if (pfm.enable_skill != me.query_weapon_type()) {
|
||||
// return me.notify("你装备的武器不对,无法使用" + name);
|
||||
// }
|
||||
// }
|
||||
}
|
||||
if (pfm.check && !pfm.no_check && !pfm.check(me, lv)) {
|
||||
return;
|
||||
}
|
||||
var key = "pfm/" + sk + "/" + pfmid;
|
||||
if (me.query_temp(key)) {
|
||||
return me.notify(pfm.name + "还没准备好,你还不能使用。");
|
||||
}
|
||||
var target = me.query_enemy();
|
||||
if (!pfm.use_type) {
|
||||
if (!target) return me.notify("你要用绝招对付谁?");
|
||||
|
||||
}
|
||||
|
||||
var now = Date.now();
|
||||
if (me.release_time && now < me.release_time)//上个技能还没释放完
|
||||
{
|
||||
return me.notify("你上个技能还没释放完成。");
|
||||
}
|
||||
|
||||
|
||||
var isrelease = false;
|
||||
|
||||
if (me.query_prop('no_pfm')) {
|
||||
|
||||
me.send_room("<red>$N释放技能" + pfm.name + ",但是没有产生任何效果。</red>\n");
|
||||
me.remove_status('bikou');
|
||||
isrelease = true;
|
||||
} else if (target && target.parry_skill && target.parry_skill.on_parry_pfm) {
|
||||
isrelease = target.parry_skill.on_parry_pfm(target, me, pfm, lv, sk);
|
||||
|
||||
} else {
|
||||
if (pfm.is_weapon && sp_skill != me.attack_skill) {
|
||||
//me.attack_skill = sp_skill;
|
||||
me.remove_status('weapon', true);
|
||||
}
|
||||
isrelease = pfm.use(me, target, lv, sk) != false;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
if (isrelease) {
|
||||
me.add_mp(-pfm.query_mp(me, lv) || 0);
|
||||
//释放成功才算释放时间
|
||||
// if (!pfm.use_type) {
|
||||
// //保存目标被释放的技能
|
||||
// me.set_temp("used_pfm", pfm.id, 20000);
|
||||
// }
|
||||
me.set_temp("used_pfm", pfm.id, 20000);
|
||||
var time = pfm.query_releasetime(me, lv);
|
||||
if (time) me.release_time = time + now;
|
||||
else me.release_time = 0;
|
||||
|
||||
var distime = pfm.query_distime(me, lv, is_ref);
|
||||
var rtime = isrelease ? pfm.query_releasetime(me, lv) : 0;
|
||||
|
||||
me.set_temp(key, 1, distime + rtime);
|
||||
me.notify('{type:"dispfm",id:"' + sk + "." + pfmid + '",rtime:'
|
||||
+ rtime + ',distime:' + (distime + rtime) + '}');
|
||||
if (pfm.is_weapon && sp_skill != me.attack_skill) {
|
||||
me.attack_skill = sp_skill;
|
||||
me.remove_status('weapon', true);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const NOWEAPON = {
|
||||
"force": true,
|
||||
"unarmed": true, "dodge": true,
|
||||
"parry": true, throwing: true
|
||||
};
|
||||
|
||||
const WEAPON = {
|
||||
sword: "sword",
|
||||
blade: "blade",
|
||||
staff: "staff",
|
||||
club: "club",
|
||||
whip: "whip"
|
||||
};
|
||||
|
||||
// WEAPON_TYPE = {
|
||||
// NONE: "unarmed",
|
||||
// SWORD: "sword",
|
||||
// BLADE: "blade",
|
||||
// STAFF: "staff",
|
||||
// CLUB: "club",
|
||||
// WHIP: "whip",
|
||||
// THROWING: "throwing"
|
||||
// }
|
||||
Reference in New Issue
Block a user