init: add workspace files
This commit is contained in:
53
world/cmd/battle/combat.js
Normal file
53
world/cmd/battle/combat.js
Normal file
@@ -0,0 +1,53 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "combat";
|
||||
this.allow_busy = true;
|
||||
this.allow_state = true;
|
||||
this.allow_die = true;
|
||||
this.enter = function (me, type) {
|
||||
if (type=="end") {
|
||||
me.combat_info = false;
|
||||
} else {
|
||||
me.combat_info = true;
|
||||
|
||||
//me.notify(me.query_status());
|
||||
me.notify(me.query_pfms());
|
||||
//if (me.is_fighting()) {
|
||||
// var target = me.enemy[0];
|
||||
// if (target)
|
||||
// me.notify(target.query_status());
|
||||
//}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//USER.prototype.query_pfms = function () {
|
||||
// if (this.pfm_json) return this.pfm_json;
|
||||
// var obj = {};
|
||||
// obj.type = "perform";
|
||||
// obj.distime = this.gjsd;
|
||||
// obj.items = [];
|
||||
// var skills = this.skills;
|
||||
// if (skills) {
|
||||
// var bases = ["unarmed", "force", "dodge", "parry"];
|
||||
// var weapon = this.query_weapon_type();
|
||||
// if (weapon != WEAPON_TYPE.NONE) bases.push(weapon);
|
||||
// for (var i = 0; i < bases.length; i++) {
|
||||
// var base_skill = skills[bases[i]];
|
||||
// if (base_skill) {
|
||||
// var sp_skill = SKILL.get(base_skill.enable || bases[i]);
|
||||
// if (sp_skill && sp_skill.pfm) {
|
||||
// for (var p in sp_skill.pfm) {
|
||||
// var pfmitem = sp_skill.pfm[p];
|
||||
// obj.items.push({
|
||||
// name: pfmitem.name,
|
||||
// distime: pfmitem.distime || 1,
|
||||
// id: bases[i] + "." + p
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// this.pfm_json = JSON.stringify(obj)
|
||||
// return this.pfm_json;
|
||||
//}
|
||||
9
world/cmd/battle/escape.js
Normal file
9
world/cmd/battle/escape.js
Normal file
@@ -0,0 +1,9 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "escape";
|
||||
this.enter = function (me) {
|
||||
|
||||
if (!me.fight_type) {
|
||||
return me.notify("你现在没有在战斗,逃跑干嘛?");
|
||||
}
|
||||
me.do_escape();
|
||||
}
|
||||
75
world/cmd/battle/fight.js
Normal file
75
world/cmd/battle/fight.js
Normal file
@@ -0,0 +1,75 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "fight";
|
||||
this.enter = function (me, argid) {
|
||||
if (argid == "none") {
|
||||
var items = me.environment.items;
|
||||
for (var i = 0; i < items.length; i++) {
|
||||
if (items[i].is_player && items[i].query_temp("fight") == me.id) {
|
||||
me.send_room("看起来$N并不想跟$n较量。", items[i], true);
|
||||
return me.notify("你拒绝了" + items[i].name + "的比试请求。");
|
||||
}
|
||||
}
|
||||
return me.notify("这里没有人想要和你比试。");
|
||||
}
|
||||
if (me.environment.no_fight) return me.notify("这里不允许战斗。");
|
||||
var target = me.find_obj(argid, me.environment);
|
||||
if (!target) {
|
||||
return me.notify("你要攻击谁?");
|
||||
}
|
||||
if (target.can_speek == false) return me.notify("看起来它并不想跟你较量。");
|
||||
if (target == me) return me.notify("你不能和自己比试。");
|
||||
if (target.hp < target.max_hp * 0.95) {
|
||||
return me.notify(target.name + "的状态不是很好,你想趁人之危吗?");
|
||||
}
|
||||
if (me.hp < me.max_hp) {
|
||||
return me.notify("你先调整好自己的状态再来找别人比试吧。");
|
||||
}
|
||||
if (me.is_fighting(target)) {
|
||||
return me.notify("加油,加油!!");
|
||||
}
|
||||
if (me.is_fighting()) {
|
||||
return me.notify("等你打完再和别人比试吧!");
|
||||
}
|
||||
if (target.is_fighting()) {
|
||||
return me.notify("对方正在切搓,等对方打完再来吧");
|
||||
}
|
||||
me.send_room("\n$N对著$n说道:"
|
||||
+ me.callme()
|
||||
+ me.name + ",领教"
|
||||
+ target.call() + "的高招!\n", target);
|
||||
|
||||
if (target.no_fight || target.query_setting("off_fight")) {
|
||||
return me.send_room("看起来$n并不想跟$N较量。", target);
|
||||
} else {
|
||||
var ol_fight = me.query_temp("fight");
|
||||
if (ol_fight) {
|
||||
if (ol_fight != target.id) {
|
||||
var ol_target = me.find_obj(ol_fight, me.environment);
|
||||
if (ol_target) {
|
||||
ol_target.notify("<yel>" + me.name + "取消了和你比试的念头。\n</yel>");
|
||||
}
|
||||
me.remove_temp("fight");
|
||||
}
|
||||
}
|
||||
if (target.is_player) {
|
||||
if (target.query_temp("fight") != me.id) {
|
||||
me.set_temp("fight", target.id, 10000);
|
||||
target.notify("<hiy>" + me.name + "想和你比试,你是否同意:</hiy>");
|
||||
target.send_commands("fight " + me.id, "和" + me.name + "比试", "fight none", "不同意");
|
||||
return me.notify("<hiy>已发送比试请求,正在等待对方同意。</hiy>");
|
||||
} else {
|
||||
target.remove_temp("fight");
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (target.on_before_fight && target.on_before_fight(me) === false)
|
||||
return;
|
||||
|
||||
}
|
||||
me.send_room("$n说道:既然" + me.call() + "赐教," + target.callme() + "只好奉陪。\n", target);
|
||||
me.begin_attack(target, 1);
|
||||
target.begin_attack(me, 1);
|
||||
|
||||
}
|
||||
}
|
||||
88
world/cmd/battle/kill.js
Normal file
88
world/cmd/battle/kill.js
Normal file
@@ -0,0 +1,88 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "kill";
|
||||
this.enter = function (me, argid) {
|
||||
if (me.state) {
|
||||
return me.notify("你现在正在" + me.state.title + ",没时间杀人。");
|
||||
}
|
||||
if (me.environment.no_fight) {
|
||||
return me.notify("这里不允许战斗。");
|
||||
}
|
||||
var target = me.find_obj(argid, me.environment);
|
||||
if (!target || !target.do_kill) {
|
||||
return me.notify("你要攻击谁?");
|
||||
}
|
||||
if (target === me) return me.notify("你要攻击谁?");
|
||||
if (target.is_player) {
|
||||
|
||||
// me.add_temp('k_ss', 1, UTIL.diff_time());
|
||||
if (target.query_setting("ban_pk"))
|
||||
return me.notify(target.name + "正在开启PK保护,你不能击杀" + target.call3() + "。");
|
||||
if (me.query_setting("ban_pk"))
|
||||
return me.notify("你正在开启PK保护,无法主动PK玩家。");
|
||||
else {
|
||||
if (!me.query_temp("pk")) {
|
||||
me.notify("<hic>你主动击杀玩家,7天内不能开启PK保护。</hic>");
|
||||
}
|
||||
me.set_temp("pk", 1, 24 * 3600000 * 7);
|
||||
}
|
||||
} else if (target.family && target.on_master) {
|
||||
if (me.query_setting("ban_pk"))
|
||||
return me.notify("你正在开启PK保护,无法击杀拜师NPC。");
|
||||
}
|
||||
|
||||
if (me.enemy && me.enemy[0] == target) {
|
||||
return me.notify("加油,加油!!");
|
||||
}
|
||||
if (me.fight_type == 1) return me.notify("你先比试完再说。");
|
||||
if (me.is_fighting()) {
|
||||
for (var i = 0; i < me.enemy.length; i++) {
|
||||
if (me.enemy[i] == target) {
|
||||
|
||||
me.enemy.splice(i, 1);
|
||||
me.enemy.splice(0, 0, target);
|
||||
return me.send_room("$N扑向$n!", target);;
|
||||
}
|
||||
}
|
||||
if (target.on_kill && target.on_kill(me) == false) return;
|
||||
target.do_kill(me);
|
||||
target.begin_kill && target.begin_kill(me);
|
||||
return me.send_room("$N扑向$n!", target);
|
||||
}
|
||||
if (target.fight_type == 1) {
|
||||
// var eny = target.query_enemy();
|
||||
// if (eny) {
|
||||
// eny.end_fight();
|
||||
// }
|
||||
// target.end_fight();
|
||||
// return me.notify('对方正在比试,你不能趁人之危。');
|
||||
}
|
||||
// me.send_room("$N对$n大喊一声:看招!\n", target);
|
||||
me.send_room("\n$N对著$n喝道:「"
|
||||
+ target.call(me, true) + "!今日不是你死就是我活!」\n", target);
|
||||
//me.begin_attack(target, 2);
|
||||
|
||||
if (target.on_kill && target.on_kill(me) == false) return;
|
||||
|
||||
if (me.team) {
|
||||
for (var i = 0; i < me.team.length; i++) {
|
||||
var item = me.team[i];
|
||||
if (item.master == me.id && item.query_setting("auto_kill") == 2 && item.is_here(me)) {
|
||||
item.do_kill(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
me.do_kill(target);
|
||||
target.begin_kill && target.begin_kill(me);
|
||||
if (me.team) {
|
||||
for (var i = 0; i < me.team.length; i++) {
|
||||
var item = me.team[i];
|
||||
if (item.master == me.id && item.query_setting("auto_kill") == 1 && item.is_here(me)) {
|
||||
item.do_kill(target);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
WORLD.auto_pfm(me, target);
|
||||
|
||||
}
|
||||
|
||||
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"
|
||||
// }
|
||||
11
world/cmd/battle/pk.js
Normal file
11
world/cmd/battle/pk.js
Normal file
@@ -0,0 +1,11 @@
|
||||
|
||||
this.inherits(COMMAND);
|
||||
this.command = "pk";
|
||||
this.allow_busy = true;
|
||||
this.allow_state = true;
|
||||
this.allow_die = true;
|
||||
this.allow_faint = true;
|
||||
this.enter = function (me) {
|
||||
var zc = WORLD.AREAS[6];
|
||||
|
||||
}
|
||||
109
world/cmd/battle/relive.js
Normal file
109
world/cmd/battle/relive.js
Normal file
@@ -0,0 +1,109 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "relive";
|
||||
this.allow_die = true;
|
||||
this.enter = function (me, arg) {
|
||||
if (!WORLD.is_server(me)) {
|
||||
return WORLD.on_cross_user_relive(me);
|
||||
}
|
||||
if (me.hp > 0) return me.notify("你还没死呢。");
|
||||
if (!me.environment) return me.notify("你不知道在哪。");
|
||||
if (me.query_temp("relive")) {
|
||||
return me.notify("你已经使用了天师符,正在等待复活。");
|
||||
}
|
||||
|
||||
me.die = USER.prototype.die;
|
||||
var dt = new Date();
|
||||
var isqmhd = dt.getMonth() === 3 && dt.getDate() === 5;
|
||||
var ismaxcount = false;
|
||||
if (isqmhd) {
|
||||
let next = new Date(dt.getFullYear(), dt.getMonth(), dt.getDate(), dt.getHours() + 1);
|
||||
ismaxcount = me.add_temp('died', 1, next.getTime() - dt.getTime()) < 11;
|
||||
}
|
||||
|
||||
// me.add_temp('died', 1, UTIL.diff_time());
|
||||
if (arg == "locale") {
|
||||
if (me.environment.no_relive)
|
||||
return me.notify('这里不能复活。');
|
||||
|
||||
|
||||
if (!isqmhd) {
|
||||
var fu = me.find_obj_bypath("cash/tianshifu");
|
||||
if (!fu || !fu.count) return me.notify("你身上没有天师符。");
|
||||
me.remove_obj(fu, 1);
|
||||
}
|
||||
if (isqmhd && ismaxcount) {
|
||||
WORLD.DATA.set_temp("new_die", me.id, 600000);
|
||||
WORLD.DATA.set_temp("new_die_type", 1, 600000);
|
||||
// me.add_temp('die1', 1, 3600000 * 28);
|
||||
}
|
||||
|
||||
me.set_temp("relive", 1, 5000);
|
||||
me.notify("<MAG>你拿出一张天师符,口中念念有词!</MAG><hik>\n五秒后将原地复活</hik>");
|
||||
|
||||
this.call_out(x => {
|
||||
me.hp = me.max_hp;
|
||||
me.mp = me.max_mp;
|
||||
me.notify('{type:"die",relive:true}');
|
||||
if (me.force_skill.on_relive) {
|
||||
me.force_skill.on_relive(me);
|
||||
}
|
||||
if (me.environment.on_relive && me.environment.on_relive(me, true) === false) {
|
||||
return;
|
||||
}
|
||||
me.clear_status();
|
||||
let room = me.environment;
|
||||
me.environment = null;
|
||||
me.moveto(room, null, "<mag>" + me.name + "的尸体发出阵阵光芒。</mag>");
|
||||
}, 5000);
|
||||
|
||||
|
||||
} else {
|
||||
var area = me.environment.parent;
|
||||
var area_name = null;
|
||||
if (area) area_name = area.name;
|
||||
|
||||
|
||||
if (me.environment.on_relive && me.environment.on_relive(me, false) === false) {
|
||||
return;
|
||||
}
|
||||
|
||||
var recover_room = me.environment.query_recover_room();
|
||||
var is_fb = me.environment.is_fb();
|
||||
if (is_fb) {
|
||||
me.environment.clear_copy(me);
|
||||
}
|
||||
// if(me.query_temp('ns_bt')){
|
||||
// let npc=me.environment.find_obj_bypath('pub/nianshou');
|
||||
// if(npc){
|
||||
// npc.destroy();
|
||||
// //me.remove_temp('ns_bt');
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
me.environment.item_changed(me, false);
|
||||
var room = ROOM.Get(recover_room);
|
||||
me.hp = 1;
|
||||
me.clear_status();
|
||||
room.do_enter(me, true, "<wht>你忽然发现前面多了一个人影,不过那人影又好像已经在那里很久了,只是你一直没发觉。</wht>");
|
||||
|
||||
area.on_leaved(me);
|
||||
|
||||
if (isqmhd && ismaxcount) {
|
||||
WORLD.DATA.set_temp("new_die", me.id, 600000);
|
||||
WORLD.DATA.set_temp("new_die_type", 2, 600000);
|
||||
//me.add_temp('die2', 1, 3600000 * 28);
|
||||
}
|
||||
if (area_name && is_fb) {
|
||||
me.notify("你的副本" + area_name + "失败了。");
|
||||
}
|
||||
me.notify('{type:"die",relive:true}');
|
||||
if (me.force_skill.on_relive) {
|
||||
me.force_skill.on_relive(me);
|
||||
}
|
||||
if ((!me.team || me.team[0] === me) && me.query_temp('fbbs', 0) === 1) {
|
||||
me.remove_temp('fbbs');
|
||||
}
|
||||
}
|
||||
}
|
||||
24
world/cmd/battle/spfm.js
Normal file
24
world/cmd/battle/spfm.js
Normal file
@@ -0,0 +1,24 @@
|
||||
this.inherits(COMMAND);
|
||||
this.command = "spfm";
|
||||
this.allow_die = true;
|
||||
this.allow_faint = true;
|
||||
this.allow_state = true;
|
||||
this.allow_busy = true;
|
||||
this.regex = /(\w+)(?:\s+(\w+))?/;
|
||||
this.enter = function (me, arg1, arg2) {
|
||||
if (!arg1) return;
|
||||
let func = this['set_' + arg1];
|
||||
if (func) {
|
||||
func.call(this, me, arg2);
|
||||
}
|
||||
}
|
||||
this.set_qkyz = function (me, arg) {
|
||||
if (!arg || (!(arg > 0))) {
|
||||
me.remove_temp('qkyz_m');
|
||||
return me.send('<cyn>你将乾坤一掷更改为使用内力,不消耗铜板。</cyn>');
|
||||
}
|
||||
if (arg > 100000) arg = 100000;
|
||||
me.set_temp('qkyz_m', arg);
|
||||
|
||||
me.send('<cyn>你的乾坤一掷每次使用将消耗' + arg + '个铜板。</cyn>');
|
||||
}
|
||||
Reference in New Issue
Block a user