feedback1 integrate: WT 蒂比's 起飞 is 对地规避 - ground enemies no longer select or hit her while airborne
Conflicts resolved keeping both sides: - buffs.js FLAG_KEYS: liftoff beside the integration's selfBound. - Battle.js: targeting import union (extendedGrid + evadesGround); _blockerFor keeps the fenced-tile gate (WU) and adds liftoff; applyStatus keeps the 无敌 + 无法选中 refusal and adds the 对地规避 refusal. - enemies.js: header DOT entry from WT with the integration's INVISIBLE entry; import union; enemy_1273_stmgun_2 keeps the integration's rewrite (it filters through canTargetAlly, which now includes liftoff). - tier2.js 蒂比 comment: the integration's 受到伤害前触发 text plus the 起飞 line. - tier5.js 隐德来希 血镰: liftoff flag with the integration's foesInRadius. - SIM.md: blocking keeps the fenced-tile passage and adds air-only blocking while airborne; the 污染秽蚀 / 燃烧区域 sentence goes before the chimera aura; statuses keep both refusals.
This commit is contained in:
commit
987126cc1a
13 files changed
+709
-70
No files matched your search
@@ -35,17 +35,21 @@ 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
|
||||
* her, while what selects nobody still lands — 无视无法选择 abilities, direct picks, flying units' blasts, 无来源 damage, the
|
||||
* ticks of a debuff already on 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);
|
||||
}
|
||||
|
||||
@@ -601,6 +605,8 @@ export default {
|
||||
// every damage instance restarts that timer (dodged or not; a 流失 does not — PRTS 备注).
|
||||
// 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.
|
||||
// Both take off as 起飞 (LIFTOFF_FLAGS): she blocks no ground enemy and none selects her (对地规避), so a ground enemy's
|
||||
// selected damage refused on the way never reaches her `hit` and neither sets off S2 nor restarts 片场工作指南.
|
||||
chess_char_2_13_a: (bb, chess, def) => {
|
||||
const t = talentBb(chess, 0);
|
||||
const s2 = onDefaultSkill(chess);
|
||||
@@ -608,7 +614,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,
|
||||
@@ -616,7 +622,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,
|
||||
|
||||
@@ -915,8 +915,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.foesInRadius(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