# 框架实现进度与待办 ## 一、已创建的文件结构(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、音效、数值