施肥后,作物状态发生了变化,但是返回的LastData中没有DataLand
在GameServiceProvider中缺少了LandStatusChangedEvent事件的监听器注册,导致施肥操作触发的土地状态变更事件没有被正确处理。
FertilizerHandler调用CropService::useFertilizerCropLogic::useFertilizer触发LandStatusChangedEvent事件LandStatusChangedListener监听事件并调用LandTemp::handleLandStatusChangedLandTemp将土地变更数据存储到缓存中AppGameProtobufResponseListener从LandTemp获取变更数据并设置到LastDataLastData第3步失败,因为事件监听器没有注册,导致LandStatusChangedEvent事件没有被处理。
app/Module/Game/Providers/GameServiceProvider.php
添加导入:
use App\Module\Farm\Events\LandStatusChangedEvent;
use App\Module\Game\Listeners\LandStatusChangedListener;
注册事件监听器:
// 注册土地状态变更事件监听器
Event::listen(
LandStatusChangedEvent::class,
LandStatusChangedListener::class
);
在app/Module/Farm/Logics/CropLogic.php的useFertilizer方法中(第401-406行):
// 触发土地状态变更事件,确保前端能够获取到土地状态变更
// 虽然土地状态没有实际变化,但我们需要通知前端作物状态已更新
event(new LandStatusChangedEvent(
$userId,
$landId,
$land->status, // 旧状态
$land->status // 新状态(实际上没有变化,但需要触发事件)
));
app/Module/Game/Listeners/LandStatusChangedListener.php存在且正确实现。
AppGameProtobufResponseListener能够从LandTemp获取土地变更数据并设置到LastData。
施肥操作现在应该能够正确返回包含更新土地信息的LastData,前端可以收到作物状态变更后的完整土地数据。
✅ 已完成
app/Module/Game/Providers/GameServiceProvider.php - 添加事件监听器注册app/Module/Farm/Logics/CropLogic.php - 确认事件触发app/Module/Game/Listeners/LandStatusChangedListener.php - 事件监听器app/Module/AppGame/Listeners/AppGameProtobufResponseListener.php - LastData处理