3 files modified
3 files added
| New file |
| | |
| | | # 框架实现进度与待办 |
| | | |
| | | ## 一、已创建的文件结构(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、音效、数值 |
| New file |
| | |
| | | { |
| | | "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 |
| | | } |
| | |
| | | return 11096 |
| | | return 65413 |
| | |
| | | }, |
| | | "trigger_group_info": [ |
| | | { |
| | | "__tuple__": true, |
| | | "items": [ |
| | | 717529090, |
| | | "\u8f6e\u64ad" |
| | | ] |
| | | }, |
| | | { |
| | | "_trigger_group_": true, |
| | | "group": [ |
| | | { |
| | |
| | | ], |
| | | "key": 134274912, |
| | | "name": "134274912" |
| | | }, |
| | | { |
| | | "__tuple__": true, |
| | | "items": [ |
| | | 717529090, |
| | | "\u8f6e\u64ad" |
| | | ] |
| | | } |
| | | ], |
| | | "trigger_version": "1.2", |