feedback5: trigger fixes from the wave-2 kit reports — 「攻击范围向前延伸」 and 「攻击范围朝…扩大」 are attack-range changes (帕拉斯 S2 DEFAULT → ACTIVE_RANGE on her range + 1, 司霆惊蛰 S1 SEARCH → ACTIVE_RANGE on the 3-19: the owner's larger-range rule); UNIT_TRIGGER_CORRECTIONS for a live-client change the text misses — 菲亚梅塔 S1 is DEFAULT since the 2026-08-01 client (PRTS 备注: no +1 range, no flyers); data regenerated offline (only these three skills' triggers in backups.json, chess.json unchanged); golden: only diy moved (diy-060/061/068/069/075/076: those three operators)

This commit is contained in:
sganggs committed 2026-10-06 01:53:09 +08:00
1 parent faa40ca68f
commit 78251f499c
6 files changed
+120 -108

No files matched your search

+1 -1
View File
@@ -1 +1 @@
{"units":{"char_600_cpione":{"charId":"char_600_cpione","name":"预备干员-先锋","appellation":"Reserve Operator - Vanguard","rarity":4,"profession":"PIONEER","subProfessionId":"pioneer","subProfessionName":"尖兵","position":"MELEE","nationId":null,"isNotObtainable":true,"assets":{"avatar":"char_600_cpione","avatarGolden":"char_600_cpione","portrait":"char_600_cpione_1","portraitGolden":"char_600_cpione_1","spine":"char_600_cpione","subProfIcon":"sub_pioneer_icon"},"moduleNames":{},"standsIn":["chess_char_5_01_a"],"forms":{"2/1/4/0":{"status":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0},"stats":{"maxHp":1225,"atk":320,"def":272,"res":0,"cost":11,"blockCnt":2,"bat":1.05,"aspd":100,"respawnTime":70,"spRecovery":1,"hpRecoveryPerSec":0,"moveSpeed":1,"tauntLevel":0,"massLevel":0,"deployLimit":1,"deckStack":0},"immunities":{"stun":false,"silence":false,"sleep":false,"frozen":false,"levitate":false},"rangeId":"1-1","rangeGrid":[[0,0],[0,1]],"dmgType":"phys","attackKind":"melee","projectile":"none","canHitFly":false,"targetPriority":null,"trait":{"desc":"能够阻挡两个敌人","descRaw":"能够阻挡两个敌人","bb":{},"bbStr":{},"rangeGrid":null},"skills":[{"skillId":"skcom_charge_cost[1]","iconId":"skcom_charge_cost[1]","name":"冲锋号令·α型","level":4,"desc":"立即获得6点部署费用","descRaw":"立即获得<@ba.vup>6</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":27,"initSp":3,"maxChargeTime":1,"increment":1,"bb":{"cost":6},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":0,"overrideTokenKey":null},{"skillId":"skcom_charge_cost[2]","iconId":"skcom_charge_cost[2]","name":"冲锋号令·β型","level":4,"desc":"立即获得9点部署费用","descRaw":"立即获得<@ba.vup>9</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":36,"initSp":9,"maxChargeTime":1,"increment":1,"bb":{"cost":9},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":1,"overrideTokenKey":null},{"skillId":"skcom_charge_cost[3]","iconId":"skcom_charge_cost[3]","name":"冲锋号令·γ型","level":4,"desc":"立即获得12点部署费用","descRaw":"立即获得<@ba.vup>12</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":41,"initSp":12,"maxChargeTime":1,"increment":1,"bb":{"cost":12},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":2,"overrideTokenKey":null}],"talents":[{"index":0,"name":"攻击提升","desc":"攻击力+8%","descRaw":"攻击力+8%","bb":{"atk":0.08},"bbStr":{},"rangeGrid":null,"tokenKey":null,"hidden":false,"fromModule":false}],"displayTokens":[],"tokens":[]},"2/60/7/1":{"status":{"phase":2,"level":60,"skillLevel":7,"equipLevel":1},"stats":{"maxHp":1674,"atk":380,"def":322,"res":0,"cost":11,"blockCnt":2,"bat":1.05,"aspd":100,"respawnTime":70,"spRecovery":1,"hpRecoveryPerSec":0,"moveSpeed":1,"tauntLevel":0,"massLevel":0,"deployLimit":1,"deckStack":0},"immunities":{"stun":false,"silence":false,"sleep":false,"frozen":false,"levitate":false},"rangeId":"1-1","rangeGrid":[[0,0],[0,1]],"dmgType":"phys","attackKind":"melee","projectile":"none","canHitFly":false,"targetPriority":null,"trait":{"desc":"能够阻挡两个敌人","descRaw":"能够阻挡两个敌人","bb":{},"bbStr":{},"rangeGrid":null},"skills":[{"skillId":"skcom_charge_cost[1]","iconId":"skcom_charge_cost[1]","name":"冲锋号令·α型","level":7,"desc":"立即获得6点部署费用","descRaw":"立即获得<@ba.vup>6</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":25,"initSp":6,"maxChargeTime":1,"increment":1,"bb":{"cost":6},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":0,"overrideTokenKey":null},{"skillId":"skcom_charge_cost[2]","iconId":"skcom_charge_cost[2]","name":"冲锋号令·β型","level":7,"desc":"立即获得9点部署费用","descRaw":"立即获得<@ba.vup>9</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":33,"initSp":10,"maxChargeTime":1,"increment":1,"bb":{"cost":9},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":1,"overrideTokenKey":null},{"skillId":"skcom_charge_cost[3]","iconId":"skcom_charge_cost[3]","name":"冲锋号令·γ型","level":7,"desc":"立即获得12点部署费用","descRaw":"立即获得<@ba.vup>12</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WILine truncated
{"units":{"char_600_cpione":{"charId":"char_600_cpione","name":"预备干员-先锋","appellation":"Reserve Operator - Vanguard","rarity":4,"profession":"PIONEER","subProfessionId":"pioneer","subProfessionName":"尖兵","position":"MELEE","nationId":null,"isNotObtainable":true,"assets":{"avatar":"char_600_cpione","avatarGolden":"char_600_cpione","portrait":"char_600_cpione_1","portraitGolden":"char_600_cpione_1","spine":"char_600_cpione","subProfIcon":"sub_pioneer_icon"},"moduleNames":{},"standsIn":["chess_char_5_01_a"],"forms":{"2/1/4/0":{"status":{"phase":2,"level":1,"skillLevel":4,"equipLevel":0},"stats":{"maxHp":1225,"atk":320,"def":272,"res":0,"cost":11,"blockCnt":2,"bat":1.05,"aspd":100,"respawnTime":70,"spRecovery":1,"hpRecoveryPerSec":0,"moveSpeed":1,"tauntLevel":0,"massLevel":0,"deployLimit":1,"deckStack":0},"immunities":{"stun":false,"silence":false,"sleep":false,"frozen":false,"levitate":false},"rangeId":"1-1","rangeGrid":[[0,0],[0,1]],"dmgType":"phys","attackKind":"melee","projectile":"none","canHitFly":false,"targetPriority":null,"trait":{"desc":"能够阻挡两个敌人","descRaw":"能够阻挡两个敌人","bb":{},"bbStr":{},"rangeGrid":null},"skills":[{"skillId":"skcom_charge_cost[1]","iconId":"skcom_charge_cost[1]","name":"冲锋号令·α型","level":4,"desc":"立即获得6点部署费用","descRaw":"立即获得<@ba.vup>6</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":27,"initSp":3,"maxChargeTime":1,"increment":1,"bb":{"cost":6},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":0,"overrideTokenKey":null},{"skillId":"skcom_charge_cost[2]","iconId":"skcom_charge_cost[2]","name":"冲锋号令·β型","level":4,"desc":"立即获得9点部署费用","descRaw":"立即获得<@ba.vup>9</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":36,"initSp":9,"maxChargeTime":1,"increment":1,"bb":{"cost":9},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":1,"overrideTokenKey":null},{"skillId":"skcom_charge_cost[3]","iconId":"skcom_charge_cost[3]","name":"冲锋号令·γ型","level":4,"desc":"立即获得12点部署费用","descRaw":"立即获得<@ba.vup>12</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":41,"initSp":12,"maxChargeTime":1,"increment":1,"bb":{"cost":12},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":2,"overrideTokenKey":null}],"talents":[{"index":0,"name":"攻击提升","desc":"攻击力+8%","descRaw":"攻击力+8%","bb":{"atk":0.08},"bbStr":{},"rangeGrid":null,"tokenKey":null,"hidden":false,"fromModule":false}],"displayTokens":[],"tokens":[]},"2/60/7/1":{"status":{"phase":2,"level":60,"skillLevel":7,"equipLevel":1},"stats":{"maxHp":1674,"atk":380,"def":322,"res":0,"cost":11,"blockCnt":2,"bat":1.05,"aspd":100,"respawnTime":70,"spRecovery":1,"hpRecoveryPerSec":0,"moveSpeed":1,"tauntLevel":0,"massLevel":0,"deployLimit":1,"deckStack":0},"immunities":{"stun":false,"silence":false,"sleep":false,"frozen":false,"levitate":false},"rangeId":"1-1","rangeGrid":[[0,0],[0,1]],"dmgType":"phys","attackKind":"melee","projectile":"none","canHitFly":false,"targetPriority":null,"trait":{"desc":"能够阻挡两个敌人","descRaw":"能够阻挡两个敌人","bb":{},"bbStr":{},"rangeGrid":null},"skills":[{"skillId":"skcom_charge_cost[1]","iconId":"skcom_charge_cost[1]","name":"冲锋号令·α型","level":7,"desc":"立即获得6点部署费用","descRaw":"立即获得<@ba.vup>6</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":25,"initSp":6,"maxChargeTime":1,"increment":1,"bb":{"cost":6},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":0,"overrideTokenKey":null},{"skillId":"skcom_charge_cost[2]","iconId":"skcom_charge_cost[2]","name":"冲锋号令·β型","level":7,"desc":"立即获得9点部署费用","descRaw":"立即获得<@ba.vup>9</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WITH_TIME","spCost":33,"initSp":10,"maxChargeTime":1,"increment":1,"bb":{"cost":9},"bbStr":{},"rangeId":null,"rangeGrid":null,"prefabId":"skcom_charge_cost","trigger":{"rule":"DEFAULT","rawRule":"DEFAULT","customRangeGrid":null},"index":1,"overrideTokenKey":null},{"skillId":"skcom_charge_cost[3]","iconId":"skcom_charge_cost[3]","name":"冲锋号令·γ型","level":7,"desc":"立即获得12点部署费用","descRaw":"立即获得<@ba.vup>12</>点部署费用","skillType":"AUTO","durationType":"NONE","duration":0,"spType":"INCREASE_WILine truncated
+3 -3
View File
@@ -196,7 +196,7 @@ test('T2 追责: every cast strikes each low tile of her range ring by ring from
const { h, u, log } = field({ tier: 5, skill });
const e = h.spawn(pos[0] === 11 ? 'enemy_fly' : 'enemy_dummy', { pos });
u.skill.gainSp(999);
if (skill === 0) h.spawn('enemy_dummy', { pos: [11, 5] }); // S1 (SEARCH) needs a ground enemy on her 1-2
if (skill === 0) h.spawn('enemy_dummy', { pos: [11, 5] }); // S1 (ACTIVE_RANGE on the 3-19) needs a ground enemy in range
assert.ok(h.runUntil(() => u.skill.active, 2), `S${skill + 1}: cast`);
const t0 = h.b.time;
h.run(1.2);
@@ -223,11 +223,11 @@ test('T2 追责: every cast strikes each low tile of her range ring by ring from
done(h);
});
test('S1 浩气长存 (MANUAL, 3 charges, data SEARCH): a 0.5 s skill on the 3-19; 0.3 s in, a 3-2 to her left, front and right each hits every ground enemy on it for 260 % / 300 % ATK × 1.07 physical (one on her tile three times, none diagonal, no flyer)', () => {
test('S1 浩气长存 (MANUAL, 3 charges, data ACTIVE_RANGE — the SEARCH row on her larger 3-19): a 0.5 s skill on the 3-19; 0.3 s in, a 3-2 to her left, front and right each hits every ground enemy on it for 260 % / 300 % ATK × 1.07 physical (one on her tile three times, none diagonal, no flyer)', () => {
for (const [tier, elite] of [[5, false], [6, true]]) {
const sk = skillOf(tier, elite, S1);
const { h, u, log } = field({ tier, elite, skill: 0, silence: true });
assert.deepEqual([u.skill.rule, u.skill.maxCharges, sk.bb['attack@atk_scale_s1'], sk.rangeId, u.skill.spCost, sk.initSp], ['SEARCH', 3, elite ? 3 : 2.6, '3-19', elite ? 13 : 14, 17], `T${tier}`);
assert.deepEqual([u.skill.rule, u.skill.maxCharges, sk.bb['attack@atk_scale_s1'], sk.rangeId, u.skill.spCost, sk.initSp], ['ACTIVE_RANGE', 3, elite ? 3 : 2.6, '3-19', elite ? 13 : 14, 17], `T${tier}`);
const own = h.spawn('enemy_dummy', { pos: [10, 5] }), front = h.spawn('enemy_dummy', { pos: [10, 8] });
const left = h.spawn('enemy_dummy', { pos: [12, 5] }), right = h.spawn('enemy_dummy', { pos: [9, 5] });
const diag = h.spawn('enemy_dummy', { pos: [11, 6] }), fly = h.spawn('enemy_fly', { pos: [11, 5] });
+4 -6
View File
@@ -210,19 +210,17 @@ test('S1 胜利的连击 (AUTO, attack SP 3, data DEFAULT): the next attack stri
}
});
test('S2 信念的长鞭 (MANUAL, data DEFAULT): 20 / 22 s, range 2-2 + 1 tile forward, ATK +35 / 50 %, each attack 60 / 70 % to stun 0.2 s; all back after', () => {
test('S2 信念的长鞭 (MANUAL, data ACTIVE_RANGE on her range + 1 forward): 20 / 22 s, range 2-2 + 1 tile forward, ATK +35 / 50 %, each attack 60 / 70 % to stun 0.2 s; all back after', () => {
for (const [tier, elite, mod] of [[5, false, null], [6, true, INSY]]) {
const sk = skillOf(tier, elite, S2);
const { h, u } = field({ tier, elite, mod, skill: 1, seed: 9 });
// the data's DEFAULT: tools/build-data.mjs ATTACK_RANGE_CHANGE misses "攻击范围向前延伸一格" (reported, not worked around)
// 「攻击范围向前延伸一格」 is an attack-range change (tools/build-data.mjs ATTACK_RANGE_CHANGE): the owner's ACTIVE_RANGE rule
assert.deepEqual([u.skill.rule, sk.trigger.rawRule, sk.duration, sk.bb.atk, sk.bb.ability_range_forward_extend, sk.bb['attack@buff_prob'], sk.bb['attack@stun']],
['DEFAULT', 'DEFAULT', elite ? 22 : 20, elite ? 0.5 : 0.35, 1, elite ? 0.7 : 0.6, 0.2], `T${tier}`);
['ACTIVE_RANGE', 'DEFAULT', elite ? 22 : 20, elite ? 0.5 : 0.35, 1, elite ? 0.7 : 0.6, 0.2], `T${tier}`);
const far = h.spawn('enemy_dummy', { pos: [10, 8] }); // 3 tiles ahead: only in the extended range
u.skill.gainSp(999);
h.run(2);
assert.equal(u.skill.activations, 0, `T${tier}: nothing in her own 2-2: no cast (DEFAULT)`);
assert.ok(h.runUntil(() => u.skill.active, 3), `T${tier}: cast for an enemy only in the extended range (ACTIVE_RANGE)`);
const near = h.spawn('enemy_dummy', { pos: [10, 7] });
assert.ok(h.runUntil(() => u.skill.active, 3), `T${tier}: cast on her attack`);
approx(u.skill.timeLeft, sk.duration, `T${tier}: ${sk.duration} s`, 0.01);
assert.deepEqual(u.liveRangeGrid, [[0, 0], [0, 1], [0, 2], [0, 3]], `T${tier}: one tile more forward`);
const v = talentOf(u, 0)['peak_performance.atk'];
+12 -10
View File
@@ -77,7 +77,7 @@ test('菲亚梅塔 in every 自选 form: her kit (all three skills authored), th
done(h);
}
}
assert.deepEqual(formOf(6, true).skills.map((s) => [s.skillType, s.trigger.rule]), [['MANUAL', 'ACTIVE_RANGE'], ['MANUAL', 'DEFAULT'], ['MANUAL', 'DEFAULT']]);
assert.deepEqual(formOf(6, true).skills.map((s) => [s.skillType, s.trigger.rule]), [['MANUAL', 'DEFAULT'], ['MANUAL', 'DEFAULT'], ['MANUAL', 'DEFAULT']]);
assert.deepEqual([FORMS['2/1/4/0'].stats.maxHp, FORMS['2/1/4/0'].stats.atk, FORMS['2/60/7/1'].stats.maxHp, FORMS['2/60/7/1'].stats.atk], [1540, 671, 1796, 797]);
assert.deepEqual([Y, X, ISW].flatMap((id) => [modOf(5, id).attr, modOf(6, id).attr]),
[{ atk: 48, def: 26 }, { atk: 70, def: 43 }, { atk: 60, def: 17 }, { atk: 85, def: 32 }, { maxHp: 85, atk: 65 }, { maxHp: 115, atk: 90 }]);
@@ -164,28 +164,30 @@ test('T2 宣告终局: ASPD +27 outside a running skill, none while S1 / S3 run
}
});
test('S1 “你须直面” (MANUAL, attack SP 17 / 14 from 5, 30 s, data ACTIVE_RANGE on 3-10 + 1): ATK +45 % / +60 %; since the 2026-08 client her attacks pick ground enemies only (the splash still hits air) and her range stays 3-10', () => {
test('S1 “你须直面” (MANUAL, attack SP 17 / 14 from 5, 30 s, data DEFAULT — the 2026-08 client grows no range: tools/build-data.mjs UNIT_TRIGGER_CORRECTIONS): ATK +45 % / +60 %; since the 2026-08 client her attacks pick ground enemies only (the splash still hits air) and her range stays 3-10', () => {
for (const [tier, elite] of [[5, false], [6, true]]) {
const sk = skillOf(tier, elite, S1);
assert.deepEqual([sk.spType, sk.spCost, sk.initSp, sk.duration, sk.bb.atk, sk.bb.ability_range_forward_extend], ['INCREASE_WHEN_ATTACK', elite ? 14 : 17, 5, 30, elite ? 0.6 : 0.45, 1], `T${tier}`);
assert.equal(sk.trigger.customRangeGrid.length, formOf(tier, elite).rangeGrid.length + 3, `T${tier}: the data's trigger grid is the +1 range`);
assert.equal(sk.trigger.customRangeGrid, null, `T${tier}: no +1 trigger grid`);
const { h, u } = field({ tier, elite, skill: 0, pin: true });
assert.deepEqual([u.skill.kind, u.skill.rule, u.skill.spType], ['duration', 'ACTIVE_RANGE', 'attack'], `T${tier}`);
const far = h.spawn('enemy_dummy', { pos: [10, 9] }); // 5 tiles ahead: on the trigger grid, outside 3-10
assert.deepEqual([u.skill.kind, u.skill.rule, u.skill.spType], ['duration', 'DEFAULT', 'attack'], `T${tier}`);
const far = h.spawn('enemy_dummy', { pos: [10, 9] }); // 5 tiles ahead: outside 3-10
u.skill.gainSp(999);
assert.ok(h.runUntil(() => u.skill.active, 2), `T${tier}: an enemy on the +1 column casts it (the data rule)`);
approx(u.skill.timeLeft, 30, `T${tier}: 30 s`, 0.01);
h.run(2);
assert.equal(u.skill.activations, 0, `T${tier}: an enemy out of her reach casts nothing (DEFAULT)`);
const g = h.spawn('enemy_dummy', { pos: [11, 7] });
assert.ok(h.runUntil(() => u.skill.active, 3), `T${tier}: cast as she is about to attack a ground enemy in range`);
approx(u.skill.timeLeft, 30, `T${tier}: 30 s`, 0.05);
assert.deepEqual(u.findBuff(`skill:${u.id}`)?.mods, { atkPct: sk.bb.atk }, `T${tier}: ATK +${sk.bb.atk * 100} %`);
assert.deepEqual(u.liveRangeGrid, formOf(tier, elite).rangeGrid, `T${tier}: her range stays 3-10`);
h.run(6);
assert.equal(on(h, far).length, 0, `T${tier}: 5 tiles ahead stays out of reach`);
const fly = h.spawn('enemy_fly', { pos: [10, 7] });
h.run(6);
assert.equal(on(h, fly).length, 0, `T${tier}: no air target while it runs`);
const g = h.spawn('enemy_dummy', { pos: [11, 7] });
assert.equal(on(h, fly).filter((c) => !c.dmg.isSplash).length, 0, `T${tier}: no air target while it runs`);
assert.ok(h.runUntil(() => on(h, g).length > 0, 4), `T${tier}: a ground target`);
h.run(0.3);
const id = on(h, g)[0].dmg.attackId;
const id = on(h, g).at(-1).dmg.attackId; // a shell fired with the flyer on the field
assert.ok(on(h, fly).some((c) => c.dmg.attackId === id && c.dmg.isSplash), `T${tier}: her shell still splashes the flyer 1.0 away`);
for (const c of from(h, u).filter((c) => c.dmg.attackId === id)) approx(c.amount, u.base.atk * (1 + sk.bb.atk + u.findBuff('talent:phenxi:peak').mods.atkPct), `T${tier}: ATK`);
u.skill.end('test');
+87 -87
View File
@@ -2442,28 +2442,28 @@
"total": 60,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 47,
"rngDraws": 103,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":1,"total":60,"perfect":false,"leaks":59,"leaksUncounted":0,"coins":0,"dmg":147642,"bossDmg":0,"heal":24778,"deaths":14,"layerGains":{}}},
"players": {"p1":{"killed":1,"total":60,"perfect":false,"leaks":59,"leaksUncounted":0,"coins":0,"dmg":169055,"bossDmg":0,"heal":28538,"deaths":14,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_5_diy1_a",0,null,1413,1,82,0,1598,2946,560,17,4],
["p1",2,"op","chess_char_5_diy2_a",1,null,1413,1,83,0,3238,4586,1640,46,1],
["p1",3,"op","chess_char_5_diy1_a",2,null,1413,1,84,0,23087,6001,4974,68,1],
["p1",1,"op","chess_char_5_diy1_a",0,null,1413,1,82,0,2615,4346,3080,45,10],
["p1",2,"op","chess_char_5_diy2_a",1,null,0,0,55,0,5335,6946,2760,80,2],
["p1",3,"op","chess_char_5_diy1_a",2,null,1413,1,83,0,22232,6001,5094,68,1],
["p1",4,"op","chess_char_5_diy2_b",0,"none",0,0,8,0,28783,9750,6853,154,38],
["p1",5,"op","chess_char_5_diy1_b",1,"none",315.92,1,80,0,8231,8698,4320,79,2],
["p1",6,"op","chess_char_5_diy2_b",2,"none",1778,1,81,1,50326,8307,3911,78,3],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_002_pallas",0,0,76,0,7779,9104,2520,54,12],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_002_pallas",0,0,76,0,8044,9104,2520,54,12],
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_002_pallas",1928,1,1,0,0,0,0,0,0],
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_002_pallas",1928,1,3,0,0,0,0,0,0],
["p1",10,"op","chess_char_5_diy2_b",0,"uniequip_003_pallas",1778,1,5,0,0,0,0,0,0],
["p1",11,"op","chess_char_5_diy1_b",1,"uniequip_003_pallas",1778,1,7,0,0,0,0,0,0],
["p1",12,"op","chess_char_5_diy2_b",2,"uniequip_003_pallas",1778,1,9,0,24600,0,0,54,2]
["p1",11,"op","chess_char_5_diy1_b",1,"uniequip_003_pallas",1778,1,7,0,17961,0,0,41,3],
["p1",12,"op","chess_char_5_diy2_b",2,"uniequip_003_pallas",1778,1,9,0,25530,0,0,55,2]
],
"enemies": {"enemy_1045_hammer_2":[12,0,12,14642,20751],"enemy_1061_zomshd":[48,1,44,34750,211491]},
"hooks": [1,84,6900,740,740,3025,3025,29148,15,71,63,62,0,12991,30,39,60,56,1,15,0,0,0],
"events": {"atk":856,"deploy":24,"die":15,"dmg":3025,"heal":633,"leak":56,"skill":125,"spawn":72,"status":71},
"enemies": {"enemy_1045_hammer_2":[12,0,12,12963,21860],"enemy_1061_zomshd":[48,1,44,40188,237116]},
"hooks": [1,83,6900,863,863,3289,3289,33321,15,71,73,72,0,15851,67,37,60,56,1,15,0,0,0],
"events": {"atk":981,"deploy":23,"die":15,"dmg":3289,"heal":728,"leak":56,"skill":145,"spawn":72,"status":145},
"fx": {},
"snaps": "e3dab2f8 66130113 3d00fb84 3aefe588 52a1f3e5 9bbbc6b3 7c0369d3 8cac2b99 53bdf7f0 59a2e5e2 c42047f6 95b0c4b6 626e5cce 8ab58fcc 50fb3fdb f9ed40bc 23cef3c9 f3083896 cb872695 db24bbbe 79925377 c41277c3 9c2c5eac"
"snaps": "e3dab2f8 a8c39914 39b6bf69 0dbf0369 e1b8f315 8ea8bb4c 8256ffb3 6933f61a f1adf509 c90eb89a 8e05873b 8fe9d3de acfd9afa 4e5195c1 66014400 3d08642f 7f0dfed2 4aa002f8 7198b3e3 3a20e441 6b35057b 6017deef de2487e7"
},
"diy-061": {
"about": "6_diy1_a=pallas/S1 6_diy2_a=pallas/S2 6_diy1_a=pallas/S3 6_diy2_b=pallas/S1 6_diy1_b=pallas/S2 6_diy2_b=pallas/S3 6_diy1_b=pallas/S1/002_pallas 6_diy2_b=pallas/S2/002_pallas 6_diy1_b=pallas/S3/002_pallas 6_diy2_b=pallas/S1/003_pallas 6_diy1_b=pallas/S2/003_pallas 6_diy2_b=pallas/S3/003_pallas",
@@ -2481,28 +2481,28 @@
"total": 105,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 32,
"rngDraws": 36,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":1,"total":105,"perfect":false,"leaks":104,"leaksUncounted":0,"coins":0,"dmg":150810,"bossDmg":0,"heal":12615,"deaths":22,"layerGains":{}}},
"players": {"p1":{"killed":1,"total":105,"perfect":false,"leaks":104,"leaksUncounted":0,"coins":0,"dmg":154969,"bossDmg":0,"heal":12715,"deaths":22,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_6_diy1_a",0,null,0,0,129,0,987,5079,840,20,4],
["p1",2,"op","chess_char_6_diy2_a",1,null,1413,1,7,0,0,0,0,0,0],
["p1",3,"op","chess_char_6_diy1_a",2,null,1413,1,9,0,0,0,0,0,0],
["p1",4,"op","chess_char_6_diy2_b",0,"none",0,0,122,0,4382,6814,1480,33,7],
["p1",5,"op","chess_char_6_diy1_b",1,"none",1778,1,130,0,17060,4696,825,31,1],
["p1",6,"op","chess_char_6_diy2_b",2,"none",0,0,74,0,10862,5221,1400,23,1],
["p1",5,"op","chess_char_6_diy1_b",1,"none",1778,1,130,0,17307,4696,785,31,1],
["p1",6,"op","chess_char_6_diy2_b",2,"none",0,0,74,0,10862,5301,1400,23,1],
["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_002_pallas",0,0,73,0,10776,6016,1520,32,8],
["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_002_pallas",0,0,71,0,10228,4216,480,15,1],
["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_pallas",0,0,77,1,55370,5605,1069,25,1],
["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_002_pallas",0,0,77,1,55370,5725,1069,25,1],
["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_003_pallas",0,0,92,0,10290,3656,100,11,2],
["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_003_pallas",0,0,107,0,7159,6136,2680,29,2],
["p1",11,"op","chess_char_6_diy1_b",1,"uniequip_003_pallas",0,0,107,0,11070,6036,2820,33,2],
["p1",12,"op","chess_char_6_diy2_b",2,"uniequip_003_pallas",0,0,115,0,23697,4456,2220,17,1]
],
"enemies": {"enemy_1116_liprr_2":[27,1,26,5523,74289],"enemy_1119_vofsd":[48,0,48,21145,47260],"enemy_1121_lifbos_2":[30,0,30,25228,29261]},
"hooks": [1,130,6489,329,329,391,391,3881,23,127,28,28,0,7662,25,44,105,104,1,23,0,0,0],
"events": {"atk":370,"deploy":25,"die":23,"dmg":391,"fx":24,"heal":299,"leak":104,"skill":56,"spawn":117,"status":213},
"enemies": {"enemy_1116_liprr_2":[27,1,26,5523,74289],"enemy_1119_vofsd":[48,0,48,21117,49437],"enemy_1121_lifbos_2":[30,0,30,25356,31243]},
"hooks": [1,130,6489,333,333,395,395,3945,23,127,28,28,0,7662,28,45,105,104,1,23,0,0,0],
"events": {"atk":374,"deploy":25,"die":23,"dmg":395,"fx":24,"heal":302,"leak":104,"skill":56,"spawn":117,"status":219},
"fx": {"liberate":24},
"snaps": "b9ffdd79 46a5209b 18a79664 8ff2ad37 069dadda 5c8c9276 607475ef 7e3ae4c3 c725f478 5c2d473e 6104ad6f 6df9ca10 ebdccbc4 76ec3fad 5e8ef0b1 10a31df7 3949096d a5abb8b0 981c2f0a 9799d0a5 d5ae8c29 1ba5b9b5"
"snaps": "b9ffdd79 e14da129 ca1fbe62 2bd95c53 ee1604ae d0454351 3818ae71 f5cd0ad1 df304800 9c5dab33 d73acb42 c7af8d64 de528d7d 09b1746c 0fba3bd4 41288af6 d0bbd809 3a74b7f2 225487da 327e4be1 ad8d0b0b e306cc9e"
},
"diy-062": {
"about": "5_diy1_a=lessng/S1 5_diy2_a=lessng/S2 5_diy1_a=lessng/S3 5_diy2_b=lessng/S1 5_diy1_b=lessng/S2 5_diy2_b=lessng/S3 5_diy1_b=lessng/S1/002_lessng 5_diy2_b=lessng/S2/002_lessng 5_diy1_b=lessng/S3/002_lessng 5_diy2_b=lessng/S1/003_lessng 5_diy1_b=lessng/S2/003_lessng 5_diy2_b=lessng/S3/003_lessng",
@@ -2912,38 +2912,38 @@
"time": 205.03,
"ticks": 6151,
"reason": "cleared",
"killed": 36,
"total": 111,
"killed": 35,
"total": 108,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 0,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":36,"total":111,"perfect":false,"leaks":75,"leaksUncounted":0,"coins":0,"dmg":743334,"bossDmg":0,"heal":0,"deaths":14,"layerGains":{}}},
"players": {"p1":{"killed":35,"total":108,"perfect":false,"leaks":73,"leaksUncounted":0,"coins":0,"dmg":744141,"bossDmg":0,"heal":0,"deaths":14,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_5_diy1_b",0,"uniequip_002_phenxi",1,1,4,7,111229,1795,0,73,3],
["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_phenxi",1,1,7,5,242217,1795,0,75,7],
["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_phenxi",1,1,5,3,217929,1795,0,73,1],
["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_phenxi",1,1,8,7,119399,1795,0,78,3],
["p1",5,"op","chess_char_5_diy1_b",1,"uniequip_003_phenxi",942,1,130,1,6890,4446,0,10,0],
["p1",6,"op","chess_char_5_diy2_b",2,"uniequip_003_phenxi",0,0,105,6,7912,3592,0,12,0],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_004_phenxi",0,0,123,3,1788,3762,0,3,0],
["p1",1,"op","chess_char_5_diy1_b",0,"uniequip_002_phenxi",1,1,4,8,109473,1795,0,72,3],
["p1",2,"op","chess_char_5_diy2_b",1,"uniequip_002_phenxi",1,1,7,5,241572,1795,0,75,7],
["p1",3,"op","chess_char_5_diy1_b",2,"uniequip_002_phenxi",1,1,5,3,219348,1795,0,73,1],
["p1",4,"op","chess_char_5_diy2_b",0,"uniequip_003_phenxi",1,1,8,5,121188,1795,0,78,3],
["p1",5,"op","chess_char_5_diy1_b",1,"uniequip_003_phenxi",942,1,127,1,6890,4446,0,10,0],
["p1",6,"op","chess_char_5_diy2_b",2,"uniequip_003_phenxi",0,0,102,6,7912,3592,0,12,0],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_004_phenxi",0,0,120,3,1788,3762,0,3,0],
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_004_phenxi",0,0,9,0,9716,1881,0,10,0],
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_004_phenxi",0,0,77,0,12034,3762,0,12,0],
["p1",10,"op","chess_char_6_diy1_a",0,null,0,0,66,0,4757,3080,0,6,0],
["p1",10,"op","chess_char_6_diy1_a",0,null,0,0,69,0,4757,3080,0,6,0],
["p1",11,"op","chess_char_6_diy2_a",1,null,0,0,2,3,3296,1540,0,9,0],
["p1",12,"op","chess_char_6_diy1_a",2,null,0,0,74,1,6167,3080,0,8,0]
],
"enemies": {
"enemy_1197_sfshu": [18,7,11,435,106555],
"enemy_1197_sfshu_2": [27,5,22,5061,168938],
"enemy_1197_sfshu": [18,7,11,435,104682],
"enemy_1197_sfshu_2": [27,4,23,5061,169730],
"enemy_1198_msfshu": [21,18,3,0,55],
"enemy_1198_msfshu_2": [15,6,9,0,36],
"enemy_9010_acpupp": [30,0,30,7915,467750]
"enemy_1198_msfshu_2": [12,6,6,0,36],
"enemy_9010_acpupp": [30,0,30,7915,469638]
},
"hooks": [1,130,6151,341,334,913,5458,0,50,125,14,13,0,255,0,16,111,75,1,51,0,0,0],
"events": {"atk":334,"deploy":19,"die":50,"dmg":906,"fx":161,"leak":75,"skill":27,"spawn":123,"status":39},
"fx": {"aoe":103,"ember":1,"revive":1,"shieldBreak":1,"summon":12,"telegraph":1,"zone":42},
"snaps": "e906bf06 dffa6b85 fec1877b 24b394c1 01fc048e 06dafd96 06fdb1c8 e8d643cc 08719af9 8541b8df 0c1d5725 a155e29e 0fec21ae 4d9fb3fb 7dd80deb d6f25f5a fd9469ba 515f7f29 d74a3559 c3e7ac22 c9596a35"
"hooks": [1,127,6151,340,333,908,5450,0,49,122,14,13,0,248,0,16,108,73,1,50,0,0,0],
"events": {"atk":333,"deploy":19,"die":49,"dmg":898,"fx":160,"leak":73,"skill":27,"spawn":120,"status":38},
"fx": {"aoe":103,"ember":1,"shieldBreak":2,"summon":11,"telegraph":1,"zone":42},
"snaps": "e906bf06 dffa6b85 c8dda3e6 ae417c90 eb537c73 97195c71 4061dc66 cf4768a1 365fb9e6 df7afb74 995396ab d83633e1 811de2ae 4b6cf3c7 dc60bba6 5cc551b7 d820e151 a730ee11 38fd096e 1958853b d1730693"
},
"diy-069": {
"about": "6_diy1_b=phenxi/S1 6_diy2_b=phenxi/S2 6_diy1_b=phenxi/S3 6_diy2_b=phenxi/S1/002_phenxi 6_diy1_b=phenxi/S2/002_phenxi 6_diy2_b=phenxi/S3/002_phenxi 6_diy1_b=phenxi/S1/003_phenxi 6_diy2_b=phenxi/S2/003_phenxi 6_diy1_b=phenxi/S3/003_phenxi 6_diy2_b=phenxi/S1/004_phenxi 6_diy1_b=phenxi/S2/004_phenxi 6_diy2_b=phenxi/S3/004_phenxi",
@@ -2963,15 +2963,15 @@
"bossHpLeft": null,
"rngDraws": 0,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":5,"total":102,"perfect":false,"leaks":97,"leaksUncounted":0,"coins":0,"dmg":549480,"bossDmg":0,"heal":0,"deaths":13,"layerGains":{}}},
"players": {"p1":{"killed":5,"total":102,"perfect":false,"leaks":97,"leaksUncounted":0,"coins":0,"dmg":547810,"bossDmg":0,"heal":0,"deaths":13,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_6_diy1_b",0,"none",164,1,115,2,23151,3428,0,30,1],
["p1",2,"op","chess_char_6_diy2_b",1,"none",992,1,124,0,16949,2600,0,24,2],
["p1",3,"op","chess_char_6_diy1_b",2,"none",1,1,14,0,11239,1795,0,67,1],
["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_002_phenxi",1,1,100,1,131370,3591,0,52,2],
["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_002_phenxi",1,1,100,1,130329,3591,0,52,2],
["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_002_phenxi",0,0,5,1,60861,1796,0,24,2],
["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_002_phenxi",0,0,79,0,16842,3592,0,12,0],
["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_003_phenxi",402,1,12,1,51978,1394,0,58,3],
["p1",7,"op","chess_char_6_diy1_b",0,"uniequip_003_phenxi",402,1,12,1,51349,1394,0,59,3],
["p1",8,"op","chess_char_6_diy2_b",1,"uniequip_003_phenxi",902,1,15,0,204841,894,0,79,7],
["p1",9,"op","chess_char_6_diy1_b",2,"uniequip_003_phenxi",0,0,68,0,11897,3592,0,13,0],
["p1",10,"op","chess_char_6_diy2_b",0,"uniequip_004_phenxi",0,0,66,0,8109,3822,0,10,0],
@@ -2981,11 +2981,11 @@
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
],
"enemies": {"enemy_1267_nhpbr_2":[27,4,23,2285,149262],"enemy_1270_nhstlk_2":[36,1,35,3930,135479],"enemy_9006_actoxi":[39,0,39,4737,264739]},
"hooks": [1,124,6120,367,356,689,5494,0,18,115,18,17,0,282,0,9,102,97,1,18,0,0,0],
"events": {"atk":356,"deploy":19,"die":18,"dmg":689,"fx":195,"leak":97,"skill":35,"spawn":117,"status":44},
"enemies": {"enemy_1267_nhpbr_2":[27,4,23,2285,148231],"enemy_1270_nhstlk_2":[36,1,35,3930,135479],"enemy_9006_actoxi":[39,0,39,4737,264101]},
"hooks": [1,124,6120,368,357,690,5495,0,18,115,18,17,0,279,0,9,102,97,1,18,0,0,0],
"events": {"atk":357,"deploy":19,"die":18,"dmg":690,"fx":195,"leak":97,"skill":35,"spawn":117,"status":44},
"fx": {"aoe":125,"zone":70},
"snaps": "51c4bda9 21f0cc46 59465d49 3881ca3f a3a635a8 abd07299 43bec432 b7203fd6 3290d0a9 571acc56 f4465684 33bd419c 6c79b79b 3bb52f0b 58d23ded a0e16f44 fbf36653 c984f07c 970867f6 b8fe4355 09040082"
"snaps": "51c4bda9 21f0cc46 a82be1d6 0ac36531 168e3bb2 1bcf44f3 daef3e20 96d361ab baf1a5fb 80154bb3 89466bae 45c32b4b 9dca2298 f71584e0 c1723cd3 d34caa6d 0a21b07b e654bc71 300a8440 6f5228b4 4f4eb16b"
},
"diy-070": {
"about": "5_diy1_a=wisdel/S1 5_diy2_a=wisdel/S2 5_diy1_a=wisdel/S3 5_diy2_b=wisdel/S1 5_diy1_b=wisdel/S2 5_diy2_b=wisdel/S3 5_diy1_b=wisdel/S1/002_wisdel 5_diy2_b=wisdel/S2/002_wisdel 5_diy1_b=wisdel/S3/002_wisdel 6_diy1_a=wisdel/S1 6_diy2_a=wisdel/S2 6_diy1_a=wisdel/S3",
@@ -3213,37 +3213,37 @@
"round": 12,
"seed": 3770869562,
"waveId": "act1autochess_h05",
"time": 184.87,
"ticks": 5546,
"time": 184.67,
"ticks": 5540,
"reason": "cleared",
"killed": 149,
"killed": 136,
"total": 153,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 1810,
"rngDraws": 1839,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":149,"total":153,"perfect":false,"leaks":4,"leaksUncounted":0,"coins":0,"dmg":1261456,"bossDmg":0,"heal":0,"deaths":3,"layerGains":{}}},
"players": {"p1":{"killed":136,"total":153,"perfect":false,"leaks":17,"leaksUncounted":0,"coins":0,"dmg":1203705,"bossDmg":0,"heal":0,"deaths":3,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_5_diy1_a",0,null,2288.89,1,3,15,68115,917,0,0,9],
["p1",2,"op","chess_char_5_diy2_a",1,null,0,0,4,5,30933,3206,0,19,2],
["p1",3,"op","chess_char_5_diy1_a",2,null,2224.71,1,5,17,111591,981,0,15,3],
["p1",4,"op","chess_char_5_diy2_b",0,"none",1773.07,1,7,11,121111,1869,0,0,14],
["p1",5,"op","chess_char_5_diy1_b",1,"none",0,0,11,33,206266,3642,0,53,2],
["p1",6,"op","chess_char_5_diy2_b",2,"none",3579.88,1,157,10,149324,3704,0,14,3],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_002_leizi2",2242.29,1,14,13,128441,1625,0,0,15],
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_002_leizi2",2797.44,1,8,10,83970,1070,0,27,2],
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_002_leizi2",2645.54,1,12,13,164793,1221,0,18,3],
["p1",10,"op","chess_char_6_diy1_a",0,null,3062.4,1,9,1,27992,144,0,0,7],
["p1",11,"op","chess_char_6_diy2_a",1,null,3125.94,1,10,17,133890,80,0,30,2],
["p1",12,"op","chess_char_6_diy1_a",2,null,3206,1,6,4,35032,0,0,5,3],
["p1",1,"op","chess_char_5_diy1_a",0,null,2004.36,1,3,5,39999,1202,0,0,12],
["p1",2,"op","chess_char_5_diy2_a",1,null,0,0,4,2,27437,3206,0,15,2],
["p1",3,"op","chess_char_5_diy1_a",2,null,1527.95,1,5,12,121244,1678,0,17,3],
["p1",4,"op","chess_char_5_diy2_b",0,"none",3312.58,1,7,10,79011,329,0,0,15],
["p1",5,"op","chess_char_5_diy1_b",1,"none",0,0,11,34,210144,3642,0,54,2],
["p1",6,"op","chess_char_5_diy2_b",2,"none",3532.93,1,154,5,137694,3751,0,14,3],
["p1",7,"op","chess_char_5_diy1_b",0,"uniequip_002_leizi2",2002,1,14,12,128214,1865,0,0,15],
["p1",8,"op","chess_char_5_diy2_b",1,"uniequip_002_leizi2",2965.23,1,8,14,81617,902,0,25,2],
["p1",9,"op","chess_char_5_diy1_b",2,"uniequip_002_leizi2",2196.72,1,12,13,160196,1670,0,18,3],
["p1",10,"op","chess_char_6_diy1_a",0,null,3062.4,1,9,3,28381,144,0,0,12],
["p1",11,"op","chess_char_6_diy2_a",1,null,3125.94,1,10,20,138967,80,0,30,2],
["p1",12,"op","chess_char_6_diy1_a",2,null,3206,1,6,6,50800,0,0,8,3],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null]
],
"enemies": {"enemy_1249_lysdb_2":[60,60,0,1488,559872],"enemy_1251_lysyta":[63,63,0,334,269438],"enemy_1329_cbshld":[30,26,4,16637,432145]},
"hooks": [1,168,5546,313,313,2173,2113,0,152,156,65,61,0,39328,293,121,153,4,1,152,0,0,0],
"events": {"atk":536,"deploy":13,"die":152,"dmg":2113,"fx":1586,"leak":4,"skill":126,"spawn":167,"status":306},
"fx": {"aoe":45,"lightning":1429,"pulse":52,"shieldBreak":60},
"snaps": "279180c1 ec59986c 8724f011 2c0b4ef4 0ef558f2 84e4a729 66364554 c0b920f3 6e7185e5 79a82568 49b6ed9f 7493c0a1 f161d189 3b2e9b0a 7a7d89d9 3cf87903 b2fb1d51 9322cda8 bdcbf5e7"
"enemies": {"enemy_1249_lysdb_2":[60,58,2,1482,555896],"enemy_1251_lysyta":[63,56,7,477,253833],"enemy_1329_cbshld":[30,22,8,16510,393975]},
"hooks": [1,168,5540,321,321,2164,2104,0,139,156,74,70,0,42782,272,111,153,17,1,139,0,0,0],
"events": {"atk":531,"deploy":13,"die":139,"dmg":2104,"fx":1630,"leak":17,"skill":144,"spawn":167,"status":265},
"fx": {"aoe":52,"lightning":1461,"pulse":57,"shieldBreak":60},
"snaps": "2dc968cd 56750e4a 1ee2876e a2144941 fb2d3544 6ebea34c 32159a8a 6b3f865d e943e51b f925fc4b 8d788044 012c2ee5 63a6c5ce 7edff8fe 0255b86e 4f834581 71bb9edd c57f6ec9 d067a686"
},
"diy-076": {
"about": "6_diy1_b=leizi2/S1 6_diy2_b=leizi2/S2 6_diy1_b=leizi2/S3 6_diy2_b=leizi2/S1/002_leizi2 6_diy1_b=leizi2/S2/002_leizi2 6_diy2_b=leizi2/S3/002_leizi2 5_diy1_a=vvana/S1 5_diy2_a=vvana/S2 5_diy1_a=vvana/S3 5_diy2_b=vvana/S1 5_diy1_b=vvana/S2 5_diy2_b=vvana/S3",
@@ -3257,35 +3257,35 @@
"time": 211.93,
"ticks": 6358,
"reason": "cleared",
"killed": 9,
"killed": 8,
"total": 144,
"unspawned": 0,
"bossHpLeft": null,
"rngDraws": 731,
"rngDraws": 707,
"errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":9,"total":144,"perfect":false,"leaks":135,"leaksUncounted":0,"coins":0,"dmg":730931,"bossDmg":0,"heal":0,"deaths":24,"layerGains":{}}},
"players": {"p1":{"killed":8,"total":144,"perfect":false,"leaks":136,"leaksUncounted":0,"coins":0,"dmg":657155,"bossDmg":0,"heal":0,"deaths":24,"layerGains":{}}},
"units": [
["p1",1,"op","chess_char_6_diy1_b",0,"none",0,0,114,1,110644,7284,0,0,7],
["p1",2,"op","chess_char_6_diy2_b",1,"none",0,0,106,2,71535,7284,0,11,2],
["p1",3,"op","chess_char_6_diy1_b",2,"none",3642,1,172,0,61978,7284,0,5,2],
["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_002_leizi2",0,0,136,0,76696,8004,0,0,7],
["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_002_leizi2",0,0,98,1,56986,8004,0,6,2],
["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_002_leizi2",0,0,144,4,301469,8004,0,7,2],
["p1",7,"op","chess_char_5_diy1_a",0,null,0,0,157,0,7018,6657,0,17,3],
["p1",1,"op","chess_char_6_diy1_b",0,"none",0,0,136,1,56235,7284,0,0,8],
["p1",2,"op","chess_char_6_diy2_b",1,"none",0,0,106,1,63203,7284,0,8,2],
["p1",3,"op","chess_char_6_diy1_b",2,"none",3642,1,172,1,61820,7284,0,5,2],
["p1",4,"op","chess_char_6_diy2_b",0,"uniequip_002_leizi2",0,0,144,0,56745,8004,0,0,8],
["p1",5,"op","chess_char_6_diy1_b",1,"uniequip_002_leizi2",0,0,98,1,54757,8004,0,6,2],
["p1",6,"op","chess_char_6_diy2_b",2,"uniequip_002_leizi2",0,0,114,3,300025,8004,0,7,2],
["p1",7,"op","chess_char_5_diy1_a",0,null,0,0,157,0,5578,6657,0,14,2],
["p1",8,"op","chess_char_5_diy2_a",1,null,0,0,170,0,2406,6657,0,9,0],
["p1",9,"op","chess_char_5_diy1_a",2,null,0,0,5,0,8162,2219,0,10,1],
["p1",10,"op","chess_char_5_diy2_b",0,"none",0,0,102,0,10886,5368,0,16,6],
["p1",11,"op","chess_char_5_diy1_b",1,"none",0,0,9,1,19388,2684,0,23,1],
["p1",10,"op","chess_char_5_diy2_b",0,"none",0,0,100,0,10474,5368,0,15,6],
["p1",11,"op","chess_char_5_diy1_b",1,"none",0,0,9,1,33985,2684,0,36,1],
["p1",12,"op","chess_char_5_diy2_b",2,"none",0,0,88,0,3764,5368,0,12,0],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null],
["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
],
"enemies": {"enemy_1251_lysyta_2":[51,7,44,7556,239546],"enemy_1252_lysytb_2":[54,1,53,35570,238862],"enemy_1329_cbshld_2":[39,1,38,31691,252523]},
"hooks": [1,172,6358,308,308,1222,1222,0,33,168,33,33,0,13780,177,59,144,135,1,33,0,0,0],
"events": {"atk":357,"deploy":25,"die":33,"dmg":1222,"fx":291,"leak":135,"skill":66,"spawn":159,"status":231},
"fx": {"aoe":11,"lightning":268,"pulse":12},
"snaps": "e5aa4eaa d6ba5ad4 c3fc9920 0c0694c3 3c2d6768 2db18b72 fccb9cf5 9c7c8a5d e08870ed 2e2ef124 df9e1088 43c28882 5e429444 dcc0d460 b4d0311b afe5d2f9 0bfacbe2 4001646e 5a8d03c7 03fea703 00210b83 84c9c000"
"enemies": {"enemy_1251_lysyta_2":[51,7,44,8056,222618],"enemy_1252_lysytb_2":[54,0,54,37418,231314],"enemy_1329_cbshld_2":[39,1,38,29343,203222]},
"hooks": [1,172,6358,313,313,1196,1196,0,32,168,34,34,0,13997,170,61,144,136,1,32,0,0,0],
"events": {"atk":360,"deploy":25,"die":32,"dmg":1196,"fx":295,"leak":136,"skill":68,"spawn":159,"status":207},
"fx": {"aoe":12,"lightning":271,"pulse":12},
"snaps": "57b0247f 709e3989 b59273f8 96badade e60d2e42 bb5c571b bf511a45 285716ba fdd2e6cb c13505bb f651147a 34f81088 56c11b0e 4cb01267 1445a90f aeb2d2d4 cb3a65a9 76eea771 f4b338c5 2c4e5087 623df3ae 8aa9c179"
},
"diy-077": {
"about": "5_diy1_b=vvana/S1/002_vvana 5_diy2_b=vvana/S2/002_vvana 5_diy1_b=vvana/S3/002_vvana 5_diy2_b=vvana/S1/003_vvana 5_diy1_b=vvana/S2/003_vvana 5_diy2_b=vvana/S3/003_vvana 6_diy1_a=vvana/S1 6_diy2_a=vvana/S2 6_diy1_a=vvana/S3 6_diy2_b=vvana/S1 6_diy1_b=vvana/S2 6_diy2_b=vvana/S3",
+13 -1
View File
@@ -437,7 +437,7 @@ const TRIGGER_RENAME = { ALWAYS: 'SP_FULL', CUSTOM_RANGE_SEARCH_ENEMY: 'CUSTOM_R
* 溅射范围扩大" — and not a 技能范围 of its own (PRTS 卫戍协议/帮助 技能操作: "拥有技能范围的技能(非攻击距离增加)").
* "攻击范围内…" (an effect on the attack range) does not match.
*/
const ATTACK_RANGE_CHANGE = /攻击(?:范围|距离)(?:与溅射范围)?(?:扩大|增大|改变|改为|缩小|缩短|加长|增加|\+)/;
const ATTACK_RANGE_CHANGE = /攻击(?:范围|距离)(?:与溅射范围)?(?:扩大|增大|改变|改为|缩小|缩短|加长|增加|\+|(?:向前|往前)?延伸|朝[^,。;]{1,8}扩大)/;
/**
* A deliberate deviation from the official 技能策略 (DESIGN §21.29): the owner's decision of 2026-10-03 after community
@@ -477,6 +477,15 @@ const STANDIN_TRIGGER_DEVIATIONS = Object.freeze({
char_610_acfend: { skchr_acfend_1: 'DEFAULT', skchr_acfend_2: 'DEFAULT', skchr_acfend_3: 'DEFAULT' }, // Mechanist S1 结构稳定 / S2 不变性原理 / S3 应力倒置
});
/**
* Corrections for 自选 units whose skill text no longer matches the live client (keyed by charId and skill id): 菲亚梅塔
* S1 — PRTS 备注 for the 2026-08-01 client: it no longer targets flyers and its "攻击距离+1" no longer grows the range
* (the client's selector agrees), so the basic strategy (DEFAULT), not ACTIVE_RANGE on a +1 grid she cannot reach (O12).
*/
const UNIT_TRIGGER_CORRECTIONS = Object.freeze({
char_300_phenxi: { skchr_phenxi_1: 'DEFAULT' },
});
/**
* The attack range a MANUAL skill gives while it runs, when its text changes the attack range (ATTACK_RANGE_CHANGE): its
* own rangeId grid, else the operator's range grown by `ability_range_forward_extend` ("攻击距离+N": 空弦 S3, 史尔特尔
@@ -547,6 +556,9 @@ function resolveTrigger(ctx, char, charId, skillIdx, skill, { operator = false,
return { rule: 'SKILL_RANGE', rawRule: 'DEFAULT', customRangeGrid: skill.rangeGrid.map((p) => p.slice()) };
}
const rawRule = pick ? pick.skillTriggerType : 'DEFAULT';
// a live-client correction is final (no ACTIVE_RANGE upgrade: the text's larger range is gone in the client)
const correction = unitCharId ? UNIT_TRIGGER_CORRECTIONS[unitCharId]?.[skill.skillId] : null;
if (correction) return { rule: correction, rawRule, customRangeGrid: null };
// the 重装 exception also covers every 自选 重装 (a backups.json unit of the TANK class whose MANUAL skill meets the
// class row's TAKE_DAMAGE casts with an enemy in range — the owner's decision of 2026-10-05, as for the stand-ins)
const deviation = chessId ? TRIGGER_DEVIATIONS[chessId]?.[skill.skillId]