'integer', 'target_id' => 'integer', 'param1' => 'integer', 'param2' => 'integer', 'quantity' => 'integer', 'weight' => 'float', 'probability' => 'float', 'min_quantity' => 'integer', 'max_quantity' => 'integer', 'is_guaranteed' => 'boolean', 'pity_threshold' => 'integer', 'pity_weight_factor' => 'float', 'pity_enabled' => 'boolean', 'extra_data' => 'json', ]; /** * 获取奖励项所属的奖励组 * * @return BelongsTo */ public function rewardGroup(): BelongsTo { return $this->belongsTo(GameRewardGroup::class, 'group_id', 'id'); } /** * 获取奖励类型名称(访问器) * * @return string */ public function getTypeAttribute(): string { return REWARD_TYPE::getName($this->reward_type); } /** * 获取奖励项名称(访问器) * * @return string */ public function getNameAttribute(): string { return $this->getTargetName(); } /** * 获取目标名称 * * @return string */ public function getTargetName(): string { return \App\Module\Game\Services\RewardTypeDescriptor::getTargetNameFromModel($this); } /** * 转换为 Reward protobuf 对象 * * @return \Uraus\Kku\Common\Reward */ public function toRewardObject(): \Uraus\Kku\Common\Reward { $reward = new \Uraus\Kku\Common\Reward(); switch ($this->reward_type) { case REWARD_TYPE::ITEM->value: // 创建物品奖励对象 if ($this->min_quantity) { $rewardItem = new \Uraus\Kku\Common\RewardItem([ 'item_id' => $this->target_id, 'instance_id' => 0, // 默认为0,表示不指定实例 'min_quantity' => $this->min_quantity, 'max_quantity' => $this->max_quantity, ]); } else { $rewardItem = new \Uraus\Kku\Common\RewardItem([ 'item_id' => $this->target_id, 'instance_id' => 0, // 默认为0,表示不指定实例 'quantity' => $this->quantity, ]); } $reward->setItems([ $rewardItem ]); break; case REWARD_TYPE::CURRENCY->value: case REWARD_TYPE::FUND_CONFIG->value: // 创建代币奖励对象 if ($this->min_quantity) { $rewardCoin = new \Uraus\Kku\Common\RewardCoin([ 'type' => $this->target_id, 'min_quantity' => $this->min_quantity, 'max_quantity' => $this->max_quantity, ]); } else { $rewardCoin = new \Uraus\Kku\Common\RewardCoin([ 'type' => $this->target_id, 'quantity' => $this->quantity, ]); } $reward->setCoins([ $rewardCoin ]); break; case REWARD_TYPE::PET->value: // 创建宠物奖励对象 $rewardPet = new \Uraus\Kku\Common\RewardPets([ 'pet_type' => $this->target_id, 'quantity' => $this->quantity, ]); $reward->setPets([ $rewardPet ]); break; case REWARD_TYPE::PET_POWER->value: case REWARD_TYPE::PET_ENERGY->value: // 创建宠物体力奖励对象 $rewardPetPower = new \Uraus\Kku\Common\RewardPetPowers([ 'pet_id' => $this->target_id, 'quantity' => $this->max_quantity ?: $this->quantity, ]); $reward->setPetPowers([ $rewardPetPower ]); break; case REWARD_TYPE::FARM_SHRINE->value: // 创建神像奖励对象 $rewardGod = new \Uraus\Kku\Common\RewardGod([ 'type' => $this->target_id, 'diff' => $this->param2 ?: 3600, // 默认1小时 'quantity' => $this->quantity, ]); $reward->setGods([ $rewardGod ]); break; case REWARD_TYPE::SKIN->value: // 皮肤奖励 $rewardSkin = new \Uraus\Kku\Common\RewardSkin([ 'id' => $this->target_id, 'quantity' => $this->quantity ]); $reward->setSkins([ $rewardSkin ]); break; } return $reward; } }