89 lines
2.1 KiB
Go
89 lines
2.1 KiB
Go
package chesstitians
|
|
|
|
import (
|
|
rule "mongo.games.com/game/gamerule/chess"
|
|
"mongo.games.com/game/gamesrv/base"
|
|
"mongo.games.com/game/model"
|
|
"time"
|
|
)
|
|
|
|
// PlayerEx 玩家身上的额外数据
|
|
type PlayerEx struct {
|
|
*base.Player // 玩家信息
|
|
isBlack bool // 黑棋(默认是白棋先手)
|
|
nextPlay bool // 是否再来一局
|
|
|
|
winCoin int64 // 本局赢的钱
|
|
taxCoin int64 // 本局税收
|
|
isWin int32 // 本局输赢 1赢 2输 0平
|
|
winTimes int32 // 连赢次数
|
|
otherScore int32 // 额外积分
|
|
nextRank int32 // 再赢几局晋级
|
|
winScore int32 // 本局积分变化
|
|
oldGrade int64 // 原来的积分
|
|
totalTime int64 // 下棋总时长
|
|
lastTime time.Time
|
|
}
|
|
|
|
func (p *PlayerEx) init() {
|
|
p.winCoin = 0
|
|
p.isBlack = false
|
|
p.nextPlay = false
|
|
p.oldGrade = 0
|
|
p.totalTime = 0
|
|
p.lastTime = time.Time{}
|
|
if !p.GetScene().IsMatchScene() && !p.GetScene().IsPrivateScene() { //非比赛场 非私有房间
|
|
p.LoadPlayerGameInfo(p.GetScene().KeyGameId)
|
|
}
|
|
}
|
|
|
|
func (p *PlayerEx) Clear() {
|
|
p.winCoin = 0
|
|
p.isBlack = false
|
|
p.nextPlay = false
|
|
p.oldGrade = 0
|
|
p.totalTime = 0
|
|
p.lastTime = time.Time{}
|
|
p.MarkFlag(base.PlayerState_WaitNext)
|
|
}
|
|
|
|
func (p *PlayerEx) CanOp() bool {
|
|
if p.IsGameing() {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
func (p *PlayerEx) LoadPlayerGameInfo(keyGameId string) {
|
|
if p.IsRob {
|
|
return
|
|
}
|
|
if p.GDatas == nil {
|
|
p.GDatas = make(map[string]*model.PlayerGameInfo)
|
|
}
|
|
if data, exist := p.GDatas[keyGameId]; !exist {
|
|
data = new(model.PlayerGameInfo)
|
|
data.Statics.TotalOut = 920000
|
|
data.Statics.TotalIn = 1000000
|
|
p.GDatas[keyGameId] = data
|
|
}
|
|
}
|
|
|
|
// GetTotalTime 获取玩家总下棋消耗的操作时长,单位秒
|
|
func (p *PlayerEx) GetTotalTime() int32 {
|
|
if s := p.GetScene(); s != nil && s.GetSceneState().GetState() == rule.SceneStatePlayerOp && p.IsGameing() {
|
|
if ex, ok := s.ExtraData.(*SceneEx); ok {
|
|
if ex.GetCurOpPos() == p.Pos {
|
|
return p.getTotalTime()
|
|
} else {
|
|
return int32(p.totalTime)
|
|
}
|
|
}
|
|
}
|
|
return 0
|
|
}
|
|
|
|
func (p *PlayerEx) getTotalTime() int32 {
|
|
return int32(p.totalTime + int64(time.Now().Sub(p.lastTime).Seconds()))
|
|
}
|