WIKI冒险团明确声明不支持涉及代练和账号买卖的现金交易活动。
参与者应自行承担对应后果。
全站通知:
Widget:Wiki测试服-宏定义
刷
历
编
跳到导航
跳到搜索
<script>
var 职业列表 = []; var 装备列表 = []; var 套装列表 = [];
var 条件列表 = ["战斗开始", "发动物理攻击", "发动魔法攻击", "使用回复技能", "受到物理攻击", "受到魔法攻击"]; var 系数列表 = ["常数", "力量", "魔力", "技巧", "速度", "体质", "护甲", "抗性", "武威", "当前生命", "已损失生命", "敌方体质", "敌方当前生命", "敌方已损失生命"]; var 对象列表 = ["自身", "我方单体", "我方全体", "敌方单体", "敌方全体"]; var 属性列表 = [ "力量", "魔力", "技巧", "速度", "体质", "护甲", "抗性", "武威", "命中", "闪避", "暴击", "异常", "物伤", "魔伤", "持伤", "暴伤", "无视护甲", "无视抗性", "物理易伤", "魔法易伤", "物伤格挡", "魔伤格挡", "物理单吸", "物理群吸", "魔法单吸", "魔法群吸", "治疗效果", "回复效果", "吸血效果", "治疗抑制", "回复抑制", "吸血抑制", "卸负" ]; function P(str) { return 属性列表.indexOf(str); } var 状态类型列表 = ["力量buff", "力量debuff", "魔力buff", "魔力debuff", "技巧buff", "技巧debuff", "速度buff", "速度debuff", "护甲buff", "护甲debuff", "抗性buff", "抗性debuff", "hot", "dot", "反击buff", "眩晕buff", "物理易伤buff", "魔法易伤buff"]; var 优先目标列表 = ["剩余生命最少" , "剩余生命最多", "总生命值最多", "随意攻击"]; var 技能循环列表 = ["默认", "轮流", "随机", "夜莺手操"]; var 酒馆组件列表 = [ "冒险者名称输入框", "分支下拉框", "阶位下拉框", "职业下拉框", "力量输入框", "魔力输入框", "技巧输入框", "速度输入框", "体质输入框", "护甲输入框", "抗性输入框", "武威输入框", "先发下拉框", "生命输入框", "命中百分框", "闪避百分框", "暴击百分框", "回复效果百分框", "物伤百分框", "魔伤百分框", "物理单吸百分框", "物理群吸百分框", "魔法单吸百分框", "魔法群吸百分框", "武器下拉框", "防具下拉框", "饰品1下拉框", "饰品2下拉框", "环类型下拉框", "环特效下拉框", "环数值百分框", "魔石类型下拉框", "魔石数值下拉框", "技能设置滑块0", "技能设置滑块1", "技能设置滑块2", "技能设置滑块3", "技能设置滑块4", "技能设置滑块5", "技能设置滑块6", "技能设置滑块7", "技能设置滑块8", "技能设置滑块9" ]; var 酒馆组件默认数值列表 = [ "新增一个冒险者", "", "日阶", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "0", "0", "0", "0", "0", "0", "0", "0", "0" ];
var 职业选项列表 = [ [ [""], [""] ], [ ["战士"], [ "黑骑士", "圣龙将军", "剑豪", "剑宗", "剑魔" ] ], [ ["法师"], [ "传奇法师", "岩浆法师", "霜寒法师", "血法师", "灵魂贤者", "幻境先知", "虚空法师", "大巫医" ] ], [ ["圣职"], [ "教宗", "圣光贤者", "神官骑士", "圣殿骑士" ] ], [ ["潜行者"], [ "夜莺", "夜魇", "诡术大师", "幻术刺客" ] ], [ ["野蛮人"], [ "狂战神", "蛮荒之王", "火刑官", "毁灭者" ] ], [ ["火枪手"], [ "圣枪侠", "烈枪侠", "传奇猎人", "巨龙猎人" ] ], [ ["牧星者"], [ "牧星者·力", "牧星者·魔", "牧星者·技" ] ] ]; var 魔石选项列表 = [ [ [""], [""] ], [ ["命中暴君"], ["15%", "13%", "12%", "10%", "8%", "6%","5%"]], [ ["命中古精灵"], ["15%", "13%", "12%", "10%", "8%", "6%","5%"]], [ ["命中乌鸦"], ["15%", "13%", "12%", "10%", "8%", "6%","5%"]], [ ["命中猎神"], ["15%", "13%", "12%", "10%", "8%", "6%","5%"]], [ ["无视暴君"], ["150", "130", "100", "80", "60","50"]], [ ["无视古精灵"], ["150", "130", "100", "80", "60","50"]], [ ["异常乌鸦"], ["15%", "13%", "12%", "10%", "8%", "6%","5%"]], [ ["连击暴君"], ["15%概率立即执行下次行动"]], [ ["增幅暴君"], ["15%概率增加100%的力量"]], [ ["魔法盾古精灵"], ["15%概率将30%的魔力附加为抗性"]], [ ["增幅古精灵"], ["15%概率增加100%的魔力"]], [ ["魔攻巧手乌鸦"], ["15%概率增幅100%的技巧"]], [ ["物攻巧手乌鸦"], ["15%概率增幅100%的技巧"]], [ ["回复巧手乌鸦"], ["15%概率增幅100%的技巧"]], [ ["物理矫捷猎神"], ["15%概率将30%的速度附加为护甲"]], [ ["魔法矫捷猎神"], ["15%概率将30%的速度附加为抗性"]], [ ["速攻猎神"], ["15%概率将100%的速度附加为力量"]], [ ["物理守护巨龙"], ["15%概率增幅100%的护甲"]], [ ["魔法守护巨龙"], ["15%概率增幅100%的护甲"]], [ ["物理强健巨龙"], ["15%概率将30%的体质附加为护甲"]], [ ["魔法强健巨龙"], ["15%概率将30%的体质附加为护甲"]], [ ["先发猎神"], [""]], ]; var 域之环选项列表 = [ [ [""], [""] ], [ ["空"], ["无限制·双伤", "无限制·治疗", "无限制·持伤", "多人·双伤", "多人·治疗", "多人·持伤", "孤儿·双伤", "孤儿·治疗", "孤儿·持伤"] ], [ ["水"], ["无限制·异常", "无限制·治疗", "无限制·闪避", "多人·异常", "多人·治疗", "多人·闪避", "孤儿·异常", "孤儿·治疗", "孤儿·闪避"]], [ ["火"], ["易伤·双伤", "易伤·持伤", "易伤·命中", "降疗·双伤", "降疗·持伤", "降疗·命中", "自杀·双伤", "自杀·持伤", "自杀·命中"]], [ ["地"], ["无限制·物理格挡", "无限制·魔法格挡", "无限制·双格挡", "多人·物理格挡", "多人·魔法格挡", "多人·双格挡", "孤儿·物理格挡", "孤儿·魔法格挡", "孤儿·双格挡", "满生命·物理格挡", "满生命·魔法格挡", "满生命·双格挡"]], [ ["特"], ["混沌之环"] ] ]; var 首字母列表 = ["","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"];
var 遗迹 = { "启用":0,"状态效果":0,"生命":0,"护甲":0,"抗性":0,"物伤":0,"魔伤":0,"回复效果":0,"吸血效果":0,"治疗效果":0,"命中率":0,"暴击率":0 };
function 技能设置描述(类型, 数值) { if (数值 == 0) { return "从不施放"; } if (类型 == "自奶" && 数值 == 101) { return "始终施放"; } if (类型 == "自奶") { return "生命少于" + 数值.toString() + "%时施放"; } if (类型 == "嘲讽" && 数值 == 100) { return "始终保持"; } if (类型 == "嘲讽") { return "自身生命多于" + (100 - 数值).toString() + "%时施放"; } if (类型 == "反击" && 数值 == 2) { return "始终保持"; } if (类型 == "反击" && 数值 == 1) { return "偶尔施放"; } if (类型 == "治疗" && 数值 == 101) { return "始终施放"; } if (类型 == "治疗") { return "友方生命少于" + 数值.toString() + "%施放"; } if (类型 == "群攻" && 数值 == 5) { return "始终施放"; } if (类型 == "群攻") { return "至少有" + (6 - 数值).toString() + "个敌人时施放"; } if (类型 == "单攻" && 数值 == 2) { return "始终施放"; } if (类型 == "单攻" && 数值 == 1) { return "经常施放"; } return "技能描述设置错误"; }
let 启动时间轴 = true; let tick = 0; let tickPrinted = false; function TimeLine(str){ if (!启动时间轴) return; if (!tickPrinted) { tickPrinted = true; M("时间轴输出框").value += "\n"+"\n"+Math.floor(tick/600).toString()+":"+Fix((tick%600)/10).toString(); //console.log("\n"+Math.floor(tick/600).toString()+":"+Fix((tick%600)/10).toString()); } M("时间轴输出框").value += "\n" + str; //console.log(str); }
console.warn = function() {}; function SetChoices(it,list){var ed=it.value;it.innerHTML="";for(var i=0;i<list.length;i++){it.appendChild(new Option(list[i]));}if(list.includes(ed)){it.value = ed;}}; function SetChoicesTwo(it1, it2, list){ var ed1 = it1.value; it1.innerHTML = ""; var ed2 = it2.value; it2.innerHTML = ""; var found1 = -1; for (var i = 0; i < list.length; i++){ it1.appendChild(new Option(list[i][0])); if (list[i][0] == ed1) { found1 = i; it1.value = ed1; } } if (found1 == -1) return; for (var i = 0; i < list[found1][1].length; i++){ it2.appendChild(new Option(list[found1][1][i])); if (list[found1][1][i] == ed2) { it2.value = ed2; } } }; function Write(place, content) { localStorage.setItem(place, JSON.stringify(content)); } function Read(place, notexist) { var content = JSON.parse(localStorage.getItem(place)); if (content == null) content = notexist; return content; } function M(id) { return document.getElementById(id); } function Mtype(str) { return str.endsWith("输入框")?"输入框":str.endsWith("输出框")?"输出框":str.endsWith("下拉框")?"下拉框":str.endsWith("百分框")?"百分框":""; } function Mname(str) { let suffix = Mtype(str); if (suffix) { return str.slice(0, -suffix.length); } return str; } function LoadInputs(){ for (var i=0;i<模块集.length;i++){ if (Mtype(模块集[i])=="输入框") { M(模块集[i]).value = Read(Mname(模块集[i]) + "存储", ""); } else if (Mtype(模块集[i])=="下拉框") { M(模块集[i]).value = Read(Mname(模块集[i]) + "存储", "未选择"); } } } function SaveInputs(){ for (var i=0;i<模块集.length;i++) Write(Mname(模块集[i]) + "存储", M(模块集[i]).value); } function ClearOutputs(){ for (var i=0;i<模块集.length;i++) { if (Mtype(模块集[i])=="输出框") { M(模块集[i]).value = ""; }}}
function Reject(str){ if (M("是否通过文本框") && M("是否通过文本框").value == ""){ M("是否通过文本框").value = "Reject:" + str; M("是否通过文本框").style.color = "red"; } }
function CheckInside(str, list, listname){ for (var i=0; i<list.length; i++){ if (str == list[i])return true; } Reject("\"" + str + "\"不在" + listname + "范围内"); return false; }
function Partition(str, separator) { const separatorIndex = str.indexOf(separator); if (separatorIndex === -1) { return [str, "", ""];} return [str.substring(0, separatorIndex), separator, str.substring(separatorIndex + separator.length)]; }
function Fix(a) { if (isNaN(parseFloat(a))||!isFinite(a)) return NaN; return parseFloat(a.toFixed(1));} function Int(a) { if (isNaN(parseFloat(a))||!isFinite(a)) return 0; return parseInt((1*a).toFixed(0)); } function Max(a, b) { return Math.max(a, b); } function Min(a, b) { return Math.min(a, b); } function Rand(p) { if (isNaN(p)) return true; return (Math.random() < p); } function 舍入取正(num, type) { if (num < 0) return 0; if (["力量","魔力","技巧","速度","体质","护甲","抗性","武威","无视护甲","无视抗性","卸负"].includes(type)) { return parseFloat(num.toFixed(0)); } else { return parseFloat(num.toFixed(8)); } } function 数值计算(系数, 自身, 敌方=null, exclude=null){ let ret = 系数[0]; for (let i=1;i<9;i++) { ret += Int(系数[i] * 自身.属性(系数列表[i], exclude)); } if (系数.length > 9) ret += Int(系数[9] * 自身.当前生命); if (系数.length > 10) ret += Int(系数[10] * (自身.属性("体质") * 10 - 自身.当前生命)); if (系数.length > 11 && 敌方 != null) ret += Int(系数[11] * 敌方.属性("体质")); if (系数.length > 12 && 敌方 != null) ret += Int(系数[12] * 敌方.当前生命); if (系数.length > 13 && 敌方 != null) ret += Int(系数[13] * (敌方.属性("体质") * 10 - 敌方.当前生命)); return Int(ret); } function 百分数解析(text){ if (!text || text == "") return 0; if (text.endsWith("%")) { return 0.01 * text.replace(/%/, ""); } return 1 * text.replace(/%/, ""); } function 系数解析(text){ if (!text || text == "") return [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; var 系数 = [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; var raw_item = text.split("+"); var 数值 = []; for (var i=0; i<raw_item.length; i++) if (raw_item[i]!="") 数值.push(raw_item[i]); for (var k=0; k<数值.length;k++){ var 单项数值 = 数值[k]; if ((!isNaN(单项数值)) && isFinite(单项数值) && 系数[0] == 0) { 系数[0] += 单项数值 * 1; } else { 单项数值 = 单项数值.replace("×", "").replace("*", ""); var contains = false; for (var i=系数列表.length-1;i>=0;i--) { if (单项数值.includes(系数列表[i])) { 系数值 = 单项数值.replace(系数列表[i], ""); if (系数值 == "") { 系数[i] += 1; } else if (系数值.endsWith("%")) { 系数值 = 系数值.replace("%", ""); if (isNaN(系数值) || !isFinite(系数值)) { Reject("系数值\"" + 系数值 + "\"无法解析为数值"); return [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; } 系数[i] += 系数值 * 0.01; } else { if (isNaN(系数值) || !isFinite(系数值)) { Reject("系数值\"" + 系数值 + "\"无法解析为数值"); return [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; } 系数[i] += 系数值 * 1; } contains = true; break; } } if (!contains) { Reject("单项数值\"" + 单项数值 + "\"中找不到属性项"); return [0,0,0,0,0,0,0,0,0,0,0,0,0,0]; } } } return 系数; } function 系数表述(系数){ var text = ""; var first = true; if (系数.length != 系数列表.length) return "属性列表长度不一致"; if (系数[0] > 0) { text += String(系数[0]); first = false; } for (var i=1;i<系数列表.length;i++){ if (系数[i] > 0) { if (!first) { text += "+"; } else { first = false; } text += (系数列表[i] + "×" + String(系数[i])); } } return text; }
</script>