神灵buff开启方式详细说明.md 6.5 KB

神灵buff开启方式详细说明

概述

神灵buff系统为农场模块提供临时增益机制,玩家可以通过多种方式获得和开启神灵加持。本文档详细说明了神灵buff的开启方式和相关代码实现。

神灵buff类型

系统定义了四种神灵加持类型:

类型ID 名称 效果 物品ID
1 丰收之神 确保收获时获得最高产量 3001
2 雨露之神 防止干旱灾害 3002
3 屠草之神 防止杂草灾害 3003
4 拭虫之神 防止虫害灾害 3004

开启方式

1. 主要开启方式:神像激活

路由: god/open Handler: App\Module\AppGame\Handler\God\OpenHandler 请求类型: RequestGodOpen 响应类型: ResponseGodOpen

开启流程

  1. 参数验证

    $godId = $data->getGodId(); // 神像ID (1-4)
    
  2. 检查神像类型有效性

    if (!in_array($godId, [
       BUFF_TYPE::HARVEST_GOD->value,    // 1
       BUFF_TYPE::RAIN_GOD->value,       // 2
       BUFF_TYPE::WEED_KILLER_GOD->value, // 3
       BUFF_TYPE::PEST_CLEANER_GOD->value // 4
    ])) {
       throw new LogicException("无效的神像类型");
    }
    
  3. 检查是否已有有效加持

    $existingBuff = BuffService::getActiveUserBuff($userId, $godId);
    if ($existingBuff) {
       throw new LogicException("该神像已激活,有效期至:" . $existingBuff->expire_time);
    }
    
  4. 检查用户背包中的神像物品

    $godItemId = 3000 + $godId; // 神像物品ID为3001-3004
    $userItems = ItemService::getUserItems($userId, ['item_id' => $godItemId]);
       
    if ($userItems->isEmpty()) {
       throw new LogicException("您没有该神像物品");
    }
    
  5. 消耗神像物品并激活加持

    // 消耗神像物品
    ItemService::consumeItem($userId, $godItemId, null, 1, [
       'source_type' => 'god_activate',
       'source_id' => $godId,
       'details' => [
           'god_id' => $godId,
           'god_name' => BUFF_TYPE::getName($godId)
       ]
    ]);
       
    // 激活神像加持(默认24小时)
    $durationHours = 24;
    $buff = BuffService::activateBuff($userId, $godId, $durationHours);
    

核心代码位置

OpenHandler.php (第67-89行):

// 查找用户背包中的神像物品
$godItemId = 3000 + $godId; // 假设神像物品ID为3001-3004,对应神像类型1-4
$userItems = ItemService::getUserItems($userId, ['item_id' => $godItemId]);

if ($userItems->isEmpty()) {
    throw new LogicException("您没有该神像物品");
}

// 开始事务
DB::beginTransaction();

// 消耗神像物品
ItemService::consumeItem($userId, $godItemId, null, 1, [
    'source_type' => 'god_activate',
    'source_id' => $godId,
    'details' => [
        'god_id' => $godId,
        'god_name' => BUFF_TYPE::getName($godId)
    ]
]);

// 激活神像加持(默认24小时)
$durationHours = 24;
$buff = BuffService::activateBuff($userId, $godId, $durationHours);

2. 其他潜在开启方式

2.1 任务奖励

通过任务系统可以直接奖励神灵buff:

相关代码: app/Module/Task/Services/TaskRewardGroupService.php

  • 任务完成后可以通过奖励组系统发放神灵buff
  • 需要在奖励组中配置相应的神灵buff奖励

2.2 商店购买

通过商店系统购买神像物品:

相关代码: app/Module/AppGame/Handler/Shop/BuyHandler.php

  • 玩家可以在商店购买神像物品(ID: 3001-3004)
  • 购买后通过神像激活方式开启buff

2.3 宝箱开启

通过开启宝箱获得神像物品:

相关代码: app/Module/AppGame/Handler/Item/OpenBoxHandler.php

  • 宝箱中可以配置神像物品作为奖励
  • 获得神像物品后通过神像激活方式开启buff

2.4 直接激活(管理员或系统)

通过服务层直接激活:

// 直接激活神灵buff
$buff = BuffService::activateBuff($userId, $buffType, $durationHours);

核心服务和逻辑

BuffService (服务层)

文件: app/Module/Farm/Services/BuffService.php

主要方法:

  • activateBuff(): 激活神灵加持
  • getUserBuffs(): 获取用户所有神灵加持
  • getActiveBuffs(): 获取用户有效神灵加持
  • getActiveUserBuff(): 获取用户指定类型的有效神灵加持

BuffLogic (逻辑层)

文件: app/Module/Farm/Logics/BuffLogic.php

核心激活逻辑:

public function activateBuff(int $userId, int $buffType, int $durationHours): ?FarmGodBuff
{
    // 检查buff类型是否有效
    // 获取或创建buff记录
    // 设置过期时间
    // 触发buff激活事件
    // 返回buff对象
}

FarmGodBuff (模型)

文件: app/Module/Farm/Models/FarmGodBuff.php

数据库表结构:

  • id: 主键ID
  • user_id: 用户ID
  • buff_type: buff类型(1-4)
  • expire_time: 过期时间
  • created_at: 创建时间
  • updated_at: 更新时间

数据流程

用户请求神像激活
    ↓
OpenHandler 验证参数
    ↓
检查用户是否已有有效buff
    ↓
检查用户背包中的神像物品
    ↓
开始数据库事务
    ↓
ItemService 消耗神像物品
    ↓
BuffService 激活神灵buff
    ↓
BuffLogic 处理激活逻辑
    ↓
FarmGodBuff 保存到数据库
    ↓
触发 BuffActivatedEvent 事件
    ↓
提交事务并返回响应
    ↓
客户端收到激活成功消息

客户端调用示例

// 激活神像的请求
{
    "god_id": 1  // 1=丰收之神, 2=雨露之神, 3=屠草之神, 4=拭虫之神
}

// 成功响应
{
    "code": 0,
    "msg": "神像激活成功",
    "last_data": {
        "gods": [
            {
                "id": 1,
                "status": true,
                "vaid_time": 1716537600  // 过期时间戳
            }
        ]
    }
}

注意事项

  1. 物品ID映射: 神像物品ID = 3000 + 神像类型ID
  2. 默认持续时间: 24小时
  3. 重复激活: 如果已有有效buff,会延长时间而不是重置
  4. 事务安全: 使用数据库事务确保物品消耗和buff激活的原子性
  5. 事件触发: 激活成功后会触发 BuffActivatedEvent 事件

扩展建议

  1. 多种持续时间: 可以根据不同的神像物品设置不同的持续时间
  2. VIP特权: VIP用户可以享受更长的buff持续时间
  3. 组合效果: 多种buff同时生效时的组合加成
  4. 自动续费: 提供自动消耗物品续费的功能
  5. buff等级: 不同等级的神像提供不同强度的效果