| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- <?php
- namespace App\Module\GameItems\Logics;
- use App\Module\GameItems\Models\ItemChestContent;
- /**
- * 宝箱内容逻辑类
- */
- class ChestContent
- {
- /**
- * 判断是否为物品组内容
- *
- * @param ItemChestContent $content 宝箱内容
- * @return bool
- */
- public function isGroupContent(ItemChestContent $content): bool
- {
- return !empty($content->group_id);
- }
- /**
- * 获取随机数量
- *
- * @param ItemChestContent $content 宝箱内容
- * @return int
- */
- public function getRandomQuantity(ItemChestContent $content): int
- {
- if ($content->min_quantity == $content->max_quantity) {
- return $content->min_quantity;
- }
- return mt_rand($content->min_quantity, $content->max_quantity);
- }
- /**
- * 计算调整后的权重(考虑保底机制)
- *
- * @param ItemChestContent $content 宝箱内容
- * @param int $currentPityCount 当前保底计数
- * @return float
- */
- public function getAdjustedWeight(ItemChestContent $content, int $currentPityCount = 0): float
- {
- if (empty($content->pity_count) || $currentPityCount <= 0) {
- return $content->weight;
- }
- // 如果达到保底次数,返回极大值确保必定获得
- if ($currentPityCount >= $content->pity_count) {
- return 999999.999;
- }
- // 计算权重调整因子
- $pityFactor = ($currentPityCount / $content->pity_count) * $content->pity_weight_factor;
- // 返回调整后的权重
- return $content->weight * (1 + $pityFactor);
- }
- }
|