领域系统详解

欢迎来到修仙世界。为了让游戏体验丰富且自洽,整个系统由多个子系统协同运作:从角色的修炼境界,到可学习的技能树,再到与各方势力的声望关系、成就与任务、世界事件、物品与合成系统,以及营造氛围的音效和帮助探索的小地图。

下面将按照逻辑顺序,逐一解释每个模块的设计原理、数据结构和核心流程。文中会穿插 Mermaid 图示,帮助理解模块之间的关系和数据流向。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


1. 修炼境界系统

境界是角色成长的主线。从凡人开始,逐步突破至渡劫期,每一次晋升都带来属性提升和视觉反馈。

1.1 境界层级

总共有 8 个境界,每个境界包含 5 个小级(1~5 重),对应玩家等级 1~40 级。

突破

突破

突破

突破

突破

突破

突破

凡人 1-5

练气期 6-10

筑基期 11-15

金丹期 16-20

元婴期 21-25

化神期 26-30

大乘期 31-35

渡劫期 36-40

1.2 数据结构 (CultivationRealm)

每个境界由以下字段定义:

字段类型说明
namestring显示名称,如“金丹期”
startLevelnumber起始等级(包含)
endLevelnumber结束等级(包含)
descriptionstring文本描述
colorstringUI 文字颜色类
iconstring表情符号图标
healthPerLevelnumber每升一级增加的生命值
manaPerLevelnumber每升一级增加的法力值
expMultipliernumber该境界内的升级经验倍率

1.3 关键函数逻辑

  • getRealmForLevel(level)
    遍历所有境界,根据 startLevel / endLevel 返回当前等级所在的境界。

  • getRealmLevel(level)
    计算在当前境界内的第几小级:level - startLevel + 1(范围 1~5)。

  • getExpForLevelUp(level)
    所需经验 = (50 + level * 50) * realm.expMultiplier。
    解释:基础经验随等级线性增长,再乘以境界倍率(高境界升级更慢)。

  • isRealmBreakthrough(oldLevel, newLevel)
    如果新旧等级跨越了任意 realm.startLevel,则触发“突破”。

  • getBreakthroughRealm(newLevel)
    当 newLevel 正好等于某个境界的 startLevel 时,返回该境界对象(用于突破播报)。

1.4 玩家体验实现

  • UI 展示:状态面板(StatusPanel)中绘制两条进度条:
    • 当前境界内的小级进度(如“金丹期 3/5”)
    • 总修仙进度(相对于 40 级)
  • 突破通知:升级时弹出 Toast 和浮动通知,例如:
    “境界突破!🔮 金丹大成 · Lv.16”
  • 快捷跳过:在突破动画或提示中,按 Esc 可跳过(通过 wheel 提示和 tooltip 实现)。

2. 技能树系统

技能树让玩家在修炼之外,选择修行方向:基础、功法、法术或神通。

2.1 数据定义

技能列表 SKILL_TREE 存储在 game-types.tsx 中,每个技能节点包含:

interface SkillNode {
  id: string;
  name: string;
  desc: string;
  level: number;          // 学习所需最低等级
  prereqs: string[];      // 前置技能 id 列表
  category: '基础' | '功法' | '法术' | '神通';
}

2.2 解锁与学习流程

❌ 未满足

✅ 已满足

🎮 玩家点击「学习技能」

🔍 检查前置技能

🚫 禁用按钮
💡 显示提示

📡 发送API动作
学习 技能名

🧠 引擎LLM返回
skillsGained

⚙️ 前端更新
playerState.skills

✨ 刷新UI

  • 前端预估可用性:
    const canLearn = prereqs.every(s => playerState.skills.includes(s))
  • 实际学习:点击“Learn”按钮,调用 handleLearnSkill,向引擎发送 "学习 技能名" 动作。引擎在响应中通过 skillsGained 数组确认习得。
  • 分类检索:根据 SKILL_CATEGORIES 提供选项卡筛选,前端过滤 SKILL_TREE.filter(s => s.category === cat)。

2.3 UI 入口

技能树界面内嵌于状态面板(StatusPanel),通过 GameDialogs 组件或面板内联动触发。


3. 阵营声望系统

玩家与六方势力的关系动态变化,影响剧情走向和交互选项。

3.1 六方阵营

阵营图标说明
天庭☁️仙界正统
佛门🙏清净修行
妖族👹妖修势力
人族👤凡人联盟
龙族🐉古老龙裔
幽冥💀阴司鬼界

声望值范围 -100 ~ +100,通过 Math.max/min 钳制。

3.2 声望变动来源

行动响应

引擎返回 npcInteractions

relationshipChange + faction

更新对应阵营声望

纯文本 narrative

前端 detectFactionChanges

正则提取声望变化补丁

存储 localStorage.xiyouFactions

  • 主要来源:引擎在 npcInteractions 中直接返回 { faction, relationshipChange }。
  • 文本兜底:前端 detectFactionChanges 分析叙述文本,尝试提取“天庭好感+5”等模式,作为补充。

3.3 持久化

每次声望变动后立即写入 localStorage.xiyouFactions,游戏加载时读取,确保跨会话保留。


4. 成就系统

成就是里程碑奖励机制,用于激励玩家探索和成长。

4.1 成就示例

成就名称触发条件
初踏异世游戏开始
初遇众生第一次与NPC交互
初试锋芒等级达到 2 级
初获宝物获得第一件物品
等级 5达到 5 级
练气突破达到练气期
探索 3 个地点发现 3 个不同地图

4.2 检测机制

ACHIEVEMENTS 数组中的每个成就包含一个 condition 函数。在每次行动后,调用 checkAchievements:

  • 输入:当前消息历史、状态变化列表 (stateChanges)
  • 过程:遍历成就,执行 condition 判断是否满足且未被领取
  • 输出:解锁新成就,触发通知

满足且未领取

不满足

每次行动结束

调用 checkAchievements

遍历所有成就

评估 condition 函数

记录已解锁

显示成就弹窗

更新玩家成就列表


5. 任务系统

任务系统当前为只读展示,由服务端自动初始化并维护,前端不主动创建或修改任务。

5.1 数据结构

任务对象包含:

  • name:任务名称
  • type:任务类型(主线/支线/日常)
  • status:状态(进行中/已完成)
  • description:详细描述
  • target:目标(如“击败妖王×1”)
  • reward:奖励描述

5.2 客户端行为

  • 在 sendAction 后,从更新的 gameState 中读取 activeQuests。
  • 仅在 UI 的“任务日志”中展示当前任务列表。
  • 无任何 API 用于发送“完成任务”或“领取奖励”——任务进度由引擎内部逻辑自动推进。

6. 世界事件

世界事件是影响整个游戏世界的临时状态,例如“灵气潮汐”、“魔道入侵”。

6.1 事件来源

  • LLM 在叙事响应中描述世界事件的发生或结束。
  • 前端没有显式的“创建世界事件”API,仅通过解析响应中的 activeWorldEvents 字段更新。

6.2 UI 展示

  • 顶部横幅(TopBar):滚动文字显示当前活跃事件,例如“🌊 东海龙宫举办盛宴,持续3天”。
  • 点击横幅:展开详情面板,显示事件描述、剩余时间、影响等。

引擎响应

提取 activeWorldEvents

更新 gameState

TopBar 渲染滚动 Banner

用户点击 → 详情弹窗


7. 物品系统

玩家背包中的物品具有类型、稀有度、属性和装备状态。

7.1 物品类型与稀有度

类型说明稀有度
weapon武器common, uncommon, rare, epic, legendary
armor防具同上
consumable消耗品(丹药等)同上
material材料同上
quest任务物品同上
misc杂项同上

前端通过 getItemTypeIcon(item.type) 映射对应图标(🔫、🛡️、💊等)。

7.2 效果与装备

  • effects 字段存储 JSON 字符串,例如 { defense: 1 } 或 { health: 15 }。
  • 使用消耗品时,应用效果:生命+15、攻击力+N、防御力+B。
  • equipped 为 true 时,该物品被视为已装备,并在状态面板中预览属性加成(如“防御力 +5”)。
interface InventoryItem {
  id: string;
  name: string;
  type: ItemType;
  rarity: Rarity;
  effects: string;      // JSON
  equipped: boolean;
}

8. 音效系统

音效系统使用 Web Audio API 生成和播放环境音效及 UI 音效,不需要外部音频文件。

8.1 环境音效类型

类型场景
rain雨天
wind山谷、高空
night夜晚
combat战斗中
calm平静探索

8.2 技术实现

  • initAudioContext:初始化 AudioContext,创建白噪声发生器、LFO 调制器和滤波器节点。
  • playAmbientSound(type):根据类型配置 LFO 频率、滤波器截止频率,生成连续氛围声。
  • playUISound:播放短促的 UI 反馈音(点击、升级等)。
  • 音效开关状态存入 localStorage.xiyouSoundEnabled,通过 loadSoundEnabled 读取控制。

开启

关闭

游戏启动

读取 localStorage 音效开关

initAudioContext

创建噪声源 + LFO + 滤波器

根据环境类型设置参数

playAmbientSound

不初始化 AudioContext


9. 小地图系统

小地图记录玩家探索过的地点和路径,帮助导航。

9.1 数据结构

interface MapLocation {
  name: string;     // 地点名称
  x: number;        // 网格横坐标
  y: number;        // 网格纵坐标
  explored: boolean;
}

interface MapConnection {
  from: string;     // 起点地点名
  to: string;       // 终点地点名
  direction: string; // 方向(东/南/西/北)
}

9.2 自动发现机制

前端没有专门的地图写回 API,而是通过分析叙述文本中的移动关键词来更新:

  • 正则匹配 “前往东市”、“向南走” 等模式。
  • 推断新地点和连接关系,存入 localStorage(键名 xiyouMapLocations / xiyouMapConnections)。
  • 每次行动后重新构建地图视图。

narrative 文本

正则匹配 “方向+前往”

推断新地点/连接

更新 localStorage 地图数据

刷新 Mini-map UI

9.3 可视化

小地图以网格形式展示已探索的节点和路径,未探索的地点显示为问号。


10. 炼丹/炼器/烹饪系统(合成系统)

允许玩家使用材料合成物品,过程模拟了成功率和动画。

10.1 配方定义

CRAFTING_RECIPES 数组定义在 game-types.ts,每个配方包含:

interface CraftingRecipe {
  id: string;
  name: string;
  description: string;
  icon: string;
  ingredients: { itemId: string; name: string; quantity: number }[];
  result: string;               // 产出物品ID
  requiredSkill: string;        // 需要的技能名
  difficulty: number;           // 难度系数
  successRate: number;          // 基础成功率 (0~1)
  category: string;             // 分类(丹药/法器/食物)
}

10.2 合成流程

材料不足

材料充足

打开合成界面

选择分类

显示配方列表

点击配方

检查背包材料

按钮禁用,显示缺失

点击“合成”

调用通用 action API

播放 craftingAnimation 进度条

引擎返回成功/失败结果

显示 craftingResult 弹窗

更新背包

  • 材料筛选:前端根据当前 inventory 计算每个配方是否可用。
  • 动画与结果:craftingAnimation 控制进度条动画,craftingResult 展示最终成功或失败信息。

总结

以上十个子系统共同构建了一个沉浸式的修仙世界:

系统核心作用
修炼境界角色等级与属性成长主线
技能树玩家主动选择的修行方向
阵营声望动态势力关系,影响叙事
成就系统里程碑奖励与引导
任务系统被动展示,引擎驱动
世界事件全局临时状态,增加变数
物品系统装备与消耗品管理
音效系统氛围营造(纯代码生成)
小地图探索记录与导航
合成系统材料消耗与新物品产出

每个模块都可以独立理解,又通过玩家行动反馈相互交织。希望这份整理能帮助你快速掌握整体设计,并在后续开发或调优中得心应手。

Logo

小龙虾开发者社区是 CSDN 旗下专注 OpenClaw 生态的官方阵地,聚焦技能开发、插件实践与部署教程,为开发者提供可直接落地的方案、工具与交流平台,助力高效构建与落地 AI 应用

更多推荐