diff --git a/project/data.js b/project/data.js index 1aa2b2d..22ff209 100644 --- a/project/data.js +++ b/project/data.js @@ -460,6 +460,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "r.webp", "sound.webp", "status.webp", + "statusBackground.webp", "suiji.webp", "tati_020101.webp", "tati_020101a.webp", @@ -1521,7 +1522,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "title": "秽翼的尤斯蒂娅", "name": "Eustia", "version": "鸽子窝造塔小队", - "floorId": "guangchang", + "floorId": "jiaocheng01", "hero": { "image": "hero.webp", "animate": false, @@ -1531,10 +1532,10 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "hp": 1000, "manamax": -1, "mana": 0, - "atk": 10, - "def": 10, + "atk": 30, + "def": 20, "mdef": 100, - "speed": 10, + "speed": 20, "money": 0, "exp": 0, "equipment": [], @@ -1546,7 +1547,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "loc": { "direction": "up", "x": 6, - "y": 10 + "y": 12 }, "flags": { "itemDetail": true, @@ -1557,9 +1558,9 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "followers": [], "steps": 0, "matk": 0, - "spell": 0, + "spell": 10, "spelldef": 0, - "mhp": 0 + "mhp": 100 }, "startCanvas": [ { @@ -1915,22 +1916,28 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = ], "startText": [ { - "type": "setText" - }, - { - "type": "setHeroOpacity", - "opacity": 0 - }, - { - "type": "setCurtain", - "color": [ - 0, - 0, - 0, - 1 - ], - "time": 500, - "keep": true + "type": "if", + "condition": "false", + "true": [ + { + "type": "setText" + }, + { + "type": "setHeroOpacity", + "opacity": 0 + }, + { + "type": "setCurtain", + "color": [ + 0, + 0, + 0, + 1 + ], + "time": 500, + "keep": true + } + ] }, { "type": "function", @@ -1945,8 +1952,14 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "name": "强制横屏" }, { - "type": "insert", - "name": "chapter0" + "type": "if", + "condition": "false", + "true": [ + { + "type": "insert", + "name": "chapter0" + } + ] } ], "shops": [ @@ -2121,7 +2134,7 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "redPotion": 100, "bluePotion": 250, "yellowPotion": 500, - "greenPotion": 800, + "greenPotion": 900, "breakArmor": 0.9, "counterAttack": 0.1, "purify": 3, @@ -2129,7 +2142,8 @@ var data_a1e2fb4a_e986_4524_b0da_9b7ba7c0874d = "animateSpeed": 300, "moveSpeed": 100, "statusCanvasRowsOnMobile": 3, - "floorChangeTime": 500 + "floorChangeTime": 500, + "yellowGem": 2 }, "flags": { "statusBarItems": [ diff --git a/project/floors/jiaocheng01.js b/project/floors/jiaocheng01.js index 66b7d2a..3f90f67 100644 --- a/project/floors/jiaocheng01.js +++ b/project/floors/jiaocheng01.js @@ -22,7 +22,15 @@ main.floors.jiaocheng01= "血瓶介绍:不同大小" ] }, - "changeFloor": {}, + "changeFloor": { + "6,0": { + "floorId": "jiaocheng02", + "loc": [ + 6, + 12 + ] + } + }, "beforeBattle": {}, "afterBattle": {}, "afterGetItem": {}, diff --git a/project/floors/jiaocheng02.js b/project/floors/jiaocheng02.js index 7ebb265..ee9a1f2 100644 --- a/project/floors/jiaocheng02.js +++ b/project/floors/jiaocheng02.js @@ -25,7 +25,15 @@ main.floors.jiaocheng02= "法杖:魔攻比例10%,魔防比例0%" ] }, - "changeFloor": {}, + "changeFloor": { + "6,12": { + "floorId": "jiaocheng01", + "loc": [ + 6, + 0 + ] + } + }, "beforeBattle": {}, "afterBattle": {}, "afterGetItem": {}, diff --git a/project/functions.js b/project/functions.js index a9a00a6..c47e33e 100644 --- a/project/functions.js +++ b/project/functions.js @@ -308,14 +308,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = } // 获得战斗伤害信息 var damageInfo = core.getDamageInfo(enemyId, null, x, y) || {}; - if (!core.getFlag("noAnimate")) await core.attackAnimate( enemyId, damageInfo.start[0], damageInfo.start[1], damageInfo.start[2], damageInfo.start[3], - damageInfo.start[4], damageInfo.heroDiffList, damageInfo.enemyDiffList, damageInfo.heroanimateList, @@ -792,7 +790,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = } var guards = []; - // 光环和支援检查 if (!core.status.checkBlock) core.status.checkBlock = {}; @@ -1047,7 +1044,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = enemyinfo.now = oneTurn enemyinfo.onAttack = true } - const start = [core.clone(heroinfo), core.clone(enemyinfo), core.clone(equipInfo), oneTurn, onegcd] //记录开始战斗时的属性并转发 + const start = [core.clone(heroinfo), core.clone(enemyinfo), core.clone(equipInfo), oneTurn] //记录开始战斗时的属性并转发 //---第三部分:递归开始--- const heroDiffList = [], @@ -1064,7 +1061,6 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = enemy_diff = {}, hero_animate = [], enemy_animate = []; - if (enemyinfo.onAttack) { //怪物先攻的场合 //这里计算怪物攻击时发生的各种变化,同时计入enemy_diff let mon_damage = 0 @@ -1097,6 +1093,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = enemyinfo.onAttack = false enemyinfo.now = 0 onattack = true + } equipInfo.forEach(v => { if (v.onAttack) { @@ -1204,25 +1201,26 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = } }) + if (onattack) { + //处理完毕后的数据处理 + heroDiffList.push(hero_diff) + enemyDiffList.push(enemy_diff) + heroanimateList.push(hero_animate) + enemyanimateList.push(enemy_animate) + //处理属性变化 + for (let v in hero_diff) { + heroinfo[v] += hero_diff[v] + } + for (let v in enemy_diff) { + enemyinfo[v] += enemy_diff[v] + } - //处理完毕后的数据处理 - heroDiffList.push(hero_diff) - enemyDiffList.push(enemy_diff) - heroanimateList.push(hero_animate) - enemyanimateList.push(enemy_animate) - //处理属性变化 - for (let v in hero_diff) { - heroinfo[v] += hero_diff[v] - } - for (let v in enemy_diff) { - enemyinfo[v] += enemy_diff[v] - } + //出手50回合怪物生命未降低直接判负,避免死循环 + if (hero_turn === 50) { - //出手50回合怪物生命未降低直接判负,避免死循环 - if (hero_turn === 50) { - - if (enemyinfo.hp >= beforehp) { - return null + if (enemyinfo.hp >= beforehp) { + return null + } } } diff --git a/project/images/statusBackground.webp b/project/images/statusBackground.webp new file mode 100644 index 0000000..498f5d8 Binary files /dev/null and b/project/images/statusBackground.webp differ diff --git a/project/items.js b/project/items.js index b272946..a5b23f6 100644 --- a/project/items.js +++ b/project/items.js @@ -37,7 +37,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "canUseItemEffect": "true" }, "greenGem": { - "cls": "tools", + "cls": "items", "name": "绿宝石", "text": ",法强+${core.values.greenGem}", "itemEffect": "core.status.hero.spell += core.values.greenGem * core.status.thisMap.ratio", @@ -92,7 +92,7 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "canUseItemEffect": "true" }, "sword0": { - "cls": "items", + "cls": "equips", "name": "破旧的剑", "text": "一把已经生锈的剑", "equip": { @@ -103,7 +103,8 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = } }, "itemEffect": "core.status.hero.atk += 0", - "itemEffectTip": ",攻击+0" + "itemEffectTip": ",攻击+0", + "equipCls": "匕首" }, "sword1": { "cls": "equips", @@ -557,9 +558,15 @@ var items_296f5d02_12fd_4166_a7c1_b5e830c9ee3a = "canUseItemEffect": "true" }, "I375": { - "cls": "items", + "cls": "equips", "name": "新物品", - "canUseItemEffect": "true" + "canUseItemEffect": "true", + "equipCls": "法杖", + "equip": { + "type": 0, + "value": {}, + "percentage": {} + } }, "I396": { "cls": "items", diff --git a/project/plugins.js b/project/plugins.js index 9c9b7f3..459d53a 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -3087,7 +3087,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = break; case "matk": case "mhp": - text += `(${core.status.hero[item]})%`; + text = `${Math.floor(core.getRealStatus("spell")* core.getRealStatus(item)/100)}(${text})%`; break; } core.fillBoldText1( @@ -3933,8 +3933,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = return nextInfo == null || typeof nextInfo == "number" || nextInfo.damage >= pre ? - null : - [start, nextInfo.damage]; + null : [start, nextInfo.damage]; }; var currAtk = start_atk; while (true) { @@ -4371,7 +4370,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = if (!id || !cls || !(cls === "enemys" || cls === "enemy48")) return core.clearContinueAutomaticRoute(callback); // 非强制战斗 - if (!core.enemys.canBattle(id, x, y) && !force && !core.status.event.id) { + if (core.enemys.getDamage(id, x, y) === null && !force && !core.status.event.id) { core.stopSound(); core.playSound("操作失败"); core.drawTip("你打不过此怪物!", id); @@ -5187,431 +5186,426 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = }; }, "手册区分特殊属性": function () { - // 在此增加新插件 - this.arrsame = function (Arraya, Arrayb) { - let a = Arraya || []; - let b = Arrayb || []; - if (typeof a === "number") a = [a]; - if (typeof b === "number") b = [b]; - let c = [...a, ...b]; - for (const i of c) - if (!a.includes(i) || !b.includes(i)) { - return false; - } - return true; - }; - enemys.prototype.getCurrentEnemys = function (floorId) { - floorId = floorId || core.status.floorId; - var enemys = [], - used = {}; - core.extractBlocks(floorId); - core.status.maps[floorId].blocks.forEach(function (block) { - if (!block.disable && block.event.cls.indexOf("enemy") == 0) { - this._getCurrentEnemys_addEnemy( - block.event.id, - enemys, - used, - block.x, - block.y, - floorId - ); - } - }, this); - return this._getCurrentEnemys_sort(enemys); - }; + // 在此增加新插件 + this.arrsame = function (Arraya, Arrayb) { + let a = Arraya || []; + let b = Arrayb || []; + if (typeof a === "number") a = [a]; + if (typeof b === "number") b = [b]; + let c = [...a, ...b]; + for (const i of c) + if (!a.includes(i) || !b.includes(i)) { + return false; + } + return true; + }; + enemys.prototype.getCurrentEnemys = function (floorId) { + floorId = floorId || core.status.floorId; + var enemys = [], + used = {}; + core.extractBlocks(floorId); + core.status.maps[floorId].blocks.forEach(function (block) { + if (!block.disable && block.event.cls.indexOf("enemy") == 0) { + this._getCurrentEnemys_addEnemy( + block.event.id, + enemys, + used, + block.x, + block.y, + floorId + ); + } + }, this); + return this._getCurrentEnemys_sort(enemys); + }; - enemys.prototype._getCurrentEnemys_getEnemy = function (enemyId) { - var enemy = core.material.enemys[enemyId]; - if (!enemy) return null; + enemys.prototype._getCurrentEnemys_getEnemy = function (enemyId) { + var enemy = core.material.enemys[enemyId]; + if (!enemy) return null; - // 检查朝向;displayIdInBook - return ( - core.material.enemys[enemy.displayIdInBook] || - core.material.enemys[(enemy.faceIds || {}).down] || - enemy - ); - }; + // 检查朝向;displayIdInBook + return ( + core.material.enemys[enemy.displayIdInBook] || + core.material.enemys[(enemy.faceIds || {}).down] || + enemy + ); + }; - enemys.prototype._getCurrentEnemys_addEnemy = function ( - enemyId, - enemys, - used, - x, - y, - floorId - ) { - var enemy = this._getCurrentEnemys_getEnemy(enemyId); - if (enemy == null) return; + enemys.prototype._getCurrentEnemys_addEnemy = function ( + enemyId, + enemys, + used, + x, + y, + floorId + ) { + var enemy = this._getCurrentEnemys_getEnemy(enemyId); + if (enemy == null) return; - var id = enemy.id; + var id = enemy.id; - var enemyInfo = this.getEnemyInfo(enemy, null, null, null, floorId); - var locEnemyInfo = this.getEnemyInfo(enemy, null, x, y, floorId); - if ( - !core.flags.enableEnemyPoint || - (locEnemyInfo.atk == enemyInfo.atk && - locEnemyInfo.def == enemyInfo.def && - locEnemyInfo.hp == enemyInfo.hp && - core.plugin.arrsame(locEnemyInfo.special, enemyInfo.special)) - ) { - x = null; - y = null; - } else { - // 检查enemys里面是否使用了存在的内容 - for (var i = 0; i < enemys.length; ++i) { - var one = enemys[i]; - if ( - id == one.id && - one.locs != null && - locEnemyInfo.atk == one.atk && - locEnemyInfo.def == one.def && - locEnemyInfo.hp == one.hp && - core.plugin.arrsame(locEnemyInfo.special, one.special) - ) { - one.locs.push([x, y]); - return; - } - } - enemyInfo = locEnemyInfo; - } + var enemyInfo = this.getEnemyInfo(enemy, null, null, null, floorId); + var locEnemyInfo = this.getEnemyInfo(enemy, null, x, y, floorId); + if ( + !core.flags.enableEnemyPoint || + (locEnemyInfo.atk == enemyInfo.atk && + locEnemyInfo.def == enemyInfo.def && + locEnemyInfo.hp == enemyInfo.hp && + core.plugin.arrsame(locEnemyInfo.special, enemyInfo.special)) + ) { + x = null; + y = null; + } else { + // 检查enemys里面是否使用了存在的内容 + for (var i = 0; i < enemys.length; ++i) { + var one = enemys[i]; + if ( + id == one.id && + one.locs != null && + locEnemyInfo.atk == one.atk && + locEnemyInfo.def == one.def && + locEnemyInfo.hp == one.hp && + core.plugin.arrsame(locEnemyInfo.special, one.special) + ) { + one.locs.push([x, y]); + return; + } + } + enemyInfo = locEnemyInfo; + } - var id = enemy.id + ":" + x + ":" + y; - if (used[id]) return; - used[id] = true; + var id = enemy.id + ":" + x + ":" + y; + if (used[id]) return; + used[id] = true; - var specialText = core.enemys.getSpecialText(enemy, x, y, floorId); - var specialColor = core.enemys.getSpecialColor(enemy, x, y, floorId); + var specialText = core.enemys.getSpecialText(enemy, x, y, floorId); + var specialColor = core.enemys.getSpecialColor(enemy, x, y, floorId); - var critical = this.nextCriticals(enemy, 1, x, y, floorId); - if (critical.length > 0) critical = critical[0]; + var critical = this.nextCriticals(enemy, 1, x, y, floorId); + if (critical.length > 0) critical = critical[0]; + var criticalSpeed = core.nextCriticals_speed(enemy, 1, x, y, floorId); + if (criticalSpeed.length > 0) criticalSpeed = criticalSpeed[0]; + var criticalSpell = core.nextCriticals_spell(enemy, 1, x, y, floorId); + if (criticalSpell.length > 0) criticalSpell = criticalSpell[0]; + var e = core.clone(enemy); + for (var v in enemyInfo) { + e[v] = enemyInfo[v]; + } + if (x != null && y != null) { + e.locs = [ + [x, y] + ]; + } + e.name = core.getEnemyValue(enemy, "name", x, y, floorId); + e.specialText = specialText; + e.specialColor = specialColor; + e.damage = this.getDamage(enemy, x, y, floorId); + e.critical = critical[0]; + e.criticalDamage = critical[1]; + e.criticalAtk = [critical[0], critical[1]]; + e.criticalSpeed = criticalSpeed; + e.criticalSpell = criticalSpell; + e.defDamage = this._getCurrentEnemys_addEnemy_defDamage( + enemy, + x, + y, + floorId + ); + enemys.push(e); + }; - var e = core.clone(enemy); - for (var v in enemyInfo) { - e[v] = enemyInfo[v]; - } - if (x != null && y != null) { - e.locs = [[x, y]]; - } - e.name = core.getEnemyValue(enemy, "name", x, y, floorId); - e.specialText = specialText; - e.specialColor = specialColor; - e.damage = this.getDamage(enemy, x, y, floorId); - e.critical = critical[0]; - e.criticalDamage = critical[1]; - e.defDamage = this._getCurrentEnemys_addEnemy_defDamage( - enemy, - x, - y, - floorId - ); - enemys.push(e); - }; + enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function ( + enemy, + x, + y, + floorId + ) { + var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1; + return this.getDefDamage(enemy, ratio, x, y, floorId); + }; - enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function ( - enemy, - x, - y, - floorId - ) { - var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1; - return this.getDefDamage(enemy, ratio, x, y, floorId); - }; + enemys.prototype._getCurrentEnemys_sort = function (enemys) { + return enemys.sort(function (a, b) { + if (a.damage == b.damage) { + return a.money - b.money; + } + if (a.damage == null) { + return 1; + } + if (b.damage == null) { + return -1; + } + return a.damage - b.damage; + }); + }; - enemys.prototype._getCurrentEnemys_sort = function (enemys) { - return enemys.sort(function (a, b) { - if (a.damage == b.damage) { - return a.money - b.money; - } - if (a.damage == null) { - return 1; - } - if (b.damage == null) { - return -1; - } - return a.damage - b.damage; - }); - }; + ////// 获得所有特殊属性的名称 ////// + enemys.prototype.getSpecialText = function (enemy, x, y, floorId) { + if (typeof enemy == "string") + enemy = this.getEnemyInfo(enemy, null, x, y, floorId); + if (!enemy) return []; + var special = enemy.special; + var text = []; - ////// 获得所有特殊属性的名称 ////// - enemys.prototype.getSpecialText = function (enemy, x, y, floorId) { - if (typeof enemy == "string") - enemy = this.getEnemyInfo(enemy, null, x, y, floorId); - if (!enemy) return []; - var special = enemy.special; - var text = []; + var specials = this.getSpecials(); + if (specials) { + for (var i = 0; i < specials.length; i++) { + if (this.hasSpecial(special, specials[i][0])) + text.push(this._calSpecialContent(enemy, specials[i][1])); + } + } + return text; + }; - var specials = this.getSpecials(); - if (specials) { - for (var i = 0; i < specials.length; i++) { - if (this.hasSpecial(special, specials[i][0])) - text.push(this._calSpecialContent(enemy, specials[i][1])); - } - } - return text; - }; + ////// 获得所有特殊属性的颜色 ////// + enemys.prototype.getSpecialColor = function (enemy, x, y, floorId) { + if (typeof enemy == "string") + enemy = this.getEnemyInfo(enemy, null, x, y, floorId); + if (!enemy) return []; + var special = enemy.special; + var colors = []; - ////// 获得所有特殊属性的颜色 ////// - enemys.prototype.getSpecialColor = function (enemy, x, y, floorId) { - if (typeof enemy == "string") - enemy = this.getEnemyInfo(enemy, null, x, y, floorId); - if (!enemy) return []; - var special = enemy.special; - var colors = []; + var specials = this.getSpecials(); + if (specials) { + for (var i = 0; i < specials.length; i++) { + if (this.hasSpecial(special, specials[i][0])) + colors.push(specials[i][3] || null); + } + } + return colors; + }; - var specials = this.getSpecials(); - if (specials) { - for (var i = 0; i < specials.length; i++) { - if (this.hasSpecial(special, specials[i][0])) - colors.push(specials[i][3] || null); - } - } - return colors; - }; + ////// 获得所有特殊属性的额外标记 ////// + enemys.prototype.getSpecialFlag = function (enemy, x, y, floorId) { + if (typeof enemy == "string") + enemy = getEnemyInfo(enemy, null, x, y, floorId); + if (!enemy) return []; + var special = enemy.special; + var flag = 0; - ////// 获得所有特殊属性的额外标记 ////// - enemys.prototype.getSpecialFlag = function (enemy, x, y, floorId) { - if (typeof enemy == "string") - enemy = getEnemyInfo(enemy, null, x, y, floorId); - if (!enemy) return []; - var special = enemy.special; - var flag = 0; + var specials = this.getSpecials(); + if (specials) { + for (var i = 0; i < specials.length; i++) { + if (this.hasSpecial(special, specials[i][0])) + flag |= specials[i][4] || 0; + } + } + return flag; + }; - var specials = this.getSpecials(); - if (specials) { - for (var i = 0; i < specials.length; i++) { - if (this.hasSpecial(special, specials[i][0])) - flag |= specials[i][4] || 0; - } - } - return flag; - }; + ////// 获得每个特殊属性的说明 ////// + enemys.prototype.getSpecialHint = function (enemy, special) { + var specials = this.getSpecials(); + if (special == null) { + if (specials == null) return []; + var hints = []; + for (var i = 0; i < specials.length; i++) { + if (this.hasSpecial(enemy, specials[i][0])) + hints.push( + "\r[" + + core.arrayToRGBA(specials[i][3] || "#FF6A6A") + + "]\\d" + + this._calSpecialContent(enemy, specials[i][1]) + + ":\\d\r[]" + + this._calSpecialContent(enemy, specials[i][2]) + ); + } + return hints; + } - ////// 获得每个特殊属性的说明 ////// - enemys.prototype.getSpecialHint = function (enemy, special) { - var specials = this.getSpecials(); - if (special == null) { - if (specials == null) return []; - var hints = []; - for (var i = 0; i < specials.length; i++) { - if (this.hasSpecial(enemy, specials[i][0])) - hints.push( - "\r[" + - core.arrayToRGBA(specials[i][3] || "#FF6A6A") + - "]\\d" + - this._calSpecialContent(enemy, specials[i][1]) + - ":\\d\r[]" + - this._calSpecialContent(enemy, specials[i][2]) - ); - } - return hints; - } - - if (specials == null) return ""; - for (var i = 0; i < specials.length; i++) { - if (special == specials[i][0]) - return ( - "\r[#FF6A6A]\\d" + - this._calSpecialContent(enemy, specials[i][1]) + - ":\\d\r[]" + - this._calSpecialContent(enemy, specials[i][2]) - ); - } - return ""; - }; - ui.prototype._drawBook_drawName = function ( - index, - enemy, - top, - left, - width - ) { - // 绘制第零列(名称和特殊属性) - // 如果需要添加自己的比如怪物的称号等,也可以在这里绘制 - core.setTextAlign("ui", "center"); - if (core.enemys.getSpecialText(enemy).length == 0) { - core.fillText( - "ui", - enemy.name, - left + width / 2, - top + 35, - "#DDDDDD", - this._buildFont(17, true), - width - ); - } else { - core.fillText( - "ui", - enemy.name, - left + width / 2, - top + 28, - "#DDDDDD", - this._buildFont(17, true), - width - ); - switch (core.enemys.getSpecialText(enemy).length) { - case 1: - core.fillText( - "ui", - core.enemys.getSpecialText(enemy)[0], - left + width / 2, - top + 50, - core.arrayToRGBA( - (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A" - ), - this._buildFont(15, true), - width - ); - break; - case 2: - // Step 1: 计算字体 - var text = - core.enemys.getSpecialText(enemy)[0] + - " " + - core.enemys.getSpecialText(enemy)[1]; - core.setFontForMaxWidth( - "ui", - text, - width, - this._buildFont(15, true) - ); - // Step 2: 计算总宽度 - var totalWidth = core.calWidth("ui", text); - var leftWidth = core.calWidth( - "ui", - core.enemys.getSpecialText(enemy)[0] - ); - var rightWidth = core.calWidth( - "ui", - core.enemys.getSpecialText(enemy)[1] - ); - // Step 3: 绘制 - core.fillText( - "ui", - core.enemys.getSpecialText(enemy)[0], - left + (width + leftWidth - totalWidth) / 2, - top + 50, - core.arrayToRGBA( - (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A" - ) - ); - core.fillText( - "ui", - core.enemys.getSpecialText(enemy)[1], - left + (width + totalWidth - rightWidth) / 2, - top + 50, - core.arrayToRGBA( - (core.enemys.getSpecialColor(enemy) || [])[1] || "#FF6A6A" - ) - ); - break; - default: - core.fillText( - "ui", - "多属性...", - left + width / 2, - top + 50, - "#FF6A6A", - this._buildFont(15, true), - width - ); - } - } - }; - ui.prototype._drawBookDetail_getInfo = function (index) { - var floorId = - core.floorIds[(core.status.event.ui || {}).index] || - core.status.floorId; - // 清除浏览地图时的光环缓存 - if (floorId != core.status.floorId && core.status.checkBlock) { - core.status.checkBlock.cache = {}; - } - var enemys = core.enemys.getCurrentEnemys(floorId); - console.log(123); - if (enemys.length == 0) return []; - index = core.clamp(index, 0, enemys.length - 1); - var enemy = enemys[index]; - var texts = core.enemys.getSpecialHint(enemy); - if (texts.length == 0) texts.push("该怪物无特殊属性。"); - if (enemy.description) texts.push(enemy.description + "\r"); - this._drawBookDetail_getTexts(enemy, floorId, texts); - texts.push(""); - return [enemy, texts]; - }; - }, + if (specials == null) return ""; + for (var i = 0; i < specials.length; i++) { + if (special == specials[i][0]) + return ( + "\r[#FF6A6A]\\d" + + this._calSpecialContent(enemy, specials[i][1]) + + ":\\d\r[]" + + this._calSpecialContent(enemy, specials[i][2]) + ); + } + return ""; + }; + ui.prototype._drawBook_drawName = function ( + index, + enemy, + top, + left, + width + ) { + // 绘制第零列(名称和特殊属性) + // 如果需要添加自己的比如怪物的称号等,也可以在这里绘制 + core.setTextAlign("ui", "center"); + if (core.enemys.getSpecialText(enemy).length == 0) { + core.fillText( + "ui", + enemy.name, + left + width / 2, + top + 35, + "#DDDDDD", + this._buildFont(17, true), + width + ); + } else { + core.fillText( + "ui", + enemy.name, + left + width / 2, + top + 28, + "#DDDDDD", + this._buildFont(17, true), + width + ); + switch (core.enemys.getSpecialText(enemy).length) { + case 1: + core.fillText( + "ui", + core.enemys.getSpecialText(enemy)[0], + left + width / 2, + top + 50, + core.arrayToRGBA( + (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A" + ), + this._buildFont(15, true), + width + ); + break; + case 2: + // Step 1: 计算字体 + var text = + core.enemys.getSpecialText(enemy)[0] + + " " + + core.enemys.getSpecialText(enemy)[1]; + core.setFontForMaxWidth( + "ui", + text, + width, + this._buildFont(15, true) + ); + // Step 2: 计算总宽度 + var totalWidth = core.calWidth("ui", text); + var leftWidth = core.calWidth( + "ui", + core.enemys.getSpecialText(enemy)[0] + ); + var rightWidth = core.calWidth( + "ui", + core.enemys.getSpecialText(enemy)[1] + ); + // Step 3: 绘制 + core.fillText( + "ui", + core.enemys.getSpecialText(enemy)[0], + left + (width + leftWidth - totalWidth) / 2, + top + 50, + core.arrayToRGBA( + (core.enemys.getSpecialColor(enemy) || [])[0] || "#FF6A6A" + ) + ); + core.fillText( + "ui", + core.enemys.getSpecialText(enemy)[1], + left + (width + totalWidth - rightWidth) / 2, + top + 50, + core.arrayToRGBA( + (core.enemys.getSpecialColor(enemy) || [])[1] || "#FF6A6A" + ) + ); + break; + default: + core.fillText( + "ui", + "多属性...", + left + width / 2, + top + 50, + "#FF6A6A", + this._buildFont(15, true), + width + ); + } + } + }; + ui.prototype._drawBookDetail_getInfo = function (index) { + var floorId = + core.floorIds[(core.status.event.ui || {}).index] || + core.status.floorId; + // 清除浏览地图时的光环缓存 + if (floorId != core.status.floorId && core.status.checkBlock) { + core.status.checkBlock.cache = {}; + } + var enemys = core.enemys.getCurrentEnemys(floorId); + console.log(123); + if (enemys.length == 0) return []; + index = core.clamp(index, 0, enemys.length - 1); + var enemy = enemys[index]; + var texts = core.enemys.getSpecialHint(enemy); + if (texts.length == 0) texts.push("该怪物无特殊属性。"); + if (enemy.description) texts.push(enemy.description + "\r"); + this._drawBookDetail_getTexts(enemy, floorId, texts); + texts.push(""); + return [enemy, texts]; + }; +}, "一防减伤": function () { - // 在此增加新插件 - ui.prototype._drawBook_drawRow3 = function ( - index, - enemy, - top, - left, - width, - position - ) { - // 绘制第三行 - core.setTextAlign("ui", "left"); - var b13 = this._buildFont(13, true), - f13 = this._buildFont(13, false); - var col1 = left, - col2 = left + (width * 9) / 25, - col3 = left + (width * 17) / 25; - core.fillText("ui", "临界", col1, position, "#DDDDDD", f13); - core.fillText( - "ui", - core.formatBigNumber(enemy.critical || 0), - col1 + 30, - position, - null, - b13 - ); - core.fillText("ui", "减伤", col2, position, null, f13); - core.fillText( - "ui", - core.formatBigNumber(enemy.criticalDamage || 0), - col2 + 30, - position, - null, - b13 - ); - //core.fillText('ui', '加防', col3, position, null, f13); - core.fillText("ui", "1防", col3, position, null, f13); - core.fillText( - "ui", - core.formatBigNumber(enemy.defDamage || 0), - col3 + 30, - position, - null, - b13 - ); - }; - ////// 1防减伤计算 ////// - enemys.prototype.getDefDamage = function (enemy, k, x, y, floorId) { - if (typeof enemy == "string") enemy = core.material.enemys[enemy]; - k = k || 1; - var nowDamage = this._getDamage(enemy, null, x, y, floorId); - var nextDamage = this._getDamage( - enemy, - { def: core.status.hero.def + k }, - x, - y, - floorId - ); - if (nowDamage == null || nextDamage == null) return "???"; - return nowDamage - nextDamage; - }; - //防御倍数 - enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function ( - enemy, - x, - y, - floorId - ) { - var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1; - //第一行为按照ratio值计算减防,第二行为1防减伤 - //return this.getDefDamage(enemy, ratio, x, y, floorId); - return this.getDefDamage(enemy, null, x, y, floorId); - }; - }, + // 在此增加新插件 + // + + ui.prototype._drawBook_drawRow3 = function ( + index, + enemy, + top, + left, + width, + position + ) { + // 绘制第三行 + core.setTextAlign("ui", "left"); + var b13 = this._buildFont(13, true), + f13 = this._buildFont(13, false); + var col1 = left, + col2 = left + (width * 9) / 25, + col3 = left + (width * 17) / 25; + core.fillText('ui', '攻击临界', col1 - 50, position, '#DDDDDD', f13); + core.fillText('ui', `[${core.formatBigNumber(enemy.criticalAtk?.[0] || 0)},${core.formatBigNumber(enemy.criticalAtk?.[1] || 0)}]`, col1 + 10, position, null, b13); + core.fillText('ui', '法强临界', col2 - 33, position, null, f13); + core.fillText('ui', `[${core.formatBigNumber(enemy.criticalSpell[0] || 0)},${core.formatBigNumber(enemy.criticalSpell?.[1] || 0)}]`, col2 + 27, position, null, b13); + //core.fillText('ui', '加防', col3, position, null, f13); + core.fillText("ui", "1防", col3, position, null, f13); + core.fillText( + "ui", + core.formatBigNumber(enemy.defDamage || 0), + col3 + 30, + position, + null, + b13 + ); + }; + ////// 1防减伤计算 ////// + enemys.prototype.getDefDamage = function (enemy, k, x, y, floorId) { + if (typeof enemy == "string") enemy = core.material.enemys[enemy]; + k = k || 1; + var nowDamage = this._getDamage(enemy, null, x, y, floorId); + var nextDamage = this._getDamage( + enemy, { def: core.status.hero.def + k }, + x, + y, + floorId + ); + if (nowDamage == null || nextDamage == null) return "???"; + return nowDamage - nextDamage; + }; + //防御倍数 + enemys.prototype._getCurrentEnemys_addEnemy_defDamage = function ( + enemy, + x, + y, + floorId + ) { + var ratio = core.status.maps[floorId || core.status.floorId].ratio || 1; + //第一行为按照ratio值计算减防,第二行为1防减伤 + //return this.getDefDamage(enemy, ratio, x, y, floorId); + return this.getDefDamage(enemy, null, x, y, floorId); + }; +}, "新道具栏/装备栏": function () { // 这个插件有点离谱 个人觉得参数过多只会降低可读性,还不如硬编码 @@ -21636,7 +21630,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = main.dom.gameDraw.appendChild(animateAttack); const { lcm, gcd } = core.plugin.utils; - function animateOnAttack(name, onenemy) { + function animateonAttack(name, onenemy) { if (onenemy) { playanimate(name, 290, 180); } else { @@ -21650,7 +21644,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = enemyInfo, equipInfo, oneTurn, - onegcd, heroDiffList, enemyDiffList, heroanimateList, @@ -21664,8 +21657,18 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = enemyInfo.id = enemyId; enemyInfo.cls = core.getClsFromId(enemyId); enemyInfo.name = core.material.enemys[enemyId].name; - - if (oneTurn < 120) oneTurn *= Math.round(120 / oneTurn); + let max = heroInfo.speed + if (enemyInfo.speed > max) max = enemyInfo.speed + equipInfo.forEach(v => { if (v.speed > max) max = v.speed }) + let i = 0 + while (oneTurn * i / max < 15) { + i++ + } + if (heroInfo.onAttack) heroInfo.now *= i + if (enemyInfo.onAttack) enemyInfo.now *= i + equipInfo.forEach(v => { if (v.onAttack) v.now *= i }) + oneTurn *= i + console.log([oneTurn, heroInfo.now, enemyInfo.now]) let time = 0, farme = 0; return new Promise((res) => { @@ -21708,7 +21711,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = enemyInfo, equipInfo, farme, - onegcd, heroDiffList, enemyDiffList, heroanimateList, @@ -21723,11 +21725,11 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = equipInfo.forEach(function (v) { if (v.isAttack) attack = true; }); - let onattack = false; - if (heroInfo.onAttack) onattack = true; - if (enemyInfo.onAttack) onattack = true; + let onAttack = false; + if (heroInfo.onAttack) onAttack = true; + if (enemyInfo.onAttack) onAttack = true; equipInfo.forEach(function (v) { - if (v.onAttack) onattack = true; + if (v.onAttack) onAttack = true; }); core.clearMap(ctx); let animate = Math.floor(farme / 30); @@ -21888,7 +21890,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = "bold 36px pala" ); - if (!attack && !onattack) enemyInfo.now += enemyInfo.speed / onegcd; + if (!attack && !onAttack) enemyInfo.now += enemyInfo.speed; let enemynow = Math.min(100 + (enemyInfo.now / oneTurn) * 215, 315); ctx.fillStyle = "#FFFFFF"; ctx.beginPath(); @@ -21927,7 +21929,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } core.drawLine(ctx, 100, 125, 315, 125, "#FFFFFF", 5); equipInfo.forEach(function (v) { - if (!attack && !onattack) v.now += v.speed / onegcd; + if (!attack && !onAttack) v.now += v.speed; let vnow = Math.min(100 + (v.now / oneTurn) * 215, 315); ctx.beginPath(); ctx.moveTo(vnow, 120); @@ -21939,7 +21941,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.drawIcon(ctx, v.id, vnow - 16, 54, 32, 32); }); - if (!attack && !onattack) heroInfo.now += hero.speed / onegcd; + if (!attack && !onAttack) heroInfo.now += hero.speed; let heronow = Math.min(100 + (heroInfo.now / oneTurn) * 215, 315); ctx.beginPath(); ctx.moveTo(heronow, 120); @@ -22236,7 +22238,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = "bold 36px pala" ); - if (!attack && !onattack) enemyInfo.now += enemyInfo.speed / onegcd; + if (!attack && !onAttack) enemyInfo.now += enemyInfo.speed; let enemynow = Math.min(100 + (enemyInfo.now / oneTurn) * 215, 315); ctx.fillStyle = "#FFFFFF"; ctx.beginPath(); @@ -22275,7 +22277,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } core.drawLine(ctx, 100, 125, 315, 125, "#FFFFFF", 5); equipInfo.forEach(function (v) { - if (!attack && !onattack) v.now += v.speed / onegcd; + if (!attack && !onAttack) v.now += v.speed; let vnow = Math.min(100 + (v.now / oneTurn) * 215, 315); ctx.beginPath(); ctx.moveTo(vnow, 120); @@ -22287,7 +22289,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.drawIcon(ctx, v.id, vnow - 16, 54, 32, 32); }); - if (!attack && !onattack) heroInfo.now += hero.speed / onegcd; + if (!attack && !onAttack) heroInfo.now += hero.speed; let heronow = Math.min(100 + (heroInfo.now / oneTurn) * 215, 315); ctx.beginPath(); ctx.moveTo(heronow, 120); @@ -22311,12 +22313,12 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = } let nowattacking = false; if (heroInfo.now >= oneTurn && !heroInfo.isAttack) { - heroInfo.onattack = false; + heroInfo.onAttack = false; heroInfo.isAttack = true; nowattacking = true; } if (enemyInfo.now >= oneTurn && !enemyInfo.isAttack) { - enemyInfo.onattack = false; + enemyInfo.onAttack = false; enemyInfo.isAttack = true; nowattacking = true; } @@ -22324,7 +22326,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = equipInfo.forEach((v) => { if (v.now >= oneTurn && !v.isAttack) { v.isAttack = true; - v.onattack = false; + v.onAttack = false; nowattacking = true; equipanimate.push(v); } @@ -22355,7 +22357,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = for (const v in enemyDiffList[turn]) { enemyInfo[v] += enemyDiffList[turn][v]; } - enemyanimateList[turn].forEach((v) => animateOnAttack(v, true)); + enemyanimateList[turn].forEach((v) => animateonAttack(v, true)); let enemydamage = heroDiffList[turn].hp; if (enemydamage > 0) enemydamage = "+" + enemydamage; text = enemydamage === 0 ? "抵抗" : enemydamage; @@ -22380,7 +22382,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = for (const v in heroDiffList[turn]) { heroInfo[v] += heroDiffList[turn][v]; } - heroanimateList[turn].forEach((v) => animateOnAttack(v, false)); + heroanimateList[turn].forEach((v) => animateonAttack(v, false)); if (enemyDiffList[turn] < 0) enemyInfo.inAttack = true; if (heroDiffList[turn] < 0) heroInfo.inAttack = true; @@ -22435,7 +22437,6 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = enemyInfo, equipInfo, farme, - onegcd, heroDiffList, enemyDiffList, heroanimateList, @@ -23352,24 +23353,24 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = ]; }, "动画及周期装备映射": function () { - // 在此增加新插件 - this.equip = { - //所有回合中的装备及速度 - sword1: { id: "sword1", speed: 10 }, - }; - this.heroanimate = { - //勇士武器对应的动画(key为主手武器ID,value为帧动画名) - sword1: "sword", - }; - this.enemyanimate = { - //怪物对应的动画(key为怪物ID,value为帧动画名) - bat: "sword", - }; - this.equipanimate = { - //勇士周期性装备对应的动画(key为装备Id,value为帧动画名) - shield0: "sword", - }; - }, + // 在此增加新插件 + this.equip = { + //所有回合中的装备及速度 + sword1: { id: "sword1", speed: 10 }, + }; + this.heroanimate = { + //勇士武器对应的动画(key为主手武器ID,value为帧动画名) + sword1: "sword", + }; + this.enemyanimate = { + //怪物对应的动画(key为怪物ID,value为帧动画名) + bat: "sword", + }; + this.equipanimate = { + //勇士周期性装备对应的动画(key为装备Id,value为帧动画名) + shield0: "sword", + }; +}, "勇士法抗乘算叠加": function () { // 在此增加新插件 items.prototype.compareEquipment = function ( @@ -23424,6 +23425,142 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = core.status.hero[name] += result.value[name]; }; }, + "攻速临界": function () { + // 在此增加新插件 + //临界表 + core.ui._drawBookDetail_turnAndCriticals = function (enemy, floorId, texts) { + // 临界表 + var criticals = core.enemys.nextCriticals(enemy.id, 8, enemy.x, enemy.y, floorId).map(function (v) { + return core.formatBigNumber(v[0]) + ":" + core.formatBigNumber(v[1]); + }); + while (criticals[0] == '0:0') criticals.shift(); + texts.push("\r[#FF6A6A]\\d攻击临界表:\\d\r[]" + JSON.stringify(criticals)); + var criticals_spell = core.nextCriticals_spell(enemy.id, 8, enemy.x, enemy.y, floorId).map(function (v) { + return core.formatBigNumber(v[0]) + ":" + core.formatBigNumber(v[1]); + }); + while (criticals_spell[0] == '0:0') criticals_spell.shift(); + texts.push("\r[#FF6A6A]\\d法强临界表:\\d\r[]" + JSON.stringify(criticals_spell)); + var criticals_speed = core.nextCriticals_speed(enemy.id, 8, enemy.x, enemy.y, floorId).map(function (v) { + return core.formatBigNumber(v[0]) + ":" + core.formatBigNumber(v[1]); + }); + while (criticals_speed[0] == '0:0') criticals_speed.shift(); + texts.push("\r[#FF6A6A]\\d速度临界表:\\d\r[]" + JSON.stringify(criticals_speed)); + + } + //攻速临界计算 + core.nextCriticals_speed = function (enemy, number, x, y, floorId) { + if (typeof enemy == 'string') enemy = core.material.enemys[enemy]; + number = number || 1; + + var info = core.getDamageInfo(enemy, null, x, y, floorId); + if (info == null) { // 如果未破防... + return [ + ['?', '?'] + ]; + } + + if (typeof info == 'number') { + return [ + [0, 0] + ]; + } + return core.enemys._nextSpeedCriticals_useBinarySearch(enemy, info, number, x, y, floorId); + } + enemys.prototype._nextSpeedCriticals_useBinarySearch = function (enemy, info, number, x, y, floorId) { + var mon_hp = info.mon_hp, + hero_speed = core.status.hero.speed, + mon_def = info.mon_def, + pre = info.damage; + var list = []; + var start_speed = hero_speed; + + var calNext = function (currSpeed, maxSpeed) { + var start = Math.floor(currSpeed), + end = Math.floor(maxSpeed); + if (start > end) return null; + + while (start < end) { + var mid = Math.floor((start + end) / 2); + if (mid - start > end - mid) mid--; + var nextInfo = core.enemys.getDamageInfo(enemy, { "speed": mid }, x, y, floorId); + if (nextInfo == null || (typeof nextInfo == 'number')) return null; + if (pre > nextInfo.damage) end = mid; + else start = mid + 1; + } + var nextInfo = core.enemys.getDamageInfo(enemy, { "speed": start }, x, y, floorId); + return nextInfo == null || (typeof nextInfo == 'number') || nextInfo.damage >= pre ? null : [start, nextInfo.damage]; + } + var currSpeed = start_speed; + while (true) { + var next = calNext(currSpeed + 1, Number.MAX_SAFE_INTEGER, pre); + if (next == null) break; + currSpeed = next[0]; + pre = next[1]; + list.push([currSpeed - hero_speed, info.damage - pre]); + if (pre <= 0 && !core.flags.enableNegativeDamage) break; + if (list.length >= number) break; + } + if (list.length == 0) list.push([0, 0]); + return list; + } + //法强临界计算 + core.nextCriticals_spell = function (enemy, number, x, y, floorId) { + if (typeof enemy == 'string') enemy = core.material.enemys[enemy]; + number = number || 1; + + var info = core.getDamageInfo(enemy, null, x, y, floorId); + if (info == null) { // 如果未破防... + return [ + ['?', '?'] + ]; + } + + if (typeof info == 'number') { + return [ + [0, 0] + ]; + } + return core.enemys._nextSpellCriticals_useBinarySearch(enemy, info, number, x, y, floorId); + } + enemys.prototype._nextSpellCriticals_useBinarySearch = function (enemy, info, number, x, y, floorId) { + var mon_hp = info.mon_hp, + hero_spell = core.status.hero.spell, + mon_def = info.mon_def, + turn = info.mon_turn, + pre = info.damage; + var list = []; + var start_spell = hero_spell; + + var calNext = function (currSpell, maxSpell) { + var start = Math.floor(currSpell), + end = Math.floor(maxSpell); + if (start > end) return null; + + while (start < end) { + var mid = Math.floor((start + end) / 2); + if (mid - start > end - mid) mid--; + var nextInfo = core.enemys.getDamageInfo(enemy, { "spell": mid }, x, y, floorId); + if (nextInfo == null || (typeof nextInfo == 'number')) return null; + if (turn > nextInfo.mon_turn) end = mid; + else start = mid + 1; + } + var nextInfo = core.enemys.getDamageInfo(enemy, { "spell": start }, x, y, floorId); + return nextInfo == null || (typeof nextInfo == 'number') || nextInfo.mon_turn >= turn ? null : [start, nextInfo.damage]; + } + var currSpell = start_spell; + while (true) { + var next = calNext(currSpell + 1, Number.MAX_SAFE_INTEGER, pre, turn); + if (next == null) break; + currSpell = next[0]; + pre = next[1]; + list.push([currSpell - hero_spell, info.damage - pre]); + if (pre <= 0 && !core.flags.enableNegativeDamage) break; + if (list.length >= number) break; + } + if (list.length == 0) list.push([0, 0]); + return list; + } +}, "手册(临时)": function () { // 在此增加新插件 ui.prototype._drawBook_drawContent = function (index, enemy, top, left) { @@ -23434,6 +23571,7 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = this._drawBook_drawRow3(index, enemy, top, left, width, top + 74); this._drawBook_drawRow5(index, enemy, top, left, width, top + 90); } + ui.prototype._drawBook_drawRow4 = function (index, enemy, top, left, width, position) { // 绘制第一行 core.setTextAlign('ui', 'left'); @@ -23456,6 +23594,8 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = f13 = this._buildFont(13, false); var col1 = left, col2 = left + width * 13 / 25; + core.fillText('ui', '速度临界', col1 - 120, position, '#DDDDDD', f13); + core.fillText('ui', `[${core.formatBigNumber(enemy.criticalSpeed?.[0] || 0)},${core.formatBigNumber(enemy.criticalSpeed?.[1] || 0)}]`, col1 - 60, position, null, b13); core.fillText('ui', "勇士出手次数", col1, position, '#DDDDDD', f13); core.fillText('ui', core.getDamageInfo(enemy, null) ? core.getDamageInfo(enemy, null).hero_turn : '???', col1 + 80, position, null, b13);