From 38e3dbea877e5d75b05d6e5c235cef9944ad8180 Mon Sep 17 00:00:00 2001
From: 薛之猫大王 <545626463@qq.com>
Date: Sun, 22 Feb 2026 23:51:06 +0800
Subject: [PATCH] 提交框架实现进度与待办

---
 maps/EntryMap/165777025393032044607574753601084850552.gmp |    0 
 editor_table/editormodel/200766.json                      |  512 ++++++++++++++++++++++++++++++++
 maps/EntryMap/script/log/helper_port.lua                  |    2 
 TechDocs/13_框架实现进度与待办.md                                  |  390 ++++++++++++++++++++++++
 lock/header_43523871-a912-481d-bb2e-29f7ea3c6f51.lock     |    0 
 maps/EntryMap/unit/134274912.json                         |   14 
 6 files changed, 910 insertions(+), 8 deletions(-)

diff --git "a/TechDocs/13_\346\241\206\346\236\266\345\256\236\347\216\260\350\277\233\345\272\246\344\270\216\345\276\205\345\212\236.md" "b/TechDocs/13_\346\241\206\346\236\266\345\256\236\347\216\260\350\277\233\345\272\246\344\270\216\345\276\205\345\212\236.md"
new file mode 100644
index 0000000..2d37cfa
--- /dev/null
+++ "b/TechDocs/13_\346\241\206\346\236\266\345\256\236\347\216\260\350\277\233\345\272\246\344\270\216\345\276\205\345\212\236.md"
@@ -0,0 +1,390 @@
+# 框架实现进度与待办
+
+## 一、已创建的文件结构(25个文件)
+
+```
+maps/EntryMap/script/
+├── main.lua                     ← 入口
+├── config/
+│   ├── const.lua                ← 全局常量
+│   └── balance.lua              ← 数值配置
+├── core/
+│   ├── game_manager.lua         ← 局状态机
+│   ├── player_manager.lua       ← 玩家管理
+│   ├── npc_manager.lua          ← NPC管理
+│   ├── mode_manager.lua         ← 游戏模式
+│   └── timer_manager.lua        ← 全局计时
+├── systems/
+│   ├── suspicion.lua            ← 怀疑值系统
+│   ├── disguise.lua             ← 换装系统
+│   ├── corpse.lua               ← 尸体与藏尸
+│   ├── assassination.lua        ← 刺杀系统
+│   ├── item_spawner.lua         ← 物品刷新
+│   └── circle.lua               ← 缩圈系统
+├── profession/
+│   ├── base.lua                 ← 职业注册基类
+│   ├── shadow_blade.lua         ← 影刃
+│   ├── mimic.lua                ← 千面
+│   ├── eagle_eye.lua            ← 鹰眼
+│   ├── surgeon.lua              ← 医师
+│   ├── phantom.lua              ← 幽灵
+│   └── hound.lua                ← 猎犬
+├── ai/
+│   └── npc_behavior.lua         ← NPC行为AI
+└── ui/
+    ├── hud.lua                  ← HUD更新
+    ├── notification.lua         ← 通知系统
+    └── scoreboard.lua           ← 结算面板
+```
+
+---
+
+## 二、各模块已实现的功能
+
+### 2.1 main.lua — 入口
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 游戏初始化事件注册 | ✅ 完成 | 绑定 `游戏-初始化` 事件,设置随机种子,启动所有管理器 |
+| 所有模块预加载 | ✅ 完成 | require 全部 config/core/systems/profession/ai/ui 模块 |
+| 6个职业注册 | ✅ 完成 | 加载所有 profession/*.lua,注册到 base |
+| 单位死亡事件 | ✅ 完成 | 监听 `单位-死亡`,若死亡单位是玩家则调用 PlayerMgr |
+| 技能施法事件 | ✅ 完成 | 监听 `技能-施法开始`,路由到职业技能处理器 |
+| 键盘输入事件 | ✅ 完成 | F键=刺杀, E键=互动/换装/藏尸, G键=拖拽尸体 |
+
+### 2.2 config/const.lua — 全局常量
+
+| 内容 | 状态 | 说明 |
+|------|------|------|
+| 游戏模式配置 | ✅ 完成 | `GAME_MODE` 支持 ffa/team/vip_escort |
+| 玩家单位 Key | ⚠️ 占位 | `unit_player_assassin`,需在物编中创建后填入实际值 |
+| NPC 单位 Key | ⚠️ 占位 | 4种NPC类型,需物编创建 |
+| NPC 模型池 | ❌ 空表 | `NPC_MODEL_POOL = {}`,需填入模型Key列表 |
+| Road 路径列表 | ❌ 空表 | `ROAD_LIST = {}`,需填入路径或由代码自动收集 |
+| 10个 Buff Key | ⚠️ 占位 | 怀疑值3级Buff + 护盾/毒/标记等,需物编创建 |
+| 6个技能 Key | ⚠️ 占位 | 6个职业的主动技能,需物编创建 |
+| 8个物品 Key | ⚠️ 占位 | 毒针/飞刀/护甲等8种物品,需物编创建 |
+| 投射物/特效 Key | ⚠️ 占位 | 飞刀投射物、烟雾/脚印特效,需物编创建 |
+| 状态枚举 | ⚠️ 占位 | 无敌/定身/隐身,需确认引擎中的实际枚举名 |
+| 阵营玩家 | ✅ 完成 | NPC=玩家31, 红队=玩家30, 蓝队=玩家29 |
+
+### 2.3 config/balance.lua — 数值配置
+
+| 内容 | 状态 | 说明 |
+|------|------|------|
+| 6种职业血量 | ✅ 完成 | 90~110 HP 差异化 |
+| 移速配置 | ✅ 完成 | 基础5.0, NPC步行3.0 |
+| 刺杀数值 | ✅ 完成 | 范围2m, 前摇0.5s/0.2s, 伤害70/105 |
+| 怀疑值数值 | ✅ 完成 | 击杀/拖拽/失手时的增量 |
+| 换装时间 | ✅ 完成 | 普通3s, 千面1.5s |
+| 尸体/藏尸 | ✅ 完成 | 30秒腐烂,5m发现距离 |
+| 复活配置 | ✅ 完成 | 1次复活,8秒等待 |
+| 积分配置 | ✅ 完成 | 击杀+100, 死亡-20, 藏尸+15 |
+| 物品刷新 | ✅ 完成 | 45秒刷新周期 |
+| 缩圈配置 | ✅ 完成 | 初始120m, 最小20m, 首缩3分钟 |
+
+### 2.4 core/game_manager.lua — 局状态机
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 状态定义 | ✅ 完成 | PREPARE → PLAYING → OVERTIME → ENDED |
+| on_prepare | ✅ 完成 | 初始化NPC、玩家、物品、模式、怀疑值;10秒无敌 |
+| on_playing | ✅ 完成 | 启动缩圈,计时进入OVERTIME |
+| on_overtime | ✅ 完成 | 怀疑值倍率×2,NPC减少30% |
+| on_ended | ✅ 完成 | 停止系统,排名结算,显示胜负 |
+
+### 2.5 core/player_manager.lua — 玩家管理
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 初始化所有玩家 | ✅ 完成 | 获取所有玩家,为每人创建单位 |
+| 创建玩家单位 | ✅ 完成 | 设HP/移速/物品栏,初始伪装,赋予技能 |
+| 玩家死亡处理 | ✅ 完成 | 积分结算、标记尸体、判断复活、胜负检查 |
+| 复活 | ✅ 完成 | 新生点、满血、新伪装、清零怀疑值 |
+| 积分操作 | ✅ 完成 | add_score |
+| 查询接口 | ✅ 完成 | get_data_by_unit, get_all_player_units, get_alive_count, get_rankings |
+| 随机出生点 | ✅ 完成 | 从 `player_spawn` 标签区域中随机选取 |
+| 随机NPC模型 | ✅ 完成 | 从模型池中随机(需填充 NPC_MODEL_POOL) |
+
+### 2.6 core/npc_manager.lua — NPC管理
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 批量生成NPC | ✅ 完成 | 按权重随机类型(平民50%/巡逻20%/商贩15%/闲逛15%) |
+| 类型分配行为 | ✅ 完成 | 巡逻/平民=沿路径,商贩=固定,闲逛=区域漫游 |
+| 路径收集 | ✅ 完成 | 按标签自动搜集 road_main_loop/patrol/alley/square |
+| 闲逛AI | ✅ 完成 | 在中心点15m范围内随机移动,5~12秒间隔 |
+| 恐慌触发 | ✅ 完成 | 指定半径内NPC朝反方向逃跑,8~12秒后恢复 |
+| 逃跑方向计算 | ✅ 完成 | calc_flee_point 反方向计算 |
+| 缩减NPC数量 | ✅ 完成 | 按比例随机移除(紧迫期用) |
+
+### 2.7 core/mode_manager.lua — 游戏模式
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 独狼模式 (FFA) | ✅ 完成 | 所有玩家互为敌人 |
+| 组队模式 (Team) | ✅ 完成 | 均分两队 red/blue |
+| VIP护送模式 | ✅ 完成 | 随机VIP(200HP,减速),分护送/刺杀队 |
+| 假VIP生成 | ✅ 完成 | 在 fake_vip_spawn 区域创建伪VIP |
+| 检查点系统 | ✅ 完成 | checkpoint 区域按序号排列,VIP进入触发通知 |
+| 撤离点 | ✅ 完成 | exit_point 区域,VIP到达=护送队获胜 |
+| 复活判断 | ✅ 完成 | 按模式判断是否允许复活 |
+| 胜负检查 | ✅ 完成 | FFA=剩1人, Team=一方全灭, VIP=VIP死亡无复活 |
+
+### 2.8 systems/suspicion.lua — 怀疑值系统
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 每秒循环更新 | ✅ 完成 | 同步Timer循环所有存活玩家 |
+| 自然衰减 | ✅ 完成 | -0.5/秒 |
+| 奔跑检测 | ✅ 完成 | 移速>NPC×1.2 → +2/秒 |
+| 静止过久 | ✅ 完成 | 静止>5秒 → +1/秒 |
+| 混入人群 | ✅ 完成 | 5m内NPC≥3 → -1/秒 |
+| 暗区加成 | ✅ 完成 | 在 `light_dark` 区域内 → -1/秒 |
+| 倍率系统 | ✅ 完成 | 紧迫期怀疑值增长×2 |
+| 阈值Buff | ✅ 完成 | 0-29无/30黄色/60橙色/80红色,自动切换Buff |
+| 红色减速 | ✅ 完成 | ≥80时降低移速,恢复后还原 |
+
+### 2.9 systems/disguise.lua — 换装系统
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 对尸体换装 | ✅ 完成 | 距离检查、前摇、模型互换、清零怀疑值 |
+| 千面职业加速 | ✅ 完成 | 千面换装1.5秒(普通3秒) |
+| 换装期间定身 | ✅ 完成 | 添加定身状态+播放引导动画 |
+| 尸体留证据 | ✅ 完成 | 尸体换成玩家旧外观 |
+| 互动点降怀疑 | ✅ 完成 | 4种互动点(长椅/告示栏/水井/摊位),各有不同动画和怀疑值减少 |
+
+### 2.10 systems/corpse.lua — 尸体与藏尸
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 拖拽尸体 | ✅ 完成 | 尸体跟随玩家,降低移速,持续增加怀疑值 |
+| 释放尸体 | ✅ 完成 | 停止跟随,恢复移速 |
+| 藏尸 | ✅ 完成 | 在 hide_spot 区域检查容量,隐藏尸体,加分 |
+| 拖拽状态清理 | ✅ 完成 | 恢复移速,移除计时器 |
+| 尸体发现扫描 | ✅ 完成 | 每2秒扫描,5m内发现未隐藏尸体 |
+| 发现后反应 | ✅ 完成 | 全局通知 + 触发附近NPC恐慌 |
+
+### 2.11 systems/assassination.lua — 刺杀系统
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 刺杀前置检查 | ✅ 完成 | CD、距离、换装/拖拽/攻击状态、准备期 |
+| 背刺判定 | ✅ 完成 | 攻击者在目标背后(夹角>120°)=背刺 |
+| 前摇系统 | ✅ 完成 | 正面0.5秒, 背刺0.2秒, 带动画 |
+| 护盾抵挡 | ✅ 完成 | 有护盾Buff则消耗护盾不造成伤害 |
+| 目击者检查 | ✅ 完成 | 10m内有NPC/玩家=被目击, 影响怀疑值增量 |
+| 击杀处理 | ✅ 完成 | NPC→标记尸体+恐慌+30秒腐烂; 玩家→死亡流程 |
+| 消声器联动 | ✅ 完成 | 持有消声器Buff时击杀不触发恐慌 |
+| 冷却系统 | ✅ 完成 | 击杀5秒/命中3秒/未命中2秒 |
+
+### 2.12 systems/item_spawner.lua — 物品系统
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 初始化刷新点 | ✅ 完成 | 读取 item_spawn 区域,每个点生成一个物品 |
+| 权重随机 | ✅ 完成 | 8种物品不同权重(毒针15/飞刀10/护甲15/...) |
+| 拾取事件 | ✅ 完成 | 监听 `单位-获得物品`,+3怀疑值 |
+| 刷新倒计时 | ✅ 完成 | 45秒重生,紧迫期加速至22.5秒 |
+
+### 2.13 systems/circle.lua — 缩圈系统
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 初始全图圈 | ✅ 完成 | 120m半径圆形区域 |
+| 首次缩圈 | ✅ 完成 | 3分钟后触发 |
+| 动画缩小 | ✅ 完成 | 每秒缩0.5m,缩至目标值 |
+| 多次缩圈 | ✅ 完成 | 每隔90秒再次缩圈,缩至60%,最小20m |
+| 圈外伤害 | ✅ 完成 | 每2秒对圈外玩家造成10点伤害 |
+
+### 2.14 profession/ — 6个职业技能
+
+| 职业 | 技能名 | 状态 | 说明 |
+|------|--------|------|------|
+| 影刃 | 暗影突进 | ✅ 完成 | 前方5m瞬移+0.8秒隐身+终点自动刺杀 |
+| 千面 | 完美模仿 | ✅ 完成 | 跟随最近NPC+10秒内怀疑值-5/秒 |
+| 鹰眼 | 洞察之眼 | ✅ 完成 | 15m范围扫描,标记所有玩家3秒 |
+| 医师 | 麻醉陷阱 | ✅ 完成 | 放置陷阱(最多2个),定身2秒,90秒后消失 |
+| 幽灵 | 幽灵漫步 | ✅ 完成 | 4秒完全隐身+无碰撞+移速加成 |
+| 猎犬 | 血迹追踪 | ✅ 完成 | 标记目标20秒+脚印特效,NPC目标提前消失+返还50%CD |
+
+### 2.15 ai/npc_behavior.lua — NPC行为
+
+| 功能 | 状态 | 说明 |
+|------|------|------|
+| 行为循环 | ✅ 完成 | 每2秒遍历所有NPC执行状态机tick |
+| 状态机 | ✅ 完成 | idle → 30%概率互动/70%移动; moving → 到达后idle; interacting → 计时回idle |
+| 互动点检测 | ✅ 完成 | 检查4种互动点,播放对应动画,等待后恢复 |
+
+### 2.16 ui/ — UI模块
+
+| 模块 | 状态 | 说明 |
+|------|------|------|
+| hud.lua | ⚠️ 框架 | 0.5秒本地更新循环已搭建,UI绑定需用 LocalUILogic 实现 |
+| notification.lua | ⚠️ 框架 | broadcast/kill_notify/player_notify 接口定义好,UI显示待实现 |
+| scoreboard.lua | ⚠️ 框架 | show/hide 接口定义好,结算面板UI待实现 |
+
+---
+
+## 三、你需要在 Y3 编辑器中创建的物编对象
+
+### 3.1 单位 (Unit)
+
+| 物编名称 | 用途 | 关键设置 |
+|----------|------|---------|
+| `unit_player_assassin` | 玩家角色单位 | HP=100, 移速=5.0, 物品栏=2格 |
+| `unit_npc_civilian` | 平民NPC | HP=1, 无攻击 |
+| `unit_npc_patrol` | 巡逻NPC | HP=1, 无攻击 |
+| `unit_npc_vendor` | 商贩NPC | HP=1, 无攻击, 固定不动 |
+| `unit_npc_wanderer` | 闲逛NPC | HP=1, 无攻击 |
+
+### 3.2 Buff (魔法效果)
+
+| 物编名称 | 用途 | 关键设置 |
+|----------|------|---------|
+| `buff_sus_yellow` | 轻微可疑(30+) | 持续时间=-1, 头顶黄色特效 |
+| `buff_sus_orange` | 明显可疑(60+) | 持续时间=-1, 头顶橙色特效 |
+| `buff_sus_red` | 高度可疑(80+) | 持续时间=-1, 头顶红色标记 |
+| `buff_shield` | 护甲片护盾 | 持续30秒, 抵挡1次刺杀 |
+| `buff_silencer` | 消声器效果 | 持续30秒, 击杀不触发恐慌 |
+| `buff_poison` | 中毒效果 | 持续3秒, 心跳1秒, 每次17伤害 |
+| `buff_eagle_mark` | 鹰眼标记 | 持续3秒, 头顶标记特效 |
+| `buff_trap_root` | 陷阱定身 | 持续2秒 |
+| `buff_tracked` | 追踪标记 | 持续20秒 |
+| `buff_footprint` | 脚印标记 | 持续5秒, 心跳0.5秒 |
+
+### 3.3 技能 (Ability)
+
+| 物编名称 | 对应职业 | 冷却 | 施法类型 |
+|----------|---------|------|---------|
+| `abi_shadow_dash` | 影刃-暗影突进 | 45秒 | 无目标施法 |
+| `abi_perfect_mimic` | 千面-完美模仿 | 60秒 | 无目标施法 |
+| `abi_insight_eye` | 鹰眼-洞察之眼 | 50秒 | 无目标施法 |
+| `abi_anesthesia_trap` | 医师-麻醉陷阱 | 35秒 | 无目标施法 |
+| `abi_ghost_walk` | 幽灵-幽灵漫步 | 50秒 | 无目标施法 |
+| `abi_blood_track` | 猎犬-血迹追踪 | 40秒 | 对单位施法 |
+
+### 3.4 物品 (Item)
+
+| 物编名称 | 物品名 | 类型 |
+|----------|--------|------|
+| `item_poison_needle` | 毒针 | 主动使用, 1次 |
+| `item_throwing_knife` | 飞刀 | 主动使用, 1次 |
+| `item_armor_plate` | 护甲片 | 主动使用, 1次 |
+| `item_smoke_bomb` | 烟雾弹 | 主动使用, 1次 |
+| `item_disguise_mask` | 易容面具 | 主动使用, 1次 |
+| `item_tracker_powder` | 追踪粉 | 主动使用, 1次 |
+| `item_silencer` | 消声器 | 主动使用, 1次 |
+| `item_jammer` | 干扰装置 | 主动使用, 1次 |
+
+### 3.5 投射物 & 特效
+
+| 物编名称 | 用途 |
+|----------|------|
+| `proj_throwing_knife` | 飞刀投射物 |
+| `sfx_smoke_bomb` | 烟雾弹粒子特效 |
+| `sfx_footprint` | 脚印粒子特效 |
+
+### 3.6 NPC 模型
+
+需要准备 **至少8~15个** 不同外观的NPC模型(男女老少等),填入 `const.lua` 的 `NPC_MODEL_POOL`。玩家初始外观从中随机选取。
+
+---
+
+## 四、你需要在 Y3 编辑器地图中配置的区域和路径
+
+### 4.1 区域 (Area) — 需添加标签
+
+| 标签名 | 形状 | 数量建议 | 用途 |
+|--------|------|---------|------|
+| `player_spawn` | 圆形 | 8个 | 玩家出生点 |
+| `npc_spawn` | 圆形 | 10~15个 | NPC出生区域 |
+| `hide_spot` | 圆形(R=2) | 10~20个 | 藏尸点,需设KV `capacity`(整数) |
+| `item_spawn` | 圆形(R=1) | 15~20个 | 物品刷新点 |
+| `interact_bench` | 圆形(R=1.5) | 5~8个 | 长椅互动点 |
+| `interact_board` | 圆形(R=1.5) | 3~5个 | 告示栏互动点 |
+| `interact_well` | 圆形(R=1.5) | 2~4个 | 水井互动点 |
+| `interact_vendor` | 圆形(R=2) | 3~5个 | 摊位互动点 |
+| `light_dark` | 圆形 | 若干 | 暗区(减怀疑值加成) |
+| `checkpoint` | 圆形(R=3) | 3~5个 | VIP模式检查点,需设KV `order`(整数) |
+| `exit_point` | 圆形(R=3) | 1~2个 | VIP撤离点 |
+| `fake_vip_spawn` | 圆形 | 2~3个 | 假VIP出生点 |
+
+### 4.2 路径 (Road)
+
+| 标签名 | 数量建议 | 用途 |
+|--------|---------|------|
+| `road_main_loop` | 2~3条 | 主街道环线,分配给平民/巡逻NPC |
+| `road_patrol` | 3~5条 | 巡逻路线 |
+| `road_alley` | 2~4条 | 支线小巷 |
+| `road_square` | 1~2条 | 广场路线 |
+
+---
+
+## 五、代码层面仍需完成的工作
+
+### 5.1 高优先级
+
+| 序号 | 任务 | 文件 | 说明 |
+|------|------|------|------|
+| 1 | **填入物编Key** | `config/const.lua` | 在编辑器中创建好物编对象后,将实际Key值替换占位的 `or 0` |
+| 2 | **填入NPC模型池** | `config/const.lua` → `NPC_MODEL_POOL` | 至少8~15个模型Key |
+| 3 | **确认状态枚举名** | `config/const.lua` → `STATE_*` | 确认 `clicli.const.UnitEnumState` 中 `无敌`/`定身`/`隐身` 的实际枚举名 |
+| 4 | **物品使用逻辑** | 新建或扩展 | 8种物品的主动使用效果(毒针、飞刀、烟雾弹等),需监听物品技能施法事件 |
+
+### 5.2 中优先级
+
+| 序号 | 任务 | 文件 | 说明 |
+|------|------|------|------|
+| 5 | **HUD UI实现** | `ui/hud.lua` | 用 LocalUILogic 绑定UI元件:怀疑值条、物品栏、倒计时 |
+| 6 | **通知UI实现** | `ui/notification.lua` | 用 LocalUILogic 实现屏幕通知、击杀提示 |
+| 7 | **结算面板实现** | `ui/scoreboard.lua` | 用 LocalUILogic 实现排行榜和结算界面 |
+| 8 | **镜头设置** | 新建 `systems/camera.lua` 或在 `main.lua` 中 | 设置第三人称跟随镜头 / 观战模式镜头切换 |
+| 9 | **键盘映射完善** | `main.lua` | 确认实际使用的按键事件名,当前按键绑定方式可能需要根据引擎API调整 |
+
+### 5.3 低优先级(后续打磨)
+
+| 序号 | 任务 | 说明 |
+|------|------|------|
+| 10 | 音效系统 | 环境音、刺杀音效、心跳声(怀疑值高时) |
+| 11 | 视野阻挡 | 建筑/墙壁视野阻挡设置 |
+| 12 | 天气/昼夜 | 地图氛围(月夜/黄昏/雨天) |
+| 13 | 数值调优 | 根据测试反馈调整 balance.lua |
+| 14 | 多地图支持 | 月夜集市/黄昏庄园/雨中教堂 |
+
+---
+
+## 六、系统依赖关系图
+
+```
+main.lua (入口 + 事件注册)
+  │
+  ├─ game_manager (局状态机)
+  │    ├─ mode_manager (模式规则)
+  │    │    └─ player_manager (玩家生死)
+  │    │         ├─ suspicion (怀疑值)
+  │    │         ├─ disguise (伪装)
+  │    │         ├─ assassination (刺杀)
+  │    │         └─ profession/* (职业技能)
+  │    ├─ npc_manager (NPC管理)
+  │    │    └─ npc_behavior (行为AI)
+  │    ├─ corpse (尸体管理)
+  │    ├─ item_spawner (物品)
+  │    ├─ circle (缩圈)
+  │    └─ timer_manager (计时)
+  │
+  └─ ui/* (HUD/通知/结算 — 纯本地显示)
+```
+
+---
+
+## 七、快速开始步骤
+
+1. **在Y3编辑器中创建物编对象**(第三节列出的所有单位/Buff/技能/物品/投射物/特效)
+2. **获取物编Key值**,填入 `config/const.lua`
+3. **在地图中布置区域**(第四节列出的所有标签区域)
+4. **在地图中绘制NPC路径**(Road),添加对应标签
+5. **准备NPC模型**,填入 `NPC_MODEL_POOL`
+6. **在编辑器中运行测试**
+7. 根据测试结果逐步完善 UI、音效、数值
diff --git a/editor_table/editormodel/200766.json b/editor_table/editormodel/200766.json
new file mode 100644
index 0000000..05f79f4
--- /dev/null
+++ b/editor_table/editormodel/200766.json
@@ -0,0 +1,512 @@
+{
+    "describe": 1567760912, 
+    "editor_res": false, 
+    "key": 200766, 
+    "map_name": "x1hero", 
+    "model_id": 504028, 
+    "name": -1316229984, 
+    "offical_tags": {
+        "__tuple__": true, 
+        "items": [
+            "code_Realistic", 
+            "code_Hero", 
+            "code_Chinese style", 
+            "code_Male", 
+            "code_Adult", 
+            "code_Strong", 
+            "code_Warrior", 
+            "code_Blade", 
+            "code_Green", 
+            "P3(\u4e09\u56fd\u7cfb\u5217)"
+        ]
+    }, 
+    "preview_icon": "UP1ModelPreview/200766", 
+    "release_delete": {
+        "__tuple__": true, 
+        "items": []
+    }, 
+    "res_group": 97, 
+    "res_identify": "all", 
+    "res_type": "code_Role,code_Hero", 
+    "rigidbody_offset": [
+        0.0, 
+        1.1, 
+        0.0
+    ], 
+    "rigidbody_type": 3, 
+    "select_effect_scale": 1.0, 
+    "size": 1.0, 
+    "socket_info": {
+        "A": {
+            "__tuple__": true, 
+            "items": [
+                "A", 
+                "b_Rweapon", 
+                1.615776, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "B": {
+            "__tuple__": true, 
+            "items": [
+                "B", 
+                "b_Rweapon", 
+                1.103913, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "Base": {
+            "__tuple__": true, 
+            "items": [
+                "Base", 
+                "b_Root", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "Body": {
+            "__tuple__": true, 
+            "items": [
+                "Body", 
+                "b_Spine", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "C": {
+            "__tuple__": true, 
+            "items": [
+                "C", 
+                "b_Rweapon", 
+                0.552545, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "HeadM": {
+            "__tuple__": true, 
+            "items": [
+                "HeadM", 
+                "b_Head", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "LEFT_SHOULDER": {
+            "__tuple__": true, 
+            "items": [
+                "LEFT_SHOULDER", 
+                "b_Spine2", 
+                0.279607, 
+                0.136735, 
+                0.019945, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "Left_Wing": {
+            "__tuple__": true, 
+            "items": [
+                "Left_Wing", 
+                "b_Spine2", 
+                0.169869, 
+                0.094825, 
+                0.160275, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "RIGHT_SHOULDER": {
+            "__tuple__": true, 
+            "items": [
+                "RIGHT_SHOULDER", 
+                "b_Spine2", 
+                0.280126, 
+                -0.136255, 
+                0.02675, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "Right_Wing": {
+            "__tuple__": true, 
+            "items": [
+                "Right_Wing", 
+                "b_Spine2", 
+                0.16668, 
+                -0.11, 
+                0.165125, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "back": {
+            "__tuple__": true, 
+            "items": [
+                "back", 
+                "b_Spine2", 
+                -0.003189, 
+                -0.066152, 
+                0.226593, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "chest": {
+            "__tuple__": true, 
+            "items": [
+                "chest", 
+                "b_Spine2", 
+                -0.030274, 
+                0.0, 
+                -0.112928, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "effect_01": {
+            "__tuple__": true, 
+            "items": [
+                "effect_01", 
+                "b_Rweapon", 
+                1.7, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "effect_02": {
+            "__tuple__": true, 
+            "items": [
+                "effect_02", 
+                "b_Rweapon", 
+                1.7, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "effect_03": {
+            "__tuple__": true, 
+            "items": [
+                "effect_03", 
+                "b_Rweapon", 
+                1.7, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "effect_04": {
+            "__tuple__": true, 
+            "items": [
+                "effect_04", 
+                "b_Rweapon", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "foot1": {
+            "__tuple__": true, 
+            "items": [
+                "foot1", 
+                "b_LeftToe", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "foot2": {
+            "__tuple__": true, 
+            "items": [
+                "foot2", 
+                "b_RightToe", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "hand1": {
+            "__tuple__": true, 
+            "items": [
+                "hand1", 
+                "b_LeftHand", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "hand2": {
+            "__tuple__": true, 
+            "items": [
+                "hand2", 
+                "b_RightHand", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "head": {
+            "__tuple__": true, 
+            "items": [
+                "head", 
+                "b_Root", 
+                0.0, 
+                2.5, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "hit_point": {
+            "__tuple__": true, 
+            "items": [
+                "hit_point", 
+                "b_Pelvis", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "left_hand": {
+            "__tuple__": true, 
+            "items": [
+                "left_hand", 
+                "b_LeftForeArm", 
+                0.05, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "left_hand_effect": {
+            "__tuple__": true, 
+            "items": [
+                "left_hand_effect", 
+                "b_LeftHand", 
+                0.06855, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "left_weapon": {
+            "__tuple__": true, 
+            "items": [
+                "left_weapon", 
+                "b_Lweapon", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "missile": {
+            "__tuple__": true, 
+            "items": [
+                "missile", 
+                "b_RightHand", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "right_hand": {
+            "__tuple__": true, 
+            "items": [
+                "right_hand", 
+                "b_RightForeArm", 
+                0.05, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "right_hand_effect": {
+            "__tuple__": true, 
+            "items": [
+                "right_hand_effect", 
+                "b_RightHand", 
+                0.090959, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "right_weapon": {
+            "__tuple__": true, 
+            "items": [
+                "right_weapon", 
+                "b_Rweapon", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "root": {
+            "__tuple__": true, 
+            "items": [
+                "root", 
+                "b_Root", 
+                0.0, 
+                0.0, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "shine1": {
+            "__tuple__": true, 
+            "items": [
+                "shine1", 
+                "b_RightArm_annex01", 
+                -0.241988, 
+                0.0, 
+                0.081829, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "shine2": {
+            "__tuple__": true, 
+            "items": [
+                "shine2", 
+                "b_LeftForeArm", 
+                0.269, 
+                0.073972, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "shine3": {
+            "__tuple__": true, 
+            "items": [
+                "shine3", 
+                "b_Spine1", 
+                0.141763, 
+                -0.224879, 
+                0.081408, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "sound": {
+            "__tuple__": true, 
+            "items": [
+                "sound", 
+                "b_Head", 
+                0.2, 
+                0.1, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "tail": {
+            "__tuple__": true, 
+            "items": [
+                "tail", 
+                "b_Pelvis", 
+                -0.125075, 
+                0.0125, 
+                0.0, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }, 
+        "unit_info": {
+            "__tuple__": true, 
+            "items": [
+                "unit_info", 
+                "b_Root", 
+                0.002311, 
+                2.25, 
+                0.074334, 
+                -0.0, 
+                0.0, 
+                0.0
+            ]
+        }
+    }, 
+    "source": "code_Source_Import", 
+    "uid": "editor_model_200766", 
+    "unit_prefab": 0
+}
\ No newline at end of file
diff --git a/lock/header_43523871-a912-481d-bb2e-29f7ea3c6f51.lock b/lock/header_43523871-a912-481d-bb2e-29f7ea3c6f51.lock
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/lock/header_43523871-a912-481d-bb2e-29f7ea3c6f51.lock
diff --git a/maps/EntryMap/165777025393032044607574753601084850552.gmp b/maps/EntryMap/165777025393032044607574753601084850552.gmp
index 436bd17..2692dd5 100644
--- a/maps/EntryMap/165777025393032044607574753601084850552.gmp
+++ b/maps/EntryMap/165777025393032044607574753601084850552.gmp
Binary files differ
diff --git a/maps/EntryMap/script/log/helper_port.lua b/maps/EntryMap/script/log/helper_port.lua
index e179d00..7dbf760 100644
--- a/maps/EntryMap/script/log/helper_port.lua
+++ b/maps/EntryMap/script/log/helper_port.lua
@@ -1 +1 @@
-return 11096
\ No newline at end of file
+return 65413
\ No newline at end of file
diff --git a/maps/EntryMap/unit/134274912.json b/maps/EntryMap/unit/134274912.json
index 8f2dc6a..f0cea7f 100644
--- a/maps/EntryMap/unit/134274912.json
+++ b/maps/EntryMap/unit/134274912.json
@@ -446,13 +446,6 @@
     }, 
     "trigger_group_info": [
         {
-            "__tuple__": true, 
-            "items": [
-                717529090, 
-                "\u8f6e\u64ad"
-            ]
-        }, 
-        {
             "_trigger_group_": true, 
             "group": [
                 {
@@ -465,6 +458,13 @@
             ], 
             "key": 134274912, 
             "name": "134274912"
+        }, 
+        {
+            "__tuple__": true, 
+            "items": [
+                717529090, 
+                "\u8f6e\u64ad"
+            ]
         }
     ], 
     "trigger_version": "1.2", 

--
Gitblit v1.10.0