cheatengine 5.8.15 → 5.8.17

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/README.md CHANGED
@@ -7,7 +7,7 @@ MCP bridge enabling AI assistants to directly control Cheat Engine for game hack
7
7
  ## Architecture
8
8
 
9
9
  ```
10
- AI <--MCP/JSON-RPC--> ce_mcp_server.py <--Named Pipe--> ce_mcp_bridge.lua (CE)
10
+ AI <--MCP/JSON-RPC--> ce_mcp_server.js <--Named Pipe--> ce_mcp_bridge.lua (CE)
11
11
 
12
12
  Background auto-reconnect
13
13
  ```
@@ -16,7 +16,7 @@ AI <--MCP/JSON-RPC--> ce_mcp_server.py <--Named Pipe--> ce_mcp_bridge.lua (CE)
16
16
 
17
17
  ### Quick Start (NPX) - Recommended
18
18
 
19
- 1. **Install Dependencies**: `pip install pywin32`
19
+ 1. **Prerequisites**: Node.js 14+ (no other dependencies needed)
20
20
 
21
21
  2. **Load in CE** (choose one):
22
22
  - **Auto-load**: Copy `ce_mcp_bridge.lua` to CE's `autorun` folder (e.g. `D:\Cheat Engine\autorun\`)
@@ -45,8 +45,8 @@ If you prefer to run from source:
45
45
  {
46
46
  "mcpServers": {
47
47
  "cheat-engine": {
48
- "command": "python",
49
- "args": ["D:/path/to/ce_mcp/ce_mcp_server.py"]
48
+ "command": "node",
49
+ "args": ["D:/path/to/ce_mcp/ce_mcp_server.js"]
50
50
  }
51
51
  }
52
52
  }
@@ -384,45 +384,45 @@ Add a new record to Cheat Table.
384
384
  ## Recommended Workflows
385
385
 
386
386
  ### Pointer Tracing
387
- ```python
388
- # Automatic (preferred)
389
- result = ce_find_pointer_path(address="0x255D5E758")
390
- # Returns: base_address, offsets, ce_pointer_notation
391
-
392
- # Manual (if automatic fails)
393
- # 1. Find what accesses the address
394
- accesses = ce_find_what_accesses(address="0x255D5E758")
395
- # 2. Get register value (e.g., rcx = 0x255D5E658)
396
- # 3. Search for pointer storing that value
397
- pointers = ce_value_scan(value="0x255D5E658", type="qword")
398
- # 4. Repeat until finding game.exe+offset
387
+ ```json
388
+ // Automatic (preferred)
389
+ {"name": "ce_find_pointer_path", "arguments": {"address": "0x255D5E758", "user_prompted": true}}
390
+ // Returns: base_address, offsets, ce_pointer_notation
391
+
392
+ // Manual (if automatic fails)
393
+ // 1. Find what accesses the address
394
+ {"name": "ce_find_what_accesses", "arguments": {"address": "0x255D5E758", "user_prompted": true}}
395
+ // 2. Get register value from result (e.g., RBX=0x255D5E658)
396
+ // 3. Search for pointer storing that value
397
+ {"name": "ce_value_scan", "arguments": {"value": "0x255D5E658", "type": "qword"}}
398
+ // 4. Repeat until finding game.exe+offset
399
399
  ```
400
400
 
401
401
  ### Function Analysis
402
- ```python
403
- # 1. Find function boundaries
404
- bounds = ce_find_function_boundaries(address="0x14587EDB0")
402
+ ```json
403
+ // 1. Find function boundaries
404
+ {"name": "ce_find_function_boundaries", "arguments": {"address": "0x14587EDB0"}}
405
405
 
406
- # 2. Trace execution
407
- trace = ce_break_and_trace(address="0x14587EDB0", max_steps=100)
406
+ // 2. Trace execution
407
+ {"name": "ce_break_and_trace", "arguments": {"address": "0x14587EDB0", "max_steps": 100}}
408
408
 
409
- # 3. Generate signature for updates
410
- sig = ce_generate_signature(address="0x14587EDB0")
409
+ // 3. Generate signature for updates
410
+ {"name": "ce_generate_signature", "arguments": {"address": "0x14587EDB0"}}
411
411
  ```
412
412
 
413
413
  ### Reverse Engineering Unknown Code
414
- ```python
415
- # 1. Disassemble
416
- code = ce_disassemble(address="0x14587EDB0", count=20)
414
+ ```json
415
+ // 1. Disassemble
416
+ {"name": "ce_disassemble", "arguments": {"address": "0x14587EDB0", "count": 20}}
417
417
 
418
- # 2. Symbolic trace to understand logic
419
- symbolic = ce_symbolic_trace(address="0x14587EDB0", initial_state={"rcx": "this"})
418
+ // 2. Symbolic trace to understand logic
419
+ {"name": "ce_symbolic_trace", "arguments": {"address": "0x14587EDB0", "initial_state": {"rcx": "this"}}}
420
420
 
421
- # 3. Build CFG for complex functions
422
- cfg = ce_build_cfg(address="0x14587EDB0")
421
+ // 3. Build CFG for complex functions
422
+ {"name": "ce_build_cfg", "arguments": {"address": "0x14587EDB0"}}
423
423
 
424
- # 4. Detect patterns
425
- patterns = ce_detect_patterns(address="0x14587EDB0")
424
+ // 4. Detect patterns
425
+ {"name": "ce_detect_patterns", "arguments": {"address": "0x14587EDB0"}}
426
426
  ```
427
427
 
428
428
  ---
package/README_CN.md CHANGED
@@ -7,16 +7,16 @@ MCP 桥接器,让 AI 助手直接控制 Cheat Engine 进行游戏修改和逆
7
7
  ## 架构
8
8
 
9
9
  ```
10
- AI <--MCP/JSON-RPC--> ce_mcp_server.py <--命名管道--> ce_mcp_bridge.lua (CE)
10
+ AI <--MCP/JSON-RPC--> ce_mcp_server.js <--命名管道--> ce_mcp_bridge.lua (CE)
11
11
 
12
- 后台自动重连
12
+ 后台自动重连
13
13
  ```
14
14
 
15
15
  ## 安装
16
16
 
17
17
  ### 快速开始 (NPX) - 推荐
18
18
 
19
- 1. **安装依赖**: `pip install pywin32`
19
+ 1. **环境要求**: Node.js 14+ (无需其他依赖)
20
20
 
21
21
  2. **在 CE 中加载** (二选一):
22
22
  - **自动加载**: 将 `ce_mcp_bridge.lua` 复制到 CE 的 `autorun` 文件夹 (如 `D:\Cheat Engine\autorun\`)
@@ -45,8 +45,8 @@ AI <--MCP/JSON-RPC--> ce_mcp_server.py <--命名管道--> ce_mcp_bridge.lua (CE)
45
45
  {
46
46
  "mcpServers": {
47
47
  "cheat-engine": {
48
- "command": "python",
49
- "args": ["D:/path/to/ce_mcp/ce_mcp_server.py"]
48
+ "command": "node",
49
+ "args": ["D:/path/to/ce_mcp/ce_mcp_server.js"]
50
50
  }
51
51
  }
52
52
  }
@@ -384,45 +384,45 @@ Hook 函数以拦截调用并捕获参数。
384
384
  ## 推荐工作流
385
385
 
386
386
  ### 指针追踪
387
- ```python
388
- # 自动 (首选)
389
- result = ce_find_pointer_path(address="0x255D5E758")
390
- # 返回: base_address, offsets, ce_pointer_notation
391
-
392
- # 手动 (自动失败时)
393
- # 1. 查找访问该地址的代码
394
- accesses = ce_find_what_accesses(address="0x255D5E758")
395
- # 2. 获取寄存器值 (如 rcx = 0x255D5E658)
396
- # 3. 搜索存储该值的指针
397
- pointers = ce_value_scan(value="0x255D5E658", type="qword")
398
- # 4. 重复直到找到 game.exe+offset
387
+ ```json
388
+ // 自动 (首选)
389
+ {"name": "ce_find_pointer_path", "arguments": {"address": "0x255D5E758", "user_prompted": true}}
390
+ // 返回: base_address, offsets, ce_pointer_notation
391
+
392
+ // 手动 (自动失败时)
393
+ // 1. 查找访问该地址的代码
394
+ {"name": "ce_find_what_accesses", "arguments": {"address": "0x255D5E758", "user_prompted": true}}
395
+ // 2. 从结果获取寄存器值 (如 RBX=0x255D5E658)
396
+ // 3. 搜索存储该值的指针
397
+ {"name": "ce_value_scan", "arguments": {"value": "0x255D5E658", "type": "qword"}}
398
+ // 4. 重复直到找到 game.exe+offset
399
399
  ```
400
400
 
401
401
  ### 函数分析
402
- ```python
403
- # 1. 查找函数边界
404
- bounds = ce_find_function_boundaries(address="0x14587EDB0")
402
+ ```json
403
+ // 1. 查找函数边界
404
+ {"name": "ce_find_function_boundaries", "arguments": {"address": "0x14587EDB0"}}
405
405
 
406
- # 2. 跟踪执行
407
- trace = ce_break_and_trace(address="0x14587EDB0", max_steps=100)
406
+ // 2. 跟踪执行
407
+ {"name": "ce_break_and_trace", "arguments": {"address": "0x14587EDB0", "max_steps": 100}}
408
408
 
409
- # 3. 生成特征码用于更新
410
- sig = ce_generate_signature(address="0x14587EDB0")
409
+ // 3. 生成特征码用于更新
410
+ {"name": "ce_generate_signature", "arguments": {"address": "0x14587EDB0"}}
411
411
  ```
412
412
 
413
413
  ### 逆向未知代码
414
- ```python
415
- # 1. 反汇编
416
- code = ce_disassemble(address="0x14587EDB0", count=20)
414
+ ```json
415
+ // 1. 反汇编
416
+ {"name": "ce_disassemble", "arguments": {"address": "0x14587EDB0", "count": 20}}
417
417
 
418
- # 2. 符号跟踪理解逻辑
419
- symbolic = ce_symbolic_trace(address="0x14587EDB0", initial_state={"rcx": "this"})
418
+ // 2. 符号跟踪理解逻辑
419
+ {"name": "ce_symbolic_trace", "arguments": {"address": "0x14587EDB0", "initial_state": {"rcx": "this"}}}
420
420
 
421
- # 3. 为复杂函数构建 CFG
422
- cfg = ce_build_cfg(address="0x14587EDB0")
421
+ // 3. 为复杂函数构建 CFG
422
+ {"name": "ce_build_cfg", "arguments": {"address": "0x14587EDB0"}}
423
423
 
424
- # 4. 检测模式
425
- patterns = ce_detect_patterns(address="0x14587EDB0")
424
+ // 4. 检测模式
425
+ {"name": "ce_detect_patterns", "arguments": {"address": "0x14587EDB0"}}
426
426
  ```
427
427
 
428
428
  ---