Merge branch 'sdk' into online
This commit is contained in:
commit
be70f47761
@ -45,10 +45,10 @@ func GetEmitTypeByColor(Color string) string {
|
||||
if err != nil {
|
||||
return ""
|
||||
}
|
||||
for _, v := range data {
|
||||
ColorList := strings.Split(gamedata.GetStringValue(data, "Order_Type"), ",")
|
||||
for k, v := range data {
|
||||
ColorList := strings.Split(gamedata.GetStringValue(v, "Order_Type"), ",")
|
||||
if GoUtil.InStringArray(Color, ColorList) {
|
||||
return gamedata.GetStringValue(v, "Type")
|
||||
return k
|
||||
}
|
||||
}
|
||||
return ""
|
||||
|
||||
@ -2,6 +2,7 @@ package game
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math"
|
||||
"server/GoUtil"
|
||||
"server/MergeConst"
|
||||
@ -110,6 +111,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||
}
|
||||
}
|
||||
if OrderData == nil {
|
||||
GoUtil.SendFeishuFatal(int(player.M_DwUin), "GoogleVerify支付校验异常", fmt.Sprintf("GoogleVerify parmas OrderSn:%s; ProduceId:%s; Token:%s", OrderSn, req.ProduceId, req.Token))
|
||||
log.Debug("[order data nil] Uid:%d;OrderSn:%s;PayOrder:%s;", player.M_DwUin, OrderSn, req.ProduceId)
|
||||
return
|
||||
}
|
||||
@ -132,6 +134,7 @@ func TriggerShippingOrder(player *Player, req *msg.ReqShippingOrder) {
|
||||
}
|
||||
OrderData.PayStatus = MergeConst.ORDER_STATUS_SHIP
|
||||
OrderData.PayChannelOrderId = req.Token
|
||||
OrderData.ProductDesc = req.ProduceId
|
||||
db.UpdatePlayerChargeData(OrderData)
|
||||
player.PlayMod.save()
|
||||
orderDataMap := map[string]interface{}{
|
||||
|
||||
@ -44,16 +44,71 @@ func UnitOrder(p *Player) error {
|
||||
OrderMod := p.PlayMod.getOrderMod()
|
||||
ChessMod := p.PlayMod.getChessMod()
|
||||
BaseMod := p.PlayMod.getBaseMod()
|
||||
OrderMod.OrderList = make(map[int]order.Order)
|
||||
for i := 0; i < 1000; i++ {
|
||||
OrderMod.ChessPool = nil
|
||||
OrderMod.EmitShuffle = nil
|
||||
//OrderMod.OrderList = make(map[int]order.Order)
|
||||
for i := 0; i < 5000; i++ {
|
||||
//OrderMod.ChessPool = nil
|
||||
//OrderMod.EmitShuffle = nil
|
||||
err := OrderMod.CreateNormalOrder(BaseMod.GetLevel(), ChessMod.GetOrderEmit(), BaseMod.GetEnergyMul())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
p.FormatOrderReward()
|
||||
NumMap := make(map[int]int)
|
||||
for _, v := range OrderMod.OrderList {
|
||||
NumMap[len(v.MergeId)]++
|
||||
}
|
||||
sum0 := 0
|
||||
for _, v := range NumMap {
|
||||
sum0 += v
|
||||
}
|
||||
for k, v := range NumMap {
|
||||
fmt.Printf("棋子数量: %d, 占比: %.2f%% \n", k, float64(v)/float64(sum0)*100)
|
||||
}
|
||||
DiffMap := make(map[int]int)
|
||||
for _, v := range OrderMod.OrderList {
|
||||
DiffMap[v.Diff]++
|
||||
}
|
||||
sum := 0
|
||||
for _, v := range DiffMap {
|
||||
sum += v
|
||||
}
|
||||
for k, v := range DiffMap {
|
||||
fmt.Printf("难度等级: %d, 占比: %.2f%% \n", k, float64(v)/float64(sum)*100)
|
||||
}
|
||||
AP := make(map[string]int, 0)
|
||||
BP := make(map[string]int, 0)
|
||||
for _, v := range OrderMod.OrderList {
|
||||
for _, id := range v.MergeId {
|
||||
Color := mergeDataCfg.GetColorById(id)
|
||||
if Color == "Bath Toys" {
|
||||
AP["Bath Toys"] += 1
|
||||
}
|
||||
if Color == "Cleaning Tools" {
|
||||
AP["Cleaning Tools"] += 1
|
||||
}
|
||||
if Color == "Baby Toy" {
|
||||
BP["Baby Toy"] += 1
|
||||
}
|
||||
if Color == "Books And Picture Books" {
|
||||
BP["Books And Picture Books"] += 1
|
||||
}
|
||||
}
|
||||
}
|
||||
sum1 := 0
|
||||
for _, v := range AP {
|
||||
sum1 += v
|
||||
}
|
||||
sum2 := 0
|
||||
for _, v := range BP {
|
||||
sum2 += v
|
||||
}
|
||||
for k, v := range AP {
|
||||
fmt.Printf("%s %.2f\n", k, float64(v)/float64(sum1)*100)
|
||||
}
|
||||
for k, v := range BP {
|
||||
fmt.Printf("%s %.2f\n", k, float64(v)/float64(sum2)*100)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
@ -2,7 +2,6 @@ package order
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"server/GoUtil"
|
||||
limitedTimeEventCfg "server/conf/limitedTimeEvent"
|
||||
mergeDataCfg "server/conf/mergeData"
|
||||
@ -23,11 +22,14 @@ type OrderMod struct {
|
||||
EimtOrder map[string]struct{}
|
||||
PreheatStep map[string]int // 预热订单步骤
|
||||
EmitShuffle []string // 发射器乱序
|
||||
ColorShuffle []string // 棋子系列乱序
|
||||
LastColor string // 上次生成订单的棋子系列
|
||||
ChessPool []int // 棋子池
|
||||
OrderPool map[int]*Order // 订单池
|
||||
FinishOrder []int // 已完成订单
|
||||
IsCharge bool // 是否充值
|
||||
AutoEmit []string // 自动发射器
|
||||
LastChess int // 上次生成订单的棋子
|
||||
}
|
||||
|
||||
type Order struct {
|
||||
@ -431,7 +433,18 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error {
|
||||
}
|
||||
break
|
||||
}
|
||||
log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err)
|
||||
// if len(mergeList) == 2 {
|
||||
// ColorMap := make(map[string]int)
|
||||
// for _, v := range mergeList {
|
||||
// Color := mergeDataCfg.GetColorById(v)
|
||||
// ColorMap[Color]++
|
||||
// if ColorMap[Color] > 1 {
|
||||
// log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err)
|
||||
// return fmt.Errorf("订单生成失败,重复颜色")
|
||||
// }
|
||||
// }
|
||||
|
||||
// }
|
||||
o.addOrder(mergeList, OrderDiff, Common_type)
|
||||
return nil
|
||||
}
|
||||
@ -671,7 +684,7 @@ func (o *OrderMod) Retire(EmitId string) {
|
||||
ChessPool = append(ChessPool, v)
|
||||
}
|
||||
o.ChessPool = ChessPool
|
||||
o.EmitShuffle = nil
|
||||
o.ColorShuffle = nil
|
||||
}
|
||||
|
||||
func (o *OrderMod) DelOrder(OrderId int) (*Order, error) {
|
||||
@ -710,8 +723,8 @@ func (o *OrderMod) CreateComfortOrder(lv int, Emit []int, EnergyMul, Diff, Chess
|
||||
}
|
||||
|
||||
func (o *OrderMod) ResetChessPool() {
|
||||
o.ChessPool = make([]int, 0)
|
||||
o.EmitShuffle = nil
|
||||
// o.ChessPool = make([]int, 0)
|
||||
// o.EmitShuffle = nil
|
||||
}
|
||||
|
||||
func (o *OrderMod) SetIsCharge() {
|
||||
|
||||
@ -145,6 +145,7 @@ func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int {
|
||||
func getChessLv(Min, Max, Diff int) int {
|
||||
Start := Min
|
||||
End := Max
|
||||
if Max-Min >= 5 {
|
||||
switch Diff {
|
||||
case DIFF_LOW:
|
||||
End = Min + (Max-Min+1)/3 - 1
|
||||
@ -154,6 +155,36 @@ func getChessLv(Min, Max, Diff int) int {
|
||||
case DIFF_HIGH:
|
||||
Start = Min + (Max-Min+1)/3*2
|
||||
}
|
||||
}
|
||||
if Max-Min == 2 {
|
||||
Start = Max - Diff + 1
|
||||
End = Start
|
||||
}
|
||||
if Max-Min == 3 {
|
||||
switch Diff {
|
||||
case DIFF_LOW:
|
||||
End = Min + 1
|
||||
case DIFF_MID:
|
||||
Start = Min + 2
|
||||
End = Min + 2
|
||||
case DIFF_HIGH:
|
||||
Start = Min + 3
|
||||
End = Min + 3
|
||||
}
|
||||
}
|
||||
if Max-Min == 4 {
|
||||
switch Diff {
|
||||
case DIFF_LOW:
|
||||
End = Min + 1
|
||||
case DIFF_MID:
|
||||
Start = Min + 2
|
||||
End = Min + 3
|
||||
case DIFF_HIGH:
|
||||
Start = Min + 4
|
||||
End = Min + 4
|
||||
}
|
||||
}
|
||||
|
||||
Start = max(Min, Start)
|
||||
End = max(Start, End)
|
||||
End = min(Max, End)
|
||||
@ -386,10 +417,61 @@ func filterPool(o *OrderMod) {
|
||||
o.ChessPool = NewPool
|
||||
}
|
||||
|
||||
func ShuffleColor(List []string, Last string) []string {
|
||||
Break := 0
|
||||
for {
|
||||
Break++
|
||||
if Break > 1000 {
|
||||
break
|
||||
}
|
||||
Same := false
|
||||
NewList := GoUtil.ShuffleStringArray(List)
|
||||
if NewList[0] == Last {
|
||||
continue
|
||||
}
|
||||
for i := 1; i < len(NewList); i++ {
|
||||
BeforeSries := mergeDataCfg.GetEmitTypeByColor(NewList[i-1])
|
||||
NowSries := mergeDataCfg.GetEmitTypeByColor(NewList[i])
|
||||
if BeforeSries == NowSries {
|
||||
Same = true
|
||||
break
|
||||
}
|
||||
|
||||
}
|
||||
if !Same {
|
||||
return NewList
|
||||
}
|
||||
}
|
||||
L1 := make(map[string][]string, 0)
|
||||
for _, v := range List {
|
||||
Sries := mergeDataCfg.GetEmitTypeByColor(v)
|
||||
L1[Sries] = append(L1[Sries], v)
|
||||
}
|
||||
List = make([]string, 0)
|
||||
for _, v := range L1 {
|
||||
|
||||
List = append(List, v[0])
|
||||
}
|
||||
for _, v := range L1 {
|
||||
if len(v) > 1 {
|
||||
List = append(List, v[1])
|
||||
}
|
||||
}
|
||||
for _, v := range L1 {
|
||||
if len(v) > 2 {
|
||||
List = append(List, v[2])
|
||||
}
|
||||
}
|
||||
if List[0] == Last {
|
||||
List[0], List[1] = List[1], List[0]
|
||||
}
|
||||
return List
|
||||
}
|
||||
|
||||
// 获取发射器系列
|
||||
func getEmitSeries(o *OrderMod, Emit []int) string {
|
||||
if o.EmitShuffle == nil {
|
||||
o.EmitShuffle = make([]string, 0)
|
||||
if o.ColorShuffle == nil {
|
||||
ColorShuffle := make([]string, 0)
|
||||
for _, v := range Emit {
|
||||
EmitId := mergeDataCfg.GetEmitId(v)
|
||||
if GoUtil.InStringArray(EmitId, o.AutoEmit) {
|
||||
@ -399,47 +481,27 @@ func getEmitSeries(o *OrderMod, Emit []int) string {
|
||||
if len(EmitProduct) == 0 || EmitProduct[0] == "" {
|
||||
continue
|
||||
}
|
||||
EmitSerie := mergeDataCfg.GetEmitId(v)
|
||||
if GoUtil.InStringArray(EmitSerie, o.EmitShuffle) {
|
||||
ColorShuffle = append(ColorShuffle, EmitProduct...)
|
||||
}
|
||||
o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor)
|
||||
}
|
||||
PopEmitId, NewSlice := GoUtil.PopStringArray(o.ColorShuffle)
|
||||
o.ColorShuffle = NewSlice
|
||||
o.LastColor = PopEmitId
|
||||
if len(o.ColorShuffle) == 0 {
|
||||
ColorShuffle := make([]string, 0)
|
||||
for _, v := range Emit {
|
||||
EmitId := mergeDataCfg.GetEmitId(v)
|
||||
if GoUtil.InStringArray(EmitId, o.AutoEmit) {
|
||||
continue
|
||||
}
|
||||
for i := 0; i < len(EmitProduct); i++ {
|
||||
o.EmitShuffle = append(o.EmitShuffle, EmitSerie)
|
||||
}
|
||||
}
|
||||
o.EmitShuffle = 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 {
|
||||
EmitProduct := mergeDataCfg.GetEmitProduceType(v)
|
||||
if len(EmitProduct) == 0 || EmitProduct[0] == "" {
|
||||
continue
|
||||
}
|
||||
EmitSerie := mergeDataCfg.GetEmitId(v)
|
||||
if GoUtil.InStringArray(EmitSerie, o.EmitShuffle) {
|
||||
continue
|
||||
}
|
||||
for i := 0; i < len(EmitProduct); i++ {
|
||||
o.EmitShuffle = append(o.EmitShuffle, EmitSerie)
|
||||
}
|
||||
}
|
||||
Num := 1
|
||||
for {
|
||||
if len(o.EmitShuffle) == 1 {
|
||||
break
|
||||
}
|
||||
o.EmitShuffle = GoUtil.ShuffleStringArray(o.EmitShuffle)
|
||||
if o.EmitShuffle[0] != PopEmitId {
|
||||
break
|
||||
}
|
||||
Num++
|
||||
if Num > 100 {
|
||||
break
|
||||
}
|
||||
ColorShuffle = append(ColorShuffle, EmitProduct...)
|
||||
}
|
||||
o.ColorShuffle = ShuffleColor(ColorShuffle, o.LastColor)
|
||||
}
|
||||
return PopEmitId
|
||||
}
|
||||
@ -469,19 +531,20 @@ func GetChessByDiff(EmitId, EnergyMul, Diff int, Color string) []int {
|
||||
|
||||
// 从棋子池中获取棋子
|
||||
func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int {
|
||||
EmitSeries := getEmitSeries(o, Emit)
|
||||
EmitChessId := getEmitBySeries(Emit, EmitSeries)
|
||||
ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId)
|
||||
Color := getEmitSeries(o, Emit)
|
||||
EmitChessId := getEmitBySeries(Emit, Color)
|
||||
//ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId)
|
||||
// 从棋子池中获取棋子
|
||||
MinChessId := 0
|
||||
for i, chess := range o.ChessPool {
|
||||
chessColor := mergeDataCfg.GetColorById(chess)
|
||||
if Color != chessColor {
|
||||
continue
|
||||
}
|
||||
if reflectChess[chess] > Diff {
|
||||
MinChessId = chess
|
||||
}
|
||||
if !GoUtil.InStringArray(chessColor, ColorRand) {
|
||||
continue
|
||||
}
|
||||
|
||||
ChessLv := mergeDataCfg.GetLvById(chess)
|
||||
if reflectChess[chess] == Diff && ChessLv >= EnergyMul+1 && ChessLv <= EnergyMul+12 {
|
||||
o.ChessPool = append(o.ChessPool[:i], o.ChessPool[i+1:]...)
|
||||
@ -492,25 +555,22 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in
|
||||
* 1. 选取最接近的棋子
|
||||
*/
|
||||
if MinChessId != 0 {
|
||||
MinChessColor := mergeDataCfg.GetColorById(MinChessId)
|
||||
NewEmitChessId := GetEmitByColor(Emit, MinChessColor)
|
||||
ColorRand := mergeDataCfg.GetEmitProduceType(NewEmitChessId)
|
||||
ChessMinLv, ChessMaxLv := getChesslvRange(NewEmitChessId, EnergyMul, o.IsCharge)
|
||||
ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId)
|
||||
ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge)
|
||||
NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff)
|
||||
MinChessLv := mergeDataCfg.GetLvById(MinChessId)
|
||||
NewLev2 := mergeDataCfg.DynamicLev2(NewLev, NewEmitChessId, ColorRand[0], MinChessColor)
|
||||
NewLev2 := mergeDataCfg.DynamicLev2(NewLev, EmitChessId, ColorRand[0], Color)
|
||||
NewLev3 := adjustLev(NewLev2, EnergyMul)
|
||||
o.ChessPool = GoUtil.DeleteEleByValue(o.ChessPool, MinChessId)
|
||||
for i := NewLev3; i < MinChessLv; i++ {
|
||||
ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(i, MinChessColor)
|
||||
ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(i, Color)
|
||||
if ChessId2 != 0 {
|
||||
o.ChessPool = append(o.ChessPool, ChessId2)
|
||||
}
|
||||
}
|
||||
Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, MinChessColor)
|
||||
Chess := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, Color)
|
||||
return Chess
|
||||
}
|
||||
Color := GoUtil.RandStringSlice(ColorRand)
|
||||
ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul, o.IsCharge)
|
||||
NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff)
|
||||
NewLev1 := mergeDataCfg.DynamicLev(NewLev, EmitChessId, Color)
|
||||
@ -593,7 +653,7 @@ func getEmitBySeries(EmitList []int, EmitId string) int {
|
||||
if len(ProduceColor) == 0 || ProduceColor[0] == "" {
|
||||
continue
|
||||
}
|
||||
if mergeDataCfg.GetEmitId(v) == EmitId {
|
||||
if GoUtil.InStringArray(EmitId, ProduceColor) {
|
||||
return v
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user