feat: 添加战斗效果800-814及优化道具逻辑
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed

This commit is contained in:
xinian
2026-03-31 06:51:40 +08:00
committed by cnb
parent 8552eb61a8
commit b4a8048b85
7 changed files with 841 additions and 99 deletions

View File

@@ -5,6 +5,8 @@ import (
"blazing/modules/player/model"
"context"
dictservice "blazing/modules/dict/service"
"github.com/gogf/gf/v2/frame/g"
)
@@ -58,6 +60,65 @@ func (s *ItemService) UPDATE(id uint32, count int) error {
return nil
}
// AddUniqueItems 为一组互不重复的物品各增加 1 个。
// 返回值只包含本次实际成功增加的物品 id。
func (s *ItemService) AddUniqueItems(ids []uint32) ([]uint32, error) {
if len(ids) == 0 {
return nil, nil
}
currentItems := s.CheakItemM(ids...)
currentMap := make(map[uint32]int64, len(currentItems))
for _, item := range currentItems {
currentMap[item.ItemId] = item.ItemCnt
}
updateIDs := make([]uint32, 0, len(ids))
insertData := g.List{}
successIDs := make([]uint32, 0, len(ids))
for _, id := range ids {
if id == 0 {
continue
}
itemmax := dictservice.NewDictInfoService().GetMax(int64(id))
if itemmax == 0 {
continue
}
if currentMap[id]+1 > int64(itemmax) {
continue
}
successIDs = append(successIDs, id)
if _, ok := currentMap[id]; ok {
updateIDs = append(updateIDs, id)
continue
}
insertData = append(insertData, g.Map{
"player_id": s.userid,
"item_id": id,
"item_cnt": 1,
"is_vip": cool.Config.ServerInfo.IsVip,
})
}
if len(updateIDs) > 0 {
if _, err := s.dbm(s.Model).WhereIn("item_id", updateIDs).Increment("item_cnt", 1); err != nil {
return nil, err
}
}
if len(insertData) > 0 {
if _, err := s.dbm(s.Model).Data(insertData).Insert(); err != nil {
return nil, err
}
}
return successIDs, nil
}
// func (s *ItemService) UPDATEM(ids map[uint32]int) {
// if cool.Config.ServerInfo.IsVip != 0 {