最后更新时间:2024年5月
消耗组系统是 Game 模块提供的一个用于管理和执行消耗操作的功能。它允许将多种不同类型的消耗(如物品、货币等)组合在一起,形成一个消耗组,然后统一执行消耗操作。这种设计使得游戏中的各种消耗操作更加灵活和可配置。
消耗组系统由以下几个部分组成:
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键 |
| name | varchar | 消耗组名称 |
| code | varchar | 消耗组编码(唯一) |
| description | text | 消耗组描述 |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
| 字段名 | 类型 | 说明 |
|---|---|---|
| id | int | 主键 |
| group_id | int | 消耗组ID,外键关联game_consume_groups表 |
| consume_type | tinyint | 消耗类型(1:物品, 2:币种, 3:账户种类, 4:多账户种类) |
| target_id | int | 目标ID(物品ID、货币ID、账户种类ID等,根据consume_type解释) |
| param1 | int | 参数1(根据consume_type不同含义,如物品的品质、货币的来源等) |
| param2 | int | 参数2(根据consume_type不同含义,如物品的绑定状态、货币的类型等) |
| quantity | int | 数量 |
| extra_data | json | 额外数据(JSON格式,可存储特定消耗类型的额外参数,如多账户种类的ID列表) |
| created_at | timestamp | 创建时间 |
| updated_at | timestamp | 更新时间 |
在代码中,可以使用 ConsumeService::checkConsume 方法检查用户是否满足消耗条件:
$result = ConsumeService::checkConsume($userId, 'consume_group_code');
if ($result['success']) {
// 用户满足消耗条件
} else {
// 用户不满足消耗条件,$result['message'] 包含错误信息
}
在代码中,可以使用 ConsumeService::executeConsume 方法执行消耗操作:
$result = ConsumeService::executeConsume($userId, 'consume_group_code', 'source', $sourceId);
if ($result['success']) {
// 消耗执行成功
} else {
// 消耗执行失败,$result['message'] 包含错误信息
}
可以使用命令行工具测试消耗组功能:
php artisan game:test-consume {user_id} {consume_group} [--check]
参数说明:
user_id: 用户IDconsume_group: 消耗组编码或ID--check: 可选参数,如果提供,则只检查不执行消耗fund_config_ids: 数组,包含额外的账户种类ID列表多账户种类消耗说明:
target_id 指定的主账户扣除extra_data.fund_config_ids 中的账户扣除配置示例:
{
"target_id": 1,
"quantity": 1000,
"extra_data": {
"fund_config_ids": [2, 3, 4]
}
}
这个配置表示:消耗1000单位资金,优先从账户种类1扣除,不足时依次从账户种类2、3、4扣除。
upgrade_house_level_2。