feedback1f WT: 蒂比's 起飞 is 对地规避 — ground enemies no longer target or hit her while airborne
Official: ba.liftoff 起飞 "不阻挡地面敌人且不会被地面敌人攻击,可以阻挡飞行敌人"; PRTS 术语释义 起飞 "包含对地规避(无法被不同 阵营行动方式为地面的单位选中)… 起飞后单位的行动方式依旧是地面"; PRTS 异常效果 MOTION_TARGET_FREE; PRTS 行动方式 "起飞的干员仍然 是地面单位". Cause: 起飞 was `unit.ground = false` (an operator on a high tile). Melee enemies were released, but every ranged ground enemy kept shooting her and the AoE / skills of ground enemies hit her (控潮术师 6 hits in one S2 window). Now 起飞 is the skill buff flag `liftoff`: - targeting.js evadesGround: no ground enemy (not Unit.isFlying) selects her (canTargetAlly; the content picks that bypass it: 周围四格 additions, chain / bounce jumps, the 自行炮 shells); flyers, 近地悬浮 and 浮空 enemies still do. - damage.js / Battle.applyStatus: a ground enemy's damage, element fill and statuses never land on her (area damage, shots under way); sourceless damage and `ignoreSelect` zones (【污染秽蚀】 "可对空,无视无法选择") still do. - Battle._blockerFor: she blocks no ground enemy; flyers at the air radius as before. - She stays a ground unit on her low tile: 污染秽蚀 at the low rate, 隐德来希 S2 can put a 血镰 on her (可对空).
This commit is contained in:
1 parent
a7ec6a1438
commit
80f5bf1930
12 files changed
+363
-46
No files matched your search
@@ -35,17 +35,20 @@ function onDefaultSkill(chess) {
|
||||
return !d || !chess?.skill || d.skillId === chess.skill.skillId;
|
||||
}
|
||||
|
||||
/** 蒂比 take-off (起飞): airborne — blocks flyers only (flags.blockFly of the skill), releases ground enemies. */
|
||||
/**
|
||||
* 起飞 of 蒂比's skills (gamedata_const ba.liftoff "不阻挡地面敌人且不会被地面敌人攻击,可以阻挡飞行敌人"): the skill's flags
|
||||
* `liftoff` (no ground enemy blocked — Battle._blockerFor; 对地规避 — targeting.js evadesGround: no ground enemy selects or
|
||||
* damages her) and `blockFly` (blocks flyers at the air radius). She stays a ground unit on her tile (PRTS 行动方式 "起飞的
|
||||
* 干员仍然是地面单位": `unit.ground` unchanged — 隐德来希's 血镰, 地面干员 bonds / items still count her).
|
||||
*/
|
||||
const LIFTOFF_FLAGS = Object.freeze({ blockFly: true, liftoff: true });
|
||||
/** 蒂比 take-off: the ground enemies she blocked walk on. */
|
||||
function tippiTakeOff({ battle, unit }) {
|
||||
unit.mem.tippiGround = unit.ground;
|
||||
unit.ground = false;
|
||||
battle.releaseBlocked(unit);
|
||||
battle.fx('takeoff', { x: unit.x, y: unit.y, id: unit.id });
|
||||
}
|
||||
/** 蒂比 landing when the airborne skill ends. */
|
||||
/** 蒂比 landing when the airborne skill ends: the flyers she held are released. */
|
||||
function tippiLand({ battle, unit }) {
|
||||
if (unit.mem.tippiGround != null) unit.ground = unit.mem.tippiGround;
|
||||
unit.mem.tippiGround = null;
|
||||
battle.releaseBlocked(unit);
|
||||
}
|
||||
|
||||
@@ -594,11 +597,12 @@ export default {
|
||||
// ---------------------------------------------------------------------------------------------------------------
|
||||
// 2_13 蒂比 紧急赶场通知 (AUTO): "受到攻击后触发" — any incoming enemy attack sets it off (the kit is the only
|
||||
// trigger: the engine rule is disabled so non-attack damage never fires it) and a physical/arts one is dodged; takes
|
||||
// off for the duration: skill range, ATK +atk, attacks become 3 shots, blocks flying (not ground) enemies. Trait
|
||||
// "起飞后能够阻挡2个飞行敌人": flying enemies are blocked only while airborne. 片场工作指南: if not attacked for
|
||||
// stack_time s, the next physical/arts attack is dodged (prob); every attack restarts that timer.
|
||||
// S1 专业喷绘技巧 (alt, DEFAULT trigger from data): takes off at once for its duration — skill range, ATK +atk, blocks
|
||||
// flyers only; no triple shot, and incoming attacks never set it off.
|
||||
// off for the duration (起飞, LIFTOFF_FLAGS: she blocks no ground enemy and none attacks or damages her): skill range,
|
||||
// ATK +atk, attacks become 3 shots, blocks flying (not ground) enemies. Trait "起飞后能够阻挡2个飞行敌人": flying enemies
|
||||
// are blocked only while airborne. 片场工作指南: if not attacked for stack_time s, the next physical/arts attack is
|
||||
// dodged (prob); every attack restarts that timer.
|
||||
// S1 专业喷绘技巧 (alt, DEFAULT trigger from data): takes off at once for its duration (起飞 as above) — skill range,
|
||||
// ATK +atk, blocks flyers only; no triple shot, and incoming attacks never set it off.
|
||||
chess_char_2_13_a: (bb, chess, def) => {
|
||||
const t = talentBb(chess, 0);
|
||||
const s2 = onDefaultSkill(chess);
|
||||
@@ -606,7 +610,7 @@ export default {
|
||||
trait: { blockFly: false },
|
||||
skill: {
|
||||
kind: 'duration', trigger: { rule: 'CUSTOM_RANGE', grid: [] }, // never by the engine: the hit handler below
|
||||
mods: { atkPct: num(bb.atk) }, flags: { blockFly: true },
|
||||
mods: { atkPct: num(bb.atk) }, flags: LIFTOFF_FLAGS,
|
||||
targeting: { rangeGrid: def?.skill?.rangeGrid ?? null },
|
||||
attack: { hits: 3 },
|
||||
onStart: tippiTakeOff,
|
||||
@@ -614,7 +618,7 @@ export default {
|
||||
},
|
||||
skills: {
|
||||
skchr_tippi_1: {
|
||||
kind: 'duration', mods: { atkPct: num(bb.atk) }, flags: { blockFly: true },
|
||||
kind: 'duration', mods: { atkPct: num(bb.atk) }, flags: LIFTOFF_FLAGS,
|
||||
targeting: { rangeGrid: def?.skill?.rangeGrid ?? null },
|
||||
onStart: tippiTakeOff,
|
||||
onEnd: tippiLand,
|
||||
|
||||
@@ -893,8 +893,8 @@ const KITS = {
|
||||
for (const a of unit.mem.sickles || []) {
|
||||
if (!a.alive || !a.deployed) continue;
|
||||
// PRTS 备注 "被添加血镰的单位处于起飞时,血镰可对空": a sickle on the ground spares air units (FLY, 近地悬浮, 浮空);
|
||||
// 起飞 = an airborne skywalker (蒂比's skill: off the ground, flag blockFly)
|
||||
const air = !a.ground && !!a.s.flags.blockFly;
|
||||
// 起飞 = an airborne skywalker (蒂比's skills: flag `liftoff`; still a 地面单位, so she can carry one)
|
||||
const air = !!a.s.flags.liftoff;
|
||||
for (const e of battle.enemiesInRadius(a.x, a.y, RING1)) {
|
||||
if (e.isFlying && !air) continue;
|
||||
battle.dealDamage(unit, e, { amount: unit.s.atk * num(bb.atk_scale), type: 'phys', isSkill: true, tags: ['skill', 'bloodSickle'] });
|
||||
|
||||
Reference in new issue
Block a user