feedback7 dober: the bots plan a zero-range heavy guard (range 0-1: only its own tile) on a free enemy-road tile first (PR #339 by @IceCodeNew, that part only); golden: 9 of 18 matches move, no result flips

Seen: 蛇屠箱 and the seven other operators with the range 0-1 (角峰, 古米, 泡泡, 折桠, 菲莱, 塞雷娅, 余 — 16 chess records, all
melee blockers with block 3, the elite 角峰 4) block and hit only on the tile they stand on. The layout planner maximizes an exposure model whose
kill estimate saturates in a full layout; the tile then falls to a 1e-6 rng tie-break, so a guard stood off the road, where
it neither blocks nor hits (reproduced: planLayout with six of them on act2autochess_m04, seed 11 — 蛇屠箱 off the road; over
40 seeds of the eight stages 16 of 320 guards stood off the road: 11 because the eight guards outnumber the 7 free road tiles of
act1autochess_m03 / act2autochess_m02, 5 avoidably — after the change only the 11 are left).
Official: excel range_table "0-1" is the single grid (0,0).
Now: planLayoutSteps keeps the best road tile (model.ground) for a blocker whose deployed range grid (rangeRec: its
loadout's) is exactly one (0,0) grid, and takes it before the overall best; with no free road tile the best legal tile as
before (a high-ground 「可以放置于远程位」 blocker keeps its own preference first).
Not taken from the PR: the scarce-card penalty of buyScore, the item scoring (人事部文档 "only with nine 炎" contradicts the
official 部署上限变为 9), the 神秘 morph fit and the draft yield — AI heuristics with no official text, and the golden
swing they caused (a solo match that cleared the Hidden Core no longer did) came from them, not from the placement.
Golden (matches only; every other family unchanged, --twice identical): solo-FUNNY-1 (from R7: boss pool left 74740 -> 71550,
still a loss in R8), solo-NORMAL-1 (from R4: same win, Hidden Core cleared, team LP 26), solo-HARD-1 (from R4: boss pool left
3046117 -> 2940542), solo-ABYSS-1 (from R4: 2303334 -> 2281356, still a loss in R13), coop2-NORMAL-3 (from R4), coop2-HARD-4
(from R4), coop4-FUNNY-6 (from R3: virtualMs 128500 -> 127000), coop2-NORMAL-8-serverrun (from R3), coop2-NORMAL-70-diy (from
R6): rows, stats, lineups and rng draws differ, wins, losses and rounds passed do not.
botbench A/B on 12 seeds each (solo HARD / ABYSS, coop4 NORMAL / HARD): wins 1 / 0 / 11 / 3 both before and after, rounds
passed 13.00 / 11.92 / 14.00 / 13.00 -> 12.92 / 11.92 / 14.00 / 13.17, LP left 18.7 / 6.5 / 80.1 / 27.9 -> 18.8 / 7.4 / 83.7 / 28.0.
Tests: bot.test.js — the PR's saturated-layout case (蛇屠箱 blocks and hits only on a road tile, a real battle on both tiles;
the road full: a legal fallback) and every stage over 40 seeds (the eight guards fill min(8, free road tiles) road tiles);
both fail on the parent.
This commit is contained in:
IceCodeNew authored and sganggs committed 2026-10-08 20:58:20 +08:00
1 parent 56a7b918a9
commit e63214571d
5 files changed
+134 -72

No files matched your search

+67 -67
View File
@@ -16,7 +16,7 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m01","bossId":"boss_5","hiddenBossId":null,"factions":["TIMES","DOT","INVISIBLE"]},
"end": {"victory":false,"roundsPassed":8,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":74740,"virtualMs":68100},
"end": {"victory":false,"roundsPassed":8,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":71550,"virtualMs":68100},
"rng": {"setup":16,"shop":81,"waves":0,"draft":0,"bots":5205,"meta":0},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
@@ -26,10 +26,10 @@
{"round":4,"ai_0":[1,27,7,0,0,3,8,"12cbee9d",2,"indomShip 1/2, preciShip 0/2, sargonShip 0/4",10,10,0,21]},
{"round":5,"ai_0":[1,27,8,0,0,3,8,"bea79fc5",3,"indomShip 2/3, kjeragShip 1/0, preciShip 0/2, sargonShip 0/4",53,53,0,29]},
{"round":6,"ai_0":[1,27,9,0,0,4,8,"b6051456",15,"indomShip 2/4, kjeragShip 1/3, preciShip 0/2, sargonShip 0/4, steadShip 1/8",28,28,0,39]},
{"round":7,"ai_0":[1,27,10,0,0,4,8,"bc01603b",31,"indomShip 2/5, kjeragShip 1/7, preciShip 0/2, sargonShip 0/4, steadShip 2/19",27,27,0,49]},
{"round":7,"ai_0":[1,27,10,0,0,4,8,"e9e84720",24,"indomShip 2/5, kjeragShip 1/3, preciShip 0/2, sargonShip 0/4, steadShip 2/16",27,27,0,49]},
{
"round": 8,
"ai_0": [1,27,11,0,0,4,8,"144e1f0b",44,"deputShip 1/2, emptyShip 1/2, indomShip 0/5, kjeragShip 1/10, preciShip 0/2, sargonShip 0/4, steadShip 2/28, swiftShip 1/2",14,14,0,58]
"ai_0": [1,27,11,0,0,4,8,"144e1f0b",37,"deputShip 1/2, emptyShip 1/2, indomShip 0/5, kjeragShip 1/6, preciShip 0/2, sargonShip 0/4, steadShip 2/25, swiftShip 1/2",14,14,0,58]
}
],
"players": {
@@ -43,9 +43,9 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 0,
"reward": 100,
"stats": {"activatedLayers":77,"bossDamage":125260,"dmgDealt":669067,"gold":71,"itemsEquipped":14,"kills":167,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":8,"refreshes":4},
"stats": {"activatedLayers":70,"bossDamage":128450,"dmgDealt":673512,"gold":71,"itemsEquipped":14,"kills":167,"leaks":0,"lpLost":0,"merges":2,"perfectRounds":8,"refreshes":4},
"lineup": ["2_14_a@12,3","1_13_a@11,3","3_14_a@11,8[5_02_e_b+2_01_e_a]","3_10_a@10,3","3_16_a@10,4[3_03_e_a+2_04_e_a]","5_14_a@10,7[4_08_e_a+4_05_e_a]","3_05_a@10,8","3_20_b@9,8[5_02_e_b+1_01_e_a]"],
"bonds": ["deputShip 2/9","emptyShip 1/6","indomShip 0/5","kjeragShip 1/17","preciShip 0/2","sargonShip 0/8","steadShip 1/39","swiftShip 1/6"]
"bonds": ["deputShip 2/9","emptyShip 1/6","indomShip 0/5","kjeragShip 1/13","preciShip 0/2","sargonShip 0/8","steadShip 1/36","swiftShip 1/6"]
}
}
},
@@ -106,7 +106,7 @@
{"round":1,"ai_0":[1,27,4,0,0,1,2,"cc1bac8f",0,"sargonShip 0/2, soloShip 1/0",5,5,0,4]},
{"round":2,"ai_0":[1,27,5,0,0,1,4,"eee78fe4",0,"kazimierzShip 0/2, sargonShip 0/4, soloShip 1/0, swiftShip 0/2",10,10,0,9]},
{"round":3,"ai_0":[1,27,6,0,0,1,6,"a5dafe29",1,"kazimierzShip 0/2, sargonShip 0/8, soloShip 1/1, swiftShip 0/2",8,8,0,15]},
{"round":4,"ai_0":[1,27,7,0,0,2,8,"3fbb6d23",2,"kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, soloShip 1/2, steadShip 0/2, swiftShip 0/4",8,8,0,22]},
{"round":4,"ai_0":[1,27,7,0,0,2,8,"71c18729",2,"kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, soloShip 1/2, steadShip 0/2, swiftShip 0/4",8,8,0,22]},
{
"round": 5,
"ai_0": [1,27,8,0,2,2,8,"7df835b1",9,"kazimierzShip 0/8, kjeragShip 0/2, preciShip 1/0, sargonShip 0/8, siracusaShip 1/6, soloShip 1/3, steadShip 0/2, suntShip 1/0, swiftShip 0/8",21,21,0,29]
@@ -246,49 +246,49 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_8","factions":["TIMES","DOT","INVISIBLE"]},
"end": {"victory":true,"roundsPassed":14,"hiddenReached":true,"hiddenCleared":false,"reason":"victory","teamLp":0,"bossPoolLeft":3046117,"virtualMs":113700},
"end": {"victory":true,"roundsPassed":14,"hiddenReached":true,"hiddenCleared":false,"reason":"victory","teamLp":0,"bossPoolLeft":2940542,"virtualMs":113700},
"rng": {"setup":25,"shop":254,"waves":0,"draft":42,"bots":8253,"meta":13},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
{"round":1,"ai_0":[1,27,4,0,0,1,2,"cc1bac8f",0,"sargonShip 0/2, soloShip 1/0",5,5,0,4]},
{"round":2,"ai_0":[1,27,5,0,0,1,4,"eee78fe4",0,"kazimierzShip 0/2, sargonShip 0/4, soloShip 1/0, swiftShip 0/2",10,10,0,9]},
{"round":3,"ai_0":[1,27,6,0,1,1,6,"d5f9d956",1,"kazimierzShip 0/2, sargonShip 0/8, soloShip 1/1, swiftShip 0/2",11,11,0,15]},
{"round":4,"ai_0":[1,27,8,0,1,2,8,"247bff16",4,"kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, soloShip 1/1, steadShip 1/3, swiftShip 0/4",11,11,0,23]},
{"round":4,"ai_0":[1,27,8,0,1,2,8,"9e01b865",4,"kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, soloShip 1/1, steadShip 1/3, swiftShip 0/4",11,11,0,23]},
{
"round": 5,
"ai_0": [1,27,9,0,0,3,8,"98f10fe1",11,"kazimierzShip 0/8, kjeragShip 0/2, sargonShip 0/8, siracusaShip 1/6, soloShip 1/1, steadShip 1/4, suntShip 1/0, swiftShip 0/8",21,21,0,32]
"ai_0": [1,27,9,0,0,3,8,"e78a56a0",11,"kazimierzShip 0/8, kjeragShip 0/2, sargonShip 0/8, siracusaShip 1/6, soloShip 1/1, steadShip 1/4, suntShip 1/0, swiftShip 0/8",21,21,0,32]
},
{
"round": 6,
"ai_0": [1,27,9,0,0,3,8,"3b1cee08",42,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/16, sargonShip 0/8, siracusaShip 1/17, soloShip 1/1, steadShip 1/8, suntShip 1/0, swiftShip 0/8",56,56,0,41]
"ai_0": [1,27,9,0,0,3,8,"615734b9",34,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/10, sargonShip 0/8, siracusaShip 1/17, soloShip 1/1, steadShip 1/6, suntShip 1/0, swiftShip 0/8",56,56,0,41]
},
{
"round": 7,
"ai_0": [1,27,10,0,0,4,8,"a80ad2e7",64,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/30, sargonShip 0/8, siracusaShip 1/23, soloShip 1/1, steadShip 1/10, suntShip 1/0, swiftShip 0/8",28,28,0,52]
"ai_0": [1,27,10,0,0,4,8,"a80ad2e7",54,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/24, sargonShip 0/8, siracusaShip 1/21, soloShip 1/1, steadShip 1/8, suntShip 1/0, swiftShip 0/8",28,28,0,52]
},
{
"round": 8,
"ai_0": [1,27,11,0,0,4,8,"811212e1",89,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/42, sargonShip 0/8, siracusaShip 1/33, soloShip 1/1, steadShip 0/10, suntShip 1/0, swiftShip 1/13",19,19,0,62]
"ai_0": [1,27,11,0,0,4,8,"811212e1",81,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/36, sargonShip 0/8, siracusaShip 1/31, soloShip 1/1, steadShip 0/8, suntShip 1/0, swiftShip 1/13",19,19,0,62]
},
{
"round": 9,
"ai_0": [1,27,12,0,0,4,8,"04feac9c",148,"kazimierzShip 1/20, kjeragShip 0/2, preciShip 1/9, raidShip 1/55, sargonShip 0/8, siracusaShip 1/45, soloShip 1/1, steadShip 0/10, swiftShip 1/18",34,34,0,73]
"ai_0": [1,27,12,0,0,4,8,"04feac9c",141,"kazimierzShip 1/20, kjeragShip 0/2, preciShip 1/9, raidShip 1/48, sargonShip 0/8, siracusaShip 1/45, soloShip 1/1, steadShip 0/8, swiftShip 1/18",34,34,0,73]
},
{
"round": 10,
"ai_0": [1,27,12,0,0,5,8,"24bfb351",197,"kazimierzShip 1/36, kjeragShip 0/2, preciShip 1/18, raidShip 1/72, sargonShip 0/8, siracusaShip 1/47, soloShip 1/1, steadShip 0/10, swiftShip 1/23",24,24,0,85]
"ai_0": [1,27,12,0,0,5,8,"24bfb351",190,"kazimierzShip 1/36, kjeragShip 0/2, preciShip 1/18, raidShip 1/65, sargonShip 0/8, siracusaShip 1/47, soloShip 1/1, steadShip 0/8, swiftShip 1/23",24,24,0,85]
},
{
"round": 11,
"ai_0": [1,27,12,0,1,5,8,"4a74f628",257,"kazimierzShip 1/56, kjeragShip 0/2, preciShip 1/26, raidShip 1/86, sargonShip 0/8, siracusaShip 1/65, soloShip 1/1, steadShip 0/10, suntShip 1/0, swiftShip 1/23",34,34,0,96]
"ai_0": [1,27,12,0,1,5,8,"4a74f628",247,"kazimierzShip 1/56, kjeragShip 0/2, preciShip 1/26, raidShip 1/78, sargonShip 0/8, siracusaShip 1/63, soloShip 1/1, steadShip 0/8, suntShip 1/0, swiftShip 1/23",34,34,0,96]
},
{
"round": 12,
"ai_0": [1,27,13,0,0,6,8,"c9c17eab",335,"arcaneShip 1/0, kazimierzShip 1/84, kjeragShip 0/2, preciShip 1/42, raidShip 1/114, sargonShip 0/8, siracusaShip 1/71, soloShip 1/1, steadShip 0/10, suntShip 1/0, swiftShip 1/23",31,31,0,111]
"ai_0": [1,27,13,0,0,6,8,"c9c17eab",341,"arcaneShip 1/0, kazimierzShip 1/92, kjeragShip 0/2, preciShip 1/50, raidShip 1/106, sargonShip 0/8, siracusaShip 1/69, soloShip 1/1, steadShip 0/8, suntShip 1/0, swiftShip 1/23",31,31,0,111]
},
{
"round": 13,
"ai_0": [1,27,12,0,0,6,8,"b6fe7f54",432,"arcaneShip 1/6, kazimierzShip 1/104, kjeragShip 0/2, miraShip 1/3, preciShip 1/60, raidShip 1/134, sargonShip 0/8, siracusaShip 1/91, soloShip 1/1, steadShip 0/10, suntShip 1/0, swiftShip 1/33",115,115,0,125]
"ai_0": [1,27,12,0,0,6,8,"b6fe7f54",438,"arcaneShip 1/6, kazimierzShip 1/112, kjeragShip 0/2, miraShip 1/3, preciShip 1/68, raidShip 1/126, sargonShip 0/8, siracusaShip 1/89, soloShip 1/1, steadShip 0/8, suntShip 1/0, swiftShip 1/33",115,115,0,125]
}
],
"players": {
@@ -302,9 +302,9 @@
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 0,
"reward": 425,
"stats": {"activatedLayers":512,"bossDamage":1333883,"dmgDealt":3325553,"gold":151,"itemsEquipped":18,"kills":419,"leaks":0,"lpLost":0,"merges":4,"perfectRounds":13,"refreshes":21},
"stats": {"activatedLayers":518,"bossDamage":1439458,"dmgDealt":3433424,"gold":151,"itemsEquipped":18,"kills":420,"leaks":0,"lpLost":0,"merges":4,"perfectRounds":13,"refreshes":21},
"lineup": ["4_14_b@12,8[5_01_e_a+2_01_e_b]","3_19_a@11,7[3_02_e_b]","4_20_b@11,8[3_11_e_b+3_06_e_a]","4_10_a@10,6","6_17_a@10,8[4_10_e_b+4_05_e_a]","1_08_a@9,5[1_01_e_a+1_02_e_a]","5_07_a@9,6","1_19_b@9,9[3_08_e_a+3_01_e_a]"],
"bonds": ["arcaneShip 1/18","kazimierzShip 1/104","kjeragShip 0/2","miraShip 1/3","preciShip 1/80","raidShip 1/134","sargonShip 0/8","siracusaShip 1/119","soloShip 1/1","steadShip 0/10","suntShip 1/0","swiftShip 1/53"]
"bonds": ["arcaneShip 1/18","kazimierzShip 1/112","kjeragShip 0/2","miraShip 1/3","preciShip 1/88","raidShip 1/126","sargonShip 0/8","siracusaShip 1/117","soloShip 1/1","steadShip 0/8","suntShip 1/0","swiftShip 1/53"]
}
}
},
@@ -393,49 +393,49 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m03","bossId":"boss_5","hiddenBossId":"boss_8","factions":["TIMES","DOT","INVISIBLE"]},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":2303334,"virtualMs":107800},
"rng": {"setup":25,"shop":191,"waves":0,"draft":42,"bots":8022,"meta":6},
"end": {"victory":false,"roundsPassed":13,"hiddenReached":false,"hiddenCleared":false,"reason":"defeat","teamLp":0,"bossPoolLeft":2281356,"virtualMs":107800},
"rng": {"setup":25,"shop":191,"waves":0,"draft":42,"bots":8025,"meta":6},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
{"round":1,"ai_0":[1,27,4,0,0,1,2,"cc1bac8f",0,"sargonShip 0/2, soloShip 1/0",5,5,0,4]},
{"round":2,"ai_0":[1,27,5,0,0,1,4,"eee78fe4",0,"kazimierzShip 0/2, sargonShip 0/4, soloShip 1/0, swiftShip 0/2",10,10,0,9]},
{"round":3,"ai_0":[1,27,6,0,1,1,6,"d5f9d956",1,"kazimierzShip 0/2, sargonShip 0/8, soloShip 1/1, swiftShip 0/2",11,11,0,15]},
{"round":4,"ai_0":[1,27,8,0,1,2,8,"247bff16",4,"kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, soloShip 1/1, steadShip 1/3, swiftShip 0/4",11,11,0,23]},
{"round":4,"ai_0":[1,24,8,0,1,2,8,"dd7803fd",4,"kazimierzShip 0/4, kjeragShip 0/2, sargonShip 0/8, soloShip 1/1, steadShip 1/3, swiftShip 0/4",8,11,3,23]},
{
"round": 5,
"ai_0": [1,27,9,0,0,3,8,"1ca911b7",11,"kazimierzShip 0/8, kjeragShip 0/2, sargonShip 0/8, siracusaShip 1/6, soloShip 1/1, steadShip 1/4, suntShip 1/0, swiftShip 0/8",21,21,0,32]
"ai_0": [1,24,9,0,0,3,8,"ae71b9ff",11,"kazimierzShip 0/8, kjeragShip 0/2, sargonShip 0/8, siracusaShip 1/6, soloShip 1/1, steadShip 1/4, suntShip 1/0, swiftShip 0/8",21,21,0,32]
},
{
"round": 6,
"ai_0": [1,27,9,0,0,3,8,"3b1cee08",40,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/15, sargonShip 0/8, siracusaShip 1/17, soloShip 1/1, steadShip 1/7, suntShip 1/0, swiftShip 0/8",56,56,0,41]
"ai_0": [1,24,9,0,0,3,8,"daea6e02",40,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/15, sargonShip 0/8, siracusaShip 1/17, soloShip 1/1, steadShip 1/7, suntShip 1/0, swiftShip 0/8",56,56,0,41]
},
{
"round": 7,
"ai_0": [1,27,10,0,0,4,8,"a80ad2e7",66,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/32, sargonShip 0/8, siracusaShip 1/21, soloShip 1/1, steadShip 1/12, suntShip 1/0, swiftShip 0/8",28,28,0,52]
"ai_0": [1,24,10,0,0,4,8,"ff7e8839",62,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/29, sargonShip 0/8, siracusaShip 1/23, soloShip 1/1, steadShip 1/9, suntShip 1/0, swiftShip 0/8",28,28,0,52]
},
{
"round": 8,
"ai_0": [1,23,11,0,0,4,8,"168e9940",90,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/45, sargonShip 0/8, siracusaShip 1/31, soloShip 1/1, steadShip 0/12, suntShip 1/0, swiftShip 1/13",15,19,4,62]
"ai_0": [1,20,11,0,0,4,8,"cbdf568d",89,"kazimierzShip 0/8, kjeragShip 0/2, raidShip 1/42, sargonShip 0/8, siracusaShip 1/33, soloShip 1/1, steadShip 0/9, suntShip 1/0, swiftShip 1/13",15,19,4,62]
},
{
"round": 9,
"ai_0": [1,23,12,0,0,4,8,"7332bfff",154,"kazimierzShip 1/24, kjeragShip 0/2, preciShip 1/9, raidShip 1/61, sargonShip 0/8, siracusaShip 1/41, soloShip 1/1, steadShip 0/12, swiftShip 1/18",34,34,0,73]
"ai_0": [1,20,12,0,0,4,8,"04feac9c",158,"kazimierzShip 1/24, kjeragShip 0/2, preciShip 1/9, raidShip 1/59, sargonShip 0/8, siracusaShip 1/47, soloShip 1/1, steadShip 0/9, swiftShip 1/18",34,34,0,73]
},
{
"round": 10,
"ai_0": [1,23,12,0,0,5,8,"c76794a5",202,"kazimierzShip 1/40, kjeragShip 0/2, preciShip 1/18, raidShip 1/79, sargonShip 0/8, siracusaShip 1/41, soloShip 1/1, steadShip 0/12, swiftShip 1/23",24,24,0,85]
"ai_0": [1,20,12,0,0,5,8,"044ee349",188,"kazimierzShip 1/32, kjeragShip 0/2, preciShip 1/18, raidShip 1/65, sargonShip 0/8, siracusaShip 1/49, soloShip 1/1, steadShip 0/9, swiftShip 1/23",24,24,0,85]
},
{
"round": 11,
"ai_0": [1,18,12,0,1,5,8,"4a74f628",256,"kazimierzShip 1/60, kjeragShip 0/2, preciShip 1/26, raidShip 1/91, sargonShip 0/8, siracusaShip 1/55, soloShip 1/1, steadShip 0/12, suntShip 1/0, swiftShip 1/23",29,34,5,96]
"ai_0": [1,19,12,0,1,5,8,"9f83eeae",248,"kazimierzShip 1/52, kjeragShip 0/2, preciShip 1/26, raidShip 1/79, sargonShip 0/8, siracusaShip 1/67, soloShip 1/1, steadShip 0/9, suntShip 1/0, swiftShip 1/23",33,34,1,96]
},
{
"round": 12,
"ai_0": [1,8,13,0,0,6,8,"c9c17eab",350,"arcaneShip 1/0, kazimierzShip 1/96, kjeragShip 0/2, preciShip 1/50, raidShip 1/119, sargonShip 0/8, siracusaShip 1/61, soloShip 1/1, steadShip 0/12, suntShip 1/0, swiftShip 1/23",21,31,10,111]
"ai_0": [1,11,13,0,0,6,8,"5a5036c8",342,"arcaneShip 1/0, kazimierzShip 1/88, kjeragShip 0/2, preciShip 1/50, raidShip 1/107, sargonShip 0/8, siracusaShip 1/73, soloShip 1/1, steadShip 0/9, suntShip 1/0, swiftShip 1/23",23,31,8,111]
},
{
"round": 13,
"ai_0": [1,3,12,0,0,6,8,"c27bbe57",455,"arcaneShip 1/6, kazimierzShip 1/116, kjeragShip 0/2, miraShip 1/3, preciShip 1/68, raidShip 1/147, sargonShip 0/8, siracusaShip 1/81, soloShip 1/1, steadShip 0/12, suntShip 1/0, swiftShip 1/33",110,115,5,125]
"ai_0": [1,5,12,0,0,6,8,"a2dcf31f",455,"arcaneShip 1/6, kazimierzShip 1/108, kjeragShip 0/2, miraShip 1/3, preciShip 1/68, raidShip 1/143, sargonShip 0/8, siracusaShip 1/93, soloShip 1/1, steadShip 0/9, suntShip 1/0, swiftShip 1/33",109,115,6,125]
}
],
"players": {
@@ -449,9 +449,9 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 0,
"reward": 340,
"stats": {"activatedLayers":492,"bossDamage":696666,"dmgDealt":4051066,"gold":137,"itemsEquipped":16,"kills":398,"leaks":24,"lpLost":24,"merges":4,"perfectRounds":9,"refreshes":13},
"stats": {"activatedLayers":492,"bossDamage":718644,"dmgDealt":4104114,"gold":137,"itemsEquipped":16,"kills":399,"leaks":22,"lpLost":22,"merges":4,"perfectRounds":8,"refreshes":13},
"lineup": ["3_19_a@12,5[3_02_e_b]","4_14_b@12,7[2_01_e_a+5_01_e_a]","4_20_b@11,8[3_11_e_b+3_06_e_a]","4_10_a@10,3","5_07_a@10,7","6_17_a@10,8[4_10_e_b]","1_08_a@9,4[1_01_e_a+1_02_e_a]","1_19_b@9,9[3_08_e_a+3_01_e_a]"],
"bonds": ["arcaneShip 1/12","kazimierzShip 1/116","kjeragShip 0/2","miraShip 0/3","preciShip 1/78","raidShip 1/147","sargonShip 0/8","siracusaShip 1/95","soloShip 1/1","steadShip 0/12","suntShip 1/0","swiftShip 1/43"]
"bonds": ["arcaneShip 1/12","kazimierzShip 1/108","kjeragShip 0/2","miraShip 0/3","preciShip 1/78","raidShip 1/143","sargonShip 0/8","siracusaShip 1/107","soloShip 1/1","steadShip 0/9","suntShip 1/0","swiftShip 1/43"]
}
}
},
@@ -554,7 +554,7 @@
{
"round": 4,
"ai_0": [1,45,7,0,0,2,8,"ace8bd51",8,"preciShip 0/10, sargonShip 0/10, siracusaShip 0/6, soloShip 1/6, suntShip 1/0, swiftShip 1/2",7,7,0,22],
"ai_1": [1,28,7,0,0,2,8,"891e731b",4,"arcaneShip 0/2, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/12, sargonShip 0/10, soloShip 1/0, steadShip 1/2, swiftShip 1/2",7,7,0,22]
"ai_1": [1,28,7,0,0,2,8,"c8459d74",4,"arcaneShip 0/2, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/12, sargonShip 0/10, soloShip 1/0, steadShip 1/2, swiftShip 1/2",7,7,0,22]
},
{
"round": 5,
@@ -564,7 +564,7 @@
{
"round": 6,
"ai_0": [1,45,9,0,2,3,8,"df405a06",36,"preciShip 0/10, sargonShip 0/10, siracusaShip 1/18, skillfulShip 1/0, soloShip 1/6, suntShip 1/0, swiftShip 1/12",28,28,0,38],
"ai_1": [1,28,9,0,1,3,8,"557c8e96",6,"arcaneShip 0/4, indomShip 1/0, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/14, sargonShip 0/10, soloShip 1/0, steadShip 2/4, swiftShip 1/2",28,28,0,39]
"ai_1": [1,28,9,0,1,3,8,"c5b0a51f",6,"arcaneShip 0/4, indomShip 1/0, kazimierzShip 0/2, kjeragShip 0/2, preciShip 0/14, sargonShip 0/10, soloShip 1/0, steadShip 2/4, swiftShip 1/2",28,28,0,39]
},
{
"round": 7,
@@ -627,7 +627,7 @@
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 4,
"reward": 400,
"stats": {"activatedLayers":295,"bossDamage":1246114,"dmgDealt":3946458,"gold":139,"itemsEquipped":19,"kills":308,"leaks":22,"lpLost":18,"merges":5,"perfectRounds":7,"refreshes":13},
"stats": {"activatedLayers":295,"bossDamage":1246114,"dmgDealt":3945234,"gold":139,"itemsEquipped":19,"kills":308,"leaks":22,"lpLost":18,"merges":5,"perfectRounds":7,"refreshes":13},
"lineup": ["1_17_b@11,7","4_20_b@11,8[5_02_e_a+1_02_e_a]","4_10_a@10,5","6_19_a@10,7[4_08_e_b+4_06_e_a]","1_19_b@10,8[2_04_e_b+4_05_e_a]","5_02_a@9,7","5_20_a@9,8","1_08_b@9,9"],
"bonds": ["arcaneShip 1/28","indomShip 0/2","kazimierzShip 1/86","kjeragShip 0/10","miraShip 1/0","preciShip 2/120","sargonShip 0/10","siracusaShip 1/18","soloShip 1/0","steadShip 0/9","suntShip 1/0","swiftShip 1/43"]
}
@@ -664,48 +664,48 @@
},
{
"round": 4,
"ai_0": [1,25,8,0,1,2,8,"0c0d931c",5,"kazimierzShip 0/2, kjeragShip 0/2, soloShip 1/3, steadShip 2/2, swiftShip 0/2",12,12,0,23],
"ai_1": [1,26,8,0,1,2,8,"e105ab7b",2,"arcaneShip 0/2, kazimierzShip 0/2, preciShip 0/2, sargonShip 0/2, skillfulShip 1/0, soloShip 1/0, swiftShip 1/2",11,12,1,23]
"ai_0": [1,25,8,0,1,2,8,"30629777",5,"kazimierzShip 0/2, kjeragShip 0/2, soloShip 1/3, steadShip 2/2, swiftShip 0/2",12,12,0,23],
"ai_1": [1,25,8,0,1,2,8,"e105ab7b",2,"arcaneShip 0/2, kazimierzShip 0/2, preciShip 0/2, sargonShip 0/2, skillfulShip 1/0, soloShip 1/0, swiftShip 1/2",11,12,1,23]
},
{
"round": 5,
"ai_0": [1,25,9,0,0,3,8,"2d09744a",5,"kazimierzShip 0/2, kjeragShip 0/2, soloShip 1/3, steadShip 2/2, swiftShip 0/2",14,18,4,32],
"ai_1": [1,26,9,0,0,3,8,"f6ecac03",6,"arcaneShip 0/2, kazimierzShip 0/2, preciShip 0/2, sargonShip 0/4, skillfulShip 1/2, soloShip 1/0, swiftShip 1/4",18,18,0,32]
"ai_1": [1,25,9,0,0,3,8,"f6ecac03",6,"arcaneShip 0/2, kazimierzShip 0/2, preciShip 0/2, sargonShip 0/4, skillfulShip 1/2, soloShip 1/0, swiftShip 1/4",18,18,0,32]
},
{
"round": 6,
"ai_0": [1,25,9,0,0,3,8,"9fa40c6d",22,"kazimierzShip 0/2, kjeragShip 0/2, siracusaShip 1/6, skillfulShip 1/3, soloShip 1/3, steadShip 1/2, swiftShip 1/8",24,24,0,39],
"ai_1": [1,26,9,0,1,3,8,"7eef3a52",15,"arcaneShip 1/5, kazimierzShip 0/2, preciShip 0/2, sargonShip 0/4, skillfulShip 1/4, soloShip 1/0, swiftShip 1/6",24,24,0,42]
"ai_1": [1,25,9,0,1,3,8,"7eef3a52",15,"arcaneShip 1/5, kazimierzShip 0/2, preciShip 0/2, sargonShip 0/4, skillfulShip 1/4, soloShip 1/0, swiftShip 1/6",24,24,0,42]
},
{
"round": 7,
"ai_0": [1,25,10,0,0,4,8,"1ec7b320",17,"kazimierzShip 0/2, kjeragShip 0/2, siracusaShip 1/6, skillfulShip 1/6, soloShip 1/3, steadShip 2/2, swiftShip 0/8",26,28,2,49],
"ai_1": [1,26,11,0,1,4,8,"b417fbf1",19,"arcaneShip 1/8, kazimierzShip 0/2, preciShip 1/5, sargonShip 0/8, skillfulShip 1/6, swiftShip 0/8",28,28,0,54]
"ai_0": [1,25,10,0,0,4,8,"12955a40",17,"kazimierzShip 0/2, kjeragShip 0/2, siracusaShip 1/6, skillfulShip 1/6, soloShip 1/3, steadShip 2/2, swiftShip 0/8",27,28,1,49],
"ai_1": [1,25,11,0,1,4,8,"b417fbf1",19,"arcaneShip 1/8, kazimierzShip 0/2, preciShip 1/5, sargonShip 0/8, skillfulShip 1/6, swiftShip 0/8",28,28,0,54]
},
{
"round": 8,
"ai_0": [1,25,11,0,0,4,8,"24603f24",20,"kazimierzShip 0/2, kjeragShip 0/2, siracusaShip 1/6, skillfulShip 1/6, soloShip 1/3, steadShip 2/5, swiftShip 0/8",5,9,4,60],
"ai_1": [1,26,12,0,0,4,8,"33304c67",63,"arcaneShip 1/8, kazimierzShip 0/2, preciShip 1/19, sargonShip 1/25, skillfulShip 1/11, soloShip 1/0, swiftShip 0/8",9,9,0,65]
"ai_1": [1,25,12,0,0,4,8,"33304c67",63,"arcaneShip 1/8, kazimierzShip 0/2, preciShip 1/19, sargonShip 1/25, skillfulShip 1/11, soloShip 1/0, swiftShip 0/8",9,9,0,65]
},
{
"round": 9,
"ai_0": [1,19,12,0,4,4,8,"aea06001",50,"deputShip 1/2, kazimierzShip 0/2, kjeragShip 0/2, siracusaShip 1/22, skillfulShip 1/8, soloShip 1/5, steadShip 1/11, suntShip 1/2, swiftShip 0/8",14,23,9,72],
"ai_1": [1,26,12,0,2,4,8,"1bc5731a",105,"arcaneShip 2/14, kazimierzShip 0/2, preciShip 1/33, sargonShip 1/42, skillfulShip 1/16, suntShip 1/0, swiftShip 0/8",23,23,0,77]
"ai_1": [1,25,12,0,2,4,8,"1bc5731a",105,"arcaneShip 2/14, kazimierzShip 0/2, preciShip 1/33, sargonShip 1/42, skillfulShip 1/16, suntShip 1/0, swiftShip 0/8",23,23,0,77]
},
{
"round": 10,
"ai_0": [1,19,16,0,0,5,8,"9b53670a",75,"deputShip 1/4, kazimierzShip 0/2, kjeragShip 0/2, siracusaShip 1/34, skillfulShip 1/10, soloShip 1/7, steadShip 1/16, suntShip 1/4, swiftShip 0/8",5,8,3,88],
"ai_1": [1,26,14,0,4,5,8,"aa0f2565",129,"arcaneShip 2/16, kazimierzShip 0/2, preciShip 1/43, sargonShip 1/52, skillfulShip 1/18, suntShip 1/0, swiftShip 0/8",8,8,0,91]
"ai_1": [1,25,14,0,4,5,8,"aa0f2565",129,"arcaneShip 2/16, kazimierzShip 0/2, preciShip 1/43, sargonShip 1/52, skillfulShip 1/18, suntShip 1/0, swiftShip 0/8",8,8,0,91]
},
{
"round": 11,
"ai_0": [1,9,12,0,1,5,8,"9a1f89d4",88,"deputShip 1/6, emptyShip 1/2, kazimierzShip 0/2, kjeragShip 0/2, raidShip 1/3, siracusaShip 1/50, skillfulShip 1/12, soloShip 1/9, steadShip 0/16, suntShip 1/6, swiftShip 0/8",13,27,14,100],
"ai_1": [1,16,16,0,2,5,8,"b7d6fa51",183,"arcaneShip 2/26, kazimierzShip 0/2, preciShip 1/64, sargonShip 1/73, skillfulShip 1/20, suntShip 1/0, swiftShip 0/8",13,27,14,108]
"ai_1": [1,15,16,0,2,5,8,"b7d6fa51",183,"arcaneShip 2/26, kazimierzShip 0/2, preciShip 1/64, sargonShip 1/73, skillfulShip 1/20, suntShip 1/0, swiftShip 0/8",13,27,14,108]
},
{
"round": 12,
"ai_0": [0,0,13,0,0,6,0,"811c9dc5",0,"deputShip 0/6, emptyShip 0/2, kazimierzShip 0/2, kjeragShip 0/2, raidShip 0/3, siracusaShip 0/52, skillfulShip 0/12, soloShip 0/9, steadShip 0/16, suntShip 0/6, swiftShip 0/8",24,50,26,113],
"ai_1": [1,6,14,0,2,6,8,"41045310",233,"arcaneShip 2/26, kazimierzShip 0/2, preciShip 1/88, sargonShip 1/97, skillfulShip 1/22, suntShip 1/0, swiftShip 0/8",36,50,14,121]
"ai_1": [1,5,14,0,2,6,8,"41045310",233,"arcaneShip 2/26, kazimierzShip 0/2, preciShip 1/88, sargonShip 1/97, skillfulShip 1/22, suntShip 1/0, swiftShip 0/8",36,50,14,121]
},
{
"round": 13,
@@ -724,7 +724,7 @@
"title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"},
"trophies": 2,
"reward": 255,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1653549,"gold":113,"itemsEquipped":9,"kills":172,"leaks":62,"lpLost":26,"merges":3,"perfectRounds":5,"refreshes":13},
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":1658780,"gold":113,"itemsEquipped":9,"kills":172,"leaks":61,"lpLost":26,"merges":3,"perfectRounds":5,"refreshes":13},
"lineup": [],
"bonds": ["deputShip 0/6","emptyShip 0/2","kazimierzShip 0/2","kjeragShip 0/2","raidShip 0/3","siracusaShip 0/52","skillfulShip 0/12","soloShip 0/9","steadShip 0/16","suntShip 0/6","swiftShip 0/8"]
},
@@ -738,7 +738,7 @@
"title": {"id":"comment_5","name":"万事俱备","picId":"comment_icon_5","text":"装备配发数量最多"},
"trophies": 3,
"reward": 298,
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":3769501,"gold":135,"itemsEquipped":18,"kills":260,"leaks":38,"lpLost":29,"merges":3,"perfectRounds":9,"refreshes":16},
"stats": {"activatedLayers":0,"bossDamage":0,"dmgDealt":3753481,"gold":135,"itemsEquipped":18,"kills":259,"leaks":38,"lpLost":30,"merges":3,"perfectRounds":9,"refreshes":16},
"lineup": [],
"bonds": ["arcaneShip 0/30","kazimierzShip 0/2","preciShip 0/93","sargonShip 0/102","skillfulShip 0/24","swiftShip 0/8"]
}
@@ -886,7 +886,7 @@
"combat": "client",
"boost": null,
"setup": {"stageId":"act1autochess_m01","bossId":"boss_3","hiddenBossId":null,"factions":["TIMES","ELEMENT","REFLECTION"]},
"end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":130,"bossPoolLeft":0,"virtualMs":128500},
"end": {"victory":true,"roundsPassed":14,"hiddenReached":false,"hiddenCleared":false,"reason":"victory","teamLp":130,"bossPoolLeft":0,"virtualMs":127000},
"rng": {"setup":16,"shop":846,"waves":0,"draft":25,"bots":35900,"meta":27},
"errors": {"engine":0,"logged":0,"sim":0,"dispatcher":0},
"rounds": [
@@ -906,7 +906,7 @@
},
{
"round": 3,
"ai_0": [1,26,6,0,0,1,6,"762d2060",4,"deputShip 1/4, kjeragShip 0/2, sargonShip 0/13, steadShip 0/2",6,6,0,15],
"ai_0": [1,26,6,0,0,1,6,"21f68a64",4,"deputShip 1/4, kjeragShip 0/2, sargonShip 0/13, steadShip 0/2",6,6,0,15],
"ai_1": [1,45,6,0,0,1,7,"24a9876d",0,"preciShip 0/2",6,6,0,15],
"ai_2": [1,28,6,0,0,1,6,"683d4946",2,"sargonShip 0/8, siracusaShip 1/2",6,6,0,15],
"ai_3": [1,31,6,0,0,1,6,"3694ec95",4,"preciShip 1/4, siracusaShip 0/3, yanShip 0/1",6,6,0,15]
@@ -929,54 +929,54 @@
"round": 6,
"ai_0": [1,26,11,0,0,3,8,"5f2939f2",35,"deputShip 2/25, kjeragShip 0/2, sargonShip 0/15, steadShip 2/10",30,30,0,42],
"ai_1": [1,45,9,0,0,3,8,"2865599a",31,"deputShip 1/10, preciShip 0/4, sargonShip 0/2, siracusaShip 1/21, swiftShip 0/6",30,30,0,38],
"ai_2": [1,28,9,0,0,3,8,"a6f6c116",18,"sargonShip 0/8, siracusaShip 1/14, steadShip 2/4, swiftShip 0/6, yanShip 0/1",30,30,0,39],
"ai_2": [1,28,9,0,0,3,8,"20fd2a44",18,"sargonShip 0/8, siracusaShip 1/14, steadShip 2/4, swiftShip 0/6, yanShip 0/1",30,30,0,39],
"ai_3": [1,31,11,0,1,3,7,"ff70b795",38,"deputShip 1/6, kjeragShip 0/5, preciShip 1/24, siracusaShip 1/8, yanShip 0/1",30,30,0,41]
},
{
"round": 7,
"ai_0": [1,26,10,0,0,4,8,"76904904",71,"deputShip 2/32, kjeragShip 0/2, sargonShip 1/19, steadShip 2/20",29,29,0,53],
"ai_0": [1,26,10,0,0,4,8,"8efa00dc",75,"deputShip 2/32, kjeragShip 0/2, sargonShip 1/25, steadShip 2/18",29,29,0,53],
"ai_1": [1,45,10,0,0,4,8,"4aa3d84d",39,"deputShip 1/12, preciShip 0/4, sargonShip 0/2, siracusaShip 1/27, swiftShip 0/6",29,29,0,49],
"ai_2": [1,28,10,0,0,4,8,"7f56cec6",30,"deputShip 1/2, sargonShip 0/8, siracusaShip 1/18, steadShip 1/10, swiftShip 0/6, yanShip 0/1",29,29,0,50],
"ai_3": [1,31,11,0,0,4,8,"eb93ef9f",54,"deputShip 2/10, kjeragShip 0/5, preciShip 1/32, siracusaShip 1/12, yanShip 0/7",29,29,0,51]
},
{
"round": 8,
"ai_0": [1,26,11,0,0,4,8,"58d77de8",94,"deputShip 2/39, kjeragShip 0/7, sargonShip 1/23, steadShip 2/28, visiShip 1/4",15,15,0,62],
"ai_0": [1,26,11,0,0,4,8,"e2a24da0",104,"deputShip 2/39, kjeragShip 0/7, sargonShip 1/35, steadShip 2/26, visiShip 1/4",15,15,0,62],
"ai_1": [1,45,11,0,0,4,8,"6bb07588",74,"deputShip 1/14, preciShip 1/11, sargonShip 0/2, siracusaShip 1/36, swiftShip 1/13",15,15,0,60],
"ai_2": [1,28,11,0,0,4,8,"731b7931",59,"deputShip 1/4, sargonShip 0/8, siracusaShip 1/26, steadShip 1/16, swiftShip 1/13, yanShip 0/1",15,15,0,60],
"ai_3": [1,31,11,0,0,4,7,"5ec63e46",77,"deputShip 1/12, kjeragShip 0/5, preciShip 1/43, siracusaShip 1/22, yanShip 0/7",15,15,0,61]
},
{
"round": 9,
"ai_0": [1,26,12,0,0,4,8,"dcbc34d9",119,"deputShip 2/46, kjeragShip 0/7, sargonShip 1/27, steadShip 2/38, visiShip 1/8",30,30,0,75],
"ai_0": [1,26,12,0,0,4,8,"dcbc34d9",129,"deputShip 2/46, kjeragShip 0/7, sargonShip 1/39, steadShip 2/36, visiShip 1/8",30,30,0,75],
"ai_1": [1,45,12,0,0,4,8,"7121c5ba",115,"deputShip 2/18, emptyShip 1/4, preciShip 1/27, sargonShip 0/2, siracusaShip 1/44, swiftShip 1/22",30,30,0,71],
"ai_2": [1,28,12,0,0,4,8,"e97cc791",111,"deputShip 1/6, preciShip 1/31, sargonShip 0/8, siracusaShip 1/54, steadShip 0/16, swiftShip 1/20, yanShip 0/1",30,30,0,73],
"ai_3": [1,31,12,0,0,4,8,"db03c900",105,"deputShip 1/14, kjeragShip 0/5, preciShip 1/59, siracusaShip 1/32, yanShip 0/7",30,30,0,76]
},
{
"round": 10,
"ai_0": [1,26,12,0,2,5,8,"3152a1f4",147,"deputShip 2/53, kjeragShip 0/7, sargonShip 1/31, steadShip 1/46, visiShip 1/17",29,29,0,88],
"ai_0": [1,26,12,0,2,5,8,"3152a1f4",157,"deputShip 2/53, kjeragShip 0/7, sargonShip 1/43, steadShip 1/44, visiShip 1/17",29,29,0,88],
"ai_1": [1,45,12,0,0,5,8,"f74dcafb",151,"deputShip 2/22, emptyShip 1/8, preciShip 1/38, sargonShip 0/2, siracusaShip 1/52, swiftShip 1/31",29,29,0,81],
"ai_2": [1,28,12,0,0,5,8,"982bbf6e",139,"deputShip 1/8, preciShip 1/46, sargonShip 0/8, siracusaShip 1/58, steadShip 0/16, swiftShip 1/27, yanShip 0/1",29,29,0,84],
"ai_3": [1,31,12,0,0,5,8,"cd9b063c",118,"deputShip 0/14, kjeragShip 1/5, preciShip 1/73, siracusaShip 1/40, yanShip 0/7",29,29,0,89]
},
{
"round": 11,
"ai_0": [1,26,14,0,2,5,8,"69ce1996",166,"deputShip 1/59, emptyShip 1/2, kjeragShip 0/7, sargonShip 1/33, steadShip 1/48, visiShip 1/24",28,28,0,102],
"ai_0": [1,26,14,0,2,5,8,"69ce1996",176,"deputShip 1/59, emptyShip 1/2, kjeragShip 0/7, sargonShip 1/45, steadShip 1/46, visiShip 1/24",28,28,0,102],
"ai_1": [1,45,12,0,0,5,8,"b6e4200a",185,"deputShip 1/24, emptyShip 1/10, preciShip 1/55, sargonShip 0/2, siracusaShip 1/58, swiftShip 1/38",28,28,0,91],
"ai_2": [1,28,12,0,0,5,8,"4247f433",215,"deputShip 1/10, preciShip 1/77, sargonShip 0/8, siracusaShip 1/88, steadShip 0/16, swiftShip 1/40, yanShip 0/1",28,28,0,96],
"ai_3": [1,31,12,0,0,5,7,"70f89a1a",148,"deputShip 0/14, kjeragShip 1/7, preciShip 1/85, siracusaShip 1/56, yanShip 0/7",28,28,0,101]
},
{
"round": 12,
"ai_0": [1,26,14,0,0,6,8,"a03db7f8",190,"deputShip 2/67, emptyShip 1/6, kjeragShip 0/7, sargonShip 1/37, steadShip 1/52, visiShip 1/28",44,46,2,116],
"ai_0": [1,26,14,0,0,6,8,"59580bd3",200,"deputShip 2/67, emptyShip 1/6, kjeragShip 0/7, sargonShip 1/49, steadShip 1/50, visiShip 1/28",46,46,0,116],
"ai_1": [1,45,12,0,0,6,8,"2ef23907",233,"deputShip 1/26, emptyShip 1/12, preciShip 1/86, sargonShip 0/2, siracusaShip 1/64, swiftShip 1/45",46,46,0,104],
"ai_2": [1,28,12,0,0,6,8,"1186c81c",273,"deputShip 2/14, preciShip 1/104, sargonShip 0/8, siracusaShip 1/106, steadShip 0/16, swiftShip 1/49, yanShip 0/1",46,46,0,107],
"ai_3": [1,31,12,0,0,6,7,"948cb792",176,"deputShip 1/16, kjeragShip 0/9, preciShip 1/102, siracusaShip 1/58, yanShip 0/7",46,46,0,113]
},
{
"round": 13,
"ai_0": [1,26,12,0,2,6,8,"aad6c541",158,"deputShip 1/73, emptyShip 1/8, indomShip 1/2, kjeragShip 0/7, preciShip 1/2, sargonShip 1/39, steadShip 0/52, victoriaShip 1/4, visiShip 1/30",32,32,0,129],
"ai_0": [1,26,12,0,2,6,8,"aad6c541",170,"deputShip 1/73, emptyShip 1/8, indomShip 1/2, kjeragShip 0/7, preciShip 1/2, sargonShip 1/51, steadShip 0/50, victoriaShip 1/4, visiShip 1/30",32,32,0,129],
"ai_1": [1,45,12,0,0,6,8,"a908af7f",281,"deputShip 1/28, emptyShip 1/14, preciShip 2/121, sargonShip 0/2, siracusaShip 1/66, swiftShip 1/52",32,32,0,116],
"ai_2": [1,28,12,0,0,6,8,"2a09b693",322,"deputShip 1/16, preciShip 1/120, sargonShip 0/8, siracusaShip 1/130, steadShip 0/16, swiftShip 1/56, yanShip 0/1",32,32,0,119],
"ai_3": [1,31,12,0,2,6,7,"551cd12a",195,"deputShip 0/18, kjeragShip 0/9, preciShip 2/117, siracusaShip 1/76, visiShip 1/2, yanShip 0/7",32,32,0,126]
@@ -993,9 +993,9 @@
"title": {"id":"comment_3","name":"坚若磐石","picId":"comment_icon_3","text":"目标生命值损失最少"},
"trophies": 3,
"reward": 250,
"stats": {"activatedLayers":194,"bossDamage":177715,"dmgDealt":1588497,"gold":144,"itemsEquipped":22,"kills":292,"leaks":2,"lpLost":0,"merges":4,"perfectRounds":12,"refreshes":26},
"lineup": ["6_12_a@11,6[3_11_e_a+3_04_e_a]","6_11_a@11,7","3_13_b@11,8[5_01_e_a+3_05_e_a]","2_14_a@10,3","4_07_a@9,3[4_04_e_b+3_08_e_a]","6_06_a@9,4[6_09_e_a+3_02_e_a]","6_08_a@9,8[2_04_e_a+3_01_e_a]","1_06_b@9,9"],
"bonds": ["deputShip 1/79","emptyShip 1/10","indomShip 1/7","kjeragShip 0/7","maniShip 1/2","preciShip 2/4","sargonShip 1/41","steadShip 0/52","victoriaShip 1/16","visiShip 1/35","yanShip 0/5"]
"stats": {"activatedLayers":203,"bossDamage":123381,"dmgDealt":1536141,"gold":144,"itemsEquipped":22,"kills":294,"leaks":0,"lpLost":0,"merges":4,"perfectRounds":13,"refreshes":26},
"lineup": ["6_12_a@11,6[3_11_e_a+3_04_e_a]","6_11_a@11,7","3_13_b@11,8[5_01_e_a+3_05_e_a]","2_14_a@10,3","4_07_a@9,3[4_04_e_b+3_02_e_a]","6_06_a@9,4[3_08_e_a+6_09_e_a]","6_08_a@9,8[2_04_e_a+3_01_e_a]","1_06_b@9,9"],
"bonds": ["deputShip 1/79","emptyShip 1/10","indomShip 1/7","kjeragShip 0/7","maniShip 1/2","preciShip 1/4","sargonShip 1/56","steadShip 0/50","victoriaShip 1/13","visiShip 1/32","yanShip 0/5"]
},
"ai_1": {
"alive": true,
@@ -1007,7 +1007,7 @@
"title": {"id":"comment_4","name":"精英云集","picId":"comment_icon_4","text":"晋升精锐次数最多"},
"trophies": 3,
"reward": 250,
"stats": {"activatedLayers":307,"bossDamage":289540,"dmgDealt":1755183,"gold":128,"itemsEquipped":19,"kills":283,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":10},
"stats": {"activatedLayers":307,"bossDamage":276898,"dmgDealt":1741829,"gold":128,"itemsEquipped":19,"kills":283,"leaks":0,"lpLost":0,"merges":5,"perfectRounds":13,"refreshes":10},
"lineup": ["2_14_b@11,3","5_02_a@11,6[2_01_e_a]","6_08_a@11,7[4_02_e_a+3_06_e_a]","5_10_a@11,8[4_03_e_b+3_04_e_b]","6_20_a@10,3","1_08_b@10,8[1_01_e_b+3_03_e_a]","4_14_a@9,8[4_11_e_a+1_05_e_a]","3_18_a@9,9[5_09_e_a+1_01_e_a]"],
"bonds": ["deputShip 1/30","emptyShip 1/16","preciShip 2/134","sargonShip 0/2","siracusaShip 1/68","swiftShip 1/59"]
},
@@ -1021,7 +1021,7 @@
"title": {"id":"comment_2","name":"不朽盟约","picId":"comment_icon_2","text":"激活的盟约层数总和最高"},
"trophies": 3,
"reward": 250,
"stats": {"activatedLayers":362,"bossDamage":208184,"dmgDealt":1636146,"gold":129,"itemsEquipped":22,"kills":295,"leaks":0,"lpLost":0,"merges":3,"perfectRounds":13,"refreshes":22},
"stats": {"activatedLayers":362,"bossDamage":229100,"dmgDealt":1646973,"gold":129,"itemsEquipped":22,"kills":293,"leaks":0,"lpLost":0,"merges":3,"perfectRounds":13,"refreshes":22},
"lineup": ["4_21_a@11,3","1_07_b@11,7[4_03_e_a+1_01_e_b]","1_13_b@11,8[1_05_e_b+1_05_e_a]","5_20_a@10,3[4_02_e_a+5_01_e_a]","3_18_a@10,4[5_02_e_a+4_06_e_b]","2_16_b@9,4[4_04_e_a+2_01_e_b]","5_02_a@9,8","4_14_a@9,9[3_06_e_a+4_05_e_b]"],
"bonds": ["deputShip 1/18","preciShip 1/127","sargonShip 0/8","siracusaShip 1/154","steadShip 0/16","swiftShip 1/63","yanShip 0/1"]
},
@@ -1035,7 +1035,7 @@
"title": {"id":"comment_1","name":"卫戍之星","picId":"comment_icon_1","text":"对敌方领袖造成伤害最高(仅胜利时)"},
"trophies": 3,
"reward": 250,
"stats": {"activatedLayers":225,"bossDamage":464561,"dmgDealt":1896222,"gold":141,"itemsEquipped":35,"kills":283,"leaks":0,"lpLost":0,"merges":4,"perfectRounds":13,"refreshes":14},
"stats": {"activatedLayers":225,"bossDamage":510621,"dmgDealt":1942276,"gold":141,"itemsEquipped":35,"kills":283,"leaks":0,"lpLost":0,"merges":4,"perfectRounds":13,"refreshes":14},
"lineup": ["6_18_a@12,8[3_01_e_b]","6_20_a@11,3","6_08_a@11,6","6_12_a@11,7[3_11_e_b+3_01_e_b]","5_20_a@11,8[3_08_e_a+5_02_e_b]","2_16_b@10,8[4_06_e_b]","4_14_b@9,8[6_03_e_a+4_09_e_a]","4_16_a@9,9[4_05_e_a+4_11_e_a]"],
"bonds": ["deputShip 0/18","kjeragShip 0/9","preciShip 2/131","siracusaShip 1/92","visiShip 1/2","yanShip 0/7"]
}
@@ -1226,7 +1226,7 @@
{
"round": 3,
"ai_0": [1,30,8,0,0,1,7,"388a275b",5,"arcaneShip 0/2, preciShip 1/2, siracusaShip 0/3, soloShip 1/3",9,9,0,16],
"ai_1": [1,28,6,0,0,1,7,"f979585a",6,"arcaneShip 0/2, kjeragShip 0/4, preciShip 1/2, soloShip 1/0, steadShip 1/4",9,9,0,15]
"ai_1": [1,28,6,0,0,1,7,"d5a926f3",6,"arcaneShip 0/2, kjeragShip 0/4, preciShip 1/2, soloShip 1/0, steadShip 1/4",9,9,0,15]
},
{
"round": 4,
@@ -1664,7 +1664,7 @@
{
"round": 6,
"h_0": [1,27,9,0,3,5,8,"8d6a5be3",70,"preciShip 0/2, raidShip 1/16, sargonShip 1/36, steadShip 1/2, victoriaShip 1/6, visiShip 1/10",24,24,0,33],
"ai_0": [1,28,9,0,1,3,8,"546cd677",6,"kjeragShip 0/2, sargonShip 0/2, siracusaShip 1/4, soloShip 1/0, steadShip 1/2, suntShip 1/0, yanShip 0/8",22,22,0,38]
"ai_0": [1,28,9,0,1,3,8,"fe3b336f",6,"kjeragShip 0/2, sargonShip 0/2, siracusaShip 1/4, soloShip 1/0, steadShip 1/2, suntShip 1/0, yanShip 0/8",22,22,0,38]
},
{
"round": 7,
+52 -1
View File
@@ -3,11 +3,62 @@ import { test } from 'node:test';
import assert from 'node:assert/strict';
import { PHASE } from '../../shared/constants.js';
import { fieldModel, planLayout, rehearse, rangeTiles, REHEARSAL_VARIANTS, LAYOUT_PARAMS, botPickCard, botPickBand } from '../../server/match/bot.js';
import { FIELD, canPlace, placeClass, parseKey } from '../../server/match/board.js';
import { FIELD, canPlace, placeClass, parseKey, legalTiles, tileKey } from '../../server/match/board.js';
import { makeMatch, checkInvariants, give, giveItem, DATA } from './harness.js';
import { makeBattle } from '../helpers/battleHarness.js';
const soloBot = (o = {}) => makeMatch({ mode: 'solo', difficulty: 'NORMAL', seats: [{ seat: 0, playerId: 'ai_0', name: 'AI', isBot: true, connected: true }], ...o });
test('user: Given a saturated layout, When placing a self-range defender, Then prefer a free enemy path tile', () => {
const h = makeMatch({ mode: 'solo', seed: 11 }).start().toPrep();
const m = h.m;
const ps = m.order[0];
try {
const pieces = ['chess_char_6_03_a', 'chess_char_5_11_a', 'chess_char_1_02_a',
'chess_char_1_10_a', 'chess_char_2_08_a', 'chess_char_3_16_a'].map((id) => give(m, ps, id, 'hand'));
const plan = planLayout(m, ps, pieces);
// act2autochess_m04, first wave: the ground route crosses these deployable tiles.
const road = new Set(['9,9', '9,8', '9,7', '9,6', '11,5', '11,4', '10,4', '9,4', '9,3']);
assert.equal(m.stageId, 'act2autochess_m04');
assert.ok(road.has(plan.get(pieces.at(-1).uid)), `Cuora must block the route, got ${plan.get(pieces.at(-1).uid)}`);
for (const [key, expectedToBlock] of [[plan.get(pieces.at(-1).uid), true], ['12,5', false]]) {
const [row, col] = parseKey(key);
const battle = makeBattle({ stageId: m.stageId, waveTemplate: 'act1autochess_01',
units: [{ chessId: 'chess_char_3_16_a', row, col }] });
battle.runToEnd();
assert.equal(battle.hooksOf('blocked').length > 0, expectedToBlock, `blocking at ${key}`);
assert.equal(battle.result().perPlayer.p1.damageDealt > 0, expectedToBlock, `damage at ${key}`);
}
// When every path position is occupied, a legal fallback remains available.
const fallback = planLayout(m, ps, [pieces.at(-1)], undefined, { occupied: road });
const key = fallback.get(pieces.at(-1).uid);
assert.ok(key && !road.has(key));
assert.equal(ps.deployMap().get(key), 'melee');
} finally { m.dispose(); }
});
test('self-range blockers (range 0-1, only their own tile) fill the free enemy-road tiles before any other tile, on every stage and seed', () => {
// official range_table "0-1": the one grid (0,0) — 角峰 古米 泡泡 折桠 菲莱 蛇屠箱 塞雷娅 余
const guards = Object.values(DATA.chess).filter((c) => c && !c.isGolden && c.rangeGrid && c.rangeGrid.length === 1 && c.rangeGrid[0].every((v) => v === 0));
assert.equal(guards.length, 8);
const stages = new Set();
for (let seed = 1; seed <= 40; seed++) {
const h = makeMatch({ mode: 'solo', seed }).start().toPrep();
const m = h.m;
const ps = m.order[0];
try {
stages.add(m.stageId);
const pieces = guards.map((c) => give(m, ps, c.chessId, 'hand'));
const plan = planLayout(m, ps, pieces);
const model = fieldModel(m, ps);
const road = legalTiles(ps.deployMap(), 'melee').filter(([r, c]) => model.ground.has(tileKey(r, c)));
const onRoad = pieces.filter((p) => model.ground.has(plan.get(p.uid))).length;
assert.equal(onRoad, Math.min(pieces.length, road.length), `seed ${seed}, ${m.stageId}: ${onRoad} of ${pieces.length} guards on the ${road.length} road tiles`);
} finally { m.dispose(); }
}
assert.equal(stages.size, 8, 'every stage was tried');
});
test('field model: the round\'s routes traced over the own board, weighted by the enemies that use them', () => {
const h = soloBot({ seed: 2 }).start();
const m = h.m;