This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user