package rtask import ( "fmt" "go_dreamfactory/lego/sys/log" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "github.com/pkg/errors" ) func lenParam(cfg *cfg.GameRdtaskCondiData, vals ...int32) (n int, err error) { if cfg.Data1 != 0 && cfg.Data2 != 0 && cfg.Data3 != 0 && cfg.Data4 != 0 && cfg.Data5 != 0 { if len(vals) != 5 { err = errors.New(fmt.Sprintf("%v 参数个数不一致,期望5实际是%v", cfg.Id, len(vals))) return } else { n = len(vals) return } } if cfg.Data1 != 0 && cfg.Data2 != 0 && cfg.Data3 != 0 && cfg.Data4 != 0 { if len(vals) != 4 { err = errors.New(fmt.Sprintf("%v 参数个数不一致,期望4实际是%v", cfg.Id, len(vals))) return } else { n = len(vals) return } } if cfg.Data1 != 0 && cfg.Data2 != 0 && cfg.Data3 != 0 { if len(vals) != 3 { err = errors.New(fmt.Sprintf("%v 参数个数不一致,期望3实际是%v", cfg.Id, len(vals))) return } else { n = len(vals) return } } if cfg.Data1 != 0 && cfg.Data2 != 0 { if len(vals) != 2 { err = errors.New(fmt.Sprintf("%v 参数个数不一致,期望2实际是%v", cfg.Id, len(vals))) return } else { n = len(vals) return } } if cfg.Data1 != 0 { if len(vals) != 1 { err = errors.New(fmt.Sprintf("%v 参数个数不一致,期望1实际是%v", cfg.Id, len(vals))) return } else { n = len(vals) return } } return } func toMap(vals ...int32) map[int32]int32 { d := make(map[int32]int32, len(vals)) for i, v := range vals { d[int32(i)] = v } return d } func toArr(m map[int32]int32) (params []int32) { for _, v := range m { params = append(params, v) } return } func hasUpdateData(len int, data *pb.RtaskData, vals ...int32) map[int32]int32 { if data == nil || len == 0 { return nil } res := make(map[int32]int32) switch len { case 1: if vals[0] > data.Data[0] { res[0] = vals[0] } case 2: if vals[0] > data.Data[0] { res[0] = vals[0] } else if vals[1] > data.Data[1] { res[1] = vals[1] } case 3: if vals[0] > data.Data[0] { res[0] = vals[0] } else if vals[1] > data.Data[1] { res[1] = vals[1] } else if vals[2] > data.Data[2] { res[2] = vals[2] } case 4: if vals[0] > data.Data[0] { res[0] = vals[0] } else if vals[1] > data.Data[1] { res[1] = vals[1] } else if vals[2] > data.Data[2] { res[2] = vals[2] } else if vals[3] > data.Data[3] { res[3] = vals[3] } case 5: if vals[0] > data.Data[0] { res[0] = vals[0] } else if vals[1] > data.Data[1] { res[1] = vals[1] } else if vals[2] > data.Data[2] { res[2] = vals[2] } else if vals[3] > data.Data[3] { res[3] = vals[3] } else if vals[4] > data.Data[4] { res[4] = vals[4] } } return res } func printCondiLog(uid string, cfg *cfg.GameRdtaskCondiData) { log.Debugf("uid:%v condiId:%v rtype:%v", uid, cfg.Id, cfg.Type) } type Num interface { ~int32 | ~string | ~bool } // 等于 func equal[T Num](actual, expected T) bool { return actual == expected } // 大于等于 func greatEual(actual, expected int32) bool { return actual >= expected } //小于等于 func lessEqual(actual, expected int32) bool { return actual <= expected } func soEqual[T Num](actual T, expected T) (ok bool, err error) { if !equal(actual, expected) { err = errors.New(fmt.Sprintf("soEqual actual:%v expect:%v", actual, expected)) return } ok = true return } func soGreatEqual(actual, expected int32) (ok bool, err error) { if !greatEual(actual, expected) { err = errors.New(fmt.Sprintf("soGreatEqual actual:%v expect:%v", actual, expected)) return } ok = true return } func soLessEqual(actual, expected int32) (ok bool, err error) { if !lessEqual(actual, expected) { err = errors.New(fmt.Sprintf("soLessEqual actual:%v expect:%v", actual, expected)) return } ok = true return }