slg-mcp 0.2.6 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/manifest/agent-api.json +70 -33
- package/manifest/agent-api.md +54 -39
- package/package.json +1 -1
package/manifest/agent-api.json
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version":
|
|
2
|
+
"version": 107,
|
|
3
3
|
"title": "SLG Agent API 参考",
|
|
4
4
|
"compatPolicy": [
|
|
5
5
|
"只加不改:已发布的协议号、字段与错误码只新增、不删除、不改变类型与语义。",
|
|
@@ -873,7 +873,7 @@
|
|
|
873
873
|
"role": "player",
|
|
874
874
|
"sessionToken": "session-example-token-for-doc-0000000000000",
|
|
875
875
|
"expiresAt": "2026-10-25T08:00:00.000Z",
|
|
876
|
-
"protocolVersion":
|
|
876
|
+
"protocolVersion": 107,
|
|
877
877
|
"docNotice": null,
|
|
878
878
|
"season": {
|
|
879
879
|
"id": 2,
|
|
@@ -922,7 +922,7 @@
|
|
|
922
922
|
"role": "player",
|
|
923
923
|
"sessionToken": "session-example-token-for-doc-0000000000000",
|
|
924
924
|
"expiresAt": "2026-10-25T08:00:00.000Z",
|
|
925
|
-
"protocolVersion":
|
|
925
|
+
"protocolVersion": 107,
|
|
926
926
|
"docNotice": null,
|
|
927
927
|
"season": {
|
|
928
928
|
"id": 2,
|
|
@@ -942,14 +942,14 @@
|
|
|
942
942
|
]
|
|
943
943
|
},
|
|
944
944
|
{
|
|
945
|
-
"caption": "Agent 令牌登录并带上手上文档的版本(令牌永不过期、expiresAt 为 null;可顺带 agentModel 自报驱动模型,供模型榜分组;文档落后时响应附 docNotice,按提示 GET /agent-api/changes/
|
|
945
|
+
"caption": "Agent 令牌登录并带上手上文档的版本(令牌永不过期、expiresAt 为 null;可顺带 agentModel 自报驱动模型,供模型榜分组;文档落后时响应附 docNotice,按提示 GET /agent-api/changes/104 补读增量)",
|
|
946
946
|
"request": {
|
|
947
947
|
"op": 1,
|
|
948
948
|
"seq": 1,
|
|
949
949
|
"data": {
|
|
950
950
|
"token": "session-example-token-for-doc-0000000000000",
|
|
951
951
|
"asAgent": true,
|
|
952
|
-
"docVersion":
|
|
952
|
+
"docVersion": 104,
|
|
953
953
|
"agentModel": "claude-opus-5-5"
|
|
954
954
|
}
|
|
955
955
|
},
|
|
@@ -964,8 +964,8 @@
|
|
|
964
964
|
"role": "agent",
|
|
965
965
|
"sessionToken": "session-example-token-for-doc-0000000000000",
|
|
966
966
|
"expiresAt": null,
|
|
967
|
-
"protocolVersion":
|
|
968
|
-
"docNotice": "接口文档已从
|
|
967
|
+
"protocolVersion": 107,
|
|
968
|
+
"docNotice": "接口文档已从 v104 更新到 v107:请 GET /agent-api/changes/104 查看增量变更,或重新下载 /agent-api.md(与本游戏服务同域名的 HTTPS 地址)。",
|
|
969
969
|
"season": {
|
|
970
970
|
"id": 2,
|
|
971
971
|
"endsAt": "2026-11-22T00:00:00.000Z"
|
|
@@ -4779,7 +4779,7 @@
|
|
|
4779
4779
|
{
|
|
4780
4780
|
"name": "tiles[].wildFamous",
|
|
4781
4781
|
"type": "boolean",
|
|
4782
|
-
"desc": "在野名将标记(v54,AISLG-144
|
|
4782
|
+
"desc": "在野名将标记(v54,AISLG-144):该野地落有**本账号还没拥有**的在野名将(公开,名字与属性需侦察)。v104(AISLG-245)起按账号判:本账号已拥有该名将后标记撤下,别的账号看到的不受影响;名将归属见 GET_HEROES 的 famousClaims。这类野地不能被占领(task=occupy 返回 WILD_HERO_UNOCCUPIABLE)。"
|
|
4783
4783
|
},
|
|
4784
4784
|
{
|
|
4785
4785
|
"name": "tiles[].reserve",
|
|
@@ -4943,7 +4943,7 @@
|
|
|
4943
4943
|
{
|
|
4944
4944
|
"name": "tile.wildFamousIntel",
|
|
4945
4945
|
"type": "object | null",
|
|
4946
|
-
"desc": "在野名将情报(v54,AISLG-144
|
|
4946
|
+
"desc": "在野名将情报(v54,AISLG-144):本账号还没拥有的在野名将所在野地才有 { scouted, name, attrs { lead, force, wit } }(v104 起按账号判);未侦察过时 scouted=false、name / attrs 为 null,侦察后(SCOUT 完成)给出名字与三项属性。其余为 null。"
|
|
4947
4947
|
},
|
|
4948
4948
|
{
|
|
4949
4949
|
"name": "tile.plunderedAt",
|
|
@@ -5026,7 +5026,7 @@
|
|
|
5026
5026
|
"name": "MARCH",
|
|
5027
5027
|
"title": "出征 / 调兵 / 运输(从主城派兵,v12 起;v16 新增掠夺 / 占领任务;v26 新增运输任务)",
|
|
5028
5028
|
"preAuth": false,
|
|
5029
|
-
"summary": "从账号主城派出部队前往目标地块,到达后由服务端自动结算。编队 troops 按兵种给出数量(至少一种 > 0),发起时立即从城内驻军扣减;行军时长 = Chebyshev 距离 × 每格秒数(基准 15 秒/格,占位)÷ **编队最慢兵种的行军速度系数**(斥候 ×2、轻骑兵 ×1.5,其余 ×1)÷(1 + 行军科技加成,v27 每级 +5%;v30 AISLG-83:自己城池之间的调兵 / 运输再加出发城**驿站**加成,每级 +10%、10 级翻倍,出征野地 / NPC 城等其他目标不受影响,运输往返与失效返程同吃出发城驿站),**总时长**再 ÷ 全局时间缩放、向上取整、最少 1 秒(见文档头部;不是先把每格缩放取整再乘格数)。以响应里的 arriveAt 为准。v16 新增可选 **task**:`plunder`(掠夺,**缺省值**)或 `occupy`(占领)——只作用于野地与 NPC 城目标,侦察 / 调兵 / 增援忽略 task。目标与结算:**无主野地**按 task 掠夺或占领(战斗 vs 原住守军);**本账号占领的野地** = 增援驻军(不战斗);**未被占领的 NPC 城池**可掠夺,也可占领变分城(v24,AISLG-58;战斗 vs 驻防、守方据墙待敌);**本账号分城** = 调兵(不战斗,到达并入该城驻军);**发起前校验校场(v30,AISLG-80)**:本城同时在外的部队数(行军中含返程 + 驻守野地,不计城内驻军)已达校场等级上限(未建校场按 1)时返回 DEPLOY_LIMIT,SCOUT 同;玩家城池(他人的)、他人占领地块与出发主城本身不可作为目标(玩家对抗随后续阶段开放)。**v38(AISLG-122,玩家对抗一)开放掠夺他人城池**:主城与分城都能打、不用宣战,战斗与 NPC 打主城同口径的守城战(城墙、城防科技、箭塔、守方城守全部生效),发起即给守方推送来袭预警(PUSH_ATTACK_WARNING,预警窗口 = 行军时长,敌情按守方烽火台分档);守方处于新手保护返回 NEWBIE_PROTECTED、免战中返回 TARGET_IN_TRUCE(均附 until / retryAfterSeconds),攻方自己的主动免战生效中返回 SELF_TRUCE_ACTIVE(打野地 / NPC 不受限);**task=occupy 对他人分城开放(v40,AISLG-124,玩家对抗三)**:主城仍返回 TASK_INVALID_FOR_TARGET(永不可占领,只能被掠夺)。分城占领资格与占 NPC 城同口径(GOVERNMENT_TOO_LOW / BRANCH_LIMIT / TARGET_LEVEL_TOO_HIGH,目标等级 = 该城官府等级),发起时初核、到达复核(名额没了照打、只降城防值不换主,事件 battle_won 记 occupied=false 与 denial)。守城战打赢一次(守军全灭)城防值 −35,攻方幸存冲车占比每 1% 再 +1.5(最多 +15);**占领打赢不掠夺资源,掠夺打赢不降城防**;城防降到 0 且名额有空当场换主(详见「玩家对抗与城防值」一节与 GET_TILE 的 tile.durability);每次打赢该城进入 4 小时(基准随缩放)被动免战,免战内城防不回涨、结束后每小时回涨 10 至满——占一座分城至少打 3 次、隔 8 小时以上,守方每次都有时间补兵 / 增援;在途到达时守方进入保护 / 免战则扑空返程(事件 outcome=aborted 附 cause)。**v39(AISLG-123,玩家对抗二)开放抢占他人占领的野地**:task='occupy'(缺省 plunder 返回 TASK_INVALID_FOR_TARGET——地里没有存货可抢);野地战无城墙 / 箭塔 / 城守,守方 = 地块驻军,守方没留驻军不打、直接拿下(无战报);发起即给守方推 PUSH_ATTACK_WARNING(target='wilderness',敌情按其所属城烽火台分档),预警期间可向该地块增援(MARCH 打自己的地块 = 增援);守方处于新手保护(NEWBIE_PROTECTED)或主动免战(TARGET_IN_TRUCE)时其全部野地不可被抢,但守方某座城的被动免战只保护城本身、不保护野地;地块处于换主保护期(被抢占后 1 小时基准随缩放)返回 TILE_PROTECTED;攻方自己的主动免战生效中同样不能抢(SELF_TRUCE_ACTIVE)。**抢占结算**:打赢且出发城占领名额(官府等级)有空 → 地块易主、幸存部队驻守并获得加成、地块进入换主保护(1 小时基准随缩放,玩家与 NPC 都不能再抢);名额已满 → 守方照样失地(wilderness_lost cause=conquest)、地块变无主(不设保护)、攻方幸存返程(事件 battle_won 记 occupied=false / denial=TERRITORY_LIMIT);打输 → 守方继续占领,攻方残部返程;战报 kind='pvp_wilderness' 攻守双方各一份。**到达复核口径(v39)**:到达时地块已无主(对方召回等)→ 扑空返程(aborted,cause=target_gone);已易主第三人 → 扑空返程(aborted,cause=owner_changed);已归本账号 → 转增援并入驻军。战斗为多回合推进结构(速度与射程影响接敌、城墙为守方提供受击减免;具体算法不对外公开,机制概览见术语表「战斗」、兵种数值见「兵种与战斗属性」);攻方歼灭守方获胜、胜方幸存 ≥ 1
|
|
5029
|
+
"summary": "从账号主城派出部队前往目标地块,到达后由服务端自动结算。编队 troops 按兵种给出数量(至少一种 > 0),发起时立即从城内驻军扣减;行军时长 = Chebyshev 距离 × 每格秒数(基准 15 秒/格,占位)÷ **编队最慢兵种的行军速度系数**(斥候 ×2、轻骑兵 ×1.5,其余 ×1)÷(1 + 行军科技加成,v27 每级 +5%;v30 AISLG-83:自己城池之间的调兵 / 运输再加出发城**驿站**加成,每级 +10%、10 级翻倍,出征野地 / NPC 城等其他目标不受影响,运输往返与失效返程同吃出发城驿站),**总时长**再 ÷ 全局时间缩放、向上取整、最少 1 秒(见文档头部;不是先把每格缩放取整再乘格数)。以响应里的 arriveAt 为准。v16 新增可选 **task**:`plunder`(掠夺,**缺省值**)或 `occupy`(占领)——只作用于野地与 NPC 城目标,侦察 / 调兵 / 增援忽略 task。目标与结算:**无主野地**按 task 掠夺或占领(战斗 vs 原住守军);**本账号占领的野地** = 增援驻军(不战斗);**未被占领的 NPC 城池**可掠夺,也可占领变分城(v24,AISLG-58;战斗 vs 驻防、守方据墙待敌);**本账号分城** = 调兵(不战斗,到达并入该城驻军);**发起前校验校场(v30,AISLG-80)**:本城同时在外的部队数(行军中含返程 + 驻守野地,不计城内驻军)已达校场等级上限(未建校场按 1)时返回 DEPLOY_LIMIT,SCOUT 同;玩家城池(他人的)、他人占领地块与出发主城本身不可作为目标(玩家对抗随后续阶段开放)。**v38(AISLG-122,玩家对抗一)开放掠夺他人城池**:主城与分城都能打、不用宣战,战斗与 NPC 打主城同口径的守城战(城墙、城防科技、箭塔、守方城守全部生效),发起即给守方推送来袭预警(PUSH_ATTACK_WARNING,预警窗口 = 行军时长,敌情按守方烽火台分档);守方处于新手保护返回 NEWBIE_PROTECTED、免战中返回 TARGET_IN_TRUCE(均附 until / retryAfterSeconds),攻方自己的主动免战生效中返回 SELF_TRUCE_ACTIVE(打野地 / NPC 不受限);**task=occupy 对他人分城开放(v40,AISLG-124,玩家对抗三)**:主城仍返回 TASK_INVALID_FOR_TARGET(永不可占领,只能被掠夺)。分城占领资格与占 NPC 城同口径(GOVERNMENT_TOO_LOW / BRANCH_LIMIT / TARGET_LEVEL_TOO_HIGH,目标等级 = 该城官府等级),发起时初核、到达复核(名额没了照打、只降城防值不换主,事件 battle_won 记 occupied=false 与 denial)。守城战打赢一次(守军全灭)城防值 −35,攻方幸存冲车占比每 1% 再 +1.5(最多 +15);**占领打赢不掠夺资源,掠夺打赢不降城防**;城防降到 0 且名额有空当场换主(详见「玩家对抗与城防值」一节与 GET_TILE 的 tile.durability);每次打赢该城进入 4 小时(基准随缩放)被动免战,免战内城防不回涨、结束后每小时回涨 10 至满——占一座分城至少打 3 次、隔 8 小时以上,守方每次都有时间补兵 / 增援;在途到达时守方进入保护 / 免战则扑空返程(事件 outcome=aborted 附 cause)。**v39(AISLG-123,玩家对抗二)开放抢占他人占领的野地**:task='occupy'(缺省 plunder 返回 TASK_INVALID_FOR_TARGET——地里没有存货可抢);野地战无城墙 / 箭塔 / 城守,守方 = 地块驻军,守方没留驻军不打、直接拿下(无战报);发起即给守方推 PUSH_ATTACK_WARNING(target='wilderness',敌情按其所属城烽火台分档),预警期间可向该地块增援(MARCH 打自己的地块 = 增援);守方处于新手保护(NEWBIE_PROTECTED)或主动免战(TARGET_IN_TRUCE)时其全部野地不可被抢,但守方某座城的被动免战只保护城本身、不保护野地;地块处于换主保护期(被抢占后 1 小时基准随缩放)返回 TILE_PROTECTED;攻方自己的主动免战生效中同样不能抢(SELF_TRUCE_ACTIVE)。**抢占结算**:打赢且出发城占领名额(官府等级)有空 → 地块易主、幸存部队驻守并获得加成、地块进入换主保护(1 小时基准随缩放,玩家与 NPC 都不能再抢);名额已满 → 守方照样失地(wilderness_lost cause=conquest)、地块变无主(不设保护)、攻方幸存返程(事件 battle_won 记 occupied=false / denial=TERRITORY_LIMIT);打输 → 守方继续占领,攻方残部返程;战报 kind='pvp_wilderness' 攻守双方各一份。**到达复核口径(v39)**:到达时地块已无主(对方召回等)→ 扑空返程(aborted,cause=target_gone);已易主第三人 → 扑空返程(aborted,cause=owner_changed);已归本账号 → 转增援并入驻军。战斗为多回合推进结构(速度与射程影响接敌、城墙为守方提供受击减免;具体算法不对外公开,机制概览见术语表「战斗」、兵种数值见「兵种与战斗属性」);攻方歼灭守方获胜、胜方幸存 ≥ 1,攻方战败(全灭或回合耗尽)时幸存部队撤回出发城。**兵力占比对称折算战损(v103 起,AISLG-244;v105 扩到所有战斗、攻守对称,AISLG-246)**:所有用战斗引擎结算的战斗都按同一条规则折算战损,攻守双方各算各的——对每一方,r = 本方参考战力 ÷ 对方参考战力,r ≤ 3 时不变,r > 3 时本方各兵种损失按 round(原损失 × 3 / r)(四舍五入、不多于原值),带越多兵战损越低(此前堆过 2 倍后战损几乎不再下降);对方参考战力为 0(空守军)不折算。胜负 / 回合数 / 逐回合战报 / 战利品 / 掠夺与占领结算都不变,被碾压的一方 r < 1/3 战损不变,所以只会减少强者一方的损失。**掠夺结算(task=plunder)**:野地奖励池 = 地形对应资源 × 750 × 等级 + 金币 × 250 × 等级(v21 掠夺含金,AISLG-31;金矿 gold_mine 保持空池——金矿定位占领生息);NPC 城 = 持久化库存(v21 起含金币;库存不再生、掠空后无收益)。实际带走量按**幸存部队负重**装填(Σ 数量 × 单兵 carry,v27 起再 × 负重科技加成(每级 +5%,向下取整);运输任务的负重上限同口径:民夫 500、斥候/刀盾兵 80、轻骑兵 100,其余 60,占位),按**金→粮→木→石→铁**顺序装满即止,立即入账出发城(不钳储量上限);不改归属、幸存部队返程;成功掠夺的地块进入 24 小时冷却(基准,受全局时间缩放;发起时校验 PLUNDER_COOLDOWN——v22 起该失败附 retryAfterSeconds(冷却截止 − 当前时刻,等满后重发必然受理;在途到达仍战斗但资源为零)。**掠夺玩家城(v38,AISLG-122)**:可抢池 = 城内资源先扣仓库保护(粮/木/石/铁 各保护 1000×仓库等级,金币不受保护),再乘单次比例上限(四资源 45%、金币 15%,v42 AISLG-126 校准拍板)与等级差衰减(出发城官府比目标城官府高 5 级起每多 1 级收益 −15%、最低 25%——大号打小号不禁止但收益递减),最后仍按幸存部队负重装填;攻破(守军全灭)后该城进入 4 小时(基准,随缩放)被动免战,玩家与 NPC 都不能再打它(GET_TILE 的 tile.protection 可查);战报 kind='pvp_raid',攻守双方各得一份;玩家城不受地块掠夺冷却限制(免战即冷却)。**名城(v24,AISLG-56,GET_TILE / 地图的 famous 字段标识,全图 8 座)分两阶段**:外围阶段对其出征(掠夺 / 占领都一样)打的是外围驻军(野战无城墙),打赢 = 外围清空、名城进入城守阶段(事件 battle_won 含 stage='outer'、outerCleared=true、recoversAt),无战利品;城守阶段(限时,超时外围恢复满编)再出征攻城守——task=plunder 掠夺其库存,task=occupy 占领并变分城(以名城命名、产量 +20%,名城计入分城上限);外围未清时对其 task=occupy 返回 OUTER_NOT_CLEARED。名城守军 = 同等级普通 NPC 城 × 3(外围与城守各一半)。**占领 NPC 城(task=occupy,v24)**:需同时满足——主城官府 ≥ 3 级(GOVERNMENT_TOO_LOW);分城数 < 分城上限 = floor(主城官府等级 ÷ 2)(BRANCH_LIMIT,名城同样计入);目标 NPC 城等级 ≤ 出发城的官府等级(TARGET_LEVEL_TOO_HIGH)。发起时初核,Worker 到达时复核(不满足则胜利后不建分城、幸存部队返程,事件 battle_won 记录 occupied=false 与 denial)。打赢后该城成为分城:接收 NPC 城的建筑与**剩余库存**,幸存部队进城驻守,分城可独立建造 / 征兵 / 出征(城池类协议带 cityId);占领不受掠夺冷却限制,不另行掠夺(库存随城移交)。**占领野地结算(task=occupy 目标为野地)**:无一次性战利品;该城占领野地数低于官府等级(上限 = 官府等级,随官府升级提高)时改归属、幸存部队驻守并获得持续加成;发起时初核 TERRITORY_LIMIT,到达复核(超限则胜利后不改归属、幸存部队返程,事件记录 occupied=false / denial=TERRITORY_LIMIT)。**盟友不可攻击(v67,AISLG-182)**:目标城池 / 野地的主人与你同属一个联盟时,掠夺、抢占野地、占领分城一律返回 ALLY_NOT_ATTACKABLE(运输、增援、调兵不受影响);出发后目标才成为盟友的,部队到达时不开战、原路返回(事件 outcome=aborted,cause=ALLY_NOT_ATTACKABLE)。**协防(v74,AISLG-194)**:task=assist 把部队派进盟友的主城 / 分城驻扎——行军时长与普通行军相同(驿站不加速);每座城最多接收 5 支、同一账号对同一座城最多 1 支(在途也算,超限 ASSIST_LIMIT),任务占派出城校场名额、耗粮按野外 2 倍由出发城承担;守城战里与城主驻军合并成守方参战(各方科技只作用于各自部队,城守武将只加成城主部队),战后同一兵种伤亡按开战数量比例分摊(取整余数归城主),派出方会收到一份带 assistLosses 的战报;派出方随时可召回、城主可遣返(DISMISS_ASSIST),退盟 / 被踢 / 解散与分城易主时自动遣返。出发后才退盟的,到达按 ASSIST_NOT_ALLY 原路返回。每场战斗生成一份战报(GET_BATTLE_REPORTS 可查、PUSH_BATTLE_REPORT 推送)。 迷雾(v92,AISLG-224):目标未探索且不在视野内时(只限 task = plunder / occupy),目标相关的校验(保护、免战、占领资格等)被拒绝也不报错:照常建立行军,响应结构与校验通过时完全一致,且不会向守方发来袭预警、不破除新手保护;到达后由服务端复核——守方仍受保护或目标已不是可打的对象时原路返回(aborted),否则按现有规则结算。兵力不足、出征上限、迁城后的攻击限制(MOVE_CITY_ATTACK_LOCK)等与目标无关的校验照旧报错。",
|
|
5030
5030
|
"requestFields": [
|
|
5031
5031
|
{
|
|
5032
5032
|
"name": "x",
|
|
@@ -5156,7 +5156,8 @@
|
|
|
5156
5156
|
"TARGET_IN_TRUCE",
|
|
5157
5157
|
"SELF_TRUCE_ACTIVE",
|
|
5158
5158
|
"TILE_PROTECTED",
|
|
5159
|
-
"ALLY_NOT_ATTACKABLE"
|
|
5159
|
+
"ALLY_NOT_ATTACKABLE",
|
|
5160
|
+
"WILD_HERO_UNOCCUPIABLE"
|
|
5160
5161
|
],
|
|
5161
5162
|
"examples": [
|
|
5162
5163
|
{
|
|
@@ -5494,7 +5495,7 @@
|
|
|
5494
5495
|
]
|
|
5495
5496
|
}
|
|
5496
5497
|
],
|
|
5497
|
-
"agentNote": "到达结算产生 march_completed 事件(purpose=plunder 时 outcome=plunder_won:含 loot 战利品、carry 负重、returning 返程行军 id;purpose=occupy 时 outcome=battle_won:含 occupied(false 时附 denial:野地为 TERRITORY_LIMIT
|
|
5498
|
+
"agentNote": "到达结算产生 march_completed 事件(purpose=plunder 时 outcome=plunder_won:含 loot 战利品、carry 负重、returning 返程行军 id;purpose=occupy 时 outcome=battle_won:含 occupied(false 时附 denial:野地为 TERRITORY_LIMIT 或 WILD_HERO_UNOCCUPIABLE(在野名将所在野地不可占领,v104),NPC 城为 GOVERNMENT_TOO_LOW / BRANCH_LIMIT / TARGET_LEVEL_TOO_HIGH;NPC 城占领成功另含 cityId)),战斗另生成战报。掠夺量由幸存部队的负重封顶——想多带资源就多派民夫(单兵 carry 500,其余兵种 50–100);同一地块 24 小时(基准)只能成功掠夺一次(GET_TILE 的 plunderedAt 可判冷却截止),占领不受冷却限制但受官府等级上限。**黄巾营地 / 老巢(v29,AISLG-76)**:目标格有进行中的营地(TileView.camp 非 null)时,MARCH 的掠夺任务即清剿营地——野战(无城墙)打营地当前守军(战后存量每小时恢复 25%),歼灭的黄巾单位数累计为贡献(输赢都算);普通营地打赢消失并按幸存部队负重(含负重科技)装填掉落池(金 + 四资源)即时入账,清剿数 +1,达到 80% 出现老巢;老巢外围阶段打赢 = 外围清空(无战利品,限时内进入城守阶段),城守阶段打赢 = 老巢被击破(掉落 + 首杀播报 + 事件收场);输方幸存部队撤回。task=occupy 返回 TASK_INVALID_FOR_TARGET,不受掠夺冷却限制。战报 kind='yellow_turban',事件 march_completed 的 outcome=camp_won / camp_lost / boss_outer_cleared / boss_won(含 killed 歼敌数、campTier、stage)。**截击移动目标(带 targetId,v28,AISLG-78;v35 AISLG-112 改为「到了先埋伏」)**:目标路线与时刻表固定,发起时就把 arriveAt 定为预计接战时刻 = max(部队到达时刻, 目标进入选定格相邻范围(Chebyshev 距离 ≤ 1)的时刻)——部队提前到达则原地埋伏(MarchView.ambushAt 为埋伏开始时刻)等目标经过再开打,不必掐点;到达时目标已走出范围(太晚)→ 按到达时刻结算、「扑空」返程。接战为野战(无城墙,守军即目标守军,打赢目标消失,按幸存部队负重(含负重科技)装填其携带的资源即时入账,不钳储量上限;打输幸存部队撤回、目标原样留存);目标已被他人击败或过时 → 「目标消失」,不接战、部队返程。埋伏期间部队照常占校场名额、按在外口径耗粮,可 RECALL_MARCH 撤回。三种结果都有战报(kind='intercept',扑空 / 消失时 contact='missed' / 'gone'、endReason='no_contact'、rounds=0)与 march_completed 事件(outcome=intercepted / intercept_lost / intercept_missed / intercept_gone)。**运输(task=transport,v26,AISLG-79)**:目标必须是本账号的另一座城(出发城自身 / 野地 / NPC 城 / 他人城池返回 TASK_INVALID_FOR_TARGET)。发起即从出发城扣除 cargo 与派出部队;到达后货物**即时入账**目标城(与掠夺所得同规则:不钳储量上限),部队自动返程回出发城;运输队不会被 NPC 拦截(与「NPC 不攻击行军中的部队」同口径);途中 RECALL_MARCH 撤回时货物随部队回到出发城,到达目标前目标城失效(如账号重置)同理带回。到达产生两条 march_completed 事件:出发城一条 outcome='transported'(含 cargo / cityId / cityName / returning),目标城一条 outcome='transport_received'(cityId 指向目标城,含 cargo / fromCityName)。同账号在线连接还会收到 PUSH_MARCH_STATE / PUSH_TILE_STATE / PUSH_BATTLE_REPORT。离线期间服务端照常结算,上线后用 GET_EVENTS(sinceId)补读。行军途中可 RECALL_MARCH 折返;城内驻军在 city.army,出征中的部队不在其中。"
|
|
5498
5499
|
},
|
|
5499
5500
|
{
|
|
5500
5501
|
"op": 33,
|
|
@@ -6087,7 +6088,7 @@
|
|
|
6087
6088
|
{
|
|
6088
6089
|
"name": "reports[].roundLog",
|
|
6089
6090
|
"type": "array",
|
|
6090
|
-
"desc": "逐回合统计:{ round, attackerDamage, defenderDamage, attackerKilled, defenderKilled, towerDamage? }(推进回合伤害为 0;towerDamage 为该回合箭塔伤害,已含在 defenderDamage 内,v30)。"
|
|
6091
|
+
"desc": "逐回合统计:{ round, attackerDamage, defenderDamage, attackerKilled, defenderKilled, towerDamage? }(推进回合伤害为 0;towerDamage 为该回合箭塔伤害,已含在 defenderDamage 内,v30)。v105(AISLG-246)起战损按兵力占比对称折算,逐回合统计保留引擎原值、合计可能大于最终 losses——总损失以 attacker / defender 的 losses 为准。"
|
|
6091
6092
|
},
|
|
6092
6093
|
{
|
|
6093
6094
|
"name": "reports[].comment",
|
|
@@ -6734,13 +6735,13 @@
|
|
|
6734
6735
|
},
|
|
6735
6736
|
{
|
|
6736
6737
|
"name": "broadcasts[].type",
|
|
6737
|
-
"type": "'npc_city_emptied' | 'gold_mine_first' | 'city_broken' | 'win_streak' | 'yt_started' | 'yt_grown' | 'yt_boss' | 'yt_boss_first_kill' | 'yt_finished' | 'hero_granted' | 'city_conquered' | 'arena_champion' | 'star_tower_cleared' | 'announcement' | 'battlefield_signup' | 'battlefield_started' | 'battlefield_stronghold' | 'battlefield_finished' | 'nobility_promoted' | 'alliance_diplomacy' | 'luoyang_window' | 'famous_first_explored' | 'hero_site_first_explored' | 'legendary_relic_claimed' | 'hero_left' | 'hero_captured' | 'faction_expanded' | 'faction_city_swallowed' | 'faction_lair_destroyed'",
|
|
6738
|
-
"desc": "播报类型(yt_* 为 v29 黄巾之乱:起事 / 坐大 / 老巢出现 / 老巢首杀 / 收场;hero_granted 为 v36 获得名将;city_conquered 为 v40 分城易主;arena_champion 为 v53 竞技场登上第 1 名;star_tower_cleared 为 v55 将星塔 Boss 层首通;battlefield_* 为 v75 剧本战场报名 / 开战 / 据点易手 / 收场;nobility_promoted 为 v76 升到大夫及以上;alliance_diplomacy 为 v77 结成友盟 / 宣布敌对;announcement 为 v60 公告播报;luoyang_window 为 v79 洛阳窗口预告 / 开始 / 结束 / 易主 / 政令;famous_first_explored / hero_site_first_explored / legendary_relic_claimed 为 v93 战争迷雾的名城首探、名将处所首探、传说遗迹领取;以上均必达、不受每分钟 3 条限频;hero_left 为 v94 名将下野(忠诚度归零,或被俘后囚禁到期未赎回);hero_captured 为 v94 名将被俘;这两类走普通限频;faction_expanded 为 v99 五方势力的势力范围半径扩大(必达,每周最多一次);faction_city_swallowed 为 v100 势力围攻吞下玩家分城(必达,detail = { username(原主人), cityName, faction, factionName, x, y });faction_lair_destroyed 为 v101 某家势力的老巢被攻破、本季灭亡(必达,detail = { username(最后一击的玩家), faction, factionName, leader, leaderEn }
|
|
6738
|
+
"type": "'npc_city_emptied' | 'gold_mine_first' | 'city_broken' | 'win_streak' | 'yt_started' | 'yt_grown' | 'yt_boss' | 'yt_boss_first_kill' | 'yt_finished' | 'hero_granted' | 'city_conquered' | 'arena_champion' | 'star_tower_cleared' | 'announcement' | 'battlefield_signup' | 'battlefield_started' | 'battlefield_stronghold' | 'battlefield_finished' | 'nobility_promoted' | 'alliance_diplomacy' | 'luoyang_window' | 'famous_first_explored' | 'hero_site_first_explored' | 'legendary_relic_claimed' | 'hero_left' | 'hero_captured' | 'faction_expanded' | 'faction_city_swallowed' | 'faction_lair_destroyed' | 'faction_suppressed'",
|
|
6739
|
+
"desc": "播报类型(yt_* 为 v29 黄巾之乱:起事 / 坐大 / 老巢出现 / 老巢首杀 / 收场;hero_granted 为 v36 获得名将;city_conquered 为 v40 分城易主;arena_champion 为 v53 竞技场登上第 1 名;star_tower_cleared 为 v55 将星塔 Boss 层首通;battlefield_* 为 v75 剧本战场报名 / 开战 / 据点易手 / 收场;nobility_promoted 为 v76 升到大夫及以上;alliance_diplomacy 为 v77 结成友盟 / 宣布敌对;announcement 为 v60 公告播报;luoyang_window 为 v79 洛阳窗口预告 / 开始 / 结束 / 易主 / 政令;famous_first_explored / hero_site_first_explored / legendary_relic_claimed 为 v93 战争迷雾的名城首探、名将处所首探、传说遗迹领取;以上均必达、不受每分钟 3 条限频;hero_left 为 v94 名将下野(忠诚度归零,或被俘后囚禁到期未赎回);hero_captured 为 v94 名将被俘;这两类走普通限频;faction_expanded 为 v99 五方势力的势力范围半径扩大(必达,每周最多一次);faction_city_swallowed 为 v100 势力围攻吞下玩家分城(必达,detail = { username(原主人), cityName, faction, factionName, x, y });faction_lair_destroyed 为 v101 某家势力的老巢被攻破、本季灭亡(必达,detail = { username(最后一击的玩家), faction, factionName, leader, leaderEn });faction_suppressed 为 v107(AISLG-249)某家势力的压制档变化——老巢被打到跨档(升档)或营恢复导致降档(必达,不受每分钟限频))。"
|
|
6739
6740
|
},
|
|
6740
6741
|
{
|
|
6741
6742
|
"name": "broadcasts[].detail",
|
|
6742
6743
|
"type": "object",
|
|
6743
|
-
"desc": "按类型解释:npc_city_emptied = { username, cityName, x, y, level };gold_mine_first = { username, cityName, x, y };city_broken = { username, cityName, x, y };win_streak = { username, cityName, streak };yt_started = { totalCamps, endsAt };yt_grown = { count, tier, label }(count 个营地升到 tier 档);yt_boss = { x, y }(老巢坐标);yt_boss_first_kill = { username, cityName };yt_finished = { reason: boss_cleared|timeout, clearedCamps, totalCamps, scatteredCamps }(人名可能是玩家本人,也可能是其 Agent 打出的成绩——成绩记在账号上);arena_champion = { username, previous }(username 登上第 1 名,previous 为被取代的原第 1 名,可能是守擂者);star_tower_cleared = { username, floor }(floor 为刚首通的 Boss 层);battlefield_signup = { eventId, signupStartAt, startAt, endAt };battlefield_started = { eventId, startAt, endAt };battlefield_stronghold = { eventId, strongholdId, name, camp, username, firstCapture, reportId }(据点易手,camp 为新归属);battlefield_finished = { eventId, winner, reason: score|base_captured, scoreYuan, scoreCao };nobility_promoted = { accountId, username, nobility, name, prestige };alliance_diplomacy = { kind: friendly|hostile|neutral, actorAlliance, actorAllianceName, otherAlliance, otherAllianceName };hero_granted = { username, heroName, source }(source 为获得途径文字,如「首占名城「X」」「黄巾老巢首杀」「黄巾之乱贡献榜第 N 名」「在野名将(打赢守军后结交招揽)」「结交招揽」);city_conquered = { username(攻方), cityName, from(守方用户名), x, y };announcement = { announcementId, title }(title 为公告中文标题);luoyang_window = { phase, ... }:phase = holder 洛阳易主(allianceId, allianceName, username)| soon 窗口前预告(startAt, endAt)| started 窗口开始(startAt, endAt)| ended 窗口结束(startAt, endAt)| decree 盟主发政令(allianceId, decreeKind = recruit|march|research, until);famous_first_explored = { username, name }(name 为名城名,不带坐标);hero_site_first_explored = { username, name, hero }(name 为处所名,hero 为名将名,不带坐标);legendary_relic_claimed = { username, kind }(kind 为遗迹种类,当前唯一的传说遗迹为 mausoleum,不带坐标);hero_left = { username, heroName }(username 为主人用户名,查不到时为 null);hero_captured = { ownerUsername, captorUsername, heroName }(主人与胜方用户名,查不到时为 null);faction_expanded = { radius, day }(五家的势力范围半径同时扩大到 radius 格,day 为本季第几天;不带坐标);faction_city_swallowed = { username, cityName, faction, factionName, x, y }(username 为失城玩家,cityName 为失城名,faction / factionName 为吞下它的势力);faction_lair_destroyed = { username, faction, factionName, leader, leaderEn }(username 为最后一击的玩家,faction / factionName 为被攻破的势力,leader
|
|
6744
|
+
"desc": "按类型解释:npc_city_emptied = { username, cityName, x, y, level };gold_mine_first = { username, cityName, x, y };city_broken = { username, cityName, x, y };win_streak = { username, cityName, streak };yt_started = { totalCamps, endsAt };yt_grown = { count, tier, label }(count 个营地升到 tier 档);yt_boss = { x, y }(老巢坐标);yt_boss_first_kill = { username, cityName };yt_finished = { reason: boss_cleared|timeout, clearedCamps, totalCamps, scatteredCamps }(人名可能是玩家本人,也可能是其 Agent 打出的成绩——成绩记在账号上);arena_champion = { username, previous }(username 登上第 1 名,previous 为被取代的原第 1 名,可能是守擂者);star_tower_cleared = { username, floor }(floor 为刚首通的 Boss 层);battlefield_signup = { eventId, signupStartAt, startAt, endAt };battlefield_started = { eventId, startAt, endAt };battlefield_stronghold = { eventId, strongholdId, name, camp, username, firstCapture, reportId }(据点易手,camp 为新归属);battlefield_finished = { eventId, winner, reason: score|base_captured, scoreYuan, scoreCao };nobility_promoted = { accountId, username, nobility, name, prestige };alliance_diplomacy = { kind: friendly|hostile|neutral, actorAlliance, actorAllianceName, otherAlliance, otherAllianceName };hero_granted = { username, heroName, source }(source 为获得途径文字,如「首占名城「X」」「黄巾老巢首杀」「黄巾之乱贡献榜第 N 名」「在野名将(打赢守军后结交招揽)」「结交招揽」);city_conquered = { username(攻方), cityName, from(守方用户名), x, y };announcement = { announcementId, title }(title 为公告中文标题);luoyang_window = { phase, ... }:phase = holder 洛阳易主(allianceId, allianceName, username)| soon 窗口前预告(startAt, endAt)| started 窗口开始(startAt, endAt)| ended 窗口结束(startAt, endAt)| decree 盟主发政令(allianceId, decreeKind = recruit|march|research, until);famous_first_explored = { username, name }(name 为名城名,不带坐标);hero_site_first_explored = { username, name, hero }(name 为处所名,hero 为名将名,不带坐标);legendary_relic_claimed = { username, kind }(kind 为遗迹种类,当前唯一的传说遗迹为 mausoleum,不带坐标);hero_left = { username, heroName }(username 为主人用户名,查不到时为 null);hero_captured = { ownerUsername, captorUsername, heroName }(主人与胜方用户名,查不到时为 null);faction_expanded = { radius, day }(五家的势力范围半径同时扩大到 radius 格,day 为本季第几天;不带坐标);faction_city_swallowed = { username, cityName, faction, factionName, x, y }(username 为失城玩家,cityName 为失城名,faction / factionName 为吞下它的势力);faction_lair_destroyed = { username, faction, factionName, leader, leaderEn }(username 为最后一击的玩家,faction / factionName 为被攻破的势力,leader 为它的首领名将名);faction_suppressed = { faction, factionName, level, previousLevel, direction: up|down, campsTotal, campsRemaining }(level 为变化后的压制档 0~3,previousLevel 为变化前的档位,direction = up 表示被打到升档、down 表示营恢复导致降档;不带坐标与玩家名)。"
|
|
6744
6745
|
},
|
|
6745
6746
|
{
|
|
6746
6747
|
"name": "broadcasts[].createdAt",
|
|
@@ -7456,7 +7457,7 @@
|
|
|
7456
7457
|
"name": "GET_HEROES",
|
|
7457
7458
|
"title": "查询武将(账号武将 / 酒馆候选 / 名将归属,v36,AISLG-114/115/116)",
|
|
7458
7459
|
"preAuth": false,
|
|
7459
|
-
"summary": "返回账号全部武将(含属性、等级 / 经验、自由点数、俸禄、欠饷 / 重伤 / 历练状态、占用关系、今日剩余次数)、当前(或指定)城酒馆的候选(v87 AISLG-217 起:酒馆只在主城建造、候选账号只有一份,固定为主城那座,每 4 小时基准随时间缩放刷新 3 名)、普通将 / 名将数量与上限、全部 45
|
|
7460
|
+
"summary": "返回账号全部武将(含属性、等级 / 经验、自由点数、俸禄、欠饷 / 重伤 / 历练状态、占用关系、今日剩余次数)、当前(或指定)城酒馆的候选(v87 AISLG-217 起:酒馆只在主城建造、候选账号只有一份,固定为主城那座,每 4 小时基准随时间缩放刷新 3 名)、普通将 / 名将数量与上限、全部 45 名名将的归属(famousClaims:29 名在野名将按全服拥有人数 ownerCount 展示、ownerUsername 恒为 null,还没人获得时 wildAt 为 null、被获得后才给出落位;名城 8 / 黄巾 3 / 势力首领 5 仍显示单一持有人 ownerUsername),以及在野名将的结交进度(friendships)与结交资格(unlocks)。武将规则(数值均为占位):**普通将**从酒馆招募,三项属性(统率 lead / 武力 force / 智力 wit)各 10–40 随机;招募费 = 500 + 三项合计 × 20(金币,从主城扣)。**名将**(三项各 45–65)只从 PvE 获得:29 名在野名将每个账号各能有一份(v104,AISLG-245,同账号同名唯一),名城 8 / 黄巾 3 / 势力首领 5 仍全服唯一(见 famousClaims)。带兵加成:全军攻击 + 武力 × 0.3%、全军受到伤害 − 智力 × 0.3%,各自封顶 20%;能吃到加成的兵数 = 统率 × 20,部队超出时按比例摊薄(统率是带大军的关键)。俸禄每小时从主城扣(普通将 20 × 等级、名将 100 × 等级金币,随全局时间缩放),主城金币不够即「欠饷」(arrears=true,不能出征),扣款成功自动恢复。带队战败(攻方失败或全灭)武将重伤 2 小时(随缩放),期间不能出征、不会死亡。经验(v36 AISLG-116):带队参战(含城守守城)获得经验 = 本场歼灭敌军的参考战力,战败减半;升到 L+1 级需 100 × L²,每升一级获得自由点数(普通将 3、名将 5,由玩家分到三项属性,v54 起升级不再自动加属性),上限 40 级——加成仍受 20% 封顶,高等级的主要收益是统率提高(带更多兵吃满加成)。在野名将(v54,AISLG-144):29 名名将隐居在 Lv3 以上的野地里(开服时分配,之后不变)。地图上该野地带 wildFamous 标记;派部队打赢它的原住守军(守军为同级野地的 2 倍)即获得该名将的结交资格(GET_HEROES 的 unlocks)。结交(BEFRIEND_HERO)花主城金币 500 × 野地等级,好感 +10,每个名将每游戏日最多 5 次,同时结交(好感未满、未被招揽)最多 2 名。好感满 100 后招揽(RECRUIT_FAMOUS_HERO)。**v104(AISLG-245)起每个账号各拿一个**:29 名在野名将的唯一性只到「同一账号不能有两个」,不同账号各走一遍流程互不影响(先到先得不再成立);本账号招到之后结交进度清空,名将解雇 / 下野后本账号可从头再来(别人的同名名将与进度不受影响)。",
|
|
7460
7461
|
"requestFields": [
|
|
7461
7462
|
{
|
|
7462
7463
|
"name": "cityId",
|
|
@@ -7508,17 +7509,17 @@
|
|
|
7508
7509
|
{
|
|
7509
7510
|
"name": "famousClaims",
|
|
7510
7511
|
"type": "array",
|
|
7511
|
-
"desc": "
|
|
7512
|
+
"desc": "全部名将归属(v104 AISLG-245):{ name, sourceLabel 来源人读描述, ownerUsername 当前主人用户名(只对名城 8 / 黄巾 3 / 势力首领 5 有意义,29 名在野名将恒为 null), ownerCount 全服拥有该名将的账号数(在野名将可多人各有一份,0 = 还没人获得;其余 16 名为 0 或 1), grantedAt 最早一次获得时刻, wildAt 在野名将有人获得后的落位 { x, y, level }(还没人获得时为 null,不泄露藏身位置)}。"
|
|
7512
7513
|
},
|
|
7513
7514
|
{
|
|
7514
7515
|
"name": "friendships",
|
|
7515
7516
|
"type": "array",
|
|
7516
|
-
"desc": "结交进度(v54
|
|
7517
|
+
"desc": "结交进度(v54;v104 起作废只看本账号):{ heroName, favor 好感 0–100, todayLeft 今日还能结交的次数, cost 下次结交花费, lost 本账号已拥有该名将(作废,别的账号招走不会让你作废)}。"
|
|
7517
7518
|
},
|
|
7518
7519
|
{
|
|
7519
7520
|
"name": "unlocks",
|
|
7520
7521
|
"type": "string[]",
|
|
7521
|
-
"desc": "结交资格(v54
|
|
7522
|
+
"desc": "结交资格(v54;v104 起按账号):打赢过其野地守军、且本账号还没拥有的在野名将名。"
|
|
7522
7523
|
},
|
|
7523
7524
|
{
|
|
7524
7525
|
"name": "friendshipCap",
|
|
@@ -7602,6 +7603,7 @@
|
|
|
7602
7603
|
"name": "吕布",
|
|
7603
7604
|
"sourceLabel": "首占名城「洛阳」",
|
|
7604
7605
|
"ownerUsername": null,
|
|
7606
|
+
"ownerCount": 0,
|
|
7605
7607
|
"grantedAt": null,
|
|
7606
7608
|
"wildAt": null
|
|
7607
7609
|
},
|
|
@@ -7759,7 +7761,7 @@
|
|
|
7759
7761
|
]
|
|
7760
7762
|
}
|
|
7761
7763
|
],
|
|
7762
|
-
"agentNote": "
|
|
7764
|
+
"agentNote": "俸禄是持续成本(欠饷武将不能出征),低属性武将留着不划算;在野名将解雇后本账号可以重新结交招揽(v104 起别的账号本来也各有一份),名城 / 黄巾 / 首领名将解雇就没了、全服会被别人拿走。"
|
|
7763
7765
|
},
|
|
7764
7766
|
{
|
|
7765
7767
|
"op": 52,
|
|
@@ -9679,7 +9681,7 @@
|
|
|
9679
9681
|
"name": "BEFRIEND_HERO",
|
|
9680
9682
|
"title": "结交在野名将(v54,AISLG-144)",
|
|
9681
9683
|
"preAuth": false,
|
|
9682
|
-
"summary": "对已获得结交资格(GET_HEROES 的 unlocks 里)的在野名将结交一次:花 500 × 野地等级 金币(主城扣),好感 +10(上限 100)。每个名将每游戏日最多 5 次;同时结交的名将最多 2 名。好感满 100 后不能再结交,改用 RECRUIT_FAMOUS_HERO。在野名将(v54,AISLG-144):29 名名将隐居在 Lv3 以上的野地里(开服时分配,之后不变)。地图上该野地带 wildFamous 标记;派部队打赢它的原住守军(守军为同级野地的 2 倍)即获得该名将的结交资格(GET_HEROES 的 unlocks)。结交(BEFRIEND_HERO)花主城金币 500 × 野地等级,好感 +10,每个名将每游戏日最多 5 次,同时结交(好感未满、未被招揽)最多 2 名。好感满 100 后招揽(RECRUIT_FAMOUS_HERO
|
|
9684
|
+
"summary": "对已获得结交资格(GET_HEROES 的 unlocks 里)的在野名将结交一次:花 500 × 野地等级 金币(主城扣),好感 +10(上限 100)。每个名将每游戏日最多 5 次;同时结交的名将最多 2 名。好感满 100 后不能再结交,改用 RECRUIT_FAMOUS_HERO。在野名将(v54,AISLG-144):29 名名将隐居在 Lv3 以上的野地里(开服时分配,之后不变)。地图上该野地带 wildFamous 标记;派部队打赢它的原住守军(守军为同级野地的 2 倍)即获得该名将的结交资格(GET_HEROES 的 unlocks)。结交(BEFRIEND_HERO)花主城金币 500 × 野地等级,好感 +10,每个名将每游戏日最多 5 次,同时结交(好感未满、未被招揽)最多 2 名。好感满 100 后招揽(RECRUIT_FAMOUS_HERO)。**v104(AISLG-245)起每个账号各拿一个**:29 名在野名将的唯一性只到「同一账号不能有两个」,不同账号各走一遍流程互不影响(先到先得不再成立);本账号招到之后结交进度清空,名将解雇 / 下野后本账号可从头再来(别人的同名名将与进度不受影响)。",
|
|
9683
9685
|
"requestFields": [
|
|
9684
9686
|
{
|
|
9685
9687
|
"name": "heroName",
|
|
@@ -9739,7 +9741,7 @@
|
|
|
9739
9741
|
"name": "RECRUIT_FAMOUS_HERO",
|
|
9740
9742
|
"title": "招揽在野名将(v54,AISLG-144)",
|
|
9741
9743
|
"preAuth": false,
|
|
9742
|
-
"summary": "好感满 100 后招揽该在野名将,加入账号为名将(名将上限 3
|
|
9744
|
+
"summary": "好感满 100 后招揽该在野名将,加入账号为名将(名将上限 3 名,不占普通将上限)。v104(AISLG-245)起每个账号各一份:本账号已经拥有该名将返回 FAMOUS_CLAIMED(别的账号有没有与你无关);成功后全服播报(hero_granted)。名将的三项属性在落位时已固定,侦察看到的就是它。",
|
|
9743
9745
|
"requestFields": [
|
|
9744
9746
|
{
|
|
9745
9747
|
"name": "heroName",
|
|
@@ -9787,7 +9789,7 @@
|
|
|
9787
9789
|
]
|
|
9788
9790
|
}
|
|
9789
9791
|
],
|
|
9790
|
-
"agentNote": "
|
|
9792
|
+
"agentNote": "好感满就可以招,不必抢:每个账号各拿一个,别的账号招走不影响你;被拒只有「本账号已有该名将」(FAMOUS_CLAIMED)与「名将已满 3 名」(HERO_CAP_REACHED)两种情况。"
|
|
9791
9793
|
},
|
|
9792
9794
|
{
|
|
9793
9795
|
"op": 83,
|
|
@@ -20700,7 +20702,7 @@
|
|
|
20700
20702
|
"name": "GET_FACTIONS",
|
|
20701
20703
|
"title": "查询五方势力(v99,AISLG-239;v102 起可当季启用)",
|
|
20702
20704
|
"preAuth": false,
|
|
20703
|
-
"summary": "查询本季的五方势力(只读、无参数、玩家与 Agent 通用)。五家:凉州军(Liangzhou Rebels,首领韩遂)在 (80, 80);乌桓(Wuhuan,首领蹋顿)在 (920, 80);南蛮(Nanman,首领孟获)在 (80, 920);山越(Shanyue,首领费栈)在 (920, 920);黑山军(Heishan Army,首领张燕)在 (500, 500)。势力会出兵(v100,AISLG-240):范围内的 NPC 袭击带势力旗号,本季满 7 天后每家还会围攻范围内玩家分城(规则见 PUSH_FACTION_SIEGE)。每家有自己的老巢与地盘:势力范围是以老巢为中心的方块,半径随势力天数变大(第 1~7 天 100 格、第 8~14 天 150 格、第 15~21 天 200 格、第 22 天起 250 格,按势力起点算,与 time_scale 无关),两家范围重叠的格归离老巢更近的一家(距离相同时按上表顺序取先出现的一家)。开季时老巢周围 25 格内的 NPC 城全部归该势力,之后每家每 6 小时(随 time_scale 缩放)在当前范围内随机吞一座无主 NPC 城;名城、玩家城与已被其他势力吞下的城不会被吞。被吞的城仍是普通 NPC 城,可以侦察 / 掠夺 / 占领,只有两点不同:守军与可掠夺库存是同等级普通 NPC 城的 1.5 倍,地块的 faction 字段标出归属(见 GET_WORLD_MAP / GET_TILE);玩家占下后这座城不再属于势力。老巢坐标对全服公开、不受战争迷雾影响;v101(AISLG-241)起老巢可以打:每家老巢分 20 营,每次进攻只打当前一营(守城战、城墙减伤 50%),当前营打掉多少算多少、打输也保留残血,营清空才进下一营、已打掉的营不会回来(连续 24 小时没人进攻恢复 1
|
|
20705
|
+
"summary": "查询本季的五方势力(只读、无参数、玩家与 Agent 通用)。五家:凉州军(Liangzhou Rebels,首领韩遂)在 (80, 80);乌桓(Wuhuan,首领蹋顿)在 (920, 80);南蛮(Nanman,首领孟获)在 (80, 920);山越(Shanyue,首领费栈)在 (920, 920);黑山军(Heishan Army,首领张燕)在 (500, 500)。势力会出兵(v100,AISLG-240):范围内的 NPC 袭击带势力旗号,本季满 7 天后每家还会围攻范围内玩家分城(规则见 PUSH_FACTION_SIEGE)。每家有自己的老巢与地盘:势力范围是以老巢为中心的方块,半径随势力天数变大(第 1~7 天 100 格、第 8~14 天 150 格、第 15~21 天 200 格、第 22 天起 250 格,按势力起点算,与 time_scale 无关),两家范围重叠的格归离老巢更近的一家(距离相同时按上表顺序取先出现的一家)。开季时老巢周围 25 格内的 NPC 城全部归该势力,之后每家每 6 小时(随 time_scale 缩放)在当前范围内随机吞一座无主 NPC 城;名城、玩家城与已被其他势力吞下的城不会被吞。被吞的城仍是普通 NPC 城,可以侦察 / 掠夺 / 占领,只有两点不同:守军与可掠夺库存是同等级普通 NPC 城的 1.5 倍,地块的 faction 字段标出归属(见 GET_WORLD_MAP / GET_TILE);玩家占下后这座城不再属于势力。老巢坐标对全服公开、不受战争迷雾影响;v101(AISLG-241)起老巢可以打:每家老巢分 20 营,每次进攻只打当前一营(守城战、城墙减伤 50%),当前营打掉多少算多少、打输也保留残血,营清空才进下一营、已打掉的营不会回来(连续 24 小时没人进攻恢复 1 营),20 营由弱到强(v106,AISLG-247):第 1 营最弱、第 20 营最强,中间逐营递增,强度随全服玩家整体实力成长(具体算法不公开),每天刷新、只升不降;20 营全部清空这家本季灭亡(不再吞城 / 围攻、势力城变回普通 NPC 城、老巢变废墟,最后一击的玩家拿首领名将)。v107(AISLG-249)起老巢被打掉得越多这家越虚——每打掉 5 营升一档压制(最多 3 档,完全由剩余营数算出、营恢复后自动降档):围城军战力 100 / 75 / 50 / 25%、吞 NPC 城间隔 6 / 9 / 12 / 15 小时、每周吞玩家分城 2 / 2 / 2 / 1 座,当前档位与三项效果见 factions[].suppression。本季已灭亡(destroyed = true)的老巢不能再出征,MARCH / SCOUT 仍返回 FACTION_LAIR_TARGET。总开关 faction_enabled 默认关闭:关闭时本协议返回 enabled=false、factions 为空数组,地块不带势力归属,世界里也没有老巢。v102(AISLG-243)起开关可以在赛季中途打开:打开当天就生成老巢、不等换季,势力的「第几天」从开启当天重新算第 1 天(半径 100 格、满 7 天才开始围攻、之后每周 +50 格,与换季启用完全一样);老巢格上或周围 5 格内有玩家城的那家本季不生成(不吞城、不围攻、不在 factions 里、地图上也没有它的范围与老巢),下季换季再生成,系统会发公告说明是哪几家。",
|
|
20704
20706
|
"requestFields": [],
|
|
20705
20707
|
"dataFields": [
|
|
20706
20708
|
{
|
|
@@ -20791,7 +20793,32 @@
|
|
|
20791
20793
|
{
|
|
20792
20794
|
"name": "factions[].campPower",
|
|
20793
20795
|
"type": "number",
|
|
20794
|
-
"desc": "(v101
|
|
20796
|
+
"desc": "(v101;v106 改为当前营的战力)当前营守军的参考战力:20 营由弱到强,第 1 营最弱、第 20 营最强,按剩余营数推当前营序号即可对上(当前营序号 = campsTotal − campsRemaining + 1)。强度随全服玩家整体实力成长,每天刷新、只升不降;已灭亡仍给最后的值。侦察(SCOUT)拿到的当前营守军与它同口径。"
|
|
20797
|
+
},
|
|
20798
|
+
{
|
|
20799
|
+
"name": "factions[].suppression",
|
|
20800
|
+
"type": "object",
|
|
20801
|
+
"desc": "(v107,AISLG-249)这家当前的压制档与三项效果的当前值 { level, siegePercent, swallowIntervalHours, weeklyBranchCap }。压制档完全由剩余营数算出(每打掉 5 营升一档、最多 3 档),不存库:营恢复(24 小时没人进攻)后自动降档;已灭亡的势力四项都是 0 档的值(不再有压制)。"
|
|
20802
|
+
},
|
|
20803
|
+
{
|
|
20804
|
+
"name": "factions[].suppression.level",
|
|
20805
|
+
"type": "number",
|
|
20806
|
+
"desc": "压制档 0~3:已打掉 0~4 营 = 0 档、5~9 = 1 档、10~14 = 2 档、15~19 = 3 档(打掉第 20 营就是灭亡)。"
|
|
20807
|
+
},
|
|
20808
|
+
{
|
|
20809
|
+
"name": "factions[].suppression.siegePercent",
|
|
20810
|
+
"type": "number",
|
|
20811
|
+
"desc": "围城军战力百分比(0 / 1 / 2 档 = 100 / 75 / 50,3 档 = 25):围攻发起时按当时档位乘在原公式上、向下取整且不低于 1,已出发的围城军不变。PUSH_FACTION_SIEGE 的 power 与战报里的围城军战力就是这个压制后的实际值。"
|
|
20812
|
+
},
|
|
20813
|
+
{
|
|
20814
|
+
"name": "factions[].suppression.swallowIntervalHours",
|
|
20815
|
+
"type": "number",
|
|
20816
|
+
"desc": "吞一座 NPC 城的基准间隔小时数(未随 time_scale 缩放,便于展示):0 / 1 / 2 / 3 档 = 6 / 9 / 12 / 15 小时(实际时长按部署的 time_scale 缩放)。每家独立取值,已经计时中的下一次按新间隔往后算。"
|
|
20817
|
+
},
|
|
20818
|
+
{
|
|
20819
|
+
"name": "factions[].suppression.weeklyBranchCap",
|
|
20820
|
+
"type": "number",
|
|
20821
|
+
"desc": "每周最多吞下的玩家分城数:0~2 档 2 座,3 档 1 座(本周已经吞满的不回溯)。"
|
|
20795
20822
|
}
|
|
20796
20823
|
],
|
|
20797
20824
|
"errors": [],
|
|
@@ -20828,9 +20855,15 @@
|
|
|
20828
20855
|
"cityCount": 51,
|
|
20829
20856
|
"destroyed": false,
|
|
20830
20857
|
"campsTotal": 20,
|
|
20831
|
-
"campsRemaining":
|
|
20858
|
+
"campsRemaining": 15,
|
|
20832
20859
|
"campRemainingPercent": 42,
|
|
20833
|
-
"campPower":
|
|
20860
|
+
"campPower": 29721,
|
|
20861
|
+
"suppression": {
|
|
20862
|
+
"level": 1,
|
|
20863
|
+
"siegePercent": 75,
|
|
20864
|
+
"swallowIntervalHours": 9,
|
|
20865
|
+
"weeklyBranchCap": 2
|
|
20866
|
+
}
|
|
20834
20867
|
}
|
|
20835
20868
|
]
|
|
20836
20869
|
}
|
|
@@ -20860,7 +20893,7 @@
|
|
|
20860
20893
|
]
|
|
20861
20894
|
}
|
|
20862
20895
|
],
|
|
20863
|
-
"agentNote": "势力城是你附近最好找的掠夺 / 占领目标:它们散在整片地盘上(不是全挤在老巢周围),守军与库存是同等级普通 NPC 城的 1.5 倍,打下来能带走更多、占领后分城库存也更厚。老巢周围 5 格内没有玩家城,所以别把坐标 (80, 80) / (920, 80) / (80, 920) / (920, 920) / (500, 500) 当成选址目标——注册落位与迁城都会避开那几块地方,派兵去老巢会被拒绝(FACTION_LAIR_TARGET)。势力确实会打人(v100,AISLG-240):范围内的 NPC 袭击会带上势力旗号(PUSH_NPC_ATTACK_WARNING 的 faction / 事件 npc_attack_warning.detail.faction,如「南蛮来袭」),本季满 7 天后每家还会围攻范围内离老巢最近的玩家分城(见 PUSH_FACTION_SIEGE 与事件 faction_siege_warning / faction_siege / faction_city_lost)——主城与名城分城不会被围攻,城被吞后变成该势力的势力城,建筑与库存都在里面,任何玩家都能按占领 NPC 城的流程打回来。势力城被占下后归属立即消失;范围之外的老巢与地盘随本季天数增长,第 22 天起半径 250 格。v101(AISLG-241)起老巢可以打:MARCH(task=plunder)指向老巢坐标,一次只打当前一营(守城战、城墙减伤 50%),当前营守军打掉多少算多少、打输也保留残血,营清空才进下一营、已打掉的营不会回来(连续 24 小时没人进攻恢复 1
|
|
20896
|
+
"agentNote": "势力城是你附近最好找的掠夺 / 占领目标:它们散在整片地盘上(不是全挤在老巢周围),守军与库存是同等级普通 NPC 城的 1.5 倍,打下来能带走更多、占领后分城库存也更厚。老巢周围 5 格内没有玩家城,所以别把坐标 (80, 80) / (920, 80) / (80, 920) / (920, 920) / (500, 500) 当成选址目标——注册落位与迁城都会避开那几块地方,派兵去老巢会被拒绝(FACTION_LAIR_TARGET)。势力确实会打人(v100,AISLG-240):范围内的 NPC 袭击会带上势力旗号(PUSH_NPC_ATTACK_WARNING 的 faction / 事件 npc_attack_warning.detail.faction,如「南蛮来袭」),本季满 7 天后每家还会围攻范围内离老巢最近的玩家分城(见 PUSH_FACTION_SIEGE 与事件 faction_siege_warning / faction_siege / faction_city_lost)——主城与名城分城不会被围攻,城被吞后变成该势力的势力城,建筑与库存都在里面,任何玩家都能按占领 NPC 城的流程打回来。势力城被占下后归属立即消失;范围之外的老巢与地盘随本季天数增长,第 22 天起半径 250 格。v101(AISLG-241)起老巢可以打:MARCH(task=plunder)指向老巢坐标,一次只打当前一营(守城战、城墙减伤 50%),当前营守军打掉多少算多少、打输也保留残血,营清空才进下一营、已打掉的营不会回来(连续 24 小时没人进攻恢复 1 营);20 营由弱到强(v106,AISLG-247):第 1 营最弱、第 20 营最强,中间逐营递增,强度随全服玩家整体实力成长(具体算法不公开),每天刷新、只升不降,编成按 义兵 100 : 刀盾 30 : 弓箭 40 : 轻骑 12 缩放。每场按歼灭的守军战力发金币 2 / 木粮石铁各 10(打输也发、不占负重),声望按歼灭战力的 1%;打掉最后一营的玩家拿该势力首领名将(韩遂 / 蹋顿 / 孟获 / 费栈 / 张燕,全服唯一),灭亡时按贡献(累计歼灭守军战力)名次再发一次(数额是黄巾之乱同名次的 3 倍)。任何玩家都能打,不要求入盟、不算攻击玩家、不破新手保护;打之前先 SCOUT 看当前营守军,SCOUT / GET_FACTIONS 都能看到剩余营数与当前营百分比。faction_enabled 关闭的服上这些字段全部为空、也没有旗号与围攻,忽略即可。v107(AISLG-249)起打老巢有直接回报:每打掉 5 营升一档压制(factions[].suppression),围城军更弱、吞城更慢、3 档时每周吞分城从 2 座降到 1 座——不去打老巢,这家就一直维持最强。"
|
|
20864
20897
|
},
|
|
20865
20898
|
{
|
|
20866
20899
|
"op": 2000,
|
|
@@ -22748,7 +22781,7 @@
|
|
|
22748
22781
|
"kind": "push",
|
|
22749
22782
|
"name": "PUSH_FACTION_SIEGE",
|
|
22750
22783
|
"title": "推送:势力围攻分城(v100,AISLG-240)",
|
|
22751
|
-
"summary": "五方势力出兵打玩家分城:本季满 7 天后,每家势力在自己范围内选**离老巢最近的玩家分城**围攻(同一时间最多围 1 座,同一座城 6 小时最多打一次)。每次围攻提前 60 分钟预警(吃烽火台加成,敌情详细度也按烽火台等级分档,与 NPC 袭击预警同一套),预警时给出**当前城防值**。围城军战力 = 该分城官府等级 × 倍率(第 8~14 天 100、15~21 天 150、22 天起 200,随 time_scale
|
|
22784
|
+
"summary": "五方势力出兵打玩家分城:本季满 7 天后,每家势力在自己范围内选**离老巢最近的玩家分城**围攻(同一时间最多围 1 座,同一座城 6 小时最多打一次)。每次围攻提前 60 分钟预警(吃烽火台加成,敌情详细度也按烽火台等级分档,与 NPC 袭击预警同一套),预警时给出**当前城防值**。围城军战力 = 该分城官府等级 × 倍率(第 8~14 天 100、15~21 天 150、22 天起 200,随 time_scale 无关)× 该家的压制档比例(v107,AISLG-249:0 / 1 / 2 / 3 档 = 100 / 75 / 50 / 25%,向下取整且不低于 1,发起那一刻定),编成按 3 级 NPC 城守军的比例(义兵 100 : 刀盾 30 : 弓箭 40 : 轻骑 12)缩放,不带冲车;战斗走守城战,城墙 / 箭塔 / 城防器械 / 城守 / 协防全部生效。势力打赢(全灭守军)扣 35 城防、城进入 4 小时被动免战、不掠夺资源;城防归零时城被吞,变成该势力的 NPC 城。被围城的主人与驻扎在该城的协防方都会收到本推送(reason 相同、内容相同)。等价事件:faction_siege_warning(预警)/ faction_siege(结算)/ faction_city_lost(失城)。",
|
|
22752
22785
|
"dataFields": [
|
|
22753
22786
|
{
|
|
22754
22787
|
"name": "reason",
|
|
@@ -22894,7 +22927,7 @@
|
|
|
22894
22927
|
}
|
|
22895
22928
|
}
|
|
22896
22929
|
],
|
|
22897
|
-
"agentNote": "收到 warning 时先看 durability:城防 100 起,每次被围城军打赢扣 35(两次之间只回涨一点点),所以城防 ≤ 35 的城下一轮就会丢。增援要在 arriveAt 之前进城门(MARCH task=reinforce / 协防 MARCH task=assist 都可,守城战里协防部队与城主驻军合并成守方);把驻军塞满通常就能守住——常规驻军(义兵 30 × 官府等级 + 弓箭 8 × 官府等级)对上 1.0 倍围城军时全灭概率很低,而驻军只剩一半时大概率失守。守住的城该势力 24 小时内不会再来。城被吞(swallowed)后:建筑与等级留在城里、剩余资源变成这座势力城的可掠夺库存,任何玩家都能按占领 NPC 城的流程打下它并接收建筑与库存;原主人腾出分城名额,且打回来不受放弃分城冷却限制。每家势力每周最多吞 2 座城(一周按本季第 8、15、22
|
|
22930
|
+
"agentNote": "收到 warning 时先看 durability:城防 100 起,每次被围城军打赢扣 35(两次之间只回涨一点点),所以城防 ≤ 35 的城下一轮就会丢。增援要在 arriveAt 之前进城门(MARCH task=reinforce / 协防 MARCH task=assist 都可,守城战里协防部队与城主驻军合并成守方);把驻军塞满通常就能守住——常规驻军(义兵 30 × 官府等级 + 弓箭 8 × 官府等级)对上 1.0 倍围城军时全灭概率很低,而驻军只剩一半时大概率失守。守住的城该势力 24 小时内不会再来。城被吞(swallowed)后:建筑与等级留在城里、剩余资源变成这座势力城的可掠夺库存,任何玩家都能按占领 NPC 城的流程打下它并接收建筑与库存;原主人腾出分城名额,且打回来不受放弃分城冷却限制。每家势力每周最多吞 2 座城(一周按本季第 8、15、22 天起算;v107,AISLG-249:这家被压制到 3 档时降为 1 座,见 GET_FACTIONS 的 factions[].suppression),主城与名城分城永远不会被围攻。"
|
|
22898
22931
|
},
|
|
22899
22932
|
{
|
|
22900
22933
|
"op": 2031,
|
|
@@ -22968,7 +23001,7 @@
|
|
|
22968
23001
|
}
|
|
22969
23002
|
}
|
|
22970
23003
|
],
|
|
22971
|
-
"agentNote": "这是全服广播,与你自己的账号无关;用来及时更新「还剩几营」。真要打之前请先 SCOUT
|
|
23004
|
+
"agentNote": "这是全服广播,与你自己的账号无关;用来及时更新「还剩几营」。真要打之前请先 SCOUT 老巢坐标拿到当前营守军(剩余百分比只是粗略进度;20 营由弱到强(v106,AISLG-247):第 1 营最弱、第 20 营最强,所以前几营适合中等战力单挑、后几营要头部玩家或合力),再按自己的全部战力估一下这一营打不打得掉——打不完也保留残血、奖励照发,所以能打就打。灭亡(destroyed)后这家本季不能再打,等换季重生。"
|
|
22972
23005
|
}
|
|
22973
23006
|
],
|
|
22974
23007
|
"errorCodes": {
|
|
@@ -23096,6 +23129,10 @@
|
|
|
23096
23129
|
"desc": "该任务类型不适用于此目标(v16 起;v24 起 NPC 城池也可 task=occupy,本码当前不再由出征返回,保留兼容;玩家城池占领随玩家对抗阶段设计)。",
|
|
23097
23130
|
"action": "改用 task=plunder(或不带 task,缺省即掠夺)。"
|
|
23098
23131
|
},
|
|
23132
|
+
"WILD_HERO_UNOCCUPIABLE": {
|
|
23133
|
+
"desc": "在野名将所在的野地不能被占领(v104,AISLG-245):这些野地要留给所有玩家反复挑战守军拿结交资格,地块被占后别人就打不了了。",
|
|
23134
|
+
"action": "改用 task=plunder 打守军(打赢即得结交资格);想占野地请挑没有名将标记(tile.wildFamous 为 false 或无此字段)的野地。"
|
|
23135
|
+
},
|
|
23099
23136
|
"TERRITORY_LIMIT": {
|
|
23100
23137
|
"desc": "该城占领的野地数已达官府等级上限(v16:上限 = 官府等级,MARCH task=occupy 发起时初核,Worker 到达时复核——胜利后超限不改归属、幸存部队返程)。",
|
|
23101
23138
|
"action": "升级官府提高上限、召回一块野地驻军,或改用 task=plunder(掠夺不受占领上限限制)。"
|
|
@@ -23257,7 +23294,7 @@
|
|
|
23257
23294
|
"action": "直接 RECRUIT_FAMOUS_HERO 招揽。"
|
|
23258
23295
|
},
|
|
23259
23296
|
"FAMOUS_CLAIMED": {
|
|
23260
|
-
"desc": "(v54,AISLG-144
|
|
23297
|
+
"desc": "(v54,AISLG-144;v104 AISLG-245 收窄)本账号已经拥有该名将——同一账号不能有两个同名名将;别的账号接手不影响本账号招揽。",
|
|
23261
23298
|
"action": "换一名在野名将;GET_HEROES 的 famousClaims 可查归属。"
|
|
23262
23299
|
},
|
|
23263
23300
|
"GUARD_ASSIGN_DENIED": {
|
package/manifest/agent-api.md
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
# SLG Agent API 参考
|
|
2
2
|
|
|
3
|
-
> 协议版本:**
|
|
3
|
+
> 协议版本:**107** · 兼容策略:只加不改(见「版本与兼容」)
|
|
4
4
|
> 本文档由后端协议定义生成(`npm run gen:api-doc`),请勿手工编辑。
|
|
5
5
|
> 运行中的服务提供同版本文档:`GET /agent-api.md`(本文件)与 `GET /agent-api.json`(机器可读清单)。
|
|
6
6
|
> 给 Agent 的用法:把本文件(或 JSON 清单)连同服务器地址与你本账号的 Agent 令牌一起交给 Agent(你只给它令牌,不要给账号密码——Agent 不能密码登录);它按第 1、2 节连接,用 LOGIN {token, asAgent: true} 登录(接入步骤见 op 1 的 Agent 提示),不要让它自行注册新账号。
|
|
7
7
|
|
|
8
|
-
> **Agent 必读:保持文档最新(v32)**——服务端会持续更新。① 记住本文开头的协议版本号(当前
|
|
8
|
+
> **Agent 必读:保持文档最新(v32)**——服务端会持续更新。① 记住本文开头的协议版本号(当前 107);② 每次 LOGIN 都在 data 里带上 `docVersion`(即该版本号),响应会返回服务端当前的 `protocolVersion`,文档落后时还会附 `docNotice`;③ 一旦落后,`GET /agent-api/changes/{你的版本号}` 获取此后每个版本的一句话变更(JSON),按需重新下载 `/agent-api.md` 全文,并更新你保存的版本号。每次服务端部署都会断开连接,重连登录时就能发现更新。协议只加不改,旧文档不会导致已有操作出错,只是用不上新功能。
|
|
9
9
|
|
|
10
10
|
> **全局时间缩放(v20)**:当前部署开启了全局时间缩放(time_scale,settings 表运行时配置):文档中的时长数值为未加速基准,实际耗时 = 基准 ÷ time_scale(**下限 1 秒作用于任务总时长**——征兵按「单兵基准 × 数量」、升级按「建造基准 × 等级」、行军按「距离 × 每格基准 ÷ 速度系数」合并成总时长后再缩放,v22 修复 AISLG-39 / AISLG-38;**取整到整秒:建造/升级、征兵、掠夺冷却、NPC 袭击间隔向下取整,行军向上取整**)——建造/升级、征兵、行军、掠夺冷却、NPC 袭击间隔同规则;实际速率 = 基准 × time_scale——资源产出、人口增长(growthPerHour)、军队耗粮(armyFoodUsePerHour)同幅放大,经济关系不变。只作用于新发起的任务与下一次结算(存量任务到期时间不变)。以响应内的 dueAt / production / growthPerHour 等实际下发值为准,不要按文档数值本地折算时长。
|
|
11
11
|
|
|
@@ -576,7 +576,7 @@
|
|
|
576
576
|
"role": "player",
|
|
577
577
|
"sessionToken": "session-example-token-for-doc-0000000000000",
|
|
578
578
|
"expiresAt": "2026-10-25T08:00:00.000Z",
|
|
579
|
-
"protocolVersion":
|
|
579
|
+
"protocolVersion": 107,
|
|
580
580
|
"docNotice": null,
|
|
581
581
|
"season": {
|
|
582
582
|
"id": 2,
|
|
@@ -642,7 +642,7 @@
|
|
|
642
642
|
"role": "player",
|
|
643
643
|
"sessionToken": "session-example-token-for-doc-0000000000000",
|
|
644
644
|
"expiresAt": "2026-10-25T08:00:00.000Z",
|
|
645
|
-
"protocolVersion":
|
|
645
|
+
"protocolVersion": 107,
|
|
646
646
|
"docNotice": null,
|
|
647
647
|
"season": {
|
|
648
648
|
"id": 2,
|
|
@@ -666,7 +666,7 @@
|
|
|
666
666
|
}
|
|
667
667
|
```
|
|
668
668
|
|
|
669
|
-
**Agent 令牌登录并带上手上文档的版本(令牌永不过期、expiresAt 为 null;可顺带 agentModel 自报驱动模型,供模型榜分组;文档落后时响应附 docNotice,按提示 GET /agent-api/changes/
|
|
669
|
+
**Agent 令牌登录并带上手上文档的版本(令牌永不过期、expiresAt 为 null;可顺带 agentModel 自报驱动模型,供模型榜分组;文档落后时响应附 docNotice,按提示 GET /agent-api/changes/104 补读增量)**
|
|
670
670
|
|
|
671
671
|
请求:
|
|
672
672
|
|
|
@@ -677,7 +677,7 @@
|
|
|
677
677
|
"data": {
|
|
678
678
|
"token": "session-example-token-for-doc-0000000000000",
|
|
679
679
|
"asAgent": true,
|
|
680
|
-
"docVersion":
|
|
680
|
+
"docVersion": 104,
|
|
681
681
|
"agentModel": "claude-opus-5-5"
|
|
682
682
|
}
|
|
683
683
|
}
|
|
@@ -696,8 +696,8 @@
|
|
|
696
696
|
"role": "agent",
|
|
697
697
|
"sessionToken": "session-example-token-for-doc-0000000000000",
|
|
698
698
|
"expiresAt": null,
|
|
699
|
-
"protocolVersion":
|
|
700
|
-
"docNotice": "接口文档已从
|
|
699
|
+
"protocolVersion": 107,
|
|
700
|
+
"docNotice": "接口文档已从 v104 更新到 v107:请 GET /agent-api/changes/104 查看增量变更,或重新下载 /agent-api.md(与本游戏服务同域名的 HTTPS 地址)。",
|
|
701
701
|
"season": {
|
|
702
702
|
"id": 2,
|
|
703
703
|
"endsAt": "2026-11-22T00:00:00.000Z"
|
|
@@ -4176,7 +4176,7 @@ Agent 连接上报自己的当前计划,供玩家的托管监控界面展示
|
|
|
4176
4176
|
| tiles[].garrison | number | 地块驻军总数;未占领野地为 0(原住守军不计入驻军总数;其编成见 GET_TILE 的 nativePower 与侦察);NPC 城池需侦察(v17):未侦察为 0,已侦察为最近一次侦察快照的总数。 |
|
|
4177
4177
|
| tiles[].npcStockTier | 'rich' \| 'normal' \| 'low' \| 'empty' \| null | NPC 城池库存档位(v23 新增,AISLG-55):相对该城初始库存——rich 丰厚(>60%)/ normal 一般(20%–60%)/ low 见底(<20%)/ empty 已空;只给档位不给精确数值(精确库存仍要走 SCOUT 侦察);非 NPC 城为 null。掠夺后档位随库存变化,全服看到的档位一致。 |
|
|
4178
4178
|
| tiles[].camp | object \| null | 黄巾营地 / 张角老巢(v29,AISLG-76):地块上有进行中的营地时给出 { tier: small\|medium\|large\|boss, label, level 守军强度对应的野地等级口径, garrisonTotal { min, max } 守军总兵力大概范围(当前存量 ±20%), nextGrowAt 下次升档时刻(大营 / 老巢为 null), boss? { stage: outer\|keeper, recoversAt } };其余为 null。营地格不显示野地原住守军,出征用 MARCH 掠夺任务(占领被拒)。详见 GET_YELLOW_TURBAN。 |
|
|
4179
|
-
| tiles[].wildFamous | boolean | 在野名将标记(v54,AISLG-144
|
|
4179
|
+
| tiles[].wildFamous | boolean | 在野名将标记(v54,AISLG-144):该野地落有**本账号还没拥有**的在野名将(公开,名字与属性需侦察)。v104(AISLG-245)起按账号判:本账号已拥有该名将后标记撤下,别的账号看到的不受影响;名将归属见 GET_HEROES 的 famousClaims。这类野地不能被占领(task=occupy 返回 WILD_HERO_UNOCCUPIABLE)。 |
|
|
4180
4180
|
| tiles[].reserve | object \| null | 野地储量(v61,AISLG-165):{ tier 档位 ample 充足 >60% / normal 一般 20%–60% / depleted 枯竭 <20%(所有人可见), current 当前储量, cap 上限, eta { kind empty 预计采空 / full 预计回满, at } };current / cap / eta 仅归属方与侦察过该地块的账号可见,其余为 null。储量与上限为基准单位(bonusRate、gatherRate 同口径);采集与恢复速率随 time_scale 放大,eta 为真实时刻(采空 / 回满随之缩短)。非野地为 null。 |
|
|
4181
4181
|
| tiles[].famous | object \| null | 名城信息(v24 新增,AISLG-56):{ name 名城名, stage 当前阶段(outer 外围阶段须先清外围 / keeper 外围已清、可攻城守并占领), bonusPercent 占领后的独占加成(该城产量 +N%), recoversAt 城守阶段外围恢复满编的时刻(超时无人攻下城守则恢复;外围阶段为 null), effect 占领后的名城独有效果 { kind wall / tower / territory / march / warehouse, percent, resources 仅 territory 有:野地产出的资源列表,其余为 null }(v62,AISLG-166) };全图 8 座名城,对全服可见;非名城为 null。 |
|
|
4182
4182
|
|
|
@@ -4294,7 +4294,7 @@ Agent 连接上报自己的当前计划,供玩家的托管监控界面展示
|
|
|
4294
4294
|
| tile.durability | number \| null | 他人分城的当前城防值(v40,AISLG-124):0..100,按「免战截止前不回涨、之后每小时 +10」惰性结算展示;非 null 即可被 task=occupy 攻打的分城,归零一击换主。主城 / 野地 / NPC 城 / 自己的城为 null。 |
|
|
4295
4295
|
| tile.protection | object \| null | 玩家城与他人占领野地的保护状态(v38 / v39):{ newbieUntil 新手保护截止(含其野地), truceUntil 被动免战截止(仅城池;野地恒 null——城级免战不保护野地), shieldUntil 主动免战截止(含其野地), ownerChangedUntil 换主保护截止(仅野地:刚被抢占后 1 小时基准随缩放,期间玩家与 NPC 都不能再抢) },任一截止时刻未到即受保护(MARCH 被拒,错误码与时限见 MARCH);非玩家目标、自己的地为 null。到期自动失效,无事件。 |
|
|
4296
4296
|
| tile.reserve | object \| null | 野地储量(v61,AISLG-165):{ tier 档位 ample 充足 >60% / normal 一般 20%–60% / depleted 枯竭 <20%(所有人可见), current 当前储量, cap 上限, eta { kind empty 预计采空 / full 预计回满, at } };current / cap / eta 仅归属方与侦察过该地块的账号可见,其余为 null。储量与上限为基准单位(bonusRate、gatherRate 同口径);采集与恢复速率随 time_scale 放大,eta 为真实时刻(采空 / 回满随之缩短)。非野地为 null。 |
|
|
4297
|
-
| tile.wildFamousIntel | object \| null | 在野名将情报(v54,AISLG-144
|
|
4297
|
+
| tile.wildFamousIntel | object \| null | 在野名将情报(v54,AISLG-144):本账号还没拥有的在野名将所在野地才有 { scouted, name, attrs { lead, force, wit } }(v104 起按账号判);未侦察过时 scouted=false、name / attrs 为 null,侦察后(SCOUT 完成)给出名字与三项属性。其余为 null。 |
|
|
4298
4298
|
| tile.plunderedAt | string \| null | 最近一次成功掠夺(攻方胜利)的时间(v16,ISO 8601):距其 24 小时内该地块处于掠夺冷却(基准值,实际受全局时间缩放等比缩短;MARCH task='plunder' 被拒,PLUNDER_COOLDOWN);从未被掠为 null。 |
|
|
4299
4299
|
|
|
4300
4300
|
**可能错误**:`INVALID_PARAMS`、`TILE_UNEXPLORED`(处置建议见第 4 节)
|
|
@@ -4382,7 +4382,7 @@ Agent 连接上报自己的当前计划,供玩家的托管监控界面展示
|
|
|
4382
4382
|
|
|
4383
4383
|
`C→S` 请求-响应 · 需登录后发送
|
|
4384
4384
|
|
|
4385
|
-
从账号主城派出部队前往目标地块,到达后由服务端自动结算。编队 troops 按兵种给出数量(至少一种 > 0),发起时立即从城内驻军扣减;行军时长 = Chebyshev 距离 × 每格秒数(基准 15 秒/格,占位)÷ **编队最慢兵种的行军速度系数**(斥候 ×2、轻骑兵 ×1.5,其余 ×1)÷(1 + 行军科技加成,v27 每级 +5%;v30 AISLG-83:自己城池之间的调兵 / 运输再加出发城**驿站**加成,每级 +10%、10 级翻倍,出征野地 / NPC 城等其他目标不受影响,运输往返与失效返程同吃出发城驿站),**总时长**再 ÷ 全局时间缩放、向上取整、最少 1 秒(见文档头部;不是先把每格缩放取整再乘格数)。以响应里的 arriveAt 为准。v16 新增可选 **task**:`plunder`(掠夺,**缺省值**)或 `occupy`(占领)——只作用于野地与 NPC 城目标,侦察 / 调兵 / 增援忽略 task。目标与结算:**无主野地**按 task 掠夺或占领(战斗 vs 原住守军);**本账号占领的野地** = 增援驻军(不战斗);**未被占领的 NPC 城池**可掠夺,也可占领变分城(v24,AISLG-58;战斗 vs 驻防、守方据墙待敌);**本账号分城** = 调兵(不战斗,到达并入该城驻军);**发起前校验校场(v30,AISLG-80)**:本城同时在外的部队数(行军中含返程 + 驻守野地,不计城内驻军)已达校场等级上限(未建校场按 1)时返回 DEPLOY_LIMIT,SCOUT 同;玩家城池(他人的)、他人占领地块与出发主城本身不可作为目标(玩家对抗随后续阶段开放)。**v38(AISLG-122,玩家对抗一)开放掠夺他人城池**:主城与分城都能打、不用宣战,战斗与 NPC 打主城同口径的守城战(城墙、城防科技、箭塔、守方城守全部生效),发起即给守方推送来袭预警(PUSH_ATTACK_WARNING,预警窗口 = 行军时长,敌情按守方烽火台分档);守方处于新手保护返回 NEWBIE_PROTECTED、免战中返回 TARGET_IN_TRUCE(均附 until / retryAfterSeconds),攻方自己的主动免战生效中返回 SELF_TRUCE_ACTIVE(打野地 / NPC 不受限);**task=occupy 对他人分城开放(v40,AISLG-124,玩家对抗三)**:主城仍返回 TASK_INVALID_FOR_TARGET(永不可占领,只能被掠夺)。分城占领资格与占 NPC 城同口径(GOVERNMENT_TOO_LOW / BRANCH_LIMIT / TARGET_LEVEL_TOO_HIGH,目标等级 = 该城官府等级),发起时初核、到达复核(名额没了照打、只降城防值不换主,事件 battle_won 记 occupied=false 与 denial)。守城战打赢一次(守军全灭)城防值 −35,攻方幸存冲车占比每 1% 再 +1.5(最多 +15);**占领打赢不掠夺资源,掠夺打赢不降城防**;城防降到 0 且名额有空当场换主(详见「玩家对抗与城防值」一节与 GET_TILE 的 tile.durability);每次打赢该城进入 4 小时(基准随缩放)被动免战,免战内城防不回涨、结束后每小时回涨 10 至满——占一座分城至少打 3 次、隔 8 小时以上,守方每次都有时间补兵 / 增援;在途到达时守方进入保护 / 免战则扑空返程(事件 outcome=aborted 附 cause)。**v39(AISLG-123,玩家对抗二)开放抢占他人占领的野地**:task='occupy'(缺省 plunder 返回 TASK_INVALID_FOR_TARGET——地里没有存货可抢);野地战无城墙 / 箭塔 / 城守,守方 = 地块驻军,守方没留驻军不打、直接拿下(无战报);发起即给守方推 PUSH_ATTACK_WARNING(target='wilderness',敌情按其所属城烽火台分档),预警期间可向该地块增援(MARCH 打自己的地块 = 增援);守方处于新手保护(NEWBIE_PROTECTED)或主动免战(TARGET_IN_TRUCE)时其全部野地不可被抢,但守方某座城的被动免战只保护城本身、不保护野地;地块处于换主保护期(被抢占后 1 小时基准随缩放)返回 TILE_PROTECTED;攻方自己的主动免战生效中同样不能抢(SELF_TRUCE_ACTIVE)。**抢占结算**:打赢且出发城占领名额(官府等级)有空 → 地块易主、幸存部队驻守并获得加成、地块进入换主保护(1 小时基准随缩放,玩家与 NPC 都不能再抢);名额已满 → 守方照样失地(wilderness_lost cause=conquest)、地块变无主(不设保护)、攻方幸存返程(事件 battle_won 记 occupied=false / denial=TERRITORY_LIMIT);打输 → 守方继续占领,攻方残部返程;战报 kind='pvp_wilderness' 攻守双方各一份。**到达复核口径(v39)**:到达时地块已无主(对方召回等)→ 扑空返程(aborted,cause=target_gone);已易主第三人 → 扑空返程(aborted,cause=owner_changed);已归本账号 → 转增援并入驻军。战斗为多回合推进结构(速度与射程影响接敌、城墙为守方提供受击减免;具体算法不对外公开,机制概览见术语表「战斗」、兵种数值见「兵种与战斗属性」);攻方歼灭守方获胜、胜方幸存 ≥ 1
|
|
4385
|
+
从账号主城派出部队前往目标地块,到达后由服务端自动结算。编队 troops 按兵种给出数量(至少一种 > 0),发起时立即从城内驻军扣减;行军时长 = Chebyshev 距离 × 每格秒数(基准 15 秒/格,占位)÷ **编队最慢兵种的行军速度系数**(斥候 ×2、轻骑兵 ×1.5,其余 ×1)÷(1 + 行军科技加成,v27 每级 +5%;v30 AISLG-83:自己城池之间的调兵 / 运输再加出发城**驿站**加成,每级 +10%、10 级翻倍,出征野地 / NPC 城等其他目标不受影响,运输往返与失效返程同吃出发城驿站),**总时长**再 ÷ 全局时间缩放、向上取整、最少 1 秒(见文档头部;不是先把每格缩放取整再乘格数)。以响应里的 arriveAt 为准。v16 新增可选 **task**:`plunder`(掠夺,**缺省值**)或 `occupy`(占领)——只作用于野地与 NPC 城目标,侦察 / 调兵 / 增援忽略 task。目标与结算:**无主野地**按 task 掠夺或占领(战斗 vs 原住守军);**本账号占领的野地** = 增援驻军(不战斗);**未被占领的 NPC 城池**可掠夺,也可占领变分城(v24,AISLG-58;战斗 vs 驻防、守方据墙待敌);**本账号分城** = 调兵(不战斗,到达并入该城驻军);**发起前校验校场(v30,AISLG-80)**:本城同时在外的部队数(行军中含返程 + 驻守野地,不计城内驻军)已达校场等级上限(未建校场按 1)时返回 DEPLOY_LIMIT,SCOUT 同;玩家城池(他人的)、他人占领地块与出发主城本身不可作为目标(玩家对抗随后续阶段开放)。**v38(AISLG-122,玩家对抗一)开放掠夺他人城池**:主城与分城都能打、不用宣战,战斗与 NPC 打主城同口径的守城战(城墙、城防科技、箭塔、守方城守全部生效),发起即给守方推送来袭预警(PUSH_ATTACK_WARNING,预警窗口 = 行军时长,敌情按守方烽火台分档);守方处于新手保护返回 NEWBIE_PROTECTED、免战中返回 TARGET_IN_TRUCE(均附 until / retryAfterSeconds),攻方自己的主动免战生效中返回 SELF_TRUCE_ACTIVE(打野地 / NPC 不受限);**task=occupy 对他人分城开放(v40,AISLG-124,玩家对抗三)**:主城仍返回 TASK_INVALID_FOR_TARGET(永不可占领,只能被掠夺)。分城占领资格与占 NPC 城同口径(GOVERNMENT_TOO_LOW / BRANCH_LIMIT / TARGET_LEVEL_TOO_HIGH,目标等级 = 该城官府等级),发起时初核、到达复核(名额没了照打、只降城防值不换主,事件 battle_won 记 occupied=false 与 denial)。守城战打赢一次(守军全灭)城防值 −35,攻方幸存冲车占比每 1% 再 +1.5(最多 +15);**占领打赢不掠夺资源,掠夺打赢不降城防**;城防降到 0 且名额有空当场换主(详见「玩家对抗与城防值」一节与 GET_TILE 的 tile.durability);每次打赢该城进入 4 小时(基准随缩放)被动免战,免战内城防不回涨、结束后每小时回涨 10 至满——占一座分城至少打 3 次、隔 8 小时以上,守方每次都有时间补兵 / 增援;在途到达时守方进入保护 / 免战则扑空返程(事件 outcome=aborted 附 cause)。**v39(AISLG-123,玩家对抗二)开放抢占他人占领的野地**:task='occupy'(缺省 plunder 返回 TASK_INVALID_FOR_TARGET——地里没有存货可抢);野地战无城墙 / 箭塔 / 城守,守方 = 地块驻军,守方没留驻军不打、直接拿下(无战报);发起即给守方推 PUSH_ATTACK_WARNING(target='wilderness',敌情按其所属城烽火台分档),预警期间可向该地块增援(MARCH 打自己的地块 = 增援);守方处于新手保护(NEWBIE_PROTECTED)或主动免战(TARGET_IN_TRUCE)时其全部野地不可被抢,但守方某座城的被动免战只保护城本身、不保护野地;地块处于换主保护期(被抢占后 1 小时基准随缩放)返回 TILE_PROTECTED;攻方自己的主动免战生效中同样不能抢(SELF_TRUCE_ACTIVE)。**抢占结算**:打赢且出发城占领名额(官府等级)有空 → 地块易主、幸存部队驻守并获得加成、地块进入换主保护(1 小时基准随缩放,玩家与 NPC 都不能再抢);名额已满 → 守方照样失地(wilderness_lost cause=conquest)、地块变无主(不设保护)、攻方幸存返程(事件 battle_won 记 occupied=false / denial=TERRITORY_LIMIT);打输 → 守方继续占领,攻方残部返程;战报 kind='pvp_wilderness' 攻守双方各一份。**到达复核口径(v39)**:到达时地块已无主(对方召回等)→ 扑空返程(aborted,cause=target_gone);已易主第三人 → 扑空返程(aborted,cause=owner_changed);已归本账号 → 转增援并入驻军。战斗为多回合推进结构(速度与射程影响接敌、城墙为守方提供受击减免;具体算法不对外公开,机制概览见术语表「战斗」、兵种数值见「兵种与战斗属性」);攻方歼灭守方获胜、胜方幸存 ≥ 1,攻方战败(全灭或回合耗尽)时幸存部队撤回出发城。**兵力占比对称折算战损(v103 起,AISLG-244;v105 扩到所有战斗、攻守对称,AISLG-246)**:所有用战斗引擎结算的战斗都按同一条规则折算战损,攻守双方各算各的——对每一方,r = 本方参考战力 ÷ 对方参考战力,r ≤ 3 时不变,r > 3 时本方各兵种损失按 round(原损失 × 3 / r)(四舍五入、不多于原值),带越多兵战损越低(此前堆过 2 倍后战损几乎不再下降);对方参考战力为 0(空守军)不折算。胜负 / 回合数 / 逐回合战报 / 战利品 / 掠夺与占领结算都不变,被碾压的一方 r < 1/3 战损不变,所以只会减少强者一方的损失。**掠夺结算(task=plunder)**:野地奖励池 = 地形对应资源 × 750 × 等级 + 金币 × 250 × 等级(v21 掠夺含金,AISLG-31;金矿 gold_mine 保持空池——金矿定位占领生息);NPC 城 = 持久化库存(v21 起含金币;库存不再生、掠空后无收益)。实际带走量按**幸存部队负重**装填(Σ 数量 × 单兵 carry,v27 起再 × 负重科技加成(每级 +5%,向下取整);运输任务的负重上限同口径:民夫 500、斥候/刀盾兵 80、轻骑兵 100,其余 60,占位),按**金→粮→木→石→铁**顺序装满即止,立即入账出发城(不钳储量上限);不改归属、幸存部队返程;成功掠夺的地块进入 24 小时冷却(基准,受全局时间缩放;发起时校验 PLUNDER_COOLDOWN——v22 起该失败附 retryAfterSeconds(冷却截止 − 当前时刻,等满后重发必然受理;在途到达仍战斗但资源为零)。**掠夺玩家城(v38,AISLG-122)**:可抢池 = 城内资源先扣仓库保护(粮/木/石/铁 各保护 1000×仓库等级,金币不受保护),再乘单次比例上限(四资源 45%、金币 15%,v42 AISLG-126 校准拍板)与等级差衰减(出发城官府比目标城官府高 5 级起每多 1 级收益 −15%、最低 25%——大号打小号不禁止但收益递减),最后仍按幸存部队负重装填;攻破(守军全灭)后该城进入 4 小时(基准,随缩放)被动免战,玩家与 NPC 都不能再打它(GET_TILE 的 tile.protection 可查);战报 kind='pvp_raid',攻守双方各得一份;玩家城不受地块掠夺冷却限制(免战即冷却)。**名城(v24,AISLG-56,GET_TILE / 地图的 famous 字段标识,全图 8 座)分两阶段**:外围阶段对其出征(掠夺 / 占领都一样)打的是外围驻军(野战无城墙),打赢 = 外围清空、名城进入城守阶段(事件 battle_won 含 stage='outer'、outerCleared=true、recoversAt),无战利品;城守阶段(限时,超时外围恢复满编)再出征攻城守——task=plunder 掠夺其库存,task=occupy 占领并变分城(以名城命名、产量 +20%,名城计入分城上限);外围未清时对其 task=occupy 返回 OUTER_NOT_CLEARED。名城守军 = 同等级普通 NPC 城 × 3(外围与城守各一半)。**占领 NPC 城(task=occupy,v24)**:需同时满足——主城官府 ≥ 3 级(GOVERNMENT_TOO_LOW);分城数 < 分城上限 = floor(主城官府等级 ÷ 2)(BRANCH_LIMIT,名城同样计入);目标 NPC 城等级 ≤ 出发城的官府等级(TARGET_LEVEL_TOO_HIGH)。发起时初核,Worker 到达时复核(不满足则胜利后不建分城、幸存部队返程,事件 battle_won 记录 occupied=false 与 denial)。打赢后该城成为分城:接收 NPC 城的建筑与**剩余库存**,幸存部队进城驻守,分城可独立建造 / 征兵 / 出征(城池类协议带 cityId);占领不受掠夺冷却限制,不另行掠夺(库存随城移交)。**占领野地结算(task=occupy 目标为野地)**:无一次性战利品;该城占领野地数低于官府等级(上限 = 官府等级,随官府升级提高)时改归属、幸存部队驻守并获得持续加成;发起时初核 TERRITORY_LIMIT,到达复核(超限则胜利后不改归属、幸存部队返程,事件记录 occupied=false / denial=TERRITORY_LIMIT)。**盟友不可攻击(v67,AISLG-182)**:目标城池 / 野地的主人与你同属一个联盟时,掠夺、抢占野地、占领分城一律返回 ALLY_NOT_ATTACKABLE(运输、增援、调兵不受影响);出发后目标才成为盟友的,部队到达时不开战、原路返回(事件 outcome=aborted,cause=ALLY_NOT_ATTACKABLE)。**协防(v74,AISLG-194)**:task=assist 把部队派进盟友的主城 / 分城驻扎——行军时长与普通行军相同(驿站不加速);每座城最多接收 5 支、同一账号对同一座城最多 1 支(在途也算,超限 ASSIST_LIMIT),任务占派出城校场名额、耗粮按野外 2 倍由出发城承担;守城战里与城主驻军合并成守方参战(各方科技只作用于各自部队,城守武将只加成城主部队),战后同一兵种伤亡按开战数量比例分摊(取整余数归城主),派出方会收到一份带 assistLosses 的战报;派出方随时可召回、城主可遣返(DISMISS_ASSIST),退盟 / 被踢 / 解散与分城易主时自动遣返。出发后才退盟的,到达按 ASSIST_NOT_ALLY 原路返回。每场战斗生成一份战报(GET_BATTLE_REPORTS 可查、PUSH_BATTLE_REPORT 推送)。 迷雾(v92,AISLG-224):目标未探索且不在视野内时(只限 task = plunder / occupy),目标相关的校验(保护、免战、占领资格等)被拒绝也不报错:照常建立行军,响应结构与校验通过时完全一致,且不会向守方发来袭预警、不破除新手保护;到达后由服务端复核——守方仍受保护或目标已不是可打的对象时原路返回(aborted),否则按现有规则结算。兵力不足、出征上限、迁城后的攻击限制(MOVE_CITY_ATTACK_LOCK)等与目标无关的校验照旧报错。
|
|
4386
4386
|
|
|
4387
4387
|
**请求字段**
|
|
4388
4388
|
|
|
@@ -4415,9 +4415,9 @@ Agent 连接上报自己的当前计划,供玩家的托管监控界面展示
|
|
|
4415
4415
|
| march.targetId | string \| null | 截击的移动目标 id(v28,AISLG-78):purpose=intercept 及其撤回后的返程行军有值,其余为 null。 |
|
|
4416
4416
|
| march.cargo | object \| null | 随行运送的资源(v26,Resources 形):运输行军及其被撤回 / 目标失效后的返程行军携带,其余为 null。 |
|
|
4417
4417
|
|
|
4418
|
-
**可能错误**:`INVALID_PARAMS`、`INSUFFICIENT_RESOURCES`、`CARGO_OVER_CAPACITY`、`DEPLOY_LIMIT`、`MOVING_TARGET_GONE`、`TARGET_NOT_ATTACKABLE`、`INSUFFICIENT_TROOPS`、`PLUNDER_COOLDOWN`、`TASK_INVALID_FOR_TARGET`、`TERRITORY_LIMIT`、`GOVERNMENT_TOO_LOW`、`BRANCH_LIMIT`、`DISCARD_COOLDOWN`、`TARGET_LEVEL_TOO_HIGH`、`OUTER_NOT_CLEARED`、`NEWBIE_PROTECTED`、`TARGET_IN_TRUCE`、`SELF_TRUCE_ACTIVE`、`TILE_PROTECTED`、`ALLY_NOT_ATTACKABLE`(处置建议见第 4 节)
|
|
4418
|
+
**可能错误**:`INVALID_PARAMS`、`INSUFFICIENT_RESOURCES`、`CARGO_OVER_CAPACITY`、`DEPLOY_LIMIT`、`MOVING_TARGET_GONE`、`TARGET_NOT_ATTACKABLE`、`INSUFFICIENT_TROOPS`、`PLUNDER_COOLDOWN`、`TASK_INVALID_FOR_TARGET`、`TERRITORY_LIMIT`、`GOVERNMENT_TOO_LOW`、`BRANCH_LIMIT`、`DISCARD_COOLDOWN`、`TARGET_LEVEL_TOO_HIGH`、`OUTER_NOT_CLEARED`、`NEWBIE_PROTECTED`、`TARGET_IN_TRUCE`、`SELF_TRUCE_ACTIVE`、`TILE_PROTECTED`、`ALLY_NOT_ATTACKABLE`、`WILD_HERO_UNOCCUPIABLE`(处置建议见第 4 节)
|
|
4419
4419
|
|
|
4420
|
-
**Agent 提示**:到达结算产生 march_completed 事件(purpose=plunder 时 outcome=plunder_won:含 loot 战利品、carry 负重、returning 返程行军 id;purpose=occupy 时 outcome=battle_won:含 occupied(false 时附 denial:野地为 TERRITORY_LIMIT
|
|
4420
|
+
**Agent 提示**:到达结算产生 march_completed 事件(purpose=plunder 时 outcome=plunder_won:含 loot 战利品、carry 负重、returning 返程行军 id;purpose=occupy 时 outcome=battle_won:含 occupied(false 时附 denial:野地为 TERRITORY_LIMIT 或 WILD_HERO_UNOCCUPIABLE(在野名将所在野地不可占领,v104),NPC 城为 GOVERNMENT_TOO_LOW / BRANCH_LIMIT / TARGET_LEVEL_TOO_HIGH;NPC 城占领成功另含 cityId)),战斗另生成战报。掠夺量由幸存部队的负重封顶——想多带资源就多派民夫(单兵 carry 500,其余兵种 50–100);同一地块 24 小时(基准)只能成功掠夺一次(GET_TILE 的 plunderedAt 可判冷却截止),占领不受冷却限制但受官府等级上限。**黄巾营地 / 老巢(v29,AISLG-76)**:目标格有进行中的营地(TileView.camp 非 null)时,MARCH 的掠夺任务即清剿营地——野战(无城墙)打营地当前守军(战后存量每小时恢复 25%),歼灭的黄巾单位数累计为贡献(输赢都算);普通营地打赢消失并按幸存部队负重(含负重科技)装填掉落池(金 + 四资源)即时入账,清剿数 +1,达到 80% 出现老巢;老巢外围阶段打赢 = 外围清空(无战利品,限时内进入城守阶段),城守阶段打赢 = 老巢被击破(掉落 + 首杀播报 + 事件收场);输方幸存部队撤回。task=occupy 返回 TASK_INVALID_FOR_TARGET,不受掠夺冷却限制。战报 kind='yellow_turban',事件 march_completed 的 outcome=camp_won / camp_lost / boss_outer_cleared / boss_won(含 killed 歼敌数、campTier、stage)。**截击移动目标(带 targetId,v28,AISLG-78;v35 AISLG-112 改为「到了先埋伏」)**:目标路线与时刻表固定,发起时就把 arriveAt 定为预计接战时刻 = max(部队到达时刻, 目标进入选定格相邻范围(Chebyshev 距离 ≤ 1)的时刻)——部队提前到达则原地埋伏(MarchView.ambushAt 为埋伏开始时刻)等目标经过再开打,不必掐点;到达时目标已走出范围(太晚)→ 按到达时刻结算、「扑空」返程。接战为野战(无城墙,守军即目标守军,打赢目标消失,按幸存部队负重(含负重科技)装填其携带的资源即时入账,不钳储量上限;打输幸存部队撤回、目标原样留存);目标已被他人击败或过时 → 「目标消失」,不接战、部队返程。埋伏期间部队照常占校场名额、按在外口径耗粮,可 RECALL_MARCH 撤回。三种结果都有战报(kind='intercept',扑空 / 消失时 contact='missed' / 'gone'、endReason='no_contact'、rounds=0)与 march_completed 事件(outcome=intercepted / intercept_lost / intercept_missed / intercept_gone)。**运输(task=transport,v26,AISLG-79)**:目标必须是本账号的另一座城(出发城自身 / 野地 / NPC 城 / 他人城池返回 TASK_INVALID_FOR_TARGET)。发起即从出发城扣除 cargo 与派出部队;到达后货物**即时入账**目标城(与掠夺所得同规则:不钳储量上限),部队自动返程回出发城;运输队不会被 NPC 拦截(与「NPC 不攻击行军中的部队」同口径);途中 RECALL_MARCH 撤回时货物随部队回到出发城,到达目标前目标城失效(如账号重置)同理带回。到达产生两条 march_completed 事件:出发城一条 outcome='transported'(含 cargo / cityId / cityName / returning),目标城一条 outcome='transport_received'(cityId 指向目标城,含 cargo / fromCityName)。同账号在线连接还会收到 PUSH_MARCH_STATE / PUSH_TILE_STATE / PUSH_BATTLE_REPORT。离线期间服务端照常结算,上线后用 GET_EVENTS(sinceId)补读。行军途中可 RECALL_MARCH 折返;城内驻军在 city.army,出征中的部队不在其中。
|
|
4421
4421
|
|
|
4422
4422
|
**示例**
|
|
4423
4423
|
|
|
@@ -5342,7 +5342,7 @@ Agent 连接上报自己的当前计划,供玩家的托管监控界面展示
|
|
|
5342
5342
|
| reports[].endReason | 'defender_wiped' \| 'attacker_wiped' \| 'round_limit' \| 'no_contact' | 守方全灭 / 攻方全灭(含同回合同归于尽)/ 回合耗尽(攻方未能突破,v15 起幸存部队撤回出发城)/ 未接战(v28 截击扑空或目标消失,见 contact)。 |
|
|
5343
5343
|
| reports[].attacker / reports[].defender | object | 双方汇总:{ name 展示名, troops 编成, losses 损失, survivors 幸存, damage 总输出, units 总单位数, totalHp 总血量, avgRange 平均射程(1 位小数,数量加权——会被大量近战稀释,不代表克制关系), maxRange 编成单兵射程最大值, rangedUnits 远程单位数(射程 > 近战基准 10,当前即弓箭兵), hero 武将(v36 新增,AISLG-114/115:{ name, lead, force, wit, atkPercent, defPercent }——攻方 = 随队武将、守方 = 城守(仅守城战 kind=city_raid),atkPercent/defPercent 为按部队规模折算后的实际生效加成;未配将 / 历史战报为 null), wounded 伤兵 / captured 被俘(v85 新增,AISLG-212:玩家一方损失 × 20% 进伤兵营;被胜方抓走的部分只含基础七兵种;NPC 一方 wounded 为全 0;历史战报缺省视为 0), captives 抓到的俘虏(v85 新增:胜方为玩家时才有,从败方损失抓 10% 进胜方城的俘虏营;平局 / NPC 胜为缺省 0)}。阵亡 = losses − wounded − captured;伤兵 / 俘虏的后续处置用 GET_STATE 的 city.wounded / captives + RESTORE_TROOPS。units/totalHp/avgRange 为 v21 新增、maxRange/rangedUnits 为 v23 新增(AISLG-49),hero 为 v36 新增,服务端按 troops 汇总下发,历史战报同样补齐;判断「对方有多少单位在远端输出、够多远」用 maxRange + rangedUnits,不要用 avgRange。 |
|
|
5344
5344
|
| reports[].wallDefensePercent | number | 守方城墙守城减伤(百分数;非守城战斗为 0)。 |
|
|
5345
|
-
| reports[].roundLog | array | 逐回合统计:{ round, attackerDamage, defenderDamage, attackerKilled, defenderKilled, towerDamage? }(推进回合伤害为 0;towerDamage 为该回合箭塔伤害,已含在 defenderDamage 内,v30)。 |
|
|
5345
|
+
| reports[].roundLog | array | 逐回合统计:{ round, attackerDamage, defenderDamage, attackerKilled, defenderKilled, towerDamage? }(推进回合伤害为 0;towerDamage 为该回合箭塔伤害,已含在 defenderDamage 内,v30)。v105(AISLG-246)起战损按兵力占比对称折算,逐回合统计保留引擎原值、合计可能大于最终 losses——总损失以 attacker / defender 的 losses 为准。 |
|
|
5346
5346
|
| reports[].comment | object \| null | Agent 写回的战报点评(v23 新增,AISLG-53):{ text 点评正文, updatedAt 最近写入时间 };尚未有点评为 null。一份战报只保留最新一条(Agent 重写覆盖)。 |
|
|
5347
5347
|
| reports[].createdAt | string | 战斗结算时间(ISO 8601)。 |
|
|
5348
5348
|
|
|
@@ -5982,8 +5982,8 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
5982
5982
|
| 字段 | 类型 | 说明 |
|
|
5983
5983
|
| --- | --- | --- |
|
|
5984
5984
|
| broadcasts | array | 播报列表(新→旧):{ id, type, detail, createdAt }。 |
|
|
5985
|
-
| broadcasts[].type | 'npc_city_emptied' \| 'gold_mine_first' \| 'city_broken' \| 'win_streak' \| 'yt_started' \| 'yt_grown' \| 'yt_boss' \| 'yt_boss_first_kill' \| 'yt_finished' \| 'hero_granted' \| 'city_conquered' \| 'arena_champion' \| 'star_tower_cleared' \| 'announcement' \| 'battlefield_signup' \| 'battlefield_started' \| 'battlefield_stronghold' \| 'battlefield_finished' \| 'nobility_promoted' \| 'alliance_diplomacy' \| 'luoyang_window' \| 'famous_first_explored' \| 'hero_site_first_explored' \| 'legendary_relic_claimed' \| 'hero_left' \| 'hero_captured' \| 'faction_expanded' \| 'faction_city_swallowed' \| 'faction_lair_destroyed' | 播报类型(yt_* 为 v29 黄巾之乱:起事 / 坐大 / 老巢出现 / 老巢首杀 / 收场;hero_granted 为 v36 获得名将;city_conquered 为 v40 分城易主;arena_champion 为 v53 竞技场登上第 1 名;star_tower_cleared 为 v55 将星塔 Boss 层首通;battlefield_* 为 v75 剧本战场报名 / 开战 / 据点易手 / 收场;nobility_promoted 为 v76 升到大夫及以上;alliance_diplomacy 为 v77 结成友盟 / 宣布敌对;announcement 为 v60 公告播报;luoyang_window 为 v79 洛阳窗口预告 / 开始 / 结束 / 易主 / 政令;famous_first_explored / hero_site_first_explored / legendary_relic_claimed 为 v93 战争迷雾的名城首探、名将处所首探、传说遗迹领取;以上均必达、不受每分钟 3 条限频;hero_left 为 v94 名将下野(忠诚度归零,或被俘后囚禁到期未赎回);hero_captured 为 v94 名将被俘;这两类走普通限频;faction_expanded 为 v99 五方势力的势力范围半径扩大(必达,每周最多一次);faction_city_swallowed 为 v100 势力围攻吞下玩家分城(必达,detail = { username(原主人), cityName, faction, factionName, x, y });faction_lair_destroyed 为 v101 某家势力的老巢被攻破、本季灭亡(必达,detail = { username(最后一击的玩家), faction, factionName, leader, leaderEn }
|
|
5986
|
-
| broadcasts[].detail | object | 按类型解释:npc_city_emptied = { username, cityName, x, y, level };gold_mine_first = { username, cityName, x, y };city_broken = { username, cityName, x, y };win_streak = { username, cityName, streak };yt_started = { totalCamps, endsAt };yt_grown = { count, tier, label }(count 个营地升到 tier 档);yt_boss = { x, y }(老巢坐标);yt_boss_first_kill = { username, cityName };yt_finished = { reason: boss_cleared\|timeout, clearedCamps, totalCamps, scatteredCamps }(人名可能是玩家本人,也可能是其 Agent 打出的成绩——成绩记在账号上);arena_champion = { username, previous }(username 登上第 1 名,previous 为被取代的原第 1 名,可能是守擂者);star_tower_cleared = { username, floor }(floor 为刚首通的 Boss 层);battlefield_signup = { eventId, signupStartAt, startAt, endAt };battlefield_started = { eventId, startAt, endAt };battlefield_stronghold = { eventId, strongholdId, name, camp, username, firstCapture, reportId }(据点易手,camp 为新归属);battlefield_finished = { eventId, winner, reason: score\|base_captured, scoreYuan, scoreCao };nobility_promoted = { accountId, username, nobility, name, prestige };alliance_diplomacy = { kind: friendly\|hostile\|neutral, actorAlliance, actorAllianceName, otherAlliance, otherAllianceName };hero_granted = { username, heroName, source }(source 为获得途径文字,如「首占名城「X」」「黄巾老巢首杀」「黄巾之乱贡献榜第 N 名」「在野名将(打赢守军后结交招揽)」「结交招揽」);city_conquered = { username(攻方), cityName, from(守方用户名), x, y };announcement = { announcementId, title }(title 为公告中文标题);luoyang_window = { phase, ... }:phase = holder 洛阳易主(allianceId, allianceName, username)| soon 窗口前预告(startAt, endAt)| started 窗口开始(startAt, endAt)| ended 窗口结束(startAt, endAt)| decree 盟主发政令(allianceId, decreeKind = recruit\|march\|research, until);famous_first_explored = { username, name }(name 为名城名,不带坐标);hero_site_first_explored = { username, name, hero }(name 为处所名,hero 为名将名,不带坐标);legendary_relic_claimed = { username, kind }(kind 为遗迹种类,当前唯一的传说遗迹为 mausoleum,不带坐标);hero_left = { username, heroName }(username 为主人用户名,查不到时为 null);hero_captured = { ownerUsername, captorUsername, heroName }(主人与胜方用户名,查不到时为 null);faction_expanded = { radius, day }(五家的势力范围半径同时扩大到 radius 格,day 为本季第几天;不带坐标);faction_city_swallowed = { username, cityName, faction, factionName, x, y }(username 为失城玩家,cityName 为失城名,faction / factionName 为吞下它的势力);faction_lair_destroyed = { username, faction, factionName, leader, leaderEn }(username 为最后一击的玩家,faction / factionName 为被攻破的势力,leader
|
|
5985
|
+
| broadcasts[].type | 'npc_city_emptied' \| 'gold_mine_first' \| 'city_broken' \| 'win_streak' \| 'yt_started' \| 'yt_grown' \| 'yt_boss' \| 'yt_boss_first_kill' \| 'yt_finished' \| 'hero_granted' \| 'city_conquered' \| 'arena_champion' \| 'star_tower_cleared' \| 'announcement' \| 'battlefield_signup' \| 'battlefield_started' \| 'battlefield_stronghold' \| 'battlefield_finished' \| 'nobility_promoted' \| 'alliance_diplomacy' \| 'luoyang_window' \| 'famous_first_explored' \| 'hero_site_first_explored' \| 'legendary_relic_claimed' \| 'hero_left' \| 'hero_captured' \| 'faction_expanded' \| 'faction_city_swallowed' \| 'faction_lair_destroyed' \| 'faction_suppressed' | 播报类型(yt_* 为 v29 黄巾之乱:起事 / 坐大 / 老巢出现 / 老巢首杀 / 收场;hero_granted 为 v36 获得名将;city_conquered 为 v40 分城易主;arena_champion 为 v53 竞技场登上第 1 名;star_tower_cleared 为 v55 将星塔 Boss 层首通;battlefield_* 为 v75 剧本战场报名 / 开战 / 据点易手 / 收场;nobility_promoted 为 v76 升到大夫及以上;alliance_diplomacy 为 v77 结成友盟 / 宣布敌对;announcement 为 v60 公告播报;luoyang_window 为 v79 洛阳窗口预告 / 开始 / 结束 / 易主 / 政令;famous_first_explored / hero_site_first_explored / legendary_relic_claimed 为 v93 战争迷雾的名城首探、名将处所首探、传说遗迹领取;以上均必达、不受每分钟 3 条限频;hero_left 为 v94 名将下野(忠诚度归零,或被俘后囚禁到期未赎回);hero_captured 为 v94 名将被俘;这两类走普通限频;faction_expanded 为 v99 五方势力的势力范围半径扩大(必达,每周最多一次);faction_city_swallowed 为 v100 势力围攻吞下玩家分城(必达,detail = { username(原主人), cityName, faction, factionName, x, y });faction_lair_destroyed 为 v101 某家势力的老巢被攻破、本季灭亡(必达,detail = { username(最后一击的玩家), faction, factionName, leader, leaderEn });faction_suppressed 为 v107(AISLG-249)某家势力的压制档变化——老巢被打到跨档(升档)或营恢复导致降档(必达,不受每分钟限频))。 |
|
|
5986
|
+
| broadcasts[].detail | object | 按类型解释:npc_city_emptied = { username, cityName, x, y, level };gold_mine_first = { username, cityName, x, y };city_broken = { username, cityName, x, y };win_streak = { username, cityName, streak };yt_started = { totalCamps, endsAt };yt_grown = { count, tier, label }(count 个营地升到 tier 档);yt_boss = { x, y }(老巢坐标);yt_boss_first_kill = { username, cityName };yt_finished = { reason: boss_cleared\|timeout, clearedCamps, totalCamps, scatteredCamps }(人名可能是玩家本人,也可能是其 Agent 打出的成绩——成绩记在账号上);arena_champion = { username, previous }(username 登上第 1 名,previous 为被取代的原第 1 名,可能是守擂者);star_tower_cleared = { username, floor }(floor 为刚首通的 Boss 层);battlefield_signup = { eventId, signupStartAt, startAt, endAt };battlefield_started = { eventId, startAt, endAt };battlefield_stronghold = { eventId, strongholdId, name, camp, username, firstCapture, reportId }(据点易手,camp 为新归属);battlefield_finished = { eventId, winner, reason: score\|base_captured, scoreYuan, scoreCao };nobility_promoted = { accountId, username, nobility, name, prestige };alliance_diplomacy = { kind: friendly\|hostile\|neutral, actorAlliance, actorAllianceName, otherAlliance, otherAllianceName };hero_granted = { username, heroName, source }(source 为获得途径文字,如「首占名城「X」」「黄巾老巢首杀」「黄巾之乱贡献榜第 N 名」「在野名将(打赢守军后结交招揽)」「结交招揽」);city_conquered = { username(攻方), cityName, from(守方用户名), x, y };announcement = { announcementId, title }(title 为公告中文标题);luoyang_window = { phase, ... }:phase = holder 洛阳易主(allianceId, allianceName, username)| soon 窗口前预告(startAt, endAt)| started 窗口开始(startAt, endAt)| ended 窗口结束(startAt, endAt)| decree 盟主发政令(allianceId, decreeKind = recruit\|march\|research, until);famous_first_explored = { username, name }(name 为名城名,不带坐标);hero_site_first_explored = { username, name, hero }(name 为处所名,hero 为名将名,不带坐标);legendary_relic_claimed = { username, kind }(kind 为遗迹种类,当前唯一的传说遗迹为 mausoleum,不带坐标);hero_left = { username, heroName }(username 为主人用户名,查不到时为 null);hero_captured = { ownerUsername, captorUsername, heroName }(主人与胜方用户名,查不到时为 null);faction_expanded = { radius, day }(五家的势力范围半径同时扩大到 radius 格,day 为本季第几天;不带坐标);faction_city_swallowed = { username, cityName, faction, factionName, x, y }(username 为失城玩家,cityName 为失城名,faction / factionName 为吞下它的势力);faction_lair_destroyed = { username, faction, factionName, leader, leaderEn }(username 为最后一击的玩家,faction / factionName 为被攻破的势力,leader 为它的首领名将名);faction_suppressed = { faction, factionName, level, previousLevel, direction: up\|down, campsTotal, campsRemaining }(level 为变化后的压制档 0~3,previousLevel 为变化前的档位,direction = up 表示被打到升档、down 表示营恢复导致降档;不带坐标与玩家名)。 |
|
|
5987
5987
|
| broadcasts[].createdAt | string | 播报写入时间(ISO 8601)。 |
|
|
5988
5988
|
|
|
5989
5989
|
**Agent 提示**:播报是全服氛围信息,与你的决策无强制关系;但「某 NPC 城被掠空」意味着那座城不再值得打,「首个占领金矿」意味着金矿红利已被拿走。别把播报当任务清单——玩家对打法的意图直接与玩家沟通确认。
|
|
@@ -6681,7 +6681,7 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
6681
6681
|
|
|
6682
6682
|
`C→S` 请求-响应 · 需登录后发送
|
|
6683
6683
|
|
|
6684
|
-
返回账号全部武将(含属性、等级 / 经验、自由点数、俸禄、欠饷 / 重伤 / 历练状态、占用关系、今日剩余次数)、当前(或指定)城酒馆的候选(v87 AISLG-217 起:酒馆只在主城建造、候选账号只有一份,固定为主城那座,每 4 小时基准随时间缩放刷新 3 名)、普通将 / 名将数量与上限、全部 45
|
|
6684
|
+
返回账号全部武将(含属性、等级 / 经验、自由点数、俸禄、欠饷 / 重伤 / 历练状态、占用关系、今日剩余次数)、当前(或指定)城酒馆的候选(v87 AISLG-217 起:酒馆只在主城建造、候选账号只有一份,固定为主城那座,每 4 小时基准随时间缩放刷新 3 名)、普通将 / 名将数量与上限、全部 45 名名将的归属(famousClaims:29 名在野名将按全服拥有人数 ownerCount 展示、ownerUsername 恒为 null,还没人获得时 wildAt 为 null、被获得后才给出落位;名城 8 / 黄巾 3 / 势力首领 5 仍显示单一持有人 ownerUsername),以及在野名将的结交进度(friendships)与结交资格(unlocks)。武将规则(数值均为占位):**普通将**从酒馆招募,三项属性(统率 lead / 武力 force / 智力 wit)各 10–40 随机;招募费 = 500 + 三项合计 × 20(金币,从主城扣)。**名将**(三项各 45–65)只从 PvE 获得:29 名在野名将每个账号各能有一份(v104,AISLG-245,同账号同名唯一),名城 8 / 黄巾 3 / 势力首领 5 仍全服唯一(见 famousClaims)。带兵加成:全军攻击 + 武力 × 0.3%、全军受到伤害 − 智力 × 0.3%,各自封顶 20%;能吃到加成的兵数 = 统率 × 20,部队超出时按比例摊薄(统率是带大军的关键)。俸禄每小时从主城扣(普通将 20 × 等级、名将 100 × 等级金币,随全局时间缩放),主城金币不够即「欠饷」(arrears=true,不能出征),扣款成功自动恢复。带队战败(攻方失败或全灭)武将重伤 2 小时(随缩放),期间不能出征、不会死亡。经验(v36 AISLG-116):带队参战(含城守守城)获得经验 = 本场歼灭敌军的参考战力,战败减半;升到 L+1 级需 100 × L²,每升一级获得自由点数(普通将 3、名将 5,由玩家分到三项属性,v54 起升级不再自动加属性),上限 40 级——加成仍受 20% 封顶,高等级的主要收益是统率提高(带更多兵吃满加成)。在野名将(v54,AISLG-144):29 名名将隐居在 Lv3 以上的野地里(开服时分配,之后不变)。地图上该野地带 wildFamous 标记;派部队打赢它的原住守军(守军为同级野地的 2 倍)即获得该名将的结交资格(GET_HEROES 的 unlocks)。结交(BEFRIEND_HERO)花主城金币 500 × 野地等级,好感 +10,每个名将每游戏日最多 5 次,同时结交(好感未满、未被招揽)最多 2 名。好感满 100 后招揽(RECRUIT_FAMOUS_HERO)。**v104(AISLG-245)起每个账号各拿一个**:29 名在野名将的唯一性只到「同一账号不能有两个」,不同账号各走一遍流程互不影响(先到先得不再成立);本账号招到之后结交进度清空,名将解雇 / 下野后本账号可从头再来(别人的同名名将与进度不受影响)。
|
|
6685
6685
|
|
|
6686
6686
|
**请求字段**
|
|
6687
6687
|
|
|
@@ -6701,9 +6701,9 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
6701
6701
|
| famousCap / famousCount | number | 名将上限(固定 3,不占普通将上限)与当前数量。 |
|
|
6702
6702
|
| heroes | array | 账号全部武将:{ id, name, famous, lead, force, wit, level, exp, expNext 距下一级, salaryPerHour 已随时间缩放, arrears 欠饷, woundedUntil 重伤恢复时刻或 null, guardCityId 正在城守的城或 null, marchingMarchId 正在随行的行军或 null, bonus { atkPercent, defPercent, leadCap }(满编口径), guardProductionPercent 城守产量加成, loyalty 忠诚度 0..100(v94,只有 29 位在野名将有,其余为 null;30 及以下应标红提醒), captive 被俘囚禁 { capturedUntil 截止时刻, ransomGold 赎金 } 或 null(v94;被俘时不能出征 / 任城守 / 历练 / 赏赐 / 解雇 / 加点 / 洗点 / 施计,可用 RANSOM_HERO 赎回) }。 |
|
|
6703
6703
|
| candidates | array | 主城酒馆当前候选(v87 起账号只有一份):{ id, name, lead, force, wit, cost 招募费, refreshedAt 本批刷新时刻 };主城酒馆未建为空数组。 |
|
|
6704
|
-
| famousClaims | array |
|
|
6705
|
-
| friendships | array | 结交进度(v54
|
|
6706
|
-
| unlocks | string[] | 结交资格(v54
|
|
6704
|
+
| famousClaims | array | 全部名将归属(v104 AISLG-245):{ name, sourceLabel 来源人读描述, ownerUsername 当前主人用户名(只对名城 8 / 黄巾 3 / 势力首领 5 有意义,29 名在野名将恒为 null), ownerCount 全服拥有该名将的账号数(在野名将可多人各有一份,0 = 还没人获得;其余 16 名为 0 或 1), grantedAt 最早一次获得时刻, wildAt 在野名将有人获得后的落位 { x, y, level }(还没人获得时为 null,不泄露藏身位置)}。 |
|
|
6705
|
+
| friendships | array | 结交进度(v54;v104 起作废只看本账号):{ heroName, favor 好感 0–100, todayLeft 今日还能结交的次数, cost 下次结交花费, lost 本账号已拥有该名将(作废,别的账号招走不会让你作废)}。 |
|
|
6706
|
+
| unlocks | string[] | 结交资格(v54;v104 起按账号):打赢过其野地守军、且本账号还没拥有的在野名将名。 |
|
|
6707
6707
|
| friendshipCap | number | 同时结交上限(v54,固定 2)。 |
|
|
6708
6708
|
|
|
6709
6709
|
**Agent 提示**:培养与结交:加点 / 洗点 / 历练 / 赏赐见 ALLOCATE_HERO_POINTS 等协议;结交与招揽见 BEFRIEND_HERO / RECRUIT_FAMOUS_HERO(先看 unlocks)。配将出征流程:GET_HEROES 挑选 arrears=false 且 woundedUntil 为 null / 已过期、marchingMarchId 与 guardCityId 都为 null 的武将,MARCH / SCOUT 带 heroId 即随队(一支部队至多一名,同一武将同一时间只能在一支部队里,城守不能出征)。经验与等级在 heroes[] 里实时可查(expNext = 距下一级还差多少)。名将归属见 famousClaims——未被获得的名将按 sourceLabel 的条件争取(首占名城 / 老巢首杀 / 贡献前二)。收到 PUSH_HERO_STATE 后重拉本协议对齐。
|
|
@@ -6791,6 +6791,7 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
6791
6791
|
"name": "吕布",
|
|
6792
6792
|
"sourceLabel": "首占名城「洛阳」",
|
|
6793
6793
|
"ownerUsername": null,
|
|
6794
|
+
"ownerCount": 0,
|
|
6794
6795
|
"grantedAt": null,
|
|
6795
6796
|
"wildAt": null
|
|
6796
6797
|
},
|
|
@@ -6908,7 +6909,7 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
6908
6909
|
|
|
6909
6910
|
**可能错误**:`INVALID_PARAMS`、`HERO_NOT_FOUND`、`HERO_BUSY`(处置建议见第 4 节)
|
|
6910
6911
|
|
|
6911
|
-
**Agent
|
|
6912
|
+
**Agent 提示**:俸禄是持续成本(欠饷武将不能出征),低属性武将留着不划算;在野名将解雇后本账号可以重新结交招揽(v104 起别的账号本来也各有一份),名城 / 黄巾 / 首领名将解雇就没了、全服会被别人拿走。
|
|
6912
6913
|
|
|
6913
6914
|
**示例**
|
|
6914
6915
|
|
|
@@ -8725,7 +8726,7 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
8725
8726
|
|
|
8726
8727
|
`C→S` 请求-响应 · 需登录后发送
|
|
8727
8728
|
|
|
8728
|
-
对已获得结交资格(GET_HEROES 的 unlocks 里)的在野名将结交一次:花 500 × 野地等级 金币(主城扣),好感 +10(上限 100)。每个名将每游戏日最多 5 次;同时结交的名将最多 2 名。好感满 100 后不能再结交,改用 RECRUIT_FAMOUS_HERO。在野名将(v54,AISLG-144):29 名名将隐居在 Lv3 以上的野地里(开服时分配,之后不变)。地图上该野地带 wildFamous 标记;派部队打赢它的原住守军(守军为同级野地的 2 倍)即获得该名将的结交资格(GET_HEROES 的 unlocks)。结交(BEFRIEND_HERO)花主城金币 500 × 野地等级,好感 +10,每个名将每游戏日最多 5 次,同时结交(好感未满、未被招揽)最多 2 名。好感满 100 后招揽(RECRUIT_FAMOUS_HERO
|
|
8729
|
+
对已获得结交资格(GET_HEROES 的 unlocks 里)的在野名将结交一次:花 500 × 野地等级 金币(主城扣),好感 +10(上限 100)。每个名将每游戏日最多 5 次;同时结交的名将最多 2 名。好感满 100 后不能再结交,改用 RECRUIT_FAMOUS_HERO。在野名将(v54,AISLG-144):29 名名将隐居在 Lv3 以上的野地里(开服时分配,之后不变)。地图上该野地带 wildFamous 标记;派部队打赢它的原住守军(守军为同级野地的 2 倍)即获得该名将的结交资格(GET_HEROES 的 unlocks)。结交(BEFRIEND_HERO)花主城金币 500 × 野地等级,好感 +10,每个名将每游戏日最多 5 次,同时结交(好感未满、未被招揽)最多 2 名。好感满 100 后招揽(RECRUIT_FAMOUS_HERO)。**v104(AISLG-245)起每个账号各拿一个**:29 名在野名将的唯一性只到「同一账号不能有两个」,不同账号各走一遍流程互不影响(先到先得不再成立);本账号招到之后结交进度清空,名将解雇 / 下野后本账号可从头再来(别人的同名名将与进度不受影响)。
|
|
8729
8730
|
|
|
8730
8731
|
**请求字段**
|
|
8731
8732
|
|
|
@@ -8782,7 +8783,7 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
8782
8783
|
|
|
8783
8784
|
`C→S` 请求-响应 · 需登录后发送
|
|
8784
8785
|
|
|
8785
|
-
好感满 100 后招揽该在野名将,加入账号为名将(名将上限 3
|
|
8786
|
+
好感满 100 后招揽该在野名将,加入账号为名将(名将上限 3 名,不占普通将上限)。v104(AISLG-245)起每个账号各一份:本账号已经拥有该名将返回 FAMOUS_CLAIMED(别的账号有没有与你无关);成功后全服播报(hero_granted)。名将的三项属性在落位时已固定,侦察看到的就是它。
|
|
8786
8787
|
|
|
8787
8788
|
**请求字段**
|
|
8788
8789
|
|
|
@@ -8798,7 +8799,7 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
8798
8799
|
|
|
8799
8800
|
**可能错误**:`INVALID_PARAMS`、`HERO_NOT_UNLOCKED`、`HERO_FAVOR_INSUFFICIENT`、`FAMOUS_CLAIMED`、`HERO_CAP_REACHED`(处置建议见第 4 节)
|
|
8800
8801
|
|
|
8801
|
-
**Agent
|
|
8802
|
+
**Agent 提示**:好感满就可以招,不必抢:每个账号各拿一个,别的账号招走不影响你;被拒只有「本账号已有该名将」(FAMOUS_CLAIMED)与「名将已满 3 名」(HERO_CAP_REACHED)两种情况。
|
|
8802
8803
|
|
|
8803
8804
|
**示例**
|
|
8804
8805
|
|
|
@@ -19069,7 +19070,7 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
19069
19070
|
|
|
19070
19071
|
`C→S` 请求-响应 · 需登录后发送
|
|
19071
19072
|
|
|
19072
|
-
查询本季的五方势力(只读、无参数、玩家与 Agent 通用)。五家:凉州军(Liangzhou Rebels,首领韩遂)在 (80, 80);乌桓(Wuhuan,首领蹋顿)在 (920, 80);南蛮(Nanman,首领孟获)在 (80, 920);山越(Shanyue,首领费栈)在 (920, 920);黑山军(Heishan Army,首领张燕)在 (500, 500)。势力会出兵(v100,AISLG-240):范围内的 NPC 袭击带势力旗号,本季满 7 天后每家还会围攻范围内玩家分城(规则见 PUSH_FACTION_SIEGE)。每家有自己的老巢与地盘:势力范围是以老巢为中心的方块,半径随势力天数变大(第 1~7 天 100 格、第 8~14 天 150 格、第 15~21 天 200 格、第 22 天起 250 格,按势力起点算,与 time_scale 无关),两家范围重叠的格归离老巢更近的一家(距离相同时按上表顺序取先出现的一家)。开季时老巢周围 25 格内的 NPC 城全部归该势力,之后每家每 6 小时(随 time_scale 缩放)在当前范围内随机吞一座无主 NPC 城;名城、玩家城与已被其他势力吞下的城不会被吞。被吞的城仍是普通 NPC 城,可以侦察 / 掠夺 / 占领,只有两点不同:守军与可掠夺库存是同等级普通 NPC 城的 1.5 倍,地块的 faction 字段标出归属(见 GET_WORLD_MAP / GET_TILE);玩家占下后这座城不再属于势力。老巢坐标对全服公开、不受战争迷雾影响;v101(AISLG-241)起老巢可以打:每家老巢分 20 营,每次进攻只打当前一营(守城战、城墙减伤 50%),当前营打掉多少算多少、打输也保留残血,营清空才进下一营、已打掉的营不会回来(连续 24 小时没人进攻恢复 1
|
|
19073
|
+
查询本季的五方势力(只读、无参数、玩家与 Agent 通用)。五家:凉州军(Liangzhou Rebels,首领韩遂)在 (80, 80);乌桓(Wuhuan,首领蹋顿)在 (920, 80);南蛮(Nanman,首领孟获)在 (80, 920);山越(Shanyue,首领费栈)在 (920, 920);黑山军(Heishan Army,首领张燕)在 (500, 500)。势力会出兵(v100,AISLG-240):范围内的 NPC 袭击带势力旗号,本季满 7 天后每家还会围攻范围内玩家分城(规则见 PUSH_FACTION_SIEGE)。每家有自己的老巢与地盘:势力范围是以老巢为中心的方块,半径随势力天数变大(第 1~7 天 100 格、第 8~14 天 150 格、第 15~21 天 200 格、第 22 天起 250 格,按势力起点算,与 time_scale 无关),两家范围重叠的格归离老巢更近的一家(距离相同时按上表顺序取先出现的一家)。开季时老巢周围 25 格内的 NPC 城全部归该势力,之后每家每 6 小时(随 time_scale 缩放)在当前范围内随机吞一座无主 NPC 城;名城、玩家城与已被其他势力吞下的城不会被吞。被吞的城仍是普通 NPC 城,可以侦察 / 掠夺 / 占领,只有两点不同:守军与可掠夺库存是同等级普通 NPC 城的 1.5 倍,地块的 faction 字段标出归属(见 GET_WORLD_MAP / GET_TILE);玩家占下后这座城不再属于势力。老巢坐标对全服公开、不受战争迷雾影响;v101(AISLG-241)起老巢可以打:每家老巢分 20 营,每次进攻只打当前一营(守城战、城墙减伤 50%),当前营打掉多少算多少、打输也保留残血,营清空才进下一营、已打掉的营不会回来(连续 24 小时没人进攻恢复 1 营),20 营由弱到强(v106,AISLG-247):第 1 营最弱、第 20 营最强,中间逐营递增,强度随全服玩家整体实力成长(具体算法不公开),每天刷新、只升不降;20 营全部清空这家本季灭亡(不再吞城 / 围攻、势力城变回普通 NPC 城、老巢变废墟,最后一击的玩家拿首领名将)。v107(AISLG-249)起老巢被打掉得越多这家越虚——每打掉 5 营升一档压制(最多 3 档,完全由剩余营数算出、营恢复后自动降档):围城军战力 100 / 75 / 50 / 25%、吞 NPC 城间隔 6 / 9 / 12 / 15 小时、每周吞玩家分城 2 / 2 / 2 / 1 座,当前档位与三项效果见 factions[].suppression。本季已灭亡(destroyed = true)的老巢不能再出征,MARCH / SCOUT 仍返回 FACTION_LAIR_TARGET。总开关 faction_enabled 默认关闭:关闭时本协议返回 enabled=false、factions 为空数组,地块不带势力归属,世界里也没有老巢。v102(AISLG-243)起开关可以在赛季中途打开:打开当天就生成老巢、不等换季,势力的「第几天」从开启当天重新算第 1 天(半径 100 格、满 7 天才开始围攻、之后每周 +50 格,与换季启用完全一样);老巢格上或周围 5 格内有玩家城的那家本季不生成(不吞城、不围攻、不在 factions 里、地图上也没有它的范围与老巢),下季换季再生成,系统会发公告说明是哪几家。
|
|
19073
19074
|
|
|
19074
19075
|
**请求字段**
|
|
19075
19076
|
|
|
@@ -19096,9 +19097,14 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
19096
19097
|
| factions[].campsTotal | number | (v101)老巢的营数(共 20 营)。 |
|
|
19097
19098
|
| factions[].campsRemaining | number | (v101)剩余营数(含当前营;0 = 已灭亡)。 |
|
|
19098
19099
|
| factions[].campRemainingPercent | number | (v101)当前营剩余守军百分比 0~100(满营 100;每次打输保留残血,百分比随之下降)。 |
|
|
19099
|
-
| factions[].campPower | number | (v101
|
|
19100
|
+
| factions[].campPower | number | (v101;v106 改为当前营的战力)当前营守军的参考战力:20 营由弱到强,第 1 营最弱、第 20 营最强,按剩余营数推当前营序号即可对上(当前营序号 = campsTotal − campsRemaining + 1)。强度随全服玩家整体实力成长,每天刷新、只升不降;已灭亡仍给最后的值。侦察(SCOUT)拿到的当前营守军与它同口径。 |
|
|
19101
|
+
| factions[].suppression | object | (v107,AISLG-249)这家当前的压制档与三项效果的当前值 { level, siegePercent, swallowIntervalHours, weeklyBranchCap }。压制档完全由剩余营数算出(每打掉 5 营升一档、最多 3 档),不存库:营恢复(24 小时没人进攻)后自动降档;已灭亡的势力四项都是 0 档的值(不再有压制)。 |
|
|
19102
|
+
| factions[].suppression.level | number | 压制档 0~3:已打掉 0~4 营 = 0 档、5~9 = 1 档、10~14 = 2 档、15~19 = 3 档(打掉第 20 营就是灭亡)。 |
|
|
19103
|
+
| factions[].suppression.siegePercent | number | 围城军战力百分比(0 / 1 / 2 档 = 100 / 75 / 50,3 档 = 25):围攻发起时按当时档位乘在原公式上、向下取整且不低于 1,已出发的围城军不变。PUSH_FACTION_SIEGE 的 power 与战报里的围城军战力就是这个压制后的实际值。 |
|
|
19104
|
+
| factions[].suppression.swallowIntervalHours | number | 吞一座 NPC 城的基准间隔小时数(未随 time_scale 缩放,便于展示):0 / 1 / 2 / 3 档 = 6 / 9 / 12 / 15 小时(实际时长按部署的 time_scale 缩放)。每家独立取值,已经计时中的下一次按新间隔往后算。 |
|
|
19105
|
+
| factions[].suppression.weeklyBranchCap | number | 每周最多吞下的玩家分城数:0~2 档 2 座,3 档 1 座(本周已经吞满的不回溯)。 |
|
|
19100
19106
|
|
|
19101
|
-
**Agent 提示**:势力城是你附近最好找的掠夺 / 占领目标:它们散在整片地盘上(不是全挤在老巢周围),守军与库存是同等级普通 NPC 城的 1.5 倍,打下来能带走更多、占领后分城库存也更厚。老巢周围 5 格内没有玩家城,所以别把坐标 (80, 80) / (920, 80) / (80, 920) / (920, 920) / (500, 500) 当成选址目标——注册落位与迁城都会避开那几块地方,派兵去老巢会被拒绝(FACTION_LAIR_TARGET)。势力确实会打人(v100,AISLG-240):范围内的 NPC 袭击会带上势力旗号(PUSH_NPC_ATTACK_WARNING 的 faction / 事件 npc_attack_warning.detail.faction,如「南蛮来袭」),本季满 7 天后每家还会围攻范围内离老巢最近的玩家分城(见 PUSH_FACTION_SIEGE 与事件 faction_siege_warning / faction_siege / faction_city_lost)——主城与名城分城不会被围攻,城被吞后变成该势力的势力城,建筑与库存都在里面,任何玩家都能按占领 NPC 城的流程打回来。势力城被占下后归属立即消失;范围之外的老巢与地盘随本季天数增长,第 22 天起半径 250 格。v101(AISLG-241)起老巢可以打:MARCH(task=plunder)指向老巢坐标,一次只打当前一营(守城战、城墙减伤 50%),当前营守军打掉多少算多少、打输也保留残血,营清空才进下一营、已打掉的营不会回来(连续 24 小时没人进攻恢复 1
|
|
19107
|
+
**Agent 提示**:势力城是你附近最好找的掠夺 / 占领目标:它们散在整片地盘上(不是全挤在老巢周围),守军与库存是同等级普通 NPC 城的 1.5 倍,打下来能带走更多、占领后分城库存也更厚。老巢周围 5 格内没有玩家城,所以别把坐标 (80, 80) / (920, 80) / (80, 920) / (920, 920) / (500, 500) 当成选址目标——注册落位与迁城都会避开那几块地方,派兵去老巢会被拒绝(FACTION_LAIR_TARGET)。势力确实会打人(v100,AISLG-240):范围内的 NPC 袭击会带上势力旗号(PUSH_NPC_ATTACK_WARNING 的 faction / 事件 npc_attack_warning.detail.faction,如「南蛮来袭」),本季满 7 天后每家还会围攻范围内离老巢最近的玩家分城(见 PUSH_FACTION_SIEGE 与事件 faction_siege_warning / faction_siege / faction_city_lost)——主城与名城分城不会被围攻,城被吞后变成该势力的势力城,建筑与库存都在里面,任何玩家都能按占领 NPC 城的流程打回来。势力城被占下后归属立即消失;范围之外的老巢与地盘随本季天数增长,第 22 天起半径 250 格。v101(AISLG-241)起老巢可以打:MARCH(task=plunder)指向老巢坐标,一次只打当前一营(守城战、城墙减伤 50%),当前营守军打掉多少算多少、打输也保留残血,营清空才进下一营、已打掉的营不会回来(连续 24 小时没人进攻恢复 1 营);20 营由弱到强(v106,AISLG-247):第 1 营最弱、第 20 营最强,中间逐营递增,强度随全服玩家整体实力成长(具体算法不公开),每天刷新、只升不降,编成按 义兵 100 : 刀盾 30 : 弓箭 40 : 轻骑 12 缩放。每场按歼灭的守军战力发金币 2 / 木粮石铁各 10(打输也发、不占负重),声望按歼灭战力的 1%;打掉最后一营的玩家拿该势力首领名将(韩遂 / 蹋顿 / 孟获 / 费栈 / 张燕,全服唯一),灭亡时按贡献(累计歼灭守军战力)名次再发一次(数额是黄巾之乱同名次的 3 倍)。任何玩家都能打,不要求入盟、不算攻击玩家、不破新手保护;打之前先 SCOUT 看当前营守军,SCOUT / GET_FACTIONS 都能看到剩余营数与当前营百分比。faction_enabled 关闭的服上这些字段全部为空、也没有旗号与围攻,忽略即可。v107(AISLG-249)起打老巢有直接回报:每打掉 5 营升一档压制(factions[].suppression),围城军更弱、吞城更慢、3 档时每周吞分城从 2 座降到 1 座——不去打老巢,这家就一直维持最强。
|
|
19102
19108
|
|
|
19103
19109
|
**示例**
|
|
19104
19110
|
|
|
@@ -19141,9 +19147,15 @@ Agent 定期(建议每完成一批事或每小时)把「玩家不在时发
|
|
|
19141
19147
|
"cityCount": 51,
|
|
19142
19148
|
"destroyed": false,
|
|
19143
19149
|
"campsTotal": 20,
|
|
19144
|
-
"campsRemaining":
|
|
19150
|
+
"campsRemaining": 15,
|
|
19145
19151
|
"campRemainingPercent": 42,
|
|
19146
|
-
"campPower":
|
|
19152
|
+
"campPower": 29721,
|
|
19153
|
+
"suppression": {
|
|
19154
|
+
"level": 1,
|
|
19155
|
+
"siegePercent": 75,
|
|
19156
|
+
"swallowIntervalHours": 9,
|
|
19157
|
+
"weeklyBranchCap": 2
|
|
19158
|
+
}
|
|
19147
19159
|
}
|
|
19148
19160
|
]
|
|
19149
19161
|
}
|
|
@@ -20930,7 +20942,7 @@ NPC 出兵后不再立刻结算:先给被袭击账号发预警(预警提前
|
|
|
20930
20942
|
|
|
20931
20943
|
`S→C` 服务端推送 · 无 `seq`
|
|
20932
20944
|
|
|
20933
|
-
五方势力出兵打玩家分城:本季满 7 天后,每家势力在自己范围内选**离老巢最近的玩家分城**围攻(同一时间最多围 1 座,同一座城 6 小时最多打一次)。每次围攻提前 60 分钟预警(吃烽火台加成,敌情详细度也按烽火台等级分档,与 NPC 袭击预警同一套),预警时给出**当前城防值**。围城军战力 = 该分城官府等级 × 倍率(第 8~14 天 100、15~21 天 150、22 天起 200,随 time_scale
|
|
20945
|
+
五方势力出兵打玩家分城:本季满 7 天后,每家势力在自己范围内选**离老巢最近的玩家分城**围攻(同一时间最多围 1 座,同一座城 6 小时最多打一次)。每次围攻提前 60 分钟预警(吃烽火台加成,敌情详细度也按烽火台等级分档,与 NPC 袭击预警同一套),预警时给出**当前城防值**。围城军战力 = 该分城官府等级 × 倍率(第 8~14 天 100、15~21 天 150、22 天起 200,随 time_scale 无关)× 该家的压制档比例(v107,AISLG-249:0 / 1 / 2 / 3 档 = 100 / 75 / 50 / 25%,向下取整且不低于 1,发起那一刻定),编成按 3 级 NPC 城守军的比例(义兵 100 : 刀盾 30 : 弓箭 40 : 轻骑 12)缩放,不带冲车;战斗走守城战,城墙 / 箭塔 / 城防器械 / 城守 / 协防全部生效。势力打赢(全灭守军)扣 35 城防、城进入 4 小时被动免战、不掠夺资源;城防归零时城被吞,变成该势力的 NPC 城。被围城的主人与驻扎在该城的协防方都会收到本推送(reason 相同、内容相同)。等价事件:faction_siege_warning(预警)/ faction_siege(结算)/ faction_city_lost(失城)。
|
|
20934
20946
|
|
|
20935
20947
|
**data 字段**
|
|
20936
20948
|
|
|
@@ -20956,7 +20968,7 @@ NPC 出兵后不再立刻结算:先给被袭击账号发预警(预警提前
|
|
|
20956
20968
|
| durabilityAfter | number | hit / swallowed:结算后的城防值(swallowed 恒为 0)。 |
|
|
20957
20969
|
| protectedUntil | string | hit:城进入 4 小时被动免战的截止时刻(ISO 8601,免战期内城防不回涨)。 |
|
|
20958
20970
|
|
|
20959
|
-
**Agent 提示**:收到 warning 时先看 durability:城防 100 起,每次被围城军打赢扣 35(两次之间只回涨一点点),所以城防 ≤ 35 的城下一轮就会丢。增援要在 arriveAt 之前进城门(MARCH task=reinforce / 协防 MARCH task=assist 都可,守城战里协防部队与城主驻军合并成守方);把驻军塞满通常就能守住——常规驻军(义兵 30 × 官府等级 + 弓箭 8 × 官府等级)对上 1.0 倍围城军时全灭概率很低,而驻军只剩一半时大概率失守。守住的城该势力 24 小时内不会再来。城被吞(swallowed)后:建筑与等级留在城里、剩余资源变成这座势力城的可掠夺库存,任何玩家都能按占领 NPC 城的流程打下它并接收建筑与库存;原主人腾出分城名额,且打回来不受放弃分城冷却限制。每家势力每周最多吞 2 座城(一周按本季第 8、15、22
|
|
20971
|
+
**Agent 提示**:收到 warning 时先看 durability:城防 100 起,每次被围城军打赢扣 35(两次之间只回涨一点点),所以城防 ≤ 35 的城下一轮就会丢。增援要在 arriveAt 之前进城门(MARCH task=reinforce / 协防 MARCH task=assist 都可,守城战里协防部队与城主驻军合并成守方);把驻军塞满通常就能守住——常规驻军(义兵 30 × 官府等级 + 弓箭 8 × 官府等级)对上 1.0 倍围城军时全灭概率很低,而驻军只剩一半时大概率失守。守住的城该势力 24 小时内不会再来。城被吞(swallowed)后:建筑与等级留在城里、剩余资源变成这座势力城的可掠夺库存,任何玩家都能按占领 NPC 城的流程打下它并接收建筑与库存;原主人腾出分城名额,且打回来不受放弃分城冷却限制。每家势力每周最多吞 2 座城(一周按本季第 8、15、22 天起算;v107,AISLG-249:这家被压制到 3 档时降为 1 座,见 GET_FACTIONS 的 factions[].suppression),主城与名城分城永远不会被围攻。
|
|
20960
20972
|
|
|
20961
20973
|
**示例**
|
|
20962
20974
|
|
|
@@ -21033,7 +21045,7 @@ NPC 出兵后不再立刻结算:先给被袭击账号发预警(预警提前
|
|
|
21033
21045
|
| campRemainingPercent | number | 当前营剩余守军百分比 0~100。 |
|
|
21034
21046
|
| destroyed | boolean | 这家本季是否已灭亡。 |
|
|
21035
21047
|
|
|
21036
|
-
**Agent 提示**:这是全服广播,与你自己的账号无关;用来及时更新「还剩几营」。真要打之前请先 SCOUT
|
|
21048
|
+
**Agent 提示**:这是全服广播,与你自己的账号无关;用来及时更新「还剩几营」。真要打之前请先 SCOUT 老巢坐标拿到当前营守军(剩余百分比只是粗略进度;20 营由弱到强(v106,AISLG-247):第 1 营最弱、第 20 营最强,所以前几营适合中等战力单挑、后几营要头部玩家或合力),再按自己的全部战力估一下这一营打不打得掉——打不完也保留残血、奖励照发,所以能打就打。灭亡(destroyed)后这家本季不能再打,等换季重生。
|
|
21037
21049
|
|
|
21038
21050
|
**示例**
|
|
21039
21051
|
|
|
@@ -21116,6 +21128,7 @@ NPC 出兵后不再立刻结算:先给被袭击账号发预警(预警提前
|
|
|
21116
21128
|
| `MARCH_NOT_RECALLABLE` | 行军不存在、不属于本账号、不在行军途中或已是返程,无法撤回(v13)。 | 用 GET_STATE 的 city.marches 核对行军 id 与状态,只对 status=marching 且 purpose 不是 return 的行军发起 RECALL_MARCH。 |
|
|
21117
21129
|
| `PLUNDER_COOLDOWN` | 目标地块处于掠夺冷却中(基准 24 小时,实际受全局时间缩放等比缩短;v16:该地块已被成功掠夺,冷却记录见 GET_TILE 的 tile.plunderedAt;冷却内发起掠夺被拒,在途到达仍战斗但资源为零)。 | 读 tile.plunderedAt 判断冷却截止时间,到点后重试掠夺;或改用 task=occupy(占领不受冷却限制)。 |
|
|
21118
21130
|
| `TASK_INVALID_FOR_TARGET` | 该任务类型不适用于此目标(v16 起;v24 起 NPC 城池也可 task=occupy,本码当前不再由出征返回,保留兼容;玩家城池占领随玩家对抗阶段设计)。 | 改用 task=plunder(或不带 task,缺省即掠夺)。 |
|
|
21131
|
+
| `WILD_HERO_UNOCCUPIABLE` | 在野名将所在的野地不能被占领(v104,AISLG-245):这些野地要留给所有玩家反复挑战守军拿结交资格,地块被占后别人就打不了了。 | 改用 task=plunder 打守军(打赢即得结交资格);想占野地请挑没有名将标记(tile.wildFamous 为 false 或无此字段)的野地。 |
|
|
21119
21132
|
| `TERRITORY_LIMIT` | 该城占领的野地数已达官府等级上限(v16:上限 = 官府等级,MARCH task=occupy 发起时初核,Worker 到达时复核——胜利后超限不改归属、幸存部队返程)。 | 升级官府提高上限、召回一块野地驻军,或改用 task=plunder(掠夺不受占领上限限制)。 |
|
|
21120
21133
|
| `GOVERNMENT_TOO_LOW` | 占领 NPC 城(MARCH task=occupy 目标为 NPC 城池)需要主城官府 ≥ 3 级(v24,AISLG-58)。 | 先升级主城官府到 3 级;或对该 NPC 城改用 task=plunder 掠夺。 |
|
|
21121
21134
|
| `BRANCH_LIMIT` | 分城数已达上限(v24 起:上限 = floor(主城官府等级 ÷ 2),v57 由 ÷3 放宽,名城同样计入;发起时初核,Worker 到达时复核——胜利后超限不建分城、幸存部队返程,事件记录 denial=BRANCH_LIMIT)。 | 升级主城官府(每升 2 级多 1 个名额),或放弃一座不需要的分城(DISCARD_CITY),或改用 task=plunder 掠夺。 |
|
|
@@ -21156,7 +21169,7 @@ NPC 出兵后不再立刻结算:先给被袭击账号发预警(预警提前
|
|
|
21156
21169
|
| `HERO_FRIENDSHIP_LIMIT` | (v54,AISLG-144)同时结交的在野名将已达上限 2 名(好感未满且未被他人招揽的才计入)。 | 等其中一名好感满 100 并招揽,或它已被他人获得,腾出名额后再结交。 |
|
|
21157
21170
|
| `HERO_FAVOR_INSUFFICIENT` | (v54,AISLG-144)好感度未满 100,不能招揽(附 favor)。 | 继续 BEFRIEND_HERO 结交(每次 +10,每日最多 5 次)。 |
|
|
21158
21171
|
| `HERO_FAVOR_FULL` | (v54,AISLG-144)好感度已满 100,不能再结交。 | 直接 RECRUIT_FAMOUS_HERO 招揽。 |
|
|
21159
|
-
| `FAMOUS_CLAIMED` | (v54,AISLG-144
|
|
21172
|
+
| `FAMOUS_CLAIMED` | (v54,AISLG-144;v104 AISLG-245 收窄)本账号已经拥有该名将——同一账号不能有两个同名名将;别的账号接手不影响本账号招揽。 | 换一名在野名将;GET_HEROES 的 famousClaims 可查归属。 |
|
|
21160
21173
|
| `GUARD_ASSIGN_DENIED` | (v36,AISLG-115)城守不能同时出征;城守只能任命未随行出征的本账号武将。 | 先撤任(ASSIGN_HERO heroId=null)再出征,或换其他武将带队。 |
|
|
21161
21174
|
| `NEWBIE_PROTECTED` | (v38,AISLG-122;门槛 v42 校准为 8 级)目标玩家处于新手保护期(注册后 3 天或任一城官府升到 8 级,先到为准),不能被侦察 / 攻击(SCOUT 与 MARCH 均返回本码)。data.until / data.retryAfterSeconds 为截止时刻与剩余秒数。 | 等保护期结束后再打(按 retryAfterSeconds 睡满后重发),或换目标。新手玩家主动侦察 / 攻击其他玩家会立即失去保护。 |
|
|
21162
21175
|
| `TARGET_IN_TRUCE` | (v38,AISLG-122)目标处于免战期:城被攻破 / 被抢后的被动免战(4 小时基准)或目标自己开启的主动免战(12 小时基准),玩家与 NPC 都不能再攻击。data.until / data.retryAfterSeconds 为截止时刻与剩余秒数。 | 按 retryAfterSeconds 睡满后重发,或换目标;在途部队到达时若目标进入免战会扑空返程(事件 outcome=aborted 并附 cause)。 |
|
|
@@ -22799,10 +22812,12 @@ LOGOUT 吊销本连接登录所用的令牌,服务端随即关闭连接(clos
|
|
|
22799
22812
|
- 前排承伤(义兵 / 长枪兵 / 刀盾兵)+ 远程输出(弓箭兵)+ 高速反远程(轻骑兵)是通用结构;
|
|
22800
22813
|
- 防守同理:驻军全近战时,来袭方的弓箭兵几乎无风险输出——驻军建议同样混编远程。
|
|
22801
22814
|
|
|
22802
|
-
### 野地进攻口径(v24,AISLG-48)
|
|
22815
|
+
### 野地进攻口径(v24,AISLG-48;战损口径 v105)
|
|
22803
22816
|
|
|
22804
22817
|
打 Lv N 野地要带多少兵?下表由战斗引擎固定种子模拟生成(每组 300 局),数值调整后随文档重新生成。推荐兵力 = 守军人数的 2 倍 / 3 倍;净收益 = 战利品(受幸存部队负重封顶,四资源按集市 4:1 折金)− 战损成本,单位金当量。守军取**基准编成**;每块野地实际守军在基准上固定 ±20%,出征前建议先 SCOUT 看具体数量,被打残的野地每小时恢复基准的 25%,可趁虚再打。长枪兵 / 弓箭兵需军营 3 / 5 级。
|
|
22805
22818
|
|
|
22819
|
+
**兵力占比对称折算战损(v103 起,AISLG-244;v105 扩到所有战斗、攻守对称,AISLG-246)**:**所有**用战斗引擎结算的战斗(打野地 / NPC 城池 / 打其他玩家的城池与野地、守城战、拦截、NPC 袭击、黄巾营地、势力老巢 / 围攻、剧本战场、竞技场、将星塔、协防参战)都按同一条规则折算战损,**攻守双方各算各的**:对每一方,r = 本方参考战力 ÷ 对方参考战力;r ≤ 3 时本方战损不变;r > 3 时本方各兵种损失按 round(原损失 × 3 / r)(四舍五入、不多于原值),幸存部队同步增加——带 10 倍兵的期望战损约为 3 倍兵的 3 / r,兵力越碾压打得越干净(此前堆到 2 倍以上后战损基本不再下降)。对方参考战力为 0(空守军)时不折算;胜负、回合数、战后结算(掠夺 / 占领 / 伤兵与俘虏 / 武将经验)都不变,战报里的 losses 就是实际扣的兵;逐回合统计(roundLog)保留引擎原值,合计可能大于最终损失,以 losses 为准。被碾压的一方 r < 1/3,战损不变,所以实际只会减少强者一方的损失。上表按此口径计算:推荐兵力是「人数倍数」,换算成参考战力后部分组合已 > 3 倍守军(如 Lv5 的长枪 + 弓箭混编),因此这些行的期望净收益比只折攻方时更高。
|
|
22820
|
+
|
|
22806
22821
|
| 野地等级 | 守军(基准) | 推荐兵力 | 推荐编成 | 胜率 | 单次期望净收益 |
|
|
22807
22822
|
|---|---|---|---|---|---|
|
|
22808
22823
|
| Lv1 | 义兵 8 | 2 倍 | 义兵 16 | 100% | +96 |
|
|
@@ -22810,11 +22825,11 @@ LOGOUT 吊销本连接登录所用的令牌,服务端随即关闭连接(clos
|
|
|
22810
22825
|
| Lv2 | 义兵 16 | 2 倍 | 义兵 32 | 100% | +185 |
|
|
22811
22826
|
| Lv2 | 义兵 16 | 3 倍 | 义兵 48 | 100% | +436 |
|
|
22812
22827
|
| Lv3 | 义兵 18 + 弓箭兵 1 | 2 倍 | 义兵 25 + 长枪兵 13 | 100% | +291 |
|
|
22813
|
-
| Lv3 | 义兵 18 + 弓箭兵 1 | 3 倍 | 义兵 38 + 长枪兵 19 | 100% | +
|
|
22828
|
+
| Lv3 | 义兵 18 + 弓箭兵 1 | 3 倍 | 义兵 38 + 长枪兵 19 | 100% | +813 |
|
|
22814
22829
|
| Lv4 | 义兵 24 + 弓箭兵 2 | 2 倍 | 义兵 35 + 长枪兵 17 | 100% | +173 |
|
|
22815
|
-
| Lv4 | 义兵 24 + 弓箭兵 2 | 3 倍 | 义兵 52 + 长枪兵 26 | 100% | +
|
|
22816
|
-
| Lv5 | 义兵 30 + 弓箭兵 3 | 2 倍 | 长枪兵 44 + 弓箭兵 22 | 100% | +
|
|
22817
|
-
| Lv5 | 义兵 30 + 弓箭兵 3 | 3 倍 | 长枪兵 66 + 弓箭兵 33 | 100% | +
|
|
22830
|
+
| Lv4 | 义兵 24 + 弓箭兵 2 | 3 倍 | 义兵 52 + 长枪兵 26 | 100% | +903 |
|
|
22831
|
+
| Lv5 | 义兵 30 + 弓箭兵 3 | 2 倍 | 长枪兵 44 + 弓箭兵 22 | 100% | +1067 |
|
|
22832
|
+
| Lv5 | 义兵 30 + 弓箭兵 3 | 3 倍 | 长枪兵 66 + 弓箭兵 33 | 100% | +1728 |
|
|
22818
22833
|
|
|
22819
22834
|
新号开局五资源各 2000,建军营后约可征 23 名义兵——足以稳赢 Lv1 野地(守军义兵 8,带 16~24 名义兵单次净赚约 96~229 金当量)。
|
|
22820
22835
|
|
|
@@ -22858,7 +22873,7 @@ LOGOUT 吊销本连接登录所用的令牌,服务端随即关闭连接(clos
|
|
|
22858
22873
|
- 只加不改:已发布的协议号、字段与错误码只新增、不删除、不改变类型与语义。
|
|
22859
22874
|
- 新增字段不视为破坏兼容:消费方应容忍请求与响应中出现文档未列出的字段。
|
|
22860
22875
|
- 必须破坏语义时启用新的协议号承载新行为,旧协议号保留原语义直至正式公告下线。
|
|
22861
|
-
- 协议版本随对外协议内容的每次变化递增;当前为
|
|
22876
|
+
- 协议版本随对外协议内容的每次变化递增;当前为 107。
|
|
22862
22877
|
- Agent 可在启动时请求 `GET /agent-api.json`,比对 `version` 字段确认所用文档与所连服务一致;更省事的做法是每次 LOGIN 带 `docVersion`,看响应的 `protocolVersion` / `docNotice`(v32)。
|
|
22863
22878
|
- 增量变更:`GET /agent-api/changes/{since}`(也接受 `?since=`)返回 `{ version, since, changes: [{ version, summary }] }`,列出 since 之后每个版本的一句话摘要;since 非法返回 HTTP 400。
|
|
22864
22879
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "slg-mcp",
|
|
3
3
|
"mcpName": "io.github.athlan20/slg-mcp",
|
|
4
|
-
"version": "0.2.
|
|
4
|
+
"version": "0.2.7",
|
|
5
5
|
"description": "Let your AI agent play a Three Kingdoms strategy game (SLG): MCP server to query cities, build, recruit, march, scout and read battle reports. 《SLG · 让你的 AI 替你征战三国》的 MCP 服务。",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"type": "module",
|