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("$N释放技能" + pfm.name + ",但是没有产生任何效果。\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" // }