Files
roll-room/doc/开箱玩法/经典开箱/经典开箱饰品分配.md
2026-04-23 16:58:11 +08:00

12 lines
1.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

1.根据用户类型确定使用哪个奖池,普通奖池,补偿奖池,三级爆率奖池,
在再根据宝箱id和用户类型获取锁防止同一个宝箱同一个用户类型的并发抽奖持续10秒重试三次
2.获取三个奖池对象,判断三个奖池是否为空,如果为空,就初始化创建空奖池
3.查询用户是否拥有三级爆率,如果不为空,说明有三级爆率
4.根据是否有三级爆率权限选择使用哪个奖池checkPool() 方法首先查看当前prizePool对象是否有数据
是直接返回否则去redis中查看是否有数据有则将数据加入prizePool对象中
否则去数据库中查询并加入prizePool对象中有三级爆率就使用thirdExplosivePrizePool否则使用prizePool
5.补偿机制,先查询用户的补偿记录是否有值,如果是补偿箱并且没有补偿记录,创建空的补偿记录,如果有补偿记录,查看是否到达补偿阈值,
如果是补偿箱并且补偿值>=阈值,将切换到补偿奖池,并将补偿值清楚,将补偿记录删除
6.执行抽奖的算法doLottery方法箱子里面包含饰品及其数量获取饰品总数量并且随机五次并记录最后一次的值
然后循环每个饰品的位置如果这个位置的值和记录的最后一次的值相同拿到当前饰品的id
如果循环多次没有拿到,就取饰品的第一个(按序给),库存减一