修改订单逻辑
This commit is contained in:
parent
e3fe8db5f4
commit
affc20bf9f
@ -234,3 +234,28 @@ func IntSliceToString(slice []int) string {
|
|||||||
str = strings.Trim(str, "[]")
|
str = strings.Trim(str, "[]")
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func PopStringArray(s []string) (string, []string) {
|
||||||
|
if len(s) == 0 {
|
||||||
|
return "", s
|
||||||
|
}
|
||||||
|
return s[0], s[1:]
|
||||||
|
}
|
||||||
|
|
||||||
|
func ShuffleStringArray(s []string) []string {
|
||||||
|
r := make([]string, len(s))
|
||||||
|
perm := GetRand().Perm(len(s))
|
||||||
|
for i, v := range perm {
|
||||||
|
r[v] = s[i]
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|
||||||
|
func ShuffleArray(s []int) []int {
|
||||||
|
r := make([]int, len(s))
|
||||||
|
perm := GetRand().Perm(len(s))
|
||||||
|
for i, v := range perm {
|
||||||
|
r[v] = s[i]
|
||||||
|
}
|
||||||
|
return r
|
||||||
|
}
|
||||||
|
|||||||
@ -56,6 +56,15 @@ func GetEmitProduce(EmitType string) []string {
|
|||||||
return strings.Split(gamedata.GetStringValue(data, "Product_Type"), ",")
|
return strings.Split(gamedata.GetStringValue(data, "Product_Type"), ",")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func GetEmitOrderProduce(EmitType string) []string {
|
||||||
|
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT, EmitType)
|
||||||
|
if err != nil {
|
||||||
|
log.Debug("GetEmitProduce GetOne EmitType:%s not found", EmitType)
|
||||||
|
return []string{}
|
||||||
|
}
|
||||||
|
return strings.Split(gamedata.GetStringValue(data, "Order_Type"), ",")
|
||||||
|
}
|
||||||
|
|
||||||
// 获取单个数据
|
// 获取单个数据
|
||||||
func GetOne(Id int) (*gamedata.MergeDataRecord, error) {
|
func GetOne(Id int) (*gamedata.MergeDataRecord, error) {
|
||||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||||
@ -317,3 +326,85 @@ func GetHighSourceChestItem() []*item.Item {
|
|||||||
r = append(r, item.NewItem(item.ITEM_ENERGY_ID, B4))
|
r = append(r, item.NewItem(item.ITEM_ENERGY_ID, B4))
|
||||||
return r
|
return r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func DynamicLev(Lv int, EmitId int, Color string) int {
|
||||||
|
data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId)
|
||||||
|
if err != nil {
|
||||||
|
log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||||
|
return Lv
|
||||||
|
}
|
||||||
|
DynamicLv := gamedata.GetStringValue(data, "Dynamic")
|
||||||
|
if DynamicLv == "" {
|
||||||
|
return Lv
|
||||||
|
}
|
||||||
|
Arr := strings.Split(DynamicLv, ",")
|
||||||
|
for _, v := range Arr {
|
||||||
|
Arr2 := strings.Split(v, "=")
|
||||||
|
if len(Arr2) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if Color == Arr2[0] {
|
||||||
|
NewLv, _ := strconv.Atoi(Arr2[1])
|
||||||
|
return Lv - NewLv
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Lv
|
||||||
|
}
|
||||||
|
func DynamicLev2(Lv int, EmitId int, Color1 string, Color2 string) int {
|
||||||
|
data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId)
|
||||||
|
if err != nil {
|
||||||
|
log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||||
|
return Lv
|
||||||
|
}
|
||||||
|
DynamicLv := gamedata.GetStringValue(data, "Dynamic")
|
||||||
|
if DynamicLv == "" {
|
||||||
|
return Lv
|
||||||
|
}
|
||||||
|
Arr := strings.Split(DynamicLv, ",")
|
||||||
|
BaseLv := Lv
|
||||||
|
for _, v := range Arr {
|
||||||
|
Arr2 := strings.Split(v, "=")
|
||||||
|
if len(Arr2) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if Color1 == Arr2[0] {
|
||||||
|
NewLv, _ := strconv.Atoi(Arr2[1])
|
||||||
|
BaseLv = Lv + NewLv
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for _, v := range Arr {
|
||||||
|
Arr2 := strings.Split(v, "=")
|
||||||
|
if len(Arr2) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if Color2 == Arr2[0] {
|
||||||
|
NewLv, _ := strconv.Atoi(Arr2[1])
|
||||||
|
return BaseLv - NewLv
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Lv
|
||||||
|
}
|
||||||
|
|
||||||
|
func DynamicAdjust(EmitId int, Color string) int {
|
||||||
|
data, err := gamedata.GetDataByIntKey(CFG_NAME, EmitId)
|
||||||
|
if err != nil {
|
||||||
|
log.Debug("DynamicLev GetOne EmitId:%v not found", EmitId)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
DynamicLv := gamedata.GetStringValue(data, "Dynamic")
|
||||||
|
if DynamicLv == "" {
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
Arr := strings.Split(DynamicLv, ",")
|
||||||
|
for _, v := range Arr {
|
||||||
|
Arr2 := strings.Split(v, "=")
|
||||||
|
if len(Arr2) != 2 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if Color == Arr2[0] {
|
||||||
|
NewLv, _ := strconv.Atoi(Arr2[1])
|
||||||
|
return NewLv
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|||||||
@ -55,7 +55,7 @@ func UnitOrder(p *Player) error {
|
|||||||
OrderMod := p.PlayMod.getOrderMod()
|
OrderMod := p.PlayMod.getOrderMod()
|
||||||
ChessMod := p.PlayMod.getChessMod()
|
ChessMod := p.PlayMod.getChessMod()
|
||||||
OrderMod.OrderList = make(map[int]order.Order)
|
OrderMod.OrderList = make(map[int]order.Order)
|
||||||
for i := 0; i < 150; i++ {
|
for i := 0; i < 10000; i++ {
|
||||||
err := OrderMod.CreateNormalOrder(7, ChessMod.GetEmitList(), 3)
|
err := OrderMod.CreateNormalOrder(7, ChessMod.GetEmitList(), 3)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@ -9,6 +9,7 @@ import (
|
|||||||
playroomCfg "server/conf/playroom"
|
playroomCfg "server/conf/playroom"
|
||||||
"server/game/mod/item"
|
"server/game/mod/item"
|
||||||
"server/msg"
|
"server/msg"
|
||||||
|
"server/pkg/github.com/name5566/leaf/log"
|
||||||
"sort"
|
"sort"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@ -22,6 +23,8 @@ type OrderMod struct {
|
|||||||
LastNormalOrder Order // 上一个普通订单
|
LastNormalOrder Order // 上一个普通订单
|
||||||
EimtOrder map[string]struct{}
|
EimtOrder map[string]struct{}
|
||||||
PreheatStep map[string]int // 预热订单步骤
|
PreheatStep map[string]int // 预热订单步骤
|
||||||
|
EmitShuffle []string // 发射器乱序
|
||||||
|
ChessPool []int // 棋子池
|
||||||
}
|
}
|
||||||
|
|
||||||
type Order struct {
|
type Order struct {
|
||||||
@ -235,7 +238,7 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error {
|
|||||||
}
|
}
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
log.Debug("CreateNormalOrder mergeList:%v, OrderDiff:%v", mergeList, OrderDiff)
|
||||||
o.addOrder(mergeList, OrderDiff, Common_type)
|
o.addOrder(mergeList, OrderDiff, Common_type)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,6 +7,8 @@ import (
|
|||||||
userCfg "server/conf/user"
|
userCfg "server/conf/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
var reflectChess = map[int]int{}
|
||||||
|
|
||||||
func getChessNumRand(OrderN int) map[int]int {
|
func getChessNumRand(OrderN int) map[int]int {
|
||||||
return map[int]int{
|
return map[int]int{
|
||||||
1: int(25 - 4*OrderN),
|
1: int(25 - 4*OrderN),
|
||||||
@ -137,34 +139,34 @@ func getChessLv(Min, Max, Diff int) int {
|
|||||||
return GoUtil.RandNum(Start, End)
|
return GoUtil.RandNum(Start, End)
|
||||||
}
|
}
|
||||||
|
|
||||||
func getRandChessColorList(o *OrderMod, Emit []int, EnergyMul int) map[string]int {
|
// func getRandChessColorList(o *OrderMod, Emit []int, EnergyMul int) map[string]int {
|
||||||
r := make(map[string]int)
|
// r := make(map[string]int)
|
||||||
ChessList := make([]int, 0)
|
// ChessList := make([]int, 0)
|
||||||
for _, v := range o.OrderList {
|
// for _, v := range o.OrderList {
|
||||||
if v.Type == Common_type {
|
// if v.Type == Common_type {
|
||||||
ChessList = append(ChessList, v.MergeId...)
|
// ChessList = append(ChessList, v.MergeId...)
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
for _, v := range Emit {
|
// for _, v := range Emit {
|
||||||
Produce := mergeDataCfg.GetEmitProduceType(v)
|
// Produce := mergeDataCfg.GetEmitProduceType(v)
|
||||||
if len(Produce) == 0 {
|
// if len(Produce) == 0 {
|
||||||
continue
|
// continue
|
||||||
}
|
// }
|
||||||
if len(Produce) == 1 {
|
// if len(Produce) == 1 {
|
||||||
if Produce[0] == "" {
|
// if Produce[0] == "" {
|
||||||
continue
|
// continue
|
||||||
}
|
// }
|
||||||
r[Produce[0]] = 100
|
// r[Produce[0]] = 100
|
||||||
continue
|
// continue
|
||||||
}
|
// }
|
||||||
r[Produce[0]] = 80
|
// r[Produce[0]] = 80
|
||||||
r[Produce[1]] = 20
|
// r[Produce[1]] = 20
|
||||||
if checkA1High(ChessList, v, EnergyMul) {
|
// if checkA1High(ChessList, v, EnergyMul) {
|
||||||
r[Produce[1]] += 20
|
// r[Produce[1]] += 20
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return r
|
// return r
|
||||||
}
|
// }
|
||||||
|
|
||||||
func RandChessColor(Emit []int) string {
|
func RandChessColor(Emit []int) string {
|
||||||
r := make(map[string]int)
|
r := make(map[string]int)
|
||||||
@ -186,21 +188,21 @@ func RandChessColor(Emit []int) string {
|
|||||||
return GoUtil.RandStringMap(r)
|
return GoUtil.RandStringMap(r)
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkA1High(ChessList []int, Emit int, EnergyMul int) bool {
|
// func checkA1High(ChessList []int, Emit int, EnergyMul int) bool {
|
||||||
ChessMinLev, ChessMaxLev := getChesslvRange(Emit, EnergyMul)
|
// ChessMinLev, ChessMaxLev := getChesslvRange(Emit, EnergyMul)
|
||||||
HighLv := ChessMinLev + ((ChessMaxLev-ChessMinLev)/3)*2
|
// HighLv := ChessMinLev + ((ChessMaxLev-ChessMinLev)/3)*2
|
||||||
Produce := mergeDataCfg.GetEmitProduceChessType(Emit)
|
// Produce := mergeDataCfg.GetEmitProduceChessType(Emit)
|
||||||
for _, v := range ChessList {
|
// for _, v := range ChessList {
|
||||||
ChessColor := mergeDataCfg.GetColorById(v)
|
// ChessColor := mergeDataCfg.GetColorById(v)
|
||||||
if ChessColor == Produce[0] {
|
// if ChessColor == Produce[0] {
|
||||||
ChessLv := mergeDataCfg.GetLvById(v)
|
// ChessLv := mergeDataCfg.GetLvById(v)
|
||||||
if ChessLv >= HighLv {
|
// if ChessLv >= HighLv {
|
||||||
return true
|
// return true
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return false
|
// return false
|
||||||
}
|
// }
|
||||||
|
|
||||||
func getChesslvRange(Emit int, EnergyMul int) (int, int) {
|
func getChesslvRange(Emit int, EnergyMul int) (int, int) {
|
||||||
RandEmitLv := mergeDataCfg.GetLvById(Emit)
|
RandEmitLv := mergeDataCfg.GetLvById(Emit)
|
||||||
@ -226,40 +228,92 @@ func getEmitByColor(Emit []int, color string) int {
|
|||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 生成订单
|
||||||
func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int, error) {
|
func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int, error) {
|
||||||
|
initReflectChess(Emit, EnergyMul)
|
||||||
OrderN, err := userCfg.GetOrderNByLv(lv)
|
OrderN, err := userCfg.GetOrderNByLv(lv)
|
||||||
RandChessNum := getChessNumRand(OrderN)
|
RandChessNum := getChessNumRand(OrderN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, diff_low, err
|
return nil, diff_low, err
|
||||||
}
|
}
|
||||||
|
// 生成订单难度和棋子数量
|
||||||
ChessNum := GoUtil.RandMap(RandChessNum)
|
ChessNum := GoUtil.RandMap(RandChessNum)
|
||||||
OrderDiffRand := getOrderDiffRand(o.LastDiff, OrderN)
|
OrderDiffRand := getOrderDiffRand(o.LastDiff, OrderN)
|
||||||
OrderDiff := GoUtil.RandMap(OrderDiffRand)
|
OrderDiff := GoUtil.RandMap(OrderDiffRand)
|
||||||
ChessDiff := getChessDiff(ChessNum, OrderDiff, OrderN)
|
ChessDiff := getChessDiff(ChessNum, OrderDiff, OrderN)
|
||||||
mergeList := make([]int, 0, len(ChessDiff))
|
mergeList := make([]int, 0, len(ChessDiff))
|
||||||
ColorRand := getRandChessColorList(o, Emit, EnergyMul)
|
// 根据订单棋子难度生成棋子
|
||||||
var Color string
|
|
||||||
for _, v := range ChessDiff {
|
for _, v := range ChessDiff {
|
||||||
Color = GoUtil.RandStringMap(ColorRand)
|
// EmitId := getEmitId(o, Emit)
|
||||||
delete(ColorRand, Color)
|
// ColorRand := mergeDataCfg.GetEmitOrderProduce(EmitId)
|
||||||
Emit := getEmitByColor(Emit, Color)
|
// Color := GoUtil.RandStringSlice(ColorRand)
|
||||||
ChessMinLv, ChessMaxLv := getChesslvRange(Emit, EnergyMul)
|
// EmitChessId := getEmitByColor(Emit, Color)
|
||||||
NewLev := getChessLv(ChessMinLv, ChessMaxLv, v)
|
// ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul)
|
||||||
ColorMaxLv := mergeDataCfg.GetMaxLvByColor(Color)
|
// NewLev := getChessLv(ChessMinLv, ChessMaxLv, v)
|
||||||
NewLev = min(NewLev, ColorMaxLv)
|
// ColorMaxLv := mergeDataCfg.GetMaxLvByColor(Color)
|
||||||
ChessId := mergeDataCfg.GetChessIdByLvAndColor(NewLev, Color)
|
// NewLev = min(NewLev, ColorMaxLv)
|
||||||
Type := mergeDataCfg.GetTypeById(ChessId)
|
// ChessId := mergeDataCfg.GetChessIdByLvAndColor(NewLev, Color)
|
||||||
if Type != "Product" {
|
// Type := mergeDataCfg.GetTypeById(ChessId)
|
||||||
continue
|
// if Type != "Product" {
|
||||||
}
|
// continue
|
||||||
if ChessId == 0 {
|
// }
|
||||||
continue
|
// if ChessId == 0 {
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
ChessId := 0
|
||||||
|
for {
|
||||||
|
ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul)
|
||||||
|
if !GoUtil.InArray(ChessId, mergeList) {
|
||||||
|
break
|
||||||
|
}
|
||||||
}
|
}
|
||||||
mergeList = append(mergeList, ChessId)
|
mergeList = append(mergeList, ChessId)
|
||||||
}
|
}
|
||||||
return mergeList, OrderDiff, nil
|
return mergeList, OrderDiff, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getEmitId(o *OrderMod, Emit []int) string {
|
||||||
|
if o.EmitShuffle == nil {
|
||||||
|
o.EmitShuffle = make([]string, 0)
|
||||||
|
for _, v := range Emit {
|
||||||
|
EmitProduct := mergeDataCfg.GetEmitProduceType(v)
|
||||||
|
if len(EmitProduct) == 0 || EmitProduct[0] == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
EmitId := mergeDataCfg.GetEmitId(v)
|
||||||
|
if GoUtil.InStringArray(EmitId, o.EmitShuffle) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
o.EmitShuffle = append(o.EmitShuffle, EmitId)
|
||||||
|
}
|
||||||
|
GoUtil.ShuffleStringArray(o.EmitShuffle)
|
||||||
|
}
|
||||||
|
PopEmitId, NewSlice := GoUtil.PopStringArray(o.EmitShuffle)
|
||||||
|
o.EmitShuffle = NewSlice
|
||||||
|
if len(o.EmitShuffle) == 0 {
|
||||||
|
o.EmitShuffle = make([]string, 0)
|
||||||
|
for _, v := range Emit {
|
||||||
|
EmitId := mergeDataCfg.GetEmitId(v)
|
||||||
|
if GoUtil.InStringArray(EmitId, o.EmitShuffle) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
o.EmitShuffle = append(o.EmitShuffle, EmitId)
|
||||||
|
}
|
||||||
|
Num := 1
|
||||||
|
for {
|
||||||
|
GoUtil.ShuffleStringArray(o.EmitShuffle)
|
||||||
|
if o.EmitShuffle[0] != PopEmitId {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
Num++
|
||||||
|
if Num > 100 {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return PopEmitId
|
||||||
|
}
|
||||||
|
|
||||||
func getOrderStar(ChessList []int) int {
|
func getOrderStar(ChessList []int) int {
|
||||||
Star := 0
|
Star := 0
|
||||||
for _, v := range ChessList {
|
for _, v := range ChessList {
|
||||||
@ -267,3 +321,105 @@ func getOrderStar(ChessList []int) int {
|
|||||||
}
|
}
|
||||||
return Star
|
return Star
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int {
|
||||||
|
EmitId := getEmitId(o, Emit)
|
||||||
|
ColorRand := mergeDataCfg.GetEmitOrderProduce(EmitId)
|
||||||
|
Color := GoUtil.RandStringSlice(ColorRand)
|
||||||
|
EmitChessId := getEmitByColor(Emit, Color)
|
||||||
|
// 从棋子池中获取棋子
|
||||||
|
MinChessId := 0
|
||||||
|
for i, chess := range o.ChessPool {
|
||||||
|
chessColor := mergeDataCfg.GetColorById(chess)
|
||||||
|
if reflectChess[chess] > Diff {
|
||||||
|
MinChessId = chess
|
||||||
|
}
|
||||||
|
if !GoUtil.InStringArray(chessColor, ColorRand) {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if reflectChess[chess] == Diff {
|
||||||
|
// ChessLev := mergeDataCfg.GetLvById(chess)
|
||||||
|
o.ChessPool = append(o.ChessPool[:i], o.ChessPool[i+1:]...)
|
||||||
|
// for _, i := range ColorRand {
|
||||||
|
// if i == Color {
|
||||||
|
// continue
|
||||||
|
// }
|
||||||
|
// NewLev2 := mergeDataCfg.DynamicLev2(ChessLev, EmitChessId, Color, i)
|
||||||
|
// ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, i)
|
||||||
|
// if ChessId2 != 0 {
|
||||||
|
// o.ChessPool = append(o.ChessPool, ChessId2)
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
return chess
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取不到时选最接近的棋子
|
||||||
|
ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul)
|
||||||
|
NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff)
|
||||||
|
NewLev1 := mergeDataCfg.DynamicLev(NewLev, EmitChessId, Color)
|
||||||
|
if MinChessId != 0 {
|
||||||
|
MinChessColor := mergeDataCfg.GetColorById(MinChessId)
|
||||||
|
MinChessLv := mergeDataCfg.GetLvById(MinChessId)
|
||||||
|
NewEmitChessId := getEmitByColor(Emit, MinChessColor)
|
||||||
|
NewChessLv := mergeDataCfg.DynamicLev(NewLev, NewEmitChessId, MinChessColor)
|
||||||
|
o.ChessPool = GoUtil.DeleteEleByValue(o.ChessPool, MinChessId)
|
||||||
|
for i := NewChessLv; i < MinChessLv; i++ {
|
||||||
|
ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(i, MinChessColor)
|
||||||
|
if ChessId2 != 0 {
|
||||||
|
o.ChessPool = append(o.ChessPool, ChessId2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return mergeDataCfg.GetChessIdByLvAndColor(NewLev1, MinChessColor)
|
||||||
|
}
|
||||||
|
ChessId := mergeDataCfg.GetChessIdByLvAndColor(NewLev1, Color)
|
||||||
|
for _, i := range ColorRand {
|
||||||
|
if i == Color {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
NewLev2 := mergeDataCfg.DynamicLev2(NewLev1, EmitChessId, Color, i)
|
||||||
|
ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, i)
|
||||||
|
if ChessId2 != 0 {
|
||||||
|
o.ChessPool = append(o.ChessPool, ChessId2)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
o.ChessPool = GoUtil.ShuffleArray(o.ChessPool)
|
||||||
|
if len(o.ChessPool) > 200 {
|
||||||
|
o.ChessPool = o.ChessPool[:200]
|
||||||
|
}
|
||||||
|
return ChessId
|
||||||
|
}
|
||||||
|
|
||||||
|
func initReflectChess(Emits []int, EnergyMul int) {
|
||||||
|
Start, End := 0, 0
|
||||||
|
for _, Emit := range Emits {
|
||||||
|
ChessMinLv, ChessMaxLv := getChesslvRange(Emit, EnergyMul)
|
||||||
|
Product := mergeDataCfg.GetEmitProduceChessType(Emit)
|
||||||
|
Start = ChessMinLv
|
||||||
|
End = ChessMinLv + (ChessMaxLv-ChessMinLv+1)/3 - 1
|
||||||
|
for _, v := range Product {
|
||||||
|
Adjust := mergeDataCfg.DynamicAdjust(Emit, v)
|
||||||
|
initReflectChess2(v, Start, End, diff_low, Adjust)
|
||||||
|
}
|
||||||
|
Start = ChessMinLv + (ChessMaxLv-ChessMinLv+1)/3
|
||||||
|
End = ChessMinLv + (ChessMaxLv-ChessMinLv+1)/3*2 - 1
|
||||||
|
for _, v := range Product {
|
||||||
|
Adjust := mergeDataCfg.DynamicAdjust(Emit, v)
|
||||||
|
initReflectChess2(v, Start, End, diff_mid, Adjust)
|
||||||
|
}
|
||||||
|
Start = ChessMinLv + (ChessMaxLv-ChessMinLv+1)/3*2
|
||||||
|
End = ChessMaxLv
|
||||||
|
for _, v := range Product {
|
||||||
|
Adjust := mergeDataCfg.DynamicAdjust(Emit, v)
|
||||||
|
initReflectChess2(v, Start, End, diff_high, Adjust)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func initReflectChess2(Color string, Start, End, Diff, adjust int) {
|
||||||
|
for i := Start; i <= End; i++ {
|
||||||
|
Lv := max(i-adjust, 1)
|
||||||
|
ChessId := mergeDataCfg.GetChessIdByLvAndColor(Lv, Color)
|
||||||
|
reflectChess[ChessId] = Diff
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user