```
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

feat(utils): 添加切片元素计数功能

新增CountSliceElements函数用于统计切片中各元素的出现次数,
返回map[元素]出现次数的映射关系,支持任意可比较类型的切片元素。

fix(config): 调整地图配置模型默认值设置

修改MapPit结构体中的MinLevel和MaxLevel字段设置,
将数据库约束改为非空并设置默认值为1,确保等级范围配置的有效性。

ref
This commit is contained in:
昔念
2026-02-26 22:32:15 +08:00
parent 21ae004979
commit bfafd5789d
4 changed files with 36 additions and 34 deletions

View File

@@ -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
}

View File

@@ -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)

View File

@@ -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"`
}

View File

@@ -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)