fix: 修复洛洛 S2 越界续锁与旧弹倍率干扰;Golden 因独立浮游/本体攻击更新 roster-004、roster-005、bond-victoriaShip-low、bond-victoriaShip-high、coop3-ABYSS-5、coop4-FUNNY-6、coop4-ABYSS-7、coop2-NORMAL-8-serverrun、coop2-NORMAL-1-coverage-standins

This commit is contained in:
星闌 committed 2026-10-11 16:54:03 +08:00
1 parent bc50cac01f
commit f567e8045e
9 files changed
+461 -127

No files matched your search

+1 -1
View File
@@ -1341,7 +1341,7 @@ header of professions.js).
| loopshooter | 回环射手 (user playtest #3): every attack throws a boomerang (`ai.js throwBoomerang`, projectile `'boomerang'`) out to the target at 15 tiles/s — it hits on arrival — and back to the thrower's current position at 3.75 tiles/s without damage (PRTS 跃跃 "投射物飞行速度15,返回时飞行速度3.75"); attacks only while holding it (every boomerang thrown caught — "必须回收全部回旋投掷物才可以进行下一次攻击", `unit.trait.boomerangsOut`) and with the attack cooldown ready, so the real interval is the longer of the two; a target dead mid-flight is not hit (it still flies to the last position and back); knocked out / withdrawn ⇒ lost, a redeployed thrower holds a fresh one; 跃跃 S2's extra boomerangs share the one flight (cnt hits); each catch fires `boomerangCaught`, and an attack profile's `boomerangOnward(ctx)` flies it on after the first hit before it turns back — ctx `hit` (a hit of the same attack), `comeBack(x, y)` once (a content error sends it back from the hit point): 娜仁图亚 S1 bounces, S2 dashes on and hits on its way back (kits/ops/op-narant.js) | | loopshooter | 回环射手 (user playtest #3): every attack throws a boomerang (`ai.js throwBoomerang`, projectile `'boomerang'`) out to the target at 15 tiles/s — it hits on arrival — and back to the thrower's current position at 3.75 tiles/s without damage (PRTS 跃跃 "投射物飞行速度15,返回时飞行速度3.75"); attacks only while holding it (every boomerang thrown caught — "必须回收全部回旋投掷物才可以进行下一次攻击", `unit.trait.boomerangsOut`) and with the attack cooldown ready, so the real interval is the longer of the two; a target dead mid-flight is not hit (it still flies to the last position and back); knocked out / withdrawn ⇒ lost, a redeployed thrower holds a fresh one; 跃跃 S2's extra boomerangs share the one flight (cnt hits); each catch fires `boomerangCaught`, and an attack profile's `boomerangOnward(ctx)` flies it on after the first hit before it turns back — ctx `hit` (a hit of the same attack), `comeBack(x, y)` once (a content error sends it back from the hit point): 娜仁图亚 S1 bounces, S2 dashes on and hits on its way back (kits/ops/op-narant.js) |
| reaperrange | hits every enemy in range; ×1.5 (bb atk_scale) on the trait front grid (or its own line ahead) — both along its direction | | reaperrange | hits every enemy in range; ×1.5 (bb atk_scale) on the trait front grid (or its own line ahead) — both along its direction |
| chain | chain N (trait text/bb max_target) with −15 % per jump (bb chain.atk_scale), 1.7-tile jumps (constants.js CHAIN_RADIUS, PRTS 溅射半径一览: 链术师 1.7; 1.8 until 0.1.1), sluggish on each hit | | chain | chain N (trait text/bb max_target) with −15 % per jump (bb chain.atk_scale), 1.7-tile jumps (constants.js CHAIN_RADIUS, PRTS 溅射半径一览: 链术师 1.7; 1.8 until 0.1.1), sluggish on each hit |
| funnel | drone damage 20 % → +15 %/hit on the same target → 110 % (bb init/delta/max) | | funnel | drone damage 20 % → +15 %/hit on the same target → 110 % (bb init/delta/max). Rockrock S2 detaches this multiplier from new body shots and inherits the trait ramp in an independent skill tick: `rockr:drone`, arts, `isSkill:true`, `isAttack:false`. Older projectiles cannot change its local ramp. A living selectable lock need not remain in body range; end hands the ramp back and restores the normal multiplier (DESIGN §29.16) |
| mystic | 秘术师 (PRTS 分支特性信息 秘术师, GitHub #181): at its attack check (the attack ready, able to act, not disarmed) with no valid target — no target, or its kit's `canAttack` false (深靛 never picks a bound enemy) — it stores one energy (`storeEnergy`, up to bb times: 3, 深靛's MSC-X 4), an attack action: the attack interval restarts; a full store idles with the attack ready. The energies leave with its next attack that happens (`releaseEnergy` in `performAttack`, after `beforeAttack`: an attack cancelled before its shot keeps them) and land with the main hit, one arts attack hit each (`hitsFn` reads the hit's `info.energy`); a redeployment holds none [ASSUMED]. 维伊 / 黑键 plug their own `storeEnergy` (转置能量, elite energies) into the same check | | mystic | 秘术师 (PRTS 分支特性信息 秘术师, GitHub #181): at its attack check (the attack ready, able to act, not disarmed) with no valid target — no target, or its kit's `canAttack` false (深靛 never picks a bound enemy) — it stores one energy (`storeEnergy`, up to bb times: 3, 深靛's MSC-X 4), an attack action: the attack interval restarts; a full store idles with the attack ready. The energies leave with its next attack that happens (`releaseEnergy` in `performAttack`, after `beforeAttack`: an attack cancelled before its shot keeps them) and land with the main hit, one arts attack hit each (`hitsFn` reads the hit's `info.energy`); a redeployment holds none [ASSUMED]. 维伊 / 黑键 plug their own `storeEnergy` (转置能量, elite energies) into the same check |
| phalanx | no attack & DEF +200 %, RES +20 (bb) while the skill is off; while on, `rangeAoe`: each attack strikes every selectable enemy on its range at once (blocked enemies included; a stealthed one only when revealed or blocked), the same damage near and far, instant (`'beam'`) — "群体法术伤害" (secondary: Terra Wiki, Phalanx Caster: "attacks hit all enemies within their range"; supporting: PRTS 林 S3 备注 "单次普攻最多触发1次效果" — one normal attack can kill several — the same 锁定攻击范围 shape as the 轰击术师, and PRTS 溅射半径一览 documents no splash radius for it (it omits the 撼地者 too, so this is not proof); no primary source states a target cap; community report E3: it used to be one bolt + a 1.1 splash). 卡涅利安's charged S1 keeps the skill-off trait, 不攻击 included (kit `canAttack`, PRTS 备注) | | phalanx | no attack & DEF +200 %, RES +20 (bb) while the skill is off; while on, `rangeAoe`: each attack strikes every selectable enemy on its range at once (blocked enemies included; a stealthed one only when revealed or blocked), the same damage near and far, instant (`'beam'`) — "群体法术伤害" (secondary: Terra Wiki, Phalanx Caster: "attacks hit all enemies within their range"; supporting: PRTS 林 S3 备注 "单次普攻最多触发1次效果" — one normal attack can kill several — the same 锁定攻击范围 shape as the 轰击术师, and PRTS 溅射半径一览 documents no splash radius for it (it omits the 撼地者 too, so this is not proof); no primary source states a target cap; community report E3: it used to be one bolt + a 1.1 splash). 卡涅利安's charged S1 keeps the skill-off trait, 不攻击 included (kit `canAttack`, PRTS 备注) |
| physician | heal the lowest HP% injured ally in range (a skill `targeting.maxTargets` widens any heal profile) | | physician | heal the lowest HP% injured ally in range (a skill `targeting.maxTargets` widens any heal profile) |
+6
View File
@@ -167,6 +167,12 @@ Profession traits (default behaviours implemented once in the engine, keyed by `
--- ---
Rockrock S2 releases its trait drone into an independent skill tick (§29.16). Acquisition uses the body's normal
target selection; a living selectable lock stays valid outside the body's range. The body retains its own ranged
ordinary attacks. The released ramp inherits the trait state but is isolated from older projectiles. Ending the
skill returns that ramp to the trait and restores the normal multiplier and overload cap. S1 and other operators'
funnel attacks keep their existing paths.
## 7. Content modules (server/sim/content + match/effectsMeta handlers) ## 7. Content modules (server/sim/content + match/effectsMeta handlers)
Each domain file `server/sim/content/{tokens,bonds,garrisons,items,bands,enemies,bosses,devices,choices}.js` exports `install(battle)` (battle side; called once per Battle by `content/index.js → installContent`) and `registerMeta(registry)` (prep side; called once at server boot by `match/effectsMeta.js`, API documented in `docs/META.md`). Kits live one per file in `content/kits/ops/` (`export default { [baseChessId]: (bb, chess, def) => Kit }`), listed in `content/kits/index.js` (guide: `content/kits/README.md`). Content must be **data-driven from blackboards** (numbers never hard-coded when a blackboard key exists). Every effect gets at least one unit test in `test/content/*.test.js` using the `test/helpers/battleHarness.js` harness (provided by sim-core). Each domain file `server/sim/content/{tokens,bonds,garrisons,items,bands,enemies,bosses,devices,choices}.js` exports `install(battle)` (battle side; called once per Battle by `content/index.js → installContent`) and `registerMeta(registry)` (prep side; called once at server boot by `match/effectsMeta.js`, API documented in `docs/META.md`). Kits live one per file in `content/kits/ops/` (`export default { [baseChessId]: (bb, chess, def) => Kit }`), listed in `content/kits/index.js` (guide: `content/kits/README.md`). Content must be **data-driven from blackboards** (numbers never hard-coded when a blackboard key exists). Every effect gets at least one unit test in `test/content/*.test.js` using the `test/helpers/battleHarness.js` harness (provided by sim-core).
+24
View File
@@ -274,3 +274,27 @@ enemy: picking emitted a unit click with no definition, instead of the tile clic
engine-canvas regression retains the card/100 HP assertions and also covers another field refresh, live HP loss and engine-canvas regression retains the card/100 HP assertions and also covers another field refresh, live HP loss and
closing the card when the crate is destroyed. Device metadata supplied by the new entry still wins; changing fields closing the card when the crate is destroyed. Device metadata supplied by the new entry still wins; changing fields
does not carry old devices across. Gameplay and allied targeting rules are unchanged. does not carry old devices across. Gameplay and allied targeting rules are unchanged.
### 29.16 Rockrock S2 drone pursuit
The official `skill_table.json` entry `skchr_rockr_2`, ranks 4 and 7, keeps a released drone locked until the enemy
dies or the skill ends; leaving the operator's range is not a return condition. The old `beforeAttack` callback
both replaced the body's target and required the lock to remain in range. With no body candidate, the attack loop
never reached that callback at all.
S2 now ticks one independent arts skill drone (`attack@cnt = 0`, one trait drone). It acquires inside the normal
range, keeps a living selectable target after it leaves, and reacquires only after losing that target. The body
continues its own in-range attacks. The released drone inherits the trait's target/ramp, resolved module init/delta,
live attack interval and overload cap; its multiplier is detached from newly launched body shots during S2 and
restored on end. Its local ramp is isolated from older ordinary projectiles and handed back to the trait at end;
existing projectiles keep their launch profile. Natural expiry, explicit stop and caster death
clear released state; the existing overload buff/cap restoration and stun stay in place. S1, other operators and
redeployment ramp rules are unchanged.
[ASSUMED] Released hits use the existing independent-skill-drone model: no launch-flight delay, and body control
does not pause an already released drone. A target becoming hidden or otherwise unselectable releases the lock
using the shared target filter. The tables do not settle these details. The kit and PR name these assumptions.
Sources: [official skill table](https://github.com/Kengxxiao/ArknightsGameData/blob/master/zh_CN/gamedata/excel/skill_table.json)
and [PRTS mode levels](https://prts.wiki/w/卫戍协议:盟约). Controlled regressions cover both forms, leaving/returning,
newcomers, combat death, end/stop, module ramp, cadence and overload. A fixed-seed production Match and real headless
Chrome normal-input route reproduce the original failure and the repaired pursuit separately.
@@ -1,10 +1,18 @@
// server/sim/content/kits/ops/chess_char_2_10-rockr.js — 洛洛 (char_4040_rockr) kit, tier 2. // server/sim/content/kits/ops/chess_char_2_10-rockr.js — 洛洛 (char_4040_rockr) kit, tier 2.
// Conventions of the tier-2 kits: ../shared/tier2.js; kit contract and rules: ../README.md. // Conventions of the tier-2 kits: ../shared/tier2.js; kit contract and rules: ../README.md.
import { canTargetEnemy } from '../../../targeting.js'; import { canTargetEnemy, sortEnemyTargets } from '../../../targeting.js';
import { bodyInKeys } from '../../../body.js';
import { num, talentBb, up } from '../shared/tier1.js'; import { num, talentBb, up } from '../shared/tier1.js';
import { onDefaultSkill } from '../shared/tier2.js';
export const DRONE_TAG = 'rockr:drone';
const firstTarget = (battle, unit) => {
const prof = unit.profile;
const candidates = battle.enemiesInKeys(unit.rangeKeys, unit, prof);
for (const e of battle.blockedTargets(unit, prof)) if (!candidates.includes(e)) candidates.push(e);
sortEnemyTargets(battle, unit, candidates, prof.priority);
return candidates[0] ?? null;
};
export default { export default {
// --------------------------------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------------------------------
@@ -15,7 +23,6 @@ export default {
// S1 战术咏唱·γ型 (alt): ASPD +attack_speed; the target lock belongs to 自负此轭 only. // S1 战术咏唱·γ型 (alt): ASPD +attack_speed; the target lock belongs to 自负此轭 only.
chess_char_2_10_a: (bb, chess) => { chess_char_2_10_a: (bb, chess) => {
const t = talentBb(chess, 0); const t = talentBb(chess, 0);
const s2 = onDefaultSkill(chess);
const endOverload = (battle, unit) => { const endOverload = (battle, unit) => {
if (unit.mem.rockFunnel) { unit.profile.funnel = unit.mem.rockFunnel; unit.mem.rockFunnel = null; } if (unit.mem.rockFunnel) { unit.profile.funnel = unit.mem.rockFunnel; unit.mem.rockFunnel = null; }
battle.removeBuff(unit, 'rockr:overload'); battle.removeBuff(unit, 'rockr:overload');
@@ -26,19 +33,52 @@ export default {
onStart({ battle, unit, skill }) { onStart({ battle, unit, skill }) {
unit.mem.rockOverAt = battle.time + skill.duration / 2; unit.mem.rockOverAt = battle.time + skill.duration / 2;
unit.mem.rockOver = false; unit.mem.rockOver = false;
unit.mem.rockLock = null; // The released drone inherits the trait's ramp; the body still attacks only inside its own range.
// `funnelMul` separates the addition; older profiles fold it into `dmgMul`. Keep launched shots unchanged.
const key = typeof unit.profile.funnelMul === 'function' ? 'funnelMul' : 'dmgMul';
const mul = unit.profile[key];
unit.profile = { ...unit.profile, [key]: null };
const lock = firstTarget(battle, unit);
unit.mem.rockDrone = { lock, cd: 0, key, mul,
target: unit.trait.funnelTarget, scale: unit.trait.funnelScale };
unit.mem.rockLock = lock;
}, },
onTick({ battle, unit }) { onTick({ battle, unit, dt }) {
if (unit.mem.rockOver || battle.time + 1e-9 < unit.mem.rockOverAt) return; if (!unit.mem.rockOver && battle.time + 1e-9 >= unit.mem.rockOverAt) {
unit.mem.rockOver = true; unit.mem.rockOver = true;
const f = unit.profile.funnel;
if (f) { unit.mem.rockFunnel = f; unit.profile.funnel = { ...f, max: f.max * num(bb.scale, 1) }; }
battle.addBuff(unit, { key: 'rockr:overload', mods: { atkPct: num(bb.atk) }, visible: true, tags: ['skill'] });
battle.fx('overload', { x: unit.x, y: unit.y, id: unit.id });
}
const d = unit.mem.rockDrone;
if (!d || !unit.alive || !unit.skill.active) return;
d.cd = Math.max(0, d.cd - dt);
// [ASSUMED] A newly unselectable lock returns under the shared targetability rules.
if (d.lock && !canTargetEnemy(unit, d.lock, unit.profile)) d.lock = null;
if (!d.lock) d.lock = firstTarget(battle, unit);
unit.mem.rockLock = d.lock;
if (!d.lock || d.cd > 1e-9) return;
d.cd = unit.s.interval;
// Official S2 releases one drone (1 + attack@cnt = 1 at both ranks). Keep pre-skill shots from changing its ramp.
// [ASSUMED] As the existing independent skill drones, no launch-flight delay; body control does not pause it.
const f = unit.profile.funnel; const f = unit.profile.funnel;
if (f) { unit.mem.rockFunnel = f; unit.profile.funnel = { ...f, max: f.max * num(bb.scale, 1) }; } d.scale = d.target === d.lock.id ? Math.min(f.max, (d.scale ?? f.init) + f.delta) : f.init;
battle.addBuff(unit, { key: 'rockr:overload', mods: { atkPct: num(bb.atk) }, visible: true, tags: ['skill'] }); d.target = d.lock.id;
battle.fx('overload', { x: unit.x, y: unit.y, id: unit.id }); battle.fx('drone', { x: d.lock.x, y: d.lock.y, id: unit.id });
battle.dealDamage(unit, d.lock, { amount: unit.s.atk * unit.s.atkScaleMul * d.scale,
type: 'arts', isSkill: true, isAttack: false, tags: ['skill', 'drone', DRONE_TAG] });
}, },
onEnd({ battle, unit, reason }) { onEnd({ battle, unit, reason }) {
const over = unit.mem.rockOver ? battle.time - unit.mem.rockOverAt : 0; const over = unit.mem.rockOver ? battle.time - unit.mem.rockOverAt : 0;
const d = unit.mem.rockDrone;
unit.mem.rockDrone = null;
endOverload(battle, unit); endOverload(battle, unit);
if (d) {
unit.trait.funnelTarget = d.target;
unit.trait.funnelScale = d.scale;
unit.profile = { ...unit.profile, [d.key]: d.mul };
}
unit.mem.rockOver = false; unit.mem.rockOver = false;
unit.mem.rockLock = null; unit.mem.rockLock = null;
if (over > 0 && reason !== 'death' && unit.alive) battle.applyStatus(unit, 'stun', { duration: over, source: unit }); if (over > 0 && reason !== 'death' && unit.alive) battle.applyStatus(unit, 'stun', { duration: over, source: unit });
@@ -46,12 +86,6 @@ export default {
}, },
skills: { 'skcom_magic_rage[3]': { kind: 'duration', mods: { aspd: num(bb.attack_speed) } } }, skills: { 'skcom_magic_rage[3]': { kind: 'duration', mods: { aspd: num(bb.attack_speed) } } },
talents: [{ install(battle, unit) { talents: [{ install(battle, unit) {
if (s2) battle.on('beforeAttack', (ctx) => {
if (ctx.attacker !== unit || !unit.skill?.active) return;
const L = unit.mem.rockLock;
if (L && L.alive && bodyInKeys(L, unit.rangeKeySet) && canTargetEnemy(unit, L, ctx.profile || unit.profile)) ctx.targets = [L];
else unit.mem.rockLock = ctx.targets[0] ?? null;
}, { owner: unit });
const iv = num(t.interval), max = Math.floor(num(t.max_stack_cnt)), v = num(t.atk); const iv = num(t.interval), max = Math.floor(num(t.max_stack_cnt)), v = num(t.atk);
if (!(iv > 0) || !(max > 0) || !v) return; if (!(iv > 0) || !(max > 0) || !v) return;
battle.on('tick', () => { battle.on('tick', () => {
+4 -1
View File
@@ -7,6 +7,7 @@ import { makeBattle, enemyRec, chessRec, checkInvariants } from '../helpers/batt
import { getDefaultSource } from '../../server/sim/simdata.js'; import { getDefaultSource } from '../../server/sim/simdata.js';
import { ELEMENT_GAUGE_MAX, PROJECTILE_SPEEDS, BOOMERANG_RETURN_SPEED } from '../../server/sim/constants.js'; import { ELEMENT_GAUGE_MAX, PROJECTILE_SPEEDS, BOOMERANG_RETURN_SPEED } from '../../server/sim/constants.js';
import { sortEnemyTargets } from '../../server/sim/targeting.js'; import { sortEnemyTargets } from '../../server/sim/targeting.js';
import { DRONE_TAG as ROCKROCK_DRONE } from '../../server/sim/content/kits/ops/chess_char_2_10-rockr.js';
const ds = getDefaultSource(); const ds = getDefaultSource();
const raw = (id) => ds.rawChess(id); const raw = (id) => ds.rawChess(id);
@@ -1341,7 +1342,9 @@ test('2_10 洛洛: 自负此轭 drones stay locked on their target while the ski
const t0 = h.b.time; const t0 = h.b.time;
h.run(4); h.run(4);
const atks = h.hooksOf('attack').filter((c) => c.attacker === u && c.t > t0); const atks = h.hooksOf('attack').filter((c) => c.attacker === u && c.t > t0);
assert.ok(atks.length > 0 && atks.every((c) => c.targets.length === 1 && c.targets[0] === first), 'locked'); assert.ok(atks.length > 0 && atks.every((c) => c.targets.length === 1 && c.targets[0] === other), 'body keeps normal targeting');
const drones = h.hooksOf('damaged').filter((c) => c.source === u && c.t > t0 && c.dmg.tags?.includes(ROCKROCK_DRONE));
assert.ok(drones.length > 0 && drones.every((c) => c.target === first && c.dmg.isSkill && !c.dmg.isAttack), 'drone stays locked');
done(h); done(h);
}); });
+267
View File
@@ -0,0 +1,267 @@
// Controlled regression inputs: real kit, seeded Battle, synthetic enemy records and authored routes.
// No live enemy movement/HP edits. These cases are distinct from the normal Match/browser route.
import { test } from 'node:test';
import assert from 'node:assert/strict';
import { makeBattle, enemyRec, checkInvariants } from '../helpers/battleHarness.js';
import { bodyInKeys } from '../../server/sim/body.js';
import { DRONE_TAG } from '../../server/sim/content/kits/ops/chess_char_2_10-rockr.js';
import { getDefaultSource } from '../../server/sim/simdata.js';
const route = {
motion: 'FLY', start: [10, 6], end: [9, 2],
steps: [{ t: 'wait', s: 3 }, { t: 'move', p: [12, 6] }, { t: 'wait', s: 8 },
{ t: 'move', p: [10, 6] }, { t: 'wait', s: 40 }, { t: 'move', p: [9, 2] }],
};
const stationary = { motion: 'FLY', start: [10, 5], end: [9, 2], steps: [{ t: 'wait', s: 90 }, { t: 'move', p: [9, 2] }] };
const setup = (id, { skillIndex = 1, moduleId, newcomer = false, staysOutside = false, fragile = false,
outsideHp, stationaryLock = false, killer = false } = {}) => {
const lockRoute = staysOutside ? { ...route, steps: [...route.steps.slice(0, 2), { t: 'wait', s: 90 }, { t: 'move', p: [9, 2] }] } : route;
const h = makeBattle({ seed: 5, timeLimit: 100, autoFinish: false, captureNoisy: true,
hooks: ['damaged', 'attack', 'skillStart', 'skillEnd'],
defs: { enemies: {
enemy_lock: enemyRec({ key: 'enemy_lock', hp: 1e7, speed: 1, motion: 'FLY' }),
enemy_fragile: enemyRec({ key: 'enemy_fragile', hp: 300, speed: 1, motion: 'FLY' }),
enemy_outside: enemyRec({ key: 'enemy_outside', hp: outsideHp, speed: 1, motion: 'FLY' }),
enemy_killer: enemyRec({ key: 'enemy_killer', hp: 1e7, atk: 1e5, range: 4, motion: 'FLY' }),
} },
units: [{ chessId: id, row: 10, col: 4, skillIndex, moduleId, carryState: { sp: 999 } }],
enemies: [{ key: fragile ? 'enemy_fragile' : outsideHp ? 'enemy_outside' : 'enemy_lock',
route: fragile || stationaryLock ? stationary : lockRoute },
...(newcomer ? [{ key: 'enemy_lock', route: stationary, time: 7 }] : []),
...(killer ? [{ key: 'enemy_killer', route: stationary, time: 7 }] : [])],
});
h.step();
return { h, u: h.unit(id), target: h.enemies()[0] };
};
const hits = (h, u, target, after) => h.hooksOf('damaged').filter(c => c.source === u && c.target === target && c.t >= after && c.amount > 0);
const drone = c => c.dmg.tags?.includes(DRONE_TAG);
const approx = (actual, expected) => assert.ok(Math.abs(actual - expected) < 1e-7, `${actual} vs ${expected}`);
const done = h => { checkInvariants(h.b); assert.deepEqual(h.b.errors, []); };
for (const id of ['chess_char_2_10_a', 'chess_char_2_10_b']) {
test(`${id} S2: damage continues after a living target leaves the body range`, () => {
const { h, u, target } = setup(id);
assert.ok(u.skill.active);
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
assert.ok(hits(h, u, target, 0).length > 0, 'the in-range control receives damage before leaving');
h.run(2); // discard any projectile already in flight at the boundary
const t = h.b.time;
const bodyAttacks = u.stats.attacks;
h.run(4);
assert.ok(target.alive && u.alive && u.skill.active && !bodyInKeys(target, u.rangeKeySet));
const outHits = hits(h, u, target, t);
assert.ok(outHits.length > 0, 'a living out-of-range lock must still receive drone damage');
assert.ok(outHits.every(c => drone(c) && c.type === 'arts' && c.dmg.isSkill && !c.dmg.isAttack), 'pursuit damage must be an independent arts skill drone');
assert.equal(u.stats.attacks, bodyAttacks, 'the body cannot make attacks with no enemy in range');
done(h);
});
test(`${id} S2: an in-range newcomer cannot steal a living out-of-range drone lock`, () => {
const { h, u, target } = setup(id, { newcomer: true });
assert.ok(h.runUntil(() => h.enemies().length === 2, 10));
assert.ok(target.alive && !bodyInKeys(target, u.rangeKeySet));
h.run(2);
const t = h.b.time;
h.run(3);
const outHits = hits(h, u, target, t);
assert.ok(outHits.length > 0, 'the original target keeps receiving drone damage with another target in range');
assert.ok(outHits.every(c => drone(c) && c.dmg.isSkill && !c.dmg.isAttack), 'the body cannot attack the out-of-range lock');
const other = h.enemies().find(e => e !== target);
assert.equal(u.mem.rockLock, target);
assert.equal(hits(h, u, other, t).filter(drone).length, 0, 'the drone ignores the newcomer');
const body = hits(h, u, other, t).filter(c => c.dmg.isAttack);
assert.ok(body.length > 0, 'the body still attacks the in-range newcomer');
assert.ok(body.every(c => !c.dmg.isSkill && !drone(c)));
body.forEach(c => approx(c.amount, u.s.atk * u.s.atkScaleMul));
done(h);
});
test(`${id} S2: a target returning into range receives damage`, () => {
const { h, u, target } = setup(id);
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
assert.ok(h.runUntil(() => bodyInKeys(target, u.rangeKeySet), 20));
const t = h.b.time;
h.run(3);
const ds = hits(h, u, target, 0).filter(drone);
assert.ok(ds.some(c => c.t >= t));
assert.equal(u.mem.rockLock, target);
ds.slice(1).forEach((c, i) => approx(c.t - ds[i].t, Math.ceil(u.s.interval * 30 - 1e-9) / 30));
ds.slice(-3).forEach(c => approx(c.amount, u.s.atk * u.s.atkScaleMul * u.profile.funnel.max));
done(h);
});
test(`${id} S2: a target killed by combat releases the lock for another in-range enemy`, () => {
const { h, u, target } = setup(id, { fragile: true, newcomer: true });
assert.equal(u.mem.rockLock, target);
assert.ok(h.runUntil(() => !target.alive, 7));
assert.ok(h.runUntil(() => h.enemies().some(e => e !== target && e.alive), 10));
const other = h.enemies().find(e => e !== target && e.alive);
const t = h.b.time;
h.run(3);
assert.ok(u.alive && u.skill.active && other.alive);
assert.equal(u.mem.rockLock, other);
assert.ok(hits(h, u, other, t).length > 0);
done(h);
});
test(`${id} S2: the duration end clears the lock and stops out-of-range damage`, () => {
const { h, u, target } = setup(id, { staysOutside: true });
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
assert.ok(h.runUntil(() => !u.skill.active, 45));
assert.equal(h.hooksOf('skillEnd').find(c => c.unit === u)?.reason, 'duration');
assert.equal(u.mem.rockLock, null);
h.run(2);
const t = h.b.time;
h.run(4);
assert.ok(target.alive && u.alive && !bodyInKeys(target, u.rangeKeySet));
assert.equal(hits(h, u, target, t).length, 0);
done(h);
});
test(`${id} S1: damage stops outside the body range`, () => {
const { h, u, target } = setup(id, { skillIndex: 0 });
assert.ok(u.skill.active);
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
h.run(2);
const t = h.b.time;
h.run(4);
assert.equal(hits(h, u, target, t).length, 0);
done(h);
});
test(`${id} S2: an out-of-range combat kill waits for a candidate and restarts the trait ramp`, () => {
const { h, u, target } = setup(id, { outsideHp: id.endsWith('_a') ? 4000 : 5000, newcomer: true });
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
assert.ok(target.alive);
assert.ok(h.runUntil(() => !target.alive, 10));
assert.ok(drone(hits(h, u, target, 0).at(-1)), 'the independent drone delivers the killing blow');
if (!h.enemies().some(e => e !== target && e.alive)) {
h.step(); assert.equal(u.mem.rockLock, null, 'no out-of-range candidate is acquired');
}
assert.ok(h.runUntil(() => h.enemies().some(e => e !== target && e.alive), 10));
const other = h.enemies().find(e => e !== target && e.alive);
assert.ok(h.runUntil(() => hits(h, u, other, 0).some(drone), 2));
const first = hits(h, u, other, 0).find(drone);
approx(first.amount, u.s.atk * u.s.atkScaleMul * u.profile.funnel.init);
assert.equal(u.mem.rockLock, other);
done(h);
});
test(`${id} S2: explicit stop restores the normal multiplier and clears released state`, () => {
const { h, u, target } = setup(id, { staysOutside: true });
const saved = u.mem.rockDrone.mul, key = u.mem.rockDrone.key;
assert.ok(h.runUntil(() => !bodyInKeys(target, u.rangeKeySet), 10));
u.skill.stop();
assert.equal(u.profile[key], saved);
assert.equal(u.mem.rockDrone, null); assert.equal(u.mem.rockLock, null);
h.run(2); const t = h.b.time; h.run(4);
assert.equal(hits(h, u, target, t).length, 0);
done(h);
});
test(`${id} S2: caster combat death clears the released state`, () => {
const { h, u, target } = setup(id, { killer: true, staysOutside: true });
assert.ok(h.runUntil(() => !u.alive, 12));
assert.equal(u.skill.active, false); assert.equal(u.mem.rockDrone, null); assert.equal(u.mem.rockLock, null);
h.run(2); const t = h.b.time; h.run(3);
assert.equal(hits(h, u, target, t).length, 0);
done(h);
});
test(`${id} S2: live ASPD controls drone cadence; overload uses the live trait cap`, () => {
const { h, u } = setup(id, { stationaryLock: true });
const f = { ...u.profile.funnel }, scales = [];
h.b.on('damaged', c => { if (c.source === u && drone(c)) scales.push({ t: h.b.time, scale: c.amount / (u.s.atk * u.s.atkScaleMul) }); });
h.run(4);
h.b.addBuff(u, { key: 'test:aspd', mods: { aspd: 100 } });
const interval = u.s.interval, t = h.b.time;
h.run(4);
const fast = scales.filter(c => c.t > t + 1.3);
assert.ok(fast.length > 3);
fast.slice(1).forEach((c, i) => approx(c.t - fast[i].t, Math.ceil(interval * 30 - 1e-9) / 30));
h.run(15);
approx(scales.at(-1).scale, f.max * u.def.skill.bb.scale);
u.skill.stop();
assert.deepEqual(u.profile.funnel, f);
assert.ok(u.s.flags.stun, 'stopping during overload keeps the existing post-overload stun');
done(h);
});
}
for (const moduleId of ['none', 'uniequip_002_rockr']) {
test(`elite S2 ${moduleId}: the resolved trait supplies initial ramp and increment`, () => {
const { h, u, target } = setup('chess_char_2_10_b', { moduleId, stationaryLock: true });
const f = u.profile.funnel;
h.run(3);
hits(h, u, target, 0).filter(drone).forEach((c, i) => approx(c.amount, u.s.atk * u.s.atkScaleMul * (f.init + i * f.delta)));
assert.equal(f.init, moduleId === 'none' ? 0.2 : 0.35);
done(h);
});
}
for (const sameTarget of [false, true]) {
test(`S2: a pre-skill projectile at ${sameTarget ? 'the same' : 'another'} target cannot change the released ramp`, () => {
const h = makeBattle({ seed: 5, autoFinish: false, captureNoisy: true, hooks: ['damaged', 'attack'],
defs: { enemies: { old: enemyRec({ key: 'old', hp: 1e7, speed: 0, motion: 'FLY' }),
preferred: enemyRec({ key: 'preferred', hp: 1e7, speed: 0, motion: 'FLY', taunt: 5 }) } },
units: [{ chessId: 'chess_char_2_10_a', row: 10, col: 4, carryState: { sp: 0 } }],
enemies: [{ key: 'old', pos: [10, 6] }],
});
h.step(); // launch an ordinary shot, which has not landed yet
const u = h.unit('chess_char_2_10_a'), old = h.enemies()[0];
assert.equal(h.hooksOf('attack').length, 1); assert.equal(h.hooksOf('damaged').length, 0);
const target = sameTarget ? old : h.spawn('preferred', { pos: [10, 5] });
h.step(); // update the spatial index for the second target
u.skill.gainSp(999); u.skill.activate('test');
assert.equal(u.mem.rockLock, target);
h.run(2);
assert.ok(hits(h, u, old, 0).some(c => c.dmg.isAttack), 'the old shot really lands');
const ds = hits(h, u, target, 0).filter(drone);
assert.ok(ds.length >= 3);
ds.slice(0, 3).forEach((c, i) => approx(c.amount, u.s.atk * u.s.atkScaleMul * (u.profile.funnel.init + i * u.profile.funnel.delta)));
done(h);
});
}
test('S2: the shared targetability filter releases an unselectable lock and acquires a legal candidate', () => {
const { h, u, target } = setup('chess_char_2_10_a', { newcomer: true });
assert.ok(h.runUntil(() => h.enemies().length === 2, 10));
const other = h.enemies().find(e => e !== target);
h.b.addBuff(target, { key: 'test:untargetable', flags: { untargetable: true } });
h.run(2); const t = h.b.time; h.run(2);
assert.equal(hits(h, u, target, t).length, 0);
assert.equal(u.mem.rockLock, other);
assert.ok(hits(h, u, other, t).some(drone));
done(h);
});
for (const [id, moduleId] of [['chess_char_2_10_a', undefined], ['chess_char_2_10_b', 'none'], ['chess_char_2_10_b', 'uniequip_002_rockr']]) {
test(`${id} ${moduleId ?? 'normal'}: skill data, DEFAULT trigger, range and talent remain intact`, () => {
for (const skillIndex of [0, 1]) {
const raw = getDefaultSource().getChess(id, { skillIndex, moduleId }).raw;
const h = makeBattle({ seed: 5, autoFinish: false, timeLimit: 100, captureNoisy: true,
defs: { enemies: { e: enemyRec({ key: 'e', hp: 1e7, speed: 0 }) } },
units: [{ chessId: id, row: 10, col: 4, skillIndex, moduleId, carryState: { sp: 999 } }],
});
h.run(2);
const u = h.unit(id);
assert.equal(u.skill.active, false, 'DEFAULT waits for a target despite full SP');
assert.deepEqual([u.skill.id, u.skill.rule, u.skill.spCost, u.skill.initSp, u.skill.duration, u.skill.spType],
[raw.skill.skillId, raw.skill.trigger.rule, raw.skill.spCost, raw.skill.initSp, raw.skill.duration, 'time']);
assert.deepEqual(u.liveRangeGrid, raw.rangeGrid);
assert.deepEqual([u.profile.canHitFly, u.profile.dmgType, u.profile.attack, u.s.blockCnt], [true, 'arts', 'ranged', 1]);
h.spawn('e', { pos: [10, 6] });
assert.ok(h.runUntil(() => u.skill.active, 3));
approx(u.s.aspd - u.base.aspd, raw.skill.bb.attack_speed);
const t = raw.talents.find(v => v.index === 0).bb;
h.runUntil(() => h.b.time >= 15.1, 20);
approx(u.findBuff('rockr:rock').stacks, 1);
approx(u.findBuff('rockr:rock').mods.atkPct, t.atk);
u.skill.stop();
assert.deepEqual(u.liveRangeGrid, raw.rangeGrid);
h.runUntil(() => h.b.time >= t.interval * (t.max_stack_cnt + 1), 80);
assert.equal(u.findBuff('rockr:rock').stacks, t.max_stack_cnt);
done(h);
}
});
}
+26 -26
View File
@@ -1576,8 +1576,8 @@
"round": 5, "round": 5,
"seed": 4091762637, "seed": 4091762637,
"waveId": "act1autochess_05", "waveId": "act1autochess_05",
"time": 55.83, "time": 51.33,
"ticks": 1675, "ticks": 1540,
"reason": "cleared", "reason": "cleared",
"killed": 17, "killed": 17,
"total": 17, "total": 17,
@@ -1585,16 +1585,16 @@
"bossHpLeft": null, "bossHpLeft": null,
"rngDraws": 6, "rngDraws": 6,
"errors": {"count":0,"kinds":[]}, "errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":123047,"bossDmg":0,"heal":3612,"deaths":0,"layerGains":{}}}, "players": {"p1":{"killed":17,"total":17,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":123165,"bossDmg":0,"heal":3086,"deaths":0,"layerGains":{}}},
"units": [ "units": [
["p1",1,"op","chess_char_3_06_a",1,null,3577.42,1,6,0,15374,3173,0,15,1], ["p1",1,"op","chess_char_3_06_a",1,null,3577.42,1,6,1,11134,2647,0,15,1],
["p1",2,"op","chess_char_3_02_a",1,null,2102.1,1,7,7,38048,0,0,26,1], ["p1",2,"op","chess_char_3_02_a",1,null,2102.1,1,7,5,34859,0,0,25,1],
["p1",3,"op","chess_char_3_03_a",1,null,1515.8,1,5,0,0,0,0,0,0], ["p1",3,"op","chess_char_3_03_a",1,null,1515.8,1,5,0,0,0,0,0,0],
["p1",4,"op","chess_char_3_04_a",1,null,2050.4,1,8,1,28010,0,0,0,0], ["p1",4,"op","chess_char_3_04_a",1,null,2050.4,1,8,1,28010,0,0,0,0],
["p1",5,"op","chess_char_3_05_a",2,null,5978.83,1,9,4,20606,245,0,18,1], ["p1",5,"op","chess_char_3_05_a",2,null,5978.83,1,9,4,21699,245,0,18,1],
["p1",6,"op","chess_char_1_06_a",1,null,1250.7,1,3,4,15626,0,1411,30,1], ["p1",6,"op","chess_char_1_06_a",1,null,1250.7,1,3,3,14272,0,1172,27,1],
["p1",7,"op","chess_char_2_05_a",1,null,1552.32,1,4,0,0,0,2201,17,1], ["p1",7,"op","chess_char_2_05_a",1,null,1552.32,1,4,0,0,0,1914,15,1],
["p1",8,"op","chess_char_2_10_a",1,null,1185.8,1,10,0,5382,0,0,29,1], ["p1",8,"op","chess_char_2_10_a",1,null,1185.8,1,10,1,13191,0,0,29,1],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~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], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
["p1","~1","token","token_10031_swire2_gdtrap",null,null,1000,0,11,0,0,0,0,0,null], ["p1","~1","token","token_10031_swire2_gdtrap",null,null,1000,0,11,0,0,0,0,0,null],
@@ -1615,11 +1615,11 @@
["p1","~16","token","token_10031_swire2_gdtrap",null,null,1000,0,43,0,0,0,0,0,null], ["p1","~16","token","token_10031_swire2_gdtrap",null,null,1000,0,43,0,0,0,0,0,null],
["p1","~17","token","token_10031_swire2_gdtrap",null,null,1000,1,44,0,0,0,0,0,null] ["p1","~17","token","token_10031_swire2_gdtrap",null,null,1000,1,44,0,0,0,0,0,null]
], ],
"enemies": {"enemy_1116_liprr":[11,11,0,192,69696],"enemy_1116_liprr_2":[4,4,0,199,34560],"enemy_1118_lidbox_2":[2,2,0,3027,21888]}, "enemies": {"enemy_1116_liprr":[11,11,0,151,69696],"enemy_1116_liprr_2":[4,4,0,199,34560],"enemy_1118_lidbox_2":[2,2,0,2542,21888]},
"hooks": [1,44,1675,165,165,298,312,28,17,33,6,2,0,6349,15,14,17,0,1,17,0,0,0], "hooks": [1,44,1540,155,155,300,307,25,17,33,6,2,0,6079,15,13,17,0,1,17,0,0,0],
"events": {"atk":165,"deploy":25,"die":33,"dmg":312,"engage":5,"fx":104,"heal":28,"skill":10,"spawn":44,"status":43}, "events": {"atk":155,"deploy":25,"die":33,"dmg":307,"engage":5,"fx":118,"heal":25,"skill":10,"spawn":44,"status":43},
"fx": {"aoe":5,"coin":18,"counter":4,"explode":16,"liberate":1,"overload":1,"phase":3,"strike":38,"summon":17,"taunt":1}, "fx": {"aoe":2,"coin":17,"counter":4,"drone":23,"explode":16,"liberate":1,"overload":1,"phase":3,"strike":33,"summon":17,"taunt":1},
"snaps": "950a6182 a670e309 094b33b8 126a0a37 d2dc7eef 6d3cae8b" "snaps": "950a6182 a670e309 094b33b8 74d11085 3cad2a4f 6ec399b7"
}, },
"bond-victoriaShip-high": { "bond-victoriaShip-high": {
"about": "维多利亚 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_07_b chess_char_1_06_b chess_char_2_05_b chess_char_2_10_b chess_char_3_08_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld", "about": "维多利亚 high: tier 2 layers 999; chess_char_4_11_b chess_char_4_07_b chess_char_1_06_b chess_char_2_05_b chess_char_2_10_b chess_char_3_08_b chess_char_4_13_b chess_char_4_14_b token_10041_cathy_catsld token_10041_cathy_catsld",
@@ -1630,8 +1630,8 @@
"round": 10, "round": 10,
"seed": 11223320, "seed": 11223320,
"waveId": "act1autochess_h03", "waveId": "act1autochess_h03",
"time": 62.87, "time": 48.53,
"ticks": 1886, "ticks": 1456,
"reason": "cleared", "reason": "cleared",
"killed": 12, "killed": 12,
"total": 12, "total": 12,
@@ -1639,27 +1639,27 @@
"bossHpLeft": null, "bossHpLeft": null,
"rngDraws": 0, "rngDraws": 0,
"errors": {"count":0,"kinds":[]}, "errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":141088,"bossDmg":0,"heal":6750,"deaths":0,"layerGains":{}}}, "players": {"p1":{"killed":12,"total":12,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":0,"dmg":141088,"bossDmg":0,"heal":3463,"deaths":0,"layerGains":{}}},
"units": [ "units": [
["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2908.4,1,5,0,0,0,0,0,0], ["p1",1,"op","chess_char_4_11_b",1,"uniequip_002_cathy",2908.4,1,5,0,0,0,0,0,0],
["p1",2,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2621.3,1,7,0,0,0,0,0,0], ["p1",2,"op","chess_char_4_07_b",1,"uniequip_002_bpipe",2621.3,1,7,0,0,0,0,0,0],
["p1",3,"op","chess_char_1_06_b",1,"uniequip_002_vendla",1542.2,1,8,5,28240,0,1739,7,1], ["p1",3,"op","chess_char_1_06_b",1,"uniequip_002_vendla",1542.2,1,8,0,0,0,0,0,0],
["p1",4,"op","chess_char_2_05_b",1,"uniequip_002_harold",17910.32,1,10,0,0,5469,5011,10,1], ["p1",4,"op","chess_char_2_05_b",1,"uniequip_002_harold",17910.32,1,10,0,0,2609,3463,7,1],
["p1",5,"op","chess_char_2_10_b",1,"uniequip_002_rockr",1546.6,1,11,7,93826,1281,0,42,1], ["p1",5,"op","chess_char_2_10_b",1,"uniequip_002_rockr",1546.6,1,11,12,131060,854,0,25,1],
["p1",6,"op","chess_char_3_08_b",1,"uniequip_002_mint",2184.6,1,4,0,0,0,0,0,0], ["p1",6,"op","chess_char_3_08_b",1,"uniequip_002_mint",2184.6,1,4,0,0,0,0,0,0],
["p1",7,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",2187.9,1,6,0,0,0,0,0,0], ["p1",7,"op","chess_char_4_13_b",1,"uniequip_002_gnosis",2187.9,1,6,0,0,0,0,0,0],
["p1",8,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1788.6,1,9,0,19021,0,0,7,6], ["p1",8,"op","chess_char_4_14_b",1,"uniequip_002_lionhd",1788.6,1,9,0,10028,0,0,3,4],
["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null], ["p1",9,"token","token_10041_cathy_catsld",null,null,100,1,12,0,0,0,0,0,null],
["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null], ["p1",10,"token","token_10041_cathy_catsld",null,null,100,1,13,0,0,0,0,0,null],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~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], ["-","~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] ["-","~3","device","trap_1105_accrate",null,null,100,1,3,0,0,0,0,0,null]
], ],
"enemies": {"enemy_1005_yokai_2":[4,4,0,1532,15428],"enemy_1041_lazerd_2":[3,3,0,5218,44790],"enemy_1042_frostd":[5,5,0,0,80870]}, "enemies": {"enemy_1005_yokai_2":[4,4,0,854,15428],"enemy_1041_lazerd_2":[3,3,0,2609,44790],"enemy_1042_frostd":[5,5,0,0,80870]},
"hooks": [1,25,1886,79,79,76,76,12,12,12,9,9,0,4756,266,0,12,0,1,12,0,0,0], "hooks": [1,25,1456,42,42,62,62,7,12,12,6,5,0,3272,193,0,12,0,1,12,0,0,0],
"events": {"atk":79,"deploy":10,"die":12,"dmg":76,"engage":3,"fx":10,"heal":12,"skill":18,"spawn":25,"status":17}, "events": {"atk":42,"deploy":10,"die":12,"dmg":62,"engage":2,"fx":28,"heal":7,"skill":11,"spawn":25,"status":21},
"fx": {"counter":2,"explosion":6,"overload":1,"taunt":1}, "fx": {"drone":23,"explosion":4,"overload":1},
"snaps": "baf019b9 04dccd49 7607a313 d5443e4e 65c3d507 5c447217 1a74a703" "snaps": "baf019b9 824e0c60 89a36c73 fa125449 0a872c85"
}, },
"bond-visiShip-low": { "bond-visiShip-low": {
"about": "远见 low: tier 1 layers 1; chess_char_3_12_a chess_char_3_03_a chess_char_2_02_a chess_char_3_08_a chess_char_3_09_a chess_char_3_10_a chess_char_3_11_a chess_char_3_13_a token_10000_silent_healrb", "about": "远见 low: tier 1 layers 1; chess_char_3_12_a chess_char_3_03_a chess_char_2_02_a chess_char_3_08_a chess_char_3_09_a chess_char_3_10_a chess_char_3_11_a chess_char_3_13_a token_10000_silent_healrb",
+23 -23
View File
@@ -774,7 +774,7 @@
}, },
{ {
"round": 5, "round": 5,
"ai_0": [1,23,10,0,0,3,8,"7d798140",22,"deputShip 1/12, kazimierzShip 0/2, soloShip 1/4, swiftShip 1/6",47,16,6,34], "ai_0": [1,23,10,0,0,3,8,"7d798140",22,"deputShip 1/12, kazimierzShip 0/2, soloShip 1/4, swiftShip 1/6",50,16,3,34],
"ai_1": [1,45,9,0,0,2,8,"255ecf36",11,"kazimierzShip 0/11, lateranoShip 1/0, soloShip 1/0, suntShip 1/0, swiftShip 1/11",53,16,0,31], "ai_1": [1,45,9,0,0,2,8,"255ecf36",11,"kazimierzShip 0/11, lateranoShip 1/0, soloShip 1/0, suntShip 1/0, swiftShip 1/11",53,16,0,31],
"ai_2": [1,27,9,0,0,3,8,"d3b8e94d",12,"deputShip 1/2, siracusaShip 1/2, soloShip 1/8, yanShip 0/1",48,16,5,32] "ai_2": [1,27,9,0,0,3,8,"d3b8e94d",12,"deputShip 1/2, siracusaShip 1/2, soloShip 1/8, yanShip 0/1",48,16,5,32]
}, },
@@ -838,7 +838,7 @@
"title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"}, "title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"},
"trophies": 2, "trophies": 2,
"reward": 191, "reward": 191,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1764377,"gold":94,"itemsEquipped":10,"kills":219,"leaks":36,"lpLost":25,"merges":4,"perfectRounds":6,"refreshes":9}, "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1770279,"gold":94,"itemsEquipped":10,"kills":222,"leaks":33,"lpLost":25,"merges":4,"perfectRounds":6,"refreshes":9},
"lineup": [], "lineup": [],
"bonds": ["deputShip 0/46","emptyShip 0/4","indomShip 0/10","kazimierzShip 0/2","skillfulShip 0/6","soloShip 0/4","suntShip 0/18","swiftShip 0/73","victoriaShip 0/40","visiShip 0/22"] "bonds": ["deputShip 0/46","emptyShip 0/4","indomShip 0/10","kazimierzShip 0/2","skillfulShip 0/6","soloShip 0/4","suntShip 0/18","swiftShip 0/73","victoriaShip 0/40","visiShip 0/22"]
}, },
@@ -852,7 +852,7 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 3, "trophies": 3,
"reward": 340, "reward": 340,
"stats": {"activatedLayers":239,"bossDamage":1583201,"dmgDealt":6660572,"gold":139,"itemsEquipped":7,"kills":315,"leaks":88,"lpLost":44,"merges":6,"perfectRounds":7,"refreshes":15}, "stats": {"activatedLayers":239,"bossDamage":1583201,"dmgDealt":6660559,"gold":139,"itemsEquipped":7,"kills":312,"leaks":88,"lpLost":44,"merges":6,"perfectRounds":7,"refreshes":15},
"lineup": ["6_09_a@12,8","3_21_b@11,7[3_03_e_a+2_04_e_a]","6_08_a@11,8","3_16_b@10,6[5_01_e_a+1_02_e_a]","4_01_a@10,7","6_07_a@10,8[4_07_e_a]","2_17_b@9,6","5_06_a@9,9"], "lineup": ["6_09_a@12,8","3_21_b@11,7[3_03_e_a+2_04_e_a]","6_08_a@11,8","3_16_b@10,6[5_01_e_a+1_02_e_a]","4_01_a@10,7","6_07_a@10,8[4_07_e_a]","2_17_b@9,6","5_06_a@9,9"],
"bonds": ["indomShip 1/26","kazimierzShip 0/11","lateranoShip 1/57","miraShip 0/8","skillfulShip 1/55","soloShip 1/0","steadShip 2/101","suntShip 1/0","swiftShip 0/24","visiShip 0/10"] "bonds": ["indomShip 1/26","kazimierzShip 0/11","lateranoShip 1/57","miraShip 0/8","skillfulShip 1/55","soloShip 1/0","steadShip 2/101","suntShip 1/0","swiftShip 0/24","visiShip 0/10"]
}, },
@@ -989,7 +989,7 @@
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 3, "trophies": 3,
"reward": 250, "reward": 250,
"stats": {"activatedLayers":270,"bossDamage":556049,"dmgDealt":1982068,"gold":135,"itemsEquipped":22,"kills":293,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":23}, "stats": {"activatedLayers":270,"bossDamage":544037,"dmgDealt":1970056,"gold":135,"itemsEquipped":22,"kills":293,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":23},
"lineup": ["4_25_a@11,3","1_06_b@11,6","6_12_a@11,7[2_01_e_a]","3_20_a@10,3[1_05_e_b]","5_14_a@10,4[3_08_e_a+5_02_e_a]","4_22_b@9,4[4_11_e_a+3_02_e_b]","4_14_b@9,8[2_01_e_b+3_01_e_a]","3_11_b@9,9[3_07_e_a+4_03_e_b]"], "lineup": ["4_25_a@11,3","1_06_b@11,6","6_12_a@11,7[2_01_e_a]","3_20_a@10,3[1_05_e_b]","5_14_a@10,4[3_08_e_a+5_02_e_a]","4_22_b@9,4[4_11_e_a+3_02_e_b]","4_14_b@9,8[2_01_e_b+3_01_e_a]","3_11_b@9,9[3_07_e_a+4_03_e_b]"],
"bonds": ["deputShip 1/41","emptyShip 1/4","kjeragShip 1/33","preciShip 2/119","sargonShip 0/11","steadShip 0/8","swiftShip 1/73","victoriaShip 0/21"] "bonds": ["deputShip 1/41","emptyShip 1/4","kjeragShip 1/33","preciShip 2/119","sargonShip 0/11","steadShip 0/8","swiftShip 1/73","victoriaShip 0/21"]
}, },
@@ -1031,7 +1031,7 @@
"title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"}, "title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"},
"trophies": 3, "trophies": 3,
"reward": 250, "reward": 250,
"stats": {"activatedLayers":198,"bossDamage":280030,"dmgDealt":1858902,"gold":142,"itemsEquipped":31,"kills":283,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":13,"refreshes":34}, "stats": {"activatedLayers":198,"bossDamage":292043,"dmgDealt":1866910,"gold":142,"itemsEquipped":31,"kills":283,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":13,"refreshes":34},
"lineup": ["2_01_b@11,6[3_10_e_a+6_03_e_b]","6_01_a@11,7","4_07_a@11,8[4_11_e_a+2_01_e_a]","4_11_a@10,7[3_11_e_a+4_07_e_a]","6_06_a@10,8[4_06_e_b+5_01_e_a]","2_10_a@9,8","4_14_a@9,9[4_09_e_a+4_04_e_a]"], "lineup": ["2_01_b@11,6[3_10_e_a+6_03_e_b]","6_01_a@11,7","4_07_a@11,8[4_11_e_a+2_01_e_a]","4_11_a@10,7[3_11_e_a+4_07_e_a]","6_06_a@10,8[4_06_e_b+5_01_e_a]","2_10_a@9,8","4_14_a@9,9[4_09_e_a+4_04_e_a]"],
"bonds": ["deputShip 0/10","emptyShip 0/6","indomShip 1/0","preciShip 2/124","siracusaShip 0/6","swiftShip 0/32","victoriaShip 1/14","visiShip 1/60","yanShip 0/1"] "bonds": ["deputShip 0/10","emptyShip 0/6","indomShip 1/0","preciShip 2/124","siracusaShip 0/6","swiftShip 0/32","victoriaShip 1/14","visiShip 1/60","yanShip 0/1"]
} }
@@ -1104,42 +1104,42 @@
"round": 8, "round": 8,
"ai_0": [1,26,11,0,0,4,8,"c8fd6622",73,"arcaneShip 1/4, kazimierzShip 0/8, kjeragShip 1/12, preciShip 2/24, skillfulShip 0/5, suntShip 1/0, swiftShip 1/33",7,9,2,63], "ai_0": [1,26,11,0,0,4,8,"c8fd6622",73,"arcaneShip 1/4, kazimierzShip 0/8, kjeragShip 1/12, preciShip 2/24, skillfulShip 0/5, suntShip 1/0, swiftShip 1/33",7,9,2,63],
"ai_1": [1,11,11,0,0,4,8,"9a145335",54,"arcaneShip 0/2, deputShip 1/2, kazimierzShip 0/7, kjeragShip 1/11, preciShip 0/2, sargonShip 1/26, siracusaShip 0/6, skillfulShip 1/7, soloShip 1/2, steadShip 1/6, swiftShip 0/13",1,9,8,60], "ai_1": [1,11,11,0,0,4,8,"9a145335",54,"arcaneShip 0/2, deputShip 1/2, kazimierzShip 0/7, kjeragShip 1/11, preciShip 0/2, sargonShip 1/26, siracusaShip 0/6, skillfulShip 1/7, soloShip 1/2, steadShip 1/6, swiftShip 0/13",1,9,8,60],
"ai_2": [1,19,13,0,0,4,8,"b6617ece",118,"arcaneShip 1/8, deputShip 1/27, egirShip 0/6, kazimierzShip 0/2, kjeragShip 0/14, lateranoShip 0/2, raidShip 0/6, soloShip 1/12, steadShip 1/33, suntShip 1/2, swiftShip 0/4, victoriaShip 1/36, yanShip 0/10",8,9,1,66], "ai_2": [1,18,13,0,0,4,8,"b6617ece",118,"arcaneShip 1/8, deputShip 1/27, egirShip 0/6, kazimierzShip 0/2, kjeragShip 0/14, lateranoShip 0/2, raidShip 0/6, soloShip 1/12, steadShip 1/33, suntShip 1/2, swiftShip 0/4, victoriaShip 1/36, yanShip 0/10",7,9,2,66],
"ai_3": [0,0,11,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",0,9,9,59] "ai_3": [0,0,11,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",0,9,9,59]
}, },
{ {
"round": 9, "round": 9,
"ai_0": [1,26,12,0,2,4,8,"2ff9d045",108,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/19, preciShip 2/33, skillfulShip 1/10, suntShip 1/0, swiftShip 1/38",9,19,10,74], "ai_0": [1,25,12,0,2,4,8,"2ff9d045",108,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/19, preciShip 2/33, skillfulShip 1/10, suntShip 1/0, swiftShip 1/38",9,19,10,74],
"ai_1": [1,10,12,0,0,4,8,"08726f68",90,"arcaneShip 0/2, deputShip 2/6, kazimierzShip 0/7, kjeragShip 1/15, preciShip 0/2, sargonShip 1/48, siracusaShip 0/6, skillfulShip 1/11, soloShip 0/2, steadShip 1/10, swiftShip 0/13",14,19,5,72], "ai_1": [1,10,12,0,0,4,8,"08726f68",90,"arcaneShip 0/2, deputShip 2/6, kazimierzShip 0/7, kjeragShip 1/15, preciShip 0/2, sargonShip 1/48, siracusaShip 0/6, skillfulShip 1/11, soloShip 0/2, steadShip 1/10, swiftShip 0/13",14,19,5,72],
"ai_2": [1,19,12,0,1,4,8,"820dc650",123,"arcaneShip 1/12, deputShip 0/27, egirShip 0/8, indomShip 1/12, kazimierzShip 0/2, kjeragShip 0/20, lateranoShip 0/4, raidShip 0/6, soloShip 1/12, steadShip 1/45, suntShip 1/2, swiftShip 0/4, victoriaShip 1/40, yanShip 0/10",19,19,0,78], "ai_2": [1,18,12,0,1,4,8,"820dc650",123,"arcaneShip 1/12, deputShip 0/27, egirShip 0/8, indomShip 1/12, kazimierzShip 0/2, kjeragShip 0/20, lateranoShip 0/4, raidShip 0/6, soloShip 1/12, steadShip 1/45, suntShip 1/2, swiftShip 0/4, victoriaShip 1/40, yanShip 0/10",19,19,0,78],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59] "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
}, },
{ {
"round": 10, "round": 10,
"ai_0": [1,26,14,0,0,5,8,"9a50fda6",139,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/30, preciShip 2/38, skillfulShip 1/20, suntShip 1/0, swiftShip 1/43",25,25,0,88], "ai_0": [1,25,14,0,0,5,8,"9a50fda6",139,"arcaneShip 1/8, kazimierzShip 0/8, kjeragShip 1/30, preciShip 2/38, skillfulShip 1/20, suntShip 1/0, swiftShip 1/43",25,25,0,88],
"ai_1": [1,10,12,0,0,5,8,"07d01884",128,"arcaneShip 0/2, deputShip 2/10, kazimierzShip 0/7, kjeragShip 1/19, preciShip 0/2, sargonShip 1/70, siracusaShip 0/6, skillfulShip 1/15, soloShip 0/2, steadShip 1/14, swiftShip 0/13",25,25,0,83], "ai_1": [1,10,12,0,0,5,8,"07d01884",128,"arcaneShip 0/2, deputShip 2/10, kazimierzShip 0/7, kjeragShip 1/19, preciShip 0/2, sargonShip 1/70, siracusaShip 0/6, skillfulShip 1/15, soloShip 0/2, steadShip 1/14, swiftShip 0/13",25,25,0,83],
"ai_2": [1,19,13,0,0,5,8,"27c37702",162,"arcaneShip 0/12, deputShip 0/29, egirShip 0/8, indomShip 1/27, investShip 0/2, kazimierzShip 0/2, kjeragShip 1/22, lateranoShip 0/4, raidShip 0/6, soloShip 1/14, steadShip 1/53, suntShip 1/2, swiftShip 0/6, victoriaShip 1/44, yanShip 0/10",25,25,0,90], "ai_2": [1,18,13,0,0,5,8,"27c37702",167,"arcaneShip 0/12, deputShip 0/29, egirShip 0/8, indomShip 1/32, investShip 0/2, kazimierzShip 0/2, kjeragShip 1/22, lateranoShip 0/4, raidShip 0/6, soloShip 1/14, steadShip 1/53, suntShip 1/2, swiftShip 0/6, victoriaShip 1/44, yanShip 0/10",25,25,0,90],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59] "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
}, },
{ {
"round": 11, "round": 11,
"ai_0": [1,26,12,0,0,5,8,"3fb16be0",147,"arcaneShip 2/14, kazimierzShip 0/8, kjeragShip 1/42, preciShip 2/43, skillfulShip 0/20, suntShip 1/0, swiftShip 1/48",24,24,0,102], "ai_0": [1,25,12,0,0,5,8,"3fb16be0",147,"arcaneShip 2/14, kazimierzShip 0/8, kjeragShip 1/42, preciShip 2/43, skillfulShip 0/20, suntShip 1/0, swiftShip 1/48",24,24,0,102],
"ai_1": [1,7,12,0,0,5,8,"0f9e40f0",166,"arcaneShip 0/2, deputShip 2/14, kazimierzShip 0/7, kjeragShip 1/23, preciShip 0/2, sargonShip 1/92, siracusaShip 0/6, skillfulShip 1/19, soloShip 0/2, steadShip 1/18, swiftShip 0/13",20,24,4,93], "ai_1": [1,6,12,0,0,5,8,"0f9e40f0",166,"arcaneShip 0/2, deputShip 2/14, kazimierzShip 0/7, kjeragShip 1/23, preciShip 0/2, sargonShip 1/92, siracusaShip 0/6, skillfulShip 1/19, soloShip 0/2, steadShip 1/18, swiftShip 0/13",20,24,4,93],
"ai_2": [1,18,12,0,0,5,8,"170da7d8",171,"arcaneShip 2/20, deputShip 0/31, egirShip 0/8, indomShip 0/27, investShip 0/4, kazimierzShip 0/2, kjeragShip 1/26, lateranoShip 0/6, raidShip 0/6, soloShip 1/14, steadShip 1/59, suntShip 1/2, swiftShip 0/8, victoriaShip 1/50, yanShip 0/10",23,24,1,101], "ai_2": [1,15,12,0,0,5,8,"170da7d8",171,"arcaneShip 2/20, deputShip 0/31, egirShip 0/8, indomShip 0/32, investShip 0/4, kazimierzShip 0/2, kjeragShip 1/26, lateranoShip 0/6, raidShip 0/6, soloShip 1/14, steadShip 1/59, suntShip 1/2, swiftShip 0/8, victoriaShip 1/50, yanShip 0/10",20,24,4,101],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59] "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
}, },
{ {
"round": 12, "round": 12,
"ai_0": [1,16,12,0,0,6,8,"73f82373",178,"arcaneShip 1/14, kazimierzShip 0/8, kjeragShip 1/43, preciShip 2/48, skillfulShip 1/20, suntShip 1/0, swiftShip 1/53",9,47,38,113], "ai_0": [1,15,12,0,0,6,8,"73f82373",178,"arcaneShip 1/14, kazimierzShip 0/8, kjeragShip 1/43, preciShip 2/48, skillfulShip 1/20, suntShip 1/0, swiftShip 1/53",9,47,38,113],
"ai_1": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/18, kazimierzShip 0/7, kjeragShip 0/27, preciShip 0/4, sargonShip 0/105, siracusaShip 0/6, skillfulShip 0/23, soloShip 0/2, steadShip 0/22, swiftShip 0/13",12,47,35,104], "ai_1": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/18, kazimierzShip 0/7, kjeragShip 0/27, preciShip 0/4, sargonShip 0/105, siracusaShip 0/6, skillfulShip 0/23, soloShip 0/2, steadShip 0/22, swiftShip 0/13",12,47,35,104],
"ai_2": [1,8,12,0,0,5,8,"1ae72893",224,"arcaneShip 0/22, deputShip 1/35, egirShip 0/8, indomShip 0/27, investShip 0/6, kazimierzShip 0/2, kjeragShip 1/30, lateranoShip 0/6, preciShip 0/2, raidShip 0/6, sargonShip 0/2, soloShip 1/16, steadShip 1/67, suntShip 2/4, swiftShip 1/14, victoriaShip 1/58, yanShip 0/10",12,47,35,113], "ai_2": [1,5,12,0,0,5,8,"1ae72893",224,"arcaneShip 0/22, deputShip 1/35, egirShip 0/8, indomShip 0/32, investShip 0/6, kazimierzShip 0/2, kjeragShip 1/30, lateranoShip 0/6, preciShip 0/2, raidShip 0/6, sargonShip 0/2, soloShip 1/16, steadShip 1/67, suntShip 2/4, swiftShip 1/14, victoriaShip 1/58, yanShip 0/10",14,47,33,113],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59] "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
}, },
{ {
"round": 13, "round": 13,
"ai_0": [1,6,12,0,0,6,8,"be1b1985",168,"arcaneShip 2/16, kazimierzShip 0/8, kjeragShip 1/51, preciShip 2/48, skillfulShip 0/20, suntShip 1/0, swiftShip 1/53",18,39,21,123], "ai_0": [1,5,12,0,0,6,8,"be1b1985",168,"arcaneShip 2/16, kazimierzShip 0/8, kjeragShip 1/51, preciShip 2/48, skillfulShip 0/20, suntShip 1/0, swiftShip 1/53",18,39,21,123],
"ai_1": [0,0,0,0,0,6,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/18, kazimierzShip 0/7, kjeragShip 0/27, preciShip 0/4, sargonShip 0/105, siracusaShip 0/6, skillfulShip 0/23, soloShip 0/2, steadShip 0/22, swiftShip 0/13",null,null,null,104], "ai_1": [0,0,0,0,0,6,0,"811c9dc5",0,"arcaneShip 0/4, deputShip 0/18, kazimierzShip 0/7, kjeragShip 0/27, preciShip 0/4, sargonShip 0/105, siracusaShip 0/6, skillfulShip 0/23, soloShip 0/2, steadShip 0/22, swiftShip 0/13",null,null,null,104],
"ai_2": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/22, deputShip 0/39, egirShip 0/8, indomShip 0/27, investShip 0/8, kazimierzShip 0/2, kjeragShip 0/36, lateranoShip 0/6, preciShip 0/4, raidShip 0/6, sargonShip 0/4, soloShip 0/18, steadShip 0/75, suntShip 0/6, swiftShip 0/20, victoriaShip 0/66, yanShip 0/10",15,39,24,124], "ai_2": [0,0,12,0,0,6,0,"811c9dc5",0,"arcaneShip 0/22, deputShip 0/39, egirShip 0/8, indomShip 0/32, investShip 0/8, kazimierzShip 0/2, kjeragShip 0/34, lateranoShip 0/6, preciShip 0/4, raidShip 0/6, sargonShip 0/4, soloShip 0/20, steadShip 0/77, suntShip 0/6, swiftShip 0/20, victoriaShip 0/64, yanShip 0/10",18,39,21,124],
"ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59] "ai_3": [0,0,0,0,0,4,0,"811c9dc5",0,"arcaneShip 0/2, kjeragShip 0/5, preciShip 0/2, sargonShip 0/4, siracusaShip 0/7, skillfulShip 0/5, soloShip 0/12",null,null,null,59]
} }
], ],
@@ -1154,7 +1154,7 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"}, "title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 3, "trophies": 3,
"reward": 340, "reward": 340,
"stats": {"activatedLayers":174,"bossDamage":113104,"dmgDealt":5720406,"gold":135,"itemsEquipped":13,"kills":159,"leaks":90,"lpLost":39,"merges":5,"perfectRounds":7,"refreshes":11}, "stats": {"activatedLayers":174,"bossDamage":113104,"dmgDealt":5751950,"gold":135,"itemsEquipped":13,"kills":159,"leaks":90,"lpLost":40,"merges":5,"perfectRounds":7,"refreshes":11},
"lineup": ["4_13_b@12,4[3_06_e_a+3_04_e_b]","1_17_b@12,8","4_02_a@11,4","3_11_a@11,8[3_04_e_b]","4_10_a@10,4","4_22_b@10,7[2_04_e_b+5_07_e_b]","1_19_b@10,8","6_05_a@9,3[1_05_e_b]"], "lineup": ["4_13_b@12,4[3_06_e_a+3_04_e_b]","1_17_b@12,8","4_02_a@11,4","3_11_a@11,8[3_04_e_b]","4_10_a@10,4","4_22_b@10,7[2_04_e_b+5_07_e_b]","1_19_b@10,8","6_05_a@9,3[1_05_e_b]"],
"bonds": ["arcaneShip 2/22","kazimierzShip 0/8","kjeragShip 1/51","preciShip 2/48","skillfulShip 0/20","suntShip 1/0","swiftShip 1/53"] "bonds": ["arcaneShip 2/22","kazimierzShip 0/8","kjeragShip 1/51","preciShip 2/48","skillfulShip 0/20","suntShip 1/0","swiftShip 1/53"]
}, },
@@ -1168,7 +1168,7 @@
"title": {"id":"comment_6","name":"挥金如土","picId":"comment_icon_6","text":"消耗资金最多"}, "title": {"id":"comment_6","name":"挥金如土","picId":"comment_icon_6","text":"消耗资金最多"},
"trophies": 2, "trophies": 2,
"reward": 255, "reward": 255,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":4098745,"gold":104,"itemsEquipped":10,"kills":163,"leaks":59,"lpLost":29,"merges":0,"perfectRounds":7,"refreshes":19}, "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":4098745,"gold":104,"itemsEquipped":10,"kills":163,"leaks":59,"lpLost":30,"merges":0,"perfectRounds":7,"refreshes":19},
"lineup": [], "lineup": [],
"bonds": ["arcaneShip 0/4","deputShip 0/18","kazimierzShip 0/7","kjeragShip 0/27","preciShip 0/4","sargonShip 0/105","siracusaShip 0/6","skillfulShip 0/23","soloShip 0/2","steadShip 0/22","swiftShip 0/13"] "bonds": ["arcaneShip 0/4","deputShip 0/18","kazimierzShip 0/7","kjeragShip 0/27","preciShip 0/4","sargonShip 0/105","siracusaShip 0/6","skillfulShip 0/23","soloShip 0/2","steadShip 0/22","swiftShip 0/13"]
}, },
@@ -1182,9 +1182,9 @@
"title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"}, "title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"},
"trophies": 3, "trophies": 3,
"reward": 298, "reward": 298,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":5421510,"gold":124,"itemsEquipped":16,"kills":187,"leaks":75,"lpLost":30,"merges":6,"perfectRounds":5,"refreshes":15}, "stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":5515195,"gold":124,"itemsEquipped":16,"kills":187,"leaks":74,"lpLost":33,"merges":6,"perfectRounds":5,"refreshes":15},
"lineup": [], "lineup": [],
"bonds": ["arcaneShip 0/22","deputShip 0/39","egirShip 0/8","indomShip 0/27","investShip 0/8","kazimierzShip 0/2","kjeragShip 0/36","lateranoShip 0/6","preciShip 0/4","raidShip 0/6","sargonShip 0/4","soloShip 0/18","steadShip 0/75","suntShip 0/6","swiftShip 0/20","victoriaShip 0/66","yanShip 0/10"] "bonds": ["arcaneShip 0/22","deputShip 0/39","egirShip 0/8","indomShip 0/32","investShip 0/8","kazimierzShip 0/2","kjeragShip 0/34","lateranoShip 0/6","preciShip 0/4","raidShip 0/6","sargonShip 0/4","soloShip 0/20","steadShip 0/77","suntShip 0/6","swiftShip 0/20","victoriaShip 0/64","yanShip 0/10"]
}, },
"ai_3": { "ai_3": {
"alive": false, "alive": false,
@@ -1307,7 +1307,7 @@
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 4, "trophies": 4,
"reward": 400, "reward": 400,
"stats": {"activatedLayers":243,"bossDamage":1060837,"dmgDealt":4542277,"gold":130,"itemsEquipped":29,"kills":258,"leaks":15,"lpLost":12,"merges":5,"perfectRounds":11,"refreshes":16}, "stats": {"activatedLayers":243,"bossDamage":1060837,"dmgDealt":4533292,"gold":130,"itemsEquipped":29,"kills":258,"leaks":15,"lpLost":12,"merges":5,"perfectRounds":11,"refreshes":16},
"lineup": ["1_06_b@12,3[5_07_e_a+4_03_e_b]","1_02_b@12,4[5_02_e_a+4_11_e_a]","1_17_b@11,6[4_03_e_a+1_01_e_b]","3_11_b@11,7[3_01_e_a+3_02_e_a]","3_20_a@10,3[1_05_e_a+1_05_e_b]","1_10_b@10,8[4_02_e_a+6_11_e_a]","5_11_a@9,4[4_08_e_a+1_02_e_a]","5_12_a@9,9[4_10_e_a]"], "lineup": ["1_06_b@12,3[5_07_e_a+4_03_e_b]","1_02_b@12,4[5_02_e_a+4_11_e_a]","1_17_b@11,6[4_03_e_a+1_01_e_b]","3_11_b@11,7[3_01_e_a+3_02_e_a]","3_20_a@10,3[1_05_e_a+1_05_e_b]","1_10_b@10,8[4_02_e_a+6_11_e_a]","5_11_a@9,4[4_08_e_a+1_02_e_a]","5_12_a@9,9[4_10_e_a]"],
"bonds": ["arcaneShip 1/40","deputShip 1/20","indomShip 0/8","kjeragShip 1/56","preciShip 1/57","soloShip 1/14","steadShip 2/36","suntShip 2/20","victoriaShip 0/12","visiShip 0/8"] "bonds": ["arcaneShip 1/40","deputShip 1/20","indomShip 0/8","kjeragShip 1/56","preciShip 1/57","soloShip 1/14","steadShip 2/36","suntShip 2/20","victoriaShip 0/12","visiShip 0/8"]
} }
@@ -1820,7 +1820,7 @@
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"}, "title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 4, "trophies": 4,
"reward": 400, "reward": 400,
"stats": {"activatedLayers":159,"bossDamage":409390,"dmgDealt":3091440,"gold":133,"itemsEquipped":13,"kills":358,"leaks":40,"lpLost":16,"merges":3,"perfectRounds":7,"refreshes":27}, "stats": {"activatedLayers":159,"bossDamage":409390,"dmgDealt":3096240,"gold":133,"itemsEquipped":13,"kills":358,"leaks":40,"lpLost":16,"merges":3,"perfectRounds":7,"refreshes":27},
"lineup": ["3_20_a@12,5[5_03_e_a]","5_10_a@12,6","6_12_a@12,7[3_08_e_a]","3_11_a@11,8[5_02_e_a]","4_14_a@10,3","2_13_a@10,7[4_04_e_a+4_06_e_a]","4_18_a@10,8[4_11_e_a]","4_13_a@9,7[3_07_e_a+4_03_e_a]"], "lineup": ["3_20_a@12,5[5_03_e_a]","5_10_a@12,6","6_12_a@12,7[3_08_e_a]","3_11_a@11,8[5_02_e_a]","4_14_a@10,3","2_13_a@10,7[4_04_e_a+4_06_e_a]","4_18_a@10,8[4_11_e_a]","4_13_a@9,7[3_07_e_a+4_03_e_a]"],
"bonds": ["emptyShip 1/0","kazimierzShip 0/8","kjeragShip 1/23","miraShip 0/13","preciShip 2/54","siracusaShip 0/16","skillfulShip 1/27","soloShip 1/0","swiftShip 1/55","visiShip 1/0"] "bonds": ["emptyShip 1/0","kazimierzShip 0/8","kjeragShip 1/23","miraShip 0/13","preciShip 2/54","siracusaShip 0/16","skillfulShip 1/27","soloShip 1/0","swiftShip 1/55","visiShip 1/0"]
}, },
+59 -59
View File
@@ -198,25 +198,25 @@
"time": 110, "time": 110,
"ticks": 3300, "ticks": 3300,
"reason": "timeout", "reason": "timeout",
"killed": 16, "killed": 18,
"total": 36, "total": 36,
"unspawned": 0, "unspawned": 0,
"bossHpLeft": null, "bossHpLeft": null,
"rngDraws": 2, "rngDraws": 2,
"errors": {"count":0,"kinds":[]}, "errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":16,"total":36,"perfect":false,"leaks":20,"leaksUncounted":0,"coins":2,"dmg":156012,"bossDmg":0,"heal":25616,"deaths":13,"layerGains":{}}}, "players": {"p1":{"killed":18,"total":36,"perfect":false,"leaks":18,"leaksUncounted":0,"coins":2,"dmg":159502,"bossDmg":0,"heal":27165,"deaths":13,"layerGains":{}}},
"units": [ "units": [
["p1",1,"op","chess_char_2_08_a",1,null,0,0,8,2,21911,12843,196,1,1], ["p1",1,"op","chess_char_2_08_a",1,null,0,0,8,1,15989,12062,196,1,1],
["p1",2,"op","chess_char_2_17_a",1,null,0,0,6,0,5110,9174,1754,1,2], ["p1",2,"op","chess_char_2_17_a",1,null,0,0,6,1,2051,9174,1754,1,2],
["p1",3,"op","chess_char_2_18_a",0,null,0,0,9,3,43723,9313,225,15,1], ["p1",3,"op","chess_char_2_18_a",0,null,0,0,9,2,42927,9173,225,15,1],
["p1",4,"op","chess_char_2_07_a",1,null,0,0,10,1,7917,5223,0,9,1], ["p1",4,"op","chess_char_2_07_a",1,null,0,0,10,2,9245,7305,0,11,1],
["p1",5,"op","chess_char_2_09_a",1,null,2062.75,1,55,0,9315,6217,2145,22,1], ["p1",5,"op","chess_char_2_09_a",1,null,1746.49,1,55,0,9315,6537,2148,22,1],
["p1",6,"op","chess_char_2_11_a",1,null,0,0,12,0,20966,8657,198,27,1], ["p1",6,"op","chess_char_2_11_a",1,null,0,0,12,0,20294,8657,198,26,1],
["p1",7,"op","chess_char_2_13_a",1,null,3434.92,1,57,1,11476,4121,66,21,1], ["p1",7,"op","chess_char_2_13_a",1,null,3434.92,1,57,1,11476,4121,66,21,1],
["p1",8,"op","chess_char_2_16_a",1,null,3408.27,1,54,1,5941,5437,204,16,0], ["p1",8,"op","chess_char_2_16_a",1,null,3408.27,1,54,1,5941,5437,204,16,0],
["p1",9,"op","chess_char_2_12_a",1,null,0,0,52,4,9732,5937,0,25,2], ["p1",9,"op","chess_char_2_12_a",1,null,0,0,52,4,10827,5797,0,31,2],
["p1",10,"op","chess_char_2_06_a",0,null,0,0,4,0,0,3019,13905,24,7], ["p1",10,"op","chess_char_2_06_a",0,null,0,0,4,0,0,3707,15451,25,8],
["p1",11,"op","chess_char_2_10_a",1,null,0,0,5,0,13772,2892,0,52,1], ["p1",11,"op","chess_char_2_10_a",1,null,0,0,5,4,25288,2727,0,54,1],
["p1",12,"op","chess_char_2_14_a",1,null,2344.5,1,56,0,0,4885,6856,11,0], ["p1",12,"op","chess_char_2_14_a",1,null,2344.5,1,56,0,0,4885,6856,11,0],
["-","~1","device","trap_1105_accrate",null,null,100,1,1,0,0,0,0,0,null], ["-","~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], ["-","~2","device","trap_1105_accrate",null,null,100,1,2,0,0,0,0,0,null],
@@ -224,26 +224,26 @@
["p1","~1","token","token_10022_kazema_shadow",null,null,0,0,26,0,6149,1883,67,6,null] ["p1","~1","token","token_10022_kazema_shadow",null,null,0,0,26,0,6149,1883,67,6,null]
], ],
"enemies": { "enemies": {
"enemy_1001_bigbo": [1,0,1,7938,5123], "enemy_1001_bigbo": [1,0,1,7938,6359],
"enemy_1006_shield": [1,1,0,3550,10368], "enemy_1006_shield": [1,1,0,3684,10368],
"enemy_10118_ymgprc": [1,0,1,4447,8996], "enemy_10118_ymgprc": [1,0,1,5228,9330],
"enemy_1041_lazerd_2": [1,0,1,8962,6922], "enemy_1041_lazerd_2": [1,0,1,7858,7393],
"enemy_1118_lidbox_2": [1,1,0,5324,16416], "enemy_1118_lidbox_2": [1,1,0,4540,16416],
"enemy_1158_divman": [18,11,7,2847,72154], "enemy_1158_divman": [18,12,6,3784,73679],
"enemy_1160_hvyslr": [3,1,2,4530,27059], "enemy_1160_hvyslr": [3,1,2,4699,23403],
"enemy_1161_tidmag": [3,1,1,7540,12468], "enemy_1161_tidmag": [3,1,1,9394,12608],
"enemy_1169_duphlx_2": [1,0,1,782,7742], "enemy_1169_duphlx_2": [1,1,0,1019,10368],
"enemy_1200_msfjin_2": [1,0,1,0,26], "enemy_1200_msfjin_2": [1,0,1,0,27],
"enemy_1249_lysdb_2": [1,1,0,918,10368], "enemy_1249_lysdb_2": [1,1,0,715,10368],
"enemy_1299_ymkilr": [1,0,1,413,1850], "enemy_1299_ymkilr": [1,0,1,141,3305],
"enemy_1389_winbab_2": [1,0,1,3237,1400], "enemy_1389_winbab_2": [1,0,1,4326,1540],
"enemy_1504_cqbw": [1,0,1,3469,1372], "enemy_1504_cqbw": [1,0,1,2728,1508],
"enemy_2009_csaudc": [1,0,1,0,490] "enemy_2009_csaudc": [1,0,1,0,490]
}, },
"hooks": [1,57,3300,430,430,1504,1533,2010,30,49,18,18,0,11091,45,31,36,19,1,37,0,1,0], "hooks": [1,57,3300,445,445,1567,1602,2014,32,49,19,19,0,11565,42,34,36,17,1,36,0,3,0],
"events": {"atk":523,"bounty":1,"deploy":18,"die":30,"dmg":1435,"engage":11,"fx":43,"heal":98,"leak":19,"skill":36,"spawn":52,"status":161}, "events": {"atk":541,"bounty":1,"deploy":18,"die":32,"dmg":1502,"engage":11,"fx":88,"heal":101,"leak":17,"skill":38,"spawn":52,"status":170},
"fx": {"aoe":4,"burst":1,"camouflage":2,"counter":21,"dodge":3,"dollEnd":1,"explode":1,"liberate":1,"overload":1,"phase":1,"shield":2,"shieldBreak":1,"substitute":1,"summon":1,"takeoff":1,"telegraph":1}, "fx": {"aoe":4,"burst":3,"camouflage":2,"counter":13,"dodge":3,"dollEnd":1,"drone":51,"explode":1,"liberate":1,"overload":1,"phase":1,"shield":2,"shieldBreak":1,"substitute":1,"summon":1,"takeoff":1,"telegraph":1},
"snaps": "a449ec9d ed6b281b add3999f 9cbb2a3b 3709fe31 928ecc43 db354d83 c891dc9d 2a0b06dd c6c94f4c 9afcc9ab" "snaps": "a449ec9d ed6b281b add3999f e496ab4d 47f79015 f56aa952 0f6cee85 23b4af21 f0258fce b943a246 73241cae"
}, },
"roster-005": { "roster-005": {
"about": "pass 0 band 3: chess_char_2_07_b chess_char_2_08_b chess_char_2_09_b chess_char_2_11_b chess_char_2_12_b chess_char_2_19_a chess_char_2_01_b chess_char_2_02_b chess_char_2_04_b chess_char_2_05_b chess_char_2_06_b chess_char_2_10_b token_10000_silent_healrb", "about": "pass 0 band 3: chess_char_2_07_b chess_char_2_08_b chess_char_2_09_b chess_char_2_11_b chess_char_2_12_b chess_char_2_19_a chess_char_2_01_b chess_char_2_02_b chess_char_2_04_b chess_char_2_05_b chess_char_2_06_b chess_char_2_10_b token_10000_silent_healrb",
@@ -254,51 +254,51 @@
"round": 6, "round": 6,
"seed": 4076349243, "seed": 4076349243,
"waveId": "act1autochess_06", "waveId": "act1autochess_06",
"time": 130.93, "time": 131.77,
"ticks": 3928, "ticks": 3953,
"reason": "cleared", "reason": "cleared",
"killed": 84, "killed": 84,
"total": 84, "total": 84,
"unspawned": 0, "unspawned": 0,
"bossHpLeft": null, "bossHpLeft": null,
"rngDraws": 244, "rngDraws": 196,
"errors": {"count":0,"kinds":[]}, "errors": {"count":0,"kinds":[]},
"players": {"p1":{"killed":84,"total":84,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":12,"dmg":310935,"bossDmg":0,"heal":28984,"deaths":0,"layerGains":{}}}, "players": {"p1":{"killed":84,"total":84,"perfect":true,"leaks":0,"leaksUncounted":0,"coins":12,"dmg":313292,"bossDmg":0,"heal":29016,"deaths":0,"layerGains":{}}},
"units": [ "units": [
["p1",1,"op","chess_char_2_07_b",1,"uniequip_002_ghost",2983.9,1,2,0,0,1196,767,0,0], ["p1",1,"op","chess_char_2_07_b",1,"uniequip_002_ghost",2983.9,1,2,0,0,1594,1165,0,0],
["p1",2,"op","chess_char_2_08_b",1,"uniequip_002_bubble",3710.3,1,4,0,28,425,0,0,1], ["p1",2,"op","chess_char_2_08_b",1,"uniequip_002_bubble",3710.3,1,4,0,433,851,0,0,1],
["p1",3,"op","chess_char_2_09_b",1,"uniequip_002_humus",2346.3,1,6,27,79838,0,0,55,2], ["p1",3,"op","chess_char_2_09_b",1,"uniequip_002_humus",2346.3,1,6,15,51975,0,0,40,2],
["p1",4,"op","chess_char_2_11_b",1,"uniequip_002_kazema",2435.4,1,8,16,97508,11256,0,85,3], ["p1",4,"op","chess_char_2_11_b",1,"uniequip_002_kazema",2435.4,1,8,25,89051,10159,0,85,3],
["p1",5,"op","chess_char_2_12_b",1,"uniequip_002_gravel",1773.2,1,10,0,7308,6790,0,119,1], ["p1",5,"op","chess_char_2_12_b",1,"uniequip_002_gravel",1773.2,1,10,1,9406,6430,0,120,1],
["p1",6,"op","chess_char_2_19_a",1,null,1123.32,1,11,1,16246,1195,209,26,3], ["p1",6,"op","chess_char_2_19_a",1,null,1123.32,1,11,1,16246,1408,209,26,3],
["p1",7,"op","chess_char_2_01_b",1,"uniequip_002_excu",2360.6,1,12,20,35604,4195,0,22,1], ["p1",7,"op","chess_char_2_01_b",1,"uniequip_002_excu",2360.6,1,12,20,35604,3812,0,22,1],
["p1",8,"op","chess_char_2_02_b",1,"uniequip_002_silent",1775.4,1,1,0,0,0,6631,26,5], ["p1",8,"op","chess_char_2_02_b",1,"uniequip_002_silent",1775.4,1,1,0,0,0,7768,26,5],
["p1",9,"op","chess_char_2_04_b",1,"uniequip_002_grabds",1397,1,3,7,33691,2087,0,49,3], ["p1",9,"op","chess_char_2_04_b",1,"uniequip_002_grabds",1397,1,3,5,28585,2921,0,36,3],
["p1",10,"op","chess_char_2_05_b",1,"uniequip_002_harold",2168.32,1,5,0,0,405,9392,34,2], ["p1",10,"op","chess_char_2_05_b",1,"uniequip_002_harold",2168.32,1,5,0,0,405,10672,40,2],
["p1",11,"op","chess_char_2_06_b",0,"uniequip_002_papyrs",1802.9,1,7,0,0,442,8934,27,13], ["p1",11,"op","chess_char_2_06_b",0,"uniequip_002_papyrs",1802.9,1,7,0,0,442,6700,28,14],
["p1",12,"op","chess_char_2_10_b",1,"uniequip_002_rockr",1546.6,1,9,8,40712,993,0,102,2], ["p1",12,"op","chess_char_2_10_b",1,"uniequip_002_rockr",1546.6,1,9,11,81993,993,0,103,2],
["p1",13,"token","token_10000_silent_healrb",null,null,1000,0,102,0,0,0,3050,30,null] ["p1",13,"token","token_10000_silent_healrb",null,null,1000,0,102,0,0,0,2500,25,null]
], ],
"enemies": { "enemies": {
"enemy_10027_vtsk": [1,1,0,6613,24000], "enemy_10027_vtsk": [1,1,0,2556,24000],
"enemy_1006_shield_2": [1,1,0,0,8000], "enemy_1006_shield_2": [1,1,0,0,8000],
"enemy_10122_uacann_2": [1,1,0,4915,8000], "enemy_10122_uacann_2": [1,1,0,4915,8000],
"enemy_1042_frostd": [1,1,0,0,5200], "enemy_1042_frostd": [1,1,0,0,5200],
"enemy_1119_vofsd": [1,1,0,0,8800], "enemy_1119_vofsd": [1,1,0,0,8800],
"enemy_1170_dushld": [1,1,0,168,5600], "enemy_1170_dushld": [1,1,0,0,5600],
"enemy_1202_msfzhi": [1,1,0,0,2], "enemy_1202_msfzhi": [1,1,0,0,2],
"enemy_1249_lysdb_2": [15,15,0,97,72000], "enemy_1249_lysdb_2": [15,15,0,118,72000],
"enemy_1251_lysyta": [52,52,0,37,114400], "enemy_1251_lysyta": [52,52,0,139,114400],
"enemy_1299_ymkilr_2": [1,1,0,1145,8800], "enemy_1299_ymkilr_2": [1,1,0,1346,8800],
"enemy_1328_cbjedi": [6,6,0,4308,48000], "enemy_1328_cbjedi": [6,6,0,6253,48000],
"enemy_1402_tgshd_2": [1,1,0,688,10400], "enemy_1402_tgshd_2": [1,1,0,101,10400],
"enemy_1509_mousek": [1,1,0,6340,17600], "enemy_1509_mousek": [1,1,0,8540,17600],
"enemy_2010_csdcr": [1,1,0,1019,9600] "enemy_2010_csdcr": [1,1,0,1395,9600]
}, },
"hooks": [1,102,3928,653,653,1605,1597,597,84,90,36,35,0,27040,116,48,84,0,1,84,0,0,0], "hooks": [1,102,3953,632,632,1591,1579,742,84,90,37,36,0,27164,94,51,84,0,1,84,0,0,0],
"events": {"atk":819,"bounty":6,"deploy":18,"die":90,"dmg":1545,"engage":7,"fx":71,"heal":123,"skill":71,"spawn":97,"status":392}, "events": {"atk":764,"bounty":6,"deploy":18,"die":90,"dmg":1516,"engage":7,"fx":153,"heal":128,"skill":73,"spawn":97,"status":370},
"fx": {"counter":1,"explode":4,"expose":16,"overload":2,"phase":1,"shield":8,"shieldBreak":16,"sleep":6,"summon":5,"telegraph":5,"zone":7}, "fx": {"counter":2,"drone":79,"explode":4,"expose":20,"overload":2,"phase":1,"shield":5,"shieldBreak":16,"sleep":5,"summon":5,"telegraph":6,"zone":8},
"snaps": "ef546b03 cddbeb04 da6dbc8a 56061bd0 871d7588 425d6cc9 554ecd8b fa1afeca a9ba8e9d 1349294d 9b54b818 bbc6adbc 6ac20ed0" "snaps": "ef546b03 cddbeb04 85340532 1244cc85 93dbff28 11c61273 60a6624f e9e54c53 6590d889 8cfff799 8dd0aa7a ae35884a f9d57170 460ee6b0"
}, },
"roster-006": { "roster-006": {
"about": "pass 0 band 3: chess_char_2_17_b chess_char_2_18_b chess_char_3_06_a chess_char_2_13_b chess_char_2_16_b chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_3_05_a chess_char_2_14_b chess_char_2_19_b chess_char_3_01_a", "about": "pass 0 band 3: chess_char_2_17_b chess_char_2_18_b chess_char_3_06_a chess_char_2_13_b chess_char_2_16_b chess_char_3_02_a chess_char_3_03_a chess_char_3_04_a chess_char_3_05_a chess_char_2_14_b chess_char_2_19_b chess_char_3_01_a",