WIKI冒险团明确声明不支持涉及代练和账号买卖的现金交易活动。
参与者应自行承担对应后果。

全站通知:

Widget:Wiki测试服-宏定义

来自地下城堡2WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

<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>