Browse Source

修复宠物生活技能使用后LastData缺少宠物状态同步问题:添加PetSkillUsedListener监听器

notfff 7 tháng trước cách đây
mục cha
commit
fe11c57800

+ 56 - 0
app/Module/Game/Listeners/PetSkillUsedListener.php

@@ -0,0 +1,56 @@
+<?php
+
+namespace App\Module\Game\Listeners;
+
+use App\Module\Game\Logics\PetTemp;
+use App\Module\Pet\Events\PetSkillUsedEvent;
+use Illuminate\Support\Facades\Log;
+
+/**
+ * 宠物技能使用事件监听器
+ *
+ * 监听宠物技能使用事件,并调用逻辑层处理临时数据存储
+ * 同步处理事件,确保事件处理完成后才返回
+ */
+class PetSkillUsedListener
+{
+    /**
+     * 创建事件监听器
+     *
+     * @return void
+     */
+    public function __construct()
+    {
+        //
+    }
+
+    /**
+     * 处理事件
+     *
+     * 接收宠物技能使用事件,并调用逻辑层的方法处理临时数据
+     *
+     * @param PetSkillUsedEvent $event 宠物技能使用事件
+     * @return void
+     */
+    public function handle(PetSkillUsedEvent $event): void
+    {
+        try {
+            Log::info('Game模块接收到宠物技能使用事件', [
+                'user_id' => $event->userId,
+                'pet_id' => $event->petId,
+                'skill_id' => $event->skillId,
+                'params' => $event->params
+            ]);
+
+            // 调用逻辑层处理临时数据
+            PetTemp::handlePetSkillUsed($event);
+        } catch (\Exception $e) {
+            Log::error('Game模块处理宠物技能使用事件失败', [
+                'error' => $e->getMessage(),
+                'user_id' => $event->userId,
+                'pet_id' => $event->petId,
+                'skill_id' => $event->skillId,
+            ]);
+        }
+    }
+}

+ 13 - 0
app/Module/Game/Logics/PetTemp.php

@@ -250,6 +250,19 @@ class PetTemp
         self::handlePetFullData($event->userId, $event->petId, '更新');
     }
 
+    /**
+     * 处理宠物技能使用事件
+     *
+     * 将宠物技能使用后的数据临时存储,按用户ID进行存储
+     *
+     * @param \App\Module\Pet\Events\PetSkillUsedEvent $event 宠物技能使用事件
+     * @return void
+     */
+    public static function handlePetSkillUsed(\App\Module\Pet\Events\PetSkillUsedEvent $event): void
+    {
+        self::handlePetFullData($event->userId, $event->petId, '技能使用');
+    }
+
     /**
      * 获取用户的宠物更新临时数据
      *

+ 8 - 0
app/Module/Game/Providers/GameServiceProvider.php

@@ -31,10 +31,12 @@ use App\Module\Game\Listeners\LandUpgradedListener;
 use App\Module\Game\Listeners\LogRewardGrantedListener;
 use App\Module\Game\Listeners\NotifyRewardGrantedListener;
 use App\Module\Game\Listeners\PetCreatedListener;
+use App\Module\Game\Listeners\PetSkillUsedListener;
 use App\Module\Game\Listeners\PetStatusChangedListener;
 use App\Module\Game\Listeners\PetUpdateListener;
 use App\Module\GameItems\Events\ItemQuantityChanged;
 use App\Module\Pet\Events\PetCreatedEvent;
+use App\Module\Pet\Events\PetSkillUsedEvent;
 use App\Module\Pet\Events\PetStatusChangedEvent;
 use App\Module\Pet\Events\PetUpdateEvent;
 use Illuminate\Support\ServiceProvider;
@@ -101,6 +103,12 @@ class GameServiceProvider extends ServiceProvider
             PetUpdateListener::class
         );
 
+        // 注册宠物技能使用事件监听器
+        Event::listen(
+            PetSkillUsedEvent::class,
+            PetSkillUsedListener::class
+        );
+
         // 注册奖励组系统事件监听器
         Event::listen(
             RewardGrantedEvent::class,