Kaynağa Gözat

refactor(game): 重构宠物临时数据处理逻辑

- 移除了 PetTemp 类中冗余的 TEMP_KEY_CREATED_PREFIX 常量- 合并了宠物创建和更新数据的处理方法,统一使用 TEMP_KEY_UPDATE_PREFIX
- 在 AppGameProtobufResponseListener 中增加了宠物简单数据和详细数据的处理- 优化了宠物临时数据的缓存和获取逻辑,提高了代码复用性
Your Name 8 ay önce
ebeveyn
işleme
22802a7f10

+ 42 - 2
app/Module/AppGame/Listeners/AppGameProtobufResponseListener.php

@@ -56,17 +56,57 @@ class AppGameProtobufResponseListener
         if($itemLs){
             $lastData->setItems($itemLs);
         }
+        // 宠物简单数据 start
         $pets = \App\Module\Game\Logics\PetTemp::getUserPetStatus($user_id);
 
         $petLs = [];
         foreach ($pets as $pet){
-            $p = new \Uraus\Kku\Common\DataPet();
-            $p->setId($pet->petId);
+            $p = new \Uraus\Kku\Common\DataPetSimple();
+            $p->setId($pet->id);
             $p->setTypeId($pet->newStatus);
             $p->setLevel($pet->reason);
             $p->setName($pet->name);
+            $p->setExp($pet->exp);
+            $p->setPower($pet->power);
+            $p->setMaxpower($pet->maxpower);
+            $p->setScore($pet->score);
+            $p->setGrade($pet->grade);
+            $petLs[] = $p;
+        }
+        if($petLs){
+            $lastData->setPetSimple($petLs);
+        }
+        // 宠物简单数据 end
+        // 宠物详细数据 start
+        $pets = \App\Module\Game\Logics\PetTemp::getUserPetUpdates($user_id);
+        $petLs = [];
+        foreach ($pets as $pet){
+            $p = new \Uraus\Kku\Common\DataPet();
+            $p->setId($pet->id);
+            $p->setTypeId($pet->typeId);
+            $p->setLevel($pet->level);
+            $p->setName($pet->name);
+            $p->setExp($pet->exp);
+            $p->setPower($pet->power);
+            $p->setMaxpower($pet->maxpower);
+            $p->setScore($pet->score);
+            $p->setGrade($pet->grade);
+            $lifeSkills=[];
+            foreach ($pet->lifeSkills as $lifeSkill){
+                $ls = new \Uraus\Kku\Common\PetLifeSkill();
+                $ls->setSkillId($lifeSkill->skillId);
+                $ls->setCanuse($lifeSkill->canuse);
+                $ls->setCurnum($lifeSkill->curnum);
+                $ls->setMaxnum($lifeSkill->maxnum);
+                $lifeSkills[] = $ls;
+            }
+            $p->setLifeSkills($lifeSkills);
             $petLs[] = $p;
         }
+        if($petLs){
+            $lastData->setPets($petLs);
+        }
+        // 宠物详细数据 end
 
         $event->response->setLastData($lastData);
     }

+ 11 - 18
app/Module/Game/Logics/PetTemp.php

@@ -23,10 +23,7 @@ use UCore\Helper\Cache;
  */
 class PetTemp
 {
-    /**
-     * 临时数据键前缀 - 宠物创建
-     */
-    const TEMP_KEY_CREATED_PREFIX = 'game:pet:created:';
+    // 已移除 TEMP_KEY_CREATED_PREFIX,与 TEMP_KEY_UPDATE_PREFIX 合并
 
     /**
      * 临时数据键前缀 - 宠物状态变更
@@ -51,15 +48,14 @@ class PetTemp
      *
      * @param int $userId 用户ID
      * @param int $petId 宠物ID
-     * @param string $keyPrefix 缓存键前缀
      * @param string $eventType 事件类型,用于日志
      * @return void
      */
-    private static function handlePetFullData(int $userId, int $petId, string $keyPrefix, string $eventType): void
+    private static function handlePetFullData(int $userId, int $petId, string $eventType): void
     {
         try {
             // 构建临时数据键,按用户ID进行存储
-            $tempKey = $keyPrefix . $userId;
+            $tempKey = self::TEMP_KEY_UPDATE_PREFIX . $userId;
 
             // 获取当前用户的宠物临时数据
             $userPetsTemp = Cache::get($tempKey, []);
@@ -124,7 +120,7 @@ class PetTemp
      */
     public static function handlePetCreated(PetCreatedEvent $event): void
     {
-        self::handlePetFullData($event->userId, $event->petId, self::TEMP_KEY_CREATED_PREFIX, '创建');
+        self::handlePetFullData($event->userId, $event->petId, '创建');
     }
 
     /**
@@ -196,11 +192,8 @@ class PetTemp
      */
     public static function getUserPetCreated(int $userId): array
     {
-        $tempKey = self::TEMP_KEY_CREATED_PREFIX . $userId;
-        $cachedData = Cache::get($tempKey, []);
-
-        // 使用fromCache方法处理缓存数据,确保返回正确类型的DTO对象
-        return PetStatusTempDto::fromCache($cachedData);
+        // 使用统一的前缀,与宠物更新数据共用一个缓存键
+        return self::getUserPetUpdates($userId);
     }
 
     /**
@@ -212,8 +205,8 @@ class PetTemp
      */
     public static function getUserPetCreatedById(int $userId, int $petId): ?PetStatusTempDto
     {
-        $userPetCreated = self::getUserPetCreated($userId);
-        return $userPetCreated[$petId] ?? null;
+        // 使用统一的方法,与宠物更新数据共用一个获取方法
+        return self::getUserPetUpdateById($userId, $petId);
     }
 
     /**
@@ -254,7 +247,7 @@ class PetTemp
      */
     public static function handlePetUpdate(PetUpdateEvent $event): void
     {
-        self::handlePetFullData($event->userId, $event->petId, self::TEMP_KEY_UPDATE_PREFIX, '更新');
+        self::handlePetFullData($event->userId, $event->petId, '更新');
     }
 
     /**
@@ -293,8 +286,8 @@ class PetTemp
      */
     public static function clearUserPetCreated(int $userId): void
     {
-        $tempKey = self::TEMP_KEY_CREATED_PREFIX . $userId;
-        Cache::put($tempKey, [], 0);
+        // 使用统一的方法,与宠物更新数据共用一个清除方法
+        self::clearUserPetUpdates($userId);
     }
 
     /**