增加一个固定功能 npc,核心是同时修改 `mir200\envir\npcs.txt` 和 `mir200\envir\npc_def`:前者登记 npc 名称、管理编号、地图、坐标、活动范围和外观编号,后者负责玩家点击后的对话与功能。若要制作出售装备、药品或回购物品的商人,则应改用 `merchant.txt` 配合 `market_def`,不要把两套配置混写。

先备份 `mir200\envir` 目录,再在 `npcs.txt` 末尾新增一行,例如 `新手指引 10 3 330 330 0 1`。这几个字段依次代表 npc 名称、管理编号、地图代码、横坐标、纵坐标、有效范围和外观编号;地图代码必须与目标地图实际代码一致,坐标应放在玩家能够正常站立和点击的位置,外观编号优先使用客户端已有的 npc 图标。管理编号建议避开现有编号,避免后续维护时难以区分。新增固定 npc 时,最容易出错的是地图代码写成地图名称、坐标落在不可行走区域,或者把英文半角空格误写成全角空格。

登记完成后,在 `npc_def` 中建立与名称和地图代码对应的脚本文件,例如 `npc_def\新手指引-3.txt`,文件名必须与 `npcs.txt` 中的 npc 名称和地图代码匹配。最小可用脚本可以写成:`[@main] say 欢迎使用新手指引。\<进入高级区域/@tryenter> [@tryenter] if checklevelex > 50 act goto @allowenter elsesay 当前等级不足,暂时不能进入。\<返回主菜单/@main> [@allowenter] say 条件已满足,可以继续进入下一步。\`。其中 `checklevelex > 50` 表示等级超过 50 级才允许继续,改成普通对话时可删除判断分支;增加任务、传送或奖励时,应继续在对应标签下添加动作,不能把命令直接写进 `if` 和 `act` 之外。
保存两个文件后,在 m2 管理界面执行重新加载 npc;如果当前引擎无法即时刷新,再完整重启服务端。进入目标地图后,先确认 npc 是否出现在设定坐标,再点击 npc 检查对话是否从 `[@main]` 开始,最后分别用等级 50 级和 51 级角色测试两个分支。npc 能显示但不能对话时,优先检查脚本文件名、地图代码和文件路径;点击按钮没有反应时,重点检查跳转标签是否存在,以及 `if`、`act`、`elsesay` 是否属于同一段判断结构。自定义外观还需要同步客户端素材和编号,否则可能出现 npc 隐身、白块或外观错位。
不同用途应选择不同配置方式:固定任务 npc、传送 npc、活动入口优先使用 `npcs.txt` 与 `npc_def`;商店、回收和装备购买功能使用 `merchant.txt` 与 `market_def`;需要等级、物品、任务状态或权限限制时,在对应脚本中加入条件判断。新手测试阶段可先使用已有外观编号和简单对话,确认显示、点击、跳转三步正常后,再逐步加入传送、交易、任务奖励和多级条件,这样更容易定位问题,也能避免一次修改多个系统导致 npc 无法加载。