- MiniMap: 添加缩放/平移功能,优化节点显示样式 - 新增洞穴相关敌人和Boss(洞穴蝙蝠、洞穴领主) - 新增义体类物品(钢制义臂、光学义眼、真皮护甲) - 扩展武器技能系统(剑、斧、钝器、弓箭精通) - 更新商店配置和义体相关功能 - 完善玩家/游戏Store状态管理 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
文字冒险游戏 - 内容开发指南
本项目是一个基于 UniApp + Vue 3 的文字冒险游戏,采用配置驱动的架构。所有游戏内容(物品、NPC、技能、配方、事件等)都通过配置文件定义,无需修改核心代码即可扩展游戏内容。
目录结构
config/
├── constants.js # 游戏常量(品质等级、时间等)
├── items.js # 物品配置
├── skills.js # 技能配置
├── npcs.js # NPC配置
├── recipes.js # 制造配方配置
├── enemies.js # 敌人配置
├── events.js # 事件/剧情配置
├── locations.js # 地点配置
└── shop.js # 商店配置
1. 创建物品
物品定义在 config/items.js 中的 ITEM_CONFIG 对象。
基本结构
your_item_id: {
id: 'your_item_id', // 唯一ID(建议使用下划线命名)
name: '物品名称', // 显示名称
type: 'weapon', // 类型:weapon/armor/shield/accessory/consumable/book/material
subtype: 'one_handed', // 子类型(可选)
icon: '🗡️', // 图标(emoji)
baseValue: 100, // 基础价值(铜币)
description: '物品描述', // 描述文本
stackable: true, // 是否可堆叠(消耗品/素材)
maxStack: 99 // 最大堆叠数
}
武器
sword: {
id: 'sword',
name: '铁剑',
type: 'weapon',
subtype: 'sword', // one_handed/two_handed/sword/axe/blunt/ranged
icon: '⚔️',
baseValue: 500,
baseDamage: 25, // 基础攻击力
attackSpeed: 1.2, // 攻击速度倍率
quality: 100, // 基础品质(影响属性计算)
unlockSkill: 'sword_mastery', // 装备解锁的技能
stats: { // 额外属性加成
critRate: 5 // 暴击率+5%
},
description: '一把精工打造的铁剑。'
}
防具
armor: {
id: 'leather_armor',
name: '皮甲',
type: 'armor',
subtype: 'light', // light/heavy
icon: '🦺',
baseValue: 150,
baseDefense: 8, // 基础防御力
quality: 100,
stats: {
evasion: 5 // 闪避+5%
},
description: '用兽皮制成的轻甲。'
}
消耗品
potion: {
id: 'health_potion',
name: '治疗药水',
type: 'consumable',
subtype: 'medicine', // food/drink/medicine
icon: '🧪',
baseValue: 150,
effect: { // 使用效果
health: 100, // 恢复生命值
stamina: 20, // 恢复耐力
sanity: 10 // 恢复精神
},
description: '快速恢复生命值。',
stackable: true,
maxStack: 20
}
书籍
book: {
id: 'skill_book',
name: '战斗指南',
type: 'book',
icon: '📖',
baseValue: 200,
readingTime: 60, // 阅读时间(秒)
expReward: { // 阅读获得的技能经验
combat: 100, // 主经验
sword_mastery: 50 // 特定技能经验
},
completionBonus: { // 完成奖励(可选)
exp: 200 // 额外主经验
},
description: '记载着战斗技巧的书籍。'
}
2. 创建技能
技能定义在 config/skills.js 中的 SKILL_CONFIG 对象。
基本结构
your_skill: {
id: 'your_skill',
name: '技能名称',
type: 'combat', // 类型:combat/life/passive
category: 'weapon', // 分类:weapon/crafting/reading等
icon: '⚔️',
maxLevel: 20, // 最大等级
expPerLevel: (level) => level * 100, // 每级所需经验公式
milestones: { // 里程碑(等级解锁效果)
5: {
desc: '攻击力+10%',
effect: { attackBonus: 10 }
},
10: {
desc: '解锁新技能',
effect: { unlockSkill: 'advanced_skill' }
}
},
unlockCondition: { // 解锁条件(可选)
type: 'item',
itemId: 'starter_sword'
}
}
战斗技能
sword_mastery: {
id: 'sword_mastery',
name: '剑术精通',
type: 'combat',
category: 'weapon',
icon: '⚔️',
maxLevel: 20,
expPerLevel: (level) => level * 100,
milestones: {
5: { desc: '暴击率+5%', effect: { critRate: 5 } },
10: { desc: '攻击力+15%', effect: { attackBonus: 15 } },
15: { desc: '暴击伤害+0.5', effect: { critMult: 0.5 } },
20: { desc: '剑术大师', effect: { mastery: true } }
},
unlockCondition: null // 初始解锁/通过装备武器解锁
}
生活技能
crafting: {
id: 'crafting',
name: '制造',
type: 'life',
category: 'crafting',
icon: '🔨',
maxLevel: 20,
expPerLevel: (level) => level * 80,
milestones: {
1: { desc: '解锁基础制造', effect: {} },
5: { desc: '制造成功率+5%', effect: { craftingSuccessRate: 5 } },
10: { desc: '制造时间-25%', effect: { craftingSpeed: 0.25 } }
},
unlockCondition: null
}
被动技能
night_vision: {
id: 'night_vision',
name: '夜视',
type: 'passive',
category: 'environment',
icon: '👁️',
maxLevel: 10,
expPerLevel: (level) => level * 30,
milestones: {
5: { desc: '黑暗惩罚-10%', effect: { darkPenaltyReduce: 10 } },
10: { desc: '黑暗惩罚-25%', effect: { darkPenaltyReduce: 25 } }
},
unlockCondition: {
location: 'basement' // 进入该地点自动解锁
}
}
3. 创建NPC
NPC定义在 config/npcs.js 中的 NPC_CONFIG 对象。
基本结构
your_npc: {
id: 'your_npc',
name: 'NPC名称',
location: 'camp', // 所在位置(location ID)
dialogue: {
first: { // 首次对话
text: '对话文本...',
choices: [
{ text: '选项1', next: 'node1' },
{ text: '选项2', next: null, action: 'action_name' }
]
},
node1: { // 后续对话节点
text: '更多对话...',
choices: [
{ text: '再见', next: null }
]
}
}
}
带动作的NPC
merchant: {
id: 'merchant',
name: '商人',
location: 'market',
dialogue: {
first: {
text: '欢迎光临!',
choices: [
{ text: '查看商品', next: null, action: 'open_shop' },
{ text: '这是哪里?', next: 'explain' }
]
},
explain: {
text: '这里是市场...',
choices: [
{ text: '查看商品', next: null, action: 'open_shop' },
{ text: '离开', next: null }
]
}
}
}
可用动作
| 动作 | 说明 |
|---|---|
open_shop |
打开商店 |
give_item |
给予物品(需指定 actionData) |
heal |
恢复生命值 |
unlock_skill |
解锁技能 |
teleport |
传送到指定位置 |
4. 创建配方
配方定义在 config/recipes.js 中的 RECIPE_CONFIG 对象。
基本结构
your_recipe: {
id: 'your_recipe',
type: RECIPE_TYPES.WEAPON, // 类型:WEAPON/ARMOR/SHIELD/CONSUMABLE/SPECIAL
resultItem: 'result_item_id', // 产物物品ID
resultCount: 1, // 产物数量
materials: [ // 材料需求
{ itemId: 'material_1', count: 5 },
{ itemId: 'material_2', count: 2 }
],
requiredSkill: 'crafting', // 所需技能
requiredSkillLevel: 3, // 所需技能等级
baseTime: 60, // 基础制造时间(秒)
baseSuccessRate: 0.85, // 基础成功率(0-1)
unlockCondition: { // 解锁条件(可选)
type: 'skill', // skill/quest/item
skillId: 'crafting',
level: 5
}
}
配方示例
iron_sword: {
id: 'iron_sword',
type: RECIPE_TYPES.WEAPON,
resultItem: 'iron_sword',
resultCount: 1,
materials: [
{ itemId: 'iron_ore', count: 5 },
{ itemId: 'leather', count: 2 }
],
requiredSkill: 'sword_mastery',
requiredSkillLevel: 5,
baseTime: 180,
baseSuccessRate: 0.75,
unlockCondition: {
type: 'skill',
skillId: 'crafting',
level: 3
}
}
5. 创建敌人
敌人定义在 config/enemies.js 中的 ENEMY_CONFIG 对象。
基本结构
your_enemy: {
id: 'your_enemy',
name: '敌人名称',
icon: '👾',
level: 5, // 等级
hp: 100, // 生命值
attack: 15, // 攻击力
defense: 5, // 防御力
speed: 10, // 速度(影响行动顺序)
expReward: 50, // 经验奖励
// 可选属性
critRate: 5, // 暴击率
fleeRate: 20, // 逃跑成功率
skills: ['skill_id'], // 拥有的技能
drops: [ // 掉落列表
{ itemId: 'drop_item', chance: 0.3, count: { min: 1, max: 2 } }
]
}
6. 创建事件/剧情
事件定义在 config/events.js 中的 EVENT_CONFIG 对象。
基本结构
your_event: {
id: 'your_event',
type: 'story', // 类型:story/tips/unlock/dialogue/reward/combat
title: '事件标题',
text: '事件内容...',
textTemplate: '支持{variable}变量替换', // 或使用模板
choices: [
{ text: '选项', next: 'next_event_id' },
{ text: '带动作的选项', next: null, action: 'action_name', actionData: {} }
]
}
事件类型
| 类型 | 说明 |
|---|---|
story |
剧情事件 |
tips |
提示信息 |
unlock |
解锁内容提示 |
dialogue |
NPC对话 |
reward |
奖励提示 |
combat |
战斗事件 |
触发条件
在 EVENT_TRIGGERS 中配置触发条件:
export const EVENT_TRIGGERS = {
once: {
your_trigger: {
condition: (playerStore) => {
// 返回 true 时触发事件
return playerStore.level >= 5 && !playerStore.flags.yourEventSeen
},
eventId: 'your_event',
setFlag: 'yourEventSeen' // 触发后设置的标记
}
},
environment: {
your_env_trigger: {
condition: (playerStore, locationId) => {
return locationId === 'dark_cave' && !playerStore.flags.darkCaveFirstEnter
},
eventId: 'dark_warning'
}
}
}
7. 解锁条件
解锁条件可用于技能、配方、地点等。
类型
// 基于等级
unlockCondition: {
type: 'level',
level: 5
}
// 基于技能
unlockCondition: {
type: 'skill',
skillId: 'crafting',
level: 3
}
// 基于物品
unlockCondition: {
type: 'item',
itemId: 'key_item'
}
// 基于位置
unlockCondition: {
type: 'location',
locationId: 'secret_area'
}
// 基于任务标记
unlockCondition: {
type: 'quest',
flag: 'completed_quest_x'
}
8. 品质系统
物品品质定义在 config/constants.js 中的 QUALITY_LEVELS。
QUALITY_LEVELS: {
1: { level: 1, name: '垃圾', color: '#6b7280', range: [0, 49], multiplier: 0.5 },
2: { level: 2, name: '普通', color: '#ffffff', range: [50, 89], multiplier: 1.0 },
3: { level: 3, name: '优秀', color: '#22c55e', range: [90, 129], multiplier: 1.2 },
4: { level: 4, name: '稀有', color: '#3b82f6', range: [130, 159], multiplier: 1.5 },
5: { level: 5, name: '史诗', color: '#a855f7', range: [160, 199], multiplier: 2.0 },
6: { level: 6, name: '传说', color: '#f59e0b', range: [200, 250], multiplier: 3.0 }
}
9. 快速开始示例
添加新武器
// 在 config/items.js 中添加
flame_sword: {
id: 'flame_sword',
name: '烈焰之剑',
type: 'weapon',
subtype: 'sword',
icon: '🔥⚔️',
baseValue: 2000,
baseDamage: 50,
attackSpeed: 1.3,
quality: 150,
unlockSkill: 'sword_mastery',
stats: {
critRate: 10,
fireDamage: 15
},
description: '燃烧着永恒烈焰的魔剑。'
}
添加新技能
// 在 config/skills.js 中添加
fire_mastery: {
id: 'fire_mastery',
name: '火焰精通',
type: 'combat',
category: 'element',
icon: '🔥',
maxLevel: 15,
expPerLevel: (level) => level * 150,
milestones: {
3: { desc: '火焰伤害+20%', effect: { fireDamageBonus: 20 } },
7: { desc: '攻击附带燃烧', effect: { burnEffect: true } },
15: { desc: '火焰免疫', effect: { fireImmunity: true } }
},
unlockCondition: {
type: 'item',
itemId: 'flame_essence'
}
}
10. 注意事项
- ID命名:统一使用下划线命名(snake_case),保持唯一性
- 引用:添加新物品后,记得在配方、商店、敌人掉落等处引用
- 平衡性:注意数值平衡,参考现有物品的属性比例
- 测试:添加内容后建议在游戏中测试效果
- 保存:游戏进度保存在 localStorage,修改配置后可能需要清除缓存测试
Description
Languages
JavaScript
70%
Vue
29.2%
SCSS
0.6%
HTML
0.2%