feat(utils): 添加切片元素计数功能 新增CountSliceElements函数用于统计切片中各元素的出现次数, 返回map[元素]出现次数的映射关系,支持任意可比较类型的切片元素。 fix(config): 调整地图配置模型默认值设置 修改MapPit结构体中的MinLevel和MaxLevel字段设置, 将数据库约束改为非空并设置默认值为1,确保等级范围配置的有效性。 ref
This commit is contained in:
@@ -84,3 +84,18 @@ func RandomSlice[T any](slice []T, n int) []T {
|
|||||||
|
|
||||||
return result
|
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
|
||||||
|
}
|
||||||
|
|||||||
@@ -63,6 +63,8 @@ func (h Controller) PetFusion(data *pet.C2S_PetFusion, c *player.Player) (result
|
|||||||
}
|
}
|
||||||
//c.Service.Item.UPDATEM(data.Item1[:], -1)
|
//c.Service.Item.UPDATEM(data.Item1[:], -1)
|
||||||
|
|
||||||
|
// utils.CountSliceElements(data.Item1[:])
|
||||||
|
|
||||||
for _, v := range data.Item1 {
|
for _, v := range data.Item1 {
|
||||||
c.Service.Item.UPDATE(v, -1)
|
c.Service.Item.UPDATE(v, -1)
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,9 @@ type MapPit struct {
|
|||||||
RefreshID []int `gorm:"type:int[];comment:'精灵ID列表'" json:"refresh_id"`
|
RefreshID []int `gorm:"type:int[];comment:'精灵ID列表'" json:"refresh_id"`
|
||||||
Pos []int `gorm:"type:int[];comment:'坑位位置'" json:"pos"`
|
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
|
//是否可捕捉MapPit
|
||||||
IsCapture int `gorm:"type:int;default:0;comment:'是否可捕捉'" json:"is_capture"`
|
IsCapture int `gorm:"type:int;default:0;comment:'是否可捕捉'" json:"is_capture"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
// func (s *ItemService) UPDATEM(ids map[uint32]int) {
|
||||||
}
|
// if cool.Config.ServerInfo.IsVip != 0 {
|
||||||
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)
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
// return
|
||||||
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,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
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 {
|
func (s *ItemService) CheakItem(id uint32) int64 {
|
||||||
var ttt model.Item
|
var ttt model.Item
|
||||||
m := s.dbm(s.Model)
|
m := s.dbm(s.Model)
|
||||||
|
|||||||
Reference in New Issue
Block a user