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"],
|
[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],
|
[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],
|
[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) {
|
"getEnemyInfo": function (enemy, hero, x, y, floorId) {
|
||||||
// 获得某个怪物变化后的数据;该函数将被伤害计算和怪物手册使用
|
// 获得某个怪物变化后的数据;该函数将被伤害计算和怪物手册使用
|
||||||
// 例如:坚固、模仿、仿攻等等
|
// 例如:坚固、模仿、仿攻等等
|
||||||
@ -1258,7 +1261,8 @@ var functions_d6ad677b_427a_4623_b50f_a445a3b0ef8a =
|
|||||||
var damage = {}, // 每个点的伤害值
|
var damage = {}, // 每个点的伤害值
|
||||||
type = {}, // 每个点的伤害类型
|
type = {}, // 每个点的伤害类型
|
||||||
repulse = {}, // 每个点的阻击怪信息
|
repulse = {}, // 每个点的阻击怪信息
|
||||||
ambush = {}; // 每个点的捕捉信息
|
ambush = {}, // 每个点的捕捉信息
|
||||||
|
chase = {}; // 每个点的追猎信息
|
||||||
var betweenAttackLocs = {}; // 所有可能的夹击点
|
var betweenAttackLocs = {}; // 所有可能的夹击点
|
||||||
var needCache = false;
|
var needCache = false;
|
||||||
var canGoDeadZone = core.flags.canGoDeadZone;
|
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
|
// 如果要防止夹击伤害,可以简单的将 flag:no_betweenAttack 设为true
|
||||||
if (enemy && core.enemys.hasSpecial(enemy.special, 16) && !core.hasFlag('no_betweenAttack')) {
|
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,
|
needCache: needCache,
|
||||||
cache: {} // clear cache
|
cache: {} // clear cache
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
"moveOneStep": function (callback) {
|
"moveOneStep": function (callback) {
|
||||||
// 勇士每走一步后执行的操作。callback为行走完毕后的回调
|
// 勇士每走一步后执行的操作。callback为行走完毕后的回调
|
||||||
// 这个函数执行在“刚走完”的时候,即还没有检查该点的事件和领域伤害等。
|
// 这个函数执行在“刚走完”的时候,即还没有检查该点的事件和领域伤害等。
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user