上传装备产出随机

This commit is contained in:
liwei1dao 2023-06-08 22:02:56 +08:00
parent 50a630dc7a
commit 73ced03a17
2 changed files with 26 additions and 16 deletions

View File

@ -110,6 +110,21 @@ func GetRandW(sz []int32) int32 {
return 0 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 { func GetRandNum(min, max int32) int32 {
if max < min { if max < min {
return 0 return 0

View File

@ -1,15 +1,15 @@
package equipment package equipment
import ( import (
"crypto/rand"
"fmt" "fmt"
"go_dreamfactory/comm" "go_dreamfactory/comm"
"go_dreamfactory/lego/core" "go_dreamfactory/lego/core"
"go_dreamfactory/modules" "go_dreamfactory/modules"
"go_dreamfactory/pb" "go_dreamfactory/pb"
"go_dreamfactory/sys/configure"
cfg "go_dreamfactory/sys/configure/structs" cfg "go_dreamfactory/sys/configure/structs"
"go_dreamfactory/sys/db" "go_dreamfactory/sys/db"
"math/rand" "math/big"
"go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo" "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) { func (this *modelEquipmentComp) newEquipment(uid string, conf *cfg.GameEquipData, dyweight []int32, isepic bool) (equipment *pb.DB_Equipment, err error) {
var ( var (
r *rand.Rand
mattr []*cfg.GameEquipAttrlibrarySData mattr []*cfg.GameEquipAttrlibrarySData
sattr []*cfg.GameEquipAttrlibrarySData sattr []*cfg.GameEquipAttrlibrarySData
equipatt *cfg.GameEquipAttributeData equipatt *cfg.GameEquipAttributeData
weight []int32 weight []int32
total int total int64
maxindex int maxindex int
satterNum int32 satterNum int32
) )
@ -289,7 +288,6 @@ func (this *modelEquipmentComp) newEquipment(uid string, conf *cfg.GameEquipData
break break
} }
} }
r = rand.New(rand.NewSource(configure.Now().UnixNano()))
if !isepic { if !isepic {
weight = make([]int32, len(conf.Addattrnump)) weight = make([]int32, len(conf.Addattrnump))
for i, v := range 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 { 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 { for i, v := range weight {
if int32(n) <= v { if int32(result.Int64()) <= v {
satterNum = conf.Addattrnum[i] satterNum = conf.Addattrnum[i]
break break
} }
@ -331,7 +329,7 @@ func (this *modelEquipmentComp) newEquipment(uid string, conf *cfg.GameEquipData
if conf.EquipId == 1 { if conf.EquipId == 1 {
equipment.AdverbEntry = make([]*pb.EquipmentAttributeEntry, 0) 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{ equipment.AdverbEntry = append(equipment.AdverbEntry, &pb.EquipmentAttributeEntry{
Id: sattr[v].Key, Id: sattr[v].Key,
Libraryid: sattr[v].Libraryid, Libraryid: sattr[v].Libraryid,
@ -343,7 +341,7 @@ func (this *modelEquipmentComp) newEquipment(uid string, conf *cfg.GameEquipData
} }
} else { } else {
equipment.Adverbskill = make([]*pb.EquipmentSkillEntry, 0) 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 { if equipatt, err = this.module.configure.getEquipAttribute(sattr[v].Attrkey); err != nil {
return return
} }
@ -397,8 +395,7 @@ func (this *modelEquipmentComp) upgradeEquipment(equipment *pb.DB_Equipment, equ
} }
} }
if len(sattr) > 0 { if len(sattr) > 0 {
r := rand.New(rand.NewSource(configure.Now().Unix())) index := comm.RandShuffle(len(sattr))[0]
index := r.Perm(len(sattr))[0]
if equip.EquipId == 1 { if equip.EquipId == 1 {
equipment.AdverbEntry = append(equipment.AdverbEntry, &pb.EquipmentAttributeEntry{ equipment.AdverbEntry = append(equipment.AdverbEntry, &pb.EquipmentAttributeEntry{
Id: sattr[index].Key, Id: sattr[index].Key,
@ -431,8 +428,7 @@ func (this *modelEquipmentComp) upgradeEquipment(equipment *pb.DB_Equipment, equ
return return
} }
var attrlibrary *cfg.GameEquipAttrlibrarySData var attrlibrary *cfg.GameEquipAttrlibrarySData
r := rand.New(rand.NewSource(configure.Now().Unix())) index := comm.RandShuffle(len(equipment.AdverbEntry))[0]
index := r.Perm(len(equipment.AdverbEntry))[0]
if attrlibrary, err = this.module.configure.GetEquipmentAttrlibraryConfigureByKey(equipment.AdverbEntry[index].Id); err != nil { if attrlibrary, err = this.module.configure.GetEquipmentAttrlibraryConfigureByKey(equipment.AdverbEntry[index].Id); err != nil {
return return
} }
@ -442,8 +438,7 @@ func (this *modelEquipmentComp) upgradeEquipment(equipment *pb.DB_Equipment, equ
} }
equipment.AdverbEntry[index].Lv++ equipment.AdverbEntry[index].Lv++
} else { } else {
r := rand.New(rand.NewSource(configure.Now().Unix())) index := comm.RandShuffle(len(equipment.Adverbskill))[0]
index := r.Perm(len(equipment.Adverbskill))[0]
equipment.Adverbskill[index].Lv++ equipment.Adverbskill[index].Lv++
} }
return return