183 lines
3.8 KiB
Go
183 lines
3.8 KiB
Go
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
|
|
}
|