diff --git a/common/utils/tomap.go b/common/utils/tomap.go index e6f756f97..eaa779cf9 100644 --- a/common/utils/tomap.go +++ b/common/utils/tomap.go @@ -84,3 +84,18 @@ func RandomSlice[T any](slice []T, n int) []T { return result } + +// T: 切片元素类型(必须是可比较类型,满足map键的要求) +// 返回值:map[T]int - 键为切片元素,值为对应出现次数 +func CountSliceElements[T comparable](slice []T) map[T]int { + // 初始化map,预设容量为切片长度(优化性能) + countMap := make(map[T]int, len(slice)) + + // 遍历切片,统计每个元素的出现次数 + for _, v := range slice { + // 若元素已存在,值+1;不存在则自动初始化为0后+1 + countMap[v]++ + } + + return countMap +} diff --git a/logic/controller/pet_fusion.go b/logic/controller/pet_fusion.go index f2cfbf9d2..882b4f2fa 100644 --- a/logic/controller/pet_fusion.go +++ b/logic/controller/pet_fusion.go @@ -63,6 +63,8 @@ func (h Controller) PetFusion(data *pet.C2S_PetFusion, c *player.Player) (result } //c.Service.Item.UPDATEM(data.Item1[:], -1) + // utils.CountSliceElements(data.Item1[:]) + for _, v := range data.Item1 { c.Service.Item.UPDATE(v, -1) diff --git a/modules/config/model/map_pit.go b/modules/config/model/map_pit.go index 937ebddf5..9455cd2d6 100644 --- a/modules/config/model/map_pit.go +++ b/modules/config/model/map_pit.go @@ -31,9 +31,9 @@ type MapPit struct { RefreshID []int `gorm:"type:int[];comment:'精灵ID列表'" json:"refresh_id"` Pos []int `gorm:"type:int[];comment:'坑位位置'" json:"pos"` //最小等级 - MinLevel int `gorm:"type:int;default:0;comment:'最小等级'" json:"min_level"` + MinLevel int `gorm:"type:int;not null;default:1;comment:'最小等级'" json:"min_level"` //最大等级 - MaxLevel int `gorm:"type:int;default:0;comment:'最大等级'" json:"max_level"` + MaxLevel int `gorm:"type:int;not null;default:1;comment:'最大等级'" json:"max_level"` //是否可捕捉MapPit IsCapture int `gorm:"type:int;default:0;comment:'是否可捕捉'" json:"is_capture"` } diff --git a/modules/player/service/item.go b/modules/player/service/item.go index 1d0b8ef72..de883ad6c 100644 --- a/modules/player/service/item.go +++ b/modules/player/service/item.go @@ -59,42 +59,27 @@ func (s *ItemService) UPDATE(id uint32, count int) { } } -func (s *ItemService) UPDATEM(id []uint32, count int) { - if cool.Config.ServerInfo.IsVip != 0 && count < 0 { - return - } - if len(id)==0 { - return - } - m := s.dbm(s.Model) - ok, err := m.Where("item_id", id).Exist() - if err != nil { - panic(err) - } - if ok { - _, err := s.dbm(s.Model).WhereIn("item_id", id).Increment("item_cnt", count) - if err != nil { - panic(err) - } +// func (s *ItemService) UPDATEM(ids map[uint32]int) { +// if cool.Config.ServerInfo.IsVip != 0 { - } else { - m := s.dbm(s.Model) - data :=g.List{} - for _, v := range id { - data=append(data, g.Map{ - "player_id": s.userid, - "item_id": v, - "item_cnt": count, - "is_vip": cool.Config.ServerInfo.IsVip, - }) - } - +// return +// } - m.Data(data).Insert() - } +// m := s.dbm(s.Model) +// data := g.List{} +// for k, v := range ids { +// data = append(data, g.Map{ +// "player_id": s.userid, +// "item_id": k, +// "item_cnt": v, +// "is_vip": cool.Config.ServerInfo.IsVip, +// }) +// } -} +// m.Data(data).Insert() + +// } func (s *ItemService) CheakItem(id uint32) int64 { var ttt model.Item m := s.dbm(s.Model)