this.inherits(COMMAND);
this.command = "jh";
this.allow_busy = true;
this.allow_state = true;
this.allow_die = true;
this.allow_faint = true;
this.fbs_json = null;
this.fbs = [];
this.regex = /^(\w+)?\s?(lock|\d+)?(?:\s(start[1|2|3]?))?$/;
this.enter = function (me, type, arg, isstart) {
if (!me.is_player) return;
var unlock = me.query_temp("fb", 0);
var unlock2 = me.query_temp("fb2", 0);
if (arg == "lock")
return me.send(`{type:"dialog",dialog:"jh",unlock:${unlock},unlock2:${unlock2}}`);
if (!this.map_json) {
this.map_json = this.getAllMaps();
}
if (!arg && !type) {
me.send(this.map_json);
me.send(`{type:"dialog",dialog:"jh",unlock:${unlock},unlock2:${unlock2}}`);
} else {
var index = parseInt(arg);
if (!isstart) {
if (type == "fb") return this.return_fbdesc(me, index);
if (type == "fam") return this.return_famdesc(me, index);
else return this.return_areadesc(me, index);
} else {
if (me.check_command({
allow_busy: false, allow_state: false,
allow_die: false, allow_faint: false,
allow_fight: false
}) == false) return;
if (type == "fb") {
var fb = this.fbs[index];
if (fb.is_lock) {
return me.notify("暂未开放,正在修复");
}
if (fb.unlock_index) {
if (fb.unlock_index > unlock) {
return me.notify("你需要完成" + this.fbs[fb.unlock_index - 1].name + "才能解锁" + fb.name + "。");
}
} else if (index > unlock) {
return me.notify(fb.name + "尚未解锁。");
}
if (!me.environment) return me.notify("你不知道在哪。");
if (me.environment.is_fb()) return me.notify("你现在正在副本区域。");
if (!fb || !fb.id) return me.notify("没有这个副本。");
if (fb.start_room && !me.is_in(fb.start_room))
return me.notify('你要进入哪个副本?');
if (isstart == "start1") {
// if (me.team) return me.notify("你目前处于队伍当中,无法进入单人副本。");
var count = me.query_temp("fbc_0_" + fb.fb_index, 0);
if (count) {
me.notify("即将进入副本(" + fb.name + ")区域,已完成" + count + "次,本次副本需要消耗" + fb.expend + "点精力。\n当前精力:" + me.query_jingli());
} else {
me.notify("即将进入副本(" + fb.name + ")区域,本次副本需要消耗" + fb.expend + "点精力。\n当前精力:" + me.query_jingli());
}
let can_sd = false;
if (fb.unlock_index) {
can_sd = me.query_temp('fb_sao' + index, 0) === 1;
} else {
can_sd = me.query_temp('fb_sao0') >= index;
}
if (can_sd) {
return me.send_commands('cr ' + fb.id, "进入副本", "cr " + fb.id + " 0 1", "扫荡一次",
"cr " + fb.id + " 0 10", "扫荡十次");
} else {
return me.send_commands('cr ' + fb.id, "进入副本");
}
} else if (isstart == "start2") {
// if (me.team) return me.notify("你目前处于队伍当中,无法进入单人副本。");
let count = me.query_temp("fbc_1_" + fb.fb_index, 0);
if (count) {
me.notify("即将进入副本(" + fb.name + ")困难区域,已完成" + count + "次,本次副本需要消耗" + fb.expend + "点精力。\n当前精力:" + me.query_jingli());
} else {
me.notify("即将进入副本(" + fb.name + ")困难区域,本次副本需要消耗" + fb.expend + "点精力。\n当前精力:" + me.query_jingli());
}
let can_sd = false;
if (fb.unlock_index) {
can_sd = me.query_temp('fb_sao' + fb.index, 0) === 2;
} else {
can_sd = me.query_temp('fb_sao1') >= index;
}
if (can_sd) {
return me.send_commands('cr ' + fb.id + " 1 0", "进入副本", "cr " + fb.id + " 1 1",
"扫荡一次", "cr " + fb.id + " 1 10", "扫荡十次");
} else {
return me.send_commands('cr ' + fb.id + " 1 0", "进入副本");
}
} else if (isstart == "start3") {
if (!me.team) return me.notify("你目前没有在队伍当中,无法进入组队副本。");
for (var i = 0; i < me.team.length; i++) {
var tm = me.team[i];
if (tm.environment && tm.environment.is_fb() &&
tm.environment.parent != fb) {
return me.notify(tm.name + "现在正在副本【" + tm.environment.parent.name + "】区域,无法开启其它副本。");
}
}
me.send("即将组队进入副本(" + fb.name + ")区域,本次副本需要消耗" + fb.expend + "点精力。\n当前精力:" + me.query_jingli() + "/100");
return me.send_commands('cr ' + fb.id + " 2 0", "进入副本");
}
} else if (type === 'ar') {
if (!me.can_trans()) return;
let fb = this.areas[index];
if (!fb || !fb.id) return me.notify("没有这个禁地区域。");
if (!(fb.jd_index >= 0)) return me.notify("没有这个禁地区域。");
if (fb.is_lock) return me.notify("暂未开放,正在修复");
let diff = 0;
if (me.team) diff = 2;
if (!me.isenable_area(fb)) return me.notify("未解锁区域");
if (fb.is_copy && !fb.not_fb) {//禁地类型的副本
this.enter_ar_fb(me, fb, diff);
} else {
if (fb.on_enter(me) == false) {
return;
}
me.moveto(fb.first, me.name + "走了。", me.name + "来了。");
}
} else {
if (!me.can_trans()) return;
let fb = this.families[index];
if (!fb || !fb.first) return me.notify("没有这个门派。");
if (fb.on_enter(me) == false) {
return;
}
me.moveto(ROOM.Get(fb.first), me.name + "走了。", me.name + "来了。");
}
me.send('{type:"dialog",dialog:"jh",close:true}');
}
}
}
this.enter_ar_fb = function (me, fb, diff = 0) {
var count =
me.query_temp(fb.count_key ?? ("fbc_0_" + fb.fb_index), 0);
if (count) {
me.notify("即将进入禁地副本(" + fb.name
+ ")区域,已完成" + count +
"次,本次副本需要消耗" + fb.expend
+ "点精力。\n当前精力:" + me.query_jingli());
} else {
me.notify("即将进入禁地副本(" + fb.name
+ ")区域,本次副本需要消耗" + fb.expend
+ "点精力。\n当前精力:" + me.query_jingli());
}
let can_sd = me.query_temp('fb_sao' + fb.fb_index, 0) === 1;
if (can_sd) {
let sd_diff = diff;
if (sd_diff === 2) sd_diff = 0;
return me.send_commands('cr ' + fb.id + " " + diff + " 0",
"进入副本", "cr " + fb.id + " " + sd_diff + " 1",
"扫荡一次", "cr " + fb.id + " " + sd_diff + " 10", "扫荡十次");
} else {
return me.send_commands('cr ' + fb.id + " " + diff + " 0",
"进入副本");
}
}
this.return_famdesc = function (me, index) {
if (!(index >= 0 && index < this.families.length)) return me.notify("没有这个门派。");
var fb = this.families[index];
if (!fb) return me.notify("没有这个门派。");
if (fb.json) return me.send(fb.json);
var obj = {};
obj.type = "dialog";
obj.dialog = "jh";
obj.index = index;
obj.ref = fb.no_cache ? 0 : 1;
obj.desc = fb.query_desc();
obj.actions = fb.query_actions(me);
obj.sp = fb.sp;
obj.t = "fam";
if (fb.family) {
var fam = FAMILIES[fb.family];
if (fam) {
fb.skills = fam.skills;
fb.skills2 = fam.skills2;
fb.skills4 = fam.skills4;
}
}
var str = [];
if (fb.skills) {
str.push("门派武功:\n");
for (var i = 0; i < fb.skills.length; i++) {
str.push("");
str.push(fb.skills[i].color_name);
str.push("\n");
}
}
if (str.length) obj.skills = str.join("");
fb.json = JSON.stringify(obj);
me.send(fb.json);
}
this.return_areadesc = function (me, index) {
if (!(index >= 0 && index < this.areas.length)) return me.notify("没有这个副本。");
var fb = this.areas[index];
if (!fb) return me.notify("没有这个区域。");
if (fb.json) return me.send(fb.json);
var obj = {};
obj.type = "dialog";
obj.dialog = "jh";
obj.t = "ar";
obj.index = index;
obj.desc = fb.desc;
obj.actions = fb.query_actions(me);
// if (fb.is_copy && !fb.not_fb)
// obj.status = this.fb_status(fb);
obj.reward = "掉落或解谜奖励:\n" + this.fb_drops(fb);
fb.json = JSON.stringify(obj);
me.send(fb.json);
}
this.return_fbdesc = function (me, index) {
if (!(index >= 0 && index < this.fbs.length)) return me.notify("没有这个副本。");
var fb = this.fbs[index];
if (!fb) return me.notify("没有这个副本。");
if (fb.json) return me.send(fb.json);;
var obj = {};
obj.type = "dialog";
obj.dialog = "jh";
obj.t = "fb";
obj.index = index;
obj.desc = fb.desc;
obj.status = this.fb_status(fb);
var str = [];
var exp = fb.query_exp();
str.push("获得");
str.push(exp);
str.push("点经验,");
str.push(exp);
str.push("点潜能\n掉落或解谜奖励:\n");
str.push(this.fb_drops(fb));
obj.reward = str.join("");
obj.diffs = [1, fb.is_diffi ? 1 : 0, fb.is_multi ? 1 : 0];
fb.json = JSON.stringify(obj);
me.send(fb.json);
}
this.fb_drops = function (fb) {
var json = [];
var drops = fb.drops || [];
fb.drop_items = [];
for (var i = 0; i < drops.length; i++) {
var oitem = OBJ.CREATE(drops[i]);
if (oitem) {
json.push("" + oitem.color_name + "");
fb.drop_items.push(oitem);
}
}
return json.join("\n");
}
this.fb_status = function (fb) {
let status = [];
let fblock = fb.fb_index + 1;
let fb_key = "fb_first_" + fblock + "_0";
let ss_0 = WORLD.DATA.query_temp(fb_key);
if (ss_0) {
status[0] = [1, ss_0];
} else {
status[0] = [0, fb.is_diffi ? "" : fb.ss_title];
}
if (fb.is_diffi) {
fb_key = "fb_first_" + fblock + "_1";
ss_0 = WORLD.DATA.query_temp(fb_key);
if (ss_0) {
status[1] = [1, ss_0];
} else {
status[1] = [0, fb.ss_title ?? ""];
}
} else {
status[1] = null;
}
if (fb.is_multi) {
fb_key = "fb_first_" + fblock + "_2";
ss_0 = WORLD.DATA.query_temp(fb_key);
if (ss_0) {
status[2] = [1, ss_0];
} else {
status[2] = [0, ""];
}
}
return status;
}
this.init = function () {
this.map_json = this.getAllMaps();
}
this.getAllMaps = function (me) {
var map = {};
map.type = "dialog";
map.dialog = "jh";
map.fbs = [];
map.families = [];
map.areas = [];
this.fbs = [];
this.families = [];
this.areas = [];
for (var i = 0; i < WORLD.AREAS.length; i++) {
var area = WORLD.AREAS[i];
area.area_index = i;
if (AREAS[area.id] >= 0) {
let index = AREAS[area.id];
map.families[index] = area.name;
this.families[index] = area;
// AREAS[area.id] = area;
} else if (FBS[area.id] >= 0) {
area.fb_index = FBS[area.id];
map.fbs.push(area.name);
this.fbs.push(area);
FBS[area.id] = area;
} else if (JDS[area.id] >= 0) {
let index = JDS[area.id];
area.jd_index = index;
this.areas[index] = area;
map.areas[index] = area.name;
}
}
AREA.FBS = this.fbs;
return JSON.stringify(map);
}
AREA.Get_FB = function (id) {
return FBS[id];
}
this.get_area = function (id) {
if (!this.areas) this.getAllMaps();
let index = AREAS[id];
if (index >= 0) {
return this.areas[index];
}
return null;
}
const AREAS = {
yz: 0, wudang: 1, shaolin: 2, huashan: 3, emei: 4,
xiaoyao: 5, gaibang: 6, shashou: 7, xiangyang: 8, wudao: 9
};
const FBS = {
"lw": 0, "cuifu": 1, "lmw": 2, "lcy": 3,
"by": 4, "zhuang": 5, "ao": 6, "tdh": 7
}
const JDS = {
heiying: 0,
// gmp: 4,
// gumen: 5,
// gzc: 6,
// gysd: 7,
// yzjd: 8
};