diff --git a/worldsrv/welfmgr.go b/worldsrv/welfmgr.go index 3d9432a..00bb254 100644 --- a/worldsrv/welfmgr.go +++ b/worldsrv/welfmgr.go @@ -2363,7 +2363,7 @@ func (this *WelfareMgr) GetRedPacket(p *Player, id int64) *welfare.SCRedPacketDr // 记录参与次数 if id == 0 { for _, v := range this.GetConfig(p.Platform).RedPacketConfig.GetList() { - if v.GetOn() == common.On && now >= common.IntToTime(int(v.GetStartHMS())).Unix() || now < common.IntToTime(int(v.GetEndHMS())).Unix() { + if v.GetOn() == common.On && now >= common.IntToTime(int(v.GetStartHMS())).Unix() && now < common.IntToTime(int(v.GetEndHMS())).Unix() { if p.WelfData.RedPacket[v.GetId()] == nil { p.WelfData.RedPacket[v.GetId()] = &model.RedPacketData{} } @@ -2412,10 +2412,10 @@ func (this *WelfareMgr) GetRedPacket(p *Player, id int64) *welfare.SCRedPacketDr if remain <= 0 || (playerLimit > 0 && playerRN >= playerLimit) { // 空奖 } else { - f := func() { + f := func(total int64) { // 概率抽奖 rate := 0 - n := rand.Int63n(10000) + n := rand.Int63n(total) for _, v := range cfg.GetRedList() { rate += int(v.GetRate()) if n < int64(rate) { @@ -2427,23 +2427,22 @@ func (this *WelfareMgr) GetRedPacket(p *Player, id int64) *welfare.SCRedPacketDr if cfg.GetMaxCount() > 0 { // 保底计算 if data.RN >= cfg.GetLessCount() { - f() + f(10000) } else { sub := cfg.GetLessCount() - data.RN if cfg.GetMaxCount()-data.N <= sub { // 必中 - for i := 0; i < 1000; i++ { - f() - if reward > 0 { - break - } + var total int64 + for _, v := range cfg.GetRedList() { + total += v.GetRate() } + f(total) } else { - f() + f(10000) } } } else { - f() + f(10000) } }