| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247 |
- <?php
- namespace App\Module\Game\Services;
- use App\Module\Game\Dtos\ConsumeGroupDto;
- use App\Module\Game\Dtos\ConsumeItemDto;
- use App\Module\Game\Dtos\RewardGroupDto;
- use App\Module\Game\Dtos\RewardItemDto;
- use App\Module\Game\Enums\CONSUME_TYPE;
- use App\Module\Game\Enums\REWARD_TYPE;
- use Uraus\Kku\Common\Deduct;
- use Uraus\Kku\Common\DeductCoin;
- use Uraus\Kku\Common\DeductItem;
- use Uraus\Kku\Common\Reward;
- use Uraus\Kku\Common\RewardCoin;
- use Uraus\Kku\Common\RewardItem;
- use Uraus\Kku\Common\RewardGod;
- use Uraus\Kku\Common\RewardPets;
- use Uraus\Kku\Common\RewardPetPowers;
- use Uraus\Kku\Common\RewardSkin;
- /**
- * Protobuf转换器
- *
- * 负责将DTO对象转换为Protobuf对象
- */
- class ProtobufConverter
- {
- /**
- * 将消耗组DTO转换为Protobuf Deduct对象
- *
- * @param ConsumeGroupDto $consumeGroupDto 消耗组DTO
- * @return Deduct Protobuf Deduct对象
- */
- public static function convertConsumeGroupToDeduct(ConsumeGroupDto $consumeGroupDto): Deduct
- {
- $deduct = new Deduct();
- $coins = [];
- $items = [];
- foreach ($consumeGroupDto->items as $item) {
- switch ($item->consumeType) {
- case CONSUME_TYPE::ITEM->value:
- $deductItem = new DeductItem();
- $deductItem->setItemId($item->targetId);
- $deductItem->setInstanceId(0); // 默认为0,表示不指定实例
- $deductItem->setQuantity($item->quantity);
- $items[] = $deductItem;
- break;
- case CONSUME_TYPE::CURRENCY->value:
- case CONSUME_TYPE::FUND_CONFIG->value:
- case CONSUME_TYPE::FUND_CONFIGS->value:
- $deductCoin = new DeductCoin();
- $deductCoin->setType($item->targetId);
- $deductCoin->setQuantity($item->quantity);
- $coins[] = $deductCoin;
- break;
- }
- }
- $deduct->setCoins($coins);
- $deduct->setItems($items);
- return $deduct;
- }
- /**
- * 将奖励组DTO转换为Protobuf Reward对象
- *
- * @param RewardGroupDto $rewardGroupDto 奖励组DTO
- * @return Reward Protobuf Reward对象
- */
- public static function convertRewardGroupToReward(RewardGroupDto $rewardGroupDto): Reward
- {
- $reward = new Reward();
- $coins = [];
- $items = [];
- $gods = [];
- $pets = [];
- $petPowers = [];
- $skins = [];
- foreach ($rewardGroupDto->items as $item) {
- switch ($item->rewardType) {
- case REWARD_TYPE::ITEM->value:
- $rewardItem = new RewardItem();
- $rewardItem->setItemId($item->targetId);
- $rewardItem->setInstanceId(0); // 默认为0
- $rewardItem->setQuantity($item->quantity);
-
- // 设置随机数量范围(用于奖励预览)
- if ($item->minQuantity !== null && $item->maxQuantity !== null) {
- $rewardItem->setMinQuantity($item->minQuantity);
- $rewardItem->setMaxQuantity($item->maxQuantity);
- } else {
- $rewardItem->setMinQuantity($item->quantity);
- $rewardItem->setMaxQuantity($item->quantity);
- }
-
- $items[] = $rewardItem;
- break;
- case REWARD_TYPE::CURRENCY->value:
- case REWARD_TYPE::FUND_CONFIG->value:
- $rewardCoin = new RewardCoin();
- $rewardCoin->setType($item->targetId);
- $rewardCoin->setQuantity($item->quantity);
- $coins[] = $rewardCoin;
- break;
- case REWARD_TYPE::FARM_SHRINE->value:
- $rewardGod = new RewardGod();
- $rewardGod->setType($item->targetId);
- // 将小时转换为秒
- $durationHours = $item->param2 > 0 ? $item->param2 : 24; // 默认24小时
- $rewardGod->setDiff($durationHours * 3600); // 转换为秒
- $rewardGod->setQuantity($item->quantity);
- $gods[] = $rewardGod;
- break;
- case REWARD_TYPE::PET->value:
- $rewardPet = new RewardPets();
- $rewardPet->setPetType($item->targetId);
- $rewardPet->setQuantity($item->quantity);
- $pets[] = $rewardPet;
- break;
- case REWARD_TYPE::PET_POWER->value:
- $rewardPetPower = new RewardPetPowers();
- $rewardPetPower->setPetId($item->targetId);
- $rewardPetPower->setQuantity($item->quantity);
- $petPowers[] = $rewardPetPower;
- break;
- case REWARD_TYPE::SKIN->value:
- $rewardSkin = new RewardSkin();
- $rewardSkin->setId($item->targetId);
- $rewardSkin->setQuantity($item->quantity);
- $skins[] = $rewardSkin;
- break;
- }
- }
- $reward->setCoins($coins);
- $reward->setItems($items);
- $reward->setGods($gods);
- $reward->setPets($pets);
- $reward->setPetPowers($petPowers);
- $reward->setSkins($skins);
- return $reward;
- }
- /**
- * 将单个消耗项DTO转换为对应的Protobuf对象
- *
- * @param ConsumeItemDto $consumeItemDto 消耗项DTO
- * @return DeductCoin|DeductItem|null 对应的Protobuf对象
- */
- public static function convertConsumeItemToProtobuf(ConsumeItemDto $consumeItemDto)
- {
- switch ($consumeItemDto->consumeType) {
- case CONSUME_TYPE::ITEM->value:
- $deductItem = new DeductItem();
- $deductItem->setItemId($consumeItemDto->targetId);
- $deductItem->setInstanceId(0);
- $deductItem->setQuantity($consumeItemDto->quantity);
- return $deductItem;
- case CONSUME_TYPE::CURRENCY->value:
- case CONSUME_TYPE::FUND_CONFIG->value:
- case CONSUME_TYPE::FUND_CONFIGS->value:
- $deductCoin = new DeductCoin();
- $deductCoin->setType($consumeItemDto->targetId);
- $deductCoin->setQuantity($consumeItemDto->quantity);
- return $deductCoin;
- default:
- return null;
- }
- }
- /**
- * 将单个奖励项DTO转换为对应的Protobuf对象
- *
- * @param RewardItemDto $rewardItemDto 奖励项DTO
- * @return RewardCoin|RewardItem|RewardGod|RewardPets|RewardPetPowers|RewardSkin|null 对应的Protobuf对象
- */
- public static function convertRewardItemToProtobuf(RewardItemDto $rewardItemDto)
- {
- switch ($rewardItemDto->rewardType) {
- case REWARD_TYPE::ITEM->value:
- $rewardItem = new RewardItem();
- $rewardItem->setItemId($rewardItemDto->targetId);
- $rewardItem->setInstanceId(0);
- $rewardItem->setQuantity($rewardItemDto->quantity);
-
- if ($rewardItemDto->minQuantity !== null && $rewardItemDto->maxQuantity !== null) {
- $rewardItem->setMinQuantity($rewardItemDto->minQuantity);
- $rewardItem->setMaxQuantity($rewardItemDto->maxQuantity);
- } else {
- $rewardItem->setMinQuantity($rewardItemDto->quantity);
- $rewardItem->setMaxQuantity($rewardItemDto->quantity);
- }
-
- return $rewardItem;
- case REWARD_TYPE::CURRENCY->value:
- case REWARD_TYPE::FUND_CONFIG->value:
- $rewardCoin = new RewardCoin();
- $rewardCoin->setType($rewardItemDto->targetId);
- $rewardCoin->setQuantity($rewardItemDto->quantity);
- return $rewardCoin;
- case REWARD_TYPE::FARM_SHRINE->value:
- $rewardGod = new RewardGod();
- $rewardGod->setType($rewardItemDto->targetId);
- // 将小时转换为秒
- $durationHours = $rewardItemDto->param2 > 0 ? $rewardItemDto->param2 : 24; // 默认24小时
- $rewardGod->setDiff($durationHours * 3600); // 转换为秒
- $rewardGod->setQuantity($rewardItemDto->quantity);
- return $rewardGod;
- case REWARD_TYPE::PET->value:
- $rewardPet = new RewardPets();
- $rewardPet->setPetType($rewardItemDto->targetId);
- $rewardPet->setQuantity($rewardItemDto->quantity);
- return $rewardPet;
- case REWARD_TYPE::PET_POWER->value:
- $rewardPetPower = new RewardPetPowers();
- $rewardPetPower->setPetId($rewardItemDto->targetId);
- $rewardPetPower->setQuantity($rewardItemDto->quantity);
- return $rewardPetPower;
- case REWARD_TYPE::SKIN->value:
- $rewardSkin = new RewardSkin();
- $rewardSkin->setId($rewardItemDto->targetId);
- $rewardSkin->setQuantity($rewardItemDto->quantity);
- return $rewardSkin;
- default:
- return null;
- }
- }
- }
|