feat:追猎
This commit is contained in:
parent
22b99dc49c
commit
e358650d95
@ -518,9 +518,12 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
||||
[24, "激光", function (enemy) { return "经过怪物同行或同列时自动减生命" + (enemy.laser || 0) + "点"; }, "#dda0dd"],
|
||||
[25, "光环", function (enemy) { return (enemy.range != null ? ((enemy.haloSquare ? "该怪物九宫格" : "该怪物十字") + enemy.haloRange + "格范围内") : "同楼层所有") + "怪物生命提升" + (enemy.hpBuff || 0) + "%,攻击提升" + (enemy.atkBuff || 0) + "%,防御提升" + (enemy.defBuff || 0) + "%," + (enemy.haloAdd ? "可叠加" : "不可叠加"); }, "#e6e099", 1],
|
||||
[26, "支援", "当周围一圈的怪物受到攻击时将上前支援,并组成小队战斗。", "#77c0b6", 1],
|
||||
[27, "捕捉", function (enemy) { return "当走到怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "时会强制进行战斗。"; }, "#c0ddbb"]
|
||||
[27, "捕捉", function (enemy) { return "当走到怪物周围" + (enemy.zoneSquare ? "九宫格" : "十字") + "时会强制进行战斗。"; }, "#c0ddbb"],
|
||||
[28, "追猎", function (enemy) { return ""; }, "#c0ddbb"],
|
||||
[29, "败移", function (enemy) { return ""; }, "#c0ddbb"],
|
||||
[30, "吸噬", function (enemy) { return ""; }, "#c0ddbb"],
|
||||
];
|
||||
},
|
||||
},
|
||||
"getEnemyInfo": function (enemy, hero, x, y, floorId) {
|
||||
// 获得某个怪物变化后的数据;该函数将被伤害计算和怪物手册使用
|
||||
// 例如:坚固、模仿、仿攻等等
|
||||
@ -1258,7 +1261,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
||||
var damage = {}, // 每个点的伤害值
|
||||
type = {}, // 每个点的伤害类型
|
||||
repulse = {}, // 每个点的阻击怪信息
|
||||
ambush = {}; // 每个点的捕捉信息
|
||||
ambush = {}, // 每个点的捕捉信息
|
||||
chase = {}; // 每个点的追猎信息
|
||||
var betweenAttackLocs = {}; // 所有可能的夹击点
|
||||
var needCache = false;
|
||||
var canGoDeadZone = core.flags.canGoDeadZone;
|
||||
@ -1371,6 +1375,114 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
||||
}
|
||||
}
|
||||
|
||||
// 追猎
|
||||
if (enemy && core.hasSpecial(enemy.special, 41)) {
|
||||
for (var nx = x; nx >= 0; nx++) {
|
||||
if (nx == x) continue
|
||||
if (nx >= core.bigmap.width) break;
|
||||
if (core.noPass(nx, y)) break
|
||||
var currloc = nx + "," + y;
|
||||
if (nx != x) {
|
||||
var dir;
|
||||
if (nx < x) {
|
||||
//if (x - nx == 1) continue;
|
||||
dir = "left";
|
||||
} else {
|
||||
//if (nx - x == 1) continue;
|
||||
dir = "right";
|
||||
}
|
||||
// 检查下一个点是否存在事件(从而判定是否移动)
|
||||
var rnx = x + core.utils.scan[dir].x;
|
||||
var rny = y + core.utils.scan[dir].y;
|
||||
if (rnx >= 0 && rnx < width && rny >= 0 && rny < height &&
|
||||
(core.getBlock(rnx, rny, floorId) == null || core.getBlockCls(rnx, rny, floorId) == "items")) {
|
||||
chase[currloc] = (chase[currloc] || []).concat([
|
||||
[x, y, id, dir]
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var nx = x; nx < width; nx--) {
|
||||
if (nx == x) continue
|
||||
if (nx < 0) break;
|
||||
if (core.noPass(nx, y)) break
|
||||
var currloc = nx + "," + y;
|
||||
if (nx != x) {
|
||||
var dir;
|
||||
if (nx < x) {
|
||||
//if (x - nx == 1) continue;
|
||||
dir = "left";
|
||||
} else {
|
||||
//if (nx - x == 1) continue;
|
||||
dir = "right";
|
||||
}
|
||||
// 检查下一个点是否存在事件(从而判定是否移动)
|
||||
var rnx = x + core.utils.scan[dir].x;
|
||||
var rny = y + core.utils.scan[dir].y;
|
||||
if (rnx >= 0 && rnx < width && rny >= 0 && rny < height &&
|
||||
(core.getBlock(rnx, rny, floorId) == null || core.getBlockCls(rnx, rny, floorId) == "items")) {
|
||||
chase[currloc] = (chase[currloc] || []).concat([
|
||||
[x, y, id, dir]
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var ny = y; ny >= 0; ny++) {
|
||||
if (ny == y) continue
|
||||
if (ny >= core.bigmap.width) break;
|
||||
if (core.noPass(x, ny)) break
|
||||
//console.log(x, ny)
|
||||
var currloc = x + "," + ny;
|
||||
if (ny != y) {
|
||||
var dir;
|
||||
if (ny < y) {
|
||||
//if (y - ny == 1) continue;
|
||||
dir = "up";
|
||||
} else {
|
||||
//if (ny - y == 1) continue;
|
||||
dir = "down";
|
||||
}
|
||||
//检查下一个点是否存在事件(从而判定是否移动)
|
||||
var rnx = x + core.utils.scan[dir].x;
|
||||
var rny = y + core.utils.scan[dir].y;
|
||||
if (rnx >= 0 && rnx < width && rny >= 0 && rny < height &&
|
||||
(core.getBlock(rnx, rny, floorId) == null || core.getBlockCls(rnx, rny, floorId) == "items")) {
|
||||
chase[currloc] = (chase[currloc] || []).concat([
|
||||
[x, y, id, dir]
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
for (var ny = y; ny < height; ny--) {
|
||||
if (ny == y) continue
|
||||
if (ny < 0) break;
|
||||
if (core.noPass(x, ny)) break;
|
||||
//console.log(x, ny)
|
||||
var currloc = x + "," + ny;
|
||||
if (ny != y) {
|
||||
var dir;
|
||||
if (ny < y) {
|
||||
//if (y - ny == 1) continue;
|
||||
dir = "up";
|
||||
} else {
|
||||
//if (ny - y == 1) continue;
|
||||
dir = "down";
|
||||
}
|
||||
//检查下一个点是否存在事件(从而判定是否移动)
|
||||
var rnx = x + core.utils.scan[dir].x;
|
||||
var rny = y + core.utils.scan[dir].y;
|
||||
if (rnx >= 0 && rnx < width && rny >= 0 && rny < height &&
|
||||
(core.getBlock(rnx, rny, floorId) == null || core.getBlockCls(rnx, rny, floorId) == "items")) {
|
||||
chase[currloc] = (chase[currloc] || []).concat([
|
||||
[x, y, id, dir]
|
||||
]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
// 夹击;在这里提前计算所有可能的夹击点,具体计算逻辑在下面
|
||||
// 如果要防止夹击伤害,可以简单的将 flag:no_betweenAttack 设为true
|
||||
if (enemy && core.enemys.hasSpecial(enemy.special, 16) && !core.hasFlag('no_betweenAttack')) {
|
||||
@ -1456,7 +1568,7 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
||||
needCache: needCache,
|
||||
cache: {} // clear cache
|
||||
};
|
||||
},
|
||||
},
|
||||
"moveOneStep": function (callback) {
|
||||
// 勇士每走一步后执行的操作。callback为行走完毕后的回调
|
||||
// 这个函数执行在“刚走完”的时候,即还没有检查该点的事件和领域伤害等。
|
||||
|
||||
Loading…
Reference in New Issue
Block a user