1.修复抽奖档位不统一的问题

This commit is contained in:
2026-06-02 17:04:55 +08:00
parent 13dacc8fdd
commit c0d5258aee
8 changed files with 55 additions and 54 deletions

View File

@@ -187,9 +187,9 @@ class PlayStartLogic
$rollNumber = (int) ($chosen['grid_number'] ?? 0);
$realEv = (float) ($chosen['real_ev'] ?? 0);
// T5/再来一次:以奖励行 tier 为准,并以摇奖档位 $tier 兜底(与 reward_tier 展示一致,避免 dice_reward 行缺 tier 时不发券)
$isTierT5 = (string) ($chosen['tier'] ?? '') === 'T5';
if ($isTierT5 === false && (string) ($tier ?? '') === 'T5') {
$isTierT5 = true;
$isTierPlayAgain = (string) ($chosen['tier'] ?? '') === 'T5';
if ($isTierPlayAgain === false && (string) ($tier ?? '') === 'T5') {
$isTierPlayAgain = true;
}
// 摇色子中奖:按 dice_reward_config.real_ev 直接结算(已乘 ante
$rewardWinCoin = round($realEv * $ante, 2);
@@ -230,7 +230,7 @@ class PlayStartLogic
// 中 BIGWIN 豹子:不走原奖励流程,不记录原奖励,不触发 T5 再来一次,仅发放豹子奖金
$rewardWinCoin = 0.0;
$realEv = 0.0;
$isTierT5 = false;
$isTierPlayAgain = false;
} else {
$rollArray = $this->generateNonSuperWinRollArrayWithSum($rollNumber);
}
@@ -276,7 +276,7 @@ class PlayStartLogic
$startIndex,
$targetIndex,
$rollArray,
$isTierT5,
$isTierPlayAgain,
$tier,
&$record,
&$settledWinCoin
@@ -372,7 +372,7 @@ class PlayStartLogic
// 若本局中奖档位为 T5则额外赠送 1 次免费抽奖次数:
// - 新结构:写入 free_ticketante=本局注数count+1
// - 兼容旧结构free_ticket_count +1
if ($isTierT5) {
if ($isTierPlayAgain) {
$ft = $p->free_ticket ?? null;
$ftAnte = null;
$ftCount = 0;
@@ -654,6 +654,7 @@ class PlayStartLogic
*/
public function simulateOnePlay($config, int $direction, int $lotteryType = 0, int $ante = 1, ?array $customTierWeights = null, ?int $configDeptId = null): array
{
$useKillMode = false;
$rewardInstance = DiceReward::getCachedInstance($configDeptId);
$byTierDirection = $rewardInstance['by_tier_direction'] ?? [];
$maxTierRetry = 10;

View File

@@ -95,7 +95,7 @@ class DiceRewardController extends BaseController
* 一键测试权重:创建测试记录并启动单进程后台执行,写入 dice_play_record_test
* 参数lottery_config_id 可选paid_tier_weights / free_tier_weights 自定义档位;
* paid_s_count, paid_n_count
* chain_free_mode=1仅按付费次数模拟付费抽到再来一次/T5 则在队列中插入免费局同底注、lottery_type=免费、paid_amount=0
* chain_free_mode=1仅按付费次数模拟付费抽到再来一次/T4 则在队列中插入免费局同底注、lottery_type=免费、paid_amount=0
* kill_mode_enabled=1测试内启用杀分当模拟玩家累计盈利达到 test_safety_line 后,付费抽奖切到 killScore
*/
#[Permission('一键测试权重', 'dice:reward:index:startWeightTest')]

View File

@@ -19,7 +19,7 @@ use think\model\relation\BelongsTo;
* @property $player_id 玩家id
* @property $admin_id 关联玩家所属管理员IDDicePlayer.admin_id
* @property $use_coins 消耗硬币
* @property $ante 底注/注数历史购买记录默认为1T5再来一次写入本次注数)
* @property $ante 底注/注数历史购买记录默认为1T4再来一次写入本次注数)
* @property $total_ticket_count 总抽奖次数
* @property $paid_ticket_count 购买抽奖次数
* @property $free_ticket_count 赠送抽奖次数

View File

@@ -83,7 +83,7 @@
其中地图的索引可以按照需求点击图中的按规则生成
并且规则尽可能符合:结算金额>2 → T12>=结算金额>1 → T21>=结算金额>0 → T3结算金额=0 → T4再来一次0>结算金额 → T5惩罚
并且规则尽可能符合:结算金额>2 → T12>=结算金额>1 → T21>=结算金额>0 → T30>结算金额 → T4惩罚);结算金额=0 → T5再来一次
![image.png](/docs/picture/guide_16.png)