1
Some checks failed
ci/woodpecker/push/my-first-workflow Pipeline failed

This commit is contained in:
昔念
2026-04-27 19:42:05 +08:00
parent 45f1485a11
commit deae6d371e
7 changed files with 20 additions and 17 deletions

View File

@@ -325,10 +325,7 @@ func (p *ClientData) GetPlayer(userid uint32) *Player { //TODO 这里待优化,
if p.Player == nil {
p.Player = NewPlayer(p.Conn)
}
_, ok := Mainplayer.LoadOrStore(userid, p)
if !ok {
p.Player = NewPlayer(p.Conn)
}
Mainplayer.Store(userid, p)
return p.Player
// return nil

View File

@@ -482,8 +482,8 @@ func (player1 *Player) Kick(isquit bool) {
case <-time.After(kickTimeout):
timeout = true
}
player1.SaveOnDisconnect()
if timeout {
player1.SaveOnDisconnect()
service.NewBaseSysLogService().RecordKick(uint32(player1.Info.UserID), fmt.Sprintf("踢人操作超时(超时时间:%v", kickTimeout))
}
}

View File

@@ -19,9 +19,10 @@ func (p *Player) Save() {
return
}
userID := p.Info.UserID
cacheCtx, cancel := context.WithTimeout(context.Background(), 2*time.Second)
defer cancel()
cool.CacheManager.Remove(cacheCtx, fmt.Sprintf("player:%d", p.Info.UserID))
cool.CacheManager.Remove(cacheCtx, fmt.Sprintf("player:%d", userID))
newtime := time.Now().Unix()
if p.Logintime > 0 {
onlineSeconds := newtime - int64(p.Logintime)
@@ -51,7 +52,7 @@ func (p *Player) Save() {
select {
case <-p.FightC.GetOverChan(): //等待结束
case <-time.After(time.Second * 5): //等待5秒
cool.Logger.Error(context.TODO(), "战斗崩溃", p.Info.UserID)
cool.Logger.Error(context.TODO(), "战斗崩溃", userID)
}
@@ -60,14 +61,20 @@ func (p *Player) Save() {
if p.Service != nil && p.Service.Info != nil {
p.Service.Info.SaveUntilSuccess(*p.Info)
} else {
cool.Logger.Error(context.TODO(), "player save skipped: service not ready", p.Info.UserID)
cool.Logger.Error(context.TODO(), "player save skipped: service not ready", userID)
}
space.GetSpace(p.Info.MapID).LeaveMap(p)
p.MapNPC.Stop() //停止刷怪
Mainplayer.Delete(p.Info.UserID)
share.ShareManager.DeleteUserOnline(p.Info.UserID) //设置用户登录服务器
shouldClearOnline := true
if currentClient, ok := Mainplayer.Load(userID); ok && currentClient != nil && currentClient.Player != p {
shouldClearOnline = false
}
if shouldClearOnline {
Mainplayer.Delete(userID)
share.ShareManager.DeleteUserOnline(userID) //设置用户登录服务器
}
p.Logintime = 0
}