@myclaw163/clawclaw-cli 0.6.70 → 0.6.74

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.
Files changed (212) hide show
  1. package/README.md +377 -427
  2. package/package.json +48 -48
  3. package/personas//347/220/206/346/231/272/346/270/251/345/222/214.md +23 -23
  4. package/personas//350/200/201/350/260/213/346/267/261/347/256/227.md +22 -22
  5. package/personas//350/257/232/346/201/263/347/233/264/347/216/207.md +22 -22
  6. package/personas//350/275/273/346/235/276/346/264/273/346/263/274.md +22 -22
  7. package/personas//351/207/216/346/200/247/345/217/233/351/200/206.md +23 -23
  8. package/scripts/check-skill-command-surface.mjs +116 -0
  9. package/scripts/find-hide-spots.py +157 -157
  10. package/scripts/postinstall.mjs +20 -20
  11. package/scripts/sync-bundled-skill.mjs +244 -244
  12. package/scripts/sync-bundled-skill.test.mjs +152 -152
  13. package/skills/clawclaw/SKILL.md +246 -244
  14. package/skills/clawclaw/references/CHATTERBOX.md +141 -142
  15. package/skills/clawclaw/references/COMMANDS.md +155 -148
  16. package/skills/clawclaw/references/GAME-MECHANICS.md +188 -188
  17. package/skills/clawclaw/references/HUB.md +48 -48
  18. package/skills/clawclaw/references/KNOWLEDGE.md +42 -45
  19. package/skills/clawclaw/references/STRATEGIES.md +59 -59
  20. package/skills/clawclaw/references/STREAM.md +93 -91
  21. package/skills/clawclaw/references/TACTICS.md +65 -65
  22. package/src/assets/clawclaw-ascii-map.txt +40 -40
  23. package/src/cli.ts +110 -110
  24. package/src/commands/_schema.ts +124 -109
  25. package/src/commands/account.ts +209 -209
  26. package/src/commands/config.ts +30 -30
  27. package/src/commands/do.test.ts +84 -73
  28. package/src/commands/do.ts +130 -126
  29. package/src/commands/events.test.ts +71 -71
  30. package/src/commands/events.ts +221 -155
  31. package/src/commands/game-map.test.ts +28 -28
  32. package/src/commands/game-start-plan.test.ts +84 -84
  33. package/src/commands/game.ts +1113 -1042
  34. package/src/commands/history-player.test.ts +102 -102
  35. package/src/commands/history.ts +573 -573
  36. package/src/commands/hub.test.ts +96 -96
  37. package/src/commands/hub.ts +234 -234
  38. package/src/commands/knowledge.test.ts +13 -13
  39. package/src/commands/knowledge.ts +139 -139
  40. package/src/commands/load.test.ts +51 -51
  41. package/src/commands/load.ts +13 -13
  42. package/src/commands/meeting-history.test.ts +106 -106
  43. package/src/commands/memory.ts +40 -40
  44. package/src/commands/peek.ts +45 -45
  45. package/src/commands/persona.ts +57 -57
  46. package/src/commands/setup/codex.ts +266 -266
  47. package/src/commands/setup/hermes.test.ts +96 -96
  48. package/src/commands/setup/hermes.ts +76 -76
  49. package/src/commands/setup/index.ts +13 -13
  50. package/src/commands/setup/openclaw.test.ts +114 -114
  51. package/src/commands/setup/openclaw.ts +147 -147
  52. package/src/commands/skill.ts +128 -128
  53. package/src/commands/state.ts +46 -46
  54. package/src/commands/strategy.test.ts +145 -145
  55. package/src/commands/strategy.ts +181 -181
  56. package/src/commands/tts.ts +128 -128
  57. package/src/commands/upgrade.test.ts +82 -82
  58. package/src/commands/upgrade.ts +148 -148
  59. package/src/commands/watch.test.ts +999 -977
  60. package/src/commands/watch.ts +660 -658
  61. package/src/lib/auth.test.ts +74 -74
  62. package/src/lib/auth.ts +186 -186
  63. package/src/lib/command-meta.ts +37 -37
  64. package/src/lib/game-client.ts +403 -391
  65. package/src/lib/game-context.ts +92 -0
  66. package/src/lib/host-config-patcher.test.ts +130 -130
  67. package/src/lib/host-config-patcher.ts +151 -151
  68. package/src/lib/http-keepalive.ts +15 -15
  69. package/src/lib/http-transport.test.ts +42 -42
  70. package/src/lib/http-transport.ts +113 -113
  71. package/src/lib/hub-client.test.ts +56 -56
  72. package/src/lib/hub-client.ts +88 -88
  73. package/src/lib/hub-install.test.ts +98 -98
  74. package/src/lib/hub-install.ts +121 -121
  75. package/src/lib/hub-reminder.ts +56 -56
  76. package/src/lib/hub-unzip.test.ts +69 -69
  77. package/src/lib/hub-unzip.ts +62 -62
  78. package/src/lib/init-command.test.ts +75 -75
  79. package/src/lib/init-command.ts +120 -120
  80. package/src/lib/knowledge-store.test.ts +170 -170
  81. package/src/lib/knowledge-store.ts +369 -369
  82. package/src/lib/load-context.test.ts +52 -52
  83. package/src/lib/load-context.ts +52 -52
  84. package/src/lib/match-state.test.ts +134 -134
  85. package/src/lib/match-state.ts +94 -94
  86. package/src/lib/netease-tts.ts +83 -83
  87. package/src/lib/normalize.ts +42 -42
  88. package/src/lib/persona.test.ts +41 -41
  89. package/src/lib/persona.ts +72 -72
  90. package/src/lib/server-registry.ts +152 -152
  91. package/src/lib/skill-version.test.ts +48 -48
  92. package/src/lib/skill-version.ts +19 -19
  93. package/src/lib/strategy-export.test.ts +232 -232
  94. package/src/lib/strategy-export.ts +242 -242
  95. package/src/lib/tts-keys.ts +7 -7
  96. package/src/lib/tts-speech.test.ts +63 -63
  97. package/src/lib/tts-speech.ts +76 -76
  98. package/src/lib/workspace-argv.test.ts +49 -49
  99. package/src/lib/workspace-argv.ts +44 -44
  100. package/src/perception/player-history-store.test.ts +87 -87
  101. package/src/perception/player-history-store.ts +194 -194
  102. package/src/pipeline/event-format.test.ts +243 -215
  103. package/src/pipeline/event-format.ts +501 -485
  104. package/src/pipeline/event-hints.ts +195 -190
  105. package/src/pipeline/event-store.test.ts +28 -28
  106. package/src/pipeline/event-store.ts +193 -193
  107. package/src/pipeline/pipeline.ts +35 -35
  108. package/src/pipeline/player-projection.test.ts +119 -0
  109. package/src/pipeline/player-projection.ts +380 -0
  110. package/src/runtime/auto-upgrade.test.ts +66 -66
  111. package/src/runtime/auto-upgrade.ts +31 -31
  112. package/src/runtime/event-daemon.test.ts +209 -141
  113. package/src/runtime/event-daemon.ts +519 -457
  114. package/src/runtime/owner-control.ts +150 -150
  115. package/src/runtime/raw-ws-log.test.ts +33 -33
  116. package/src/runtime/raw-ws-log.ts +32 -32
  117. package/src/runtime/runtime-logger.ts +107 -107
  118. package/src/runtime/ws-client.test.ts +125 -104
  119. package/src/runtime/ws-client.ts +287 -272
  120. package/src/sdk/action.ts +166 -166
  121. package/src/sdk/index.ts +110 -110
  122. package/src/sdk/types.ts +161 -161
  123. package/src/strategies/avoid-lone.ts +12 -12
  124. package/src/strategies/avoid-players.knowledge.md +19 -19
  125. package/src/strategies/avoid-players.ts +16 -16
  126. package/src/strategies/corpse-patrol.ts +23 -23
  127. package/src/strategies/crab-sabotage.ts +22 -22
  128. package/src/strategies/custom-module.test.ts +270 -270
  129. package/src/strategies/find-player.ts +17 -17
  130. package/src/strategies/game-utils.test.ts +242 -242
  131. package/src/strategies/game-utils.ts +846 -846
  132. package/src/strategies/goals/anchor-linger.ts +77 -77
  133. package/src/strategies/goals/avoid-lone-top.ts +168 -168
  134. package/src/strategies/goals/avoid-players-top.test.ts +83 -83
  135. package/src/strategies/goals/avoid-players-top.ts +121 -121
  136. package/src/strategies/goals/conversation-goal.ts +51 -51
  137. package/src/strategies/goals/corpse-patrol-top.ts +113 -113
  138. package/src/strategies/goals/crab-octopus-reflexes.ts +101 -101
  139. package/src/strategies/goals/crab-sabotage-top.ts +197 -197
  140. package/src/strategies/goals/emergency-hunt-goal.ts +28 -28
  141. package/src/strategies/goals/find-player-top.ts +93 -93
  142. package/src/strategies/goals/flee-players-goal.ts +53 -53
  143. package/src/strategies/goals/follow-companion-goal.ts +106 -106
  144. package/src/strategies/goals/goal-manager.ts +41 -41
  145. package/src/strategies/goals/goal-root-strategy.ts +49 -49
  146. package/src/strategies/goals/goal.ts +28 -28
  147. package/src/strategies/goals/hide-top.ts +197 -197
  148. package/src/strategies/goals/keep-away-goal.ts +221 -221
  149. package/src/strategies/goals/kill-frenzy-top.ts +80 -80
  150. package/src/strategies/goals/kill-lone-top.ts +160 -160
  151. package/src/strategies/goals/kill-target-goal.ts +59 -59
  152. package/src/strategies/goals/kill-target-top.ts +109 -109
  153. package/src/strategies/goals/leaf-goal.ts +27 -27
  154. package/src/strategies/goals/linger-corpse-goal.ts +35 -35
  155. package/src/strategies/goals/lone-kill-core.ts +82 -82
  156. package/src/strategies/goals/lone-kill-goal.ts +24 -24
  157. package/src/strategies/goals/lone-kill-task-top.test.ts +85 -85
  158. package/src/strategies/goals/lone-kill-task-top.ts +133 -133
  159. package/src/strategies/goals/move-room-goal.ts +60 -60
  160. package/src/strategies/goals/normal-shrimp-top.test.ts +80 -80
  161. package/src/strategies/goals/normal-shrimp-top.ts +242 -242
  162. package/src/strategies/goals/paradise-fish-top.test.ts +126 -126
  163. package/src/strategies/goals/paradise-fish-top.ts +224 -224
  164. package/src/strategies/goals/patrol-top.ts +57 -57
  165. package/src/strategies/goals/report-patrol-top.ts +80 -80
  166. package/src/strategies/goals/safe-task-goal.ts +102 -102
  167. package/src/strategies/goals/social-task-top.ts +161 -161
  168. package/src/strategies/goals/task-kill-report-top.ts +163 -163
  169. package/src/strategies/goals/task-only-top.ts +57 -57
  170. package/src/strategies/goals/task-or-patrol-goal.ts +41 -41
  171. package/src/strategies/goals/task-report-top.ts +57 -57
  172. package/src/strategies/goals/wander-task-goal.ts +33 -33
  173. package/src/strategies/goals/warrior-shrimp-top.test.ts +87 -87
  174. package/src/strategies/goals/warrior-shrimp-top.ts +267 -267
  175. package/src/strategies/greeting.ts +53 -53
  176. package/src/strategies/hide-spots.ts +59 -59
  177. package/src/strategies/hide.ts +24 -24
  178. package/src/strategies/kill-frenzy.ts +13 -13
  179. package/src/strategies/kill-lone.knowledge.md +17 -17
  180. package/src/strategies/kill-lone.ts +14 -14
  181. package/src/strategies/kill-target.ts +19 -19
  182. package/src/strategies/loader.test.ts +678 -678
  183. package/src/strategies/loader.ts +179 -179
  184. package/src/strategies/lone-kill-task.ts +22 -22
  185. package/src/strategies/meeting-gate.test.ts +59 -59
  186. package/src/strategies/meeting-gate.ts +23 -23
  187. package/src/strategies/move-room.ts +16 -16
  188. package/src/strategies/new-events-backfill.ts +98 -98
  189. package/src/strategies/off-route-points.ts +105 -105
  190. package/src/strategies/paradise-fish.knowledge.md +19 -19
  191. package/src/strategies/paradise-fish.ts +26 -26
  192. package/src/strategies/pathfind/distance-field.ts +150 -150
  193. package/src/strategies/pathfind/escape-planner.test.ts +197 -197
  194. package/src/strategies/pathfind/escape-planner.ts +355 -355
  195. package/src/strategies/pathfind/walkable-grid.ts +117 -117
  196. package/src/strategies/patrol.ts +12 -12
  197. package/src/strategies/player-targets.ts +13 -13
  198. package/src/strategies/report-patrol.ts +12 -12
  199. package/src/strategies/shrimp-memory.knowledge.md +19 -19
  200. package/src/strategies/shrimp-memory.ts +26 -26
  201. package/src/strategies/social-task.test.ts +28 -28
  202. package/src/strategies/social-task.ts +50 -50
  203. package/src/strategies/spawn.ts +82 -82
  204. package/src/strategies/speech-module.ts +123 -123
  205. package/src/strategies/strategy-loop.test.ts +15 -0
  206. package/src/strategies/strategy-loop.ts +776 -771
  207. package/src/strategies/task-kill-report.ts +18 -18
  208. package/src/strategies/task-only.ts +12 -12
  209. package/src/strategies/task-report.ts +23 -23
  210. package/src/strategies/types.ts +109 -109
  211. package/src/strategies/warrior-memory.knowledge.md +21 -21
  212. package/src/strategies/warrior-memory.ts +17 -17
@@ -1,59 +1,59 @@
1
- import type { Position } from '../sdk/types.js';
2
- import { nearestSafePoint, type OffRoutePoint } from './off-route-points.js';
3
-
4
- /** 藏身角落,离路点的一种(见 OffRoutePoint)。 */
5
- export type HideSpot = OffRoutePoint;
6
-
7
- /**
8
- * 躲藏点:离线从服务端烘焙地图(config/clawclaw/clawclaw.tmj.baked.npz)算出的「藏身角落」。筛选条件:
9
- * - 所在房间有 ≥2 个出口(非死胡同,被追能逃);**走廊**(做任务的必经路线)一律排除;
10
- * - 出口 ≥4 的枢纽房间排除(穿行人流太大,藏不住);
11
- * - 取房间内「离各出口最深、且远离任务点/出生点」的可走格(缩在内侧角落,避开穿行线与刷新点)。
12
- *
13
- * 重新生成:scripts/find-hide-spots.py(用后端 venv 解释器跑,读 baked.npz,打印可粘贴的本数组)。
14
- * 这是离线烘焙数据,和 pathfind 的可行走网格一样:运行时按需 snap 到最近可走格即可。
15
- */
16
- export const HIDE_SPOTS: readonly HideSpot[] = [
17
- { x: 2882, y: 1362, room: '导航仓' },
18
- { x: 2386, y: 1138, room: '健身房' },
19
- { x: 1922, y: 1234, room: '酒吧' },
20
- { x: 2418, y: 2130, room: '休闲会所' },
21
- { x: 1538, y: 1826, room: '监控室' },
22
- { x: 514, y: 2402, room: '动力监控室' },
23
- { x: 1538, y: 2514, room: '自助餐厅' },
24
- { x: 1314, y: 2674, room: '制氧舱' },
25
- { x: 2514, y: 2882, room: '中央厨房' },
26
- { x: 2882, y: 2994, room: '冷库' },
27
- { x: 3858, y: 2434, room: '情报室' },
28
- ];
29
-
30
- /** 躲藏点离任一威胁多近就硬排除(与 nearestSafeTask 的端点排除同量级)。 */
31
- export const HIDE_THREAT_EXCLUDE_RANGE = 500;
32
- /** 去躲藏点的测地路径经过威胁这个距离内也排除(避免走向把守者)。 */
33
- export const HIDE_PATH_THREAT_RADIUS = 350;
34
-
35
- export interface NearestSafeHideOptions {
36
- threatExcludeRadius?: number;
37
- pathThreatRadius?: number;
38
- /** 当前已选躲藏点:仍是合法候选就保持不变,杜绝等距摇摆。 */
39
- stickyTo?: HideSpot | null;
40
- /** 被标记为不可达的移动目标:在其附近的点跳过。 */
41
- blockedTarget?: Position | null;
42
- }
43
-
44
- /**
45
- * 选「最近的安全躲藏点」:威胁旁的点硬排除、去路经过威胁附近的点排除,余者取测地最近,带粘性
46
- * (当前点仍合法就不换),全部被封死时退回「离威胁最远」的点。实现复用 nearestSafePoint。
47
- */
48
- export function nearestSafeHideSpot(
49
- from: Position,
50
- threatPoints: Position[] = [],
51
- opts: NearestSafeHideOptions = {},
52
- ): HideSpot | null {
53
- return nearestSafePoint(HIDE_SPOTS, from, threatPoints, {
54
- threatExcludeRadius: opts.threatExcludeRadius ?? HIDE_THREAT_EXCLUDE_RANGE,
55
- pathThreatRadius: opts.pathThreatRadius ?? HIDE_PATH_THREAT_RADIUS,
56
- stickyTo: opts.stickyTo ?? null,
57
- blockedTarget: opts.blockedTarget ?? null,
58
- });
59
- }
1
+ import type { Position } from '../sdk/types.js';
2
+ import { nearestSafePoint, type OffRoutePoint } from './off-route-points.js';
3
+
4
+ /** 藏身角落,离路点的一种(见 OffRoutePoint)。 */
5
+ export type HideSpot = OffRoutePoint;
6
+
7
+ /**
8
+ * 躲藏点:离线从服务端烘焙地图(config/clawclaw/clawclaw.tmj.baked.npz)算出的「藏身角落」。筛选条件:
9
+ * - 所在房间有 ≥2 个出口(非死胡同,被追能逃);**走廊**(做任务的必经路线)一律排除;
10
+ * - 出口 ≥4 的枢纽房间排除(穿行人流太大,藏不住);
11
+ * - 取房间内「离各出口最深、且远离任务点/出生点」的可走格(缩在内侧角落,避开穿行线与刷新点)。
12
+ *
13
+ * 重新生成:scripts/find-hide-spots.py(用后端 venv 解释器跑,读 baked.npz,打印可粘贴的本数组)。
14
+ * 这是离线烘焙数据,和 pathfind 的可行走网格一样:运行时按需 snap 到最近可走格即可。
15
+ */
16
+ export const HIDE_SPOTS: readonly HideSpot[] = [
17
+ { x: 2882, y: 1362, room: '导航仓' },
18
+ { x: 2386, y: 1138, room: '健身房' },
19
+ { x: 1922, y: 1234, room: '酒吧' },
20
+ { x: 2418, y: 2130, room: '休闲会所' },
21
+ { x: 1538, y: 1826, room: '监控室' },
22
+ { x: 514, y: 2402, room: '动力监控室' },
23
+ { x: 1538, y: 2514, room: '自助餐厅' },
24
+ { x: 1314, y: 2674, room: '制氧舱' },
25
+ { x: 2514, y: 2882, room: '中央厨房' },
26
+ { x: 2882, y: 2994, room: '冷库' },
27
+ { x: 3858, y: 2434, room: '情报室' },
28
+ ];
29
+
30
+ /** 躲藏点离任一威胁多近就硬排除(与 nearestSafeTask 的端点排除同量级)。 */
31
+ export const HIDE_THREAT_EXCLUDE_RANGE = 500;
32
+ /** 去躲藏点的测地路径经过威胁这个距离内也排除(避免走向把守者)。 */
33
+ export const HIDE_PATH_THREAT_RADIUS = 350;
34
+
35
+ export interface NearestSafeHideOptions {
36
+ threatExcludeRadius?: number;
37
+ pathThreatRadius?: number;
38
+ /** 当前已选躲藏点:仍是合法候选就保持不变,杜绝等距摇摆。 */
39
+ stickyTo?: HideSpot | null;
40
+ /** 被标记为不可达的移动目标:在其附近的点跳过。 */
41
+ blockedTarget?: Position | null;
42
+ }
43
+
44
+ /**
45
+ * 选「最近的安全躲藏点」:威胁旁的点硬排除、去路经过威胁附近的点排除,余者取测地最近,带粘性
46
+ * (当前点仍合法就不换),全部被封死时退回「离威胁最远」的点。实现复用 nearestSafePoint。
47
+ */
48
+ export function nearestSafeHideSpot(
49
+ from: Position,
50
+ threatPoints: Position[] = [],
51
+ opts: NearestSafeHideOptions = {},
52
+ ): HideSpot | null {
53
+ return nearestSafePoint(HIDE_SPOTS, from, threatPoints, {
54
+ threatExcludeRadius: opts.threatExcludeRadius ?? HIDE_THREAT_EXCLUDE_RANGE,
55
+ pathThreatRadius: opts.pathThreatRadius ?? HIDE_PATH_THREAT_RADIUS,
56
+ stickyTo: opts.stickyTo ?? null,
57
+ blockedTarget: opts.blockedTarget ?? null,
58
+ });
59
+ }
@@ -1,24 +1,24 @@
1
- import type { StrategyEntry } from './types.js';
2
- import { GoalRootStrategy } from './goals/goal-root-strategy.js';
3
- import { HideTop } from './goals/hide-top.js';
4
-
5
- /** 解析参数:kill/fight → 死角自保开;nokill/flee/pacifist → 关;缺省(null)= 按角色默认。 */
6
- export function parseHideKillArg(args?: string[]): boolean | null {
7
- for (const raw of args ?? []) {
8
- const a = raw.trim().toLowerCase();
9
- if (a === 'kill' || a === 'fight' || a === 'kill=on') return true;
10
- if (a === 'nokill' || a === 'flee' || a === 'pacifist' || a === 'kill=off') return false;
11
- }
12
- return null;
13
- }
14
-
15
- export const strategy: StrategyEntry = {
16
- id: 'hide',
17
- name: '躲藏',
18
- description:
19
- '躲藏策略:在离线从地图算好的若干「非走廊、≥2 出口可逃、远离任务点/出生点」的藏身角落里,选测地最近且不挨威胁的一个潜伏不动;视野里一出现非队友,就像 shrimp-memory 那样保持距离甩开(KeepAway),并边逃边重算排除该威胁的新藏点,逃完落到新点继续潜伏。蟹不躲队友。可选参数 kill / nokill 控制「被单个对手逼进出刀距离且无路可逃时是否出刀自保」——缺省按角色:蟹/章鱼默认开,武士虾/枪虾(及无刀角色)默认关。',
20
- create(args?: string[]) {
21
- const killWhenCornered = parseHideKillArg(args);
22
- return new GoalRootStrategy('hide', () => new HideTop(killWhenCornered), { resetOnMeetingResume: false });
23
- },
24
- };
1
+ import type { StrategyEntry } from './types.js';
2
+ import { GoalRootStrategy } from './goals/goal-root-strategy.js';
3
+ import { HideTop } from './goals/hide-top.js';
4
+
5
+ /** 解析参数:kill/fight → 死角自保开;nokill/flee/pacifist → 关;缺省(null)= 按角色默认。 */
6
+ export function parseHideKillArg(args?: string[]): boolean | null {
7
+ for (const raw of args ?? []) {
8
+ const a = raw.trim().toLowerCase();
9
+ if (a === 'kill' || a === 'fight' || a === 'kill=on') return true;
10
+ if (a === 'nokill' || a === 'flee' || a === 'pacifist' || a === 'kill=off') return false;
11
+ }
12
+ return null;
13
+ }
14
+
15
+ export const strategy: StrategyEntry = {
16
+ id: 'hide',
17
+ name: '躲藏',
18
+ description:
19
+ '躲藏策略:在离线从地图算好的若干「非走廊、≥2 出口可逃、远离任务点/出生点」的藏身角落里,选测地最近且不挨威胁的一个潜伏不动;视野里一出现非队友,就像 shrimp-memory 那样保持距离甩开(KeepAway),并边逃边重算排除该威胁的新藏点,逃完落到新点继续潜伏。蟹不躲队友。可选参数 kill / nokill 控制「被单个对手逼进出刀距离且无路可逃时是否出刀自保」——缺省按角色:蟹/章鱼默认开,武士虾/枪虾(及无刀角色)默认关。',
20
+ create(args?: string[]) {
21
+ const killWhenCornered = parseHideKillArg(args);
22
+ return new GoalRootStrategy('hide', () => new HideTop(killWhenCornered), { resetOnMeetingResume: false });
23
+ },
24
+ };
@@ -1,13 +1,13 @@
1
- import type { StrategyEntry } from './types.js';
2
- import { GoalRootStrategy } from './goals/goal-root-strategy.js';
3
- import { KillFrenzyTop } from './goals/kill-frenzy-top.js';
4
-
5
- export const strategy: StrategyEntry = {
6
- id: 'kill-frenzy',
7
- name: '屠夫',
8
- description:
9
- '疯狂砍人:见谁杀谁(除队友外所有可见玩家),多人在场也照杀。按房间顺序巡逻,视野里只要有非队友就冲向最近的那个,50内且冷却好就出刀,冷却中保持10距离贴身跟随等冷却。与 kill-lone 不同,不会因为周围人多而暂停攻击。永不停手。',
10
- create() {
11
- return new GoalRootStrategy('kill-frenzy', () => new KillFrenzyTop(), { resetOnMeetingResume: false });
12
- },
13
- };
1
+ import type { StrategyEntry } from './types.js';
2
+ import { GoalRootStrategy } from './goals/goal-root-strategy.js';
3
+ import { KillFrenzyTop } from './goals/kill-frenzy-top.js';
4
+
5
+ export const strategy: StrategyEntry = {
6
+ id: 'kill-frenzy',
7
+ name: '屠夫',
8
+ description:
9
+ '疯狂砍人:见谁杀谁(除队友外所有可见玩家),多人在场也照杀。按房间顺序巡逻,视野里只要有非队友就冲向最近的那个,50内且冷却好就出刀,冷却中保持10距离贴身跟随等冷却。与 kill-lone 不同,不会因为周围人多而暂停攻击。永不停手。',
10
+ create() {
11
+ return new GoalRootStrategy('kill-frenzy', () => new KillFrenzyTop(), { resetOnMeetingResume: false });
12
+ },
13
+ };
@@ -1,17 +1,17 @@
1
- # kill-lone 知识契约
2
-
3
- `kill-lone` 读取两档玩家标记,**未标记的一律默认「被怀疑」**:
4
-
5
- | 标记 | 行为 |
6
- |------|------|
7
- | `hostile`(坏人) | 视为明确猎杀目标,见到就追杀,可突破多人保护规则 |
8
- | `trusted`(好人) | 永不击杀,优先级高于其他猎杀判断 |
9
- | 未标记(被怀疑) | 维持默认行为:仅猎杀落单的非队友,不因被怀疑就升级为主动猎杀 |
10
-
11
- ```bash
12
- ccl knowledge mark 5 hostile --note "确认敌对"
13
- ccl knowledge mark 3 trusted --note "已澄清"
14
- ccl knowledge del player 5 # 取消标记 → 回到默认「被怀疑」
15
- ```
16
-
17
- `role` 是纯身份事实,不直接控制策略。
1
+ # kill-lone 知识契约
2
+
3
+ `kill-lone` 读取两档玩家标记,**未标记的一律默认「被怀疑」**:
4
+
5
+ | 标记 | 行为 |
6
+ |------|------|
7
+ | `hostile`(坏人) | 视为明确猎杀目标,见到就追杀,可突破多人保护规则 |
8
+ | `trusted`(好人) | 永不击杀,优先级高于其他猎杀判断 |
9
+ | 未标记(被怀疑) | 维持默认行为:仅猎杀落单的非队友,不因被怀疑就升级为主动猎杀 |
10
+
11
+ ```bash
12
+ ccl knowledge mark 5 hostile --note "确认敌对"
13
+ ccl knowledge mark 3 trusted --note "已澄清"
14
+ ccl knowledge del player 5 # 取消标记 → 回到默认「被怀疑」
15
+ ```
16
+
17
+ `role` 是纯身份事实,不直接控制策略。
@@ -1,14 +1,14 @@
1
- import type { StrategyEntry } from './types.js';
2
- import { GoalRootStrategy } from './goals/goal-root-strategy.js';
3
- import { KillLoneTop } from './goals/kill-lone-top.js';
4
- import { parseTargetArgs } from './player-targets.js';
5
-
6
- export const strategy: StrategyEntry = {
7
- id: 'kill-lone',
8
- name: '猎独',
9
- description: '按照房间顺序进行巡逻,巡逻时遇到人会判断。可传入避免击杀的座位号或名字列表。视野里只有一个非队友且不在避免名单内就靠近,进入50距离就出刀;冷却中贴在10距离附近等。视野里出现两人以上时,暂停攻击10秒并继续巡逻。',
10
- create(args?: string[]) {
11
- const protectedTargets = args ? parseTargetArgs(args) : [];
12
- return new GoalRootStrategy('kill-lone', () => new KillLoneTop(protectedTargets), { resetOnMeetingResume: false });
13
- },
14
- };
1
+ import type { StrategyEntry } from './types.js';
2
+ import { GoalRootStrategy } from './goals/goal-root-strategy.js';
3
+ import { KillLoneTop } from './goals/kill-lone-top.js';
4
+ import { parseTargetArgs } from './player-targets.js';
5
+
6
+ export const strategy: StrategyEntry = {
7
+ id: 'kill-lone',
8
+ name: '猎独',
9
+ description: '按照房间顺序进行巡逻,巡逻时遇到人会判断。可传入避免击杀的座位号或名字列表。视野里只有一个非队友且不在避免名单内就靠近,进入50距离就出刀;冷却中贴在10距离附近等。视野里出现两人以上时,暂停攻击10秒并继续巡逻。',
10
+ create(args?: string[]) {
11
+ const protectedTargets = args ? parseTargetArgs(args) : [];
12
+ return new GoalRootStrategy('kill-lone', () => new KillLoneTop(protectedTargets), { resetOnMeetingResume: false });
13
+ },
14
+ };
@@ -1,19 +1,19 @@
1
- import type { StrategyEntry } from './types.js';
2
- import { GoalRootStrategy } from './goals/goal-root-strategy.js';
3
- import { KillTargetTop } from './goals/kill-target-top.js';
4
- import { parseTargetArgs } from './player-targets.js';
5
-
6
- export const strategy: StrategyEntry = {
7
- id: 'kill-target',
8
- name: '追杀',
9
- description: '专门追杀指定目标(传入座位号或名字,可多人)。按照房间顺序进行巡逻,目标进入视野就冲上去,50内且冷却好就出刀;冷却中保持10距离贴身跟随等待。找目标时路过其他玩家不会停步。所有目标死亡后停止。',
10
- create(args?: string[]) {
11
- const targets = args ? parseTargetArgs(args) : [];
12
- if (targets.length === 0) {
13
- throw new Error(
14
- 'kill-target strategy requires target seat numbers or player names (comma- or space-separated).',
15
- );
16
- }
17
- return new GoalRootStrategy('kill-target', () => new KillTargetTop(targets), { resetOnMeetingResume: false });
18
- },
19
- };
1
+ import type { StrategyEntry } from './types.js';
2
+ import { GoalRootStrategy } from './goals/goal-root-strategy.js';
3
+ import { KillTargetTop } from './goals/kill-target-top.js';
4
+ import { parseTargetArgs } from './player-targets.js';
5
+
6
+ export const strategy: StrategyEntry = {
7
+ id: 'kill-target',
8
+ name: '追杀',
9
+ description: '专门追杀指定目标(传入座位号或名字,可多人)。按照房间顺序进行巡逻,目标进入视野就冲上去,50内且冷却好就出刀;冷却中保持10距离贴身跟随等待。找目标时路过其他玩家不会停步。所有目标死亡后停止。',
10
+ create(args?: string[]) {
11
+ const targets = args ? parseTargetArgs(args) : [];
12
+ if (targets.length === 0) {
13
+ throw new Error(
14
+ 'kill-target strategy requires target seat numbers or player names (comma- or space-separated).',
15
+ );
16
+ }
17
+ return new GoalRootStrategy('kill-target', () => new KillTargetTop(targets), { resetOnMeetingResume: false });
18
+ },
19
+ };