Merge branch 'sdk' into online
This commit is contained in:
commit
27893e8752
71
src/server/benchmark_test.go
Normal file
71
src/server/benchmark_test.go
Normal file
@ -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
|
||||||
|
}
|
||||||
@ -148,6 +148,16 @@ func GetMaxLvById(Id int) int {
|
|||||||
return gamedata.ParseInt(data["MaxLv"])
|
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获取发射器最小等级
|
// 根据Id获取发射器最小等级
|
||||||
func GetEmitMinLvById(Id string) int {
|
func GetEmitMinLvById(Id string) int {
|
||||||
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT, Id)
|
data, err := gamedata.GetDataByKey(CFG_MERGE_EMIT, Id)
|
||||||
@ -168,21 +178,6 @@ func GetEmitRatio(Id string) float64 {
|
|||||||
return gamedata.GetFloatValue(data, "Ratio")
|
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获取棋子类型
|
// 根据Id获取棋子类型
|
||||||
func GetTypeById(Id int) string {
|
func GetTypeById(Id int) string {
|
||||||
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
data, err := gamedata.GetDataByIntKey(CFG_NAME, Id)
|
||||||
|
|||||||
@ -825,3 +825,10 @@ func LoignBack(p *Player) {
|
|||||||
}
|
}
|
||||||
BaseMod.LoginBack = true
|
BaseMod.LoginBack = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Benchmark(player *Player) {
|
||||||
|
ChampshipMod := player.PlayMod.getChampshipMod()
|
||||||
|
ChampshipMod.AddScore([]int{949, 941, 10})
|
||||||
|
player.HandleInChampshipRank()
|
||||||
|
player.HandleInUserRank()
|
||||||
|
}
|
||||||
|
|||||||
@ -2257,6 +2257,7 @@ func ReqShippingOrder(args []interface{}) error {
|
|||||||
"ProductId": OrderData.ProductId,
|
"ProductId": OrderData.ProductId,
|
||||||
"CreateTime": OrderData.CreateTime,
|
"CreateTime": OrderData.CreateTime,
|
||||||
"PayTime": OrderData.PayTime,
|
"PayTime": OrderData.PayTime,
|
||||||
|
"Price": OrderData.Price,
|
||||||
"PayType": OrderData.PayType,
|
"PayType": OrderData.PayType,
|
||||||
}
|
}
|
||||||
player.Kafka("pay", orderDataMap)
|
player.Kafka("pay", orderDataMap)
|
||||||
|
|||||||
@ -2,7 +2,6 @@ package order
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"server/GoUtil"
|
"server/GoUtil"
|
||||||
startOrderCfg "server/conf/StartOrder"
|
startOrderCfg "server/conf/StartOrder"
|
||||||
limitedTimeEventCfg "server/conf/limitedTimeEvent"
|
limitedTimeEventCfg "server/conf/limitedTimeEvent"
|
||||||
@ -239,7 +238,7 @@ func (o *OrderMod) CreateNormalOrder(lv int, Emit []int, EnergyMul int) error {
|
|||||||
}
|
}
|
||||||
break
|
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)
|
o.addOrder(mergeList, OrderDiff, Common_type)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,8 +7,9 @@ import (
|
|||||||
userCfg "server/conf/user"
|
userCfg "server/conf/user"
|
||||||
)
|
)
|
||||||
|
|
||||||
var reflectChess = map[int]int{}
|
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(15 - 3*OrderN),
|
1: int(15 - 3*OrderN),
|
||||||
@ -17,6 +18,7 @@ func getChessNumRand(OrderN int) map[int]int {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据上一个订单难度和系数 生成订单难度
|
||||||
func getOrderDiffRand(Diff, OrderN int) map[int]int {
|
func getOrderDiffRand(Diff, OrderN int) map[int]int {
|
||||||
var d map[int]int
|
var d map[int]int
|
||||||
switch Diff {
|
switch Diff {
|
||||||
@ -42,6 +44,7 @@ func getOrderDiffRand(Diff, OrderN int) map[int]int {
|
|||||||
return d
|
return d
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据订单难度生成棋子难度
|
||||||
func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int {
|
func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int {
|
||||||
var rs map[int]int
|
var rs map[int]int
|
||||||
switch ChessNum {
|
switch ChessNum {
|
||||||
@ -124,6 +127,7 @@ func getChessDiff(ChessNum, OrderDiff, OrderN int) map[int]int {
|
|||||||
return rs
|
return rs
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据难度生成棋子等级
|
||||||
func getChessLv(Min, Max, Diff int) int {
|
func getChessLv(Min, Max, Diff int) int {
|
||||||
Start := Min
|
Start := Min
|
||||||
End := Max
|
End := Max
|
||||||
@ -142,35 +146,7 @@ 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 {
|
// 宝箱雨随机棋子类型
|
||||||
// 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 {
|
func RandChessColor(Emit []int) string {
|
||||||
r := make(map[string]int)
|
r := make(map[string]int)
|
||||||
for _, v := range Emit {
|
for _, v := range Emit {
|
||||||
@ -191,22 +167,7 @@ func RandChessColor(Emit []int) string {
|
|||||||
return GoUtil.RandStringMap(r)
|
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) {
|
func getChesslvRange(Emit int, EnergyMul int) (int, int) {
|
||||||
RandEmitLv := mergeDataCfg.GetLvById(Emit)
|
RandEmitLv := mergeDataCfg.GetLvById(Emit)
|
||||||
EmitId := mergeDataCfg.GetEmitId(Emit)
|
EmitId := mergeDataCfg.GetEmitId(Emit)
|
||||||
@ -219,6 +180,7 @@ func getChesslvRange(Emit int, EnergyMul int) (int, int) {
|
|||||||
return ChessMinLev, ChessMaxLev
|
return ChessMinLev, ChessMaxLev
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 根据类型获取发射器id
|
||||||
func getEmitByColor(Emit []int, color string) int {
|
func getEmitByColor(Emit []int, color string) int {
|
||||||
for _, v := range Emit {
|
for _, v := range Emit {
|
||||||
Produce := mergeDataCfg.GetEmitProduceChessType(v)
|
Produce := mergeDataCfg.GetEmitProduceChessType(v)
|
||||||
@ -231,9 +193,10 @@ 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)
|
initReflectChess(Emit, EnergyMul)
|
||||||
|
filterPool(o)
|
||||||
OrderN, err := userCfg.GetOrderNByLv(lv)
|
OrderN, err := userCfg.GetOrderNByLv(lv)
|
||||||
RandChessNum := getChessNumRand(OrderN)
|
RandChessNum := getChessNumRand(OrderN)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -250,6 +213,9 @@ func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int,
|
|||||||
ChessId := 0
|
ChessId := 0
|
||||||
for {
|
for {
|
||||||
ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul)
|
ChessId = getChessFromPoolByDiff(o, v, Emit, EnergyMul)
|
||||||
|
if ChessId == 0 {
|
||||||
|
continue
|
||||||
|
}
|
||||||
if !GoUtil.InArray(ChessId, mergeList) {
|
if !GoUtil.InArray(ChessId, mergeList) {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
@ -259,7 +225,19 @@ func randOrderChess(o *OrderMod, lv int, Emit []int, EnergyMul int) ([]int, int,
|
|||||||
return mergeList, OrderDiff, nil
|
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 {
|
if o.EmitShuffle == nil {
|
||||||
o.EmitShuffle = make([]string, 0)
|
o.EmitShuffle = make([]string, 0)
|
||||||
for _, v := range Emit {
|
for _, v := range Emit {
|
||||||
@ -301,6 +279,7 @@ func getEmitId(o *OrderMod, Emit []int) string {
|
|||||||
return PopEmitId
|
return PopEmitId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 订单能获取的宠物币
|
||||||
func getOrderStar(ChessList []int) int {
|
func getOrderStar(ChessList []int) int {
|
||||||
Star := 0
|
Star := 0
|
||||||
for _, v := range ChessList {
|
for _, v := range ChessList {
|
||||||
@ -309,9 +288,10 @@ func getOrderStar(ChessList []int) int {
|
|||||||
return Star
|
return Star
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 从棋子池中获取棋子
|
||||||
func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int {
|
func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) int {
|
||||||
EmitId := getEmitId(o, Emit)
|
EmitSeries := getEmitSeries(o, Emit)
|
||||||
EmitChessId := getEmitBySeries(Emit, EmitId)
|
EmitChessId := getEmitBySeries(Emit, EmitSeries)
|
||||||
ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId)
|
ColorRand := mergeDataCfg.GetEmitProduceType(EmitChessId)
|
||||||
// 从棋子池中获取棋子
|
// 从棋子池中获取棋子
|
||||||
MinChessId := 0
|
MinChessId := 0
|
||||||
@ -355,6 +335,8 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in
|
|||||||
ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul)
|
ChessMinLv, ChessMaxLv := getChesslvRange(EmitChessId, EnergyMul)
|
||||||
NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff)
|
NewLev := getChessLv(ChessMinLv, ChessMaxLv, Diff)
|
||||||
NewLev1 := mergeDataCfg.DynamicLev(NewLev, EmitChessId, Color)
|
NewLev1 := mergeDataCfg.DynamicLev(NewLev, EmitChessId, Color)
|
||||||
|
MaxLev := mergeDataCfg.GetMaxLvByColor(Color)
|
||||||
|
NewLev1 = min(NewLev1, MaxLev)
|
||||||
ChessId := mergeDataCfg.GetChessIdByLvAndColor(NewLev1, Color)
|
ChessId := mergeDataCfg.GetChessIdByLvAndColor(NewLev1, Color)
|
||||||
ProductColor := mergeDataCfg.GetEmitProduceType(EmitChessId)
|
ProductColor := mergeDataCfg.GetEmitProduceType(EmitChessId)
|
||||||
for _, i := range ProductColor {
|
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 := mergeDataCfg.DynamicLev2(NewLev1, EmitChessId, Color, i)
|
||||||
NewLev2 = adjustLev(NewLev2, EnergyMul)
|
NewLev2 = adjustLev(NewLev2, EnergyMul)
|
||||||
|
MaxLev := mergeDataCfg.GetMaxLvByColor(i)
|
||||||
|
NewLev2 = min(NewLev2, MaxLev)
|
||||||
ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, i)
|
ChessId2 := mergeDataCfg.GetChessIdByLvAndColor(NewLev2, i)
|
||||||
if ChessId2 != 0 {
|
if ChessId2 != 0 {
|
||||||
o.ChessPool = append(o.ChessPool, ChessId2)
|
o.ChessPool = append(o.ChessPool, ChessId2)
|
||||||
@ -375,7 +359,9 @@ func getChessFromPoolByDiff(o *OrderMod, Diff int, Emit []int, EnergyMul int) in
|
|||||||
return ChessId
|
return ChessId
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 初始化棋子难度映射表
|
||||||
func initReflectChess(Emits []int, EnergyMul int) {
|
func initReflectChess(Emits []int, EnergyMul int) {
|
||||||
|
reflectChess = make(map[int]int)
|
||||||
Start, End := 0, 0
|
Start, End := 0, 0
|
||||||
for _, Emit := range Emits {
|
for _, Emit := range Emits {
|
||||||
ProduceColor := mergeDataCfg.GetEmitProduceType(Emit)
|
ProduceColor := mergeDataCfg.GetEmitProduceType(Emit)
|
||||||
@ -413,10 +399,12 @@ func initReflectChess2(Color string, Start, End, Diff, adjust int) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 调整棋子等级
|
||||||
func adjustLev(Lev, EnergyMul int) int {
|
func adjustLev(Lev, EnergyMul int) int {
|
||||||
return max(min(Lev, EnergyMul+12), EnergyMul+1)
|
return max(min(Lev, EnergyMul+12), EnergyMul+1)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 获取发射器系列
|
||||||
func getEmitBySeries(EmitList []int, EmitId string) int {
|
func getEmitBySeries(EmitList []int, EmitId string) int {
|
||||||
for _, v := range EmitList {
|
for _, v := range EmitList {
|
||||||
ProduceColor := mergeDataCfg.GetEmitProduceType(v)
|
ProduceColor := mergeDataCfg.GetEmitProduceType(v)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user