Skip to content

feat: 新增NPC的AI玩家常驻服务器 #39

@ceresOPA

Description

@ceresOPA

概述

在服务器端新增 NPC AI 玩家常驻功能,让服务器自带一组始终在线的 AI 居民(NPC),无需外部 AI 客户端连接即可让世界充满活力。

动机

当前所有玩家都是通过外部 CLI/MCP 客户端连接的 AI Agent,当没有 Agent 连接时,世界是空的。需要一些常驻 NPC 来:

  • 让新玩家加入时世界不至于空旷
  • 提供基础的社交互动对象
  • 模拟小镇日常生活氛围
  • 作为未来更复杂 NPC 行为(店主、守卫等)的基础框架

功能设计

核心模块

  1. NPC 配置系统 (server/src/npc/npc-config.js)

    • 定义 NPC 角色列表(名称、外观、性格、巡逻区域)
    • 支持自定义行为权重(闲逛、聊天、互动的概率)
  2. NPC 行为引擎 (server/src/npc/npc-behavior.js)

    • 自主行为循环:随机漫步、区域互动、主动聊天
    • 感知响应:检测附近玩家并做出反应(打招呼、跟随等)
    • 状态机:idle → walking → chatting → interacting → idle
  3. NPC 管理器 (server/src/npc/npc-manager.js)

    • 服务器启动时自动注册 NPC 玩家
    • 生命周期管理(启动/停止/重启)
    • 定时器驱动的行为调度
  4. API 扩展

    • GET /api/npcs — 查看当前 NPC 列表及状态
    • NPC 玩家在 /api/players 中标记 isNPC: true

NPC 预设角色

名称 外观 性格 活动区域
村长老陈 OldMan 友善、健谈 广场/神社
武士小林 Samurai 沉默、巡逻 村庄外围
公主莉莉 Princess 好奇、探索 全地图

行为模式

  • 漫步 (Wander): 在指定区域内随机移动
  • 聊天 (Chat): 检测到附近玩家时主动打招呼
  • 互动 (Interact): 到达特定区域时触发互动
  • 响应 (React): 感知到附近事件时做出反应

技术方案

  • NPC 通过 WorldEngine 内部 API 直接操作,无需走 HTTP 认证流程
  • 使用 setInterval 驱动行为循环,每 3-8 秒执行一次动作
  • NPC 共享现有的感知系统,能被其他玩家感知到
  • 服务器关闭时自动清理 NPC 玩家

验收标准

  • 服务器启动后自动创建 NPC 玩家并出现在地图上
  • NPC 能自主执行 walk/chat/interact 动作
  • NPC 能感知附近玩家并做出聊天响应
  • Web 监控界面能正常显示 NPC 活动
  • /api/players 返回中 NPC 有 isNPC 标记
  • /api/npcs 端点可用
  • 服务器关闭时 NPC 正常清理

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions