|
|
8 meses atrás | |
|---|---|---|
| .. | ||
| AdminControllers | 8 meses atrás | |
| Casts | 8 meses atrás | |
| Databases | 8 meses atrás | |
| Enums | 8 meses atrás | |
| Models | 8 meses atrás | |
| Repositorys | 8 meses atrás | |
| README.md | 8 meses atrás | |
enum PetGrade: string {
case FIRST = 'FIRST'; // 一品
case SECOND = 'SECOND'; // 二品
case THIRD = 'THIRD'; // 三品
case FOURTH = 'FOURTH'; // 四品
}
enum PetStatus: int {
case NONE = 0; // 未知
case NORMAL = 1; // 正常
case FIGHTING = 2; // 战斗中
case DEAD = 3; // 死亡
}
| 技能名称 | 消耗体力 | 冷却时间 | 开启条件 | 效果描述 |
|---|---|---|---|---|
| 自动收菜 | 50 | 2小时 | 等级≥5 | 自动收获成熟作物 |
| 自动播种 | 50 | 4小时 | 等级≥10 | 自动补种空闲土地 |
| 灾害防护 | 30 | 6小时 | 等级≥15 | 防止指定类型自然灾害 |
| 表名 | 主要功能 | 关键字段 |
|---|---|---|
| pet_users | 用户宠物信息 | id, user_id, name, grade, level |
| pet_skills | 技能配置 | id, skill_name, stamina_cost, cool_down |
| pet_skill_logs | 技能使用记录 | id, pet_id, skill_id, used_at |
| pet_remould_logs | 洗髓记录 | id, pet_id, old_grade, new_grade |
| pet_configs | 宠物系统配置 | id, pet_type, grade_probability, feed_effect, display_attributes, numeric_attributes |
| pet_level_configs | 等级配置 | id, level, exp_required, stamina_max, display_attributes, numeric_attributes |
| pet_battle_logs | 战斗记录 | id, pet_id, battle_type, result |
| pet_battle_seasons | 争霸赛赛季 | id, name, start_time, end_time, boss_power |
| pet_battle_teams | 争霸赛队伍 | id, season_id, name, leader_id, total_power |
| pet_battle_team_members | 争霸赛队伍成员 | id, team_id, user_id, pet_id, power |
-- 用户宠物表
CREATE TABLE `pet_users` (
`id` BIGINT UNSIGNED AUTO_INCREMENT,
`user_id` BIGINT NOT NULL COMMENT '用户ID',
`name` VARCHAR(20) NOT NULL COMMENT '宠物名称',
`grade` ENUM('FIRST','SECOND','THIRD','FOURTH') NOT NULL,
`level` TINYINT UNSIGNED DEFAULT 1,
`experience` INT UNSIGNED DEFAULT 0,
`stamina` SMALLINT UNSIGNED DEFAULT 100,
`status` TINYINT UNSIGNED DEFAULT 1 COMMENT '宠物状态:0未知,1正常,2战斗中,3死亡',
`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 '宠物类型',
`grade_probability` JSON 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;
-- 洗髓记录表
CREATE TABLE `pet_remould_logs` (
`id` BIGINT UNSIGNED AUTO_INCREMENT,
`pet_id` BIGINT UNSIGNED NOT NULL,
`old_grade` ENUM('FIRST','SECOND','THIRD','FOURTH'),
`new_grade` ENUM('FIRST','SECOND','THIRD','FOURTH'),
`remould_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (pet_id) REFERENCES pet_users(id),
INDEX idx_pet (pet_id)
) ENGINE=InnoDB;
-- 战斗记录表
CREATE TABLE `pet_battle_logs` (
`id` BIGINT UNSIGNED AUTO_INCREMENT,
`pet_id` BIGINT UNSIGNED NOT NULL,
`battle_type` TINYINT UNSIGNED NOT NULL COMMENT '战斗类型:1偷菜,2守护,3争霸赛',
`opponent_id` BIGINT UNSIGNED COMMENT '对手ID(可为空)',
`result` TINYINT UNSIGNED NOT NULL COMMENT '战斗结果:0失败,1胜利',
`reward` JSON COMMENT '战斗奖励',
`battle_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (pet_id) REFERENCES pet_users(id),
INDEX idx_pet (pet_id),
INDEX idx_battle_time (battle_time)
) ENGINE=InnoDB;
-- 争霸赛赛季表
CREATE TABLE `pet_battle_seasons` (
`id` INT UNSIGNED AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL COMMENT '赛季名称',
`start_time` TIMESTAMP NOT NULL COMMENT '开始时间',
`end_time` TIMESTAMP NOT NULL COMMENT '结束时间',
`boss_power` INT UNSIGNED NOT NULL COMMENT 'Boss战力',
`reward_pool` JSON NOT NULL COMMENT '奖池配置',
`status` TINYINT UNSIGNED DEFAULT 0 COMMENT '状态:0未开始,1进行中,2已结束',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
INDEX idx_status (status),
INDEX idx_time (start_time, end_time)
) ENGINE=InnoDB;
-- 争霸赛队伍表
CREATE TABLE `pet_battle_teams` (
`id` INT UNSIGNED AUTO_INCREMENT,
`season_id` INT UNSIGNED NOT NULL COMMENT '赛季ID',
`name` VARCHAR(50) NOT NULL COMMENT '队伍名称',
`leader_id` BIGINT UNSIGNED NOT NULL COMMENT '队长用户ID',
`total_power` INT UNSIGNED NOT NULL DEFAULT 0 COMMENT '队伍总战力',
`member_count` TINYINT UNSIGNED DEFAULT 0 COMMENT '成员数量',
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (season_id) REFERENCES pet_battle_seasons(id),
INDEX idx_season (season_id),
INDEX idx_leader (leader_id)
) ENGINE=InnoDB;
-- 争霸赛队伍成员表
CREATE TABLE `pet_battle_team_members` (
`id` BIGINT UNSIGNED AUTO_INCREMENT,
`team_id` INT UNSIGNED NOT NULL COMMENT '队伍ID',
`user_id` BIGINT UNSIGNED NOT NULL COMMENT '用户ID',
`pet_id` BIGINT UNSIGNED NOT NULL COMMENT '宠物ID',
`power` INT UNSIGNED NOT NULL COMMENT '战力贡献',
`join_time` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id),
FOREIGN KEY (team_id) REFERENCES pet_battle_teams(id),
FOREIGN KEY (pet_id) REFERENCES pet_users(id),
UNIQUE KEY idx_team_user (team_id, user_id),
INDEX idx_pet (pet_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_remould_logs | pet_id | 普通索引 | 加速查询宠物洗髓记录 |
| pet_level_configs | id | 主键 | 等级配置ID主键索引 |
| pet_level_configs | level | 唯一索引 | 确保等级唯一性,加速等级查询 |
| pet_battle_logs | pet_id | 普通索引 | 加速查询宠物战斗记录 |
| pet_battle_logs | battle_time | 普通索引 | 加速按时间查询战斗记录 |
| pet_battle_seasons | status | 普通索引 | 加速按状态查询赛季 |
| pet_battle_seasons | start_time, end_time | 复合索引 | 加速按时间范围查询赛季 |
| pet_battle_teams | season_id | 普通索引 | 加速查询赛季队伍 |
| pet_battle_teams | leader_id | 普通索引 | 加速查询队长创建的队伍 |
| pet_battle_team_members | team_id, user_id | 唯一索引 | 确保用户在一个队伍中只有一个宠物 |
| pet_battle_team_members | pet_id | 普通索引 | 加速查询宠物参与的队伍 |
以下是主要数据模型之间的关联关系:
用户与宠物关系
宠物与技能关系
宠物与战斗关系
争霸赛关系链
宠物等级配置表(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小时
],
// 洗髓相关配置
'remould_cost' => [
'diamond' => 50, // 洗髓消耗钻石
'item_id' => 1001 // 洗髓道具ID
],
// 品阶概率配置
'grade_probability' => [
'FIRST' => 0.6, // 一品阶:60%
'SECOND' => 0.25, // 二品阶:25%
'THIRD' => 0.1, // 三品阶:10%
'FOURTH' => 0.05 // 四品阶:5%
],
// 品阶数值属性加成
'grade_attribute_bonus' => [
'FIRST' => 0.1, // 一品阶:+10%
'SECOND' => 0.25, // 二品阶:+25%
'THIRD' => 0.5, // 三品阶:+50%
'FOURTH' => 1.0 // 四品阶:+100%
],
// 争霸赛配置
'battle_royale' => [
'min_team_size' => 5, // 最小队伍人数
'max_team_size' => 10, // 最大队伍人数
'min_power_threshold' => 1000, // 最低战力要求
'reward_distribution' => 'top_n' // 奖励分配方式:first_win或top_n
]
];
争霸赛相关的数据表已在数据库设计章节中详细描述,包括:
这些表共同构成了争霸赛系统的数据基础,支持赛季管理、队伍组建和成员管理等功能。
宠物模块是游戏中重要的伙伴系统,为玩家提供了丰富的互动体验和游戏玩法。本文档详细描述了宠物系统的各个方面,包括:
宠物系统的数据表结构清晰:
通过宠物系统,玩家可以培养自己的宠物伙伴,参与各种游戏活动,增强游戏的趣味性和粘性。系统设计注重数据完整性、性能优化和扩展性,为后续功能迭代提供了良好的基础。