this.inherits(COMMAND); this.command = "cr"; this.allow_fight = true; //this.allow_busy = true; this.enter = function (me, arg) { if (!me.environment) return; if (!arg) { fb_confirm_over(me); } else if (arg == "over") { fb_over(me); } else { fb_start(me, arg); } } function fb_ok(me) { var r = me.query_temp("teamcr"); if (r == 1) { me.set_temp("teamcr", 2, 200000); me.send_team("" + me.name + "同意进入副本。"); for (var i = 0; i < me.team.length; i++) { if (me.team[i].query_temp("teamcr") != 2) { return; } } return; } else if (r == 2) { return me.notify("你已经同意了。"); } return me.notify("没有人邀请你进入副本。"); } function fb_reject(me) { var r = me.query_temp("teamcr"); if (r == 1) { me.remove_temp("teamcr"); return me.send_team("" + me.name + "拒绝进入副本。"); } else if (r == 2) { return me.notify("你已经同意了。"); } return me.notify("没有人邀请你进入副本。"); } function fb_saodang(me, path, isdiff, count) { var fb = AREA.Get_FB(path); if (!fb) { return me.notify("没有这个副本!"); } let next_room = ROOM.Get(fb.first); if (!next_room) { return me.notify("没有这个房间"); } if (!next_room.is_fb()) return me.notify(fb.name + "不是副本区域!"); if (!fb.is_unlock(me)) return me.notify("副本" + fb.name + "还没解锁!"); if (me.is_full(-10)) return me.notify("你身上东西太多了!"); var area = next_room.parent; var unlock_name = isdiff ? "fb_sao1" : "fb_sao0"; if (area.unlock_index) { if (me.query_temp('fb_sao' + area.fb_index, 0) !== (isdiff ? 2 : 1)) return me.notify("你需要" + area.name + (isdiff ? "(困难)" : "(普通)") + "单人模式完成100%才可以扫荡副本!"); } else { if (area.fb_index >= (me.query_temp(unlock_name) || 0)) return me.notify("你需要" + area.name + (isdiff ? "(困难)" : "(普通)") + "单人模式完成100%才可以扫荡副本!"); } count = parseInt(count); if (me.query_jingli() < area.expend) return me.notify("你的精力不够,无法扫荡副本。"); var fu = me.find_obj_bypath("cash/saodang"); if (!fu || fu.count < count) return me.notify_fail("你的扫荡符不够继续扫荡了。"); if (count == 1) return fb_quick(me, area, isdiff); me.call_interval(fb_quick.bind(me, me, area, isdiff), 500, count, x => { me.notify(area.name + "扫荡完成。"); }); } function fb_quick(me, area, isdiff) { var drops = area.query_drops(isdiff, me); if (!drops || !drops.length) return me.notify_fail('这里不能快速完成。'); var fu = me.find_obj_bypath("cash/saodang"); if (!fu || !fu.count) return me.notify_fail("你的扫荡符不够继续扫荡了。"); if (me.query_jingli() < area.expend) { me.notify("你的精力不够继续开启副本。"); return false; } if (me.items.length > 204) return me.notify_fail("你背包的东西太多了。"); if (area.on_quick && !area.on_quick(me)) return false; if (me.expend_jingli(area.expend) == false) { return me.notify_fail("你的精力不够,不能开启副本。"); } me.remove_obj(fu, 1); var max_score = area.query_exp(); me.add_exp(max_score, max_score); me.add_temp("fb_count", 1); me.add_temp("fb_count_day", 1, UTIL.diff_time()); var diff = isdiff ? 1 : 0; if (area.is_record(diff)) { '' me.add_temp("fbc_" + diff + "_" + area.fb_index, 1); } for (var j = 0; j < drops.length; j++) { var items = OBJ.create_by_odds(drops[j]); for (var i = 0; i < items.length; i++) { var item = me.add_obj(items[i]); if (item.is_equipment && item.grade >= 5) { COMMAND.DO("rumor", "听说有人得到了一" + item.unit + item.name + "。"); } var count = items[i].count || 1; if (item) { me.send("你获得了" + UTIL.to_c(count) + item.unit + item.color_name + "。"); } } } area.on_quick_over && area.on_quick_over(me); } function get_mincount(drops, obj) { for (var i = 0; i < drops.length; i++) { if (typeof drops[i].obj == "string") { if (drops[i].obj == obj) { return drops[i].min; } } else if (drops[i].obj.indexOf(obj) > -1) { return drops[i].min; } } return 1; } function get_odds(drops, obj) { for (var i = 0; i < drops.length; i++) { if (typeof drops[i].obj == "string") { if (drops[i].obj == obj) { return drops[i].odds; } } else if (drops[i].obj.indexOf(obj) > -1) { return drops[i].odds; } } return 1; } function fb_start(me, path) { if (!path) return me.notify("你要开始哪个副本?"); if (!me.environment) return me.notify("你不知道在哪。"); if (me.environment.is_fb()) return me.notify("你现在正在副本区域。"); if (me.environment.parent.on_leave && me.environment.parent.on_leave(me) == false) return; var pars = /^(.+?)\s(\d)\s(\d+)$/.exec(path); var diff_type = 0; if (pars != null) { path = pars[1]; diff_type = parseInt(pars[2]); if (diff_type < 0 || diff_type > 2) return; var sao = parseInt(pars[3]); if (sao > 0) { if (diff_type == 2) { return me.notify("组队副本不可以扫荡!"); } return fb_saodang(me, path, diff_type == 1, sao); } } var fb = AREA.Get_FB(path); if (!fb) { return me.notify("没有这个副本!"); } var next_room = ROOM.Get(fb.first); if (!next_room) { return me.notify("没有这个副本!"); } if (fb.is_lock) { return me.notify("暂未开放,正在修复"); } if (diff_type == 1 && !fb.is_diffi) { return me.notify(fb.name + "没有困难模式!"); } if (diff_type == 2) { if (!fb.is_multi) return me.notify(fb.name + "没有组队模式!"); if (!me.team || !me.team.length) return me.notify("你没有组队无法进入组队模式!"); } else { if (me.team) return me.notify("你正在队伍中,无法进入单人副本!"); } if (!next_room.is_copy() || !next_room.is_fb()) return me.notify(fb.name + "不是副本区域!"); if (!fb.is_unlock(me)) return me.notify("副本" + fb.name + "还没解锁!"); if (fb.on_enter && fb.on_enter(me) === false) return; var team = me.query_teamid(); var copy_room = next_room.query_copy(team); if (copy_room) { next_room = copy_room; if (me.team) { if (copy_room.query_temp(me, me.id) == 1) { return me.notify("你已经完成副本,必须等其他队员也完成后才可以重新进入。"); } if (me.expend_jingli(fb.expend) == false) { return me.notify("你的精力不够,无法副本。"); } //记录这个玩家进入副本的标志,防止重复进入 copy_room.set_temp(me, me.id, 1); } else { if (diff_type == 2) return me.notify("你需要组队才可以进入副本。"); } } else { if (me.query_jingli() < fb.expend) { return me.notify("你的精力不够,不能开启副本。"); } if (me.expend_jingli(fb.expend) == false) { return me.notify("你的精力不够,不能开启副本。"); } next_room = next_room.create_copy(team, diff_type); if (!next_room) { return me.notify("副本创建失败。"); } next_room.set_temp(me, "diff", diff_type); if (me.team) { next_room.set_temp(me, me.id, 1); for (var i = 0; i < me.team.length; i++) { var tm = me.team[i]; if (tm != me && tm.is_player) { tm.send("你的队友" + me.name + "已进入组队副本【" + fb.name + "】,是否进入?", true); tm.send('{type:\"cmds\",items:[{cmd:"cr ' + path + ' 2 0",name:"进入副本"}]}', true); } } } if (!me.team || me.team[0] === me) { WORLD.COMMANDS['ex'].on_enter_fb(me, next_room); } } me.send('{type:"dialog",dialog:"jh",close:true}'); me.set_temp("enter_room", me.environment.path); if (me.moveto(next_room, me.name + "离开了。", me.name + "走了进来。")) { if (me.team) { me.notify("你已进入组队副本,在副本中退出游戏,退出队伍,完成副本都会离开当前副本,当前队伍所有人都离开副本后才可以重新进入。"); } } } function fb_over(me) { var area = me.environment.parent; if (!me.environment || !me.environment.is_fb()) return; var score = me.query_fbscore(); var max_score = area.score || 100; var max_exp = area.query_exp(); var p = parseInt(score * 100 / max_score); if (p <= 0) p = 0; if (p > 100) p = 100; var exp = max_exp * p / 100; var pot = max_exp * p / 100; var fb = me.environment; var diff = fb.query_temp(me, "diff") || 0; if (me.moveto(me.query_temp("enter_room"), me.name + "离开了副本。", me.name + "走了过来。") != false) { if (me.team && me.environment.parent.id !== 'home') { for (let i = 0; i < me.team.length; i++) { if (!me.team[i].is_player && me.team[i].master === me.id && me.team[i].environment && me.team[i].environment.parent.id !== 'home') { me.team[i].end_fight(); if (me.team[i].hp < 1) me.team[i].hp = 1; me.team[i].moveto(me.query_home()); me.send(me.team[i].name + "回家了。"); } } } fb.clear_copy(me); me.add_temp("fb_count", 1); me.add_temp("fb_count_day", 1, UTIL.diff_time()); var unlock = me.query_temp("fb", 0); if (p >= 100) { let is_first_k = false; if (fb.parent.unlock_index) { if (!me.team && diff === 0) { if (!me.query_temp("fb_sao" + fb.parent.fb_index, 0)) { me.notify("单人(普通)模式扫荡解锁。"); me.set_temp("fb_sao" + fb.parent.fb_index, 1); is_first_k = true; } } else if (!me.team && diff === 1) { if (!me.query_temp("fb_sao" + fb.parent.fb_index, 0)) { me.notify("单人(困难)模式扫荡解锁。"); me.set_temp("fb_sao" + fb.parent.fb_index, 2); is_first_k = true; } } } else { if (unlock === fb.parent.fb_index) { me.set_temp("fb", unlock + 1); me.notify("完成度100%,解锁下个副本。"); me.send('{type:"dialog",dialog:"jh",unlock:' + (unlock + 1) + '}'); is_first_k = true; } if (!me.team && diff === 0) { if (me.query_temp("fb_sao0", 0) <= fb.parent.fb_index) { me.notify("单人(普通)模式扫荡解锁。"); me.set_temp("fb_sao0", fb.parent.fb_index + 1); is_first_k = true; } } else if (!me.team && diff === 1) { if (me.query_temp("fb_sao1", 0) <= fb.parent.fb_index) { me.notify("单人(困难)模式扫荡解锁。"); me.set_temp("fb_sao1", fb.parent.fb_index + 1); is_first_k = true; } } } if (is_first_k) fb_first_check(me, fb, area, diff); } else { me.notify("完成度未满100%,未能解锁下个副本。"); } me.add_exp(exp, pot); if ((!me.team || me.team[0] === me) && me.query_temp('fbbs', 0) === 1) { me.remove_temp('fbbs'); } if (diff != 2) { if (me.follow_targets && me.follow_targets.length) { me.follow_targets.length = 0; } } if (!me.team && fb.parent.is_record(diff)) { me.add_temp("fbc_" + diff + "_" + fb.parent.fb_index, 1); } if (me.team && me.team.length == 2 && me.query_temp("tudi")) { if (me.query_temp("st_count", 0) >= 10) { return; } var next = me.team[0] == me ? me.team[1] : me.team[0]; if (next.environment && next.environment.parent == fb.parent) { if (next.id == me.query_temp("tudi") && me.id == next.query_temp("shifu")) { if (next.query_temp("fb") >= fb.parent.fb_index) { var count = me.add_temp("st_count", 1, UTIL.diff_week_time()); me.send_team("你们师徒合力完成一次组队副本,获得额外收益,目前次数" + count + "(每周10次)。"); me.add_exp(exp * 10, pot * 10); next.add_exp(exp * 10, pot * 10); } } } } } else { me.notify("你现在还不能离开副本。"); } } function fb_first_check(me, fb, area, diff) { if (me.family === FAMILIES.NONE && !me.query_temp('sr')) { return;//无门无派的非长期散人不参与 } if (!WORLD.is_server(me)) return; const fblock = fb.parent.fb_index + 1; const famkey = me.family.id; const fb_key = "fb_first_" + fblock + "_" + diff;//存全服第一个通过 let fb_fam_key = "fb_first_" + famkey + "_" + fblock + "_" + diff; //每个门派的 if (diff === 2) fb_fam_key = fb_key; if (WORLD.DATA.query_temp(fb_fam_key)) return;//这个门派已经拿过了 var fb_key2 = "fb_first_" + fblock; var ss_users = WORLD.DATA.query_temp(fb_key2); var teams = me.team || [me]; if (ss_users) { for (var i = 0; i < teams.length; i++) { if (ss_users.indexOf(teams[i].id) !== -1) { return;//存在任意一个位置就算重复 } } } const fb_name = area.name + "(" + ["普通", "困难", "组队"][diff] + ")"; let isfirst = false; if (!WORLD.DATA.query_temp(fb_key)) { const user_name = me.team ? team_name(me.team) : me.name; WORLD.DATA.set_temp(fb_key, user_name); COMMAND.DO("rumor", "听说" + user_name + "首次通过了" + fb_name + "区域。"); isfirst = true; } if (diff < 2) { WORLD.DATA.set_temp(fb_fam_key, me.name); if (!isfirst) COMMAND.DO("rumor", "听说" + me.family.name + me.name + "首次通过了" + fb_name + "区域。"); } if (area.ss_title && !me.team) { if ((diff == 0 && !area.is_diffi) || (diff == 1 && area.is_diffi)) { me.add_title(area.ss_title, "fb_" + fb.parent.fb_index); me.send("你获得了称号【" + area.ss_title + "】。"); } } if (area.is_show && WORLD.DATA.query_temp("fb_index", 0) < fb.parent.fb_index) { WORLD.DATA.set_temp("fb_index", fb.parent.fb_index); } let ss_userids = WORLD.DATA.query_temp(fb_key2, ""); let msg = "恭喜你完成副本" + fb_name + "的首杀!"; if (diff < 2) msg = "恭喜你做为" + me.family.name + "弟子首次通过了副本" + fb_name + "!"; for (var i = 0; i < teams.length; i++) { if (!teams[i].is_player) continue; teams[i].send(msg); ss_userids += teams[i].id + ","; } WORLD.DATA.set_temp(fb_key2, ss_userids); fb.parent.notify_update(); } function team_name(tms) { var str = []; for (var i = 0; i < tms.length; i++) { str.push(tms[i].name); } return str.join(","); } function fb_confirm_over(me) { var area = me.environment.parent; var score = me.query_fbscore(); var max_score = area.score || 100; var p = parseInt(score * 100 / max_score); if (p <= 0) p = 0; if (p > 100) p = 100; var exp = 1200; var str = ["当前副本:"]; str.push(area.name); if (exp > 0) { str.push("\n将获得经验:"); str.push(exp); str.push(",潜能:"); str.push(exp); } str.push("\n完成度:"); if (p < 30) { str.push(p); str.push("%\n"); } else if (p < 60) { str.push(""); str.push(p); str.push("%\n"); } else if (p < 80) { str.push(""); str.push(p); str.push("%\n"); } else if (p < 100) { str.push(""); str.push(p); str.push("%\n"); } else { p = 100; str.push(""); str.push(p); str.push("%\n"); } me.notify(str.join("")); me.send_commands("cr over", "领取奖励并离开副本"); }