随机三种物品,A 10% 1-10个 未命中没有;B 30% 5-20个 未命中没有;C 必中 10-50个
概率机制缺失:
数量范围不支持:
独立判断缺失:
game_reward_items表:
probability - 获得概率(百分比,0-100)min_quantity - 最小数量max_quantity - 最大数量game_reward_groups表:
reward_mode - 奖励模式(1:权重选择, 2:独立概率)-- 执行 database/sql/upgrade_reward_system_for_probability.sql
ALTER TABLE `kku_game_reward_items`
ADD COLUMN `probability` decimal(5,2) DEFAULT NULL,
ADD COLUMN `min_quantity` int DEFAULT NULL,
ADD COLUMN `max_quantity` int DEFAULT NULL;
ALTER TABLE `kku_game_reward_groups`
ADD COLUMN `reward_mode` tinyint DEFAULT 1;
REWARD_MODE - 奖励模式枚举GameRewardGroup - 添加reward_mode字段GameRewardItem - 添加probability、min_quantity、max_quantity字段RewardGroupDto - 添加rewardMode属性RewardItemDto - 添加probability、minQuantity、maxQuantity属性RewardLogic - 新增独立概率模式处理逻辑private function determineRewardItemsByProbability(array $items): array
{
$selectedItems = [];
foreach ($items as $item) {
// 必中项直接添加
if ($item->isGuaranteed) {
$selectedItems[] = $this->processRewardItemQuantity($item);
continue;
}
// 概率判断
$probability = $item->probability ?? 0;
if ($probability <= 0) continue;
$random = mt_rand(1, 10000) / 100; // 0.01-100.00
if ($random <= $probability) {
$selectedItems[] = $this->processRewardItemQuantity($item);
}
// 未命中则不添加(实现"未命中没有")
}
return $selectedItems;
}
private function processRewardItemQuantity(RewardItemDto $item): RewardItemDto
{
$processedItem = clone $item;
// 检查数量范围
if ($item->minQuantity !== null && $item->maxQuantity !== null) {
$minQty = max(1, $item->minQuantity);
$maxQty = max($minQty, $item->maxQuantity);
$processedItem->quantity = mt_rand($minQty, $maxQty);
} else {
$processedItem->quantity = max(1, $item->quantity);
}
return $processedItem;
}
独立概率判断 ✅
数量范围 ✅
未命中没有 ✅
必中机制 ✅
// 发放奖励
$result = RewardService::grantReward(
userId: 1001,
groupIdOrCode: 'random_three_items',
sourceType: 'test',
sourceId: 1
);
// 可能的结果:
// 1. 只获得C(63%概率)
// 2. 获得A和C(7%概率)
// 3. 获得B和C(27%概率)
// 4. 获得A、B、C(3%概率)
现有奖励组继续工作:
渐进式升级:
数据完整性:
支持更多奖励模式:
灵活配置:
性能优化:
upgrade_reward_system_for_probability.sql - 数据库升级脚本REWARD_MODE.php - 奖励模式枚举奖励组系统_独立概率模式使用示例.md - 详细使用示例✅ 完全满足需求:独立概率、数量范围、未命中没有、必中机制 ✅ 保持兼容性:现有功能不受影响 ✅ 提升灵活性:支持更复杂的奖励配置 ✅ 优化性能:独立概率模式更高效 ✅ 便于维护:代码结构清晰,文档完善
奖励组系统现在完全支持您的需求,并且具备了更强的灵活性和扩展性!