"use strict"; game.import("mode", function (lib, game, ui, get, ai, _status) { return { name: "single", changbanCharacter: [ "key_rei", "key_yoshino", "key_noda", "key_nagisa", "re_caocao", "re_caozhang", "re_diaochan", "re_ganning", "re_gongsunzan", "re_guojia", "re_huangyueying", "re_lidian", "re_lvbu", "re_simayi", "sunquan", "re_xiahoudun", "re_xushu", "yuanshu", "xf_yiji", "re_zhangfei", "re_zhangliao", "re_xuzhu", "re_zhaoyun", "re_zhouyu", "re_zhugeliang", "ol_xiahouyuan", "re_huangzhong", "re_weiyan", "dianwei", "te_yanwen", "re_pangde", "re_zhurong", "re_sunjian", "jiaxu", "dengai", "re_jiangwei", "re_sunben", "wangji", "wangping", "guanqiujian", "chendao", "ol_yujin", "re_caozhi", "xin_masu", "re_lingtong", "xusheng", "re_gaoshun", "xunyou", "guanzhang", "madai", "handang", "caochong", "re_guohuai", "guanping", "liufeng", "re_zhuran", "xin_liru", "hanhaoshihuan", "guyong", "zhuhuan", "caoxiu", "liuchen", "re_zhangyi", "re_quancong", "sunxiu", "sundeng", "guohuanghou", "re_jikang", "xuezong", "qinmi", "lvdai", "re_zhangliang", "lingcao", "sunru", "zhuling", "sp_caoren", "fanchou", "fuwan", "sp_ganning", "guanyinping", "guosi", "heqi", "sp_jiangwei", "litong", "re_panfeng", "sp_pangde", "xf_sufei", "xf_tangzi", "xiahouba", "xujing", "yuejin", "sp_zhangfei", "zhangji", "zhangyì", "dongcheng", ], singlePile: [ ["spade", 5, "sha"], ["spade", 7, "sha"], ["spade", 8, "sha"], ["spade", 10, "sha"], ["heart", 10, "sha"], ["heart", 11, "sha"], ["club", 4, "sha"], ["club", 5, "sha"], ["club", 6, "sha"], ["club", 8, "sha"], ["club", 9, "sha"], ["club", 10, "sha"], ["club", 11, "sha"], ["diamond", 6, "sha"], ["diamond", 9, "sha"], ["diamond", 11, "sha"], ["heart", 2, "shan"], ["heart", 5, "shan"], ["diamond", 2, "shan"], ["diamond", 3, "shan"], ["diamond", 7, "shan"], ["diamond", 8, "shan"], ["diamond", 10, "shan"], ["diamond", 11, "shan"], ["heart", 3, "tao"], ["heart", 4, "tao"], ["heart", 9, "tao"], ["diamond", 12, "tao"], ["club", 12, "bingliang"], ["spade", 3, "guohe"], ["diamond", 12, "guohe"], ["club", 3, "guohe"], ["club", 1, "juedou"], ["spade", 1, "juedou"], ["heart", 6, "lebu"], ["spade", 1, "nanman"], ["club", 7, "shuiyanqijunx"], ["spade", 4, "shunshou"], ["spade", 11, "shunshou"], ["diamond", 4, "shunshou"], ["heart", 1, "wanjian"], ["heart", 5, "wuxie"], ["club", 5, "wuxie"], ["heart", 7, "wuzhong"], ["heart", 8, "wuzhong"], ["diamond", 5, "guanshi"], ["spade", 9, "hanbing"], ["spade", 6, "qinggang"], ["spade", 12, "zhangba"], ["diamond", 1, "zhuge"], ["spade", 2, "bagua"], ["club", 2, "renwang"], ], singlePile_wuxianhuoli: [ ["heart", 1, "wanjian"], ["heart", 2, "shan"], ["heart", 2, "huogong"], ["heart", 3, "tao"], ["heart", 3, "huogong"], ["heart", 4, "tao"], ["heart", 4, "sha", "fire"], ["heart", 6, "tao"], ["heart", 7, "sha", "fire"], ["heart", 7, "wuzhong"], ["heart", 8, "wuzhong"], ["heart", 9, "wuzhong"], ["heart", 10, "sha"], ["heart", 10, "sha"], ["heart", 10, "sha", "fire"], ["heart", 12, "guohe"], ["heart", 12, "shandian"], ["heart", 13, "shan"], ["diamond", 1, "juedou"], ["diamond", 1, "zhuge"], ["diamond", 1, "zhuque"], ["diamond", 3, "shunshou"], ["diamond", 4, "shunshou"], ["diamond", 5, "guanshi"], ["diamond", 6, "sha"], ["diamond", 6, "shan"], ["diamond", 7, "sha"], ["diamond", 7, "shan"], ["diamond", 8, "sha"], ["diamond", 8, "shan"], ["diamond", 9, "sha"], ["diamond", 9, "shan"], ["diamond", 9, "jiu"], ["diamond", 10, "shan"], ["diamond", 11, "shan"], ["diamond", 12, "tao"], ["diamond", 12, "wuxie"], ["diamond", 12, "huogong"], ["club", 1, "juedou"], ["club", 1, "baiyin"], ["club", 2, "sha"], ["club", 2, "bagua"], ["club", 2, "renwang"], ["club", 3, "sha"], ["club", 3, "guohe"], ["club", 4, "sha"], ["club", 5, "sha"], ["club", 5, "sha", "thunder"], ["club", 6, "sha"], ["club", 6, "sha", "thunder"], ["club", 7, "sha"], ["club", 7, "sha", "thunder"], ["club", 7, "nanman"], ["club", 8, "sha"], ["club", 9, "sha"], ["club", 9, "jiu"], ["club", 12, "wuxie"], ["club", 13, "wuxie"], ["spade", 1, "juedou"], ["spade", 1, "guding"], ["spade", 2, "cixiong"], ["spade", 2, "hanbing"], ["spade", 2, "tengjia"], ["spade", 3, "shunshou"], ["spade", 4, "sha", "thunder"], ["spade", 4, "guohe"], ["spade", 4, "shunshou"], ["spade", 5, "sha", "thunder"], ["spade", 5, "qinglong"], ["spade", 6, "sha", "thunder"], ["spade", 6, "qinggang"], ["spade", 7, "sha"], ["spade", 7, "sha", "thunder"], ["spade", 8, "sha"], ["spade", 8, "sha"], ["spade", 8, "sha", "thunder"], ["spade", 9, "sha"], ["spade", 9, "jiu"], ["spade", 10, "sha"], ["spade", 10, "bingliang"], ["spade", 11, "wuxie"], ["spade", 12, "guohe"], ["spade", 12, "zhangba"], ["spade", 13, "nanman"], ], characterSingle: { caocao: ["male", "wei", 4, ["jianxiong"], ["zhu"]], simayi: ["male", "wei", 3, ["fankui", "guicai"]], xiahoudun: ["male", "wei", 4, ["ganglie"]], zhangliao: ["male", "wei", 4, ["retuxi"]], xuzhu: ["male", "wei", 4, ["luoyi", "xiechan"]], guojia: ["male", "wei", 3, ["tiandu", "yiji"]], zhenji: ["female", "wei", 3, ["luoshen", "sgqingguo"]], liubei: ["male", "shu", 4, ["sgrenwang"], ["zhu"]], guanyu: ["male", "shu", 4, ["wusheng", "huwei"]], zhangfei: ["male", "shu", 4, ["paoxiao"]], zhugeliang: ["male", "shu", 3, ["guanxing", "kongcheng"]], zhaoyun: ["male", "shu", 4, ["longdan"]], machao: ["male", "shu", 4, ["xiaoxi", "tieji"]], huangyueying: ["female", "shu", 3, ["jizhi", "cangji"]], sunquan: ["male", "wu", 4, ["sgzhiheng"], ["zhu"]], ganning: ["male", "wu", 4, ["qixi"]], lvmeng: ["male", "wu", 4, ["shenju", "botu"]], huanggai: ["male", "wu", 4, ["kurou"]], zhouyu: ["male", "wu", 3, ["yingzi", "fanjian"]], daqiao: ["female", "wu", 3, ["guose", "wanrong"]], luxun: ["male", "wu", 3, ["qianxun", "lianying"]], sunshangxiang: ["female", "wu", 3, ["xiaoji", "yinli"]], //huatuo:['male','qun',3,['qingnang','jijiu']], lvbu: ["male", "qun", 4, ["wushuang"]], diaochan: ["female", "qun", 3, ["pianyi", "biyue"]], xiahouyuan: ["male", "wei", 4, ["shensu", "suzi"]], old_caoren: ["male", "wei", 4, ["jushou"]], huangzhong: ["male", "shu", 4, ["liegong"]], weiyan: ["male", "shu", 4, ["sgkuanggu"]], xiaoqiao: ["female", "wu", 3, ["tianxiang", "hongyan"]], old_zhoutai: ["male", "wu", 4, ["gzbuqu"]], zhangjiao: ["male", "qun", 3, ["leiji", "guidao"], ["zhu"]], dianwei: ["male", "wei", 4, ["qiangxi"]], yanwen: ["male", "qun", 4, ["shuangxiong"]], pangde: ["male", "qun", 4, ["xiaoxi", "mengjin"]], menghuo: ["male", "shu", 4, ["manyi", "zaiqi"]], zhurong: ["female", "shu", 4, ["manyi", "lieren"]], xuhuang: ["male", "wei", 4, ["sgduanliang"]], sunjian: ["male", "wu", 4, ["gzyinghun"]], jiangwei: ["male", "shu", 4, ["tiaoxin"]], hejin: ["male", "qun", 4, ["mouzhu", "yanhuo"]], hansui: ["male", "qun", 4, ["xiaoxi", "niluan"]], niujin: ["male", "wei", 4, ["cuorui", "liewei"]], jin_zhangchunhua: ["female", "jin", 3, ["huishi", "qingleng"]], jin_simayi: ["male", "jin", 3, ["smyyingshi", "xiongzhi", "quanbian"]], jin_wangyuanji: ["female", "jin", 3, ["yanxi"]], jin_simazhao: ["male", "jin", 3, ["choufa", "zhaoran"]], jin_xiahouhui: ["female", "jin", 3, ["jyishi", "shiduo"]], jin_simashi: ["male", "jin", "3/4", ["yimie", "tairan"]], zhanghuyuechen: ["male", "jin", 4, ["xijue"]], duyu: ["male", "jin", 4, ["sanchen", "zhaotao"]], }, startBefore: function () {}, onreinit: function () { _status.mode = _status.connectMode ? lib.configOL.single_mode : get.config("single_mode"); if (_status.mode != "normal") return; for (var i in lib.characterSingle) { lib.character[i] = lib.characterSingle[i]; if (!lib.character[i][4]) { lib.character[i][4] = []; } } for (var j in lib.singleTranslate) lib.translate[j] = lib.singleTranslate[j]; }, start: function () { "step 0"; _status.mode = _status.connectMode ? lib.configOL.single_mode : get.config("single_mode"); var playback = localStorage.getItem(lib.configprefix + "playback"); if (playback) { ui.create.me(); ui.arena.style.display = "none"; ui.system.style.display = "none"; _status.playback = playback; localStorage.removeItem(lib.configprefix + "playback"); var store = lib.db.transaction(["video"], "readwrite").objectStore("video"); store.get(parseInt(playback)).onsuccess = function (e) { if (e.target.result) { game.playVideoContent(e.target.result.video); } else { alert("播放失败:找不到录像"); game.reload(); } }; event.finish(); } else if (!_status.connectMode) { game.prepareArena(2); } "step 1"; if (_status.connectMode) { game.waitForPlayer(function () { lib.configOL.number = 2; }); } "step 2"; if (_status.mode == "normal") { lib.card.list = lib.singlePile.slice(0); game.fixedPile = true; game.broadcastAll( function (singleTranslate, characterSingle, jin) { _status.mode = "normal"; for (var j in singleTranslate) lib.translate[j] = singleTranslate[j]; _status.characterlist = []; for (var i in characterSingle) { if (!jin && characterSingle[i][1] == "jin") continue; lib.character[i] = characterSingle[i]; if (!lib.character[i][4]) { lib.character[i][4] = []; } _status.characterlist.push(i); } }, lib.singleTranslate, lib.characterSingle, _status.connectMode ? lib.configOL.enable_jin : get.config("enable_jin") ); } else if (_status.mode == "changban") { _status.characterlist = []; for (var i = 0; i < lib.changbanCharacter.length; i++) { var name = lib.changbanCharacter[i]; if (lib.character[name] && !lib.filter.characterDisabled(name)) _status.characterlist.push(name); } game.broadcastAll(function () { _status.mode = "changban"; lib.translate.bingliang_info = "目标角色判定阶段进行判定:若判定结果不为梅花,则跳过该角色的摸牌阶段。"; lib.translate.zhuge_info = "锁定技,出牌阶段,你使用杀的次数上限+3"; }); for (var i = 0; i < lib.card.list.length; i++) { var card = lib.card.list[i]; if ( card[2] == "muniu" || card[2] == "shandian" || (card[2] == "tengjia" && card[0] == "club") || (card[2] == "wuxie" && card[0] == "diamond" && card[1] == 12) ) lib.card.list.splice(i--, 1); } } else if (_status.mode == "wuxianhuoli") { var list = []; lib.card.list = lib.singlePile_wuxianhuoli.slice(0); game.fixedPile = true; if (_status.connectMode) list = get.charactersOL(); else { var list = []; for (var i in lib.character) { if (!lib.filter.characterDisabled2(i) && !lib.filter.characterDisabled(i)) list.push(i); } } game.countPlayer2(function (current) { list.remove(current.name); list.remove(current.name1); list.remove(current.name2); }); _status.characterlist = list; game.broadcast((list) => (_status.characterlist = list), list); } if (_status.connectMode) { lib.configOL.number = 2; game.randomMapOL(); } else { for (var i = 0; i < game.players.length; i++) { game.players[i].getId(); } if (_status.brawl && _status.brawl.chooseCharacterBefore) { _status.brawl.chooseCharacterBefore(); } game.chooseCharacter(); } "step 3"; if (ui.coin) { _status.coinCoeff = get.coinCoeff([game.me.name]); } game.syncState(); event.trigger("gameStart"); var players = get.players(lib.sort.position); var info = []; for (var i = 0; i < players.length; i++) { info.push({ name: players[i].name1, name2: players[i].name2, identity: players[i].identity, }); } _status.videoInited = true; game.addVideo("init", null, info); game.gameDraw(game.zhu, function (player) { if (_status.mode == "dianjiang") return 4; if (_status.mode == "wuxianhuoli") return 4; if (_status.mode == "normal") return player == game.zhu ? 3 : 4; if (_status.mode == "changban") return player == game.fan ? 5 : 4; if (player.hasSkill("cuorui")) { player.logSkill("cuorui"); return 2 + _status.characterChoice[player.identity].length; } return player.maxHp; }); if (_status.connectMode && lib.configOL.change_card) game.replaceHandcards(game.players.slice(0)); "step 4"; game.phaseLoop(game.zhu); game.countPlayer((current) => current.showGiveup(), true); }, game: { canReplaceViewpoint: () => true, addRecord: function (bool) { if (typeof bool == "boolean") { var mode = _status.mode; var data = lib.config.gameRecord.single.data; if (!get.is.object(data[mode])) data[mode] = {}; var data2 = data[mode]; var identity = game.me.identity; if (!data2[identity]) { data2[identity] = [0, 0]; } if (bool) { data2[identity][0]++; } else { data2[identity][1]++; } var list = ["zhu", "fan"]; var str = ""; for (var j in data) { str += get.translation(j + 2) + ":
"; for (var i = 0; i < list.length; i++) { if (data[j][list[i]]) { str += lib.translate[list[i] + "2"] + ":" + data[j][list[i]][0] + "胜" + " " + data[j][list[i]][1] + "负
"; } } } lib.config.gameRecord.single.str = str; game.saveConfig("gameRecord", lib.config.gameRecord); } }, getState: function () { var state = {}; for (var i in lib.playerOL) { var player = lib.playerOL[i]; state[i] = { identity: player.identity }; } return state; }, updateState: function (state) { for (var i in state) { var player = lib.playerOL[i]; if (player) { player.identity = state[i].identity; } } }, getRoomInfo: function (uiintro) { if (lib.configOL.single_mode == "normal") uiintro.add( '
晋势力武将:' + (lib.configOL.enable_jin ? "开启" : "关闭") ); if (lib.configOL.bannedcards.length) { uiintro.add( '
禁用卡牌:' + get.translation(lib.configOL.bannedcards) ); } uiintro.style.paddingBottom = "8px"; }, getVideoName: function () { var str = get.translation(game.me.name); if (game.me.name2) { str += "/" + get.translation(game.me.name2); } var name = [ str, get.translation(_status.mode + 2) + " - " + lib.translate[game.me.identity + "2"], ]; return name; }, showIdentity: function () {}, checkResult: function () { game.over((game.me._trueMe || game.me).isAlive()); }, checkOnlineResult: function (player) { return player.isAlive(); }, chooseCharacterDianjiang: function () { var next = game.createEvent("chooseCharacter"); next.showConfig = true; next.setContent(function () { "step 0"; ui.arena.classList.add("choose-character"); lib.init.onfree(); "step 1"; game.me.chooseControl("先手", "后手").prompt = "请选择自己的行动顺序"; "step 2"; var map = result.control == "先手" ? ["zhu", "fan"] : ["fan", "zhu"]; game.me.identity = map[0]; game.me.next.identity = map[1]; game.me.showIdentity(); game.me.next.showIdentity(); "step 3"; event.flipassign = true; event.videoId = lib.status.videoId++; var list = []; for (var i in lib.character) { if (lib.filter.characterDisabled(i)) continue; list.push(i); } _status.characterlist = list; var filter = function (name) { return !_status.characterlist.includes(name); }; var dialog = ui.create.characterDialog("heightset", filter).open(); dialog.videoId = event.videoId; game.me .chooseButton(true) .set("ai", function (button) { return Math.random(); }) .set("dialog", event.videoId); "step 4"; game.me.init(result.links[0]); _status.characterlist.remove(result.links[0]); game.addRecentCharacter(result.links[0]); game.me .chooseButton(true) .set("ai", function (button) { return Math.random(); }) .set("dialog", event.videoId); "step 5"; game.broadcastAll("closeDialog", event.videoId); game.me.next.init(result.links[0]); _status.characterlist.remove(result.links[0]); game.addRecentCharacter(result.links[0]); setTimeout(function () { ui.arena.classList.remove("choose-character"); }, 500); }); }, chooseCharacterWuxianhuoli() { const next = game.createEvent("chooseCharacter"); next.showConfig = true; next.setContent(function () { "step 0"; ui.arena.classList.add("choose-character"); lib.init.onfree(); var num = [0, 1].randomGet(); game.players[num].identity = "zhu"; game.players[1 - num].identity = "fan"; game.broadcastAll( function (p, t) { p.enemy = t; t.enemy = p; }, game.players[0], game.players[1] ); for (var i = 0; i < game.players.length; i++) { game.players[i].showIdentity(); } game.globalBuff = ["wuxianhuoli_weisuoyuwei"]; const randomBuff = [ "liuanhuaming", "duoduoyishan", "xushidaifa", "mianmianjudao", ].randomGet(); game.globalBuff.add(`wuxianhuoli_${randomBuff}`); "step 1"; _status.characterChoice = { zhu: _status.characterlist.randomRemove(6), fan: _status.characterlist.randomRemove(6), }; const dialog = ["请选择出场武将", '
本局游戏Buff
']; game.globalBuff.forEach((buff, ind) => { dialog.add( `
「${ind === 0 ? "固定" : "随机"}」 ${get.translation( buff )}:${get.skillInfoTranslation(buff)}
` ); }); dialog.add([_status.characterChoice[game.me.identity], "character"]); game.me.chooseButton(true, dialog); "step 2"; game.me.init(result.links[0]); _status.characterChoice[game.me.identity].removeArray(result.links); var list = _status.characterChoice[game.me.enemy.identity].randomRemove(1); game.me.enemy.init(list[0]); [game.me, game.me.enemy].forEach((current) => { if ( current.storage.nohp || (lib.character[current.name1][4].includes("hiddenSkill") && !current.noclick) ) { current.storage.rawHp = 1; current.storage.rawMaxHp = 1; } current.hp = 10; current.maxHp = 10; current.hujia = 0; current.update(); }); game.globalBuff.forEach((buff) => { game.addGlobalSkill(buff); }); game.addGlobalSkill("wuxianhuoli_task"); _status.wuxianhuoliProgress = 0; _status.wuxianhuoliLevel = 0; const func = () => { ui.wuxianhuoliProgress = get.is.phoneLayout() ? ui.create.div(".touchinfo.left", ui.window) : ui.create.div(ui.gameinfo); ui.wuxianhuoliProgress.innerHTML = "任务进度(0/3)"; const showTasks = () => { if (ui.wuxianhuoliInfo) return; ui.wuxianhuoliInfo = ui.create.system("无限火力", null, true); ui.wuxianhuoliInfo.currentProgress = 0; ui.wuxianhuoliInfo.currentLevel = 0; lib.setPopped( ui.wuxianhuoliInfo, () => { var uiintro = ui.create.dialog("hidden"); uiintro.add( `
任务列表
` ); if (typeof _status.wuxianhuoliLevel !== "number") { uiintro.add( `
未获取当前进度,请于一名角色受伤后再查看
` ); } else if (_status.wuxianhuoliLevel < 2) { uiintro.add(`
全场角色造成${ _status.wuxianhuoliLevel === 0 ? 3 : 5 }点伤害(当前${_status.wuxianhuoliProgress}点)
\
奖励:获得一个技能,摸两张牌
`); } else { uiintro.add( `
所有任务已完成,无后续任务
` ); } uiintro.add( `
全局Buff
` ); uiintro.add( `
${game.globalBuff .map((buff, ind) => { return ( get.translation(buff) + ":" + get.skillInfoTranslation(buff) ); }) .join("
")}
` ); var ul = uiintro.querySelector("ul"); if (ul) ul.style.width = "180px"; uiintro.add(ui.create.div(".placeholder")); return uiintro; }, 250 ); }; showTasks(); var dialog = ui.create.dialog("hidden", "forcebutton"); dialog.add(`任务一`); dialog.addText(`任务:全场角色共计造成3点伤害
奖励:获得一个技能,摸两张牌`); dialog.add(`任务二
(完成任务一后解锁)
\
任务:全场角色共计造成5点伤害
奖励:获得一个技能,摸两张牌
`); dialog.open(); setTimeout(() => { dialog.close(); }, 3000); }; game.broadcastAll(func); game.delay(0, 3000); "step 3"; _status.characterlist.addArray(Object.values(_status.characterChoice).flat()); setTimeout(function () { ui.arena.classList.remove("choose-character"); }, 500); }); }, chooseCharacter: function () { if (_status.mode == "dianjiang") { game.chooseCharacterDianjiang(); return; } if (_status.mode == "wuxianhuoli") { game.chooseCharacterWuxianhuoli(); return; } var next = game.createEvent("chooseCharacter"); next.showConfig = true; next.setContent(function () { "step 0"; ui.arena.classList.add("choose-character"); var num = [0, 1].randomGet(); game.players[num].identity = "zhu"; game.players[1 - num].identity = "fan"; game.broadcastAll( function (p, t) { p.enemy = t; t.enemy = p; }, game.players[0], game.players[1] ); for (var i = 0; i < game.players.length; i++) { game.players[i].showIdentity(); } "step 1"; _status.characterChoice = { zhu: _status.characterlist.randomRemove(3), fan: _status.characterlist.randomRemove(3), all: _status.characterlist.randomRemove(6), }; event.videoIdx = lib.status.videoId++; game.broadcastAll( function (id, list) { var dialog = ui.create.dialog("选择武将", [list.all, "character"], "起始武将", [ list[game.me.identity], "character", ]); dialog.videoId = id; }, event.videoIdx, _status.characterChoice ); "step 2"; var next = game.fan.chooseButton(true, 1); next.filterButton = function (button) { return _status.event.canChoose.includes(button.link); }; next.set("onfree", true); next.dialog = event.videoIdx; next.canChoose = _status.characterChoice.all; next.ai = function () { return Math.random(); }; "step 3"; _status.characterChoice.fan.addArray(result.links); _status.characterChoice.all.removeArray(result.links); game.broadcastAll( function (link, choosing, first, id) { var dialog = get.idDialog(id); if (dialog) { if (choosing == game.me) { choosing = "你"; } else { choosing = "对手"; } dialog.content.firstChild.innerHTML = choosing + "选择了" + get.translation(link); for (var i = 0; i < dialog.buttons.length; i++) { if (link.includes(dialog.buttons[i].link)) { if (first) { dialog.buttons[i].classList.add("selectedx"); } else { dialog.buttons[i].classList.add("glow"); } } } } }, result.links, game.fan, true, event.videoIdx ); var next = game.zhu.chooseButton(true, 2); next.filterButton = function (button) { return _status.event.canChoose.includes(button.link); }; next.dialog = event.videoIdx; next.canChoose = _status.characterChoice.all; next.ai = function () { return Math.random(); }; "step 4"; _status.characterChoice.zhu.addArray(result.links); _status.characterChoice.all.removeArray(result.links); game.broadcastAll( function (link, choosing, first, id) { var dialog = get.idDialog(id); if (dialog) { if (choosing == game.me) { choosing = "你"; } else { choosing = "对手"; } dialog.content.firstChild.innerHTML = choosing + "选择了" + get.translation(link); for (var i = 0; i < dialog.buttons.length; i++) { if (link.includes(dialog.buttons[i].link)) { if (first) { dialog.buttons[i].classList.add("selectedx"); } else { dialog.buttons[i].classList.add("glow"); } } } } }, result.links, game.zhu, false, event.videoIdx ); var next = game.fan.chooseButton(true, 2); next.filterButton = function (button) { return _status.event.canChoose.includes(button.link); }; next.dialog = event.videoIdx; next.canChoose = _status.characterChoice.all; next.ai = function () { return Math.random(); }; "step 5"; _status.characterChoice.fan.addArray(result.links); _status.characterChoice.all.removeArray(result.links); game.broadcastAll( function (link, choosing, first, id) { var dialog = get.idDialog(id); if (dialog) { if (choosing == game.me) { choosing = "你"; } else { choosing = "对手"; } dialog.content.firstChild.innerHTML = choosing + "选择了" + get.translation(link); for (var i = 0; i < dialog.buttons.length; i++) { if (link.includes(dialog.buttons[i].link)) { if (first) { dialog.buttons[i].classList.add("selectedx"); } else { dialog.buttons[i].classList.add("glow"); } } } } }, result.links, game.fan, true, event.videoIdx ); var next = game.zhu.chooseButton(true); next.filterButton = function (button) { return _status.event.canChoose.includes(button.link); }; next.dialog = event.videoIdx; next.canChoose = _status.characterChoice.all; next.ai = function () { return Math.random(); }; "step 6"; _status.characterChoice.zhu.addArray(result.links); _status.characterChoice.all.removeArray(result.links); game.broadcastAll( function (link, choosing, first, id) { var dialog = get.idDialog(id); if (dialog) { if (choosing == game.me) { choosing = "你"; } else { choosing = "对手"; } dialog.content.firstChild.innerHTML = choosing + "选择了" + get.translation(link); for (var i = 0; i < dialog.buttons.length; i++) { if (link.includes(dialog.buttons[i].link)) { if (first) { dialog.buttons[i].classList.add("selectedx"); } else { dialog.buttons[i].classList.add("glow"); } } } } }, result.links, game.zhu, false, event.videoIdx ); "step 7"; game.broadcastAll("closeDialog", event.videoIdx); "step 8"; game.me.chooseButton( true, ["请选择出场武将", [_status.characterChoice[game.me.identity], "character"]], _status.mode == "changban" ? 2 : 1 ); "step 9"; game.me.init(result.links[0], _status.mode == "changban" ? result.links[1] : null); _status.characterChoice[game.me.identity].removeArray(result.links); var list = _status.characterChoice[game.me.enemy.identity].randomRemove( _status.mode == "changban" ? 2 : 1 ); game.me.enemy.init(list[0], list[1]); "step 10"; setTimeout(function () { ui.arena.classList.remove("choose-character"); }, 500); }); }, chooseCharacterDianjiangOL: function () { var next = game.createEvent("chooseCharacter"); next.showConfig = true; next.setContent(function () { "step 0"; var map = Math.random() < 0.5 ? ["zhu", "fan"] : ["fan", "zhu"]; game.me.identity = map[0]; game.me.next.identity = map[1]; game.me.showIdentity(); game.me.next.showIdentity(); "step 1"; //event.flipassign=true; event.videoId = lib.status.videoId++; var list = []; var libCharacter = {}; for (var i = 0; i < lib.configOL.characterPack.length; i++) { var pack = lib.characterPack[lib.configOL.characterPack[i]]; for (var j in pack) { if (lib.character[j]) libCharacter[j] = pack[j]; } } for (i in libCharacter) { if (lib.filter.characterDisabled(i, libCharacter)) continue; list.push(i); } game.broadcastAll( function (list, id) { _status.characterlist = list; var filter = function (name) { return !_status.characterlist.includes(name); }; var dialog = ui.create.characterDialog("heightset", filter).open(); dialog.videoId = id; ui.arena.classList.add("choose-character"); }, list, event.videoId ); game.zhu .chooseButton(true) .set("ai", function (button) { return Math.random(); }) .set("dialog", event.videoId); "step 2"; game.broadcastAll( function (player, character, id) { player.init(character); _status.characterlist.remove(character); if (player == game.me) game.addRecentCharacter(character); }, game.zhu, result.links[0] ); game.fan .chooseButton(true) .set("ai", function (button) { return Math.random(); }) .set("dialog", event.videoId); "step 3"; game.broadcastAll("closeDialog", event.videoId); game.broadcastAll( function (player, character, id) { var dialog = get.idDialog(id); if (dialog) { dialog.close(); } player.init(character); _status.characterlist.remove(character); if (player == game.me) game.addRecentCharacter(character); setTimeout(function () { ui.arena.classList.remove("choose-character"); }, 500); }, game.fan, result.links[0], event.videoId ); }); }, chooseCharacterWuxianhuoliOL() { var next = game.createEvent("chooseCharacter"); next.showConfig = true; next.setContent(function () { "step 0"; ui.arena.classList.add("choose-character"); var num = [0, 1].randomGet(); game.players[num].identity = "zhu"; game.players[1 - num].identity = "fan"; game.broadcastAll( function (p, t) { p.enemy = t; t.enemy = p; }, game.players[0], game.players[1] ); for (var i = 0; i < game.players.length; i++) { game.players[i].showIdentity(); } game.globalBuff = ["wuxianhuoli_weisuoyuwei"]; const randomBuff = [ "liuanhuaming", "duoduoyishan", "xushidaifa", "mianmianjudao", ].randomGet(); game.globalBuff.add(`wuxianhuoli_${randomBuff}`); const setBuff = (buff) => { game.globalBuff = buff; }; game.broadcast(setBuff, game.globalBuff); if (!_status.postReconnect.wuxianhuoliBuff) _status.postReconnect.wuxianhuoliBuff = [setBuff, []]; _status.postReconnect.wuxianhuoliBuff[1].addArray(game.globalBuff); "step 1"; _status.characterChoice = { zhu: _status.characterlist.randomRemove(6), fan: _status.characterlist.randomRemove(6), }; const list = ["zhu", "fan"].map((identity) => { const dialog = ["请选择出场武将", '
本局游戏Buff
']; game.globalBuff.forEach((buff, ind) => { dialog.add( `
「${ind === 0 ? "固定" : "随机"}」 ${get.translation( buff )}:${get.skillInfoTranslation(buff)}
` ); }); dialog.add([_status.characterChoice[identity], "character"]); return [game[identity], true, dialog]; }); game.me.chooseButtonOL(list, function (player, result) { if (game.online || player == game.me) { player.init(result.links[0]); player.hp = 10; player.maxHp = 10; player.hujia = 0; player.update(); } }); "step 2"; for (var i in result) { var current = lib.playerOL[i]; if (result[i] == "ai") { result[i] = _status.characterChoice[current.identity].randomGets(1); } else { result[i] = result[i].links; } _status.characterChoice[current.identity].removeArray(result[i]); if (!current.name) { current.init(result[i][0]); if ( current.storage.nohp || (lib.character[current.name1][4].includes("hiddenSkill") && !current.noclick) ) { current.storage.rawHp = 1; current.storage.rawMaxHp = 1; } current.hp = 10; current.maxHp = 10; current.hujia = 0; current.update(); } } game.broadcast(function (result) { for (var i in result) { const current = lib.playerOL[i]; if (!current.name) { current.init(result[i][0]); if ( current.storage.nohp || (lib.character[current.name1][4].includes("hiddenSkill") && !current.noclick) ) { current.storage.rawHp = 1; current.storage.rawMaxHp = 1; } current.hp = 10; current.maxHp = 10; current.hujia = 0; current.update(); } } setTimeout(function () { ui.arena.classList.remove("choose-character"); }, 500); }, result); game.globalBuff.forEach((buff) => { game.addGlobalSkill(buff); }); game.addGlobalSkill("wuxianhuoli_task"); game.broadcastAll(() => { _status.wuxianhuoliProgress = 0; _status.wuxianhuoliLevel = 0; }); const func = () => { ui.wuxianhuoliProgress = get.is.phoneLayout() ? ui.create.div(".touchinfo.left", ui.window) : ui.create.div(ui.gameinfo); ui.wuxianhuoliProgress.innerHTML = "任务进度(0/3)"; const showTasks = () => { if (ui.wuxianhuoliInfo) return; ui.wuxianhuoliInfo = ui.create.system("无限火力", null, true); ui.wuxianhuoliInfo.currentProgress = 0; ui.wuxianhuoliInfo.currentLevel = 0; lib.setPopped( ui.wuxianhuoliInfo, () => { var uiintro = ui.create.dialog("hidden"); uiintro.add( `
任务列表
` ); if (typeof _status.wuxianhuoliLevel !== "number") { uiintro.add( `
未获取当前进度,请于一名角色受伤后再查看
` ); } else if (_status.wuxianhuoliLevel < 2) { uiintro.add(`
全场角色造成${ _status.wuxianhuoliLevel === 0 ? 3 : 5 }点伤害(当前${_status.wuxianhuoliProgress}点)
\
奖励:获得一个技能,摸两张牌
`); } else { uiintro.add( `
所有任务已完成,无后续任务
` ); } uiintro.add( `
全局Buff
` ); uiintro.add( `
${game.globalBuff .map((buff, ind) => { return ( get.translation(buff) + ":" + get.skillInfoTranslation(buff) ); }) .join("
")}
` ); var ul = uiintro.querySelector("ul"); if (ul) ul.style.width = "180px"; uiintro.add(ui.create.div(".placeholder")); return uiintro; }, 250 ); }; showTasks(); if (!_status.postReconnect.wuxianhuoliShowTasks) _status.postReconnect.wuxianhuoliShowTasks = [showTasks, []]; const dialog = ui.create.dialog("hidden", "forcebutton"); dialog.add(`任务一`); dialog.addText(`任务:全场角色共计造成3点伤害
奖励:获得一个技能,摸两张牌`); dialog.add(`任务二
(完成任务一后解锁)
\
任务:全场角色共计造成5点伤害
奖励:获得一个技能,摸两张牌
`); dialog.open(); setTimeout(() => { dialog.close(); }, 3000); }; game.broadcastAll(func); game.delay(0, 3000); "step 3"; _status.characterlist.addArray(Object.values(_status.characterChoice).flat()); setTimeout(function () { ui.arena.classList.remove("choose-character"); }, 500); }); }, chooseCharacterOL: function () { if (_status.mode == "dianjiang") { game.chooseCharacterDianjiangOL(); return; } if (_status.mode == "wuxianhuoli") { game.chooseCharacterWuxianhuoliOL(); return; } var next = game.createEvent("chooseCharacter"); next.setContent(function () { "step 0"; ui.arena.classList.add("choose-character"); var num = [0, 1].randomGet(); game.players[num].identity = "zhu"; game.players[1 - num].identity = "fan"; game.broadcastAll( function (p, t) { p.enemy = t; t.enemy = p; }, game.players[0], game.players[1] ); for (var i = 0; i < game.players.length; i++) { game.players[i].showIdentity(); } "step 1"; _status.characterChoice = { zhu: _status.characterlist.randomRemove(3), fan: _status.characterlist.randomRemove(3), all: _status.characterlist.randomRemove(6), }; event.videoIdx = lib.status.videoId++; game.broadcastAll( function (id, list) { var dialog = ui.create.dialog( game.me.identity == "fan" ? "选择武将" : "请等待对手选择武将", [list.all, "character"], "起始武将", [list[game.me.identity], "character"] ); dialog.videoId = id; }, event.videoIdx, _status.characterChoice ); "step 2"; var next = game.fan.chooseButton(true, 1); next.set("filterButton", function (button) { return _status.event.canChoose.includes(button.link); }); next.set("dialog", event.videoIdx); next.set("canChoose", _status.characterChoice.all); next.ai = function () { return Math.random(); }; "step 3"; _status.characterChoice.fan.addArray(result.links); _status.characterChoice.all.removeArray(result.links); game.broadcastAll( function (link, choosing, first, id) { var dialog = get.idDialog(id); if (dialog) { if (choosing == game.me) { choosing = "你"; } else { choosing = "对手"; } dialog.content.firstChild.innerHTML = choosing + "选择了" + get.translation(link); for (var i = 0; i < dialog.buttons.length; i++) { if (link.includes(dialog.buttons[i].link)) { if (first) { dialog.buttons[i].classList.add("selectedx"); } else { dialog.buttons[i].classList.add("glow"); } } } } }, result.links, game.fan, true, event.videoIdx ); var next = game.zhu.chooseButton(true, 2); next.set("filterButton", function (button) { return _status.event.canChoose.includes(button.link); }); next.set("dialog", event.videoIdx); next.set("canChoose", _status.characterChoice.all); next.ai = function () { return Math.random(); }; "step 4"; _status.characterChoice.zhu.addArray(result.links); _status.characterChoice.all.removeArray(result.links); game.broadcastAll( function (link, choosing, first, id) { var dialog = get.idDialog(id); if (dialog) { if (choosing == game.me) { choosing = "你"; } else { choosing = "对手"; } dialog.content.firstChild.innerHTML = choosing + "选择了" + get.translation(link); for (var i = 0; i < dialog.buttons.length; i++) { if (link.includes(dialog.buttons[i].link)) { if (first) { dialog.buttons[i].classList.add("selectedx"); } else { dialog.buttons[i].classList.add("glow"); } } } } }, result.links, game.zhu, false, event.videoIdx ); var next = game.fan.chooseButton(true, 2); next.set("filterButton", function (button) { return _status.event.canChoose.includes(button.link); }); next.set("dialog", event.videoIdx); next.set("canChoose", _status.characterChoice.all); next.ai = function () { return Math.random(); }; "step 5"; _status.characterChoice.fan.addArray(result.links); _status.characterChoice.all.removeArray(result.links); game.broadcastAll( function (link, choosing, first, id) { var dialog = get.idDialog(id); if (dialog) { if (choosing == game.me) { choosing = "你"; } else { choosing = "对手"; } dialog.content.firstChild.innerHTML = choosing + "选择了" + get.translation(link); for (var i = 0; i < dialog.buttons.length; i++) { if (link.includes(dialog.buttons[i].link)) { if (first) { dialog.buttons[i].classList.add("selectedx"); } else { dialog.buttons[i].classList.add("glow"); } } } } }, result.links, game.fan, true, event.videoIdx ); var next = game.zhu.chooseButton(true); next.set("filterButton", function (button) { return _status.event.canChoose.includes(button.link); }); next.set("dialog", event.videoIdx); next.set("canChoose", _status.characterChoice.all); next.ai = function () { return Math.random(); }; "step 6"; _status.characterChoice.zhu.addArray(result.links); _status.characterChoice.all.removeArray(result.links); game.broadcastAll( function (link, choosing, first, id) { var dialog = get.idDialog(id); if (dialog) { if (choosing == game.me) { choosing = "你"; } else { choosing = "对手"; } dialog.content.firstChild.innerHTML = choosing + "选择了" + get.translation(link); for (var i = 0; i < dialog.buttons.length; i++) { if (link.includes(dialog.buttons[i].link)) { if (first) { dialog.buttons[i].classList.add("selectedx"); } else { dialog.buttons[i].classList.add("glow"); } } } } }, result.links, game.zhu, false, event.videoIdx ); "step 7"; game.broadcastAll("closeDialog", event.videoIdx); "step 8"; var num = _status.mode == "changban" ? 2 : 1; var list = [ [game.zhu, num, true, ["选择出场角色", [_status.characterChoice.zhu, "character"]]], [game.fan, num, true, ["选择出场角色", [_status.characterChoice.fan, "character"]]], ]; game.me.chooseButtonOL(list, function (player, result) { if (game.online || player == game.me) player.init(result.links[0], result.links[1]); }); "step 9"; for (var i in result) { var current = lib.playerOL[i]; if (result[i] == "ai") { result[i] = _status.characterChoice[current.identity].randomGets( _status.mode == "changban" ? 2 : 1 ); } else { result[i] = result[i].links; } _status.characterChoice[current.identity].removeArray(result[i]); if (!current.name) { current.init(result[i][0], result[i][1]); } } game.broadcast(function (result) { for (var i in result) { if (!lib.playerOL[i].name) { lib.playerOL[i].init(result[i][0], result[i][1]); } } setTimeout(function () { ui.arena.classList.remove("choose-character"); }, 500); }, result); setTimeout(function () { ui.arena.classList.remove("choose-character"); }, 500); }); }, }, element: { player: { dieAfter: function () { if (_status.mode != "normal" || _status.characterChoice[this.identity].length <= 3) game.checkResult(); }, dieAfter2: function () { if (_status.mode != "normal") return; var next = game.createEvent("replacePlayerSingle", false, _status.event.getParent()); next.player = this; next.forceDie = true; next.setContent(function () { "step 0"; game.delay(); "step 1"; player .chooseButton(true, [ "请选择一名出场武将", [_status.characterChoice[player.identity].slice(0), "character"], ]) .set("forceDie", true); "step 2"; var source = player; var name = result.links[0]; var color = source.node.identity.dataset.color; game.broadcastAll( function (source, name, color) { source.revive(null, false); source.uninit(); source.init(name); source.node.identity.dataset.color = color; }, source, name, color ); game.log(source, "出场"); var num = _status.mode == "normal" ? 4 : source.maxHp; if (player.hasSkill("cuorui")) { player.logSkill("cuorui"); num = 2 + _status.characterChoice[player.identity].length; } source.draw(num); var evt = event.getParent("dying"); if (evt && evt.parent) evt.parent.untrigger(false, source); game.addVideo("reinit", source, [name, color]); game.triggerEnter(source); _status.characterChoice[player.identity].remove(name); }); }, logAi: function (targets, card) {}, showIdentity: function () { game.broadcastAll( function (player, identity) { player.identity = identity; game[identity] = player; player.side = identity == "zhu"; player.node.identity.classList.remove("guessing"); player.identityShown = true; player.ai.shown = 1; player.setIdentity(); if (player.identity == "zhu") { player.isZhu = true; } if (_status.clickingidentity) { for (var i = 0; i < _status.clickingidentity[1].length; i++) { _status.clickingidentity[1][i].delete(); _status.clickingidentity[1][i].style.transform = ""; } delete _status.clickingidentity; } }, this, this.identity ); }, }, }, get: { attitude: function (from, to) { if (from.identity == to.identity) return 10; return -10; }, }, skill: { wanrong: { audio: 2, trigger: { target: "useCardToTargeted" }, frequent: true, filter: function (event, player) { return event.card.name == "sha"; }, content: function () { player.draw(); }, }, sgzhiheng: { audio: "zhiheng", inherit: "zhiheng", selectCard: [1, 2], prompt: "弃置至多两张牌并摸等量的牌", }, xiechan: { audio: 2, limited: true, enable: "phaseUse", skillAnimation: true, animationColor: "water", filterTarget: function (card, player, target) { return target != player && player.canCompare(target); }, content: function () { "step 0"; player.awakenSkill("xiechan"); player.chooseToCompare(target); "step 1"; if (result.bool) player.useCard({ name: "juedou" }, target, "noai"); else target.useCard({ name: "juedou" }, player, "noai"); }, ai: { order: 1, result: { target: function (player, target) { if ( player.countCards("h", function (card) { return get.value(card) <= 5 && get.number(card) >= 12; }) && get.effect(target, { name: "juedou" }, player, player) > 0 ) return -1; return 0; }, }, }, }, huwei: { audio: 2, trigger: { player: "enterGame", global: "gameDrawAfter", }, direct: true, content: function () { player.chooseUseTarget( "shuiyanqijunx", get.prompt("huwei"), "视为使用一张【水淹七军】" ).logSkill = "huwei"; }, }, sgkuanggu: { audio: "kuanggu", trigger: { source: "damageSource" }, frequent: true, filter: function (event, player) { return player.isDamaged(); }, content: function () { "step 0"; player.judge(function (result) { return get.color(result) == "black" ? 2 : -2; }); "step 1"; if (result.bool == true) player.recover(); }, }, suzi: { inherit: "xingshang", }, cangji: { trigger: { player: "die" }, filter: function (event, player) { return player.countCards("e") > 0; }, forceDie: true, skillAnimation: true, animationColor: "orange", content: function () { var cards = player.getCards("e"); player.cangji_yozuru = cards; player.lose(cards, ui.special); player.addSkill("cangji_yozuru"); }, subSkill: { yozuru: { sub: true, charlotte: true, superCharlotte: true, trigger: { player: "enterGame" }, forced: true, popup: false, //onremove:true, content: function () { var cards = player.cangji_yozuru.slice(0); for (var i = 0; i < cards.length; i++) { player.equip(cards[i]); } player.removeSkill("cangji_yozuru"); delete player.cangji_yozuru; }, }, }, }, sgrenwang: { audio: 2, trigger: { target: "useCardToTargeted" }, direct: true, filter: function (event, player) { return ( event.player != player && event.player.isPhaseUsing() && (event.card.name == "sha" || get.type(event.card) == "trick") ); }, content: function () { if (!player.hasSkill("sgrenwang_one")) player.addTempSkill("sgrenwang_one", "phaseUseEnd"); else if (trigger.player.countDiscardableCards(player, "he")) { player.discardPlayerCard(trigger.player, "he", get.prompt("sgrenwang")).logSkill = [ "sgrenwang", trigger.player, ]; } }, }, sgrenwang_one: {}, sgduanliang: { group: "sgduanliang_gdm", audio: "duanliang1", enable: "chooseToUse", filterCard: function (card) { if (get.type(card) != "basic" && get.type(card) != "equip") return false; return get.color(card) == "black"; }, filter: function (event, player) { return ( player.hasSkill("sgduanliang_sss") && player.countCards("he", { type: ["basic", "equip"], color: "black" }) ); }, position: "he", viewAs: { name: "bingliang" }, prompt: "将一黑色的基本牌或装备牌当兵粮寸断使用", check: function (card) { return 6 - get.value(card); }, ai: { order: 9, }, subSkill: { gdm: { trigger: { player: "useCardToPlayered" }, forced: true, silent: true, popup: false, content: function () { if (trigger.target != player) player.addTempSkill("sgduanliang_sss"); }, }, sss: {}, }, }, sgqingguo: { audio: "qingguo", enable: ["chooseToRespond", "chooseToUse"], filterCard: true, viewAs: { name: "shan" }, viewAsFilter: function (player) { if (!player.countCards("e")) return false; }, prompt: "将一张装备区中的牌当闪使用或打出", position: "e", check: function () { return 1; }, ai: { order: 0.5, respondShan: true, skillTagFilter: function (player) { if (!player.countCards("e")) return false; }, effect: { target: function (card, player, target, current) { if (target.countCards("e") && get.tag(card, "respondShan") && current < 0) return 0.6; }, }, }, }, pianyi: { audio: 2, trigger: { player: "enterGame" }, forced: true, filter: function (event, player) { return event.getParent("phase").player == player.enemy; }, content: function () { var evt = _status.event.getParent("phase"); if (evt) { game.log(player, "结束了", evt.player, "的回合"); game.resetSkills(); _status.event = evt; _status.event.finish(); _status.event.untrigger(true); } }, }, yinli: { audio: 2, trigger: { global: "loseEnd" }, filter: function (event, player) { if ( event.player == player || event.player != _status.currentPhase || event.getParent().name == "useCard" ) return false; for (var i = 0; i < event.cards.length; i++) { if (get.type(event.cards[i]) == "equip" && get.position(event.cards[i]) == "d") return true; } return false; }, frequent: true, content: function () { var list = []; for (var i = 0; i < trigger.cards.length; i++) { if (get.type(trigger.cards[i]) == "equip" && get.position(trigger.cards[i]) == "d") list.push(trigger.cards[i]); } if (list.length) player.gain(list, "gain2"); }, }, shenju: { audio: 2, mod: { maxHandcard: function (player, num) { if (player.enemy && player.enemy.hp) return num + player.enemy.hp; }, }, }, _changeHandcard: { trigger: { global: "gameDrawAfter" }, silent: true, popup: false, filter: function (event, player) { return _status.mode == "changban" && player.maxHp <= 3; }, content: function () { "step 0"; player.chooseBool("是否更换手牌?").ai = function () { var hs = player.getCards("h"); return get.value(hs, "raw") < 6 * hs; }; "step 1"; if (result.bool) { var hs = player.getCards("h"); player.lose(hs, ui.special); event.hs = hs; } else event.finish(); "step 2"; var hs = event.hs; player.draw(hs.length, "nodelay"); for (var i = 0; i < hs.length; i++) { hs[i].fix(); ui.cardPile.insertBefore( hs[i], ui.cardPile.childNodes[get.rand(ui.cardPile.childElementCount)] ); } }, }, wuxianhuoli_weisuoyuwei: { trigger: { player: "phaseZhunbeiBegin" }, forced: true, silent: true, popup: true, charlotte: true, async content(_, __, player) { player.draw(); }, mod: { cardUsable(card, player, num) { if (card.name == "sha") return num + 1; }, }, }, wuxianhuoli_duoduoyishan: { trigger: { global: "phaseEnd" }, forced: true, silent: true, popup: true, charlotte: true, async content(_, __, player) { player.draw(); }, }, wuxianhuoli_xushidaifa: { trigger: { source: "damageBegin1" }, filter(event, player) { if (!event.card || event.card.name !== "sha") return false; return ( game .getGlobalHistory("everything", (evt) => { if (evt.name !== "damage") return false; return evt.card && evt.card.name === "sha"; }) .indexOf(event) === 0 ); }, forced: true, silent: true, popup: true, charlotte: true, async content(_, trigger) { trigger.increase("num"); }, }, wuxianhuoli_liuanhuaming: { trigger: { player: "loseAfter", global: [ "equipAfter", "addJudgeAfter", "gainAfter", "loseAsyncAfter", "addToExpansionAfter", ], }, filter(event, player) { if (player === _status.currentPhase) return false; const evt = event.getl(player); return evt.cards2 && evt.cards2.length > 0; }, forced: true, silent: true, popup: true, charlotte: true, usable: 2, async content(_, __, player) { player.draw(); }, }, wuxianhuoli_mianmianjudao: { trigger: { player: "phaseZhunbeiBegin" }, forced: true, silent: true, popup: true, charlotte: true, async content(_, __, player) { const cards = []; for (const type of ["basic", "trick"]) { const card = get.cardPile((card) => { const typex = get.type2(card, false); return type === typex; }); if (card) cards.add(card); } if (cards.length) player.gain(cards, "gain2"); }, }, wuxianhuoli_task: { trigger: { source: "damageAfter" }, forced: true, popup: false, silent: true, charlotte: true, async content(event, trigger, player) { if (!_status.wuxianhuoliProgress) _status.wuxianhuoliProgress = 0; if (!_status.wuxianhuoliLevel) _status.wuxianhuoliLevel = 0; if (_status.wuxianhuoliLevel > 1) return; _status.wuxianhuoliProgress += trigger.num; game.broadcastAll( (num, level) => { _status.wuxianhuoliProgress = num; _status.wuxianhuoliLevel = level; if (!ui.wuxianhuoliProgress) { ui.wuxianhuoliProgress = get.is.phoneLayout() ? ui.create.div(".touchinfo.left", ui.window) : ui.create.div(ui.gameinfo); } ui.wuxianhuoliProgress.innerHTML = "任务进度(" + num + "/" + (level === 0 ? 3 : 5) + ")"; }, _status.wuxianhuoliProgress, _status.wuxianhuoliLevel ); if (_status.wuxianhuoliProgress < (_status.wuxianhuoliLevel === 0 ? 3 : 5)) return; game.broadcastAll(() => { _status.wuxianhuoliProgress = 0; _status.wuxianhuoliLevel++; }); let next; const send = (skills, refreshable, stop = false) => { let next = game.createEvent("wuxianhuoli_reward", false); next.setContent(lib.skill.wuxianhuoli_task.contentx); next.set("skills", skills); next.set("refreshable", refreshable); next.set("includeOut", true); if (!stop) game.resume(); return next; }; const sendback = (result, player) => { if (!result) result = {}; if (!result.control && (typeof result.index !== "number" || result.index < 0)) { result.index = 0; } results.push([player, result]); }; const ai_targets = [], results = [], players = game.players.slice(), skillsMap = {}; let withme = false, withol = false, withai = false; for (const current of players) { if (_status.connectMode) current.showTimer(); const skills = get.info("wuxianhuoli_task").getSkills(); const refreshable = !current.storage.wuxianhuoli_refreshed; skillsMap[current.playerid] = skills; if (current.isOnline()) { withol = true; current.send(send, skills, refreshable); current.wait(sendback); } else if (current == game.me) { withme = true; next = send(skills, refreshable, true); if (_status.connectMode) game.me.wait(sendback); } else { ai_targets.push(current); } } if (ai_targets.length) { for (let i = 0; i < ai_targets.length; i++) { const current = ai_targets[i]; if (players.includes(current)) { sendback({ index: 0 }, current); ai_targets.splice(i--, 1); } } if (ai_targets.length) { ai_targets.randomSort(); setTimeout(function () { event.interval = setInterval( function () { const current = ai_targets.shift(); if (players.includes(current)) { sendback({ index: 0 }, current); } if (!ai_targets.length) { clearInterval(event.interval); if (withai) game.resume(); } }, _status.connectMode ? 750 : 75 ); }, 500); } } if (withme) { let result = await next.forResult(); if (_status.connectMode) { game.me.unwait(result, game.me); } else { if (!result) result = {}; if (!result.control && (typeof result.index !== "number" || result.index < 0)) { result.index = 0; } results.push([game.me, result]); } } if (withol && !event.resultOL) { await new Promise((resolve) => { const interval = setInterval(() => { if (results.length === players.length) { resolve(); clearInterval(interval); } }, 4); }); } if (ai_targets.length > 0) { withai = true; await new Promise((resolve) => { const interval = setInterval(() => { if (results.length === players.length) { resolve(); clearInterval(interval); } }, 4); }); } if (_status.connectMode) { for (var i of players) i.hideTimer(); } const entries = []; for (const res of results) { const target = res[0], result = res[1]; if (!target || !result) continue; let skill = result.control; if (!skill) skill = skillsMap[target.playerid][result.index]; if (result.refreshed) target.storage.wuxianhuoli_refreshed = true; entries.push([target, skill]); } entries.sort((a, b) => lib.sort.seat(a[0], b[0])); for (const entry of entries) { entry[0].popup(entry[1]); await entry[0].addSkills(entry[1]); } for (const entry of entries) { await entry[0].draw(2, "nodelay"); } game.broadcastAll( (num, level) => { if (level === 2 && ui.wuxianhuoliProgress) { ui.wuxianhuoliProgress.innerHTML = ""; return; } if (!ui.wuxianhuoliProgress) { ui.wuxianhuoliProgress = get.is.phoneLayout() ? ui.create.div(".touchinfo.left", ui.window) : ui.create.div(ui.gameinfo); } ui.wuxianhuoliProgress.innerHTML = "任务进度(" + num + "/" + (level === 0 ? 3 : 5) + ")"; }, _status.wuxianhuoliProgress, _status.wuxianhuoliLevel ); await game.asyncDelay(); }, getSkills(num = 6) { let allList = _status.characterlist.slice(0); let list = []; let skills = []; let map = []; let entries = []; allList.randomSort(); for (let i = 0; i < allList.length; i++) { let name = allList[i]; let skills2 = lib.character[name][3].slice(); skills2.randomSort(); outer: for (let j = 0; j < skills2.length; j++) { let list2 = [skills2[j]]; game.expandSkills(list2); for (let k = 0; k < list2.length; k++) { let info = lib.skill[list2[k]]; if ( !info || info.silent || info.juexingji || info.hiddenSkill || info.dutySkill || info.zhuSkill || info.unique || info.groupSkill ) continue; if (info.ai && (info.ai.combo || info.ai.notemp || info.ai.neg)) continue; list.add(name); if (!map[name]) map[name] = []; map[name].push(skills2[j]); skills.add(skills2[j]); entries.push([name, skills2[j]]); break outer; } } if (list.length >= num) break; } return skills; }, async contentx(event) { _status.noclearcountdown = true; const controls = [ (link) => { const evt = get.event(); evt.result = { refresh: true }; event.control.classList.add("disabled"); event.control.firstChild.innerText = "刷新(1/1)"; game.resume(); }, ]; event.control = ui.create.control(controls.concat(["刷新(0/1)", "stayleft"])); if (!event.refreshable) { event.control.classList.add("disabled"); event.control.firstChild.innerText = "刷新(1/1)"; } let refreshed = false, result; while (true) { const skills = event.skills.slice(3 * refreshed, 3 * (refreshed + 1)); const next = game.me .chooseControl(skills) .set( "choiceList", skills.map((skill) => { return ( '
【' + get.translation( lib.translate[skill + "_ab"] || get.translation(skill).slice(0, 2) ) + "】
" + "
" + get.skillInfoTranslation(skill, game.me) + "
" ); }) ) .set("displayIndex", false) .set("prompt", "选择获得一个技能"); result = await next.forResult(); if (!result.refresh) break; refreshed = true; } if (event.control) event.control.close(); delete _status.noclearcountdown; game.stopCountChoose(); event.result = { control: result.control, refreshed }; }, }, }, singleTranslate: { xiahouyuan: "夏侯渊", huangzhong: "黄忠", weiyan: "魏延", xiaoqiao: "小乔", xuhuang: "徐晃", pangde: "庞德", zhangjiao: "张角", old_caoren: "曹仁", old_zhoutai: "周泰", shuiyanqijunx_info: "出牌阶段,对一名其他角色使用。目标角色选择一项:1、弃置装备区里的所有牌;2、受到你造成的1点伤害。", guohe_info: "出牌阶段,对有牌的一名其他角色使用。你选择一项:①弃置其装备区里的一张牌。②观看其手牌并弃置其中的一张。", shunshou_info: "出牌阶段,对距离为1且有牌的一名其他角色使用。你获得其的一张牌。", }, translate: { zhu: "先", fan: "后", zhu2: "先手", fan2: "后手", normal2: "新1v1", changban2: "血战长坂坡", dianjiang2: "点将单挑", wuxianhuoli2: "无限火力", wuxianhuoli_weisuoyuwei: "为所欲为", wuxianhuoli_weisuoyuwei_info: "①准备阶段,你摸一张牌。②你使用【杀】的次数上限+1。", wuxianhuoli_duoduoyishan: "多多益善", wuxianhuoli_duoduoyishan_info: "一名角色的回合结束时,你摸一张牌。", wuxianhuoli_xushidaifa: "蓄势待发", wuxianhuoli_xushidaifa_info: "当你于一回合首次造成渠道为【杀】的伤害时,此伤害+1。", wuxianhuoli_liuanhuaming: "柳暗花明", wuxianhuoli_liuanhuaming_info: "每回合限两次。当你于回合外失去牌后,你摸一张牌。", wuxianhuoli_mianmianjudao: "面面俱到", wuxianhuoli_mianmianjudao_info: "准备阶段,你从牌堆或弃牌堆中获得基本牌和锦囊牌各一张。", wanrong: "婉容", wanrong_info: "当你成为【杀】的目标后,你可以摸一张牌。", sgzhiheng: "制衡", sgzhiheng_info: "出牌阶段限一次,你可以弃置至多两张牌,然后摸等量的牌。", xiechan: "挟缠", xiechan_info: "限定技,出牌阶段,你可以和对手拼点。若你赢/没赢,你/其视为对其/你使用一张【决斗】。", huwei: "虎威", huwei_info: "当你登场时,你可以视为使用一张【水淹七军】。", sgkuanggu: "狂骨", sgkuanggu_info: "当你造成伤害后,若你已受伤,你可以进行判定:若结果为黑色,你回复1点体力。", suzi: "肃资", cangji: "藏机", cangji_info: "当你死亡时,你可以将装备区内的所有牌移动到游戏外。若如此做,你的下一名角色登场时,你将这些牌置入你的装备区。", sgrenwang: "仁望", sgrenwang_info: "当你于一名其他角色的出牌阶段内成为该角色使用的【杀】或普通锦囊牌的目标后,若此牌不是其本阶段内对你使用的第一张【杀】或普通锦囊牌,则你可以弃置该角色的一张牌。", sgduanliang: "断粮", sgduanliang_info: "出牌阶段,若你本回合内使用牌指定过其他角色为目标,则你可以将一张黑色基本牌或装备牌当做【兵粮寸断】使用。", sgqingguo: "倾国", sgqingguo_info: "你可以将一张装备区内的牌当做【闪】使用或打出。", pianyi: "翩仪", pianyi_info: "锁定技,当你于对手的回合内登场时,你结束此回合。", yinli: "姻礼", yinli_info: "其他角色的装备牌于其回合内进入弃牌堆后,你可以获得之。", shenju: "慎拒", shenju_info: "锁定技,你的手牌上限+X(X为你对手的体力值)。", }, help: { 血战长坂: '
游戏规则
", 无限火力: '
1v1火力全开模式