diff --git a/libs/control.js b/libs/control.js index 3ca09a2f..b7551997 100644 --- a/libs/control.js +++ b/libs/control.js @@ -444,6 +444,8 @@ control.prototype._initStatistics = function (totalTime) { 'extraDamage': 0, 'moveDirectly': 0, 'ignoreSteps': 0, + 'oneDefEffect': 0, + 'oneMdefEffect': 0, } } diff --git a/libs/enemys.js b/libs/enemys.js index 11dd381f..9a4a6e04 100644 --- a/libs/enemys.js +++ b/libs/enemys.js @@ -407,6 +407,16 @@ enemys.prototype.getDefDamage = function (enemy, k, x, y, floorId) { return nowDamage - nextDamage; } +////// N魔防减伤计算 ////// +enemys.prototype.getMdefDamage = function (enemy, k, x, y, floorId) { + if (typeof enemy == 'string') enemy = core.getEnemyValue(enemy, null, x, y, floorId); + k = k || 1; + const nowDamage = this._getDamage(enemy, null, x, y, floorId); + const nextDamage = this._getDamage(enemy, { "mdef": core.status.hero.mdef + k }, x, y, floorId); + if (nowDamage == null || nextDamage == null) return "???"; + return nowDamage - nextDamage; +} + enemys.prototype.getEnemyInfo = function (enemy, hero, x, y, floorId) { if (enemy == null) return null; if (typeof enemy == 'string') enemy = core.getEnemyValue(enemy, null, x, y, floorId); diff --git a/project/functions.js b/project/functions.js index 95ec79d3..a487c5ae 100644 --- a/project/functions.js +++ b/project/functions.js @@ -271,6 +271,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = "afterBattle": function (enemyId, x, y) { // 战斗结束后触发的事件 + const floorId = core.status.floorId; var enemy = core.getEnemyValue(enemyId, null, x, y); var special = enemy.special; @@ -308,6 +309,11 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a = return; } + const defDamage = core.enemys.getDefDamage(enemy, -1, x, y, floorId); + if (typeof defDamage === "number") core.status.hero.statistics.oneDefEffect -= defDamage; + const mdefDamage = core.enemys.getMdefDamage(enemy, -1, x, y, floorId); + if (typeof mdefDamage === "number") core.status.hero.statistics.oneMdefEffect -= mdefDamage; + // 扣减体力值并记录统计数据 core.status.hero.hp -= damage; core.status.hero.statistics.battleDamage += damage; diff --git a/project/plugins.js b/project/plugins.js index 2ae37c81..a1f69c12 100644 --- a/project/plugins.js +++ b/project/plugins.js @@ -10129,7 +10129,9 @@ var plugins_bb40132b_638b_4a9f_b028_d3fe47acc8d1 = + "受到的总伤害为" + core.formatBigNumber(statistics.battleDamage + statistics.poisonDamage + statistics.extraDamage) + ",其中战斗伤害" + core.formatBigNumber(statistics.battleDamage) + "点" + (core.flags.statusBarItems.indexOf('enableDebuff') >= 0 ? (",中毒伤害" + core.formatBigNumber(statistics.poisonDamage) + "点") : "") - + ",领域/夹击/阻击/血网伤害" + core.formatBigNumber(statistics.extraDamage) + "点。"; + + ",领域/夹击/阻击/血网伤害" + core.formatBigNumber(statistics.extraDamage) + "点。\n\n" + + "1防御累计减伤为" + core.formatBigNumber(statistics.oneDefEffect || 0) + + ",1护盾累计减伤为" + core.formatBigNumber(statistics.oneMdefEffect || 0) + "。"; core.drawTextContent(ctx, str, { left: 30, top: 30, color: "black", maxWidth: 360, fontSize: 14 }); diff --git a/runtime.d.ts b/runtime.d.ts index eae58d98..cdee64c7 100644 --- a/runtime.d.ts +++ b/runtime.d.ts @@ -198,7 +198,9 @@ type HeroStatus = { moveDirectly: number poisonDamage: number start: number - totalTime: number + totalTime: number, + oneDefEffect: number, + oneMdefEffect: number, } [key: string]: any } @@ -1642,6 +1644,18 @@ interface enemys { */ getDefDamage(enemy: string | Enemy, k?: number, x?: number, y?: number, floorId?: string): number + /** + * 计算再加若干点护盾能使某只敌人对主角的总伤害降低多少 + * @example core.nextCriticals('greenSlime', 10, 0, 0, 'MT0') // 再加10点防御能使绿头怪的伤害降低多少 + * @param enemy 敌人id或敌人对象 + * @param k 假设主角增加的护盾,可选,默认为1 + * @param x 敌人的横坐标,可选 + * @param y 敌人的纵坐标,可选 + * @param floorId 敌人所在的地图,可选 + * @returns 总伤害的减少量 + */ + getMdefDamage(enemy: string | Enemy, k?: number, x?: number, y?: number, floorId?: string): number + /** * 获得某张地图的敌人集合,用于手册绘制 * @example core.getCurrentEnemys('MT0') // 主塔0层的敌人集合 @@ -3358,7 +3372,10 @@ declare class PaginationClass extends MenuBaseClass { type CoreMixin = { firstData: { [x: string]: any } - /** 全塔属性开关 */flags: { [flagName: string]: boolean | number} + /** 全塔属性开关 */flags: { + statusBarItems: string[] + [flagName: string]: boolean | number + } /** 全局数值 */values: { /** 全局帧动画时间 */animateSpeed: number;