| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- <?php
- namespace App\Module\AppGame\Handler\Shop;
- use App\Module\AppGame\Handler\BaseHandler;
- use App\Module\Game\DCache\ShopItemsJsonConfig;
- use App\Module\Shop\Services\ShopService;
- use App\Module\Game\Services\ConsumeGroupService;
- use App\Module\Game\Services\RewardGroupService;
- use App\Module\Game\Enums\CONSUME_TYPE;
- use App\Module\Game\Enums\REWARD_TYPE;
- use Google\Protobuf\Internal\Message;
- use Illuminate\Support\Facades\Log;
- use Uraus\Kku\Common\RewardGod;
- use Uraus\Kku\Common\RewardPets;
- use Uraus\Kku\Response\ShopGoodItem;
- use Uraus\Kku\Common\Deduct;
- use Uraus\Kku\Common\DeductCoin;
- use Uraus\Kku\Common\DeductItem;
- use Uraus\Kku\Common\Reward;
- use Uraus\Kku\Common\RewardItem;
- use Uraus\Kku\Common\RewardCoin;
- use Uraus\Kku\Request\RequestShopQuery;
- use Uraus\Kku\Response\ResponseShopQuery;
- /**
- * 处理商店查询请求
- */
- class QueryHandler extends BaseHandler
- {
- /**
- * 是否需要登录
- *
- * @var bool
- */
- protected bool $need_login = true;
- /**
- * 处理商店查询请求
- *
- * @param RequestShopQuery $data 商店查询请求数据
- * @return ResponseShopQuery 商店查询响应
- */
- public function handle(Message $data): Message
- {
- // 创建响应对象
- $response = new ResponseShopQuery();
- $data = ShopItemsJsonConfig::getData();
- $response->setLastTimes($data['generated_ts']);
- return $response;
- }
- /**
- * 根据缓存的消耗组数据构建Deduct对象
- *
- * @param array $consumeGroupData 消耗组数据
- * @return Deduct|null
- */
- private function buildDeductFromConsumeGroupCached(array $consumeGroupData): ?Deduct
- {
- try {
- if (empty($consumeGroupData['consume_items'])) {
- return null;
- }
- $deduct = new Deduct();
- $deductCoins = [];
- $deductItems = [];
- // 处理每个消耗项
- foreach ($consumeGroupData['consume_items'] as $consumeItem) {
- switch ($consumeItem['consume_type']) {
- case CONSUME_TYPE::CURRENCY->value:
- case CONSUME_TYPE::FUND_CONFIG->value:
- // 货币或账户种类消耗
- $deductCoin = new DeductCoin();
- $deductCoin->setType($consumeItem['target_id']);
- $deductCoin->setQuantity($consumeItem['quantity']);
- $deductCoins[] = $deductCoin;
- break;
- case CONSUME_TYPE::ITEM->value:
- // 物品消耗
- $deductItem = new DeductItem();
- $deductItem->setItemId($consumeItem['target_id']);
- $deductItem->setInstanceId(0); // 通常为0,表示不指定特定实例
- $deductItem->setQuantity($consumeItem['quantity']);
- $deductItems[] = $deductItem;
- break;
- }
- }
- $deduct->setCoins($deductCoins);
- $deduct->setItems($deductItems);
- return $deduct;
- } catch (\Exception $e) {
- Log::error('构建消耗组Deduct对象失败', [
- 'consume_group_data' => $consumeGroupData,
- 'error' => $e->getMessage()
- ]);
- return null;
- }
- }
- /**
- * 根据缓存的奖励组数据构建Reward对象
- *
- * @param array $rewardGroupData 奖励组数据
- * @return Reward|null
- */
- private function buildRewardFromRewardGroupCached(array $rewardGroupData): ?Reward
- {
- try {
- if (empty($rewardGroupData['reward_items'])) {
- return null;
- }
- $reward = new Reward();
- $rewardCoins = [];
- $rewardItems = [];
- $rewardGods = [];
- $rewardPets = [];
- // 处理每个奖励项
- foreach ($rewardGroupData['reward_items'] as $rewardItem) {
- switch ($rewardItem['reward_type']) {
- case REWARD_TYPE::CURRENCY->value:
- case REWARD_TYPE::FUND_CONFIG->value:
- // 货币或账户种类奖励
- $rewardCoin = new RewardCoin();
- $rewardCoin->setType($rewardItem['target_id']);
- $rewardCoin->setQuantity($rewardItem['quantity']);
- $rewardCoins[] = $rewardCoin;
- break;
- case REWARD_TYPE::ITEM->value:
- // 物品奖励
- $rewardItemObj = new RewardItem();
- $rewardItemObj->setItemId($rewardItem['target_id']);
- $rewardItemObj->setQuantity($rewardItem['quantity']);
- $rewardItems[] = $rewardItemObj;
- break;
- case 'GOD_TIMES':
- case 'GOD_STATUS':
- case 'GOD_LEVEL':
- // 神器奖励
- $rewardGod = new RewardGod();
- $rewardGod->setType($rewardItem['reward_type']);
- $rewardGod->setQuantity($rewardItem['quantity']);
- if (isset($rewardItem['diff'])) {
- $rewardGod->setDiff($rewardItem['diff']);
- }
- $rewardGods[] = $rewardGod;
- break;
- case REWARD_TYPE::PET->value:
- case 'PET_STAMINA':
- // 宠物奖励
- $rewardPet = new RewardPets();
- $rewardPet->setQuantity($rewardItem['quantity']);
- $rewardPets[] = $rewardPet;
- break;
- default:
- // 其他类型暂不处理
- // 因为protobuf中可能没有对应的字段
- }
- }
- $reward->setCoins($rewardCoins); // 金币
- $reward->setItems($rewardItems); // 物品
- $reward->setGods($rewardGods); //神像
- $reward->setPets($rewardPets); // 宠物奖励
- $reward->setLands([]); // 土地奖励,暂时为空
- return $reward;
- } catch (\Exception $e) {
- Log::error('构建奖励组Reward对象失败', [
- 'reward_group_data' => $rewardGroupData,
- 'error' => $e->getMessage()
- ]);
- return null;
- }
- }
- }
|