diff --git a/src/server/benchmark_test.go b/src/server/benchmark_test.go new file mode 100644 index 00000000..8f6defb1 --- /dev/null +++ b/src/server/benchmark_test.go @@ -0,0 +1,71 @@ +package main + +import ( + "fmt" + "runtime" + "server/game" + "server/game/mod/msg" + "testing" + "time" +) + +// func TestBenchInit(t *testing.T) { +// f := "wmz00%d" +// for i := 0; i < 10000; i++ { +// UserName := fmt.Sprintf(f, i) +// game.G_GameLogicPtr.Db_AccountInfo.UserName = UserName +// game.G_GameLogicPtr.Db_AccountInfo.UserPassword = "123456" +// if game.G_GameLogicPtr.NewAccountInsertDataToDB() { +// fmt.Printf("UserName:%s\n init success", UserName) +// } +// } +// } +func BenchmarkGame(b *testing.B) { + runtime.GOMAXPROCS(2) + fmt.Print("BenchmarkGame") + f := "wmz00%d" + for i := 0; i < 10000; i++ { + go func() { + UserName := fmt.Sprintf(f, i) + p1 := new(game.Player) + err := p1.InitPlayer(UserName) + if err != nil { + fmt.Println(err) + } + game.G_GameLogicPtr.SetPlayer(p1) + for { + time.Sleep(1 * time.Second) + game.Benchmark(p1) + } + }() + } + go func() { + time.Sleep(20 * time.Second) + game.G_GameLogicPtr.ChampshipMgrSend(&msg.Msg{ + Type: msg.HANDLE_TYPE_CHAMPSHIP_GROUP, + }) + }() + for { + time.Sleep(1 * time.Second) + printMemUsage() + } +} +func printMemUsage() { + var m runtime.MemStats + runtime.ReadMemStats(&m) + // 输出内存使用情况 + fmt.Printf("Alloc = %v MiB", bToMb(m.Alloc)) + fmt.Printf("\tTotalAlloc = %v MiB", bToMb(m.TotalAlloc)) + fmt.Printf("\tSys = %v MiB", bToMb(m.Sys)) + fmt.Printf("\tNumGC = %v\n", m.NumGC) + var playerCount int + game.G_GameLogicPtr.M_Players.Range(func(key, value interface{}) bool { + playerCount++ + return true + }) + fmt.Printf("\tPlayerNum = %v\n", playerCount) +} + +func bToMb(b uint64) uint64 { + return b / 1024 / 1024 +} diff --git a/src/server/conf/mergeData/MergeDataCfg.go b/src/server/conf/mergeData/MergeDataCfg.go index 9d7e8543..c61f4936 100644 --- a/src/server/conf/mergeData/MergeDataCfg.go +++ b/src/server/conf/mergeData/MergeDataCfg.go @@ -148,6 +148,16 @@ func GetMaxLvById(Id int) int { return gamedata.ParseInt(data["MaxLv"]) } +// 根据Id获取棋子最大等级 +func GetMaxLvByColor(Color string) int { + ChessId := GetChessIdByLvAndColor(1, Color) + data, err := gamedata.GetDataByIntKey(CFG_NAME, ChessId) + if err != nil { + return 0 + } + return gamedata.ParseInt(data["MaxLv"]) +} + // 根据Id获取发射器最小等级 func GetEmitMinLvById(Id string) int { data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT, Id) @@ -168,21 +178,6 @@ func GetEmitRatio(Id string) float64 { return gamedata.GetFloatValue(data, "Ratio") } -func GetMaxLvByColor(Color string) int { - data, err := gamedata.GetData(CFG_NAME) - if err != nil { - log.Debug("GetMaxLvByColor GetOne Color:%v not found", Color) - return 0 - } - for _, v := range data { - if gamedata.GetStringValue(v, "Color") == Color { - lv := gamedata.GetIntValue(v, "MaxLv") - return lv - } - } - return 0 -} - // 根据Id获取棋子类型 func GetTypeById(Id int) string { data, err := gamedata.GetDataByIntKey(CFG_NAME, Id) diff --git a/src/server/game/PlayerFunc.go b/src/server/game/PlayerFunc.go index e7ceb41c..31a4f106 100644 --- a/src/server/game/PlayerFunc.go +++ b/src/server/game/PlayerFunc.go @@ -825,3 +825,10 @@ func LoignBack(p *Player) { } BaseMod.LoginBack = true } + +func Benchmark(player *Player) { + ChampshipMod := player.PlayMod.getChampshipMod() + ChampshipMod.AddScore([]int{949, 941, 10}) + player.HandleInChampshipRank() + player.HandleInUserRank() +} diff --git a/src/server/game/RegisterNetworkFunc.go b/src/server/game/RegisterNetworkFunc.go index 537b8637..93ddab00 100644 --- a/src/server/game/RegisterNetworkFunc.go +++ b/src/server/game/RegisterNetworkFunc.go @@ -2257,6 +2257,7 @@ func ReqShippingOrder(args []interface{}) error { "ProductId": OrderData.ProductId, "CreateTime": OrderData.CreateTime, "PayTime": OrderData.PayTime, + "Price": OrderData.Price, "PayType": OrderData.PayType, } player.Kafka("pay", orderDataMap) diff --git a/src/server/game/mod/order/Order.go b/src/server/game/mod/order/Order.go index e623444c..b7ed1991 100644 --- a/src/server/game/mod/order/Order.go +++ b/src/server/game/mod/order/Order.go @@ -2,7 +2,6 @@ package order import ( "fmt" - "log" "server/GoUtil" startOrderCfg "server/conf/StartOrder" limitedTimeEventCfg "server/conf/limitedTimeEvent" @@ -239,7 +238,7 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error { } break } - log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) + // log.Printf("CreateNormalOrder: %v, %v, %v", mergeList, OrderDiff, err) o.addOrder(mergeList, OrderDiff, Common_type) return nil } diff --git a/src/server/game/mod/order/OrderFunc.go b/src/server/game/mod/order/OrderFunc.go index d6f4935a..ccf49c71 100644 --- a/src/server/game/mod/order/OrderFunc.go +++ b/src/server/game/mod/order/OrderFunc.go @@ -7,8 +7,9 @@ import ( userCfg "server/conf/user" ) -var reflectChess = map[int]int{} +var reflectChess = map[int]int{} // 棋子难度映射表 +// 订单棋子数量 func getChessNumRand(OrderN int) map[int]int { return map[int]int{ 1: int(15 - 3*OrderN), @@ -17,6 +18,7 @@ func getChessNumRand(OrderN int) map[int]int { } } +// 根据上一个订单难度和系数 生成订单难度 func getOrderDiffRand(Diff, OrderN int) map[int]int { var d map[int]int switch Diff { @@ -42,6 +44,7 @@ func getOrderDiffRand(Diff, OrderN int) map[int]int { return d } +// 根据订单难度生成棋子难度 func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int { var rs map[int]int switch ChessNum { @@ -124,6 +127,7 @@ func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int { return rs } +// 根据难度生成棋子等级 func getChessLv(Min, Max, Diff int) int { Start := Min End := Max @@ -142,35 +146,7 @@ func getChessLv(Min, Max, Diff int) int { return GoUtil.RandNum(Start, End) } -// func getRandChessColorList(o *OrderMod, Emit []int, EnergyMul int) map[string]int { -// r := make(map[string]int) -// ChessList := make([]int, 0) -// for _, v := range o.OrderList { -// if v.Type == Common_type { -// ChessList = append(ChessList, v.MergeId...) -// } -// } -// for _, v := range Emit { -// Produce := mergeDataCfg.GetEmitProduceType(v) -// if len(Produce) == 0 { -// continue -// } -// if len(Produce) == 1 { -// if Produce[0] == "" { -// continue -// } -// r[Produce[0]] = 100 -// continue -// } -// r[Produce[0]] = 80 -// r[Produce[1]] = 20 -// if checkA1High(ChessList, v, EnergyMul) { -// r[Produce[1]] += 20 -// } -// } -// return r -// } - +// 宝箱雨随机棋子类型 func RandChessColor(Emit []int) string { r := make(map[string]int) for _, v := range Emit { @@ -191,22 +167,7 @@ func RandChessColor(Emit []int) string { return GoUtil.RandStringMap(r) } -// func checkA1High(ChessList []int, Emit int, EnergyMul int) bool { -// ChessMinLev, ChessMaxLev := getChesslvRange(Emit, EnergyMul) -// HighLv := ChessMinLev + ((ChessMaxLev-ChessMinLev)/3)*2 -// Produce := mergeDataCfg.GetEmitProduceChessType(Emit) -// for _, v := range ChessList { -// ChessColor := mergeDataCfg.GetColorById(v) -// if ChessColor == Produce[0] { -// ChessLv := mergeDataCfg.GetLvById(v) -// if ChessLv >= HighLv { -// return true -// } -// } -// } -// return false -// } - +// 获取棋子等级范围 func getChesslvRange(Emit int, EnergyMul int) (int, int) { RandEmitLv := mergeDataCfg.GetLvById(Emit) EmitId := mergeDataCfg.GetEmitId(Emit) @@ -219,6 +180,7 @@ func getChesslvRange(Emit int, EnergyMul int) (int, int) { return ChessMinLev, ChessMaxLev } +// 根据类型获取发射器id func getEmitByColor(Emit []int, color string) int { for _, v := range Emit { Produce := mergeDataCfg.GetEmitProduceChessType(v) @@ -231,9 +193,10 @@ func getEmitByColor(Emit []int, color string) int { return 0 } -// 生成订单 +// 随机生成订单棋子 func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int, error) { initReflectChess(Emit, EnergyMul) + filterPool(o) OrderN, err := userCfg.GetOrderNByLv(lv) RandChessNum := getChessNumRand(OrderN) if err != nil { @@ -250,6 +213,9 @@ func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int, ChessId := 0 for { ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul) + if ChessId == 0 { + continue + } if !GoUtil.InArray(ChessId, mergeList) { break } @@ -259,7 +225,19 @@ func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int, return mergeList, OrderDiff, nil } -func getEmitId(o *OrderMod, Emit []int) string { +// 筛选棋子池 从中剔除不符合难度的棋子 +func filterPool(o *OrderMod) { + NewPool := make([]int, 0) + for _, v := range o.ChessPool { + if _, ok := reflectChess[v]; ok { + NewPool = append(NewPool, v) + } + } + o.ChessPool = NewPool +} + +// 获取发射器系列 +func getEmitSeries(o *OrderMod, Emit []int) string { if o.EmitShuffle == nil { o.EmitShuffle = make([]string, 0) for _, v := range Emit { @@ -301,6 +279,7 @@ func getEmitId(o *OrderMod, Emit []int) string { return PopEmitId } +// 订单能获取的宠物币 func getOrderStar(ChessList []int) int { Star := 0 for _, v := range ChessList { @@ -309,9 +288,10 @@ func getOrderStar(ChessList []int) int { return Star } +// 从棋子池中获取棋子 func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int { - EmitId := getEmitId(o, Emit) - EmitChessId := getEmitBySeries(Emit, EmitId) + EmitSeries := getEmitSeries(o, Emit) + EmitChessId := getEmitBySeries(Emit, EmitSeries) ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId) // 从棋子池中获取棋子 MinChessId := 0 @@ -355,6 +335,8 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul) NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff) NewLev1 := mergeDataCfg.DynamicLev(NewLev, EmitChessId, Color) + MaxLev := mergeDataCfg.GetMaxLvByColor(Color) + NewLev1 = min(NewLev1, MaxLev) ChessId := mergeDataCfg.GetChessIdByLvAndColor(NewLev1, Color) ProductColor := mergeDataCfg.GetEmitProduceType(EmitChessId) for _, i := range ProductColor { @@ -363,6 +345,8 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in } NewLev2 := mergeDataCfg.DynamicLev2(NewLev1, EmitChessId, Color, i) NewLev2 = adjustLev(NewLev2, EnergyMul) + MaxLev := mergeDataCfg.GetMaxLvByColor(i) + NewLev2 = min(NewLev2, MaxLev) ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, i) if ChessId2 != 0 { o.ChessPool = append(o.ChessPool, ChessId2) @@ -375,7 +359,9 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in return ChessId } +// 初始化棋子难度映射表 func initReflectChess(Emits []int, EnergyMul int) { + reflectChess = make(map[int]int) Start, End := 0, 0 for _, Emit := range Emits { ProduceColor := mergeDataCfg.GetEmitProduceType(Emit) @@ -413,10 +399,12 @@ func initReflectChess2(Color string, Start, End, Diff, adjust int) { } } +// 调整棋子等级 func adjustLev(Lev, EnergyMul int) int { return max(min(Lev, EnergyMul+12), EnergyMul+1) } +// 获取发射器系列 func getEmitBySeries(EmitList []int, EmitId string) int { for _, v := range EmitList { ProduceColor := mergeDataCfg.GetEmitProduceType(v)