Files
bl/logic/service/player/save.go
2026-01-27 06:40:49 +00:00

75 lines
1.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package player
import (
"blazing/common/data/share"
"blazing/cool"
"fmt"
"blazing/logic/service/space"
"context"
"time"
)
// Save 保存玩家数据
func (p *Player) Save() {
cool.CacheManager.Remove(context.TODO(), fmt.Sprintf("player:%d", p.Info.UserID))
if cool.Config.ServerInfo.IsVip != 0 {
cool.Logger.Info(context.TODO(), "测试服不保存玩家数据", p.Info.UserID)
return
}
if p.Info == nil {
return
}
// if p.FightC != nil {
// //ov := make(chan struct{})
// go func() {
// defer func() {
// if err := recover(); err != nil { // 恢复 panicerr 为 panic 错误值
// // 1. 打印错误信息
// cool.Logger.Error(context.TODO(), "panic 错误:", err)
// }
// }()
// p.FightC.Over(p, info.BattleOverReason.PlayerOffline) //玩家逃跑,但是不能锁线程
// }()
// //<-ov
// select {
// case <-p.FightC.GetOverChan(): //等待结束
// case <-time.After(time.Second * 5): //等待5秒
// cool.Logger.Error(context.TODO(), "战斗崩溃", p.Info.UserID)
// }
// }
newtime := uint32(time.Now().Unix())
p.Info.TimeToday = p.Info.TimeToday + newtime - uint32(p.Logintime) //保存电池时间
p.Info.OnlineTime = p.Info.OnlineTime + (newtime-uint32(p.Logintime))/60 //每次退出时候保存已经在线的分钟数
p.Service.Info.Save(*p.Info)
space.GetSpace(p.Info.MapID).LeaveMap(p)
p.MapNPC.Stop() //停止刷怪
Mainplayer.Delete(p.Info.UserID)
share.ShareManager.DeleteUserOnline(p.Info.UserID) //设置用户登录服务器
}
// 是否可以获得经验
func (p *Player) CanGetExp() bool {
if p.Info.TimeToday >= p.Info.TimeLimit {
return false
}
ttt := p.Info.TimeLimit - p.Info.TimeToday
return (uint32(time.Now().Unix()) - uint32(p.Logintime)) <= ttt
}