game_sync/worldsrv/action_tournament.go

101 lines
2.7 KiB
Go

package main
import (
"mongo.games.com/goserver/core/logger"
"mongo.games.com/goserver/core/netlib"
"mongo.games.com/game/common"
"mongo.games.com/game/protocol/tournament"
)
func CSTMInfo(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSTMInfoHandler ", data)
_, ok := data.(*tournament.CSTMInfo)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warnf("CSTMInfo p == nil.")
return nil
}
pack := TournamentMgr.GetSCTMInfosPack(p.Platform, p.AppChannel)
p.SendToClient(int(tournament.TOURNAMENTID_PACKET_TM_SCTMInfos), pack)
logger.Logger.Trace("SCTMInfos ", pack)
return nil
}
func CSSignRace(s *netlib.Session, packetid int, data interface{}, sid int64) error {
logger.Logger.Trace("CSSignRaceHandler ", data)
msg, ok := data.(*tournament.CSSignRace)
if !ok {
return nil
}
p := PlayerMgrSington.GetPlayer(sid)
if p == nil {
logger.Logger.Warnf("CSSignRace p == nil.")
return nil
}
if p.scene != nil {
logger.Logger.Warnf("CSSignRace p.scene != nil.")
return nil
}
if p.IsRob {
logger.Logger.Warnf("CSSignRace p.IsRob.")
return nil
}
platform := p.Platform
tmId := msg.TMId
pack := &tournament.SCSignRace{}
switch msg.GetOpCode() {
case 0: // 报名
ok, code := TournamentMgr.SignUp(tmId, p)
if !ok {
logger.Logger.Infof("player(%v) match(%v) SignUp is fail.", p.SnId, tmId)
pack.RetCode = code //0成功 1重复报名 2比赛没有开启 3道具不足 4不在报名时间段 5金币不足 6钻石不足
}
if code == int32(tournament.SignRaceCode_OPRC_Close) ||
code == int32(tournament.SignRaceCode_OPRC_Time) {
TournamentMgr.CancelSignUpAll(platform, tmId)
}
waitStart := TournamentMgr.playerWaitStart[p.SnId]
if pack.RetCode == 0 && waitStart != 0 {
pack.WaitStartTime = waitStart
}
signSucc := p.SendToClient(int(tournament.TOURNAMENTID_PACKET_TM_SCSignRace), pack)
logger.Logger.Trace("SCSignRace ", pack)
// 检查是否可以开始比赛(关闭机器人时,比赛开赛)
if code == 0 && signSucc && !TournamentMgr.IsUseRobot(platform, tmId) {
if TournamentMgr.CanStart(platform, tmId) {
TournamentMgr.Start(platform, tmId)
}
}
default: // 取消报名
if TournamentMgr.IsMatching(p.SnId) {
logger.Logger.Warnf("player(%v) IsMatching.", p.SnId)
} else {
//取消报名
TournamentMgr.CancelSignUp(platform, tmId, p.SnId)
}
return nil
}
return nil
}
func init() {
// 比赛信息列表
common.Register(int(tournament.TOURNAMENTID_PACKET_TM_CSTMInfo), tournament.CSTMInfo{}, CSTMInfo)
// 比赛报名
common.Register(int(tournament.TOURNAMENTID_PACKET_TM_CSSignRace), tournament.CSSignRace{}, CSSignRace)
}