本文档描述了物品模块中的掉落组功能,包括定义、使用方式和最佳实践。
掉落组是一组相关物品的集合,用于定义物品的随机掉落规则。主要用途包括:
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 物品组ID,主键 |
| name | string | 物品组名称 |
| code | string | 物品组编码(唯一) |
| description | string | 物品组描述 |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
| 字段 | 类型 | 说明 |
|---|---|---|
| id | int | 记录ID,主键 |
| group_id | int | 物品组ID,外键 |
| item_id | int | 物品ID,外键 |
| weight | float | 权重,决定选择概率 |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
/**
* 物品组模型
*/
class ItemGroup extends ModelCore
{
// 关联物品组内容
public function groupItems(): HasMany
{
return $this->hasMany(ItemGroupItem::class, 'group_id','id');
}
// 关联宝箱内容配置
public function chestContents(): HasMany
{
return $this->hasMany(ItemChestContent::class, 'group_id','id');
}
}
/**
* 物品组内容模型
*/
class ItemGroupItem extends ModelCore
{
// 关联物品组
public function group(): BelongsTo
{
return $this->belongsTo(ItemGroup::class, 'group_id');
}
// 关联物品
public function item(): BelongsTo
{
return $this->belongsTo(Item::class, 'item_id');
}
}
/**
* 物品组逻辑类
*/
class Group
{
/**
* 根据权重随机获取物品组中的一个物品
*/
public function getRandomItem(ItemGroup $group): ?Item
{
// 实现逻辑...
}
}
// 创建掉落组
$group = ItemGroup::create([
'name' => '初级宝箱掉落组',
'code' => 'beginner_chest_drops',
'description' => '初级宝箱可能掉落的物品'
]);
// 添加掉落组内容
ItemGroupItem::create([
'group_id' => $group->id,
'item_id' => 101, // 物品ID
'weight' => 0.5 // 权重
]);
// 获取随机物品
$group = ItemGroup::find(1);
$randomItem = app(Group::class)->getRandomItem($group);
// 在宝箱内容中使用掉落组
ItemChestContent::create([
'chest_id' => 201, // 宝箱ID
'group_id' => $group->id, // 使用掉落组
'min_quantity' => 1,
'max_quantity' => 3,
'weight' => 1.0
]);
权重设计:
性能优化:
测试验证:
文档维护: