init: add workspace files

This commit is contained in:
2026-05-26 16:41:20 +08:00
commit f4f2393f72
1041 changed files with 67405 additions and 0 deletions

View 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;
//}

View 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
View 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
View 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
View 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
View 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
View 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
View 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>');
}