diff --git a/src/server/conf/server.json b/src/server/conf/server.json index 782ff82b..decddb79 100644 --- a/src/server/conf/server.json +++ b/src/server/conf/server.json @@ -1,5 +1,5 @@ { - "AppID": 1, + "AppID": 0, "LogLevel": "debug", "LogPath": "./log", "TCPAddr": ":3601", @@ -9,7 +9,7 @@ "MySqlUsr": "root", "MySqlPwd": "IOagNEq3C84c-20CmHEin5iODVc=", "MaxConnNum": 20000, - "DbName": "Merge_Pet_1", + "DbName": "merge_pet_1", "HttpPort": ":8081", "AppPath": "./app", "TELOGDIR" : "./teLog/", diff --git a/src/server/game/external.go b/src/server/game/external.go index 7e7c3709..6a9125e2 100644 --- a/src/server/game/external.go +++ b/src/server/game/external.go @@ -197,6 +197,7 @@ func HandleClientReq(args []interface{}) { default: p, ok := internal.Agents.Load(a) if ok && p != G_GameLogicPtr.NotInitPlayer { + now := time.Now().UnixMilli() p.(*Player).lock.Lock() //加锁 backup := p.(*Player).BackUp() // 备份当前的 Player 值 defer func() { @@ -217,6 +218,10 @@ func HandleClientReq(args []interface{}) { return } p.(*Player).ProcessTrigger() + execTime := time.Now().UnixMilli() - now + if execTime > int64(1) { + log.Warn("uid : %d, func : %s, execTime : %d ms", p.(*Player).M_DwUin, m.GetFunc(), execTime) + } } } p, b := internal.Agents.Load(a) diff --git a/src/server/game/log_mgr.go b/src/server/game/log_mgr.go index e30a375b..825bedfc 100644 --- a/src/server/game/log_mgr.go +++ b/src/server/game/log_mgr.go @@ -197,6 +197,7 @@ func (L *LogMgr) InitManager() { } func (L *LogMgr) AddLog(logs *Log) { + return // 复制结构体和 Param map,避免并发修改导致 json.Marshal 时 panic copyLog := *logs diff --git a/src/server/game/mod/decorate/Decorate.go b/src/server/game/mod/decorate/Decorate.go index dcbf187d..9ef2754b 100644 --- a/src/server/game/mod/decorate/Decorate.go +++ b/src/server/game/mod/decorate/Decorate.go @@ -41,6 +41,12 @@ func (d *Decorate) InitData() { if len(d.PartCost) == 0 { d.initPartCost(d.AreaId) } + for k := range d.PartCost { + AreaId := decorateCfg.GetAreaId(k) + if AreaId != d.AreaId { + delete(d.PartCost, k) + } + } } // 装饰 @@ -156,9 +162,16 @@ func (d *Decorate) DecorateAll(Star int, DecorateOffIsExist bool) ([]*item.Item, d.Progress = 0 d.FinishList = make(map[int]struct{}) } + for k := range d.PartCost { + AreaId := decorateCfg.GetAreaId(k) + if AreaId != d.AreaId { + delete(d.PartCost, k) + } + } if len(d.PartCost) == 0 { d.initPartCost(d.AreaId) } + SubItems = append(SubItems, item.NewItem(item.ITEM_STAR_ID, SubItem)) return SubItems, AddItem, Num, DecorateList, Log, PetExp } diff --git a/src/server/game/player_data.go b/src/server/game/player_data.go index ffdd5a3c..8a25bec3 100644 --- a/src/server/game/player_data.go +++ b/src/server/game/player_data.go @@ -1063,7 +1063,8 @@ func (p *Player) TeLog(Type string, Param map[string]interface{}) { //Param["#zone_offset"] = -5 // 游戏内TE日志 BaseMod := p.PlayMod.getBaseMod() - go telog.Te.Track(BaseMod.Account, BaseMod.Account, Type, Param) + UidStr := GoUtil.String(p.M_DwUin) + go telog.Te.Track(BaseMod.Account, UidStr, Type, Param) //途游GA go ga.GAlogEvent(Type, BaseMod.Account, "", Param) } diff --git a/src/server/pkg/github.com/name5566/leaf/log/log.go b/src/server/pkg/github.com/name5566/leaf/log/log.go index ffde67a9..bc1c9774 100644 --- a/src/server/pkg/github.com/name5566/leaf/log/log.go +++ b/src/server/pkg/github.com/name5566/leaf/log/log.go @@ -18,8 +18,8 @@ const ( releaseLevel = 1 errorLevel = 2 fatalLevel = 3 - - DEBUG_LEVEL = 0 + warnLevel = 4 + DEBUG_LEVEL = 0 ) const ( @@ -27,6 +27,7 @@ const ( printReleaseLevel = "[release] " printErrorLevel = "[error ] " printFatalLevel = "[fatal ] " + printWarnLevel = "[warn ] " ) type Logger struct { @@ -52,6 +53,8 @@ func New(strLevel string, pathname string, flag int) (*Logger, error) { level = errorLevel case "fatal": level = fatalLevel + case "warn": + level = warnLevel default: return nil, errors.New("unknown level: " + strLevel) } @@ -100,6 +103,8 @@ func NewDailyLog(now time.Time, Level int, pathname string, flag int) error { level = errorLevel case fatalLevel: level = fatalLevel + case warnLevel: + level = warnLevel default: return fmt.Errorf("unknown level: %d", Level) } @@ -145,6 +150,8 @@ func BindLoggerToFile(strLevel string, pathName string, flag int) (*Logger, erro level = errorLevel case "fatal": level = fatalLevel + case "warn": + level = warnLevel default: return nil, errors.New("unknown level: " + strLevel) } @@ -207,6 +214,9 @@ func (logger *Logger) Error(format string, a ...interface{}) { func (logger *Logger) Fatal(format string, a ...interface{}) { logger.doPrintf(fatalLevel, printFatalLevel, format, a...) } +func (logger *Logger) Warn(format string, a ...interface{}) { + logger.doPrintf(warnLevel, printWarnLevel, format, a...) +} // It's dangerous to call the method on logging func Export(logger *Logger) { @@ -235,6 +245,15 @@ func Release(format string, a ...interface{}) { gLogger.doPrintf(releaseLevel, printReleaseLevel, format, a...) } +func Warn(format string, a ...interface{}) { + gloggerLock.Lock() + defer gloggerLock.Unlock() + if gLogger == nil { + return + } + gLogger.doPrintf(warnLevel, printWarnLevel, format, a...) +} + func Error(format string, a ...interface{}) { gloggerLock.Lock() defer gloggerLock.Unlock() diff --git a/src/server/test/conf/server.json b/src/server/test/conf/server.json index c6779e49..b1a8388a 100644 --- a/src/server/test/conf/server.json +++ b/src/server/test/conf/server.json @@ -1,5 +1,5 @@ { - "AppID": 1, + "AppID": 0, "LogLevel": "debug", "LogPath": "./log", "TCPAddr": ":3601", @@ -9,7 +9,7 @@ "MySqlUsr": "root", "MySqlPwd": "IOagNEq3C84c-20CmHEin5iODVc=", "MaxConnNum": 20000, - "DbName": "Merge_Pet_1", + "DbName": "merge_pet_1", "HttpPort": ":8081", "AppPath": "./app", "TELOGDIR" : "./teLog/", diff --git a/src/server/test/fix_test.go b/src/server/test/fix_test.go index 4898481f..0a4da88d 100644 --- a/src/server/test/fix_test.go +++ b/src/server/test/fix_test.go @@ -2,6 +2,7 @@ package test import ( "server/game" + "server/pkg/github.com/name5566/leaf/log" "testing" ) @@ -19,3 +20,30 @@ func TestFixDecorate(t *testing.T) { DecorateMod.Progress = 22 p.FixDecorate() } + +func TestFixUserData(t *testing.T) { + log.Warn("hello world") + // type account struct { + // Account string `db:"user_name"` + // } + // var accounts []account + // err := db.SqlDb.Select(&accounts, "SELECT `user_name` FROM t_account ") + // if err != nil { + // t.Errorf("Failed to fetch accounts: %v", err) + // return + // } + // for _, acc := range accounts { + // p := new(game.Player) + // p.InitPlayer(acc.Account) + // DecorateMod := p.GetDecorateMod() + // if DecorateMod.PartCost == nil { + // continue + // } + // for k := range DecorateMod.PartCost { + // AreaId := decorateCfg.GetAreaId(k) + // if AreaId != DecorateMod.AreaId { + // fmt.Printf("Fixing account: %s, PartId: %d, OldAreaId: %d, NewAreaId: %d\n", acc.Account, k, AreaId, DecorateMod.AreaId) + // } + // } + // } +}