|
|
5 luni în urmă | |
|---|---|---|
| .. | ||
| AdminControllers | 6 luni în urmă | |
| Casts | 6 luni în urmă | |
| Commands | 5 luni în urmă | |
| Console | 5 luni în urmă | |
| Databases | 5 luni în urmă | |
| Docs | 6 luni în urmă | |
| Dtos | 5 luni în urmă | |
| Enums | 6 luni în urmă | |
| Events | 5 luni în urmă | |
| Factories | 5 luni în urmă | |
| Jobs | 5 luni în urmă | |
| Listeners | 7 luni în urmă | |
| Logic | 5 luni în urmă | |
| Models | 5 luni în urmă | |
| Providers | 5 luni în urmă | |
| Repositorys | 6 luni în urmă | |
| Services | 5 luni în urmă | |
| Tests | 5 luni în urmă | |
| Validations | 7 luni în urmă | |
| Validators | 6 luni în urmă | |
| README.md | 6 luni în urmă | |
| ask.md | 7 luni în urmă | |
宠物模块,宠物属性、技能、偷菜功能
enum PetStatus: int {
case NONE = 0; // 未知
case NORMAL = 1; // 正常
case DEAD = 3; // 死亡
case FEEDING = 4; // 喂养中
case TRAINING = 5; // 训练中
case RESTING = 6; // 休息中
case TRAVELING = 7; // 外出中
case STEALING = 8; // 偷菜中
}
| 技能名称 | 消耗体力 | 冷却时间 | 开启条件 | 效果描述 |
|---|---|---|---|---|
| 自动收菜 | 50 | 2小时 | 等级≥5 | 自动收获成熟作物 |
| 自动播种 | 50 | 4小时 | 等级≥10 | 自动补种空闲土地 |
| 灾害防护 | 30 | 6小时 | 等级≥15 | 防止指定类型自然灾害 |
| 表名 | 主要功能 | 关键字段 |
|---|---|---|
| pet_users | 用户宠物信息 | id, user_id, name, level |
| pet_skills | 技能配置 | id, skill_name, stamina_cost, cool_down |
| pet_skill_logs | 技能使用记录 | id, pet_id, skill_id, used_at |
| pet_configs | 宠物系统配置 | id, pet_type, feed_effect, display_attributes, numeric_attributes | | pet_level_configs | 等级配置 | id, level, exp_required, stamina_max, display_attributes, numeric_attributes |
-- 用户宠物表
CREATE TABLE `pet_users` (
`id` BIGINT UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`name` VARCHAR(20) NOT NULL COMMENT '宠物名称',
`level` TINYINT UNSIGNED DEFAULT 1,
`experience` INT UNSIGNED DEFAULT 0,
`stamina` SMALLINT UNSIGNED DEFAULT 100,
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '宠物状态:0未知,1正常,3死亡,4喂养中,5训练中,6休息中,7外出中,8偷菜中',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
INDEX idx_user (user_id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 技能配置表
CREATE TABLE `pet_skills` (
`id` INT UNSIGNED AUTO_INCREMENT,
`skill_name` VARCHAR(50) NOT NULL COMMENT '技能名称',
`stamina_cost` SMALLINT NOT NULL COMMENT '体力消耗',
`cool_down` INT COMMENT '冷却时间(秒)',
`effect_desc` TEXT COMMENT '效果描述',
`min_level` TINYINT UNSIGNED DEFAULT 1 COMMENT '最低等级要求',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) ENGINE=InnoDB;
-- 宠物配置表
CREATE TABLE `pet_configs` (
`id` INT UNSIGNED AUTO_INCREMENT,
`pet_type` VARCHAR(50) NOT NULL COMMENT '宠物类型',
`feed_effect` JSON NOT NULL COMMENT '喂养效果配置',
`max_level` TINYINT UNSIGNED NOT NULL COMMENT '最大等级',
`stamina_recovery` SMALLINT UNSIGNED NOT NULL COMMENT '体力恢复值/分钟',
`display_attributes` JSON DEFAULT NULL COMMENT '显示属性配置',
`numeric_attributes` JSON DEFAULT NULL COMMENT '数值属性配置',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY idx_pet_type (pet_type)
) ENGINE=InnoDB;
-- 宠物等级配置表
CREATE TABLE `pet_level_configs` (
`id` INT UNSIGNED AUTO_INCREMENT,
`level` TINYINT UNSIGNED NOT NULL COMMENT '等级',
`exp_required` INT UNSIGNED NOT NULL COMMENT '升级所需经验值',
`stamina_max` SMALLINT UNSIGNED NOT NULL DEFAULT 100 COMMENT '最大体力值',
`stamina_recovery_rate` TINYINT UNSIGNED NOT NULL DEFAULT 5 COMMENT '每分钟恢复体力值',
`unlock_skills` JSON DEFAULT NULL COMMENT '解锁的技能ID列表',
`display_attributes` JSON DEFAULT NULL COMMENT '等级显示属性配置',
`numeric_attributes` JSON DEFAULT NULL COMMENT '等级数值属性配置',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
UNIQUE KEY idx_level (level)
) ENGINE=InnoDB;
-- 技能使用日志表
CREATE TABLE `pet_skill_logs` (
`id` BIGINT UNSIGNED AUTO_INCREMENT,
`pet_id` BIGINT UNSIGNED NOT NULL,
`skill_id` INT UNSIGNED NOT NULL,
`used_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`effect_result` JSON COMMENT '技能使用结果',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (pet_id) REFERENCES pet_users(id),
FOREIGN KEY (skill_id) REFERENCES pet_skills(id),
INDEX idx_pet_skill (pet_id, skill_id)
) ENGINE=InnoDB;
| 表名 | 索引字段 | 索引类型 | 说明 |
|---|---|---|---|
| pet_users | id | 主键 | 宠物ID主键索引 |
| pet_users | user_id | 普通索引 | 加速用户宠物查询 |
| pet_users | status | 普通索引 | 加速按状态查询宠物 |
| pet_skills | id | 主键 | 技能ID主键索引 |
| pet_skill_logs | pet_id, skill_id | 复合索引 | 加速查询宠物技能使用记录 |
| pet_level_configs | id | 主键 | 等级配置ID主键索引 | | pet_level_configs | level | 唯一索引 | 确保等级唯一性,加速等级查询 |
以下是主要数据模型之间的关联关系:
用户与宠物关系
宠物与技能关系
宠物与偷菜关系
宠物等级配置表(pet_level_configs)用于定义每个等级的详细信息,包括:
宠物配置表(pet_configs)中的显示属性用于定义宠物类型的UI展示相关配置,如:
{
"icon": "pet_icon_001.png",
"avatar": "pet_avatar_001.png",
"animation": "pet_anim_001",
"ui_color": "#FF5500",
"description": "一只勤劳的宠物,擅长收集资源"
}
宠物配置表和等级配置表中的数值属性用于定义宠物的游戏数值相关配置,如:
{
"base_attack": 10,
"base_defense": 5,
"base_speed": 8,
"harvest_efficiency": 1.2,
"planting_speed": 1.0,
"disaster_resistance": 0.8
}
通过这些配置表,可以灵活调整宠物成长曲线,平衡游戏难度,并提供丰富的视觉体验和游戏玩法。
// config/pet.php
return [
// 宠物基础配置
'max_level' => 30, // 最大等级
'stamina_recovery' => 5, // 每分钟恢复体力
'stamina_max' => 100, // 最大体力值
// 技能冷却时间配置(秒)
'skill_cooltime' => [
'harvest' => 7200, // 自动收菜:2小时
'plant' => 14400, // 自动播种:4小时
'protect' => 21600 // 灾害防护:6小时
],
// 偷菜功能体力消耗配置
'steal_stamina_cost' => [
'steal' => 10, // 偷菜操作消耗体力
'defend' => 15 // 防御操作消耗体力
]
];
偷菜功能目前处于规划阶段,详细设计文档请参考:app/Module/Pet/Docs/偷菜.md
宠物暂存系统是由Game模块提供的一个用于跟踪和记录用户宠物变更的临时存储机制,主要用于优化前端UI更新和提高用户体验。
宠物模块在以下情况下触发事件:
Game模块使用DTO对象来存储和传输宠物数据:
宠物模型中的重要属性:
experience(经验值):宠物的经验值,用于衡量宠物的成长进度。当经验值达到一定阈值时,宠物可以升级。
stamina(体力值):宠物的体力值,表示宠物可以执行活动的能力。宠物进行某些活动(如战斗、工作等)会消耗体力值,通过喜养等方式可以恢复宠物的体力值。
宠物模块是游戏中重要的伙伴系统,为玩家提供了丰富的互动体验和游戏玩法。本文档详细描述了宠物系统的各个方面,包括:
宠物系统的数据表结构清晰:
宠物模块与其他模块的集成:
通过宠物系统,玩家可以培养自己的宠物伙伴,参与各种游戏活动,增强游戏的趣味性和粘性。系统设计注重数据完整性、性能优化和扩展性,为后续功能迭代提供了良好的基础。