Merge branch 'develop' into sdk

This commit is contained in:
hahwu 2025-01-17 16:50:52 +08:00
commit 550330da90
6 changed files with 128 additions and 67 deletions

View 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
}

View File

@ -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)

View File

@ -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()
}

View File

@ -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)

View File

@ -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
}

View File

@ -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)