GameItems 模块是游戏内物品系统的核心,负责管理所有与物品相关的逻辑和数据。它旨在提供一个灵活、可扩展且功能完善的物品管理解决方案。
该模块涵盖了以下核心功能领域:
多物品宝箱系统:
灵活的过期机制:
完善的属性系统:
单独物品属性系统:
物品组管理:
为了支持上述功能,建议采用以下核心数据表结构:
game_item_bases (基础物品表): 存储物品的模板信息。
id: 主键name: 物品名称category_id: 物品分类 ID (外键关联分类表)type: 物品类型 (例如:消耗品, 装备, 材料, 宝箱)description: 物品描述icon: 物品图标stack_limit: 堆叠上限 (1 表示不可堆叠)base_attributes: JSON/Text 存储基础属性 (如攻击力、防御力)is_tradable: 是否可交易is_sellable: 是否可出售sell_price: 出售价格global_expire_at: 全局过期时间 (NULL 表示永不过期)created_at, updated_atgame_item_instances (单独物品实例表): 存储具有独立属性的物品实例 (针对“单独物品属性系统”)。
id: 主键 (唯一实例 ID)base_item_id: 基础物品 ID (外键关联 game_item_bases)owner_user_id: 所属用户 ID (外键关联用户表)instance_attributes: JSON/Text 存储实例特定属性 (如强化等级, 随机词缀)created_at, updated_atexpire_at: 特定过期时间 (NULL 表示遵循基础物品或永不过期)status: 物品状态 (例如:在背包中, 已装备, 已锁定)user_inventories (用户物品库存表): 存储用户拥有的可堆叠物品。
id: 主键user_id: 用户 ID (外键关联用户表)base_item_id: 基础物品 ID (外键关联 game_item_bases)quantity: 拥有数量created_at, updated_atexpire_at: 特定过期时间 (针对用户特定过期,优先级高于全局过期和有效期)game_item_categories (物品分类表):
id: 主键name: 物品分类名称 (例如:武器, 护甲, 药水)parent_id: 父分类 ID (支持层级分类)created_at, updated_atgame_item_groups (物品组表): 定义物品的逻辑分组。
id: 主键name: 物品组名称description: 物品组描述created_at, updated_atgame_item_group_items (物品组包含物品表): 关联物品组和基础物品。
id: 主键group_id: 物品组 ID (外键关联 game_item_groups)base_item_id: 基础物品 ID (外键关联 game_item_bases)weight: 在物品组内的权重 (用于随机抽取)created_at, updated_atgame_chest_rewards (宝箱奖励配置表):
id: 主键chest_base_item_id: 宝箱的基础物品 ID (外键关联 game_item_bases)reward_base_item_id: 奖励的基础物品 ID (外键关联 game_item_bases, 如果直接奖励物品)reward_group_id: 奖励物品组 ID (外键关联 game_item_groups, 如果奖励物品组)min_quantity: 最小掉落数量max_quantity: 最大掉落数量probability: 掉落概率 (例如 0.3 表示 30%)is_pity_reward: 布尔值, 标记此项是否为可通过保底获得的奖励之一 (可选, 简化逻辑)created_at, updated_atgame_chest_pity_configs (宝箱保底配置表): 定义宝箱的保底规则。
id: 主键chest_base_item_id: 宝箱的基础物品 ID (外键关联 game_item_bases)pity_group_id: 保底组 ID (可选, 用于多个宝箱共享保底计数)pity_threshold: 触发保底所需的尝试次数guaranteed_reward_item_id: 保底必定获得的物品 ID (外键关联 game_item_bases)guaranteed_reward_quantity: 保底物品数量reset_on_trigger: 触发保底后是否重置计数器 (通常为 true)description: 保底规则描述 (例如 "90抽小保底", "180抽大保底")created_at, updated_atuser_chest_pity_progress (用户宝箱保底进度表): 跟踪用户针对特定保底规则的进度。
id: 主键user_id: 用户 ID (外键关联用户表)pity_config_id: 关联的保底配置 ID (外键关联 game_chest_pity_configs)attempts_count: 当前累计尝试次数created_at, updated_at说明:
game_item_instances 表。owner_user_id 标识归属。user_inventories 表。user_inventories.expire_at > game_item_instances.expire_at > game_item_bases.global_expire_at > 物品有效期(通常在获得时计算并存入 user_inventories 或 game_item_instances 的 expire_at 字段)。game_chest_pity_configs 中的配置,检查并更新 user_chest_pity_progress 表。当用户的 attempts_count 达到对应 pity_config_id 的 pity_threshold 时,强制发放 guaranteed_reward_item_id 指定的物品,并根据 reset_on_trigger 决定是否重置计数器。