refactor(service): 重构宠物捕捉击杀统计功能 - 移除Barge服务和相关模型,统一使用Done服务进行里程碑数据管理 - 更新PetBargeList接口实现,从Barge服务切换到Done服务 - 修改战斗循环中宠物捕捉击杀数据的更新逻辑 - 调整里程碑模型中的Results字段类型为uint32数组 feat(done): 新增宠物里程碑数据管理功能 - 实现UpdatePet方法用于更新宠物捕捉击杀统计数据 - 添加update和get内部方法处理
This commit is contained in:
@@ -3,45 +3,16 @@ package service
|
||||
import (
|
||||
"blazing/cool"
|
||||
"blazing/modules/player/model"
|
||||
"context"
|
||||
|
||||
"github.com/gogf/gf/v2/frame/g"
|
||||
"github.com/gogf/gf/v2/util/gconv"
|
||||
)
|
||||
|
||||
type DoneService struct {
|
||||
BaseService
|
||||
}
|
||||
|
||||
// func (s *DoneService) Exec(data model.EnumMilestone, id []uint32, fn func(*model.MilestoneEX) bool) {
|
||||
// if cool.Config.ServerInfo.IsVip != 0 {
|
||||
// cool.Logger.Info(context.TODO(), "测试服不消耗物品玩家数据", s.userid)
|
||||
// return
|
||||
// }
|
||||
// arss := strings.Join(gconv.Strings(id), "-")
|
||||
// m := s.PModel(s.Model).Where("done_type", data).Where("args", arss)
|
||||
// var tt *model.MilestoneEX
|
||||
// m.Scan(&tt)
|
||||
// if tt == nil {
|
||||
// tt = &model.MilestoneEX{
|
||||
// Milestone: model.Milestone{
|
||||
// DoneType: data,
|
||||
// Args: strings.Join(gconv.Strings(id), "-"),
|
||||
// //Count: 1,
|
||||
// },
|
||||
// }
|
||||
// }
|
||||
|
||||
// tt.Args = id
|
||||
// ook := fn(tt)
|
||||
// if !ook { //不需要保存
|
||||
// return
|
||||
// }
|
||||
// tt.PlayerID = uint64(s.userid)
|
||||
// tt.Milestone.Args = strings.Join(gconv.Strings(id), "-")
|
||||
|
||||
// _, err := m.Save(tt)
|
||||
// if err != nil {
|
||||
// panic(err)
|
||||
// }
|
||||
|
||||
// }
|
||||
func NewDoneService(id uint32) *DoneService {
|
||||
return &DoneService{
|
||||
|
||||
@@ -54,3 +25,75 @@ func NewDoneService(id uint32) *DoneService {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// ID
|
||||
// 击杀-捕捉
|
||||
func (s *DoneService) UpdatePet(ptye model.PetInfo, res ...uint32) {
|
||||
|
||||
//属性->属性值->ID 击杀-捕捉-炫彩击杀-炫彩捕捉
|
||||
args := []uint32{ptye.ID}
|
||||
r1 := s.get(model.MilestoneMode.Pet, args)
|
||||
results := make([]uint32, len(res))
|
||||
if r1 != nil {
|
||||
results = r1.Results
|
||||
|
||||
}
|
||||
|
||||
for i, v := range res {
|
||||
results[i] += v
|
||||
|
||||
}
|
||||
s.update(model.MilestoneMode.Pet, args, results)
|
||||
|
||||
}
|
||||
|
||||
// 内部方法,实现更新
|
||||
func (s *DoneService) update(ptye model.EnumMilestone, args []uint32, results []uint32) {
|
||||
|
||||
if cool.Config.ServerInfo.IsVip != 0 {
|
||||
cool.Logger.Info(context.TODO(), "测试服不消耗物品玩家数据", s.userid)
|
||||
return
|
||||
}
|
||||
ar := gconv.String(args)
|
||||
if t, _ := s.PModel(s.Model).Where("done_type", ptye).Wheref(`args @> ?::jsonb`, ar).
|
||||
Wheref(`jsonb_typeof(args) = ?`, "array").Exist(); t {
|
||||
s.PModel(s.Model).Where("done_type", ptye).Wheref(`args @> ?::jsonb`, ar).
|
||||
Wheref(`jsonb_typeof(args) = ?`, "array").Data(
|
||||
g.Map{
|
||||
"results": results,
|
||||
},
|
||||
).Update()
|
||||
|
||||
} else {
|
||||
|
||||
r := g.Map{
|
||||
"player_id": s.userid,
|
||||
"done_type": ptye,
|
||||
"args": args,
|
||||
"results": results,
|
||||
}
|
||||
|
||||
s.PModel(s.Model).Data(r).Insert()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func (s *DoneService) get(ptye model.EnumMilestone, args []uint32) *model.Milestone {
|
||||
var Barges *model.Milestone
|
||||
s.PModel(s.Model).Where("done_type", ptye).Wheref(`args @> ?::jsonb`, args).
|
||||
Wheref(`jsonb_typeof(args) = ?`, "array").Scan(&Barges)
|
||||
return Barges
|
||||
|
||||
}
|
||||
|
||||
func (s *DoneService) PetBarge(start, end uint32) []model.Milestone {
|
||||
var Barges []model.Milestone
|
||||
|
||||
s.PModel(s.Model).Where("done_type", model.MilestoneMode.Pet).
|
||||
Wheref(`jsonb_typeof(args) = ?`, "array").
|
||||
Wheref(`jsonb_typeof(args) != ?`, "'[]'::jsonb").
|
||||
Wheref(`(args->> 0)::int BETWEEN ? AND ?`, start, end).
|
||||
Scan(&Barges)
|
||||
return Barges
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user