|
|
@@ -0,0 +1,202 @@
|
|
|
+<?php
|
|
|
+
|
|
|
+namespace App\Module\Pet\Listeners;
|
|
|
+
|
|
|
+use App\Module\GameItems\Events\ItemChangedEvent;
|
|
|
+use App\Module\Pet\Services\PetService;
|
|
|
+use Illuminate\Support\Facades\Log;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 物品变更事件监听器
|
|
|
+ *
|
|
|
+ * 监听物品变更事件,处理与宠物相关的物品变更
|
|
|
+ */
|
|
|
+class ItemChangedListener
|
|
|
+{
|
|
|
+ /**
|
|
|
+ * @var PetService
|
|
|
+ */
|
|
|
+ protected $petService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构造函数
|
|
|
+ *
|
|
|
+ * @param PetService $petService
|
|
|
+ */
|
|
|
+ public function __construct(PetService $petService)
|
|
|
+ {
|
|
|
+ $this->petService = $petService;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理事件
|
|
|
+ *
|
|
|
+ * @param ItemChangedEvent $event
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ public function handle(ItemChangedEvent $event): void
|
|
|
+ {
|
|
|
+ try {
|
|
|
+ $userId = $event->userId;
|
|
|
+ $itemId = $event->itemId;
|
|
|
+ $changeType = $event->changeType;
|
|
|
+ $amount = $event->amount;
|
|
|
+
|
|
|
+ // 记录日志
|
|
|
+ Log::info('处理物品变更事件', [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'item_id' => $itemId,
|
|
|
+ 'change_type' => $changeType,
|
|
|
+ 'amount' => $amount
|
|
|
+ ]);
|
|
|
+
|
|
|
+ // 处理狗粮物品变更
|
|
|
+ if ($this->isDogFoodItem($itemId)) {
|
|
|
+ $this->handleDogFoodItemChanged($userId, $itemId, $changeType, $amount);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理洗髓道具变更
|
|
|
+ if ($this->isRemouldItem($itemId)) {
|
|
|
+ $this->handleRemouldItemChanged($userId, $itemId, $changeType, $amount);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 处理其他宠物相关物品变更
|
|
|
+ if ($this->isOtherPetItem($itemId)) {
|
|
|
+ $this->handleOtherPetItemChanged($userId, $itemId, $changeType, $amount);
|
|
|
+ }
|
|
|
+
|
|
|
+ } catch (\Exception $e) {
|
|
|
+ Log::error('处理物品变更事件失败', [
|
|
|
+ 'error' => $e->getMessage(),
|
|
|
+ 'user_id' => $event->userId,
|
|
|
+ 'item_id' => $event->itemId
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断物品是否为狗粮
|
|
|
+ *
|
|
|
+ * @param int $itemId
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ protected function isDogFoodItem(int $itemId): bool
|
|
|
+ {
|
|
|
+ // 获取配置中的狗粮物品ID列表
|
|
|
+ $dogFoodItems = config('pet.dog_food_items', []);
|
|
|
+
|
|
|
+ return in_array($itemId, $dogFoodItems);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理狗粮物品变更
|
|
|
+ *
|
|
|
+ * @param int $userId
|
|
|
+ * @param int $itemId
|
|
|
+ * @param string $changeType
|
|
|
+ * @param int $amount
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ protected function handleDogFoodItemChanged(int $userId, int $itemId, string $changeType, int $amount): void
|
|
|
+ {
|
|
|
+ // 如果是添加狗粮,可能需要更新UI提示或其他逻辑
|
|
|
+ if ($changeType === 'add') {
|
|
|
+ // 处理添加狗粮的逻辑
|
|
|
+ Log::info('用户获得了狗粮', [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'item_id' => $itemId,
|
|
|
+ 'amount' => $amount
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果是消耗狗粮,可能是喂养宠物,需要检查是否通过正确途径消耗
|
|
|
+ if ($changeType === 'remove') {
|
|
|
+ // 处理消耗狗粮的逻辑
|
|
|
+ Log::info('用户消耗了狗粮', [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'item_id' => $itemId,
|
|
|
+ 'amount' => $amount
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断物品是否为洗髓道具
|
|
|
+ *
|
|
|
+ * @param int $itemId
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ protected function isRemouldItem(int $itemId): bool
|
|
|
+ {
|
|
|
+ // 获取配置中的洗髓道具ID
|
|
|
+ $remouldItemId = config('pet.remould_cost.item_id');
|
|
|
+
|
|
|
+ return $itemId === $remouldItemId;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理洗髓道具变更
|
|
|
+ *
|
|
|
+ * @param int $userId
|
|
|
+ * @param int $itemId
|
|
|
+ * @param string $changeType
|
|
|
+ * @param int $amount
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ protected function handleRemouldItemChanged(int $userId, int $itemId, string $changeType, int $amount): void
|
|
|
+ {
|
|
|
+ // 如果是添加洗髓道具,可能需要更新UI提示或其他逻辑
|
|
|
+ if ($changeType === 'add') {
|
|
|
+ // 处理添加洗髓道具的逻辑
|
|
|
+ Log::info('用户获得了洗髓道具', [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'item_id' => $itemId,
|
|
|
+ 'amount' => $amount
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果是消耗洗髓道具,可能是进行洗髓操作,需要检查是否通过正确途径消耗
|
|
|
+ if ($changeType === 'remove') {
|
|
|
+ // 处理消耗洗髓道具的逻辑
|
|
|
+ Log::info('用户消耗了洗髓道具', [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'item_id' => $itemId,
|
|
|
+ 'amount' => $amount
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 判断物品是否为其他宠物相关物品
|
|
|
+ *
|
|
|
+ * @param int $itemId
|
|
|
+ * @return bool
|
|
|
+ */
|
|
|
+ protected function isOtherPetItem(int $itemId): bool
|
|
|
+ {
|
|
|
+ // 获取配置中的其他宠物相关物品ID列表
|
|
|
+ $otherPetItems = config('pet.other_pet_items', []);
|
|
|
+
|
|
|
+ return in_array($itemId, $otherPetItems);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理其他宠物相关物品变更
|
|
|
+ *
|
|
|
+ * @param int $userId
|
|
|
+ * @param int $itemId
|
|
|
+ * @param string $changeType
|
|
|
+ * @param int $amount
|
|
|
+ * @return void
|
|
|
+ */
|
|
|
+ protected function handleOtherPetItemChanged(int $userId, int $itemId, string $changeType, int $amount): void
|
|
|
+ {
|
|
|
+ // 处理其他宠物相关物品变更的逻辑
|
|
|
+ Log::info('用户' . ($changeType === 'add' ? '获得' : '消耗') . '了宠物相关物品', [
|
|
|
+ 'user_id' => $userId,
|
|
|
+ 'item_id' => $itemId,
|
|
|
+ 'change_type' => $changeType,
|
|
|
+ 'amount' => $amount
|
|
|
+ ]);
|
|
|
+ }
|
|
|
+}
|