From 73ced03a17b573282ea2219d82810c59ef814d0e Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Thu, 8 Jun 2023 22:02:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E8=A3=85=E5=A4=87=E4=BA=A7?= =?UTF-8?q?=E5=87=BA=E9=9A=8F=E6=9C=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- comm/core.go | 15 +++++++++++++++ modules/equipment/modelEquipment.go | 27 +++++++++++---------------- 2 files changed, 26 insertions(+), 16 deletions(-) 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/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