diff --git a/comm/core.go b/comm/core.go index 53f909092..8253e28e7 100644 --- a/comm/core.go +++ b/comm/core.go @@ -110,6 +110,21 @@ func GetRandW(sz []int32) int32 { return 0 } +func RandShuffle(leng int) []int { + if leng < 0 { + return make([]int, 0) + } + slist := make([]int, leng) + for i, _ := range slist { + slist[i] = i + } + for i := leng - 1; i > 0; i-- { + j, _ := rand.Int(rand.Reader, big.NewInt(int64(i+1))) + slist[i], slist[j.Int64()] = slist[j.Int64()], slist[i] + } + return slist +} + func GetRandNum(min, max int32) int32 { if max < min { return 0 diff --git a/modules/equipment/api_equip.go b/modules/equipment/api_equip.go index 3a38e6dc6..926136d68 100644 --- a/modules/equipment/api_equip.go +++ b/modules/equipment/api_equip.go @@ -218,13 +218,14 @@ func (this *apiComp) Equip(session comm.IUserSession, req *pb.EquipmentEquipReq) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype46, 1, hero.Suite1Star, hero.SuiteId)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype49, 1, hero.Suite1Star, hero.Suite1Lv)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype98, 1, hero.Suite1Lv)) - tasks = append(tasks, comm.GetBuriedParam(comm.Rtype169, hero.SuiteId)) + tasks = append(tasks, comm.GetBuriedParam(comm.Rtype169, 1, hero.SuiteId)) } if hero.SuiteExtId != 0 { tasks = append(tasks, comm.GetBuriedParam(comm.Rtype46, 1, hero.Suite2Star, hero.SuiteExtId)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype48, 1, hero.Suite2Star, hero.Suite2Lv)) tasks = append(tasks, comm.GetBuriedParam(comm.Rtype98, 1, hero.Suite1Lv)) + tasks = append(tasks, comm.GetBuriedParam(comm.Rtype169, 1, hero.SuiteId)) } if len(tasks) > 0 { diff --git a/modules/equipment/modelEquipment.go b/modules/equipment/modelEquipment.go index d036fe702..c63ae0003 100644 --- a/modules/equipment/modelEquipment.go +++ b/modules/equipment/modelEquipment.go @@ -1,15 +1,15 @@ package equipment import ( + "crypto/rand" "fmt" "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/modules" "go_dreamfactory/pb" - "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" "go_dreamfactory/sys/db" - "math/rand" + "math/big" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" @@ -249,12 +249,11 @@ func (this *modelEquipmentComp) UpdateByHeroId(uid string, equipments ...*pb.DB_ //创建新的武器对象 func (this *modelEquipmentComp) newEquipment(uid string, conf *cfg.GameEquipData, dyweight []int32, isepic bool) (equipment *pb.DB_Equipment, err error) { var ( - r *rand.Rand mattr []*cfg.GameEquipAttrlibrarySData sattr []*cfg.GameEquipAttrlibrarySData equipatt *cfg.GameEquipAttributeData weight []int32 - total int + total int64 maxindex int satterNum int32 ) @@ -289,7 +288,6 @@ func (this *modelEquipmentComp) newEquipment(uid string, conf *cfg.GameEquipData break } } - r = rand.New(rand.NewSource(configure.Now().UnixNano())) if !isepic { weight = make([]int32, len(conf.Addattrnump)) for i, v := range conf.Addattrnump { @@ -301,11 +299,11 @@ func (this *modelEquipmentComp) newEquipment(uid string, conf *cfg.GameEquipData } } for _, v := range weight { - total += int(v) + total += int64(v) } - n := r.Intn(total) + result, _ := rand.Int(rand.Reader, big.NewInt(total)) for i, v := range weight { - if int32(n) <= v { + if int32(result.Int64()) <= v { satterNum = conf.Addattrnum[i] break } @@ -331,7 +329,7 @@ func (this *modelEquipmentComp) newEquipment(uid string, conf *cfg.GameEquipData if conf.EquipId == 1 { equipment.AdverbEntry = make([]*pb.EquipmentAttributeEntry, 0) - for _, v := range r.Perm(len(sattr))[:satterNum] { + for _, v := range comm.RandShuffle(len(sattr))[:satterNum] { equipment.AdverbEntry = append(equipment.AdverbEntry, &pb.EquipmentAttributeEntry{ Id: sattr[v].Key, Libraryid: sattr[v].Libraryid, @@ -343,7 +341,7 @@ func (this *modelEquipmentComp) newEquipment(uid string, conf *cfg.GameEquipData } } else { equipment.Adverbskill = make([]*pb.EquipmentSkillEntry, 0) - for _, v := range r.Perm(len(sattr))[:satterNum] { + for _, v := range comm.RandShuffle(len(sattr))[:satterNum] { if equipatt, err = this.module.configure.getEquipAttribute(sattr[v].Attrkey); err != nil { return } @@ -397,8 +395,7 @@ func (this *modelEquipmentComp) upgradeEquipment(equipment *pb.DB_Equipment, equ } } if len(sattr) > 0 { - r := rand.New(rand.NewSource(configure.Now().Unix())) - index := r.Perm(len(sattr))[0] + index := comm.RandShuffle(len(sattr))[0] if equip.EquipId == 1 { equipment.AdverbEntry = append(equipment.AdverbEntry, &pb.EquipmentAttributeEntry{ Id: sattr[index].Key, @@ -431,8 +428,7 @@ func (this *modelEquipmentComp) upgradeEquipment(equipment *pb.DB_Equipment, equ return } var attrlibrary *cfg.GameEquipAttrlibrarySData - r := rand.New(rand.NewSource(configure.Now().Unix())) - index := r.Perm(len(equipment.AdverbEntry))[0] + index := comm.RandShuffle(len(equipment.AdverbEntry))[0] if attrlibrary, err = this.module.configure.GetEquipmentAttrlibraryConfigureByKey(equipment.AdverbEntry[index].Id); err != nil { return } @@ -442,8 +438,7 @@ func (this *modelEquipmentComp) upgradeEquipment(equipment *pb.DB_Equipment, equ } equipment.AdverbEntry[index].Lv++ } else { - r := rand.New(rand.NewSource(configure.Now().Unix())) - index := r.Perm(len(equipment.Adverbskill))[0] + index := comm.RandShuffle(len(equipment.Adverbskill))[0] equipment.Adverbskill[index].Lv++ } return diff --git a/modules/worldtask/model_worldtask.go b/modules/worldtask/model_worldtask.go index 35639f8f5..5661e5d40 100644 --- a/modules/worldtask/model_worldtask.go +++ b/modules/worldtask/model_worldtask.go @@ -222,6 +222,7 @@ func (this *ModelWorldtask) taskFinishPush(session comm.IUserSession, userTask * // 章节完成 if _, ok := userTask.Chapters[curTaskConf.Group]; !ok { delete(userTask.CurrentTasks, curTaskConf.Group) + delete(nextTask, curTaskConf.Group) if userTask.Chapters == nil { userTask.Chapters = make(map[int32]int32) }