diff --git a/modules/equipment/core.go b/modules/equipment/core.go index 88cf55362..d6bd6a78a 100644 --- a/modules/equipment/core.go +++ b/modules/equipment/core.go @@ -12,5 +12,12 @@ func CloneEquipment(equipment *pb.DB_Equipment) *pb.DB_Equipment { OverlayNum: equipment.OverlayNum, IsInitialState: equipment.IsInitialState, } + temp.MainEntry = &pb.EquipmentAttributeEntry{ + Id: equipment.MainEntry.Id, + Libraryid: equipment.MainEntry.Libraryid, + Lv: equipment.MainEntry.Lv, + Value: equipment.MainEntry.Value, + } + return temp } diff --git a/modules/equipment/model_equipment_comp.go b/modules/equipment/model_equipment_comp.go index 93b1335d7..13ad347cb 100644 --- a/modules/equipment/model_equipment_comp.go +++ b/modules/equipment/model_equipment_comp.go @@ -6,6 +6,8 @@ import ( "go_dreamfactory/modules" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" + "math/rand" + "time" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo" @@ -109,7 +111,10 @@ func (this *Model_Equipment_Comp) Equipment_UpdateIsEquip(uid string, equipments //创建新的武器对象 func (this *Model_Equipment_Comp) newEquipment(uid string, conf *cfg.Game_equipData, num uint32) (equipment *pb.DB_Equipment, err error) { var ( - mattr []*cfg.Game_equipAttrlibraryData + mattr []*cfg.Game_equipAttrlibraryData + sattr []*cfg.Game_equipAttrlibraryData + total int + satterNum int32 ) equipment = &pb.DB_Equipment{ Id: primitive.NewObjectID().Hex(), @@ -117,6 +122,7 @@ func (this *Model_Equipment_Comp) newEquipment(uid string, conf *cfg.Game_equipD UId: uid, OverlayNum: num, IsInitialState: true, + AdverbEntry: make([]*pb.EquipmentAttributeEntry, 4), } if mattr, err = this.module.configure_comp.GetEquipmentAttrlibraryConfigureById(conf.Leadlibrary); err != nil || len(mattr) == 0 { return @@ -128,5 +134,32 @@ func (this *Model_Equipment_Comp) newEquipment(uid string, conf *cfg.Game_equipD AttrName: mattr[0].Attr[0], Value: 0, } + if sattr, err = this.module.configure_comp.GetEquipmentAttrlibraryConfigureById(conf.Addlibrary); err != nil || len(mattr) == 0 { + return + } + + for _, v := range conf.Addattrnump { + total += int(v) + } + n := rand.Intn(total) + for i, v := range conf.Addattrnump { + if int32(n) <= v { + satterNum = conf.Addattrnum[i] + break + } + } + if satterNum > 0 { + r := rand.New(rand.NewSource(time.Now().Unix())) + for i, v := range r.Perm(len(sattr))[:satterNum] { + equipment.AdverbEntry[i] = &pb.EquipmentAttributeEntry{ + Id: sattr[v].Key, + Libraryid: sattr[v].Libraryid, + Lv: 0, + AttrName: sattr[v].Attr[0], + Value: 0, + } + } + } + return }