75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
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 { // 恢复 panic,err 为 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
|
||
}
|