// package 更新任务触发后的数据更新 package rtask import ( "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "github.com/pkg/errors" ) // 覆盖更新 func (this *ModelRtask) overrideUpdate(uid string, cfg *cfg.GameRdtaskCondiData, vals ...int32) (err error) { var paramLen int if paramLen, err = verifyParam(cfg, vals...); err != nil { return err } record := &pb.DBRtaskRecord{} err = this.Get(uid, record) if err != nil { return errors.Wrapf(err, "获取玩家任务记录 err: %v rtype[%v]", uid, cfg.Id) } if record.Vals == nil { data := &pb.RtaskData{ Data: toMap(vals...), } record.Vals = map[int32]*pb.RtaskData{ cfg.Id: data, } if err := this.Add(uid, record); err != nil { return errors.Wrapf(err, "添加玩家任务记录 err: %v rtype[%v]", uid, cfg.Id) } } else { if v, ok := record.Vals[cfg.Id]; ok { m := isEqual(paramLen, v, cfg, vals...) if len(m) > 0 { update := map[string]interface{}{ "vals": m, } err = this.Change(uid, update) } } } return } // 累计更新 - 招募等 func (this *ModelRtask) addUpdate(uid string, cfg *cfg.GameRdtaskCondiData, vals ...int32) (err error) { var paramLen int if paramLen, err = verifyParam(cfg, vals...); err != nil { return err } record := &pb.DBRtaskRecord{} err = this.Get(uid, record) if err != nil { return errors.Wrapf(err, "获取玩家任务记录 err: %v rtype[%v]", uid, cfg.Id) } if record.Vals == nil { data := &pb.RtaskData{ Data: toMap(vals...), } record.Vals = map[int32]*pb.RtaskData{ cfg.Id: data, } if err := this.Add(uid, record); err != nil { return errors.Wrapf(err, "添加玩家任务记录 err: %v rtype[%v]", uid, cfg.Id) } } else { data := make(map[int32]int32) //查找任务数据 if v, ok := record.Vals[cfg.Id]; ok { if paramLen == 1 { data[0] += v.Data[0] } else if paramLen == 2 { //第一个参数为累加,后续参数为判断条件 if data[1] == cfg.Data2 { data[1] += v.Data[1] } } else if paramLen == 3 { if data[1] == cfg.Data2 && data[2] == cfg.Data3 { data[2] += v.Data[2] } } if len(data) > 0 { update := map[string]interface{}{ "vals": data, } err = this.Change(uid, update) } } } return }